From 975e694b7f981b68aa5d43738a44c1b193c2181b Mon Sep 17 00:00:00 2001 From: skerbis <791247+skerbis@users.noreply.github.com> Date: Mon, 10 Aug 2026 07:15:57 +0000 Subject: [PATCH 1/4] chore: Adminer vendor 5.5.1 -> 6.0.0 (AddOn 3.5.5 -> 3.5.6) --- CHANGELOG.md | 6 + package.yml | 4 +- vendor/adminer.php | 5562 ++++++++++++++++++++++---------------------- 3 files changed, 2786 insertions(+), 2786 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index caa96eb..e3b6b7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +Version 3.5.6 +----------------------- + +Vendor-Update 5.5.1 → 6.0.0 + + Version 3.5.4 ----------------------- diff --git a/package.yml b/package.yml index 4b4eaa1..2f18629 100755 --- a/package.yml +++ b/package.yml @@ -1,6 +1,6 @@ package: adminer -version: '3.5.5' -vendor: '5.5.1 adminer' +version: '3.5.6' +vendor: '6.0.0 adminer' author: Friends Of REDAXO supportpage: https://github.com/FriendsOfREDAXO/adminer diff --git a/vendor/adminer.php b/vendor/adminer.php index 37a113e..0c16720 100644 --- a/vendor/adminer.php +++ b/vendor/adminer.php @@ -5,158 +5,176 @@ * @copyright 2007 Jakub Vrana * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other) -* @version 5.5.1 +* @version 6.0.0 */namespace Adminer;const -VERSION="5.5.1";error_reporting(24575);set_error_handler(function($uc,$wc){return!!preg_match('~^Undefined (array key|offset|index)~',$wc);},E_WARNING|E_NOTICE);$Sc=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($Sc||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Li=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Li)$$X=$Li;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function +VERSION="6.0.0";error_reporting(24575);set_error_handler(function($Fc,$Hc){return!!preg_match('~^Undefined (array key|offset|index)~',$Hc);},E_WARNING|E_NOTICE);$id=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($id||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$Ej=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Ej)$$X=$Ej;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function connection($f=null){return($f?:Db::$instance);}function adminer(){return Adminer::$instance;}function driver(){return Driver::$instance;}function -connect(){$yb=adminer()->credentials();$J=Driver::connect($yb[0],$yb[1],$yb[2]);return(is_object($J)?$J:null);}function -idf_unescape($t){if(!preg_match('~^[`\'"[]~',$t))return$t;$te=substr($t,-1);return -str_replace($te.$te,$te,substr($t,1,-1));}function +connect(){$Cb=adminer()->credentials();$J=Driver::connect($Cb[0],$Cb[1],$Cb[2]);return(is_object($J)?$J:null);}function +idf_unescape($u){if(!preg_match('~^[`\'"[]~',$u))return$u;$Re=substr($u,-1);return +str_replace($Re.$Re,$Re,substr($u,1,-1));}function q($Q){return connection()->quote($Q);}function -idx($ua,$w,$j=null){return($ua&&array_key_exists($w,$ua)?$ua[$w]:$j);}function +idx($wa,$x,$j=null){return($wa&&array_key_exists($x,$wa)?$wa[$x]:$j);}function number($X){return preg_replace('~[^0-9]+~','',$X);}function -number_type(){return'((?$X)$J[stripslashes($w)]=(is_array($X)?remove_slashes($X,$Sc):($Sc?$X:stripslashes($X)));return$J;}function -bracket_escape($t,$Ca=false){static$zi=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return -strtr($t,($Ca?array_flip($zi):$zi));}function -min_version($ej,$Ke="",$f=null){$f=connection($f);$vh=$f->server_info;if($Ke&&preg_match('~([\d.]+)-MariaDB~',$vh,$A)){$vh=$A[1];$ej=$Ke;}return$ej&&version_compare($vh,$ej)>=0;}function +int_type(){return'(tiny|small|medium|big)?int(eger|\d)?';}function +number_type(){return'(^('.int_type().'|decimal|numeric|real|(binary_|half_|scaled_)?float\d?|(binary_)?double( precision)?|(small)?money)$)';}function +remove_slashes(array$Wj,$id=false){$J=array();foreach($Wj +as$x=>$X)$J[stripslashes($x)]=(is_array($X)?remove_slashes($X,$id):($id?$X:stripslashes($X)));return$J;}function +bracket_escape($u,$Ea=false){static$pj=array(':'=>':1',']'=>':2','['=>':3','"'=>':4','='=>':5');return +strtr($u,($Ea?array_flip($pj):$pj));}function +url_escape($Q){static$pj=array();if(!$pj){$pj=array(' '=>'+');foreach(str_split("\"'<>#%&+=?".ini_get("arg_separator.input"))as$Ua)$pj[$Ua]=sprintf('%%%02X',ord($Ua));for($s=0;$s<256;$s++){if($s<32||$s>126)$pj[chr($s)]=sprintf('%%%02X',$s);}}return +strtr((string)$Q,$pj);}function +min_version($Zj,$kf="",$f=null){$f=connection($f);$ii=$f->server_info;if($kf&&preg_match('~([\d.]+)-MariaDB~',$ii,$B)){$ii=$B[1];$Zj=$kf;}return$Zj&&version_compare($ii,$Zj)>=0;}function charset(Db$e){return(min_version("5.5.3",0,$e)?"utf8mb4":"utf8");}function -ini_set($Nf,$Y){return(function_exists('ini_set')?\ini_set($Nf,$Y):false);}function -ini_bool($Td){$X=ini_get($Td);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function -ini_bytes($Td){$X=ini_get($Td);switch(strtolower(substr($X,-1))){case'g':$X=(int)$X*1024;case'm':$X=(int)$X*1024;case'k':$X=(int)$X*1024;}return$X;}function +ini_set($ug,$Y){return(function_exists('ini_set')?\ini_set($ug,$Y):false);}function +ini_bool($qe){$X=ini_get($qe);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function +ini_bytes($qe){$X=ini_get($qe);switch(strtolower(substr($X,-1))){case'g':$X=(int)$X*1024;case'm':$X=(int)$X*1024;case'k':$X=(int)$X*1024;}return$X;}function +max_input_vars($K,$Gg){$nf=(int)ini_get("max_input_vars");return($nf?(int)floor(($nf-$Gg)/$K):0);}function +max_input_vars_error(){$qe="max_input_vars";return +lang(0,"$qe = ".ini_get($qe)."");}function sid(){static$J;if($J===null)$J=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$J;}function -set_password($dj,$N,$V,$F){$_SESSION["pwds"][$dj][$N][$V]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function +set_password($Yj,$N,$V,$Xg){$_SESSION["pwds"][$Yj][$N][$V]=($_COOKIE["adminer_key"]&&is_string($Xg)?array(encrypt_string($Xg,$_COOKIE["adminer_key"])):$Xg);}function get_password(){$J=get_session("pwds");if(is_array($J))$J=($_COOKIE["adminer_key"]?decrypt_string($J[0],$_COOKIE["adminer_key"]):false);return$J;}function -get_val($H,$l=0,$ob=null){$ob=connection($ob);$I=$ob->query($H);if(!is_object($I))return +get_val($H,$l=0,$rb=null){$rb=connection($rb);$I=$rb->query($H);if(!is_object($I))return false;$K=$I->fetch_row();return($K?$K[$l]:false);}function -get_vals($H,$b=0){$J=array();$I=connection()->query($H);if(is_object($I)){while($K=$I->fetch_row())$J[]=$K[$b];}return$J;}function -get_key_vals($H,$f=null,$yh=true){$f=connection($f);$J=array();$I=$f->query($H);if(is_object($I)){while($K=$I->fetch_row()){if($yh)$J[$K[0]]=$K[1];else$J[]=$K[0];}}return$J;}function -get_rows($H,$f=null,$k="

"){$ob=connection($f);$J=array();$I=$ob->query($H);if(is_object($I)){while($K=$I->fetch_assoc())$J[]=$K;}elseif(!$I&&!$f&&$k&&(defined('Adminer\PAGE_HEADER')||$k=="-- "))echo$k.error()."\n";return$J;}function -unique_array($K,array$v){foreach($v -as$u){if(preg_match("~PRIMARY|UNIQUE~",$u["type"])&&!$u["partial"]){$J=array();foreach($u["columns"]as$w){if(!isset($K[$w]))continue -2;$J[$w]=$K[$w];}return$J;}}}function -escape_key($w){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$w,$A))return$A[1].idf_escape(idf_unescape($A[2])).$A[3];return -idf_escape($w);}function -where(array$Z,array$m=array()){$J=array();foreach((array)$Z["where"]as$w=>$X){$w=bracket_escape($w,true);$b=escape_key($w);$l=idx($m,$w,array());$Oc=$l["type"];$J[]=$b.(JUSH=="sql"&&$Oc=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^jsonb?$~',$l["full_type"])?"::jsonb = ".q($X)."::jsonb":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($Oc,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($l,q($X))))));if(JUSH=="sql"&&preg_match('~char|text~',$Oc)&&preg_match("~[^ -@]~",$X))$J[]="$b = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$w)$J[]=escape_key($w)." IS NULL";return +get_vals($H,$c=0){$J=array();$I=connection()->query($H);if(is_object($I)){while($K=$I->fetch_row())$J[]=$K[$c];}return$J;}function +get_key_vals($H,$f=null,$li=true){$f=connection($f);$J=array();$I=$f->query($H);if(is_object($I)){while($K=$I->fetch_row()){if($li)$J[$K[0]]=$K[1];else$J[]=$K[0];}}return$J;}function +get_rows($H,$f=null,$k="

"){$rb=connection($f);$J=array();$I=$rb->query($H);if(is_object($I)){while($K=$I->fetch_assoc())$J[]=$K;}elseif(!$I&&!$f&&$k&&(defined('Adminer\PAGE_HEADER')||$k=="-- "))echo$k.error()."\n";return$J;}function +unique_array($K,array$w){foreach($w +as$v){if(preg_match("~^(PRIMARY|UNIQUE)$~",$v["type"])&&!$v["partial"]){$J=array();foreach($v["columns"]as$x){if(!isset($K[$x]))continue +2;$J[$x]=$K[$x];}return$J;}}}function +escape_key($x){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$x,$B))return$B[1].idf_escape(idf_unescape($B[2])).$B[3];return +idf_escape($x);}function +where(array$Z,array$m=array()){$J=array();foreach((array)$Z["where"]as$x=>$X){$x=bracket_escape($x,true);$c=escape_key($x);$l=idx($m,$x,array());$cd=$l["type"];$_e=$l&&(is_blob($l)||preg_match('~binary~',$cd));$J[]=$c.($_e&&!is_utf8($X)?" = ".driver()->quoteBinary($X):(JUSH=="sql"&&$cd=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^jsonb?$~',$l["full_type"])?"::jsonb = ".q($X)."::jsonb":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($cd,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($l,q($X)))))));if(JUSH=="sql"&&preg_match('~char|text~',$cd)&&preg_match("~[^ -@]~",$X))$J[]="$c = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$x)$J[]=escape_key($x)." IS NULL";return implode(" AND ",$J);}function -where_check($X,array$m=array()){parse_str($X,$Ua);remove_slashes(array(&$Ua));return -where($Ua,$m);}function -where_link($r,$b,$Y,$Kf="="){return"&where%5B$r%5D%5Bcol%5D=".urlencode($b)."&where%5B$r%5D%5Bop%5D=".urlencode(($Y!==null?$Kf:"IS NULL"))."&where%5B$r%5D%5Bval%5D=".urlencode($Y);}function -convert_fields(array$c,array$m,array$M=array()){$J="";foreach($c -as$w=>$X){if($M&&!in_array(idf_escape($w),$M))continue;$va=convert_field($m[$w]);if($va)$J -.=", $va AS ".idf_escape($w);}return$J;}function +where_columns(array$m){$J=array();foreach((array)$_GET["null"]as$x)$J[$x]=true;foreach((array)$_GET["where"]as$x=>$X){$x=bracket_escape($x,true);foreach($m +as$D=>$l){if($x==$D||strpos($x,idf_escape($D))!==false)$J[$D]=true;}}return$J;}function +where_check($X,array$m=array()){parse_str($X,$Wa);remove_slashes(array(&$Wa));return +where($Wa,$m);}function +where_link($s,$c,$Y,$rg="="){$og=($Y!==null?$rg:"IS NULL");return"&where[$s][col]=".url_escape($c).($og!=first(adminer()->operators())?"&where[$s][op]=".url_escape($og):"")."&where[$s][val]=".url_escape($Y);}function +convert_fields(array$d,array$m,array$M=array()){$J="";foreach($d +as$x=>$X){if($M&&!in_array(idf_escape($x),$M))continue;$xa=convert_field($m[$x]);if($xa)$J +.=", $xa AS ".idf_escape($x);}return$J;}function cookie_path(){return strtr(preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),array(";"=>"%3B",","=>"%2C"));}function -cookie($C,$Y,$Be=2592000){header("Set-Cookie: $C=".rawurlencode($Y).($Be?"; expires=".gmdate("D, d M Y H:i:s",time()+$Be)." GMT":"")."; path=".cookie_path().(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function -get_url($Si,$sb){$J=@file_get_contents($Si,false,$sb);if(function_exists('http_get_last_response_headers'))$http_response_header=http_get_last_response_headers();return -array($J,(preg_match('~^HTTP/[\d.]+ (\d+)~',$http_response_header[0],$A)?$A[1]:''),);}function -get_settings($ub){parse_str($_COOKIE[$ub],$zh);return$zh;}function -get_setting($w,$ub="adminer_settings",$j=null){return -idx(get_settings($ub),$w,$j);}function -save_settings(array$zh,$ub="adminer_settings"){$Y=http_build_query($zh+get_settings($ub));cookie($ub,$Y);$_COOKIE[$ub]=$Y;}function -restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function -stop_session($Yc=false){$Vi=ini_bool("session.use_cookies");if(!$Vi||$Yc){session_write_close();if($Vi&&ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($w){return$_SESSION[$w][DRIVER][SERVER][$_GET["username"]];}function -set_session($w,$X){$_SESSION[$w][DRIVER][SERVER][$_GET["username"]]=$X;}function -auth_url($dj,$N,$V,$i=null){$Ri=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($i!==null?"db|":"").($dj=='mssql'||$dj=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$Ri,$A);return"$A[1]?".(sid()?SID."&":"").($dj!="server"||$N!=""?urlencode($dj)."=".urlencode($N)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($i!=""?"&db=".urlencode($i):"").($A[2]?"&$A[2]":"");}function +cookie($D,$Y,$bf=2592000){header("Set-Cookie: $D=".rawurlencode($Y).($bf?"; expires=".gmdate("D, d M Y H:i:s",time()+$bf)." GMT":"")."; path=".cookie_path().(HTTPS?"; secure":"").($D=="adminer_import"?"":"; HttpOnly")."; SameSite=lax",false);}function +get_url($Lj,$vb){$http_response_header=null;$Gc=array();set_error_handler(function($Fc,$k)use(&$Gc){$Gc[]=preg_replace('~^file_get_contents\([^)]*\):\s*~','',$k);return +true;});$J=file_get_contents($Lj,false,$vb);restore_error_handler();$Pd=(function_exists('http_get_last_response_headers')?http_get_last_response_headers():$http_response_header);return +array($J,(preg_match('~^HTTP/[\d.]+ (\d+)~',idx($Pd,0,''),$B)?$B[1]:''),(array)$Pd,($J===false?implode("\n",$Gc):''),);}function +get_settings($yb){parse_str($_COOKIE[$yb],$mi);return$mi;}function +get_setting($x,$yb="adminer_settings",$j=null){return +idx(get_settings($yb),$x,$j);}function +save_settings(array$mi,$yb="adminer_settings"){$Y=http_build_query($mi+get_settings($yb));cookie($yb,$Y);$_COOKIE[$yb]=$Y;}function +restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==PHP_SESSION_NONE))session_start();}function +stop_session($od=false){$Oj=ini_bool("session.use_cookies");if(!$Oj||$od){session_write_close();if($Oj&&ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($x){return$_SESSION[$x][DRIVER][SERVER][$_GET["username"]];}function +set_session($x,$X){$_SESSION[$x][DRIVER][SERVER][$_GET["username"]]=$X;}function +auth_url($Yj,$N,$V,$i=null){$Kj=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($i!==null?"db|":"").($Yj=='mssql'||$Yj=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$Kj,$B);return"$B[1]?".(sid()?SID."&":"").($_GET["ext"]?"ext=".url_escape($_GET["ext"])."&":"").($Yj!="server"||$N!=""?url_escape($Yj)."=".url_escape($N)."&":"")."username=".url_escape($V).($i!=""?"&db=".url_escape($i):"").($B[2]?"&$B[2]":"");}function is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function -redirect($_,$B=null){if($B!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($_!==null?$_:$_SERVER["REQUEST_URI"]))][]=$B;}if($_!==null){if($_=="")$_=".";header("Location: $_");exit;}}function -query_redirect($H,$_,$B,$Qg=true,$Ac=true,$Jc=false,$mi=""){if($Ac){$Lh=microtime(true);$Jc=!connection()->query($H);$mi=format_time($Lh);}$Gh=($H?adminer()->messageQuery($H,$mi,$Jc):"");if($Jc){adminer()->error -.=error().$Gh.script("messagesPrint();")."
";return -false;}if($Qg)redirect($_,$B.$Gh);return +redirect($A,$C=null){if($C!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($A!==null?$A:$_SERVER["REQUEST_URI"]))][]=$C;}if($A!==null){if($A=="")$A=".";header("Location: $A");exit;}}function +query_redirect($H,$A,$C,$Bh=true,$Nc=true,$Xc=false,$cj=""){if($Nc){$Bi=microtime(true);$Xc=!connection()->query($H);$cj=format_time($Bi);}$wi=($H?adminer()->messageQuery($H,$cj,$Xc):"");if($Xc){adminer()->error +.=error().$wi.script("messagesPrint();")."
";return +false;}if($Bh)redirect($A,$C.$wi);return true;}class Queries{static$queries=array();static$start=0;}function queries($H){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(driver()->delimiter!=';'?$H:(preg_match('~;$~',$H)?"DELIMITER ;;\n$H;\nDELIMITER ":$H).";");return connection()->query($H);}function -apply_queries($H,array$T,$xc='Adminer\table'){foreach($T -as$R){if(!queries("$H ".$xc($R)))return +apply_queries($H,array$T,$Ic='Adminer\table'){foreach($T +as$R){if(!queries("$H ".$Ic($R)))return false;}return true;}function -queries_redirect($_,$B,$Qg){$Lg=implode("\n",Queries::$queries);$mi=format_time(Queries::$start);return -query_redirect($Lg,$_,$B,$Qg,false,!$Qg,$mi);}function -format_time($Lh){return -lang(0,max(0,microtime(true)-$Lh));}function +queries_redirect($A,$C,$Bh){$xh=implode("\n",Queries::$queries);$cj=format_time(Queries::$start);return +query_redirect($xh,$A,$C,$Bh,false,!$Bh,$cj);}function +format_time($Bi){return +lang(1,max(0,microtime(true)-$Bi));}function relative_uri(){return -str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function -remove_from_uri($eg=""){return -substr(preg_replace("~(?<=[?&])($eg".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function -get_file($w,$Jb=false,$Pb=""){$Qc=$_FILES[$w];if(!$Qc)return -null;foreach($Qc -as$w=>$X)$Qc[$w]=(array)$X;$J='';foreach($Qc["error"]as$w=>$k){if($k)return$k;$C=$Qc["name"][$w];$ui=$Qc["tmp_name"][$w];$qb=file_get_contents($Jb&&preg_match('~\.gz$~',$C)?"compress.zlib://$ui":$ui);if($Jb){$Lh=substr($qb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Lh))$qb=iconv("utf-16","utf-8",$qb);elseif($Lh=="\xEF\xBB\xBF")$qb=substr($qb,3);}$J -.=$qb;if($Pb)$J -.=(preg_match("($Pb\\s*\$)",$qb)?"":$Pb)."\n\n";}return$J;}function -upload_error($k){$Te=($k==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($k?lang(1).($Te?" ".lang(2,$Te):""):lang(3));}function -repeat_pattern($rg,$x){return -str_repeat("$rg{0,65535}",$x/65535)."$rg{0,".($x%65535)."}";}function +preg_replace_callback('~^[^?]*~',function($B){return +str_replace(":","%3A",$B[0]);},preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function +remove_from_uri($Lg=""){return +substr(preg_replace("~(?<=[?&])($Lg".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function +get_files($x,$Qb=false){$ed=$_FILES[$x];if(!$ed)return +null;foreach($ed +as$x=>$X)$ed[$x]=(array)$X;$J=array();foreach($ed["error"]as$x=>$k){if($k)return$k;$D=$ed["name"][$x];$kj=$ed["tmp_name"][$x];$tb=file_get_contents($Qb&&preg_match('~\.gz$~',$D)?"compress.zlib://$kj":$kj);if($Qb){$Bi=substr($tb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Bi))$tb=iconv("utf-16","utf-8",$tb);elseif($Bi=="\xEF\xBB\xBF")$tb=substr($tb,3);}$J[]=array($D,$tb);}return$J;}function +get_file($x,$Qb=false,$Wb=""){$hd=get_files($x,$Qb);if(!is_array($hd))return$hd;$J='';foreach($hd +as$ed){$tb=$ed[1];$J +.=$tb;if($Wb)$J +.=(preg_match("($Wb\\s*\$)",$tb)?"":$Wb)."\n\n";}return$J;}function +upload_error($k){$vf=($k==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($k?lang(2).($vf?" ".lang(3,$vf):""):lang(4));}function +repeat_pattern($Zg,$y){return +str_repeat("$Zg{0,65535}",$y/65535)."$Zg{0,".($y%65535)."}";}function is_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}function format_number($X){return -strtr(number_format($X,0,".",lang(4)),preg_split('~~u',lang(5),-1,PREG_SPLIT_NO_EMPTY));}function +strtr(number_format($X,0,".",lang(5)),preg_split('~~u',lang(6),-1,PREG_SPLIT_NO_EMPTY));}function +format_status(array$S,$x){$X=idx($S,$x,'?');if(!is_numeric($X))return +h($X);if($X<0)return'?';$ta=($x=="Rows"&&(JUSH=="sqlite"||$S["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")));return($ta?"~ ":"").format_number($X);}function friendly_url($X){return preg_replace('~\W~i','-',$X);}function -table_status1($R,$Kc=false){$J=table_status($R,$Kc);return($J?reset($J):array("Name"=>$R));}function -column_foreign_keys($R){$J=array();foreach(adminer()->foreignKeys($R)as$n){foreach($n["source"]as$X)$J[$X][]=$n;}return$J;}function -fields_from_edit(){$J=array();foreach((array)$_POST["field_keys"]as$w=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$w];$_POST["fields"][$X]=$_POST["field_vals"][$w];}}foreach((array)$_POST["fields"]as$w=>$X){$C=bracket_escape($w,true);$J[$C]=array("field"=>$C,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($w==driver()->primary),);}return$J;}function -dump_headers($Ed,$lf=false){$J=adminer()->dumpHeaders($Ed,$lf);$bg=$_POST["output"];if($bg!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Ed).".$J".($bg!="file"&&preg_match('~^[0-9a-z]+$~',$bg)?".$bg":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}function -dump_csv(array$K){$Ei=$_POST["format"]=="tsv";foreach($K -as$w=>$X){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($Ei?'\t':'[,;]|^$').'~',$X))$K[$w]='"'.str_replace('"','""',$X).'"';}echo -implode(($_POST["format"]=="csv"?",":($Ei?"\t":";")),$K)."\r\n";}function -apply_sql_function($p,$b){return($p?($p=="unixepoch"?"DATETIME($b, '$p')":($p=="count distinct"?"COUNT(DISTINCT ":strtoupper("$p("))."$b)"):$b);}function +table_status1($R,$Yc=false){$J=table_status($R,$Yc);return($J?reset($J):array("Name"=>$R));}function +column_foreign_keys($R){$J=array();foreach(adminer()->foreignKeys($R)as$o){foreach($o["source"]as$X)$J[$X][]=$o;}return$J;}function +fields_from_edit(){$J=array();foreach((array)$_POST["field_keys"]as$x=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$x];$_POST["fields"][$X]=$_POST["field_vals"][$x];}}foreach((array)$_POST["fields"]as$x=>$X){$D=bracket_escape($x,true);$J[$D]=array("field"=>$D,"full_type"=>"","type"=>"","privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>true,"auto_increment"=>($D==driver()->primary),);}return$J;}function +dump_headers($ae,$Nf=false){$J=adminer()->dumpHeaders($ae,$Nf);$Ig=$_POST["output"];if($Ig!="text"||$J=="tar"){$ob=($Ig!="text"&&$Ig!="file"&&preg_match('~^[0-9a-z]+$~',$Ig)?".$Ig":"");header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($ae).".$J$ob");}session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}function +dump_csv(array$K){$xj=$_POST["format"]=="tsv";foreach($K +as$x=>$X){if(preg_match('~["\n]|^0[^.]|\.\d*0$|'.($xj?'\t':'[,;]|^$').'~',$X))$K[$x]='"'.str_replace('"','""',$X).'"';}echo +implode(($_POST["format"]=="csv"?",":($xj?"\t":";")),$K)."\r\n";}function +parse_csv($Fb,$hi){$J=array();preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Fb,$lf);foreach($lf[0]as$K){preg_match_all("~((?>\"[^\"]*\")+|[^$hi]*)$hi~",$K.$hi,$mf);$J[]=$mf[1];}return$J;}function +csv_value($X){return(preg_match('~^".*"$~s',$X)?str_replace('""','"',substr($X,1,-1)):$X);}function +apply_sql_function($q,$c){return($q?($q=="unixepoch"?"DATETIME($c, '$q')":($q=="count distinct"?"COUNT(DISTINCT ":strtoupper("$q("))."$c)"):$c);}function get_temp_dir(){return ini_get("upload_tmp_dir")?:sys_get_temp_dir();}function -file_open_lock($Rc){if(is_link($Rc))return;$o=@fopen($Rc,"c+");if(!$o)return;@chmod($Rc,0660);if(!flock($o,LOCK_EX)){fclose($o);return;}return$o;}function -file_write_unlock($o,$Db){rewind($o);fwrite($o,$Db);ftruncate($o,strlen($Db));file_unlock($o);}function -file_unlock($o){flock($o,LOCK_UN);fclose($o);}function -first(array$ua){return -reset($ua);}function -password_file($g){$Rc=get_temp_dir()."/adminer.key";if(!$g&&!file_exists($Rc))return'';$o=file_open_lock($Rc);if(!$o)return'';$J=stream_get_contents($o);if(!$J){$J=rand_string();file_write_unlock($o,$J);}else -file_unlock($o);return$J;}function +file_open_lock($n){if(is_link($n))return;$p=@fopen($n,"c+");if(!$p)return;@chmod($n,0660);if(!flock($p,LOCK_EX)){fclose($p);return;}return$p;}function +file_write_unlock($p,$Jb){rewind($p);fwrite($p,$Jb);ftruncate($p,strlen($Jb));file_unlock($p);}function +file_unlock($p){flock($p,LOCK_UN);fclose($p);}function +first(array$wa){return +reset($wa);}function +password_file($g){$n=get_temp_dir()."/adminer.key";if(!$g&&!file_exists($n))return'';$p=file_open_lock($n);if(!$p)return'';$J=stream_get_contents($p);if(!$J){$J=rand_string();file_write_unlock($p,$J);}else +file_unlock($p);return$J;}function rand_string(){return(function_exists('random_bytes')?bin2hex(random_bytes(16)):md5(uniqid(strval(mt_rand()),true)));}function -select_value($X,$z,array$l,$li){if(is_array($X)){$J="";if(array_filter($X,'is_array')==array_values($X)){$me=array();foreach($X -as$W)$me+=array_fill_keys(array_keys($W),null);foreach(array_keys($me)as$le)$J -.="".h($le);foreach($X +select_value($X,$_,array$l,$bj){if(is_array($X)){$J="";if(array_filter($X,'is_array')==array_values($X)){$Ke=array();foreach($X +as$W)$Ke+=array_fill_keys(array_keys($W),null);foreach(array_keys($Ke)as$Je)$J +.="".h($Je);foreach($X as$W){$J -.="";foreach(array_merge($me,$W)as$Yi)$J -.="".select_value($Yi,$z,$l,$li);}}else{foreach($X -as$le=>$W)$J -.="".($X!=array_values($X)?"".h($le):"")."".select_value($W,$z,$l,$li);}return"$J
";}if(!$z)$z=adminer()->selectLink($X,$l);if($z===null){if(is_mail($X))$z="mailto:$X";if(is_url($X))$z=$X;}$X=driver()->value($X,$l);$J=adminer()->editVal($X,$l);if($J!==null){if(!is_utf8($J))$J="\0";elseif($li!=""&&is_shortable($l))$J=shorten_utf8($J,max(0,+$li));else$J=h($J);}return -adminer()->selectVal($J,$z,$l,$X);}function +.="";foreach(array_merge($Ke,$W)as$Tj)$J +.="".select_value($Tj,$_,$l,$bj);}}else{foreach($X +as$Je=>$W)$J +.="".($X!=array_values($X)?"".h($Je):"")."".select_value($W,$_,$l,$bj);}return"$J
";}if(!$_)$_=adminer()->selectLink($X,$l);if($_===null){if(is_mail($X))$_="mailto:$X";if(is_url($X))$_=$X;}$X=driver()->value($X,$l);$J=adminer()->editVal($X,$l);if($J!==null){if(!is_utf8($J))$J="\0";elseif($bj!=""&&is_shortable($l))$J=shorten_utf8($J,max(0,+$bj));else$J=h($J);}return +adminer()->selectVal($J,$_,$l,$X);}function is_blob(array$l){return -preg_match('~blob|bytea|raw|file~',$l["type"])&&!in_array($l["type"],idx(driver()->structuredTypes(),lang(6),array()));}function -is_mail($lc){$wa='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$bc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$rg="$wa+(\\.$wa+)*@($bc?\\.)+$bc";return -is_string($lc)&&preg_match("(^$rg(,\\s*$rg)*\$)i",$lc);}function -is_url($Q){$bc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return -preg_match("~^((https?):)?//($bc?\\.)+$bc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function +preg_match('~blob|bytea|raw|file'.(JUSH=="mssql"?'|binary|image':'').'~',$l["type"])&&!in_array($l["type"],idx(driver()->structuredTypes(),lang(7),array()));}function +is_mail($xc){$za='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$mc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$Zg="$za+(\\.$za+)*@($mc?\\.)+$mc";return +is_string($xc)&&preg_match("(^$Zg(,\\s*$Zg)*\$)i",$xc);}function +is_url($Q){$mc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return +preg_match("~^((https?):)?//($mc?\\.)+$mc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function is_shortable(array$l){return!preg_match('~'.number_type().'|date|time|year~',$l["type"]);}function -host_port($N){return(preg_match('~^(:([^:].*)|(\[(.+)\]|(([^:]+://)?[^:]+))(:(\d+))?)$~',$N,$A)?array($A[4].$A[5],$A[2].$A[8]):array($N,''));}function -count_rows($R,array$Z,$de,array$q){$H=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($de&&(JUSH=="sql"||count($q)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$q).")$H":"SELECT COUNT(*)".($de?" FROM (SELECT 1$H GROUP BY ".implode(", ",$q).") x":$H));}function -slow_query($H){$i=adminer()->database();$ni=adminer()->queryTimeout();$Ch=driver()->slowQuery($H,$ni);$f=null;if(!$Ch&&support("kill")){$f=connect();if($f&&($i==""||$f->select_db($i))){$ne=get_val(connection_id(),0,$f);echo -script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$ne&token=".get_token()."'); }, 1000 * $ni);");}}ob_flush();flush();$J=@get_key_vals(($Ch?:$H),$f,false);if($f){echo +host_port($N){return(preg_match('~^(:([^:].*)|(\[(.+)\]|(([^:]+://)?[^:]+))(:(\d+))?)$~',$N,$B)?array($B[4].$B[5],$B[2].$B[8]):array($N,''));}function +count_rows($R,array$Z,$Ae,array$r){$H=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($Ae&&(JUSH=="sql"||count($r)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$r).")$H":"SELECT COUNT(*)".($Ae?" FROM (SELECT 1$H GROUP BY ".implode(", ",$r).") x":$H));}function +slow_query($H){$i=adminer()->database();$dj=adminer()->queryTimeout();$qi=driver()->slowQuery($H,$dj);$f=null;if(!$qi&&support("kill")){$f=connect();if($f&&($i==""||$f->select_db($i))){$Le=get_val(connection_id(),0,$f);echo +script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$Le&token=".get_token()."'); }, 1000 * $dj);");}}ob_flush();flush();$J=@get_key_vals(($qi?:$H),$f,false);if($f){echo script("clearTimeout(timeout);");ob_flush();flush();}return$J;}function -get_token(){$Og=rand(1,1e6);return($Og^$_SESSION["token"]).":$Og";}function -verify_token(){list($vi,$Og)=explode(":",$_POST["token"]);return($Og^$_SESSION["token"])==$vi&&in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"));}function +get_token(){$_h=rand(1,1e6);return($_h^$_SESSION["token"]).":$_h";}function +verify_token(){list($lj,$_h)=explode(":",$_POST["token"]);return($_h^$_SESSION["token"])==$lj&&in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"));}function compress_alphabet(){return strtr(implode(range('"','~')),"'\\","!\n");}function -decompress_string($Q){$qa=array_flip(str_split(compress_alphabet()));$x=strlen($Q);$aj=($x?13*($x-1)/2-$qa[$Q[0]]:0);$Ia="";$ah=0;$bh=0;for($r=1;$r<$x;$r+=2){$ah=($ah<<13)+$qa[$Q[$r]]*93+$qa[$Q[$r+1]];$bh+=13;while($bh>=8&&$aj>=8){$bh-=8;$aj-=8;$Ia -.=chr($ah>>$bh);$ah&=(1<<$bh)-1;}}if($Ia=="")return"";return(function_exists('gzinflate')?gzinflate($Ia):inflate($Ia));}function -inflate($Ia){$ze=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);$_e=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);$Vb=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);$Xb=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);$J="";$G=0;do{$Tc=inflate_bits($Ia,$G,1);$U=inflate_bits($Ia,$G,2);if(!$U){$G=($G+7)&~7;$x=inflate_bits($Ia,$G,16);$G+=16;$J -.=substr($Ia,$G>>3,$x);$G+=$x<<3;}else{if($U==1){$Fe=array_merge(array_fill(0,144,8),array_fill(0,112,9),array_fill(0,24,7),array_fill(0,8,8));$Yb=array_fill(0,30,5);}else{$Ee=inflate_bits($Ia,$G,5)+257;$Wb=inflate_bits($Ia,$G,5)+1;$D=array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);$ef=array_fill(0,19,0);$df=inflate_bits($Ia,$G,4)+4;for($r=0;$r<$df;$r++)$ef[$D[$r]]=inflate_bits($Ia,$G,3);$ff=inflate_table($ef);$Ae=array();while(count($Ae)<$Ee+$Wb){$Vh=inflate_symbol($Ia,$G,$ff);if($Vh==16)$Ae=array_merge($Ae,array_fill(0,inflate_bits($Ia,$G,2)+3,end($Ae)));elseif($Vh==17)$Ae=array_merge($Ae,array_fill(0,inflate_bits($Ia,$G,3)+3,0));elseif($Vh==18)$Ae=array_merge($Ae,array_fill(0,inflate_bits($Ia,$G,7)+11,0));else$Ae[]=$Vh;}$Fe=array_slice($Ae,0,$Ee);$Yb=array_slice($Ae,$Ee);}$Ge=inflate_table($Fe);$ac=inflate_table($Yb);while(($Vh=inflate_symbol($Ia,$G,$Ge))!=256){if($Vh<256)$J -.=chr($Vh);else{$x=$ze[$Vh-257]+inflate_bits($Ia,$G,$_e[$Vh-257]);$Zb=inflate_symbol($Ia,$G,$ac);$Af=strlen($J)-$Vb[$Zb]-inflate_bits($Ia,$G,$Xb[$Zb]);for($r=0;$r<$x;$r++)$J -.=$J[$Af+$r];}}}}while(!$Tc);return$J;}function -inflate_bits($Ia,&$G,$vb){$J=0;for($r=0;$r<$vb;$r++){$J+=((ord($Ia[$G>>3])>>($G&7))&1)<<$r;$G++;}return$J;}function -inflate_table(array$Ae){$R=array();$bb=0;for($Ja=1;$Ja<=max($Ae);$Ja++){foreach($Ae -as$Vh=>$x){if($x==$Ja){$R[$Ja][$bb]=$Vh;$bb++;}}$bb<<=1;}return$R;}function -inflate_symbol($Ia,&$G,array$R){$bb=0;$Ja=0;do{$bb=($bb<<1)+inflate_bits($Ia,$G,1);$Ja++;}while(!isset($R[$Ja][$bb]));return$R[$Ja][$bb];}function -script($Eh,$yi="\n"){return"$Eh$yi";}function -script_src($Si,$Mb=false){return"\n";}function +decompress_string($Q,$cc=""){$qa=array_flip(str_split(compress_alphabet()));$y=strlen($Q);$Vj=($y?13*($y-1)/2-$qa[$Q[0]]:0);$Ka="";$Nh=0;$Oh=0;for($s=1;$s<$y;$s+=2){$Nh=($Nh<<13)+$qa[$Q[$s]]*93+$qa[$Q[$s+1]];$Oh+=13;while($Oh>=8&&$Vj>=8){$Oh-=8;$Vj-=8;$Ka +.=chr($Nh>>$Oh);$Nh&=(1<<$Oh)-1;}}if($Ka=="")return"";if($cc!=""&&function_exists('inflate_init'))return +inflate_add(inflate_init(ZLIB_ENCODING_RAW,array('dictionary'=>$cc)),$Ka,ZLIB_FINISH);return($cc==""&&function_exists('gzinflate')?gzinflate($Ka):inflate($Ka,$cc));}function +inflate($Ka,$cc=""){$Ye=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);$Ze=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);$gc=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);$ic=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);$J=$cc;$G=0;do{$jd=inflate_bits($Ka,$G,1);$U=inflate_bits($Ka,$G,2);if(!$U){$G=($G+7)&~7;$y=inflate_bits($Ka,$G,16);$G+=16;$J +.=substr($Ka,$G>>3,$y);$G+=$y<<3;}else{if($U==1){$ff=array_merge(array_fill(0,144,8),array_fill(0,112,9),array_fill(0,24,7),array_fill(0,8,8));$jc=array_fill(0,30,5);}else{$ef=inflate_bits($Ka,$G,5)+257;$hc=inflate_bits($Ka,$G,5)+1;$E=array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);$Gf=array_fill(0,19,0);$Ff=inflate_bits($Ka,$G,4)+4;for($s=0;$s<$Ff;$s++)$Gf[$E[$s]]=inflate_bits($Ka,$G,3);$Hf=inflate_table($Gf);$af=array();while(count($af)<$ef+$hc){$Li=inflate_symbol($Ka,$G,$Hf);if($Li==16)$af=array_merge($af,array_fill(0,inflate_bits($Ka,$G,2)+3,end($af)));elseif($Li==17)$af=array_merge($af,array_fill(0,inflate_bits($Ka,$G,3)+3,0));elseif($Li==18)$af=array_merge($af,array_fill(0,inflate_bits($Ka,$G,7)+11,0));else$af[]=$Li;}$ff=array_slice($af,0,$ef);$jc=array_slice($af,$ef);}$gf=inflate_table($ff);$lc=inflate_table($jc);while(($Li=inflate_symbol($Ka,$G,$gf))!=256){if($Li<256)$J +.=chr($Li);else{$y=$Ye[$Li-257]+inflate_bits($Ka,$G,$Ze[$Li-257]);$kc=inflate_symbol($Ka,$G,$lc);$gg=strlen($J)-$gc[$kc]-inflate_bits($Ka,$G,$ic[$kc]);for($s=0;$s<$y;$s++)$J +.=$J[$gg+$s];}}}}while(!$jd);return($cc==""?$J:substr($J,strlen($cc)));}function +inflate_bits($Ka,&$G,$_b){$J=0;for($s=0;$s<$_b;$s++){$J+=((ord($Ka[$G>>3])>>($G&7))&1)<<$s;$G++;}return$J;}function +inflate_table(array$af){$R=array();$eb=0;for($La=1;$La<=max($af);$La++){foreach($af +as$Li=>$y){if($y==$La){$R[$La][$eb]=$Li;$eb++;}}$eb<<=1;}return$R;}function +inflate_symbol($Ka,&$G,array$R){$eb=0;$La=0;do{$eb=($eb<<1)+inflate_bits($Ka,$G,1);$La++;}while(!isset($R[$La][$eb]));return$R[$La][$eb];}function +script($ui,$oj="\n"){return"$ui$oj";}function +script_src($Lj,$Tb=false){return"\n";}function nonce(){return' nonce="'.get_nonce().'"';}function -input_hidden($C,$Y=""){return"\n";}function +on($Jc,$Id,$ua=null){$va=array();foreach(array_slice(func_get_args(),2)as$X)$va[]=json_encode($X,256);return" data-on$Jc='".str_replace(array('&','<',"'"),array('&','<','''),"$Id(".implode(", ",$va).")")."'";}function +input_hidden($D,$Y=""){return"\n";}function input_token(){return input_hidden("token",get_token());}function target_blank(){return' target="_blank" rel="noreferrer noopener"';}function @@ -164,2257 +182,2165 @@ str_replace(array('&','<','"',"'","\0"),array('&','<','"',''','�'),$Q);}function nl_br($Q){return str_replace("\n","
",$Q);}function -checkbox($C,$Y,$Wa,$pe="",$Jf="",$ab="",$re=""){$J="".($Jf?script("qsl('input').onclick = function () { $Jf };",""):"");return($pe!=""||$ab?"$J".h($pe)."":$J);}function -optionlist($Of,$qh=null,$Wi=false){$J="";foreach($Of -as$le=>$W){$Pf=array($le=>$W);if(is_array($W)){$J -.='';$Pf=$W;}foreach($Pf -as$w=>$X)$J -.=''.h($X);if(is_array($W))$J +checkbox($D,$Y,$Ya,$Ne="",$b="",$db="",$Pe=""){$J="";return($Ne!=""?"$J".h($Ne)."":$J);}function +optionlist($vg,$ei=null,$Pj=false){$J="";foreach($vg +as$Je=>$W){$wg=array($Je=>$W);if(is_array($W)){$J +.='';$wg=$W;}foreach($wg +as$x=>$X)$J +.=''.h($X);if(is_array($W))$J .='';}return$J;}function -html_select($C,array$Of,$Y="",$If="",$re=""){static$pe=0;$qe="";if(!$re&&substr($Of[""],0,1)=="("){$pe++;$re="label-$pe";$qe="

","$ye",script("qsl('a').onclick = partial(toggle, 'fieldset-$s');",""),"","
\n";}function -selectOrderPrint(array$D,array$c,array$v){print_fieldset("sort",lang(50),$D);$r=0;foreach((array)$_GET["order"]as$w=>$X){if($X!=""){echo"
".select_input(" name='order[$r]'",$c,$X,"selectFieldChange"),checkbox("desc[$r]",1,isset($_GET["desc"][$w]),lang(51))."
\n";$r++;}}echo"
".select_input(" name='order[$r]'",$c,"","selectAddRow"),checkbox("desc[$r]",1,false,lang(51))."
\n","\n";}function -selectLimitPrint($y){echo"
".lang(52)."
","",script("qsl('input').oninput = selectFieldChange;",""),"
\n";}function -selectLengthPrint($li){if($li!==null)echo"
".lang(53)."
","","
\n";}function -selectActionPrint(array$v){echo"
".lang(54)."
",""," ","\n","const indexColumns = ";$c=array();foreach($v -as$u){$Bb=reset($u["columns"]);if($u["type"]!="FULLTEXT"&&$Bb)$c[$Bb]=1;}$c[""]=1;foreach($c -as$w=>$X)json_row($w);echo";\n","selectFieldChange.call(qs('#form')['select']);\n","\n","
\n";}function +tableStructurePrint(array$m,$Ni=null){echo"
\n","\n","\n";$Ei=driver()->structuredTypes();foreach($m +as$l){echo"
".lang(42)."".lang(43).(support("comment")?"".lang(44):"")."
".h($l["field"]);$U=h($l["full_type"]);$hb=h($l["collation"]);echo"".(in_array($U,(array)$Ei[lang(7)])?"$U":$U.($hb&&isset($Ni["Collation"])&&$hb!=$Ni["Collation"]?" $hb":""))."",($l["null"]?" NULL":""),($l["auto_increment"]?" ".lang(45)."":""),(isset($l["default"])?" [".($l["generated"]?"".shorten_utf8(preg_replace('~\s+~',' ',ltrim($l["default"])),80,""):h($l["default"]))."]":""),(support("comment")?"".adminer()->commentValue('COLUMN',$l["comment"]):""),"\n";}echo"
\n","
\n";}function +tableIndexesPrint(array$w,array$Ni){$Og=false;foreach($w +as$D=>$v)$Og|=!!$v["partial"];echo"\n";$Rb=first(driver()->indexAlgorithms($Ni));foreach($w +as$D=>$v){ksort($v["columns"]);$qh=array();foreach($v["columns"]as$x=>$X)$qh[]="".h($X)."".($v["lengths"][$x]?"(".h($v["lengths"][$x]).")":"").($v["descs"][$x]?" DESC":"");echo"","
".h($v["type"]).($Rb&&$v['algorithm']!=$Rb?" (".h($v['algorithm']).")":""),"".implode(", ",$qh);if($Og)echo"".($v['partial']?"WHERE ".h($v['partial']):"");echo"\n";}echo"
\n";}function +selectColumnsPrint(array$M,array$d){print_fieldset("select",lang(47),$M);$s=0;$M[""]=array();foreach($M +as$x=>$X){$X=idx($_GET["columns"],$x,array());$c=select_input(" name='columns[$s][col]' data-default=''".on('change',($x!==""?'selectFieldChange':'selectAddRow')),$d,$X["col"]);echo"
".(driver()->functions||driver()->grouping?html_select("columns[$s][fun]",array(-1=>"")+array_filter(array(lang(48)=>driver()->functions,lang(49)=>driver()->grouping)),$X["fun"]," data-default=''".on('change',($x!==""?'helpClose':'selectFunAddRow')).on_help_value(' (.*)|$','($1)'))."($c)":$c)."
\n";$s++;}echo"\n";}function +selectSearchPrint(array$Z,array$d,array$w){print_fieldset("search",lang(50),$Z);foreach($w +as$s=>$v){if($v["type"]=="FULLTEXT")echo"
(".implode(", ",array_map('Adminer\h',$v["columns"])).") AGAINST"," ",(JUSH=='sql'?checkbox("boolean[$s]",1,isset($_GET["boolean"][$s]),"BOOL"):''),"
\n";}$sg=adminer()->operators();foreach(array_merge((array)$_GET["where"],array(array()))as$s=>$X){if(!$X||("$X[col]$X[val]"!=""&&in_array($X["op"],$sg)))echo"
".select_input(" name='where[$s][col]' data-default=''".on('change',($X?'selectFieldChange':'selectAddRow')),$d,$X["col"],"(".lang(51).")"),html_select("where[$s][op]",$sg,$X["op"]," data-default='".h(first($sg))."'".on('change','selectFirstChange')),"","
\n";}echo"\n";}function +selectOrderPrint(array$E,array$d,array$w){print_fieldset("sort",lang(52),$E);$s=0;foreach((array)$_GET["order"]as$x=>$X){if($X!=""){echo"
".select_input(" name='order[$s]' data-default=''".on('change','selectFieldChange'),$d,$X),checkbox("desc[$s]",1,isset($_GET["desc"][$x]),lang(53))."
\n";$s++;}}echo"
".select_input(" name='order[$s]' data-default=''".on('change','selectAddRow'),$d),checkbox("desc[$s]",1,false,lang(53))."
\n","\n";}function +selectLimitPrint($z){echo"
".lang(54)."
","","
\n";}function +selectLengthPrint($bj){echo"
".lang(55)."
","","
\n";}function +selectActionPrint(array$w){echo"
".lang(56)."
",""," ","\n","const indexColumns = ";$d=array();foreach($w +as$v){$Hb=reset($v["columns"]);if($v["type"]!="FULLTEXT"&&$Hb)$d[$Hb]=1;}$d[""]=1;foreach($d +as$x=>$X)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$mc,array$c){}function -selectColumnsProcess(array$c,array$v){$M=array();$q=array();foreach((array)$_GET["columns"]as$w=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],driver()->functions)||in_array($X["fun"],driver()->grouping)))){$M[$w]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],driver()->grouping))$q[]=$M[$w];}}return -array($M,$q);}function -selectSearchProcess(array$m,array$v){$J=array();foreach($v -as$r=>$u){if($u["type"]=="FULLTEXT"&&idx($_GET["fulltext"],$r)!="")$J[]="MATCH (".implode(", ",array_map('Adminer\idf_escape',$u["columns"])).") AGAINST (".q($_GET["fulltext"][$r]).(isset($_GET["boolean"][$r])?" IN BOOLEAN MODE":"").")";}foreach((array)$_GET["where"]as$w=>$X){$cb=$X["col"];if("$cb$X[val]"!=""&&in_array($X["op"],adminer()->operators())){$nb=array();foreach(($cb!=""?array($cb=>$m[$cb]):$m)as$C=>$l){$Bg="";$mb=" $X[op]";if(preg_match('~IN$~',$X["op"])){$Jd=process_length($X["val"]);$mb -.=" ".($Jd!=""?$Jd:"(NULL)");}elseif($X["op"]=="SQL")$mb=" $X[val]";elseif(preg_match('~^(I?LIKE) %%$~',$X["op"],$A))$mb=" $A[1] ".adminer()->processInput($l,"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$Bg="$X[op](".q($X["val"]).", ";$mb=")";}elseif(!preg_match('~NULL$~',$X["op"]))$mb -.=" ".adminer()->processInput($l,$X["val"]);if($cb!=""||(isset($l["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$l["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$l["type"]))&&(!preg_match('~date|timestamp~',$l["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"]))))$nb[]=$Bg.driver()->convertSearch(idf_escape($C),$X,$l).$mb;}$J[]=(count($nb)==1?$nb[0]:($nb?"(".implode(" OR ",$nb).")":"1 = 0"));}}return$J;}function -selectOrderProcess(array$m,array$v){$J=array();foreach((array)$_GET["order"]as$w=>$X){if($X!="")$J[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$X)?$X:idf_escape($X)).(isset($_GET["desc"][$w])?" DESC".(JUSH=='pgsql'&&idx($m[$X],"null")?" NULLS LAST":""):"");}return$J;}function +selectEmailPrint(array$yc,array$d){}function +selectColumnsProcess(array$d,array$w){$M=array();$r=array();foreach((array)$_GET["columns"]as$x=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],driver()->functions)||in_array($X["fun"],driver()->grouping)))){$M[$x]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],driver()->grouping))$r[]=$M[$x];}}return +array($M,$r);}function +selectSearchProcess(array$m,array$w){$J=array();foreach($w +as$s=>$v){if($v["type"]=="FULLTEXT"&&idx($_GET["fulltext"],$s)!="")$J[]="MATCH (".implode(", ",array_map('Adminer\idf_escape',$v["columns"])).") AGAINST (".q($_GET["fulltext"][$s]).(isset($_GET["boolean"][$s])?" IN BOOLEAN MODE":"").")";}$sg=adminer()->operators();foreach((array)$_GET["where"]as$x=>$X){$X+=array("col"=>"","op"=>first($sg),"val"=>"");$_GET["where"][$x]=$X;$fb=$X["col"];if("$fb$X[val]"!=""&&in_array($X["op"],$sg)){if($X["op"]=="SQL"&&(!$_POST||!verify_token()))SqlDb::$untrusted=true;$qb=array();foreach(($fb!=""?array($fb=>$m[$fb]):$m)as$D=>$l){$nh="";$pb=" $X[op]";if(preg_match('~IN$~',$X["op"])){$fe=process_length($X["val"]);$pb +.=" ".($fe!=""?$fe:"(NULL)");}elseif($X["op"]=="SQL")$pb=" $X[val]";elseif(preg_match('~^(I?LIKE) %%$~',$X["op"],$B))$pb=" $B[1] ".adminer()->processInput($l,"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$nh="$X[op](".q($X["val"]).", ";$pb=")";}elseif(!preg_match('~NULL$~',$X["op"]))$pb +.=" ".adminer()->processInput($l,$X["val"]);if($fb!=""||(isset($l["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$l["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$l["type"]))&&(!preg_match('~date|timestamp~',$l["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"]))))$qb[]=$nh.driver()->convertSearch(idf_escape($D),$X,$l).$pb;}$J[]=(count($qb)==1?$qb[0]:($qb?"(".implode(" OR ",$qb).")":"1 = 0"));}}return$J;}function +selectOrderProcess(array$m,array$w){$J=array();foreach((array)$_GET["order"]as$x=>$X){if($X!="")$J[]=(preg_match('~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~',$X)?$X:idf_escape($X)).(isset($_GET["desc"][$x])?" DESC".(JUSH=='pgsql'&&idx($m[$X],"null")?" NULLS LAST":""):"");}return$J;}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$ad){return +selectEmailProcess(array$Z,array$qd){return false;}function -selectQueryBuild(array$M,array$Z,array$q,array$D,$y,$E){return"";}function -messageQuery($H,$mi,$Jc=false){restart_session();$yd=&get_session("queries");if(!idx($yd,$_GET["db"]))$yd[$_GET["db"]]=array();if(strlen($H)>1e6)$H=preg_replace('~[\x80-\xFF]+$~','',substr($H,0,1e6))."\n…";$yd[$_GET["db"]][]=array($H,time(),$mi);$Ih="sql-".count($yd[$_GET["db"]]);$J="".lang(56)." 🗐\n";if(!$Jc&&($jj=driver()->warnings())){$s="warnings-".count($yd[$_GET["db"]]);$J="".lang(38).", $J\n";}return" ".@date("H:i:s").""." $J';}function -editRowPrint($R,array$m,$K,$Oi){}function -editFunctions(array$l){$J=($l["null"]?"NULL/":"");$Oi=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$w=>$hd){if(!$w||(!isset($_GET["call"])&&$Oi)){foreach($hd -as$rg=>$X){if(!$rg||preg_match("~$rg~",$l["type"]))$J -.="/$X";}}if($w&&$hd&&!preg_match('~set|bool~',$l["type"])&&!is_blob($l))$J -.="/SQL";}if($l["auto_increment"]&&!$Oi)$J=lang(43);return +selectQueryBuild(array$M,array$Z,array$r,array$E,$z,$F){return"";}function +messageQuery($H,$cj,$Xc=false){restart_session();$Td=&get_session("queries");if(!idx($Td,$_GET["db"]))$Td[$_GET["db"]]=array();if(strlen($H)>1e6)$H=preg_replace('~[\x80-\xFF]+$~','',substr($H,0,1e6))."\n…";$Td[$_GET["db"]][]=array($H,time(),$cj);$yi="sql-".count($Td[$_GET["db"]]);$J="".lang(58)." ".copy_icon()."\n";if(!$Xc&&($ek=driver()->warnings())){$t="warnings-".count($Td[$_GET["db"]]);$J="".lang(40).", $J\n";}return" ".@date("H:i:s").""." $J';}function +editRowPrint($R,array$m,$K,$Ij){}function +editFunctions(array$l){$J=($l["null"]?"NULL/":"");$Nd=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$x=>$zd){if(!$x||(!isset($_GET["call"])&&$Nd)){foreach($zd +as$Zg=>$X){if(!$Zg||preg_match("~$Zg~",$l["type"]))$J +.="/$X";}}if($x&&$zd&&!preg_match('~set|bool~',$l["type"])&&!is_blob($l))$J +.="/SQL";}if($l["auto_increment"]&&!$Nd)$J=lang(45);return explode("/",$J);}function -editInput($R,array$l,$xa,$Y){if($l["type"]=="enum")return(isset($_GET["select"])?" ":"").enum_input("radio",$xa,$l,$Y,"NULL");return"";}function +editInput($R,array$l,$b,$Y){if($l["type"]=="enum")return(isset($_GET["select"])?" ":"").enum_input("radio",$b,$l,$Y,"NULL");return"";}function editHint($R,array$l,$Y){return"";}function -processInput(array$l,$Y,$p=""){if($p=="SQL")return$Y;$C=$l["field"];$J=q($Y);if(preg_match('~^(now|getdate|uuid)$~',$p))$J="$p()";elseif(preg_match('~^current_(date|timestamp)$~',$p))$J=$p;elseif(preg_match('~^([+-]|\|\|)$~',$p))$J=idf_escape($C)." $p $J";elseif(preg_match('~^[+-] interval$~',$p))$J=idf_escape($C)." $p ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$Y)&&JUSH!="pgsql"?$Y:$J);elseif(preg_match('~^(addtime|subtime|concat)$~',$p))$J="$p(".idf_escape($C).", $J)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$p))$J="$p($J)";return +processInput(array$l,$Y,$q=""){if($q=="SQL")return$Y;$D=$l["field"];$J=q($Y);if(preg_match('~^(now|getdate|uuid)$~',$q))$J="$q()";elseif(preg_match('~^current_(date|timestamp)$~',$q))$J=$q;elseif(preg_match('~^([+-]|\|\|)$~',$q))$J=idf_escape($D)." $q $J";elseif(preg_match('~^[+-] interval$~',$q))$J=idf_escape($D)." $q ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$Y)&&JUSH!="pgsql"?$Y:$J);elseif(preg_match('~^(addtime|subtime|concat)$~',$q))$J="$q(".idf_escape($D).", $J)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$q))$J="$q($J)";return unconvert_field($l,$J);}function -dumpOutput(){$J=array('text'=>lang(57),'file'=>lang(58));if(function_exists('gzencode'))$J['gz']='gzip';return$J;}function +dumpOutput(){$J=array('text'=>lang(59),'file'=>lang(60));if(function_exists('gzencode'))$J['gz']='gzip';return$J;}function dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function dumpDatabase($i){}function -dumpTable($R,$Ph,$he=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Ph)dump_csv(array_keys(fields($R)));}else{if($he==2){$m=array();foreach(fields($R)as$C=>$l)$m[]=idf_escape($C)." $l[full_type]";$g="CREATE TABLE ".table($R)." (".implode(", ",$m).")";}else$g=create_sql($R,$_POST["auto_increment"],$Ph);set_utf8mb4($g);if($Ph&&$g){if($Ph=="DROP+CREATE"||$he==1)echo"DROP ".($he==2?"VIEW":"TABLE")." IF EXISTS ".table($R).";\n";if($he==1)$g=remove_definer($g);echo"$g;\n\n";}}}function -dumpData($R,$Ph,$H){if($Ph){$Qe=(JUSH=="sqlite"?0:1048576);$m=array();$Fd=false;if($_POST["format"]=="sql"){if($Ph=="TRUNCATE+INSERT")echo +dumpTable($R,$Fi,$Ee=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Fi)dump_csv(array_keys(fields($R)));}else{if($Ee==2){$m=array();foreach(fields($R)as$D=>$l)$m[]=idf_escape($D)." $l[full_type]";$g="CREATE TABLE ".table($R)." (".implode(", ",$m).")";}else$g=create_sql($R,$_POST["auto_increment"],$Fi);set_utf8mb4($g);if($Fi&&$g){if(($Fi=="DROP+CREATE"&&!function_exists('Adminer\drop_sql'))||$Ee==1)echo"DROP ".($Ee==2?"VIEW":"TABLE")." IF EXISTS ".table($R).";\n";if($Ee==1)$g=remove_definer($g);echo"$g;\n\n";}}}function +dumpData($R,$Fi,$H,array$M=array(),array$Z=array(),array$r=array(),array$E=array()){if($Fi){$rf=(JUSH=="sqlite"?0:1048576);$m=array();$be=false;if($_POST["format"]=="sql"){if($Fi=="TRUNCATE+INSERT"&&!function_exists('Adminer\truncate_all_sql'))echo truncate_sql($R).";\n";$m=fields($R);if(JUSH=="mssql"){foreach($m -as$l){if($l["auto_increment"]){echo"SET IDENTITY_INSERT ".table($R)." ON;\n";$Fd=true;break;}}}}$I=connection()->query($H,1);if($I){$Wd="";$Na="";$me=array();$id=array();$Rh="";$Mc=($R!=''?'fetch_assoc':'fetch_row');$vb=0;while($K=$I->$Mc()){if(!$me){$bj=array();foreach($K -as$X){$l=$I->fetch_field();if(idx($m[$l->name],'generated')){$id[$l->name]=true;continue;}$me[]=$l->name;$w=idf_escape($l->name);$bj[]="$w = VALUES($w)";}$Rh=($Ph=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$bj):"").";\n";}if($_POST["format"]!="sql"){if($Ph=="table"){dump_csv($me);$Ph="INSERT";}dump_csv($K);}else{if(!$Wd)$Wd="INSERT INTO ".table($R)." (".implode(", ",array_map('Adminer\idf_escape',$me)).") VALUES";foreach($K -as$w=>$X){if($id[$w]){unset($K[$w]);continue;}$l=$m[$w];$K[$w]=($X===null?"NULL":($X===false?0:unconvert_field($l,preg_match(number_type(),$l["type"])&&!preg_match('~\[~',$l["full_type"])&&is_numeric($X)?$X:(!is_blob($l)||is_utf8($X)?q($X):driver()->quoteBinary($X)))));}$ih=($Qe?"\n":" ")."(".implode(",\t",$K).")";if(!$Na)$Na=$Wd.$ih;elseif(JUSH=='mssql'?$vb%1000!=0:strlen($Na)+4+strlen($ih)+strlen($Rh)<$Qe)$Na -.=",$ih";else{echo$Na.$Rh;$Na=$Wd.$ih;}}$vb++;}if($Na)echo$Na.$Rh;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($Fd)echo"SET IDENTITY_INSERT ".table($R)." OFF;\n";}}function -dumpFilename($Ed){return -friendly_url($Ed!=""?$Ed:(SERVER?:"localhost"));}function -dumpHeaders($Ed,$lf=false){$bg=$_POST["output"];$Ec=(preg_match('~sql~',$_POST["format"])?"sql":($lf?"tar":"csv"));header("Content-Type: ".($bg=="gz"?"application/x-gzip":($Ec=="tar"?"application/x-tar":($Ec=="sql"||$bg!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($bg=="gz"){ob_start(function($Q){return -gzencode($Q);},1e6);}return$Ec;}function +as$l){if($l["auto_increment"]){echo"SET IDENTITY_INSERT ".table($R)." ON;\n";$be=true;break;}}}}$I=($H!=""?connection()->query($H,1):driver()->select($R,($M?:array("*")),$Z,$r,$E,0));if($I){$te="";$Pa="";$Ke=array();$_d=array();$Hi="";$ad=($R!=''?'fetch_assoc':'fetch_row');$_b=0;while($K=$I->$ad()){if(!$Ke){$Wj=array();foreach($K +as$X){$l=$I->fetch_field();if(idx($m[$l->name],'generated')){$_d[$l->name]=true;continue;}$Ke[]=$l->name;$x=idf_escape($l->name);$Wj[]="$x = VALUES($x)";}$Hi=($Fi=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Wj):"").";\n";}if($_POST["format"]!="sql"){if($Fi=="table"){dump_csv($Ke);$Fi="INSERT";}dump_csv($K);}else{if(!$te)$te="INSERT INTO ".table($R)." (".implode(", ",array_map('Adminer\idf_escape',$Ke)).") VALUES";foreach($K +as$x=>$X){if($_d[$x]){unset($K[$x]);continue;}$l=$m[$x];$K[$x]=($X===null?"NULL":($X===false?0:unconvert_field($l,preg_match(number_type(),$l["type"])&&!preg_match('~\[~',$l["full_type"])&&is_numeric($X)?$X:(!is_blob($l)||is_utf8($X)?q($X):driver()->quoteBinary($X)))));}$Wh=($rf?"\n":" ")."(".implode(",\t",$K).")";if(!$Pa)$Pa=$te.$Wh;elseif(JUSH=='mssql'?$_b%1000!=0:strlen($Pa)+4+strlen($Wh)+strlen($Hi)<$rf)$Pa +.=",$Wh";else{echo$Pa.$Hi;$Pa=$te.$Wh;}}$_b++;}if($Pa)echo$Pa.$Hi;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($be)echo"SET IDENTITY_INSERT ".table($R)." OFF;\n";}}function +dumpFilename($ae){return +friendly_url($ae!=""?$ae:(SERVER?:"localhost"));}function +dumpHeaders($ae,$Nf=false){$Ig=$_POST["output"];$Sc=(preg_match('~sql~',$_POST["format"])?"sql":($Nf?"tar":"csv"));header("Content-Type: ".($Ig=="gz"?"application/x-gzip":($Sc=="tar"?"application/x-tar":($Sc=="sql"||$Ig!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Ig=="gz"){ob_start(function($Q){return +gzencode($Q);},1e6);}return$Sc;}function dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function importServerPath(){return"adminer.sql";}function -homepage(){echo'

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

\n";switch_lang();if($if=="auth"){$bg="";foreach((array)$_SESSION["pwds"]as$dj=>$wh){foreach($wh -as$N=>$Xi){$C=h(get_setting("vendor-$dj-$N")?:get_driver($dj));foreach($Xi -as$V=>$F){if($F!==null){$Ib=$_SESSION["db"][$dj][$N][$V];foreach(($Ib?array_keys($Ib):array(""))as$i)$bg -.="
  • ($C) ".h("$V@".($N!=""?adminer()->serverName($N):"").($i!=""?" - $i":""))."\n";}}}}if($bg)echo"
      \n$bg
    \n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$T=array();if($_GET["ns"]!==""&&!$if&&DB!=""){connection()->select_db(DB);$T=table_status('',true);}adminer()->syntaxHighlighting($T);adminer()->databasesPrint($if);$ia=array();if(DB==""||!$if){if(support("sql")){$ia['sql']="".lang(56)."";$ia['import']="".lang(67)."";}$ia['dump']="".lang(68)."";}$Kd=$_GET["ns"]!==""&&!$if&&DB!="";if($Kd&&function_exists('Adminer\alter_table'))$ia['create']='".lang(69)."";$ia=adminer()->menuActions($ia,$if);echo($ia?"

    ".lang(11)."

    \n";}}}function +navigation($Kf){echo"

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

    \n";switch_lang();if($Kf=="auth"){$Ig="";foreach((array)$_SESSION["pwds"]as$Yj=>$ji){foreach($ji +as$N=>$Sj){$D=h(get_setting("vendor-$Yj-$N")?:get_driver($Yj));foreach($Sj +as$V=>$Xg){if($D&&$Xg!==null){$Pb=$_SESSION["db"][$Yj][$N][$V];foreach(($Pb?array_keys($Pb):array(""))as$i)$Ig +.="
  • ($D) ".h("$V@").($N!=""?adminer()->serverName($N):"").h($i!=""?" - $i":"")."\n";}}}}if($Ig)echo"
      \n$Ig
    \n";}else{$T=array();if($_GET["ns"]!==""&&!$Kf&&DB!=""){connection()->select_db(DB);$T=table_status('',true);}adminer()->syntaxHighlighting($T);adminer()->databasesPrint($Kf);$ia=array();if(DB==""||!$Kf){if(support("sql")){$ia['sql']="".lang(58)."";$ia['import']="".lang(69)."";}$ia['dump']="".lang(70)."";}$ge=$_GET["ns"]!==""&&!$Kf&&DB!="";if($ge&&function_exists('Adminer\alter_table'))$ia['create']='".lang(71)."";$ia=adminer()->menuActions($ia,$Kf);echo($ia?"

    ".lang(12)."

    \n";}}}function syntaxHighlighting(array$T){echo -script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.5.1",true);if(support("sql")){echo"\n";if($T){$De=array();foreach($T -as$R=>$U)$De[]=preg_quote($R,'/');echo"var jushLinks = { ".JUSH.":";json_row(js_escape(ME).(support("table")?"table":"select").'=$&','/\b('.implode('|',$De).')\b/g',false);if(support('routine')){foreach(routines()as$K)json_row(js_escape(ME).'function='.urlencode($K["SPECIFIC_NAME"]).'&name=$&','/\b'.preg_quote($K["ROUTINE_NAME"],'/').'(?=["`]?\()/g',false);}json_row('');echo"};\n";foreach(array("bac","bra","sqlite_quo","mssql_bra")as$X)echo"jushLinks.$X = jushLinks.".JUSH.";\n";if(isset($_GET["sql"])||isset($_GET["trigger"])||isset($_GET["check"])){$ci=array_fill_keys(array_keys($T),array());foreach(driver()->allFields()as$R=>$m){foreach($m -as$l)$ci[$R][]=$l["field"];}echo"addEventListener('DOMContentLoaded', () => { autocompleter = jush.autocompleteSql('".idf_escape("")."', ".json_encode($ci)."); });\n";}}echo"\n";}echo -script("syntaxHighlighting('".(preg_match('~^\d\.?\d~',connection()->server_info,$A)?$A[0]:"")."', '".connection()->flavor."');");}function -databasesPrint($if){$h=adminer()->databases();if(DB&&$h&&!in_array(DB,$h))array_unshift($h,DB);echo"
    \n

    \n";hidden_fields_get();$Gb=script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");echo"","\n";foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo +script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=6.0.0",true);if(support("sql")){$Ie="adminer-plugins/jush-".JUSH.".js";echo(file_exists($Ie)?script_src($Ie,true):""),"\n";if($T){$df=array();foreach($T +as$R=>$U)$df[]=js_escape_re($R);echo"var jushLinks = { ".JUSH.":";json_row(js_escape(ME).(support("table")?"table":"select").'=$&','/\b(?allFields()as$R=>$m){foreach($m +as$l)$Si[$R][]=$l["field"];}echo"addEventListener('DOMContentLoaded', () => { autocompleter = jush.autocompleteSql('".idf_escape("")."', ".json_encode($Si)."); });\n";}}echo"\n";}echo +script("syntaxHighlighting('".(preg_match('~^\d\.?\d~',connection()->server_info,$B)?$B[0]:"")."', '".connection()->flavor."');");}function +databasesPrint($Kf){$h=adminer()->databases();if(DB&&$h&&!in_array(DB,$h))array_unshift($h,DB);echo"\n

    \n";hidden_fields_get();$Nb=on('mousedown','dbMouseDown').on('change','dbChange');echo"","\n";foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo input_hidden($X);break;}}echo"

    \n";}function -menuActions(array$ia,$if){return$ia;}function -tablesPrint(array$T){echo"
      ".script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($T -as$R=>$P){$R="$R";$C=adminer()->tableName($P);if($C!=""&&!$P["partition"])echo'
    • ".lang(71)." ",(support("table")||support("indexes")?'$C":"$C")."\n";}echo"
    \n";}function +menuActions(array$ia,$Kf){return$ia;}function +tablesPrint(array$T){echo"
      ";foreach($T +as$R=>$P){$R="$R";$D=adminer()->tableName($P);if($D!=""&&!$P["partition"])echo'
    • ".lang(73)." ",(support("table")||support("indexes")?'$D":"$D")."\n";}echo"
    \n";}function showVariables(){return show_variables();}function showStatus(){return show_status();}function processList(){return process_list();}function -killProcess($s){return -kill_process($s);}}class +killProcess($t){return +kill_process($t);}}class Plugins{private -static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$error='';private$hooks=array();function -__construct($wg){if($wg===null){$wg=array();$Ha="adminer-plugins";if(is_dir($Ha)){foreach(glob("$Ha/*.php")as$Rc)$this->includeOnce($Rc);}$xd=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$Ha.php")){$Ld=$this->includeOnce("$Ha.php");if(is_array($Ld)){foreach($Ld -as$vg)$wg[get_class($vg)]=$vg;}else$this->error -.=lang(72,"$Ha.php",$xd)."
    ";}foreach(get_declared_classes()as$ab){if(!$wg[$ab]&&(preg_match('~^Adminer\w~i',$ab)||is_subclass_of($ab,'Adminer\Plugin'))){$Vg=new -\ReflectionClass($ab);$pb=$Vg->getConstructor();if($pb&&$pb->getNumberOfRequiredParameters())$this->error -.=lang(73,$xd,"$ab","$Ha.php")."
    ";else$wg[$ab]=new$ab;}}}$this->plugins=$wg;$ja=new -Adminer;$wg[]=$ja;$Vg=new -\ReflectionObject($ja);foreach($Vg->getMethods()as$gf){foreach($wg -as$vg){$C=$gf->getName();if(method_exists($vg,$C))$this->hooks[$C][]=$vg;}}}function -includeOnce($Rc){return -include_once"./$Rc";}function -__call($C,array$fg){$ta=array();foreach($fg -as$w=>$X)$ta[]=&$fg[$w];$J=null;foreach($this->hooks[$C]as$vg){$Y=call_user_func_array(array($vg,$C),$ta);if($Y!==null){if(!self::$append[$C])return$Y;$J=$Y+(array)$J;}}return$J;}}abstract +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($fh){$oc=SqlDriver::$drivers;$Rd=" href='https://www.adminer.org/plugins/#use'".target_blank();if($fh===null){$fh=array();$Ja="adminer-plugins";if(is_dir($Ja)){foreach(glob("$Ja/*.php")as$n){$fd=SqlDriver::$drivers;$this->includeOnce($n);foreach(array_diff_key(SqlDriver::$drivers,$fd)as$t=>$D)$this->driverFiles[$t]=$n;}}if(file_exists("$Ja.php")){$ie=$this->includeOnce("$Ja.php");if(is_array($ie)){foreach($ie +as$x=>$dh)$fh[is_object($dh)?get_class($dh):$x]=$dh;}else$this->error +.=lang(74,"$Ja.php",$Rd)."
    ";}foreach(get_declared_classes()as$db){if(!$fh[$db]&&(preg_match('~^Adminer\w~i',$db)||is_subclass_of($db,'Adminer\Plugin'))){$Gh=new +\ReflectionClass($db);$sb=$Gh->getConstructor();if($sb&&$sb->getNumberOfRequiredParameters())$this->error +.=lang(75,$Rd,"$db","$Ja.php")."
    ";else$fh[$db]=new$db;}}}$xe=array_filter($fh,function($dh){return!is_object($dh);});if($xe){$this->error +.=lang(76,$Rd)."
    ";$fh=array_diff_key($fh,$xe);}$this->drivers=array_diff_key(SqlDriver::$drivers,$oc);$this->plugins=$fh;$ja=new +Adminer;$fh[]=$ja;$Gh=new +\ReflectionObject($ja);foreach($Gh->getMethods()as$If){foreach($fh +as$dh){$D=$If->getName();if(method_exists($dh,$D))$this->hooks[$D][]=$dh;}}}function +includeOnce($n){return +include_once"./$n";}static +function +checksum($n){$ed=str_replace("\r","",file_get_contents($n));$ed=preg_replace('~\n\tprotected \$translations = array\(.*?\n\t\);~s','',$ed);return +dechex(crc32($ed));}function +checksums(){$gd=array_values($this->driverFiles);foreach($this->plugins +as$dh){$Gh=new +\ReflectionObject($dh);$gd[]=$Gh->getFileName();}$J=array();foreach($gd +as$n)$J[basename($n,'.php')]=self::checksum($n);return$J;}static +function +officialChecksums(){return +array('adminer.js'=>'a0599090','backward-keys'=>'afce3b7d','before-unload'=>'48618ca0','config'=>'f49cc617','dark-switcher'=>'3d490dea','database-hide'=>'90c6c0dc','designs'=>'56f1c186','dump-alter'=>'d078b2db','dump-bz2'=>'f0d0e336','dump-date'=>'adc7f1c7','dump-json'=>'767dd321','dump-xml'=>'9f039895','dump-zip'=>'93817d96','edit-foreign'=>'8c874a58','edit-textarea'=>'a24c3cc','editor-setup'=>'a7dc3a37','editor-views'=>'5c12b185','enum-option'=>'a2563959','file-upload'=>'235eaa7a','foreign-system'=>'ebb4c654','frames'=>'b0e1d11a','highlight-codemirror'=>'f1a34275','highlight-monaco'=>'6a92cc58','highlight-prism'=>'4c12cf3','import-csv'=>'1d174088','login-ip'=>'b4766b62','login-otp'=>'62c517c0','login-passkey'=>'f69f2f06','login-password-less'=>'97c37010','login-reverse-proxy'=>'7bb63f11','login-servers'=>'f9ac2f28','login-ssl'=>'6ed147bc','login-table'=>'7b15c3cd','menu-links'=>'f1f86a60','remote-color'=>'33a766c2','row-numbers'=>'eec8698c','select-email'=>'ead22272','select-image'=>'f55c0231','slugify'=>'4d5adde6','sql-gemini'=>'fabc3537','sql-log'=>'b4355039','table-indexes-structure'=>'a90cc0c9','table-structure'=>'a8458e02','tables-filter'=>'f8f51976','timeout'=>'90597366','version-github'=>'497af47b','version-noverify'=>'966937e9','clickhouse'=>'5bb80dfb','elastic'=>'f7017c4','firebird'=>'5499d1a','igdb'=>'170d083','imap'=>'ac143217','mongo'=>'c3b8f5a4','redis'=>'12f1a73b','simpledb'=>'79488f8b',);}function +__call($D,array$Mg){$va=array();foreach($Mg +as$x=>$X)$va[]=&$Mg[$x];$J=null;foreach($this->hooks[$D]as$dh){$Y=call_user_func_array(array($dh,$D),$va);if($Y!==null){if(!self::$append[$D])return$Y;$J=$Y+(array)$J;}}return$J;}}abstract class Plugin{protected$translations=array();function description(){return$this->lang('');}function screenshot(){return"";}protected function -lang($t,$zf=null){$ta=func_get_args();$ta[0]=idx($this->translations[LANG],$t)?:$t;return -call_user_func_array('Adminer\lang_format',$ta);}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new +lang($u,$bg=null){$va=func_get_args();$va[0]=idx($this->translations[LANG],$u)?:$u;return +call_user_func_array('Adminer\lang_format',$va);}}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($N,$V,$F){mysqli_report(MYSQLI_REPORT_OFF);list($Ad,$xg)=host_port($N);$Kh=adminer()->connectSsl();if($Kh)$this->ssl_set($Kh['key'],$Kh['cert'],$Kh['ca'],'','');$J=@$this->real_connect(($N!=""?$Ad:ini_get("mysqli.default_host")),($N.$V!=""?$V:ini_get("mysqli.default_user")),($N.$V.$F!=""?$F:ini_get("mysqli.default_pw")),null,(is_numeric($xg)?intval($xg):ini_get("mysqli.default_port")),(is_numeric($xg)?null:$xg),($Kh?($Kh['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($J?'':$this->error);}function -set_charset($Ta){if(parent::set_charset($Ta))return -true;parent::set_charset('utf8');return$this->query("SET NAMES $Ta");}function +attach($N,$V,$Xg){mysqli_report(MYSQLI_REPORT_OFF);list($Wd,$gh)=host_port($N);$Ai=adminer()->connectSsl();$Qj=($Ai&&($Ai['key']||$Ai['cert']||$Ai['ca']||isset($Ai['verify'])));if($Qj)$this->ssl_set($Ai['key'],$Ai['cert'],$Ai['ca'],'','');$J=@$this->real_connect(($N!=""?$Wd:ini_get("mysqli.default_host")),($N.$V!=""?$V:ini_get("mysqli.default_user")),($N.$V.$Xg!=""?$Xg:ini_get("mysqli.default_pw")),null,(is_numeric($gh)?intval($gh):ini_get("mysqli.default_port")),(is_numeric($gh)?null:$gh),($Qj?($Ai['verify']!==false?MYSQLI_CLIENT_SSL:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($J?'':$this->error);}function +set_charset($Va){if(parent::set_charset($Va))return +true;parent::set_charset('utf8');return$this->query("SET NAMES $Va");}function next_result(){return self::more_results()&&parent::next_result();}function -quote($Q){return"'".$this->escape_string($Q)."'";}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class +quote($Q){return"'".$this->escape_string($Q)."'";}function +inTransaction(){return +false;}}}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($N,$V,$F){if(ini_bool("mysql.allow_local_infile"))return -lang(74,"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$this->link=@mysql_connect(($N!=""?$N:ini_get("mysql.default_host")),($N.$V!=""?$V:ini_get("mysql.default_user")),($N.$V.$F!=""?$F:ini_get("mysql.default_password")),true,131072);if(!$this->link)return +attach($N,$V,$Xg){if(ini_bool("mysql.allow_local_infile"))return +lang(77,"'mysql.allow_local_infile'","MySQLi","PDO_MySQL");$this->link=@mysql_connect(($N!=""?$N:ini_get("mysql.default_host")),($N.$V!=""?$V:ini_get("mysql.default_user")),($N.$V.$Xg!=""?$Xg: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($Ta){return -mysql_set_charset($Ta,$this->link)||mysql_set_charset('utf8',$this->link);}function +set_charset($Va){return +mysql_set_charset($Va,$this->link)||mysql_set_charset('utf8',$this->link);}function quote($Q){return"'".mysql_real_escape_string($Q,$this->link)."'";}function -select_db($Fb){return -mysql_select_db($Fb,$this->link);}function -query($H,$Hi=false){$I=@($Hi?mysql_unbuffered_query($H,$this->link):mysql_query($H,$this->link));$this->error="";if(!$I){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return +select_db($Mb){return +mysql_select_db($Mb,$this->link);}function +query($H,$Aj=false){$I=@($Aj?mysql_unbuffered_query($H,$this->link):mysql_query($H,$this->link));$this->error="";if(!$I){$this->errno=mysql_errno($this->link);$this->error=mysql_error($this->link);return false;}if($I===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return true;}return new @@ -2667,137 +2629,136 @@ function Db extends PdoDb{var$extension="PDO_MySQL";function -attach($N,$V,$F){$Of=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$Kh=adminer()->connectSsl();if($Kh){if($Kh['key'])$Of[\PDO::MYSQL_ATTR_SSL_KEY]=$Kh['key'];if($Kh['cert'])$Of[\PDO::MYSQL_ATTR_SSL_CERT]=$Kh['cert'];if($Kh['ca'])$Of[\PDO::MYSQL_ATTR_SSL_CA]=$Kh['ca'];if(isset($Kh['verify']))$Of[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$Kh['verify'];}list($Ad,$xg)=host_port($N);return$this->dsn("mysql:charset=utf8".($Ad!=""?";host=$Ad":'').($xg?(is_numeric($xg)?";port=":";unix_socket=").$xg:""),$V,$F,$Of);}function -set_charset($Ta){return$this->query("SET NAMES $Ta");}function -select_db($Fb){return$this->query("USE ".idf_escape($Fb));}function -query($H,$Hi=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Hi);return -parent::query($H,$Hi);}}}class +attach($N,$V,$Xg){$vg=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);if(isset($_GET["select"]))$vg[\PDO::MYSQL_ATTR_MULTI_STATEMENTS]=false;$Ai=adminer()->connectSsl();if($Ai){if($Ai['key'])$vg[\PDO::MYSQL_ATTR_SSL_KEY]=$Ai['key'];if($Ai['cert'])$vg[\PDO::MYSQL_ATTR_SSL_CERT]=$Ai['cert'];if($Ai['ca'])$vg[\PDO::MYSQL_ATTR_SSL_CA]=$Ai['ca'];if(isset($Ai['verify']))$vg[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$Ai['verify'];}list($Wd,$gh)=host_port($N);return$this->dsn("mysql:charset=utf8".($Wd!=""?";host=$Wd":'').($gh?(is_numeric($gh)?";port=":";unix_socket=").$gh:""),$V,$Xg,$vg);}function +set_charset($Va){return$this->query("SET NAMES $Va");}function +select_db($Mb){return$this->query("USE ".idf_escape($Mb));}function +query($H,$Aj=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Aj);return +parent::query($H,$Aj);}}}class Driver extends SqlDriver{static$extensions=array("MySQLi","MySQL","PDO_MySQL");static$jush="sql";var$unsigned=array("unsigned","zerofill","unsigned zerofill");var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","REGEXP","IN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL");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");static function -connect($N,$V,$F){$e=parent::connect($N,$V,$F);if(is_string($e)){if(function_exists('iconv')&&!is_utf8($e)&&strlen($ih=iconv("windows-1250","utf-8",$e))>strlen($e))$e=$ih;return$e;}$e->set_charset(charset($e));$e->query("SET sql_quote_show_create = 1, autocommit = 1");$e->flavor=(preg_match('~MariaDB~',$e->server_info)?'maria':'mysql');add_driver(DRIVER,($e->flavor=='maria'?"MariaDB":"MySQL"));return$e;}function -__construct(Db$e){parent::__construct($e);$this->types=array(lang(75)=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),lang(76)=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),lang(77)=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),lang(78)=>array("enum"=>65535,"set"=>64),lang(79)=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),lang(80)=>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,$e))$this->types[lang(77)]["json"]=4294967295;if(min_version('',10.7,$e)){$this->types[lang(77)]["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version('',10.5,$e)){$this->types[lang(81)]["inet6"]=39;if(min_version('','10.10',$e))$this->types[lang(81)]["inet4"]=15;}if(min_version(9,11.7,$e))$this->types[lang(75)]["vector"]=16383;if(min_version(5.7,10.2,$e))$this->generated=array("STORED","VIRTUAL");}function +connect($N,$V,$Xg){$e=parent::connect($N,$V,$Xg);if(is_string($e)){if(function_exists('iconv')&&!is_utf8($e)&&strlen($Wh=iconv("windows-1252","utf-8//IGNORE",$e))>strlen($e))$e=$Wh;return$e;}$e->set_charset(charset($e));$e->query("SET sql_quote_show_create = 1, autocommit = 1");$e->flavor=(preg_match('~MariaDB~',$e->server_info)?'maria':'mysql');add_driver(DRIVER,($e->flavor=='maria'?"MariaDB":"MySQL"));return$e;}function +__construct(Db$e){parent::__construct($e);$this->types=array(lang(78)=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),lang(79)=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),lang(80)=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),lang(81)=>array("enum"=>65535,"set"=>64),lang(82)=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),lang(83)=>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,$e))$this->types[lang(80)]["json"]=4294967295;if(min_version('',10.7,$e)){$this->types[lang(80)]["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version('',10.5,$e)){$this->types[lang(84)]["inet6"]=39;if(min_version('','10.10',$e))$this->types[lang(84)]["inet4"]=15;}if(min_version(9,11.7,$e))$this->types[lang(78)]["vector"]=16383;if(min_version(5.7,10.2,$e))$this->generated=array("STORED","VIRTUAL");}function unconvertFunction(array$l){return(preg_match("~binary~",$l["type"])?"UNHEX":($l["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"b''"):($l["type"]=="vector"?"".($this->conn->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."":(preg_match("~geometry|point|linestring|polygon~",$l["type"])?"GeomFromText":""))));}function insert($R,array$O){return($O?parent::insert($R,$O):queries("INSERT INTO ".table($R)." ()\nVALUES ()"));}function -insertUpdate($R,array$L,array$Dg){$c=array_keys(reset($L));$Bg="INSERT INTO ".table($R)." (".implode(", ",$c).") VALUES\n";$bj=array();foreach($c -as$w)$bj[$w]="$w = VALUES($w)";$Rh="\nON DUPLICATE KEY UPDATE ".implode(", ",$bj);$bj=array();$x=0;foreach($L -as$O){$Y="(".implode(", ",$O).")";if($bj&&(strlen($Bg)+$x+strlen($Y)+strlen($Rh)>1e6)){if(!queries($Bg.implode(",\n",$bj).$Rh))return -false;$bj=array();$x=0;}$bj[]=$Y;$x+=strlen($Y)+2;}return -queries($Bg.implode(",\n",$bj).$Rh);}function -slowQuery($H,$ni){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$ni FOR $H";elseif(preg_match('~^(SELECT\b)(.+)~is',$H,$A))return"$A[1] /*+ MAX_EXECUTION_TIME(".($ni*1000).") */ $A[2]";}}function -convertSearch($t,array$X,array$l){return(preg_match('~char|text|enum|set~',$l["type"])&&!preg_match("~^utf8~",$l["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($t USING ".charset($this->conn).")":$t);}function -quoteBinary($ih){return"X".q(bin2hex($ih));}function +insertUpdate($R,array$L,array$ph){$d=array_keys(reset($L));$nh="INSERT INTO ".table($R)." (".implode(", ",$d).") VALUES\n";$Wj=array();foreach($d +as$x)$Wj[$x]="$x = VALUES($x)";$Hi="\nON DUPLICATE KEY UPDATE ".implode(", ",$Wj);$Wj=array();$y=0;foreach($L +as$O){$Y="(".implode(", ",$O).")";if($Wj&&(strlen($nh)+$y+strlen($Y)+strlen($Hi)>1e6)){if(!queries($nh.implode(",\n",$Wj).$Hi))return +false;$Wj=array();$y=0;}$Wj[]=$Y;$y+=strlen($Y)+2;}return +queries($nh.implode(",\n",$Wj).$Hi);}function +slowQuery($H,$dj){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$dj FOR $H";elseif(preg_match('~^(SELECT\b)(.+)~is',$H,$B))return"$B[1] /*+ MAX_EXECUTION_TIME(".($dj*1000).") */ $B[2]";}}function +convertSearch($u,array$X,array$l){return(preg_match('~char|text|enum|set~',$l["type"])&&!preg_match("~^utf8~",$l["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($u USING ".charset($this->conn).")":$u);}function +typeName(\stdClass$l){$_j=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",);$J=idx($_j,$l->type,"");return +parent::typeName($l)?:($l->charsetnr==63?str_replace(array("text","varchar","char"),array("blob","varbinary","binary"),$J):$J);}function +quoteBinary($Wh){return"X".q(bin2hex($Wh));}function warnings(){$I=$this->conn->query("SHOW WARNINGS");if($I&&$I->num_rows){ob_start();print_select_result($I);return ob_get_clean();}}function -tableHelp($C,$he=false){$Je=($this->conn->flavor=='maria');if(information_schema(DB))return -strtolower("information-schema-".($Je?"$C-table/":str_replace("_","-",$C)."-table.html"));if(DB=="mysql")return($Je?"mysql$C-table/":"system-schema.html");}function -partitionsInfo($R){$fd="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($R);$I=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $fd ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$J=array();list($J["partition_by"],$J["partition"],$J["partitions"])=$I->fetch_row();$ng=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $fd AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$J["partition_names"]=array_keys($ng);$J["partition_values"]=array_values($ng);return$J;}function -hasCStyleEscapes(){static$Oa;if($Oa===null){$Jh=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Oa=(strpos($Jh,'NO_BACKSLASH_ESCAPES')===false);}return$Oa;}function +tableHelp($D,$Ee=false){$jf=($this->conn->flavor=='maria');if(information_schema(DB))return +strtolower(str_replace("_","-",DB)."-".($jf?"$D-table/":str_replace("_","-",$D)."-table.html"));if(DB=="sys")return($jf?"sys-schema/":strtolower("sys-".str_replace("_","-",preg_replace('~^x\$~','',$D)).".html"));if(DB=="mysql")return($jf?"mysql$D-table/":"system-schema.html");}function +partitionsInfo($R){$vd="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($R);$I=$this->conn->query("SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $vd ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$K=($I?$I->fetch_row():null);if(!$K)return +array();$J=array();list($J["partition_by"],$J["partition"],$J["partitions"])=$K;$Ug=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $vd AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$J["partition_names"]=array_keys($Ug);$J["partition_values"]=array_values($Ug);return$J;}function +hasCStyleEscapes(){static$Qa;if($Qa===null){$zi=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Qa=(strpos($zi,'NO_BACKSLASH_ESCAPES')===false);}return$Qa;}function +lineComment(){return"#|-- ";}function engines(){$J=array();foreach(get_rows("SHOW ENGINES")as$K){if(preg_match("~YES|DEFAULT~",$K["Support"]))$J[]=$K["Engine"];}return$J;}function -indexAlgorithms(array$Xh){return(preg_match('~^(MEMORY|NDB)$~',$Xh["Engine"])?array("HASH","BTREE"):array());}}function -idf_escape($t){return"`".str_replace("`","``",$t)."`";}function -table($t){return -idf_escape($t);}function -get_databases($Xc){$J=get_session("dbs");if($J===null){$H="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$J=($Xc?slow_query($H):get_vals($H));restart_session();set_session("dbs",$J);stop_session();}return$J;}function -limit($H,$Z,$y,$Af=0,$uh=" "){return" $H$Z".($y?$uh."LIMIT $y".($Af?" OFFSET $Af":""):"");}function -limit1($R,$H,$Z,$uh="\n"){return -limit($H,$Z,1,0,$uh);}function -db_collation($i,array$fb){$J=null;$g=get_val("SHOW CREATE DATABASE ".idf_escape($i),1);if(preg_match('~ COLLATE ([^ ]+)~',$g,$A))$J=$A[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$g,$A))$J=$fb[$A[1]][-1];return$J;}function +indexAlgorithms(array$Ni){return(preg_match('~^(MEMORY|NDB)$~',$Ni["Engine"])?array("HASH","BTREE"):array());}}function +idf_escape($u){return"`".str_replace("`","``",$u)."`";}function +table($u){return +idf_escape($u);}function +get_databases($nd){$J=get_session("dbs");if($J===null){$H="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$Bi=microtime(true);$J=($nd?slow_query($H):get_vals($H));if(microtime(true)-$Bi>0.1){restart_session();set_session("dbs",$J);stop_session();}}return$J;}function +limit($H,$Z,$z,$gg=0,$hi=" "){return" $H$Z".($z?$hi."LIMIT $z".($gg?" OFFSET $gg":""):"");}function +limit1($R,$H,$Z,$hi="\n"){return +limit($H,$Z,1,0,$hi);}function +db_collation($i,array$ib){$J=null;$g=get_val("SHOW CREATE DATABASE ".idf_escape($i),1);if(preg_match('~ COLLATE ([^ ]+)~',$g,$B))$J=$B[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$g,$B))$J=$ib[$B[1]][-1];return$J;}function logged_user(){return get_val("SELECT 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$h){$J=array();foreach($h as$i)$J[$i]=count(get_vals("SHOW TABLES IN ".idf_escape($i)));return$J;}function -table_status($C="",$Kc=false){$J=array();foreach(get_rows($Kc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($C!=""?"AND TABLE_NAME = ".q($C):"ORDER BY Name"):"SHOW TABLE STATUS".($C!=""?" LIKE ".q(addcslashes($C,"%_\\")):""))as$K){if($K["Engine"]=="InnoDB")$K["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$K["Comment"]);if(!isset($K["Engine"]))$K["Comment"]="";if($C!="")$K["Name"]=$C;$J[$K["Name"]]=$K;}return$J;}function +table_status($D="",$Yc=false){$J=array();foreach(get_rows($Yc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($D!=""?"AND TABLE_NAME = ".q($D):"ORDER BY Name"):"SHOW TABLE STATUS".($D!=""?" LIKE ".q(addcslashes($D,"%_\\")):""))as$K){if($K["Engine"]=="InnoDB")$K["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$K["Comment"]);if(!isset($K["Engine"]))$K["Comment"]="";if($D!="")$K["Name"]=$D;$J[$K["Name"]]=$K;}return$J;}function is_view(array$S){return$S["Engine"]===null;}function fk_support(array$S){return preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$S["Engine"]);}function -fields($R){$Je=(connection()->flavor=='maria');$J=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($R)." ORDER BY ORDINAL_POSITION")as$K){$l=$K["COLUMN_NAME"];$U=$K["COLUMN_TYPE"];$jd=$K["GENERATION_EXPRESSION"];$Hc=$K["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Hc,$id);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$Le);$j=$K["COLUMN_DEFAULT"];if($j!=""){$ge=preg_match('~text|json~',$Le[1]);if(!$Je&&$ge)$j=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($j));if($Je||$ge){$j=($j=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($A){return -stripslashes(str_replace("''","'",$A[1]));},$j));}if(!$Je&&preg_match('~binary~',$Le[1])&&preg_match('~^0x(\w*)$~',$j,$A))$j=pack("H*",$A[1]);}$J[$l]=array("field"=>$l,"full_type"=>$U,"type"=>$Le[1],"length"=>$Le[2],"unsigned"=>ltrim($Le[3].$Le[4]),"default"=>($id?($Je?$jd:stripslashes($jd)):$j),"null"=>($K["IS_NULLABLE"]=="YES"),"auto_increment"=>($Hc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Hc,$A)?$A[1]:""),"collation"=>$K["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$K[PRIVILEGES],where,order")),"comment"=>$K["COLUMN_COMMENT"],"primary"=>($K["COLUMN_KEY"]=="PRI"),"generated"=>($id[1]=="PERSISTENT"?"STORED":$id[1]),);}return$J;}function -indexes($R,$f=null){$J=array();foreach(get_rows("SHOW INDEX FROM ".table($R),$f)as$K){$C=$K["Key_name"];$J[$C]["type"]=($C=="PRIMARY"?"PRIMARY":($K["Index_type"]=="FULLTEXT"?"FULLTEXT":($K["Non_unique"]?(preg_match('~^(SPATIAL|VECTOR)$~',$K["Index_type"])?$K["Index_type"]:"INDEX"):"UNIQUE")));$J[$C]["columns"][]=$K["Column_name"];$J[$C]["lengths"][]=($K["Index_type"]=="SPATIAL"?null:$K["Sub_part"]);$J[$C]["descs"][]=null;$J[$C]["algorithm"]=$K["Index_type"];}return$J;}function -foreign_keys($R){static$rg='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$J=array();$wb=get_val("SHOW CREATE TABLE ".table($R),1);if($wb){preg_match_all("~CONSTRAINT ($rg) FOREIGN KEY ?\\(((?:$rg,? ?)+)\\) REFERENCES ($rg)(?:\\.($rg))? \\(((?:$rg,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$wb,$Me,PREG_SET_ORDER);foreach($Me -as$A){preg_match_all("~$rg~",$A[2],$Eh);preg_match_all("~$rg~",$A[5],$gi);$J[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',$Eh[0]),"target"=>array_map('Adminer\idf_unescape',$gi[0]),"on_delete"=>($A[6]?:"RESTRICT"),"on_update"=>($A[7]?:"RESTRICT"),);}}return$J;}function -view($C){return -array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($C),1)));}function +parse_type($xd){preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$xd,$B);return +array($B[1],$B[2],ltrim($B[3].$B[4]));}function +fields($R){$jf=(connection()->flavor=='maria');$J=array();foreach(get_rows("SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = ".q($R)." ORDER BY ORDINAL_POSITION")as$K){$l=$K["COLUMN_NAME"];$U=$K["COLUMN_TYPE"];$Ad=$K["GENERATION_EXPRESSION"];$Vc=$K["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Vc,$_d);list($zj,$y,$Gj)=parse_type($U);$j=$K["COLUMN_DEFAULT"];if($j!=""){$De=preg_match('~text|json~',$zj);if(!$jf&&$De)$j=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($j));if($jf||$De){$j=($j=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($B){return +stripslashes(str_replace("''","'",$B[1]));},$j));}if(!$jf&&preg_match('~binary~',$zj)&&preg_match('~^0x(\w*)$~',$j,$B))$j=pack("H*",$B[1]);}$J[$l]=array("field"=>$l,"full_type"=>$U,"type"=>$zj,"length"=>$y,"unsigned"=>$Gj,"default"=>($_d?($jf?$Ad:stripslashes($Ad)):$j),"null"=>($K["IS_NULLABLE"]=="YES"),"auto_increment"=>($Vc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Vc,$B)?$B[1]:""),"collation"=>$K["COLLATION_NAME"],"privileges"=>array_flip(explode(",","$K[PRIVILEGES],where,order")),"comment"=>$K["COLUMN_COMMENT"],"primary"=>($K["COLUMN_KEY"]=="PRI"),"generated"=>($_d[1]=="PERSISTENT"?"STORED":$_d[1]),);}return$J;}function +indexes($R,$f=null){$J=array();foreach(get_rows("SHOW INDEX FROM ".table($R),$f)as$K){$D=$K["Key_name"];$J[$D]["type"]=($D=="PRIMARY"?"PRIMARY":($K["Index_type"]=="FULLTEXT"?"FULLTEXT":($K["Non_unique"]?(preg_match('~^(SPATIAL|VECTOR)$~',$K["Index_type"])?$K["Index_type"]:"INDEX"):"UNIQUE")));$J[$D]["columns"][]=$K["Column_name"];$J[$D]["lengths"][]=($K["Index_type"]=="SPATIAL"?null:$K["Sub_part"]);$J[$D]["descs"][]=null;$J[$D]["algorithm"]=$K["Index_type"];}return$J;}function +foreign_keys($R){static$Zg='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$J=array();$Ab=get_val("SHOW CREATE TABLE ".table($R),1);if($Ab){preg_match_all("~CONSTRAINT ($Zg) FOREIGN KEY ?\\(((?:$Zg,? ?)+)\\) REFERENCES ($Zg)(?:\\.($Zg))? \\(((?:$Zg,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$Ab,$lf,PREG_SET_ORDER);foreach($lf +as$B){preg_match_all("~$Zg~",$B[2],$ui);preg_match_all("~$Zg~",$B[5],$Wi);$J[idf_unescape($B[1])]=array("db"=>idf_unescape($B[4]!=""?$B[3]:$B[4]),"table"=>idf_unescape($B[4]!=""?$B[4]:$B[3]),"source"=>array_map('Adminer\idf_unescape',$ui[0]),"target"=>array_map('Adminer\idf_unescape',$Wi[0]),"on_delete"=>($B[6]?:"RESTRICT"),"on_update"=>($B[7]?:"RESTRICT"),);}}return$J;}function +view($D){return +array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($D),1)));}function collations(){$J=array();foreach(get_rows("SHOW COLLATION")as$K){if($K["Default"])$J[$K["Charset"]][-1]=$K["Collation"];else$J[$K["Charset"]][]=$K["Collation"];}ksort($J);foreach($J -as$w=>$X)sort($J[$w]);return$J;}function -information_schema($i){return($i=="information_schema")||(min_version(5.5)&&$i=="performance_schema");}function +as$x=>$X)sort($J[$x]);return$J;}function +information_schema($i,$Yh=""){return($i=="information_schema")||(min_version(5.5)&&$i=="performance_schema");}function error(){return h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function -create_database($i,$eb){return -queries("CREATE DATABASE ".idf_escape($i).($eb?" COLLATE ".q($eb):""));}function +create_database($i,$hb){return +queries("CREATE DATABASE ".idf_escape($i).($hb?" COLLATE ".q($hb):""));}function drop_databases(array$h){$J=apply_queries("DROP DATABASE",$h,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$J;}function -rename_database($C,$eb){$J=false;if(create_database($C,$eb)){$T=array();$gj=array();foreach(tables_list()as$R=>$U){if($U=='VIEW')$gj[]=$R;else$T[]=$R;}$J=(!$T&&!$gj)||move_tables($T,$gj,$C);drop_databases($J?array(DB):array());}return$J;}function -auto_increment(){$_a=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$u){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$u["columns"],true)){$_a="";break;}if($u["type"]=="PRIMARY")$_a=" UNIQUE";}}return" AUTO_INCREMENT$_a";}function -alter_table($R,$C,array$m,array$Zc,$jb,$pc,$eb,$za,$mg){$ra=array();foreach($m -as$l){if($l[1]){$j=$l[1][3];if(preg_match('~ GENERATED~',$j)){$l[1][3]=(connection()->flavor=='maria'?"":$l[1][2]);$l[1][2]=$j;}$ra[]=($R!=""?($l[0]!=""?"CHANGE ".idf_escape($l[0]):"ADD"):" ")." ".implode($l[1]).($R!=""?$l[2]:"");}else$ra[]="DROP ".idf_escape($l[0]);}$ra=array_merge($ra,$Zc);$P=($jb!==null?" COMMENT=".q($jb):"").($pc?" ENGINE=".q($pc):"").($eb?" COLLATE ".q($eb):"").($za!=""?" AUTO_INCREMENT=$za":"");if($mg){$ng=array();if($mg["partition_by"]=='RANGE'||$mg["partition_by"]=='LIST'){foreach($mg["partition_names"]as$w=>$X){$Y=$mg["partition_values"][$w];$ng[]="\n PARTITION ".idf_escape($X)." VALUES ".($mg["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$P -.="\nPARTITION BY $mg[partition_by]($mg[partition])";if($ng)$P -.=" (".implode(",",$ng)."\n)";elseif($mg["partitions"])$P -.=" PARTITIONS ".(+$mg["partitions"]);}elseif($mg===null)$P +rename_database($D,$hb){$J=false;if(create_database($D,$hb)){$T=array();$bk=array();foreach(tables_list()as$R=>$U){if($U=='VIEW')$bk[]=$R;else$T[]=$R;}$J=(!$T&&!$bk)||move_tables($T,$bk,$D);drop_databases($J?array(DB):array());}return$J;}function +auto_increment(){$Ba=" 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)){$Ba="";break;}if($v["type"]=="PRIMARY")$Ba=" UNIQUE";}}return" AUTO_INCREMENT$Ba";}function +alter_table($R,$D,array$m,array$pd,$lb,$Ac,$hb,$Aa,$Tg){$ra=array();foreach($m +as$l){if($l[1]){$j=$l[1][3];if(preg_match('~ GENERATED~',$j)){$l[1][3]=(connection()->flavor=='maria'?"":$l[1][2]);$l[1][2]=$j;}$ra[]=($R!=""?($l[0]!=""?"CHANGE ".idf_escape($l[0]):"ADD"):" ")." ".implode($l[1]).($R!=""?$l[2]:"");}else$ra[]="DROP ".idf_escape($l[0]);}$ra=array_merge($ra,$pd);$P=($lb!==null?" COMMENT=".q($lb):"").($Ac?" ENGINE=".q($Ac):"").($hb?" COLLATE ".q($hb):"").($Aa!=""?" AUTO_INCREMENT=$Aa":"");if($Tg){$Ug=array();if($Tg["partition_by"]=='RANGE'||$Tg["partition_by"]=='LIST'){foreach($Tg["partition_names"]as$x=>$X){$Y=$Tg["partition_values"][$x];$Ug[]="\n PARTITION ".idf_escape($X)." VALUES ".($Tg["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$P +.="\nPARTITION BY $Tg[partition_by]($Tg[partition])";if($Ug)$P +.=" (".implode(",",$Ug)."\n)";elseif($Tg["partitions"])$P +.=" PARTITIONS ".(+$Tg["partitions"]);}elseif($Tg===null)$P .="\nREMOVE PARTITIONING";if($R=="")return -queries("CREATE TABLE ".table($C)." (\n".implode(",\n",$ra)."\n)$P");if($R!=$C)$ra[]="RENAME TO ".table($C);if($P)$ra[]=ltrim($P);return($ra?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$ra)):true);}function -alter_indexes($R,$ra){$Sa=array();foreach($ra -as$X)$Sa[]=($X[2]=="DROP"?"\nDROP INDEX ".idf_escape($X[1]):"\nADD $X[0] ".($X[0]=="PRIMARY"?"KEY ":"").($X[1]!=""?idf_escape($X[1])." ":"")."(".implode(", ",$X[2]).")");return -queries("ALTER TABLE ".table($R).implode(",",$Sa));}function +queries("CREATE TABLE ".table($D)." (\n".implode(",\n",$ra)."\n)$P");if($R!=$D)$ra[]="RENAME TO ".table($D);if($P)$ra[]=ltrim($P);return($ra?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$ra)):true);}function +alter_indexes($R,$ra){$Ta=array();foreach($ra +as$X)$Ta[]=($X[2]=="DROP"?"\nDROP INDEX ".idf_escape($X[1]):"\nADD $X[0] ".($X[0]=="PRIMARY"?"KEY ":"").($X[1]!=""?idf_escape($X[1])." ":"")."(".implode(", ",$X[2]).")");return +queries("ALTER TABLE ".table($R).implode(",",$Ta));}function truncate_tables(array$T){return apply_queries("TRUNCATE TABLE",$T);}function -drop_views(array$gj){return -queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$gj)));}function +drop_views(array$bk){return +queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$bk)));}function drop_tables(array$T){return queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$T)));}function -move_tables(array$T,array$gj,$gi){$Yg=array();foreach($T -as$R)$Yg[]=table($R)." TO ".idf_escape($gi).".".table($R);if(!$Yg||queries("RENAME TABLE ".implode(", ",$Yg))){$Ob=array();foreach($gj -as$R)$Ob[table($R)]=view($R);connection()->select_db($gi);$i=idf_escape(DB);foreach($Ob -as$C=>$fj){if(!queries("CREATE VIEW $C AS ".str_replace(" $i."," ",$fj["select"]))||!queries("DROP VIEW $i.$C"))return +move_tables(array$T,array$bk,$Wi){$Kh=array();foreach($T +as$R)$Kh[]=table($R)." TO ".idf_escape($Wi).".".table($R);if(!$Kh||queries("RENAME TABLE ".implode(", ",$Kh))){$Vb=array();foreach($bk +as$R)$Vb[table($R)]=view($R);connection()->select_db($Wi);$i=idf_escape(DB);foreach($Vb +as$D=>$ak){if(!queries("CREATE VIEW $D AS ".str_replace(" $i."," ",$ak["select"]))||!queries("DROP VIEW $i.$D"))return false;}return true;}return false;}function -copy_tables(array$T,array$gj,$gi){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($T -as$R){$C=($gi==DB?table("copy_$R"):idf_escape($gi).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $C"))||!queries("CREATE TABLE $C LIKE ".table($R))||!queries("INSERT INTO $C SELECT * FROM ".table($R)))return -false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K){$Bi=$K["Trigger"];if(!queries("CREATE TRIGGER ".($gi==DB?idf_escape("copy_$Bi"):idf_escape($gi).".".idf_escape($Bi))." $K[Timing] $K[Event] ON $C FOR EACH ROW\n$K[Statement];"))return -false;}}foreach($gj -as$R){$C=($gi==DB?table("copy_$R"):idf_escape($gi).".".table($R));$fj=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $C"))||!queries("CREATE VIEW $C AS $fj[select]"))return +copy_tables(array$T,array$bk,$Wi){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($T +as$R){$D=($Wi==DB?table("copy_$R"):idf_escape($Wi).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $D"))||!queries("CREATE TABLE $D LIKE ".table($R))||!queries("INSERT INTO $D SELECT * FROM ".table($R)))return +false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K){$sj=$K["Trigger"];if(!queries("CREATE TRIGGER ".($Wi==DB?idf_escape("copy_$sj"):idf_escape($Wi).".".idf_escape($sj))." $K[Timing] $K[Event] ON $D FOR EACH ROW\n$K[Statement];"))return +false;}}foreach($bk +as$R){$D=($Wi==DB?table("copy_$R"):idf_escape($Wi).".".table($R));$ak=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $D"))||!queries("CREATE VIEW $D AS $ak[select]"))return false;}return true;}function -trigger($C,$R){if($C=="")return -array();$L=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($C));return +trigger($D,$R){if($D=="")return +array();$L=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($D));return reset($L);}function triggers($R){$J=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K)$J[$K["Trigger"]]=array($K["Timing"],$K["Event"]);return$J;}function trigger_options(){return array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function -routine($C,$U){$m=get_rows("SELECT - PARAMETER_NAME field, - DATA_TYPE type, - REGEXP_REPLACE(DTD_IDENTIFIER, '^[^(]+\\\\(?|\\\\)$', '') length, - REGEXP_REPLACE(DTD_IDENTIFIER, '^[^ ]+ ', '') `unsigned`, - 1 `null`, - DTD_IDENTIFIER full_type, - ".($U=="FUNCTION"?"''":"PARAMETER_MODE")." `inout`, - CHARACTER_SET_NAME collation +routine($D,$U){$L=get_rows("SELECT PARAMETER_NAME, DTD_IDENTIFIER, PARAMETER_MODE, CHARACTER_SET_NAME FROM information_schema.PARAMETERS -WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$U' AND SPECIFIC_NAME = ".q($C)." -ORDER BY ORDINAL_POSITION");$J=connection()->query("SELECT +WHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$U' AND SPECIFIC_NAME = ".q($D)." +ORDER BY ORDINAL_POSITION");$m=array();foreach($L +as$K){$xd=$K["DTD_IDENTIFIER"];list($zj,$y,$Gj)=parse_type($xd);$m[]=array("field"=>$K["PARAMETER_NAME"],"type"=>$zj,"length"=>$y,"unsigned"=>$Gj,"null"=>true,"full_type"=>$xd,"inout"=>($U=="FUNCTION"?"":$K["PARAMETER_MODE"]),"collation"=>$K["CHARACTER_SET_NAME"],);}$J=connection()->query("SELECT ROUTINE_COMMENT comment, CONCAT(IF(IS_DETERMINISTIC = 'YES', 'DETERMINISTIC\\n', ''), IF(SQL_DATA_ACCESS != 'CONTAINS SQL', CONCAT(SQL_DATA_ACCESS, '\\n'), ''), ROUTINE_DEFINITION) definition, 'SQL' language FROM information_schema.ROUTINES -WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$U' AND ROUTINE_NAME = ".q($C))->fetch_assoc();if($m&&$m[0]['field']=='')$J['returns']=array_shift($m);$J['fields']=$m;return$J;}function +WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$U' AND ROUTINE_NAME = ".q($D))->fetch_assoc();if($m&&$m[0]['field']=='')$J['returns']=array_shift($m);$J['fields']=$m;return$J;}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 array();}function -routine_id($C,array$K){return -idf_escape($C);}function +routine_id($D,array$K){return +idf_escape($D);}function last_id($I){return get_val("SELECT LAST_INSERT_ID()");}function explain(Db$e,$H){return$e->query("EXPLAIN ".(min_version(5.7)?"":"PARTITIONS ").$H);}function found_rows(array$S,array$Z){return($Z||$S["Engine"]!="InnoDB"?null:$S["Rows"]);}function -create_sql($R,$za,$Ph){$J=get_val("SHOW CREATE TABLE ".table($R),1);if(!$za)$J=preg_replace('~ AUTO_INCREMENT=\d+~','',$J);return$J;}function +create_sql($R,$Aa,$Fi){$J=get_val("SHOW CREATE TABLE ".table($R),1);if(!$Aa)$J=preg_replace('~(\n\)[^\n]*?) AUTO_INCREMENT=\d+~','\1',$J);return$J;}function truncate_sql($R){return"TRUNCATE ".table($R);}function -use_sql($Fb,$Ph=""){$C=idf_escape($Fb);$J="";if(preg_match('~CREATE~',$Ph)&&($g=get_val("SHOW CREATE DATABASE $C",1))){set_utf8mb4($g);if($Ph=="DROP+CREATE")$J="DROP DATABASE IF EXISTS $C;\n";$J -.="$g;\n";}return$J."USE $C";}function +use_sql($Mb,$Fi=""){$D=idf_escape($Mb);$J="";if(preg_match('~CREATE~',$Fi)&&($g=get_val("SHOW CREATE DATABASE $D",1))){set_utf8mb4($g);if($Fi=="DROP+CREATE")$J="DROP DATABASE IF EXISTS $D;\n";$J +.="$g;\n";}return$J."USE $D";}function trigger_sql($R){$J="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")),null,"-- ")as$K)$J .="\nCREATE TRIGGER ".idf_escape($K["Trigger"])." $K[Timing] $K[Event] ON ".table($K["Table"])." FOR EACH ROW\n$K[Statement];;\n";return$J;}function show_variables(){return @@ -2807,371 +2768,404 @@ function process_list(){return get_rows("SHOW FULL PROCESSLIST");}function convert_field(array$l){if(preg_match("~binary~",$l["type"]))return"HEX(".idf_escape($l["field"]).")";if($l["type"]=="bit")return"BIN(".idf_escape($l["field"])." + 0)";if($l["type"]=="vector")return(connection()->flavor=='maria'?"VEC_ToText":"VECTOR_TO_STRING")."(".idf_escape($l["field"]).")";if(preg_match("~geometry|point|linestring|polygon~",$l["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($l["field"]).")";}function -unconvert_field(array$l,$J){if(preg_match("~binary~",$l["type"]))$J="UNHEX($J)";if($l["type"]=="bit")$J="CONVERT(b$J, UNSIGNED)";if($l["type"]=="vector")$J=(connection()->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."($J)";if(preg_match("~geometry|point|linestring|polygon~",$l["type"])){$Bg=(min_version(8)?"ST_":"");$J=$Bg."GeomFromText($J, $Bg"."SRID($l[field]))";}return$J;}function -support($Lc){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':'').')$~',$Lc);}function -kill_process($s){return -queries("KILL ".number($s));}function +unconvert_field(array$l,$J){if(preg_match("~binary~",$l["type"]))$J="UNHEX($J)";if($l["type"]=="bit")$J="CONVERT(b$J, UNSIGNED)";if($l["type"]=="vector")$J=(connection()->flavor=='maria'?"VEC_FromText":"STRING_TO_VECTOR")."($J)";if(preg_match("~geometry|point|linestring|polygon~",$l["type"])){$nh=(min_version(8)?"ST_":"");$J=$nh."GeomFromText($J, $nh"."SRID($l[field]))";}return$J;}function +support($Zc){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':'').')$~',$Zc);}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(){return +types($Uc=false){return array();}function -type_values($s){return"";}function +type_values($t){return"";}function +type_definition($t){return +array("kind"=>"","definition"=>"");}function schemas(){return array();}function get_schema(){return"";}function -set_schema($kh,$f=null){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.'&':'').(SERVER!==null?DRIVER."=".urlencode(SERVER).'&':'').($_GET["ext"]?"ext=".urlencode($_GET["ext"]).'&':'').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).'&':'').(DB!=""?'db='.urlencode(DB).'&'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):''));function -page_header($pi,$k="",$Ma=array(),$qi=""){page_headers();if(is_ajax()&&$k){page_messages($k);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$ri=$pi.($qi!=""?": $qi":"");$si=strip_tags($ri.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo' - +set_schema($Yh,$f=null){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"]).'&':'').(DB!=""?'db='.url_escape(DB).'&'.(isset($_GET["ns"])?"ns=".url_escape($_GET["ns"])."&":""):''));function +page_header($fj,$k="",$Oa=array(),$gj=""){page_headers();if(is_ajax()&&$k){page_messages($k);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$hj=$fj.($gj!=""?": $gj":"");$ij=strip_tags($hj.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo' + -',$si,' - -';$_b=adminer()->css();if(is_int(key($_b)))$_b=array_fill_keys($_b,'light');$ud=in_array('light',$_b)||in_array('',$_b);$sd=in_array('dark',$_b)||in_array('',$_b);$Cb=($ud?($sd?null:false):($sd?:null));$We=" media='(prefers-color-scheme: dark)'";if($Cb!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.5.1");if(adminer()->head($Cb))echo"\n","\n";foreach($_b -as$Si=>$jf){$xa=($jf=='dark'&&!$Cb?$We:($jf=='light'&&$sd?" media='(prefers-color-scheme: light)'":""));echo"\n";}echo"\n\n",script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."')")."}); -document.body.classList.replace('nojs', 'js'); -if (!window.isSecureContext) { - document.body.classList.add('insecure'); -} -const offlineMessage = '".js_escape(lang(83))."'; -const thousandsSeparator = '".js_escape(lang(4))."';"),"\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"
    \n","".icon("move","","menu","")."".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Ma!==null){$z=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'

    $ri

    \n","\n";restart_session();page_messages($k);$h=&get_session("dbs");if(DB!=""&&$h&&!in_array(DB,$h,true))$h=null;stop_session();define('Adminer\PAGE_HEADER',1);}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$zb){$vd=array();foreach($zb -as$w=>$X)$vd[]="$w $X";header("Content-Security-Policy: ".implode("; ",$vd));}adminer()->headers();}function +',$ij,' + +';$Eb=adminer()->css();if(is_int(key($Eb)))$Eb=array_fill_keys($Eb,'light');$Ld=in_array('light',$Eb)||in_array('',$Eb);$Jd=in_array('dark',$Eb)||in_array('',$Eb);$Ib=($Ld?($Jd?null:false):($Jd?:null));$zf=" media='(prefers-color-scheme: dark)'";if($Ib!==false)echo"\n";echo"\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=6.0.0");if(adminer()->head($Ib))echo"\n","\n";foreach($Eb +as$Lj=>$Lf){$b=($Lf=='dark'&&!$Ib?$zf:($Lf=='light'&&$Jd?" 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(86))."'; +const thousandsSeparator = '".js_escape(lang(5))."'; +const urlSeparators = '".js_escape(ini_get("arg_separator.input"))."';"),"\n","
    \n","\n";if($Oa!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'

    $hj

    \n","
    \n";restart_session();page_messages($k);$h=&get_session("dbs");if(DB!=""&&$h&&!in_array(DB,$h,true))$h=null;stop_session();define('Adminer\PAGE_HEADER',1);ob_flush();flush();}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$Db){$Od=array();foreach($Db +as$x=>$X)$Od[]="$x $X";header("Content-Security-Policy: ".implode("; ",$Od));}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"=>"'none'","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function -get_nonce(){static$wf;if(!$wf)$wf=base64_encode(rand_string());return$wf;}function -page_messages($k){$Ri=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$cf=idx($_SESSION["messages"],$Ri);if($cf){echo"
    ".implode("
    \n
    ",$cf)."
    ".script("messagesPrint();");unset($_SESSION["messages"][$Ri]);}if($k)echo"
    $k
    \n";if(adminer()->error)echo"
    ".adminer()->error."
    \n";}function -page_footer($if=""){echo"
    \n\n\n\n\n\n",script("setupSubmitHighlight(document);");}function -int32($nf){while($nf>=2147483648)$nf-=4294967296;while($nf<=-2147483649)$nf+=4294967296;return(int)$nf;}function -long2str(array$W,$ij){$ih='';foreach($W -as$X)$ih -.=pack('V',$X);if($ij)return -substr($ih,0,end($W));return$ih;}function -str2long($ih,$ij){$W=array_values(unpack('V*',str_pad($ih,4*ceil(strlen($ih)/4),"\0")));if($ij)$W[]=strlen($ih);return$W;}function -xxtea_mx($oj,$nj,$Sh,$le){return -int32((($oj>>5&0x7FFFFFF)^$nj<<2)+(($nj>>3&0x1FFFFFFF)^$oj<<4))^int32(($Sh^$nj)+($le^$oj));}function -encrypt_string($Nh,$w){if($Nh=="")return"";$w=array_values(unpack("V*",pack("H*",md5($w))));$W=str2long($Nh,true);$nf=count($W)-1;$oj=$W[$nf];$nj=$W[0];$Kg=floor(6+52/($nf+1));$Sh=0;while($Kg-->0){$Sh=int32($Sh+0x9E3779B9);$hc=$Sh>>2&3;for($cg=0;$cg<$nf;$cg++){$nj=$W[$cg+1];$mf=xxtea_mx($oj,$nj,$Sh,$w[$cg&3^$hc]);$oj=int32($W[$cg]+$mf);$W[$cg]=$oj;}$nj=$W[0];$mf=xxtea_mx($oj,$nj,$Sh,$w[$cg&3^$hc]);$oj=int32($W[$nf]+$mf);$W[$nf]=$oj;}return +int32($Pf){while($Pf>=2147483648)$Pf-=4294967296;while($Pf<=-2147483649)$Pf+=4294967296;return(int)$Pf;}function +long2str(array$W,$dk){$Wh='';foreach($W +as$X)$Wh +.=pack('V',$X);if($dk)return +substr($Wh,0,end($W));return$Wh;}function +str2long($Wh,$dk){$W=array_values(unpack('V*',str_pad($Wh,4*ceil(strlen($Wh)/4),"\0")));if($dk)$W[]=strlen($Wh);return$W;}function +xxtea_mx($lk,$kk,$Ii,$Je){return +int32((($lk>>5&0x7FFFFFF)^$kk<<2)+(($kk>>3&0x1FFFFFFF)^$lk<<4))^int32(($Ii^$kk)+($Je^$lk));}function +encrypt_string($Di,$x){if($Di=="")return"";$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($Di,true);$Pf=count($W)-1;$lk=$W[$Pf];$kk=$W[0];$wh=floor(6+52/($Pf+1));$Ii=0;while($wh-->0){$Ii=int32($Ii+0x9E3779B9);$tc=$Ii>>2&3;for($Jg=0;$Jg<$Pf;$Jg++){$kk=$W[$Jg+1];$Of=xxtea_mx($lk,$kk,$Ii,$x[$Jg&3^$tc]);$lk=int32($W[$Jg]+$Of);$W[$Jg]=$lk;}$kk=$W[0];$Of=xxtea_mx($lk,$kk,$Ii,$x[$Jg&3^$tc]);$lk=int32($W[$Pf]+$Of);$W[$Pf]=$lk;}return long2str($W,false);}function -decrypt_string($Nh,$w){if($Nh=="")return"";if(!$w)return -false;$w=array_values(unpack("V*",pack("H*",md5($w))));$W=str2long($Nh,false);$nf=count($W)-1;$oj=$W[$nf];$nj=$W[0];$Kg=floor(6+52/($nf+1));$Sh=int32($Kg*0x9E3779B9);while($Sh){$hc=$Sh>>2&3;for($cg=$nf;$cg>0;$cg--){$oj=$W[$cg-1];$mf=xxtea_mx($oj,$nj,$Sh,$w[$cg&3^$hc]);$nj=int32($W[$cg]-$mf);$W[$cg]=$nj;}$oj=$W[$nf];$mf=xxtea_mx($oj,$nj,$Sh,$w[$cg&3^$hc]);$nj=int32($W[0]-$mf);$W[0]=$nj;$Sh=int32($Sh-0x9E3779B9);}return -long2str($W,true);}$tg=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($w)=explode(":",$X);$tg[$w]=$X;}}function -add_invalid_login(){$Fa=get_temp_dir()."/adminer-invalid";foreach(glob("$Fa*")?:array($Fa)as$Rc){$o=file_open_lock($Rc);if($o)break;}if(!$o)$o=file_open_lock("$Fa-".rand_string());if(!$o)return;$be=json_decode(stream_get_contents($o),true);$mi=time();if($be){foreach($be -as$ce=>$X){if($X[0]<$mi)unset($be[$ce]);}}$ae=&$be[adminer()->bruteForceKey()];if(!$ae)$ae=array($mi+30*60,0);$ae[1]++;file_write_unlock($o,json_encode($be));}function -check_invalid_login(array&$tg){$be=array();foreach(glob(get_temp_dir()."/adminer-invalid*")as$Rc){$o=file_open_lock($Rc);if($o){$be=json_decode(stream_get_contents($o),true);file_unlock($o);break;}}$ae=idx($be,adminer()->bruteForceKey(),array());$vf=($ae[1]>29?$ae[0]-time():0);if($vf>0)auth_error(lang(85,ceil($vf/60)),$tg);}$ya=$_POST["auth"];if($ya){session_regenerate_id();$dj=$ya["driver"];$N=$ya["server"];$V=$ya["username"];$F=(string)$ya["password"];$i=$ya["db"];set_password($dj,$N,$V,$F);$_SESSION["db"][$dj][$N][$V][$i]=true;if($ya["permanent"]){$w=implode("-",array_map('base64_encode',array($dj,$N,$V,$i)));$Fg=adminer()->permanentLogin(true);$tg[$w]="$w:".base64_encode($Fg?encrypt_string($F,$Fg):"");cookie("adminer_permanent",implode(" ",$tg));}if(count($_POST)==1||DRIVER!=$dj||SERVER!=$N||$_GET["username"]!==$V||DB!=$i)redirect(auth_url($dj,$N,$V,$i));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$w)set_session($w,null);unset_permanent($tg);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),lang(86).' '.lang(87));}elseif($tg&&!$_SESSION["pwds"]){session_regenerate_id();$Fg=adminer()->permanentLogin();foreach($tg -as$w=>$X){list(,$Za)=explode(":",$X);list($dj,$N,$V,$i)=array_map('base64_decode',explode("-",$w));set_password($dj,$N,$V,decrypt_string(base64_decode($Za),$Fg));$_SESSION["db"][$dj][$N][$V][$i]=true;}}function -unset_permanent(array&$tg){foreach($tg -as$w=>$X){list($dj,$N,$V,$i)=array_map('base64_decode',explode("-",$w));if($dj==DRIVER&&$N==SERVER&&$V==$_GET["username"]&&$i==DB)unset($tg[$w]);}cookie("adminer_permanent",implode(" ",$tg));}function -auth_error($k,array&$tg){$xh=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$xh]||$_GET[$xh])&&!$_SESSION["token"])$k=lang(88);else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$k -.=($k?'
    ':'').lang(89,target_blank(),'permanentLogin()');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($tg);}}if(!$_COOKIE[$xh]&&$_GET[$xh]&&ini_bool("session.use_only_cookies"))$k=lang(90);$fg=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$fg["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header(lang(30),$k,null);echo"
    \n","
    ";if(hidden_fields($_POST,array("auth")))echo"

    ".lang(91)."\n";echo"

    \n";adminer()->loginForm();echo"
    \n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($tg);page_header(lang(92),lang(93,implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$e='';if(isset($_GET["username"])&&is_string(get_password())){list($Ad,$xg)=host_port(SERVER);if(preg_match('~[^-\w.:/]~',$Ad.$xg))auth_error(lang(94),$tg);if(preg_match('~^-?\d+~',$xg,$A)&&($A[0]<1024||$A[0]>65535))auth_error(lang(95),$tg);check_invalid_login($tg);$yb=adminer()->credentials();$e=Driver::connect($yb[0],$yb[1],$yb[2]);if(is_object($e)){Db::$instance=$e;Driver::$instance=new -Driver($e);if($e->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$He=null;if(!is_object($e)||($He=adminer()->login($_GET["username"],get_password()))!==true){$k=(is_string($e)?nl_br(h($e)):(is_string($He)?$He:lang(96))).(preg_match('~^ | $~',get_password())?'
    '.lang(97):'');auth_error($k,$tg);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header(lang(84),lang(98));page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($ya&&$_POST["token"])$_POST["token"]=get_token();$k='';if($_POST){if(!verify_token()){$Td="max_input_vars";$Ue=ini_get($Td);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$w){$X=ini_get($w);if($X&&(!$Ue||$X<$Ue)){$Td=$w;$Ue=$X;}}}$k=(!$_POST["token"]&&$Ue?lang(99,"'$Td'"):lang(98).' '.lang(100));}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$k=lang(101,"'post_max_size'");if(isset($_GET["sql"]))$k -.=' '.lang(102);}function -print_select_result($I,$f=null,array$Tf=array(),$y=0){$De=array();$v=array();$c=array();$Ka=array();$Gi=array();$J=array();for($r=0;(!$y||$r<$y)&&($K=$I->fetch_row());$r++){if(!$r){echo"
    \n","\n","";for($ie=0;$iefetch_field();$C=$l->name;$Sf=(isset($l->orgtable)?$l->orgtable:"");$Rf=(isset($l->orgname)?$l->orgname:$C);if($Tf&&JUSH=="sql")$De[$ie]=($C=="table"?"table=":($C=="possible_keys"?"indexes=":null));elseif($Sf!=""){if(isset($l->table))$J[$l->table]=$Sf;if(!isset($v[$Sf])){$v[$Sf]=array();foreach(indexes($Sf,$f)as$u){if($u["type"]=="PRIMARY"){$v[$Sf]=array_flip($u["columns"]);break;}}$c[$Sf]=$v[$Sf];}if(isset($c[$Sf][$Rf])){unset($c[$Sf][$Rf]);$v[$Sf][$Rf]=$ie;$De[$ie]=$Sf;}}if($l->charsetnr==63)$Ka[$ie]=true;$Gi[$ie]=$l->type;echo"name!=$Rf?" title='".h(($Sf!=""?"$Sf.":"").$Rf)."'":"").">".h($C).($Tf?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($C),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}echo"\n";}echo"";foreach($K -as$w=>$X){$z="";if(isset($De[$w])&&!$c[$De[$w]]){if($Tf&&JUSH=="sql"){$R=$K[array_search("table=",$De)];$z=ME.$De[$w].urlencode($Tf[$R]!=""?$Tf[$R]:$R);}else{$z=ME."edit=".urlencode($De[$w]);foreach($v[$De[$w]]as$cb=>$ie){if($K[$ie]===null){$z="";break;}$z -.="&where".urlencode("[".bracket_escape($cb)."]")."=".urlencode($K[$ie]);}}}$l=array('type'=>($Ka[$w]?'blob':($Gi[$w]==254?'char':'')),);$X=select_value($X,$z,$l,null);echo"$X";}}echo($r?"
    \n
    ":"

    ".lang(14))."\n";return$J;}function -referencable_primary($sh){$J=array();foreach(table_status('',true)as$Yh=>$R){if($Yh!=$sh&&fk_support($R)){foreach(fields($Yh)as$l){if($l["primary"]){if($J[$Yh]){unset($J[$Yh]);break;}$J[$Yh]=$l;}}}}return$J;}function -textarea($C,$Y,$L=10,$gb=80){echo"";}function -select_input($xa,array$Of,$Y="",$If="",$ug=""){$fi=($Of?"select":"input");return"<$fi$xa".($Of?">

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

    ".lang(122,"".h(logged_user())."")."\n";$h=adminer()->databases();if($h){$lh=support("scheme");$fb=collations();echo"

    \n","\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),"".(support("database")?"\n";$h=($_GET["dbsize"]?count_tables($h):array_flip($h));foreach($h -as$i=>$T){$eh=h(ME)."db=".urlencode($i);$s=h("Db-".$i);echo"".(support("database")?"
    ":"")."".lang(29).(get_session("dbs")!==null?" - ".lang(123)."":"")."".lang(124)."".lang(125)."".lang(126)." - ".lang(127)."".script("qsl('a').onclick = partial(ajaxSetHtml, '".js_escape(ME)."script=connect');","")."
    ".checkbox("db[]",$i,in_array($i,(array)$_POST["db"]),"","","",$s):""),"".h($i)."";$eb=h(db_collation($i,$fb));echo"".(support("database")?"$eb":$eb),"".($_GET["dbsize"]?$T:"?")."","".($_GET["dbsize"]?db_size($i):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),input_token(),"
    \n",script("tableCheck();");}if(!empty(adminer()->plugins)){echo"
    \n","

    ".lang(130)."

    \n
      \n";foreach(adminer()->plugins -as$vg){$Rb=(method_exists($vg,'description')?$vg->description():"");if(!$Rb){$Vg=new -\ReflectionObject($vg);if(preg_match('~^/[\s*]+(.+)~',$Vg->getDocComment(),$A))$Rb=$A[1];}$mh=(method_exists($vg,'screenshot')?$vg->screenshot():"");echo"
    • ".get_class($vg)."".h($Rb?": $Rb":"").($mh?" (".lang(131).")":"")."\n";}echo"
    \n";adminer()->pluginsLinks();echo"
    \n";}}page_footer("db");exit;}adminer()->afterConnect();class -TmpFile{private$handler;var$size;function +set_utf8mb4($g){static$O=false;if(!$O&&preg_match('~\butf8mb4~i',$g)){$O=true;echo"SET NAMES ".charset(connection()).";\n\n";}}if(isset($_GET["status"]))$_GET["variables"]=$_GET["status"];if(isset($_GET["import"]))$_GET["sql"]=$_GET["import"];if(DB==""&&isset($_GET["ns"]))redirect(remove_from_uri('ns'));if(!(DB!=""?connection()->select_db(DB):isset($_GET["sql"])||isset($_GET["dump"])||isset($_GET["database"])||isset($_GET["processlist"])||isset($_GET["privileges"])||isset($_GET["user"])||isset($_GET["variables"])||$_GET["script"]=="connect"||$_GET["script"]=="kill")){if(DB!=""||$_GET["refresh"]){restart_session();set_session("dbs",null);}if(DB!=""){header("HTTP/1.1 404 Not Found");page_header(lang(31).": ".h(DB),lang(118),true);}else{if($_POST["db"]&&!$k)queries_redirect(substr(ME,0,-1),lang(119),drop_databases($_POST["db"]));page_header(lang(120),$k,false);echo"

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

    ".lang(126,"".h(logged_user())."")."\n";$h=adminer()->databases();if($h){$Zh=support("scheme");$ib=collations();echo"

    \n","\n","".(support("database")?"\n";$h=($_GET["dbsize"]?count_tables($h):array_flip($h));foreach($h +as$i=>$T){$Rh=h(ME)."db=".url_escape($i);$t=h("Db-".$i);echo"".(support("database")?"
    ":"")."".lang(31).(get_session("dbs")!==null?" - ".lang(127)."":"")."".lang(128)."".lang(129)."".lang(130)." - ".lang(131).""."
    ".checkbox("db[]",$i,in_array($i,(array)$_POST["db"]),"","","",$t):""),"".h($i)."";$hb=h(db_collation($i,$ib));echo"".(support("database")?"$hb":$hb),"".($_GET["dbsize"]?$T:"?")."","".($_GET["dbsize"]?db_size($i):"?"),"\n";}echo"
    \n",(support("database")?"\n":""),input_token(),"
    \n",script("tableCheck();");}$ja=adminer();$fh=($ja +instanceof +Plugins?$ja->plugins:array());$oc=($ja +instanceof +Plugins?$ja->drivers:array());$bc=design_checksums();if($fh||$oc||$bc){$bb=($ja +instanceof +Plugins?$ja->checksums():array());$dg=Plugins::officialChecksums();$Jj=function($Lj){return" (".VERSION.")";};$eh=function($ed)use($bb,$dg,$Jj){return($bb[$ed]&&$dg[$ed]&&$bb[$ed]!==$dg[$ed]?$Jj("https://www.adminer.org/plugins/?version=".VERSION):"");};echo"
    \n","

    ".lang(134)."

    \n
      \n";foreach($fh +as$dh){$Gh=new +\ReflectionObject($dh);$Yb=(method_exists($dh,'description')?$dh->description():"");if(!$Yb){if(preg_match('~^/[\s*]+(.+)~',$Gh->getDocComment(),$B))$Yb=$B[1];}$ai=(method_exists($dh,'screenshot')?$dh->screenshot():"");echo"
    • ".get_class($dh)."".h($Yb?": $Yb":"").($ai?" (".lang(135).")":"").$eh(basename((string)$Gh->getFileName(),'.php'))."\n";}foreach($oc +as$t=>$D)echo"
    • ".h($t).": ".h($D).$eh(basename((string)$ja->driverFiles[$t],'.php'))."\n";if($bc){$fg=official_design_checksums();foreach($bc +as$n=>$ac){list($D,$ab)=$ac;$eg=$fg["$D/$n"];echo"
    • ".h($n)."".h($D?": $D":"").($eg&&$eg!==$ab?$Jj("https://www.adminer.org/?version=".VERSION."#extras"):"")."\n";}}echo"
    \n";adminer()->pluginsLinks();echo"
    \n";}}page_footer("db");exit;}adminer()->afterConnect();class +TmpFile{private$handler;var$size=0;function __construct(){$this->handler=tmpfile();}function -write($rb){$this->size+=strlen($rb);fwrite($this->handler,$rb);}function +write($ub){$this->size+=strlen($ub);fwrite($this->handler,$ub);}function send(){fseek($this->handler,0);fpassthru($this->handler);fclose($this->handler);}}if(isset($_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"];$m=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$M=array(idf_escape($_GET["field"]));$I=driver()->select($a,$M,array(where($_GET,$m)),$M);$K=($I?$I->fetch_row():array());echo -driver()->value($K[0],$m[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$m=fields($a);if(!$m)$k=error()?:lang(11);$S=table_status1($a);$C=adminer()->tableName($S);page_header(($m&&is_view($S)?$S['Engine']=='materialized view'?lang(132):lang(133):lang(134)).": ".($C!=""?$C:h($a)),$k);$dh=array();foreach($m -as$w=>$l)$dh+=$l["privileges"];adminer()->selectLinks($S,(isset($dh["insert"])||!support("table")?"":null));$jb=$S["Comment"];if($jb!="")echo"

    ".lang(42).": ".h($jb)."\n";if($m)adminer()->tableStructurePrint($m,$S);function +driver()->value($K[0],$m[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$m=fields($a);if(!$m)$k=error()?:lang(12);$S=table_status1($a);$D=adminer()->tableName($S);page_header(($m&&is_view($S)?$S['Engine']=='materialized view'?lang(136):lang(137):lang(138)).": ".($D!=""?$D:h($a)),$k);$Qh=array();foreach($m +as$x=>$l)$Qh+=$l["privileges"];adminer()->selectLinks($S,(isset($Qh["insert"])||!support("table")?"":null));$lb=$S["Comment"];if($lb!="")echo"

    ".lang(44).": ".adminer()->commentValue('TABLE',$lb)."\n";if($m)adminer()->tableStructurePrint($m,$S);function tables_links(array$T){echo"

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

    ".lang(135)."

    \n";tables_links($Sd);}if(support("indexes")&&driver()->supportsIndex($S)){echo"

    ".lang(136)."

    \n";$v=indexes($a);if($v)adminer()->tableIndexesPrint($v,$S);echo'

    ".lang(103)."

    \n";$bd=foreign_keys($a);if($bd){echo"\n","\n";foreach($bd -as$C=>$n){echo"","
    ".lang(138)."".lang(139)."".lang(106)."".lang(105)."
    ".implode(", ",array_map('Adminer\h',$n["source"]))."";$z=($n["db"]!=""?preg_replace('~db=[^&]*~',"db=".urlencode($n["db"]),ME):($n["ns"]!=""?preg_replace('~ns=[^&]*~',"ns=".urlencode($n["ns"]),ME):ME));echo"".($n["db"]!=""&&$n["db"]!=DB?"".h($n["db"]).".":"").($n["ns"]!=""&&$n["ns"]!=$_GET["ns"]?"".h($n["ns"]).".":"").h($n["table"])."","(".implode(", ",array_map('Adminer\h',$n["target"])).")","".h($n["on_delete"]),"".h($n["on_update"]),''.lang(140).'',"\n";}echo"
    \n";}echo'

    ".lang(142)."

    \n";$Va=driver()->checkConstraints($a);if($Va){echo"\n";foreach($Va -as$w=>$X)echo"","
    ".h($X),"".lang(140)."","\n";echo"
    \n";}echo'

    ".lang(144)."

    \n";$Di=triggers($a);if($Di){echo"\n";foreach($Di -as$w=>$X)echo"
    ".h($X[0])."".h($X[1])."".h($w)."".lang(140)."\n";echo"
    \n";}echo'

    ".lang(146)."

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

    BY ".h("$ig[partition_by]($ig[partition])")."\n";tables_links($Rd);}}elseif(isset($_GET["schema"])){page_header(lang(62),"",array(),h(DB.($_GET["ns"]?".$_GET[ns]":"")));$Zh=array();$ai=array();$Nc=array();$da=($_GET["schema"]?:$_COOKIE["adminer_schema-".str_replace(".","_",DB)]);preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~',$da,$Me,PREG_SET_ORDER);foreach($Me -as$r=>$A){$Zh[$A[1]]=array((float)$A[2],(float)$A[3]);$ai[]="\n\t'".js_escape($A[1])."': [ $A[2], $A[3] ]";}$wi=0;$Ga=-1;$kh=array();$Ug=array();$xe=array();$pa=driver()->allFields();foreach(table_status('',true)as$R=>$S){if(is_view($S))continue;$G=0;$kh[$R]["fields"]=array();foreach($pa[$R]as$l){$G+=1.25;$Nc[$R][$l["field"]]=$G;$kh[$R]["fields"][$l["field"]]=$l;}$kh[$R]["pos"]=($Zh[$R]?:array($wi,0));foreach(adminer()->foreignKeys($R)as$X){if(!$X["db"]){$ve=$Ga;if(idx($Zh[$R],1)||idx($Zh[$X["table"]],1))$ve=min(idx($Zh[$R],1,0),idx($Zh[$X["table"]],1,0))-1;else$Ga-=.1;while($xe[(string)$ve])$ve-=.0001;$kh[$R]["references"][$X["table"]][(string)$ve]=array($X["source"],$X["target"]);$Ug[$X["table"]][$R][(string)$ve]=$X["target"];$xe[(string)$ve]=true;}}$wi=max($wi,$kh[$R]["pos"][0]+2.5+$G);}echo'

    +as$K){$_=preg_replace('~ns=[^&]*~',"ns=".url_escape($K["ns"]),ME);echo"
  • ".($K["ns"]!=$_GET["ns"]?"".h($K["ns"]).".":"").h($K["table"])."";}echo"\n";}$pe=driver()->inheritsFrom($a);if($pe){echo"

    ".lang(139)."

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

    ".lang(140)."

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

    ".lang(107)."

    \n";$rd=foreign_keys($a);if($rd){echo"\n","\n";foreach($rd +as$D=>$o){echo"","
    ".lang(142)."".lang(143)."".lang(110)."".lang(109)."
    ".implode(", ",array_map('Adminer\h',$o["source"]))."";$_=($o["db"]!=""?preg_replace('~db=[^&]*~',"db=".url_escape($o["db"]),ME):($o["ns"]!=""?preg_replace('~ns=[^&]*~',"ns=".url_escape($o["ns"]),ME):ME));echo"".($o["db"]!=""&&$o["db"]!=DB?"".h($o["db"]).".":"").($o["ns"]!=""&&$o["ns"]!=$_GET["ns"]?"".h($o["ns"]).".":"").h($o["table"])."","(".implode(", ",array_map('Adminer\h',$o["target"])).")","".h($o["on_delete"]),"".h($o["on_update"]),''.lang(144).'',"\n";}echo"
    \n";}echo'
    \n";}if(support("check")){echo"
    \n","

    ".lang(146)."

    \n";$Xa=driver()->checkConstraints($a);if($Xa){echo"\n";foreach($Xa +as$x=>$X)echo"","
    ".shorten_utf8(preg_replace('~\s+~',' ',ltrim($X)),80,""),"".lang(144)."","\n";echo"
    \n";}echo'
    \n";}}if(support(is_view($S)?"view_trigger":"trigger")){echo"
    \n","

    ".lang(148)."

    \n";$vj=triggers($a);if($vj){echo"\n";foreach($vj +as$x=>$X)echo"
    ".h($X[0])."".h($X[1])."".h($x)."".lang(144)."\n";echo"
    \n";}echo'
    \n";}$oe=driver()->inheritedTables($a);if($oe){echo"

    ".lang(150)."

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

    BY ".h("$Pg[partition_by]($Pg[partition])")."\n";tables_links($oe);}}elseif(isset($_GET["schema"])){page_header(lang(64),"",array(),h(DB.($_GET["ns"]?".$_GET[ns]":"")));$Pi=array();$Qi=array();$bd=array();$da=($_GET["schema"]?:$_COOKIE["adminer_schema-".str_replace(".","_",DB)]);preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~',$da,$lf,PREG_SET_ORDER);foreach($lf +as$s=>$B){$Pi[$B[1]]=array((float)$B[2],(float)$B[3]);$Qi[]="\n\t'".js_escape($B[1])."': [ $B[2], $B[3] ]";}$mj=0;$Ia=-1;$Yh=array();$Fh=array();$We=array();$pa=driver()->allFields();foreach(table_status('',true)as$R=>$S){if(is_view($S))continue;$G=0;$Yh[$R]["fields"]=array();foreach($pa[$R]as$l){$G+=1.25;$bd[$R][$l["field"]]=$G;$Yh[$R]["fields"][$l["field"]]=$l;}$Yh[$R]["pos"]=($Pi[$R]?:array($mj,0));foreach(adminer()->foreignKeys($R)as$X){if(!$X["db"]){$Ue=$Ia;if(idx($Pi[$R],1)||idx($Pi[$X["table"]],1))$Ue=min(idx($Pi[$R],1,0),idx($Pi[$X["table"]],1,0))-1;else$Ia-=.1;while($We[(string)$Ue])$Ue-=.0001;$Yh[$R]["references"][$X["table"]][(string)$Ue]=array($X["source"],$X["target"]);$Fh[$X["table"]][$R][(string)$Ue]=$X["target"];$We[(string)$Ue]=true;}}$mj=max($mj,$Yh[$R]["pos"][0]+2.5+$G);}echo'

    -qs(\'#schema\').onselectstart = () => false; -const tablePos = {',implode(",",$ai)."\n",'}; -const em = qs(\'#schema\').offsetHeight / ',$wi,'; +const tablePos = {',implode(",",$Qi)."\n",'}; +const em = qs(\'#schema\').offsetHeight / ',$mj,'; document.onmousemove = schemaMousemove; -document.onmouseup = partialArg(schemaMouseup, \'',js_escape(DB),'\'); +document.onmouseup = event => schemaMouseup(event, \'',js_escape(DB),'\'); -';foreach($kh -as$C=>$R){echo"
    ",''.h($C)."",script("qsl('div').onmousedown = schemaMousedown;");foreach($R["fields"]as$l){$X=''.h($l["field"]).'';echo"
    ".($l["primary"]?"$X":$X);}foreach((array)$R["references"]as$hi=>$Wg){foreach($Wg -as$ve=>$Rg){$we=$ve-idx($Zh[$C],1);$r=0;foreach($Rg[0]as$Eh)echo"\n
    "."
    ";}}foreach((array)$Ug[$C]as$hi=>$Wg){foreach($Wg -as$ve=>$c){$we=$ve-idx($Zh[$C],1);$r=0;foreach($c -as$gi)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($kh -as$C=>$R){foreach((array)$R["references"]as$hi=>$Wg){if($kh[$hi]){foreach($Wg -as$ve=>$Rg){$hf=$wi;$Se=-10;foreach($Rg[0]as$w=>$Eh){$yg=$R["pos"][0]+$Nc[$C][$Eh];$zg=$kh[$hi]["pos"][0]+$Nc[$hi][$Rg[1][$w]];$hf=min($hf,$yg,$zg);$Se=max($Se,$yg,$zg);}echo"
    \n";}}}}echo'
    -
    ",''.h($D)."";foreach($R["fields"]as$l){$X=''.h($l["field"]).'';echo"
    ".($l["primary"]?"$X":$X);}foreach((array)$R["references"]as$Xi=>$Hh){foreach($Hh +as$Ue=>$Ch){$Ve=$Ue-idx($Pi[$D],1);$s=0;foreach($Ch[0]as$ui)echo"\n
    "."
    ";}}foreach((array)$Fh[$D]as$Xi=>$Hh){foreach($Hh +as$Ue=>$d){$Ve=$Ue-idx($Pi[$D],1);$s=0;foreach($d +as$Wi)echo"\n
    "."
    "."
    ";}}echo"\n
    \n";}foreach($Yh +as$D=>$R){foreach((array)$R["references"]as$Xi=>$Hh){if($Yh[$Xi]){foreach($Hh +as$Ue=>$Ch){$Jf=$mj;$tf=-10;foreach($Ch[0]as$x=>$ui){$hh=$R["pos"][0]+$bd[$D][$ui];$ih=$Yh[$Xi]["pos"][0]+$bd[$Xi][$Ch[1][$x]];$Jf=min($Jf,$hh,$ih);$tf=max($tf,$hh,$ih);}echo"
    \n";}}}}echo' +
    -';$Hb=array('','USE','DROP+CREATE','CREATE');$bi=array('','DROP+CREATE','CREATE');$Eb=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$Eb[]='INSERT+UPDATE';$K=get_settings("adminer_export");if(!$K)$K=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");echo"
    ".lang(148)."".html_radios("output",adminer()->dumpOutput(),$K["output"])."\n","
    ".lang(149)."".html_radios("format",adminer()->dumpFormat(),$K["format"])."\n",(JUSH=="sqlite"?"":"
    ".lang(29)."".html_select('db_style',$Hb,$K["db_style"]).(support("type")?checkbox("types",1,$K["types"],lang(6)):"").(support("routine")?checkbox("routines",1,$K["routines"],lang(64)):"").(support("event")?checkbox("events",1,$K["events"],lang(66)):"")),"
    ".lang(125)."".html_select('table_style',$bi,$K["table_style"]).checkbox("auto_increment",1,$K["auto_increment"],lang(43)).(support("trigger")?checkbox("triggers",1,$K["triggers"],lang(144)):""),"
    ".lang(150)."".html_select('data_style',$Eb,$K["data_style"]),'
    -

    +';$Ob=array('','USE','DROP+CREATE','CREATE');$Ri=array('','DROP+CREATE','CREATE');$Kb=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$Kb[]='INSERT+UPDATE';$K=get_settings("adminer_export");if(!$K)$K=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");echo"".lang(152)."".html_radios("output",adminer()->dumpOutput(),$K["output"])."\n","".lang(153)."".html_radios("format",adminer()->dumpFormat(),$K["format"])."\n",(JUSH=="sqlite"?"":"".lang(31)."".html_select('db_style',$Ob,$K["db_style"]).(support("type")?checkbox("types",1,$K["types"],lang(7)):"").(support("routine")?checkbox("routines",1,$K["routines"],lang(66)):"").(support("event")?checkbox("events",1,$K["events"],lang(68)):"")),"".lang(129)."".html_select('table_style',$Ri,$K["table_style"]).checkbox("auto_increment",1,$K["auto_increment"],lang(45)).(support("trigger")?checkbox("triggers",1,$K["triggers"],lang(148)):""),"".lang(154)."".html_select('data_style',$Kb,$K["data_style"]),' +

    ',input_token(),' - -',script("qsl('table').onclick = dumpClick;");$Cg=array();if($_GET["ns"]===""){echo"\n",script("qs('#check-schemas').onclick = partial(formCheck, /^schemas\\[/);");foreach(adminer()->schemas()as$kh)echo"","\n";$gj="";$di=tables_list();foreach($di -as$C=>$U){$Bg=preg_replace('~_.*~','',$C);$Wa=($a==""||$a==(substr($a,-1)=="%"?"$Bg%":$C));$Eg="\n";if($h){foreach($h -as$i){if(!information_schema($i)){$Bg=preg_replace('~_.*~','',$i);echo"\n";foreach(adminer()->schemas()as$Yh){if(!information_schema(DB,$Yh))echo"","\n";$bk="";$Ti=tables_list();foreach($Ti +as$D=>$U){$nh=preg_replace('~_.*~','',$D);$Ya=($a==""||$a==(substr($a,-1)=="%"?"$nh%":$D));$qh="\n";if($h){foreach($h +as$i){if(!information_schema($i)){$nh=preg_replace('~_.*~','',$i);echo"
    ","","
    ".checkbox("schemas[]",$kh,true,$kh,"","block")."\n";}elseif(DB!=""){$Wa=($a!=""?"":" checked");echo"
    ".script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);",""),"".script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);",""),"
    ".checkbox("tables[]",$C,$Wa,$C,"","block");if($U!==null&&!preg_match('~table~i',$U))$gj -.="$Eg\n";else -echo"$Eg\n";$Cg[$Bg]++;}echo$gj;if($di)echo -script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{$h=adminer()->databases();echo"
    ","","
    ".checkbox("databases[]",$i,$a==""||$a=="$Bg%",$i,"","block")."\n";$Cg[$Bg]++;}}}else + +';$oh=array();if($_GET["ns"]===""){echo"
    ","","
    ".checkbox("schemas[]",$Yh,true,$Yh,"","block")."\n";}}elseif(DB!=""){$Ya=($a!=""?"":" checked");echo"
    ","","
    ".checkbox("tables[]",$D,$Ya,$D,"","block");if($U!==null&&!preg_match('~table~i',$U))$bk +.="$qh\n";else +echo"$qh\n";$oh[$nh]++;}echo$bk;if($Ti)echo +script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{$h=adminer()->databases();echo"
    ","","
    ".checkbox("databases[]",$i,$a==""||$a=="$nh%",$i,"","block")."\n";$oh[$nh]++;}}}else echo"
    ";}echo'

    -';$Uc=true;foreach($Cg -as$w=>$X){if($w!=""&&$X>1){echo($Uc?"

    ":" ")."".h($w)."";$Uc=false;}}}elseif(isset($_GET["privileges"])){page_header(lang(63));echo'

    \n";hidden_fields_get();echo -input_hidden("db",DB),($kd?"":input_hidden("grant")),"\n","\n";while($K=$I->fetch_assoc())echo'
    ".lang(27)."".lang(25)."
    '.h($K["User"])."".h($K["Host"]).''.lang(12)."\n";if(!$kd||DB!="")echo"
    \n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$k&&$_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;}restart_session();$zd=&get_session("queries");$yd=&$zd[DB];if(!$k&&$_POST["clear"]){$yd=array();redirect(remove_from_uri("history"));}stop_session();page_header((isset($_GET["import"])?lang(67):lang(56)),$k);$Ce='--'.(JUSH=='sql'?' ':'');if(!$k&&$_POST){$o=false;if(!isset($_GET["import"]))$H=$_POST["query"];elseif($_POST["webfile"]){$Hh=adminer()->importServerPath();$o=@fopen((file_exists($Hh)?$Hh:"compress.zlib://$Hh.gz"),"rb");$H=($o?fread($o,1e6):false);}else$H=get_file("sql_file",true,";");if(is_string($H)){if(($Xe=ini_bytes("memory_limit"))!="-1")ini_set("memory_limit",max($Xe,strval(2*strlen($H)+memory_get_usage()+8e6)));if($H!=""&&strlen($H)<1e6){$Kg=$H.(preg_match("~;[ \t\r\n]*\$~",$H)?"":";");if(!$yd||first(end($yd))!=$Kg){restart_session();$yd[]=array($Kg,time());set_session("queries",$zd);stop_session();}}$Fh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|$Ce)[^\n]*\n?|--\r?\n)";$Pb=driver()->delimiter;$Af=0;$oc=true;$f=connect();if($f&&DB!=""){$f->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$f);}$ib=0;$vc=array();$gg='[\'"'.(JUSH=="sql"?'`#':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|'.$Ce.'|$'.(JUSH=="pgsql"?'|\$([a-zA-Z]\w*)?\$':'');$xi=microtime(true);$ka=get_settings("adminer_import");while($H!=""){if(!$Af&&preg_match("~^$Fh*+DELIMITER\\s+(\\S+)~i",$H,$A)){$Pb=preg_quote($A[1]);$H=substr($H,strlen($A[0]));}elseif(!$Af&&JUSH=='pgsql'&&preg_match("~^($Fh*+COPY\\s+)[^;]+\\s+FROM\\s+stdin;~i",$H,$A)){$Pb="\n\\\\\\.\r?\n";$Af=strlen($A[0]);}else{preg_match("($Pb\\s*|$gg)",$H,$A,PREG_OFFSET_CAPTURE,$Af);list($dd,$G)=$A[0];if(!$dd&&$o&&!feof($o))$H -.=fread($o,1e5);else{if(!$dd&&rtrim($H)=="")break;$Af=$G+strlen($dd);if($dd&&!preg_match("(^$Pb)",$dd)){$Pa=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($G>0&&strtolower($H[$G-1])=="e"));$rg=($dd=='/*'?'\*/':($dd=='['?']':(preg_match("~^$Ce|^#~",$dd)?"\n":preg_quote($dd).($Pa?'|\\\\.':''))));while(preg_match("($rg|\$)s",$H,$A,PREG_OFFSET_CAPTURE,$Af)){$ih=$A[0][0];if(!$ih&&$o&&!feof($o))$H -.=fread($o,1e5);else{$Af=$A[0][1]+strlen($ih);if(!$ih||$ih[0]!="\\")break;}}}else{$oc=false;$Kg=substr($H,0,$G+($Pb[0]=="\n"?3:0));$ib++;$Eg="
    ".adminer()->sqlCommandQuery($Kg)."
    \n";if(JUSH=="sqlite"&&preg_match("~^$Fh*+(ATTACH|VACUUM\\b.*\\bINTO)\\b~is",$Kg,$A)!==0){echo$Eg,"

    ".lang(153,preg_match('~ATTACH~i',$A[1])?'ATTACH':'VACUUM INTO')."\n";$vc[]=" $ib";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$Eg;ob_flush();flush();}$Lh=microtime(true);if(connection()->multi_query($Kg)&&$f&&preg_match("~^$Fh*+USE\\b~i",$Kg))$f->query($Kg);do{$I=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$Eg:""),"

    ".lang(154).(connection()->errno?" (".connection()->errno.")":"").": ".error()."\n";$vc[]=" $ib";if($_POST["error_stops"])break -2;}else{$mi=" (".format_time($Lh).")".(strlen($Kg)<1000?" ".lang(12)."":"");$ma=connection()->affected_rows;$jj=($_POST["only_errors"]?"":driver()->warnings());$kj="warnings-$ib";if($jj)$mi -.=", ".lang(38)."".script("qsl('a').onclick = partial(toggle, '$kj');","");$Cc=null;$Tf=null;$Dc="explain-$ib";if(is_object($I)){$y=$_POST["limit"];$Tf=print_select_result($I,$f,array(),$y);if(!$_POST["only_errors"]){echo"

    \n";$yf=$I->num_rows;echo"
    \n";}}else{if(preg_match("~^$Fh*+(CREATE|DROP|ALTER)$Fh++(DATABASE|SCHEMA)\\b~i",$Kg)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"

    ".lang(157,$ma)."$mi\n";}echo($jj?"

    \n":"");if($Cc){echo"\n";}}$Lh=microtime(true);}while(connection()->next_result());}$H=substr($H,$Af);$Af=0;}}}}if($oc)echo"

    ".lang(158)."\n";elseif($_POST["only_errors"])echo"

    ".lang(159,$ib-count($vc))," (".format_time($xi).")\n";elseif($vc&&$ib>1)echo"

    ".lang(154).": ".implode("",$vc)."\n";}else +';$kd=true;foreach($oh +as$x=>$X){if($x!=""&&$X>1){echo($kd?"

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

    \n";hidden_fields_get();echo +input_hidden("db",DB),($Bd?"":input_hidden("grant")),"\n","\n";while($K=$I->fetch_assoc())echo'
    ".lang(29)."".lang(27)."
    '.h($K["User"]),"".h($K["Host"]),''.lang(13)."\n";if(!$Bd||DB!="")echo"
    \n";echo"
    \n","

    \n";}elseif(isset($_GET["sql"])){if(!$k&&$_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;}restart_session();$Ud=&get_session("queries");$Td=&$Ud[DB];if(!$k&&$_POST["clear"]){$Td=array();redirect(remove_from_uri("history"));}stop_session();$ka=get_settings("adminer_import");if($_POST&&$ka)save_settings($ka,"adminer_import");page_header((isset($_GET["import"])?lang(69):lang(58)),$k);$cf=driver()->lineComment();if(!$k&&$_POST&&!(isset($_GET["import"])&&adminer()->importProcess())){$Wb=driver()->delimiter;$p=false;if(!isset($_GET["import"]))$H=$_POST["query"];elseif($_POST["webfile"]){$xi=adminer()->importServerPath();$p=@fopen((file_exists($xi)?$xi:"compress.zlib://$xi.gz"),"rb");$H=($p?fread($p,1e6):false);}else$H=get_file("sql_file",true,$Wb);if(is_string($H)){if(($_f=ini_bytes("memory_limit"))!="-1")ini_set("memory_limit",max($_f,strval(2*strlen($H)+memory_get_usage()+8e6)));if($H!=""&&strlen($H)<1e6){$wh=$H.(preg_match("~$Wb\\s*\$~",$H)?"":$Wb);if(!$Td||first(end($Td))!=$wh){restart_session();$Td[]=array($wh,time());set_session("queries",$Ud);stop_session();}}$vi="(?:\\s|/\\*[\s\S]*?\\*/|(?:$cf)[^\n]*\n?|--\r?\n)";$gg=0;$_c=true;$zb=false;$f=connect();if($f&&DB!=""){$f->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$f);}$kb=0;$Gc=array();$Ng='[\'"'.(JUSH=="sql"?'`':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|'.$cf.'|$'.(JUSH=="pgsql"?'|\$([a-zA-Z]\w*)?\$':'');$nj=microtime(true);while($H!=""){if(!$gg&&preg_match("~^$vi*+DELIMITER\\s+(\\S+)~i",$H,$B)){$Wb=preg_quote($B[1]);$H=substr($H,strlen($B[0]));}elseif(!$gg&&JUSH=='pgsql'&&preg_match("~^($vi*+COPY\\s+)[^;]+\\s+FROM\\s+stdin;~i",$H,$B)){$Wb="\n\\\\\\.\r?\n";$zb=true;$gg=strlen($B[0]);}else{preg_match("($Wb\\s*|$Ng)",$H,$B,PREG_OFFSET_CAPTURE,$gg);list($td,$G)=$B[0];if(!$td&&$p&&!feof($p))$H +.=fread($p,1e5);else{if(!$td&&rtrim($H)=="")break;$gg=$G+strlen($td);if($td&&!preg_match("(^$Wb)",$td)){$Ra=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($G>0&&strtolower($H[$G-1])=="e"));$Zg=($td=='/*'?'\*/':($td=='['?']':(preg_match("~^(?:$cf)~",$td)?"\n":preg_quote($td).($Ra?'|\\\\.':''))));while(preg_match("($Zg|\$)s",$H,$B,PREG_OFFSET_CAPTURE,$gg)){$Wh=$B[0][0];if(!$Wh&&$p&&!feof($p))$H +.=fread($p,1e5);else{$gg=$B[0][1]+strlen($Wh);if(!$Wh||$Wh[0]!="\\")break;}}}else{$_c=false;$wh=substr($H,0,$G+($zb?3:0));$kb++;$qh="
    ".adminer()->sqlCommandQuery($wh)."
    \n";if(JUSH=="sqlite"&&preg_match("~^$vi*+(ATTACH|VACUUM\\b.*\\bINTO)\\b~is",$wh,$B)!==0){echo$qh,"

    ".lang(158,preg_match('~ATTACH~i',$B[1])?'ATTACH':'VACUUM INTO')."\n";$Gc[]=" $kb";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$qh;ob_flush();flush();}$Bi=microtime(true);if(connection()->multi_query($wh)&&$f&&preg_match("~^$vi*+USE\\b~i",$wh))$f->query($wh);do{$I=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$qh:""),"

    ".lang(159).(connection()->errno?" (".connection()->errno.")":"").": ".error()."\n";$Gc[]=" $kb";if($_POST["error_stops"])break +2;}else{$_=ME."sql=".url_escape(trim($wh));$cj=" (".format_time($Bi).")".(strlen($_)<1900?" ".lang(13)."":"");$ma=connection()->affected_rows;$ek=($_POST["only_errors"]?"":driver()->warnings());$fk="warnings-$kb";if($ek)$cj +.=", ".lang(40)."";$Pc=null;$_g=null;$Qc="explain-$kb";if(is_object($I)){$z=$_POST["limit"];$ag=$z;$_g=print_select_result($I,$f,array(),$ag);if(!$_POST["only_errors"]){echo"

    \n";$ag=max($I->num_rows,$ag);echo"
    \n";}}else{if(preg_match("~^$vi*+(CREATE|DROP|ALTER)$vi++(DATABASE|SCHEMA)\\b~i",$wh)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"

    ".lang(162,$ma)."$cj\n";}echo($ek?"

    \n":"");if($Pc){echo"\n";}}$Bi=microtime(true);}while(connection()->next_result());}$H=substr($H,$gg);$gg=0;if($zb){$Wb=driver()->delimiter;$zb=false;}}}}}if($_c)echo"

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

    ROLLBACK -- Adminer
    \n";if($_POST["only_errors"])echo"

    ".lang(164,$kb-count($Gc))," (".format_time($nj).")\n";elseif($Gc&&$kb>1)echo"

    ".lang(159).": ".implode("",$Gc)."\n";}}else echo"

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

    -';$Ac="";if(!isset($_GET["import"])){$Kg=$_GET["sql"];if($_POST)$Kg=$_POST["query"];elseif($_GET["history"]=="all")$Kg=$yd;elseif($_GET["history"]!="")$Kg=idx($yd[$_GET["history"]],0);echo"

    ";textarea("query",$Kg,20);echo -script(($_POST?"":"qs('textarea').focus();\n")."qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '".js_escape(remove_from_uri("sql|limit|error_stops|only_errors|history"))."');"),"

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

    ".lang(162)."
    ",file_input("SQL$pd: \n$Ac"),"
    \n";$Id=adminer()->importServerPath();if($Id)echo"
    ".lang(163)."
    ",lang(164,"".h($Id)."$pd"),' ',"
    \n";echo"

    ";}echo -checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),lang(166))."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),lang(167))."\n",input_token();if(!isset($_GET["import"])&&$yd){print_fieldset("history",lang(168),$_GET["history"]!="");for($X=end($yd);$X;$X=prev($yd)){$w=key($yd);list($Kg,$mi,$kc)=$X;echo''.lang(12).""." ".@date("H:i:s",$mi).""." ".shorten_utf8(ltrim(str_replace("\n"," ",str_replace("\r","",preg_replace("~^(#|$Ce).*~m",'',$Kg)))),80,"").($kc?" ($kc)":"")."
    \n";}echo"\n","".lang(170)."\n","\n";}echo'

    -';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$m=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$m):""):where($_GET,$m));$Oi=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($m -as$C=>$l){if((!$Oi&&!isset($l["privileges"]["insert"]))||adminer()->fieldName($l)=="")unset($m[$C]);}if($_POST&&!$k&&!isset($_GET["select"])){$_=$_POST["referer"];if($_POST["insert"])$_=($Oi?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$_))$_=ME."select=".urlencode($a);$v=indexes($a);$Ji=unique_array($_GET["where"],$v);$Ng="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($_,lang(171),driver()->delete($a,$Ng,$Ji?0:1));else{$O=array();foreach($m -as$C=>$l){$X=process_input($l);if($X!==false&&$X!==null)$O[idf_escape($C)]=$X;}if($Oi){if(!$O)redirect($_);queries_redirect($_,lang(172),driver()->update($a,$O,$Ng,$Ji?0:1));if(is_ajax()){page_headers();page_messages($k);exit;}}else{$I=driver()->insert($a,$O);$ue=($I?last_id($I):0);queries_redirect($_,lang(173,($ue?" $ue":"")),$I);}}}$K=null;if($Z){$M=array();foreach($m -as$C=>$l){if(isset($l["privileges"]["select"])){$va=($_POST["clone"]&&$l["auto_increment"]?"''":convert_field($l));$M[]=($va?"$va AS ":"").idf_escape($C);}}$K=array();if(!support("table"))$M=array("*");if($M){$I=driver()->select($a,$M,array($Z),$M,array(),(isset($_GET["select"])?2:1));if(!$I)$k=error();else{$K=$I->fetch_assoc();if(!$K)$K=false;}if(isset($_GET["select"])&&(!$K||$I->fetch_assoc()))$K=null;}}if(!support("table")&&!$m){if(!$Z){$I=driver()->select($a,array("*"),array(),array("*"));$K=($I?$I->fetch_assoc():false);if(!$K)$K=array(driver()->primary=>"");}if($K){foreach($K -as$w=>$X){if(!$Z)$K[$w]=null;$m[$w]=array("field"=>$w,"null"=>($w!=driver()->primary),"auto_increment"=>($w==driver()->primary));}}}if($_POST["save"])$K=(array)$_POST["fields"]+($K?$K:array());edit_form($a,$m,$K,$Oi,$k);}elseif(isset($_GET["create"])){$a=$_GET["create"];$kg=driver()->partitionBy;$og=($kg?driver()->partitionsInfo($a):array());$Tg=referencable_primary($a);$bd=array();foreach($Tg -as$Yh=>$l)$bd[str_replace("`","``",$Yh)."`".str_replace("`","``",$l["field"])]=$Yh;$Wf=array();$S=array();if($a!=""){$Wf=fields($a);$S=table_status1($a);if(count($S)<2)$k=lang(11);}$K=$_POST;$K["fields"]=(array)$K["fields"];if($K["auto_increment_col"])$K["fields"][$K["auto_increment_col"]]["auto_increment"]=true;if($_POST&&!$k)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($K["fields"])&&!$k){if($_POST["drop"])queries_redirect(substr(ME,0,-1),lang(174),drop_tables(array($a)));else{$m=array();$pa=array();$Ui=false;$Zc=array();$Vf=reset($Wf);$oa=" FIRST";foreach($K["fields"]as$w=>$l){$n=$bd[$l["type"]];$Fi=($n!==null?$Tg[$n]:$l);if($l["field"]!=""){if(!$l["generated"])$l["default"]=null;$Jg=process_field($l,$Fi);$pa[]=array($l["orig"],$Jg,$oa);if(!$Vf||$Jg!==process_field($Vf,$Vf)){$m[]=array($l["orig"],$Jg,$oa);if($l["orig"]!=""||$oa)$Ui=true;}if($n!==null)$Zc[idf_escape($l["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$bd[$l["type"]],'source'=>array($l["field"]),'target'=>array($Fi["field"]),'on_delete'=>$l["on_delete"],));$oa=" AFTER ".idf_escape($l["field"]);}elseif($l["orig"]!=""){$Ui=true;$m[]=array($l["orig"]);}if($l["orig"]!=""){$Vf=next($Wf);if(!$Vf)$oa="";}}$mg=array();if(in_array($K["partition_by"],$kg)){foreach($K -as$w=>$X){if(preg_match('~^partition~',$w))$mg[$w]=$X;}foreach($mg["partition_names"]as$w=>$C){if($C==""){unset($mg["partition_names"][$w]);unset($mg["partition_values"][$w]);}}$mg["partition_names"]=array_values($mg["partition_names"]);$mg["partition_values"]=array_values($mg["partition_values"]);if($mg==$og)$mg=array();}elseif(preg_match("~partitioned~",$S["Create_options"]))$mg=null;$B=lang(175);if($a==""){cookie("adminer_engine",$K["Engine"]);$B=lang(176);}$C=trim($K["name"]);queries_redirect(ME.(support("table")?"table=":"select=").urlencode($C),$B,alter_table($a,$C,(JUSH=="sqlite"&&($Ui||$Zc)?$pa:$m),$Zc,($K["Comment"]!=$S["Comment"]?$K["Comment"]:null),($K["Engine"]&&$K["Engine"]!=$S["Engine"]?$K["Engine"]:""),($K["Collation"]&&$K["Collation"]!=$S["Collation"]?$K["Collation"]:""),($K["Auto_increment"]!=""?number($K["Auto_increment"]):""),$mg));}}page_header(($a!=""?lang(36):lang(69)),$k,array("table"=>$a),h($a));if(!$_POST){$Gi=driver()->types();$K=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($Gi["int"])?"int":(isset($Gi["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$K=$S;$K["name"]=$a;$K["fields"]=array();if(!$_GET["auto_increment"])$K["Auto_increment"]="";foreach($Wf -as$l){$l["generated"]=$l["generated"]?:(isset($l["default"])?"DEFAULT":"");$K["fields"][]=$l;}if($kg){$K+=$og;$K["partition_names"][]="";$K["partition_values"][]="";}}}$fb=collations();if(is_array(reset($fb)))$fb=call_user_func_array('array_merge',array_values($fb));$qc=driver()->engines();foreach($qc -as$pc){if(!strcasecmp($pc,$K["Engine"])){$K["Engine"]=$pc;break;}}echo' +
    +';$Nc="";if(!isset($_GET["import"])){$wh=$_GET["sql"];if($_POST)$wh=$_POST["query"];elseif($_GET["history"]=="all")$wh=$Td;elseif($_GET["history"]!="")$wh=idx($Td[$_GET["history"]],0);echo"

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

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

    ".lang(167)."
    ","SQL$Gd: ".file_input(" name='sql_file[]' multiple","\n$Nc"),"
    \n";$ee=adminer()->importServerPath();if($ee)echo"
    ".lang(168)."
    ",lang(169,"".h($ee)."$Gd")," ","
    \n";adminer()->importPrint();echo"

    ";}echo +checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),lang(171))."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),lang(172))."\n",input_token();if(!isset($_GET["import"])&&$Td){print_fieldset("history",lang(173),$_GET["history"]!="");for($X=end($Td);$X;$X=prev($Td)){$x=key($Td);list($wh,$cj,$wc)=$X;echo'

    '.lang(13).""." ".@date("H:i:s",$cj).""." ".shorten_utf8(preg_replace('~\s+~',' ',ltrim(preg_replace("~^(?:$cf).*~m",'',$wh))),80,"").($wc?" ($wc)":"")."
    \n";}echo"\n","".lang(175)."\n","\n";}echo'
    +';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$m=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$m):""):where($_GET,$m));$Ij=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($m +as$D=>$l){if((!$Ij&&!isset($l["privileges"]["insert"]))||adminer()->fieldName($l)=="")unset($m[$D]);}if($_POST&&!$k&&!isset($_GET["select"])){$A=$_POST["referer"];if($_POST["insert"])$A=($Ij?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$A))$A=ME."select=".url_escape($a);$w=indexes($a);$Cj=unique_array($_GET["where"],$w);$zh="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($A,lang(176),driver()->delete($a,$zh,$Cj?0:1));else{$O=array();foreach($m +as$D=>$l){$X=process_input($l);if($X!==false&&$X!==null)$O[idf_escape($D)]=$X;}if($Ij){if(!$O)redirect($A);queries_redirect($A,lang(177),driver()->update($a,$O,$zh,$Cj?0:1));if(is_ajax()){page_headers();page_messages($k);exit;}}else{$I=driver()->insert($a,$O);$Te=($I?last_id($I):0);queries_redirect($A,lang(178,($Te?" $Te":"")),$I);}}}$K=null;if($Z){$M=array();foreach($m +as$D=>$l){if(isset($l["privileges"]["select"])){$xa=($_POST["clone"]&&$l["auto_increment"]?"''":convert_field($l));$M[]=($xa?"$xa AS ":"").idf_escape($D);}}$K=array();if(!support("table"))$M=array("*");if($M){$I=driver()->select($a,$M,array($Z),$M,array(),(isset($_GET["select"])?2:1));if(!$I)$k=error();else{$K=$I->fetch_assoc();if(!$K)$K=false;}if(isset($_GET["select"])&&(!$K||$I->fetch_assoc()))$K=null;}}if(!$m&&driver()->primary!=""){if(!$Z){$I=driver()->select($a,array("*"),array(),array("*"));$K=($I?$I->fetch_assoc():false);if(!$K)$K=array(driver()->primary=>"");}if($K){foreach($K +as$x=>$X){if(!$Z)$K[$x]=null;$m[$x]=array("field"=>$x,"null"=>($x!=driver()->primary),"auto_increment"=>($x==driver()->primary));}}}if($_POST["save"]){$jh=array();foreach((array)$_POST["fields"]as$x=>$X)$jh[bracket_escape($x,true)]=$X;$K=$jh+($K?$K:array());}edit_form($a,$m,$K,$Ij,$k);}elseif(isset($_GET["create"])){$a=$_GET["create"];$Rg=driver()->partitionBy;$Vg=($Rg&&$a!=""?driver()->partitionsInfo($a):array());$Eh=referencable_primary($a);$rd=array();foreach($Eh +as$Oi=>$l)$rd[str_replace("`","``",$Oi)."`".str_replace("`","``",$l["field"])]=$Oi;$Cg=array();$S=array();if($a!=""){$Cg=fields($a);$S=table_status1($a);if(count($S)<2)$k=lang(12);}$K=$_POST;$K["fields"]=(array)$K["fields"];if($K["auto_increment_col"])$K["fields"][$K["auto_increment_col"]]["auto_increment"]=true;if($_POST&&!$k)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($K["fields"])&&!$k){if($_POST["drop"])queries_redirect(substr(ME,0,-1),lang(179),drop_tables(array($a)));else{$m=array();$pa=array();$Nj=false;$pd=array();$Bg=reset($Cg);$oa=" FIRST";foreach($K["fields"]as$x=>$l){$o=$rd[$l["type"]];$yj=($o!==null?$Eh[$o]:$l);if($l["field"]!=""){if(!$l["generated"])$l["default"]=null;$vh=process_field($l,$yj);$pa[]=array($l["orig"],$vh,$oa);if(!$Bg||$vh!==process_field($Bg,$Bg)){$m[]=array($l["orig"],$vh,$oa);if($l["orig"]!=""||$oa)$Nj=true;}if($o!==null)$pd[idf_escape($l["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$rd[$l["type"]],'source'=>array($l["field"]),'target'=>array($yj["field"]),'on_delete'=>$l["on_delete"],));$oa=" AFTER ".idf_escape($l["field"]);}elseif($l["orig"]!=""){$Nj=true;$m[]=array($l["orig"]);}if($l["orig"]!=""){$Bg=next($Cg);if(!$Bg)$oa="";}}$Tg=array();if(in_array($K["partition_by"],$Rg)){foreach($K +as$x=>$X){if(preg_match('~^partition~',$x))$Tg[$x]=$X;}foreach($Tg["partition_names"]as$x=>$D){if($D==""){unset($Tg["partition_names"][$x]);unset($Tg["partition_values"][$x]);}}$Tg["partition_names"]=array_values($Tg["partition_names"]);$Tg["partition_values"]=array_values($Tg["partition_values"]);if($Tg==$Vg)$Tg=array();}elseif(preg_match("~partitioned~",$S["Create_options"]))$Tg=null;$C=lang(180);if($a==""){cookie("adminer_engine",$K["Engine"]);$C=lang(181);}$D=trim($K["name"]);$A=ME.(support("table")?"table=":"select=").url_escape($D);$I=alter_table($a,$D,(JUSH=="sqlite"&&($Nj||$pd)?$pa:$m),$pd,($K["Comment"]!=$S["Comment"]?$K["Comment"]:null),($K["Engine"]&&$K["Engine"]!=$S["Engine"]?$K["Engine"]:""),($K["Collation"]&&$K["Collation"]!=$S["Collation"]?$K["Collation"]:""),($K["Auto_increment"]!=""?number($K["Auto_increment"]):""),$Tg);if($I&&!Queries::$queries)redirect($A);queries_redirect($A,$C,$I);}}page_header(($a!=""?lang(38):lang(71)),$k,array("table"=>$a),h($a));if(!$_POST){$_j=driver()->types();$K=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($_j["int"])?"int":(isset($_j["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$K=$S;$K["name"]=$a;$K["fields"]=array();if(!$_GET["auto_increment"])$K["Auto_increment"]="";foreach($Cg +as$l){if($l["generated"])$l["default"]=ltrim($l["default"]);$l["generated"]=$l["generated"]?:(isset($l["default"])?"DEFAULT":"");$K["fields"][]=$l;}if($Rg){$K+=$Vg;$K["partition_names"][]="";$K["partition_values"][]="";}}}$ib=collations();if(is_array(reset($ib)))$ib=call_user_func_array('array_merge',array_values($ib));$Bc=driver()->engines();foreach($Bc +as$Ac){if(!strcasecmp($Ac,$K["Engine"])){$K["Engine"]=$Ac;break;}}$of=max_input_vars(12,20);if($of){$Sd=(count($K["fields"])>$of?"":" hidden");echo"".max_input_vars_error()."\n";}echo'

    ';if(support("columns")||$a==""){echo -lang(177).": \n",($qc?html_select("Engine",array(""=>"(".lang(178).")")+$qc,$K["Engine"]).on_help("event.target.value",1).script("qsl('select').onchange = helpClose;")."\n":"");if($fb)echo"".optionlist($fb)."\n",(preg_match("~sqlite|mssql~",JUSH)?"":"\n");echo"\n";}if(support("columns")){echo"

    \n","\n";edit_fields($K["fields"],$fb,"TABLE",$bd);echo"
    \n",script("editFields();"),"
    \n

    \n",lang(43).": \n",checkbox("defaults",1,($_POST?$_POST["defaults"]:get_setting("defaults")),lang(179),"columnShow(this.checked, 5)","jsonly");$lb=($_POST?$_POST["comments"]:get_setting("comments"));echo(support("comment")?checkbox("comments",1,$lb,lang(42),"editingCommentsClick(this, true);","jsonly").' '.(preg_match('~\n~',$K["Comment"])?"":''):''),'

    - +lang(182).": \n",($Bc?html_select("Engine",array(""=>"(".lang(183).")")+$Bc,$K["Engine"],on('change','helpClose').on_help_value())."\n":"");if($ib)echo"".optionlist($ib)."\n",(preg_match("~sqlite|mssql~",JUSH)?"":"\n");echo"\n";}if(support("columns")){echo"

    \n","\n";edit_fields($K["fields"],$ib,"TABLE",$rd);echo"
    \n",script("editFields();"),"
    \n

    \n",lang(45).": \n",checkbox("defaults",1,($_POST?$_POST["defaults"]:get_setting("defaults")),lang(184),on('click','columnShowClick',5),"jsonly");$nb=($_POST?$_POST["comments"]:get_setting("comments"));if(support("comment")){echo +checkbox("comments",1,$nb,lang(44),on('click','editingCommentsClick',true),"jsonly").' ';$b=" name='Comment' data-maxlength='".(min_version(5.5)?2048:60)."'".($nb?"":" class='hidden'");echo +adminer()->commentInput('TABLE',$b,$K["Comment"]);}echo'

    + ';}echo' -';if($a!="")echo'',confirm(lang(180,$a));if($kg&&(JUSH=='sql'||$a=="")){$lg=preg_match('~RANGE|LIST~',$K["partition_by"]);print_fieldset("partition",lang(181),$K["partition_by"]);echo"

    ".html_select("partition_by",array_merge(array(""),$kg),$K["partition_by"]).on_help("event.target.value.replace(/./, 'PARTITION BY \$&')",1).script("qsl('select').onchange = partitionByChange;"),"()\n",lang(182).": \n","\n","\n";foreach($K["partition_names"]as$w=>$X)echo'','\n\n";}echo +';if($a!="")echo' +';if($Rg&&(JUSH=='sql'||$a=="")){$Sg=preg_match('~RANGE|LIST~',$K["partition_by"]);print_fieldset("partition",lang(186),$K["partition_by"]);echo"

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

    -';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$Pd=array("PRIMARY","UNIQUE","INDEX");$S=table_status1($a,true);$Nd=driver()->indexAlgorithms($S);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$S["Engine"]))$Pd[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$S["Engine"]))$Pd[]="SPATIAL";if(min_version('',11.7)&&preg_match('~MyISAM|InnoDB~i',$S["Engine"]))$Pd[]="VECTOR";$v=indexes($a);$m=fields($a);$Dg=array();if(JUSH=="mongo"){$Dg=$v["_id_"];unset($Pd[0]);unset($v["_id_"]);}$K=$_POST;if($K)save_settings(array("index_options"=>$K["options"]));if($_POST&&!$k&&!$_POST["add"]&&!$_POST["drop_col"]){$ra=array();foreach($K["indexes"]as$u){$C=$u["name"];if(in_array($u["type"],$Pd)){$c=array();$Ae=array();$Sb=array();$Od=(support("partial_indexes")?$u["partial"]:"");$Md=(in_array($u["algorithm"],$Nd)?$u["algorithm"]:"");$O=array();ksort($u["columns"]);foreach($u["columns"]as$w=>$b){if($b!=""){$x=idx($u["lengths"],$w);$Qb=idx($u["descs"],$w);$O[]=($m[$b]?idf_escape($b):$b).($x?"(".(+$x).")":"").($Qb?" DESC":"");$c[]=$b;$Ae[]=($x?:null);$Sb[]=$Qb;}}$Bc=$v[$C];if($Bc){ksort($Bc["columns"]);ksort($Bc["lengths"]);ksort($Bc["descs"]);if($u["type"]==$Bc["type"]&&array_values($Bc["columns"])===$c&&(!$Bc["lengths"]||array_values($Bc["lengths"])===$Ae)&&array_values($Bc["descs"])===$Sb&&$Bc["partial"]==$Od&&(!$Nd||$Bc["algorithm"]==$Md)){unset($v[$C]);continue;}}if($c)$ra[]=array($u["type"],$C,$O,$Md,$Od);}}foreach($v -as$C=>$Bc)$ra[]=array($Bc["type"],$C,"DROP");if(!$ra)redirect(ME."table=".urlencode($a));queries_redirect(ME."table=".urlencode($a),lang(185),alter_indexes($a,$ra));}page_header(lang(136),$k,array("table"=>$a),h($a));$Pc=array_keys($m);if($_POST["add"]){foreach($K["indexes"]as$w=>$u){if($u["columns"][count($u["columns"])]!="")$K["indexes"][$w]["columns"][]="";}$u=end($K["indexes"]);if($u["type"]||array_filter($u["columns"],'strlen'))$K["indexes"][]=array("columns"=>array(1=>""));}if(!$K){foreach($v -as$w=>$u){$v[$w]["name"]=$w;$v[$w]["columns"][]="";}$v[]=array("columns"=>array(1=>""));$K["indexes"]=$v;}$Ae=(JUSH=="sql"||JUSH=="mssql");$_h=($_POST?$_POST["options"]:get_setting("index_options"));echo' +';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$me=array("PRIMARY","UNIQUE","INDEX");$S=table_status1($a,true);$ke=driver()->indexAlgorithms($S);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$S["Engine"]))$me[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$S["Engine"]))$me[]="SPATIAL";if(min_version('',11.7)&&preg_match('~MyISAM|InnoDB~i',$S["Engine"]))$me[]="VECTOR";$w=indexes($a);$m=fields($a);$ph=array();if(JUSH=="mongo"){$ph=$w["_id_"];unset($me[0]);unset($w["_id_"]);}$K=$_POST;if($K)save_settings(array("index_options"=>$K["options"]));if($_POST&&!$k&&!$_POST["add"]&&!$_POST["drop_col"]){$ra=array();foreach($K["indexes"]as$v){$D=$v["name"];if(in_array($v["type"],$me)){$d=array();$af=array();$Zb=array();$qg=array();$le=(support("partial_indexes")?$v["partial"]:"");$je=(in_array($v["algorithm"],$ke)?$v["algorithm"]:"");$O=array();ksort($v["columns"]);foreach($v["columns"]as$x=>$c){if($c!=""){$y=idx($v["lengths"],$x);$Xb=idx($v["descs"],$x);$pg=idx($v["opclasses"],$x);$O[]=($m[$c]?idf_escape($c):$c).($y?"(".(+$y).")":"").($pg!=""?" ".idf_escape($pg):"").($Xb?" DESC":"");$d[]=$c;$af[]=($y?:null);$Zb[]=$Xb;$qg[]="$pg";}}$Oc=$w[$D];if($Oc){ksort($Oc["columns"]);ksort($Oc["lengths"]);ksort($Oc["descs"]);if($v["type"]==$Oc["type"]&&array_values($Oc["columns"])===$d&&(!$Oc["lengths"]||array_values($Oc["lengths"])===$af)&&array_values($Oc["descs"])===$Zb&&(!$Oc["opclasses"]||array_values($Oc["opclasses"])===$qg)&&$Oc["partial"]==$le&&(!$ke||$Oc["algorithm"]==$je)){unset($w[$D]);continue;}}if($d)$ra[]=array($v["type"],$D,$O,$je,$le);}}foreach($w +as$D=>$Oc)$ra[]=array($Oc["type"],$D,"DROP");if(!$ra)redirect(ME."table=".url_escape($a));queries_redirect(ME."table=".url_escape($a),lang(190),alter_indexes($a,$ra));}page_header(lang(140),$k,array("table"=>$a),h($a));$dd=array_keys($m);if($_POST["add"]){foreach($K["indexes"]as$x=>$v){if($v["columns"][count($v["columns"])]!="")$K["indexes"][$x]["columns"][]="";}$v=end($K["indexes"]);if($v["type"]||array_filter($v["columns"],'strlen'))$K["indexes"][]=array("columns"=>array(1=>""));}if(!$K){foreach($w +as$x=>$v){$w[$x]["name"]=$x;$w[$x]["columns"][]="";}$w[]=array("columns"=>array(1=>""));$K["indexes"]=$w;}$af=(JUSH=="sql"||JUSH=="mssql");$qg=driver()->indexOpclasses();$ni=($_POST?$_POST["options"]:get_setting("index_options"));echo'
    - +
    - -';if($Dg){echo"
    ',lang(186);$Gd=" class='idxopts".($_h?"":" hidden")."'";if($Nd)echo"".lang(187).doc_link(array('sql'=>'create-index.html#create-index-storage-engine-index-types','mariadb'=>'storage-engine-index-types/',));echo'',lang(188).($Ae?" (".lang(189).")":"");if($Ae||support("descidx"))echo -checkbox("options",1,$_h,lang(110),"indexOptionsShow(this.checked)","jsonly")."\n";echo'',lang(190);if(support("partial_indexes"))echo"".lang(191);echo' -
    PRIMARY";foreach($Dg["columns"]as$w=>$b)echo -select_input(" disabled",$Pc,$b)," ";echo"\n";}$ie=1;foreach($K["indexes"]as$u){if(!$_POST["drop_col"]||$ie!=key($_POST["drop_col"])){echo"
    ".html_select("indexes[$ie][type]",array(-1=>"")+$Pd,$u["type"],($ie==count($K["indexes"])?"indexesAddRow.call(this);":""),"label-type");if($Nd)echo"".html_select("indexes[$ie][algorithm]",array_merge(array(""),$Nd),$u['algorithm'],"label-algorithm");echo"";ksort($u["columns"]);$r=1;foreach($u["columns"]as$w=>$b){echo"".select_input(" name='indexes[$ie][columns][$r]' title='".lang(40)."'",($m&&($b==""||$m[$b])?array_combine($Pc,$Pc):array()),$b,"partial(".($r==count($u["columns"])?"indexesAddColumn":"indexesChangeColumn").", '".js_escape(JUSH=="sql"?"":$_GET["indexes"]."_")."')"),"",($Ae?"":""),(support("descidx")?checkbox("indexes[$ie][descs][$r]",1,idx($u["descs"],$w),lang(51)):"")," ";$r++;}echo"\n";if(support("partial_indexes"))echo"\n";echo"".icon("cross","drop_col[$ie]","x",lang(113)).script("qsl('button').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");}$ie++;}echo'
    +',lang(191);$ce=" class='idxopts".($ni?"":" hidden")."'";if($ke)echo"".lang(192).doc_link(array('sql'=>'create-index.html#create-index-storage-engine-index-types','mariadb'=>'storage-engine-index-types/',));echo'',lang(193).($af?" (".lang(194).")":"");if($af||support("descidx"))echo +checkbox("options",1,$ni,lang(114),on('click','indexOptionsShow'),"jsonly")."\n";echo'',lang(195);if(support("partial_indexes"))echo"".lang(196);echo' + +';if($ph){echo"PRIMARY";foreach($ph["columns"]as$x=>$c)echo +select_input(" disabled",array_combine($dd,$dd),$c)," ";echo"\n";}$Fe=1;foreach($K["indexes"]as$v){if(!$_POST["drop_col"]||$Fe!=key($_POST["drop_col"])){echo"".html_select("indexes[$Fe][type]",array(-1=>"")+$me,$v["type"],($Fe==count($K["indexes"])?on('change','indexesAddRow'):""),"label-type");if($ke)echo"".html_select("indexes[$Fe][algorithm]",array_merge(array(""),$ke),$v['algorithm'],"","label-algorithm");echo"";ksort($v["columns"]);$s=1;foreach($v["columns"]as$x=>$c){echo"".select_input(" name='indexes[$Fe][columns][$s]' title='".lang(42)."'".on('change','indexesChangeColumn',(JUSH=="sql"?"":$_GET["indexes"]."_")),($m&&($c==""||$m[$c])?array_combine($dd,$dd):array()),$c)," ",($af?"":"");if($qg){$pg=idx($v["opclasses"],$x);echo +html_select("indexes[$Fe][opclasses][$s]",array(""=>"(".lang(197).")")+array_combine($qg,$qg)+($pg!=""?array($pg=>$pg):array()),$pg),'';}echo(support("descidx")?checkbox("indexes[$Fe][descs][$s]",1,idx($v["descs"],$x),lang(53)):""),"
    ","
    ";$s++;}echo"\n";if(support("partial_indexes"))echo"\n";echo"".icon("cross","drop_col[$Fe]","x",lang(117),on('click','editingRemoveRow','indexes$1[type]'));}$Fe++;}echo'

    - + ',input_token(),'

    -';}elseif(isset($_GET["database"])){$K=$_POST;if($_POST&&!$k&&!$_POST["add"]){$C=trim($K["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),lang(192),drop_databases(array(DB)));}elseif(DB!==$C){if(DB!=""){$_GET["db"]=$C;queries_redirect(preg_replace('~\bdb=[^&]*&~','',ME)."db=".urlencode($C),lang(193),rename_database($C,$K["collation"]));}else{$h=explode("\n",str_replace("\r","",$C));$Qh=true;$te="";foreach($h -as$i){if(count($h)==1||$i!=""){if(!create_database($i,$K["collation"]))$Qh=false;$te=$i;}}restart_session();set_session("dbs",null);queries_redirect(ME."db=".urlencode($te),lang(194),$Qh);}}else{if(!$K["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($C).(preg_match('~^[a-z0-9_]+$~i',$K["collation"])?" COLLATE $K[collation]":""),substr(ME,0,-1),lang(195));}}page_header(DB!=""?lang(59):lang(117),$k,array(),h(DB));$fb=collations();$C=DB;if($_POST)$C=$K["name"];elseif(DB!="")$K["collation"]=db_collation(DB,$fb);elseif(JUSH=="sql"){foreach(get_vals("SHOW GRANTS")as$kd){if(preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~',$kd,$A)&&$A[1]){$C=stripcslashes(idf_unescape("`$A[2]`"));break;}}}echo' +';}elseif(isset($_GET["database"])){$K=$_POST;if($_POST&&!$k&&!$_POST["add"]){$D=trim($K["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),lang(198),drop_databases(array(DB)));}elseif(DB!==$D){if(DB!=""){$_GET["db"]=$D;queries_redirect(preg_replace('~\bdb=[^&]*&~','',ME)."db=".url_escape($D),lang(199),rename_database($D,(string)$K["collation"]));}else{$h=explode("\n",str_replace("\r","",$D));$Gi=true;$Re="";foreach($h +as$i){if(count($h)==1||$i!=""){if(!create_database($i,(string)$K["collation"]))$Gi=false;$Re=$i;}}restart_session();set_session("dbs",null);queries_redirect(ME."db=".url_escape($Re),lang(200),$Gi);}}else{if(!$K["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($D).(preg_match('~^[a-z0-9_]+$~i',$K["collation"])?" COLLATE $K[collation]":""),substr(ME,0,-1),lang(201));}}page_header(DB!=""?lang(61):lang(121),$k,array(),h(DB));$ib=collations();$D=DB;if($_POST)$D=$K["name"];elseif(DB!="")$K["collation"]=db_collation(DB,$ib);elseif(JUSH=="sql"){foreach(get_vals("SHOW GRANTS")as$Bd){if(preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~',$Bd,$B)&&$B[1]){$D=stripcslashes(idf_unescape("`$B[2]`"));break;}}}echo'

    -',($_POST["add"]||strpos($C,"\n")?'
    ':'')."\n".($fb?html_select("collation",array(""=>"(".lang(104).")")+$fb,$K["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",)):""),' -';if(DB!="")echo"".confirm(lang(180,DB))."\n";elseif(!$_POST["add"]&&$_GET["db"]=="")echo -icon("plus","add[0]","+",lang(111))."\n";echo +',($_POST["add"]||strpos($D,"\n")?'
    ':'')."\n",($ib?html_select("collation",array(""=>"(".lang(108).")")+$ib,$K["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",)):"")."\n",' +';if(DB!="")echo"\n";elseif(!$_POST["add"]&&$_GET["db"]=="")echo +icon("plus","add[0]","+",lang(115))."\n";echo input_token(),'

    -';}elseif(isset($_GET["call"])){$ca=($_GET["name"]?:$_GET["call"]);page_header(lang(196).": ".h($ca),$k);$fh=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Jd=array();$ag=array();foreach($fh["fields"]as$r=>$l){if(substr($l["inout"],-3)=="OUT"&&JUSH=='sql')$ag[$r]="@".idf_escape($l["field"])." AS ".idf_escape($l["field"]);if(!$l["inout"]||substr($l["inout"],0,2)=="IN")$Jd[]=$r;}if(!$k&&$_POST){$Qa=array();foreach($fh["fields"]as$w=>$l){$X="";if(in_array($w,$Jd)){$X=process_input($l);if($X===false)$X="''";if(isset($ag[$w]))connection()->query("SET @".idf_escape($l["field"])." = $X");}if(isset($ag[$w]))$Qa[]="@".idf_escape($l["field"]);elseif(in_array($w,$Jd))$Qa[]=$X;}$H=(isset($_GET["callf"])?"SELECT ":"CALL ").(idx($fh["returns"],"type")=="record"?"* FROM ":"").table($ca)."(".implode(", ",$Qa).")";$Lh=microtime(true);$I=connection()->multi_query($H);$ma=connection()->affected_rows;echo -adminer()->selectQuery($H,$Lh,!$I);if(!$I)echo"

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

    ".lang(197,$ma)." ".@date("H:i:s")."\n";}while(connection()->next_result());if($ag)print_select_result(connection()->query("SELECT ".implode(", ",$ag)));}}echo' +';}elseif(isset($_GET["call"])){$ca=($_GET["name"]?:$_GET["call"]);page_header(lang(202).": ".h($ca),$k);$Uh=(isset($_GET["callf"])?"FUNCTION":"PROCEDURE");$Sh=routine($_GET["call"],$Uh);$fe=array();$Hg=array();foreach($Sh["fields"]as$s=>$l){if(substr($l["inout"],-3)=="OUT"&&JUSH=='sql')$Hg[$s]="@".idf_escape($l["field"])." AS ".idf_escape($l["field"]);if(!$l["inout"]||substr($l["inout"],0,2)=="IN")$fe[]=$s;}if(!$k&&$_POST){$Sa=array();foreach($Sh["fields"]as$x=>$l){$X="";if(in_array($x,$fe)){$X=process_input($l);if($X===false)$X="''";if(isset($Hg[$x]))connection()->query("SET @".idf_escape($l["field"])." = $X");}if(isset($Hg[$x]))$Sa[]="@".idf_escape($l["field"]);elseif(in_array($x,$fe))$Sa[]=$X;}$H=(isset($_GET["callf"])?"SELECT ":"CALL ").(idx($Sh["returns"],"type")=="record"?"* FROM ":"").table($ca)."(".implode(", ",$Sa).")";$Bi=microtime(true);$I=connection()->multi_query($H);$ma=connection()->affected_rows;echo +adminer()->selectQuery($H,$Bi,!$I);if(!$I)echo"

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

    ".lang(203,$ma)." ".@date("H:i:s")."\n";}while(connection()->next_result());if($Hg)print_select_result(connection()->query("SELECT ".implode(", ",$Hg)));}}echo'

    -';if($Jd){echo"\n";foreach($Jd -as$w){$l=$fh["fields"][$w];$C=$l["field"];echo"
    ".adminer()->fieldName($l);$Y=idx($_POST["fields"],$C);if($Y!=""){if($l["type"]=="set")$Y=implode(",",$Y);}input($l,$Y,idx($_POST["function"],$C,""));echo"\n";}echo"
    \n";}echo'

    - +';if($fe){echo"\n";foreach($fe +as$x){$l=$Sh["fields"][$x];$D=$l["field"];echo"
    ".adminer()->fieldName($l);$Y=idx($_POST["fields"],$D);if($Y!=""){if($l["type"]=="set")$Y=implode(",",$Y);}input($l,$Y,idx($_POST["function"],$D,""));echo"\n";}echo"
    \n";}echo'

    + ',input_token(),'

    -
    -';function
    -pre_tr($ih){return
    -preg_replace('~^~m','',preg_replace('~\|~','',preg_replace('~\|$~m',"",rtrim($ih))));}$R='(\+--[-+]+\+\n)';$K='(\| .* \|\n)';echo
    -preg_replace_callback("~^$R?$K$R?($K*)$R?~m",function($A){$Vc=pre_tr($A[2]);return"\n".($A[1]?"$Vc\n":$Vc).pre_tr($A[4])."\n
    ";},preg_replace('~(\n( -|mysql)> )(.+)~',"\\1\\3",preg_replace('~(.+)\n---+\n~',"\\1\n",h($fh['comment']))));echo'
    -';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$C=$_GET["name"];$K=$_POST;if($_POST&&!$k&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$K["source"]=array_filter($K["source"],'strlen');ksort($K["source"]);$gi=array();foreach($K["source"]as$w=>$X)$gi[$w]=$K["target"][$w];$K["target"]=$gi;}if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(" $C"=>($K["drop"]?"":" ".format_foreign_key($K))));else{$ra="ALTER TABLE ".table($a);$I=($C==""||queries("$ra DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($C)));if(!$K["drop"])$I=queries("$ra ADD".format_foreign_key($K));}queries_redirect(ME."table=".urlencode($a),($K["drop"]?lang(198):($C!=""?lang(199):lang(200))),$I);if(!$K["drop"])$k=lang(201);}page_header(lang(202),$k,array("table"=>$a),h($a));if($_POST){ksort($K["source"]);if($_POST["change"]||$_POST["change-js"])$K["target"]=array();else$K["source"][]="";}elseif($C!=""){$bd=foreign_keys($a);$K=$bd[$C];$K["source"][]="";}else{$K["table"]=$a;$K["source"]=array("");}echo' +',adminer()->commentValue($Uh,$Sh['comment']);}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$D=$_GET["name"];$K=$_POST;if($_POST&&!$k&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$K["source"]=array_filter($K["source"],'strlen');ksort($K["source"]);$Wi=array();foreach($K["source"]as$x=>$X)$Wi[$x]=$K["target"][$x];$K["target"]=$Wi;}if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(" $D"=>($K["drop"]?"":" ".format_foreign_key($K))));else{$ra="ALTER TABLE ".table($a);$I=($D==""||queries("$ra DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($D)));if(!$K["drop"])$I=queries("$ra ADD".format_foreign_key($K));}queries_redirect(ME."table=".url_escape($a),($K["drop"]?lang(204):($D!=""?lang(205):lang(206))),$I);if(!$K["drop"])$k=lang(207);}page_header(($D!=""?lang(208):lang(145)),$k,array("table"=>$a),h($D!=""?$D:$a));if($_POST){ksort($K["source"]);if($_POST["change"]||$_POST["change-js"])$K["target"]=array();else$K["source"][]="";}elseif($D!=""){$rd=foreign_keys($a);$K=$rd[$D];$K["source"][]="";}else{$K["table"]=$a;$K["source"]=array("");}echo'
    -';$Eh=array_keys(fields($a));if($K["db"]!="")connection()->select_db($K["db"]);if($K["ns"]!=""){$Xf=get_schema();set_schema($K["ns"]);}$Sg=array_keys(array_filter(table_status('',true),'Adminer\fk_support'));$gi=array_keys(fields(in_array($K["table"],$Sg)?$K["table"]:reset($Sg)));$If="this.form['change-js'].value = '1'; this.form.submit();";echo"

    \n";if(JUSH!="sqlite"){$Ib=array();foreach(adminer()->databases()as$i){if(!information_schema($i))$Ib[]=$i;}echo"";}echo -input_hidden("change-js"),'

    +';$ui=array_keys(fields($a));if($K["db"]!="")connection()->select_db($K["db"]);if($K["ns"]!=""){$Dg=get_schema();set_schema($K["ns"]);}$Dh=array_keys(array_filter(table_status('',true),'Adminer\fk_support'));$Wi=array_keys(fields(in_array($K["table"],$Dh)?$K["table"]:reset($Dh)));$b=on('change','foreignChange');echo"

    \n";if(JUSH!="sqlite"){$Pb=array();foreach(adminer()->databases()as$i){if(!information_schema($i))$Pb[]=$i;}echo"";}echo +input_hidden("change-js"),'

    - -';$ie=0;foreach($K["source"]as$w=>$X){echo"","
    ',lang(138),'',lang(139),'
    ".html_select("source[".(+$w)."]",array(-1=>"")+$Eh,$X,($ie==count($K["source"])-1?"foreignAddRow.call(this);":""),"label-source"),"".html_select("target[".(+$w)."]",$gi,idx($K["target"],$w),"","label-target");$ie++;}echo'
    +',lang(142),'',lang(143),' +';$Fe=0;foreach($K["source"]as$x=>$X){echo"","".html_select("source[".(+$x)."]",array(-1=>"")+$ui,$X,($Fe==count($K["source"])-1?on('change','foreignAddRow'):""),"label-source"),"".html_select("target[".(+$x)."]",$Wi,idx($K["target"],$x),"","label-target");$Fe++;}echo'

    - - -',(DRIVER==='pgsql'?html_select("deferrable",array('NOT DEFERRABLE','DEFERRABLE','DEFERRABLE INITIALLY DEFERRED'),$K["deferrable"]).' ':''),doc_link(array('sql'=>"innodb-foreign-key-constraints.html",'mariadb'=>"foreign-keys/",)),'

    - -

    -';if($C!="")echo'',confirm(lang(180,$C));echo + + +',(support("deferrable")?html_select("deferrable",array('NOT DEFERRABLE','DEFERRABLE','DEFERRABLE INITIALLY DEFERRED'),$K["deferrable"]).' ':''),doc_link(array('sql'=>"innodb-foreign-key-constraints.html",'mariadb'=>"foreign-keys/",)),'

    + +

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

    -';}elseif(isset($_GET["view"])){$a=$_GET["view"];$K=$_POST;$Yf="VIEW";if(JUSH=="pgsql"&&$a!=""){$P=table_status1($a);$Yf=strtoupper($P["Engine"]);}if($_POST&&!$k){$C=trim($K["name"]);$va=" AS\n$K[select]";$_=ME."table=".urlencode($C);$B=lang(206);$U=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$C&&JUSH!="sqlite"&&$U=="VIEW"&&$Yf=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($C).$va,$_,$B);else{$ii=$C."_adminer_".uniqid();drop_create("DROP $Yf ".table($a),"CREATE $U ".table($C).$va,"DROP $U ".table($C),"CREATE $U ".table($ii).$va,"DROP $U ".table($ii),($_POST["drop"]?substr(ME,0,-1):$_),lang(207),$B,lang(208),$a,$C);}}if(!$_POST&&$a!=""){$K=view($a);$K["name"]=$a;$K["materialized"]=($Yf!="VIEW");if(!$k)$k=error();}page_header(($a!=""?lang(35):lang(209)),$k,array("table"=>$a),h($a));echo' +';}elseif(isset($_GET["view"])){$a=$_GET["view"];$K=$_POST;$Eg="VIEW";if(JUSH=="pgsql"&&$a!=""){$P=table_status1($a);$Eg=strtoupper($P["Engine"]);}if($_POST&&!$k){$D=trim($K["name"]);$xa=" AS\n$K[select]";$A=ME."table=".url_escape($D);$C=lang(212);$U=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$D&&JUSH!="sqlite"&&$U=="VIEW"&&$Eg=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($D).$xa,$A,$C);else{$Yi="adminer_".uniqid();drop_create("DROP $Eg ".table($a),"CREATE $U ".table($D).$xa,"DROP $U ".table($D),"CREATE $U ".table($Yi).$xa,"DROP $U ".table($Yi),($_POST["drop"]?substr(ME,0,-1):$A),lang(213),$C,lang(214),$a,$D);}}if(!$_POST&&$a!=""){$K=view($a);$K["name"]=$a;$K["materialized"]=($Eg!="VIEW");if(!$k)$k=error();}page_header(($a!=""?lang(37):lang(215)),$k,array("table"=>$a),h($a));echo'
    -

    ',lang(190),': -',(support("materializedview")?" ".checkbox("materialized",1,$K["materialized"],lang(132)):""),'

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

    - -';if($a!="")echo'',confirm(lang(180,$a));echo +

    ',lang(195),': +',(support("materializedview")?" ".checkbox("materialized",1,$K["materialized"],lang(136)):""),'

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

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

    -';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$Zd=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Mh=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$K=$_POST;if($_POST&&!$k){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),lang(210));elseif(in_array($K["INTERVAL_FIELD"],$Zd)&&isset($Mh[$K["STATUS"]])){$jh="\nON SCHEDULE ".($K["INTERVAL_VALUE"]?"EVERY ".q($K["INTERVAL_VALUE"])." $K[INTERVAL_FIELD]".($K["STARTS"]?" STARTS ".q($K["STARTS"]):"").($K["ENDS"]?" ENDS ".q($K["ENDS"]):""):"AT ".q($K["STARTS"]))." ON COMPLETION".($K["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?lang(211):lang(212)),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$jh.($aa!=$K["EVENT_NAME"]?"\nRENAME TO ".idf_escape($K["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($K["EVENT_NAME"]).$jh)."\n".$Mh[$K["STATUS"]]." COMMENT ".q($K["EVENT_COMMENT"]).rtrim(" DO\n$K[EVENT_DEFINITION]",";").";"));}}page_header(($aa!=""?lang(213).": ".h($aa):lang(214)),$k);if(!$K&&$aa!=""){$L=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$K=reset($L);}echo' +';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$we=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Ci=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$K=$_POST;if($_POST&&!$k){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),lang(216));elseif(in_array($K["INTERVAL_FIELD"],$we)&&isset($Ci[$K["STATUS"]])){$Xh="\nON SCHEDULE ".($K["INTERVAL_VALUE"]?"EVERY ".q($K["INTERVAL_VALUE"])." $K[INTERVAL_FIELD]".($K["STARTS"]?" STARTS ".q($K["STARTS"]):"").($K["ENDS"]?" ENDS ".q($K["ENDS"]):""):"AT ".q($K["STARTS"]))." ON COMPLETION".($K["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?lang(217):lang(218)),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$Xh.($aa!=$K["EVENT_NAME"]?"\nRENAME TO ".idf_escape($K["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($K["EVENT_NAME"]).$Xh)."\n".$Ci[$K["STATUS"]]." COMMENT ".q($K["EVENT_COMMENT"]).rtrim(" DO\n$K[EVENT_DEFINITION]",";").";"));}}page_header(($aa!=""?lang(219).": ".h($aa):lang(220)),$k);if(!$K&&$aa!=""){$L=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$K=reset($L);}echo'
    -
    ',lang(190),' -
    ',lang(215),' -
    ',lang(216),' -
    ',lang(217),' ',html_select("INTERVAL_FIELD",$Zd,$K["INTERVAL_FIELD"]),'
    ',lang(120),'',html_select("STATUS",$Mh,$K["STATUS"]),'
    ',lang(42),' -
    ',checkbox("ON_COMPLETION","PRESERVE",$K["ON_COMPLETION"]=="PRESERVE",lang(218)),'
    +',lang(195),' +',lang(221),' +',lang(222),' +',lang(223),' ',html_select("INTERVAL_FIELD",$we,$K["INTERVAL_FIELD"]),'',lang(124),'',html_select("STATUS",$Ci,$K["STATUS"]),'',lang(44),' +',checkbox("ON_COMPLETION","PRESERVE",$K["ON_COMPLETION"]=="PRESERVE",lang(224)),'

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

    - -';if($aa!="")echo'',confirm(lang(180,$aa));echo + +';if($aa!="")echo' +';echo input_token(),'

    -';}elseif(isset($_GET["procedure"])){$ca=($_GET["name"]?:$_GET["procedure"]);$fh=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$K=$_POST;$K["fields"]=(array)$K["fields"];if($_POST&&!process_fields($K["fields"])&&!$k){foreach($K["fields"]as$w=>$l){if($l["field"]=="")unset($K["fields"][$w]);}$Df=routine_id($ca,routine($_GET["procedure"],$fh));$rf=routine_id($K["name"],$K);$g=create_routine($fh,$K);$_=substr(ME,0,-1);$B=lang(219);if(!$_POST["drop"]&&$Df==$rf&&connection()->flavor!="mysql")query_redirect(substr_replace($g,' OR REPLACE',6,0),$_,$B);else{$ii="$K[name]_adminer_".uniqid();drop_create("DROP $fh $Df",$g,"DROP $fh $rf",create_routine($fh,array("name"=>$ii)+$K),"DROP $fh ".routine_id($ii,$K),$_,lang(220),$B,lang(221),$ca,$K["name"]);}}page_header(($ca!=""?(isset($_GET["function"])?lang(222):lang(223)).": ".h($ca):(isset($_GET["function"])?lang(224):lang(225))),$k);if(!$_POST){if($ca=="")$K["language"]="sql";else{$K=routine($_GET["procedure"],$fh);$K["name"]=$ca;}}$fb=get_vals("SHOW CHARACTER SET");sort($fb);$gh=routine_languages();echo($fb?"".optionlist($fb)."":""),' +';}elseif(isset($_GET["procedure"])){$ca=($_GET["name"]?:$_GET["procedure"]);$Sh=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$K=$_POST;$K["fields"]=(array)$K["fields"];if($_POST&&!process_fields($K["fields"])&&!$k){foreach($K["fields"]as$x=>$l){if($l["field"]=="")unset($K["fields"][$x]);}$jg=routine_id($ca,routine($_GET["procedure"],$Sh));$Tf=routine_id($K["name"],$K);$g=create_routine($Sh,$K);$A=substr(ME,0,-1);$C=lang(225);if(!$_POST["drop"]&&$jg==$Tf&&connection()->flavor!="mysql")query_redirect(substr_replace($g,' OR REPLACE',6,0),$A,$C);else{$Yi="adminer_".uniqid();drop_create("DROP $Sh $jg",$g,"DROP $Sh $Tf",create_routine($Sh,array("name"=>$Yi)+$K),"DROP $Sh ".routine_id($Yi,$K),$A,lang(226),$C,lang(227),$ca,$K["name"]);}}page_header(($ca!=""?(isset($_GET["function"])?lang(228):lang(229)).": ".h($ca):(isset($_GET["function"])?lang(230):lang(231))),$k);if(!$_POST){if($ca=="")$K["language"]="sql";else{$K=routine($_GET["procedure"],$Sh);$K["name"]=$ca;}}$ib=get_vals("SHOW CHARACTER SET");sort($ib);$Th=routine_languages();echo($ib?"".optionlist($ib)."":""),'
    -

    ',lang(190),': -',($gh?"\n":""),' +

    ',lang(195),': +',($Th?"\n":""),'

    -';edit_fields($K["fields"],$fb,$fh);if(isset($_GET["function"])){echo"
    ".lang(226);edit_type("returns",(array)$K["returns"],$fb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo'
    +';edit_fields($K["fields"],$ib,$Sh);if(isset($_GET["function"])){echo"".lang(232);edit_type("returns",(array)$K["returns"],$ib,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo' ',script("editFields();"),'

    ';textarea("definition",$K["definition"],20);echo'

    - -';if($ca!="")echo'',confirm(lang(180,$ca));echo + +';if($ca!="")echo' +';echo input_token(),'

    -';}elseif(isset($_GET["check"])){$a=$_GET["check"];$C=$_GET["name"];$K=$_POST;if($K&&!$k){if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(),"",array(),"$C",($K["drop"]?"":$K["clause"]));else{$I=($C==""||queries("ALTER TABLE ".table($a)." DROP CONSTRAINT ".idf_escape($C)));if(!$K["drop"])$I=queries("ALTER TABLE ".table($a)." ADD".($K["name"]!=""?" CONSTRAINT ".idf_escape($K["name"]):"")." CHECK ($K[clause])");}queries_redirect(ME."table=".urlencode($a),($K["drop"]?lang(227):($C!=""?lang(228):lang(229))),$I);}page_header(($C!=""?lang(230).": ".h($C):lang(143)),$k,array("table"=>$a));if(!$K){$Xa=driver()->checkConstraints($a);$K=array("name"=>$C,"clause"=>$Xa[$C]);}echo' +';}elseif(isset($_GET["check"])){$a=$_GET["check"];$D=$_GET["name"];$K=$_POST;if($K&&!$k){if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(),"",array(),"$D",($K["drop"]?"":$K["clause"]));else{$I=($D==""||queries("ALTER TABLE ".table($a)." DROP CONSTRAINT ".idf_escape($D)));if(!$K["drop"])$I=queries("ALTER TABLE ".table($a)." ADD".($K["name"]!=""?" CONSTRAINT ".idf_escape($K["name"]):"")." CHECK ($K[clause])");}queries_redirect(ME."table=".url_escape($a),($K["drop"]?lang(233):($D!=""?lang(234):lang(235))),$I);}page_header(($D!=""?lang(236):lang(147)),$k,array("table"=>$a),h($D!=""?$D:$a));if(!$K){$Za=driver()->checkConstraints($a);$K=array("name"=>$D,"clause"=>$Za[$D]);}echo'

    ';if(JUSH!="sqlite")echo -lang(190).': ';echo -doc_link(array('sql'=>"create-table-check-constraints.html",'mariadb'=>"constraint/",),"?"),'

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

    -';if($C!="")echo'',confirm(lang(180,$C));echo +lang(195).': ';echo +doc_link(array('sql'=>"create-table-check-constraints.html",'mariadb'=>"constraint/",),"?"),'

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

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

    -';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$C="$_GET[name]";$Ci=trigger_options();$K=(array)trigger($C,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$k&&in_array($_POST["Timing"],$Ci["Timing"])&&in_array($_POST["Event"],$Ci["Event"])&&in_array($_POST["Type"],$Ci["Type"])){$Gf=" ON ".table($a);$dc="DROP TRIGGER ".idf_escape($C).(JUSH=="pgsql"?$Gf:"");$_=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($dc,$_,lang(231));else{if($C!="")queries($dc);queries_redirect($_,($C!=""?lang(232):lang(233)),queries(create_trigger($Gf,$_POST)));if($C!="")queries(create_trigger($Gf,$K+array("Type"=>reset($Ci["Type"]))));}}$K=$_POST;}page_header(($C!=""?lang(234).": ".h($C):lang(235)),$k,array("table"=>$a));echo' +';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$D="$_GET[name]";$uj=trigger_options();$K=(array)trigger($D,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$k&&in_array($_POST["Timing"],$uj["Timing"])&&in_array($_POST["Event"],$uj["Event"])&&in_array($_POST["Type"],$uj["Type"])){$mg=" ON ".table($a);$pc="DROP TRIGGER ".idf_escape($D).(JUSH=="pgsql"?$mg:"");$A=ME."table=".url_escape($a);if($_POST["drop"])query_redirect($pc,$A,lang(237));else{if($D!="")queries($pc);queries_redirect($A,($D!=""?lang(238):lang(239)),queries(create_trigger($mg,$_POST)));if($D!="")queries(create_trigger($mg,$K+array("Type"=>reset($uj["Type"]))));}}$K=$_POST;}page_header(($D!=""?lang(240):lang(149)),$k,array("table"=>$a),h($D!=""?$D:$a));$tj=on('change','triggerChange',"^".preg_quote($a,"/")."_[ba][iud]$",$a);echo'
    -
    ',lang(236),'',html_select("Timing",$Ci["Timing"],$K["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, '".js_escape($a)."', this.form);"),'
    ',lang(237),'',html_select("Event",$Ci["Event"],$K["Event"],"this.form['Timing'].onchange();"),(in_array("UPDATE OF",$Ci["Event"])?" ":""),'
    ',lang(41),'',html_select("Type",$Ci["Type"],$K["Type"]),'
    -

    ',lang(190),': -',script("qs('#form')['Timing'].onchange();"),'

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

    - -';if($C!="")echo'',confirm(lang(180,$C));echo +',lang(241),'',html_select("Timing",$uj["Timing"],$K["Timing"],$tj),'',lang(242),'',html_select("Event",$uj["Event"],$K["Event"],$tj),(in_array("UPDATE OF",$uj["Event"])?" ":""),'',lang(43),'',html_select("Type",$uj["Type"],$K["Type"]),' +

    ',lang(195),': +',script("fire(qs('#form')['Timing'], 'change');"),'

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

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

    -';}elseif(isset($_GET["user"])){$ea=$_GET["user"];$Hg=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$K){foreach(explode(",",($K["Privilege"]=="Grant option"?"":$K["Context"]))as$sb)$Hg[$sb=="File access on server"?"Server Admin":$sb][$K["Privilege"]]=$K["Comment"];}unset($Hg["Server Admin"]["Usage"]);foreach($Hg["Tables"]as$w=>$X)unset($Hg["Databases"][$w]);$qf=array();if($_POST){foreach($_POST["objects"]as$w=>$X)$qf[$X]=(array)$qf[$X]+idx($_POST["grants"],$w,array());}$ld=array();if(isset($_GET["host"])&&($I=connection()->query("SHOW GRANTS FOR ".q($ea)."@".q($_GET["host"])))){while($K=$I->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$K[0],$A)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$A[1],$Me,PREG_SET_ORDER)){foreach($Me -as$X){if($X[1]!="USAGE")$ld["$A[2]$X[2]"][$X[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$K[0]))$ld["$A[2]$X[2]"]["GRANT OPTION"]=true;}}}}if($_POST&&!$k){$Ff=(isset($_GET["host"])?q($ea)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $Ff",ME."privileges=",lang(238));else{$tf=q($_POST["user"])."@".q($_POST["host"]);$pg=$_POST["pass"];$xb=false;$I=true;if($Ff!=$tf){$xb=queries("CREATE USER $tf IDENTIFIED BY ".($_POST["hashed"]?"PASSWORD ":"").q($pg));$I=$xb;}elseif($pg!="")$I=queries("SET PASSWORD FOR $tf = ".(min_version(8,99)||$_POST["hashed"]?q($pg):"PASSWORD(".q($pg).")"));if($I){$ch=array();foreach($qf -as$_f=>$kd){if(isset($_GET["grant"]))$kd=array_filter($kd);$kd=array_keys($kd);if(isset($_GET["grant"]))$ch=array_diff(array_keys(array_filter($qf[$_f],'strlen')),$kd);elseif($Ff==$tf){$Cf=array_keys((array)$ld[$_f]);$ch=array_diff($Cf,$kd);$kd=array_diff($kd,$Cf);unset($ld[$_f]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$_f,$A)&&(!grant("REVOKE",$ch,$A[2]," ON $A[1] FROM $tf")||!grant("GRANT",$kd,$A[2]," ON $A[1] TO $tf"))){$I=false;break;}}}if($I&&isset($_GET["host"])){if($Ff!=$tf)queries("DROP USER $Ff");elseif(!isset($_GET["grant"])){foreach($ld -as$_f=>$ch){if(preg_match('~^(.+)(\(.*\))?$~U',$_f,$A))grant("REVOKE",array_keys($ch),$A[2]," ON $A[1] FROM $tf");}}}queries_redirect(ME."privileges=",(isset($_GET["host"])?lang(239):lang(240)),$I);if($xb)connection()->query("DROP USER $tf");}}page_header((isset($_GET["host"])?lang(27).": ".h("$ea@$_GET[host]"):lang(152)),$k,array("privileges"=>array('',lang(63))));$K=$_POST;if($K)$ld=$qf;else{$K=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$ld[(DB==""||$ld?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'
    +';}elseif(isset($_GET["user"])){$ea=$_GET["user"];$th=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$K){foreach(explode(",",($K["Privilege"]=="Grant option"?"":$K["Context"]))as$vb)$th[$vb=="File access on server"?"Server Admin":$vb][$K["Privilege"]]=$K["Comment"];}unset($th["Server Admin"]["Usage"]);foreach($th["Tables"]as$x=>$X)unset($th["Databases"][$x]);$Sf=array();if($_POST){foreach($_POST["objects"]as$x=>$X)$Sf[$X]=(array)$Sf[$X]+idx($_POST["grants"],$x,array());}$Cd=array();if(isset($_GET["host"])&&($I=connection()->query("SHOW GRANTS FOR ".q($ea)."@".q($_GET["host"])))){while($K=$I->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$K[0],$B)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$B[1],$lf,PREG_SET_ORDER)){foreach($lf +as$X){if($X[1]!="USAGE")$Cd["$B[2]$X[2]"][$X[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$K[0]))$Cd["$B[2]$X[2]"]["GRANT OPTION"]=true;}}}}if($_POST&&!$k){$lg=(isset($_GET["host"])?q($ea)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $lg",ME."privileges=",lang(243));else{$Vf=q($_POST["user"])."@".q($_POST["host"]);$Wg=$_POST["pass"];$Bb=false;$I=true;if($lg!=$Vf){$Bb=queries("CREATE USER $Vf IDENTIFIED BY ".($_POST["hashed"]?"PASSWORD ":"").q($Wg));$I=$Bb;}elseif($Wg!="")$I=queries("SET PASSWORD FOR $Vf = ".(min_version(8,99)||$_POST["hashed"]?q($Wg):"PASSWORD(".q($Wg).")"));if($I){$Ph=array();foreach($Sf +as$cg=>$Bd){if(isset($_GET["grant"]))$Bd=array_filter($Bd);$Bd=array_keys($Bd);if(isset($_GET["grant"]))$Ph=array_diff(array_keys(array_filter($Sf[$cg],'strlen')),$Bd);elseif($lg==$Vf){$ig=array_keys((array)$Cd[$cg]);$Ph=array_diff($ig,$Bd);$Bd=array_diff($Bd,$ig);unset($Cd[$cg]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$cg,$B)&&(!grant("REVOKE",$Ph,$B[2]," ON $B[1] FROM $Vf")||!grant("GRANT",$Bd,$B[2]," ON $B[1] TO $Vf"))){$I=false;break;}}}if($I&&isset($_GET["host"])){if($lg!=$Vf)queries("DROP USER $lg");elseif(!isset($_GET["grant"])){foreach($Cd +as$cg=>$Ph){if(preg_match('~^(.+)(\(.*\))?$~U',$cg,$B))grant("REVOKE",array_keys($Ph),$B[2]," ON $B[1] FROM $Vf");}}}if($I&&!Queries::$queries)redirect(ME."privileges=");queries_redirect(ME."privileges=",(isset($_GET["host"])?lang(244):lang(245)),$I);if($Bb)connection()->query("DROP USER $Vf");}}page_header((isset($_GET["host"])?lang(29).": ".h("$ea@$_GET[host]"):lang(157)),$k,array("privileges"=>array('',lang(65))));$K=$_POST;if($K)$Cd=$Sf;else{$K=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$Cd[(DB==""||$Cd?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo' -
    ',lang(25),' -
    ',lang(27),' -
    ',lang(28),' -',($K["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8,99)?"":checkbox("hashed",1,$K["hashed"],lang(241),"typePassword(this.form['pass'], this.checked);")),'
    +',lang(27),' +',lang(29),' +',lang(30),' +',($K["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8,99)?"":checkbox("hashed",1,$K["hashed"],lang(246),on('click','hashedClick'))),' -',"\n","\n";foreach(array(""=>"","Server Admin"=>lang(25),"Databases"=>lang(29),"Tables"=>lang(134),"Procedures"=>lang(242),)as$sb=>$Qb){foreach((array)$Hg[$sb]as$Gg=>$jb){echo"$Qb'.h($Gg);$r=0;foreach($ld -as$_f=>$kd){$C="'grants[$r][".h(strtoupper($Gg))."]'";$Y=$kd[strtoupper($Gg)];if($sb=="Server Admin"&&$_f!=(isset($ld["*.*"])?"*.*":".*"))echo"
    ".lang(63).doc_link(array('sql'=>"grant.html#priv_level"));$r=0;foreach($ld -as$_f=>$kd){echo''.($_f!="*.*"?"":input_hidden("objects[$r]","*.*")."*.*");$r++;}echo"
    ";elseif(isset($_GET["grant"]))echo"";else -echo"";$r++;}}}echo"
    \n",'

    - -';if(isset($_GET["host"]))echo'',confirm(lang(180,"$ea@$_GET[host]"));echo +',"\n","\n";foreach(array(""=>"","Server Admin"=>lang(27),"Databases"=>lang(31),"Tables"=>lang(138),"Procedures"=>lang(247),)as$vb=>$Xb){foreach((array)$th[$vb]as$sh=>$lb){echo"$Xb'.h($sh);$s=0;foreach($Cd +as$cg=>$Bd){$D="'grants[$s][".h(strtoupper($sh))."]'";$Y=$Bd[strtoupper($sh)];if($vb=="Server Admin"&&$cg!=(isset($Cd["*.*"])?"*.*":".*"))echo"
    ".lang(65).doc_link(array('sql'=>"grant.html#priv_level"));$s=0;foreach($Cd +as$cg=>$Bd){echo''.($cg!="*.*"?"":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&&!$k){$oe=0;foreach((array)$_POST["kill"]as$X){if(adminer()->killProcess($X))$oe++;}queries_redirect(ME."processlist=",lang(245,$oe),$oe||!$_POST["kill"]);}}page_header(lang(118),$k);echo' +';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$k){$Me=0;foreach((array)$_POST["kill"]as$X){if(adminer()->killProcess($X))$Me++;}queries_redirect(ME."processlist=",lang(250,$Me),$Me||!$_POST["kill"]);}}page_header(lang(122),$k);echo'
    - -',script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");$r=-1;foreach(adminer()->processList()as$r=>$K){if(!$r){echo"".(support("kill")?"\n";}echo"".(support("kill")?"
    ":"");foreach($K -as$w=>$X)echo"$w".doc_link(array('sql'=>"show-processlist.html#processlist_".strtolower($w),));echo"
    ".checkbox("kill[]",$K[JUSH=="sql"?"Id":"pid"],0):"");foreach($K -as$w=>$X)echo"".($X!=""&&((JUSH=="sql"&&$w=="Info"&&preg_match("~Query|Killed~",$K["Command"]))||(JUSH=="pgsql"&&$w=="query")||(JUSH=="oracle"&&$w=="sql_text"))?"".shorten_utf8($X,100,"").' '.lang(246).''.' 🗐':h($X));echo"\n";}echo'
    + +';$s=-1;foreach(adminer()->processList()as$s=>$K){if(!$s){echo"".(support("kill")?"\n";}echo"".(support("kill")?"
    ":"");foreach($K +as$x=>$X)echo"$x".doc_link(array('sql'=>"show-processlist.html#processlist_".strtolower($x),));echo"
    ".checkbox("kill[]",$K[JUSH=="sql"?"Id":"pid"],0):"");foreach($K +as$x=>$X)echo"".($X!=""&&((JUSH=="sql"&&$x=="Info"&&preg_match("~Query|Killed~",$K["Command"]))||(JUSH=="pgsql"&&$x=="query")||(JUSH=="oracle"&&$x=="sql_text"))?"".shorten_utf8($X,100,"").' '.lang(251).''.' '.copy_icon():h($X));echo"\n";}echo'

    -',script("copyCode(qsl('table'));");if(support("kill"))echo($r+1)."/".lang(247,max_connections()),"

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

    \n";echo input_token(),'

    -',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$v=indexes($a);$m=fields($a);$bd=column_foreign_keys($a);$Bf=$S["Oid"];$la=get_settings("adminer_import");$dh=array();$c=array();$oh=array();$Qf=array();$li="";foreach($m -as$w=>$l){$C=adminer()->fieldName($l);$of=html_entity_decode(strip_tags($C),ENT_QUOTES);if(isset($l["privileges"]["select"])&&$C!=""){$c[$w]=$of;if(is_shortable($l))$li=adminer()->selectLengthProcess();}if(isset($l["privileges"]["where"])&&$C!="")$oh[$w]=$of;if(isset($l["privileges"]["order"])&&$C!="")$Qf[$w]=$of;$dh+=$l["privileges"];}list($M,$q)=adminer()->selectColumnsProcess($c,$v);$M=array_unique($M);$q=array_unique($q);$de=count($q)selectSearchProcess($m,$v);$D=adminer()->selectOrderProcess($m,$v);$y=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Ki=>$K){$va=convert_field($m[key($K)]);$M=array($va?:idf_escape(key($K)));$Z[]=where_check($Ki,$m);$J=driver()->select($a,$M,$Z,$M);if($J)echo -first($J->fetch_row());}exit;}$Dg=$Mi=array();foreach($v -as$u){if($u["type"]=="PRIMARY"){$Dg=array_flip($u["columns"]);$Mi=($M?$Dg:array());foreach($Mi -as$w=>$X){if(in_array(idf_escape($w),$M))unset($Mi[$w]);}break;}}if($Bf&&!$Dg){$Dg=$Mi=array($Bf=>0);$v[]=array("type"=>"PRIMARY","columns"=>array($Bf));}if($_POST&&!$k){$mj=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Xa=array();foreach($_POST["check"]as$Ua)$Xa[]=where_check($Ua,$m);$mj[]="((".implode(") OR (",$Xa)."))";}$mj=($mj?"\nWHERE ".implode(" AND ",$mj):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$fd=($M?implode(", ",$M):"*").convert_fields($c,$m,$M)."\nFROM ".table($a);$nd=($q&&$de?"\nGROUP BY ".implode(", ",$q):"").($D?"\nORDER BY ".implode(", ",$D):"");$H="SELECT $fd$mj$nd";if(is_array($_POST["check"])&&!$Dg){$Ii=array();foreach($_POST["check"]as$X)$Ii[]="(SELECT".limit($fd,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$m).$nd,1).")";$H=implode(" UNION ALL ",$Ii);}adminer()->dumpData($a,"table",$H);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$bd)){if($_POST["save"]||$_POST["delete"]){$I=true;$ma=0;$O=array();if(!$_POST["delete"]){foreach($m -as$C=>$X){$t=bracket_escape($C);if(isset($_POST["fields"][$t])||$_FILES["fields-$t"]){$X=process_input($m[$C]);if($X!==null&&($_POST["clone"]||$X!==false))$O[idf_escape($C)]=($X!==false?$X:idf_escape($C));}}}if($_POST["delete"]||$O){$H=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($O)).")\nSELECT ".implode(", ",$O)."\nFROM ".table($a):"");if($_POST["all"]||($Dg&&is_array($_POST["check"]))||$de){$I=($_POST["delete"]?driver()->delete($a,$mj):($_POST["clone"]?queries("INSERT $H$mj".driver()->insertReturning($a)):driver()->update($a,$O,$mj)));$ma=connection()->affected_rows;if(is_object($I))$ma+=$I->num_rows;}else{foreach((array)$_POST["check"]as$X){$lj="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$m);$I=($_POST["delete"]?driver()->delete($a,$lj,1):($_POST["clone"]?queries("INSERT".limit1($a,$H,$lj)):driver()->update($a,$O,$lj,1)));if(!$I)break;$ma+=connection()->affected_rows;}}}$B=lang(249,$ma);if($_POST["clone"]&&$I&&$ma==1){$ue=last_id($I);if($ue)$B=lang(173," $ue");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$B,$I);if(!$_POST["delete"]){$_g=(array)$_POST["fields"];edit_form($a,array_intersect_key($m,$_g),$_g,!$_POST["clone"],$k);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$k=lang(250);else{$I=true;$ma=0;foreach($_POST["val"]as$Ki=>$K){$O=array();foreach($K -as$w=>$X){$w=bracket_escape($w,true);$O[idf_escape($w)]=(preg_match('~char|text~',$m[$w]["type"])||$X!=""?adminer()->processInput($m[$w],$X):"NULL");}$I=driver()->update($a,$O," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Ki,$m),($de||$Dg?0:1)," ");if(!$I)break;$ma+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang(249,$ma),$I);}}elseif(!is_string($Qc=get_file("csv_file",true)))$k=upload_error($Qc);elseif(!preg_match('~~u',$Qc))$k=lang(251);else{save_settings(array("output"=>$la["output"],"format"=>$_POST["separator"]),"adminer_import");$I=true;$gb=array_keys($m);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Qc,$Me);$ma=count($Me[0]);driver()->begin();$uh=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$L=array();foreach($Me[0]as$w=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$uh]*)$uh~",$X.$uh,$Ne);if(!$w&&!array_diff($Ne[1],$gb)){$gb=$Ne[1];$ma--;}else{$O=array();foreach($Ne[1]as$r=>$cb)$O[idf_escape($gb[$r])]=($cb==""&&$m[$gb[$r]]["null"]?"NULL":q(preg_match('~^".*"$~s',$cb)?str_replace('""','"',substr($cb,1,-1)):$cb));$L[]=$O;}}$I=(!$L||driver()->insertUpdate($a,$L,$Dg));if($I)driver()->commit();queries_redirect(remove_from_uri("page"),lang(252,$ma),$I);driver()->rollback();}}}$Yh=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else -page_header(lang(45).": $Yh",$k);$O=null;if(isset($dh["insert"])||!support("table")){$fg=array();foreach((array)$_GET["where"]as$X){if(isset($bd[$X["col"]])&&count($bd[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$fg["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$O=$fg?"&".http_build_query($fg):"";}adminer()->selectLinks($S,$O);if(!$c&&support("table"))echo"

    ".lang(253).($m?".":": ".error())."\n";else{echo"

    \n","
    ";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"
    \n";adminer()->selectColumnsPrint($M,$c);adminer()->selectSearchPrint($Z,$oh,$v);adminer()->selectOrderPrint($D,$Qf,$v);adminer()->selectLimitPrint($y);adminer()->selectLengthPrint($li);adminer()->selectActionPrint($v);echo"
    \n";$E=$_GET["page"];$ed=null;if($E=="last"){$ed=get_val(count_rows($a,$Z,$de,$q));$E=floor(max(0,intval($ed)-1)/$y);}$ph=$M;$md=$q;if(!$ph){$ph[]="*";$tb=convert_fields($c,$m,$M);if($tb)$ph[]=substr($tb,2);}foreach($M -as$w=>$X){$l=$m[idf_unescape($X)];if($l&&($va=convert_field($l)))$ph[$w]="$va AS $X";}if(!$de&&$Mi){foreach($Mi -as$w=>$X){$ph[]=idf_escape($w);if($md)$md[]=idf_escape($w);}}$I=driver()->select($a,$ph,$Z,$md,$D,$y,$E,true);if(!$I)echo"

    ".error()."\n";else{if(JUSH=="mssql"&&$E)$I->seek($y*$E);$nc=array();echo"

    \n";$L=array();while($K=$I->fetch_assoc()){if($E&&JUSH=="oracle")unset($K["RNUM"]);$L[]=$K;}if($_GET["page"]!="last"&&$y&&$q&&$de&&JUSH=="sql")$ed=get_val(" SELECT FOUND_ROWS()");if(!$L)echo"

    ".lang(14)."\n";else{$Ea=adminer()->backwardKeys($a,$Yh);echo"

    ","",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"".(!$q&&$M?"":"\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($L,$rd)as$Pf=>$K){$Cj=unique_array($L[$Pf],$w);if(!$Cj){$Cj=array();reset($M);foreach($L[$Pf]as$x=>$X){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($M)))$Cj[$x]=$X;next($M);}}$Dj="";foreach($Cj +as$x=>$X){$l=(array)$m[$x];$_e=is_blob($l);if((JUSH=="sql"||JUSH=="pgsql")&&($_e||preg_match('~char|text|enum|set~',$l["type"]))&&strlen($X)>64){$x=(strpos($x,'(')?$x:idf_escape($x));$x="MD5(".($_e||JUSH!='sql'||preg_match("~^utf8~",$l["collation"])?$x:"CONVERT($x USING ".charset(connection()).")").")";$X=md5($_e?(string)driver()->value($X,$l):$X);}$Dj +.="&".($X!==null?"where[".url_escape(bracket_escape($x))."]=".url_escape($X===false?"f":$X):"null[]=".url_escape($x));}echo"".(!$r&&$M?"":"\n";}if(is_ajax())exit;echo"
    ".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." ".lang(254)."");$pf=array();$hd=array();reset($M);$Pg=1;foreach($L[0]as$w=>$X){if(!isset($Mi[$w])){$X=idx($_GET["columns"],key($M))?:array();$l=$m[$M?($X?$X["col"]:current($M)):$w];$C=($l?adminer()->fieldName($l,$Pg):($X["fun"]?"*":h($w)));if($C!=""){$Pg++;$pf[$w]=$C;$b=idf_escape($w);$Bd=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($w);$Qb="&desc%5B0%5D=1";echo"".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$gd=apply_sql_function($X["fun"],$C);$Dh=isset($l["privileges"]["order"])||$gd!=$C;echo($Dh?"$gd":$gd);$Ye=($Dh?"":'');if(!$X["fun"]&&isset($l["privileges"]["where"])){$Ye -.=' =';$Ye -.=script("qsl('a').onclick = partial(selectSearch, '".js_escape($w)."');");}echo($Ye?"":"");}$hd[$w]=$X["fun"];next($M);}}$Ae=array();if($_GET["modify"]){foreach($L +',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$w=indexes($a);$m=fields($a);$rd=column_foreign_keys($a);$hg=$S["Oid"];$la=get_settings("adminer_import");$Qh=array();$d=array();$bi=array();$xg=array();$bj=null;foreach($m +as$x=>$l){$D=adminer()->fieldName($l);$Qf=html_entity_decode(strip_tags($D),ENT_QUOTES);if(isset($l["privileges"]["select"])&&$D!=""){$d[$x]=$Qf;if(is_shortable($l))$bj=adminer()->selectLengthProcess();}if(isset($l["privileges"]["where"])&&$D!="")$bi[$x]=$Qf;if(isset($l["privileges"]["order"])&&$D!="")$xg[$x]=$Qf;$Qh+=$l["privileges"];}list($M,$r)=adminer()->selectColumnsProcess($d,$w);$M=array_unique($M);$r=array_unique($r);$Ae=count($r)selectSearchProcess($m,$w);$E=adminer()->selectOrderProcess($m,$w);$z=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Dj=>$K){$xa=convert_field($m[key($K)]);$M=array($xa?:idf_escape(key($K)));$Z[]=where_check(bracket_escape($Dj,true),$m);$J=driver()->select($a,$M,$Z,$M);if($J)echo +first($J->fetch_row());}exit;}$ph=$Fj=array();foreach($w +as$v){if($v["type"]=="PRIMARY"){$ph=array_flip($v["columns"]);$Fj=($M?$ph:array());foreach($Fj +as$x=>$X){if(in_array(idf_escape($x),$M))unset($Fj[$x]);}break;}}if($hg&&!$ph){$ph=$Fj=array($hg=>0);$w[]=array("type"=>"PRIMARY","columns"=>array($hg));}if($_POST&&!$k){$hk=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$Za=array();foreach($_POST["check"]as$Wa)$Za[]=where_check($Wa,$m);$hk[]="((".implode(") OR (",$Za)."))";}$jk=$hk;$hk=($hk?"\nWHERE ".implode(" AND ",$hk):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$di=($M?:array("*"));$xb=convert_fields($d,$m,$M);if($xb)$di[]=substr($xb,2);$H="";if(is_array($_POST["check"])&&!$ph){$vd=implode(", ",$di)."\nFROM ".table($a);$Ed=($r&&$Ae?"\nGROUP BY ".implode(", ",$r):"").($E?"\nORDER BY ".implode(", ",$E):"");$Bj=array();foreach($_POST["check"]as$X)$Bj[]="(SELECT".limit($vd,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$m).$Ed,1).")";$H=implode(" UNION ALL ",$Bj);}adminer()->dumpData($a,"table",$H,$di,$jk,($Ae?$r:array()),$E);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$rd)){if($_POST["save"]||$_POST["delete"]){$I=true;$ma=0;$O=array();if(!$_POST["delete"]){foreach($m +as$D=>$X){$u=bracket_escape($D);if(isset($_POST["fields"][$u])||$_FILES["fields-$u"]){$X=process_input($m[$D]);if($X!==null&&($_POST["clone"]||$X!==false))$O[idf_escape($D)]=($X!==false?$X:idf_escape($D));}}}if($_POST["delete"]||$O){$H=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($O)).")\nSELECT ".implode(", ",$O)."\nFROM ".table($a):"");if($_POST["all"]||($ph&&is_array($_POST["check"]))||$Ae){$I=($_POST["delete"]?driver()->delete($a,$hk):($_POST["clone"]?queries("INSERT $H$hk".driver()->insertReturning($a)):driver()->update($a,$O,$hk)));$ma=connection()->affected_rows;if(is_object($I))$ma+=$I->num_rows;}else{foreach((array)$_POST["check"]as$X){$gk="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$m);$I=($_POST["delete"]?driver()->delete($a,$gk,1):($_POST["clone"]?queries("INSERT".limit1($a,$H,$gk)):driver()->update($a,$O,$gk,1)));if(!$I)break;$ma+=connection()->affected_rows;}}}$C=lang(254,$ma);if($_POST["clone"]&&$I&&$ma==1){$Te=last_id($I);if($Te)$C=lang(178," $Te");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page|next":""),$C,$I);if(!$_POST["delete"]){$jh=(array)$_POST["fields"];edit_form($a,array_intersect_key($m,$jh),$jh,!$_POST["clone"],$k);page_footer();exit;}}elseif(!$_POST["import"]){$I=true;$ma=0;foreach((array)$_POST["val"]as$Dj=>$K){$O=array();foreach($K +as$x=>$X){$x=bracket_escape($x,true);$O[idf_escape($x)]=(preg_match('~char|text~',$m[$x]["type"])||$X!=""?adminer()->processInput($m[$x],$X):"NULL");}$I=driver()->update($a,$O," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check(bracket_escape($Dj,true),$m),($Ae||$ph?0:1)," ");if(!$I)break;$ma+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang(254,$ma),$I);}elseif(!is_string($ed=get_file("csv_file",true)))$k=upload_error($ed);elseif(!preg_match('~~u',$ed))$k=lang(255);else{save_settings(array("output"=>$la["output"],"format"=>$_POST["separator"]),"adminer_import");$jb=array_keys($m);$hi=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$Fb=parse_csv($ed,$hi);$ma=count($Fb);driver()->begin();$L=array();foreach($Fb +as$x=>$Wj){if(!$x&&!array_diff($Wj,$jb)){$jb=$Wj;$ma--;}else{$O=array();foreach($Wj +as$s=>$fb)$O[idf_escape($jb[$s])]=($fb==""&&$m[$jb[$s]]["null"]?"NULL":q(csv_value($fb)));$L[]=$O;}}$I=(!$L||driver()->insertUpdate($a,$L,$ph));if($I)driver()->commit();queries_redirect(remove_from_uri("page|next"),lang(256,$ma),$I);driver()->rollback();}}}$Oi=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else +page_header(lang(47).": $Oi",$k);$O=null;if(isset($Qh["insert"])||!support("table")){$O="";foreach((array)$_GET["where"]as$X){$Y=$X["val"];if(is_array($Y))$Y=(count($Y)==1&&preg_match('~^val-(.*)~s',reset($Y),$B)?$B[1]:"");if($X["col"]!=""&&$Y!=""&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$Y)))))$O +.="&set[".url_escape(bracket_escape($X["col"]))."]=".url_escape($Y);}}adminer()->selectLinks($S,$O);if(!$d&&support("table"))echo"

    ".lang(257).($m?".":": ".error())."\n";else{echo"\n","

    \n";adminer()->selectColumnsPrint($M,$d);adminer()->selectSearchPrint($Z,$bi,$w);adminer()->selectOrderPrint($E,$xg,$w);adminer()->selectLimitPrint($z);if($bj!==null)adminer()->selectLengthPrint($bj);adminer()->selectActionPrint($w);echo"\n";foreach((array)$_GET["where"]as$X){if($X["op"]=="SQL"&&!in_array($_SERVER["HTTP_SEC_FETCH_SITE"],array("","same-origin"))){echo"

    ".lang(103).' '.lang(104)."\n";page_footer();exit;}}$F=$_GET["page"];$ud=null;if($F=="last"){$ud=get_val(count_rows($a,$Z,$Ae,$r));$F=floor(max(0,intval($ud)-1)/$z);}$ci=$M;$Dd=$r;if(!$ci){$ci[]="*";$xb=convert_fields($d,$m,$M);if($xb)$ci[]=substr($xb,2);}foreach($M +as$x=>$X){$l=$m[idf_unescape($X)];if($l&&($xa=convert_field($l)))$ci[$x]="$xa AS $X";}if(JUSH=="pgsql"||JUSH=="mssql"){foreach((array)$_GET["columns"]as$x=>$X){if(isset($ci[$x])&&$X["fun"])$ci[$x].=" AS ".idf_escape(apply_sql_function($X["fun"],($X["col"]!=""?$X["col"]:"*")));}}if(!$Ae&&$Fj){foreach($Fj +as$x=>$X){$ci[]=idf_escape($x);if($Dd)$Dd[]=idf_escape($x);}}$I=driver()->select($a,$ci,$Z,$Dd,$E,$z,$F,true);if(!is_object($I))echo"

    ".(error()?:lang(25))."\n";else{if(JUSH=="mssql"&&$F)$I->seek($z*$F);$zc=array();$L=array();while($K=$I->fetch_assoc()){if($F&&JUSH=="oracle")unset($K["RNUM"]);$L[]=$K;}$Md=($z&&(support("cursor")?$_GET["next"]!="":count($L)>=$z));if(is_ajax()&&$Md)header("X-Next-Page: ".pagination_href($F+1));if($_GET["modify"]&&$L){$uf=max_input_vars(count($L[0])+1,20);echo($uf&&count($L)>$uf?"

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

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

    ".lang(15)."\n";else{$Ga=adminer()->backwardKeys($a,$Oi);echo"

    ","\n","".(!$r&&$M?"":"\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($L,$bd)as$nf=>$K){$Ji=unique_array($L[$nf],$v);if(!$Ji){$Ji=array();reset($M);foreach($L[$nf]as$w=>$X){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($M)))$Ji[$w]=$X;next($M);}}$Ki="";foreach($Ji -as$w=>$X){$l=(array)$m[$w];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$l["type"])&&strlen($X)>64){$w=(strpos($w,'(')?$w:idf_escape($w));$w="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$l["collation"])?$w:"CONVERT($w USING ".charset(connection()).")").")";$X=md5($X);}$Ki -.="&".($X!==null?urlencode("where[".bracket_escape($w)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($w));}echo"".(!$q&&$M?"":"\n";}if(is_ajax())exit;echo"
    ");$Rf=array();$zd=array();reset($M);$Ah=1;foreach($L[0]as$x=>$X){if(!isset($Fj[$x])){$X=idx($_GET["columns"],key($M))?:array();$l=$m[$M?($X?$X["col"]:current($M)):$x];$D=($l?adminer()->fieldName($l,$Ah):($X["fun"]?"*":h($x)));if($D!=""){$Ah++;$Rf[$x]=$D;$c=idf_escape($x);$Xd=remove_from_uri('(order|desc)[^=]*|page|next').'&order[0]='.url_escape($x);$Xb="&desc[0]=1";$ri=preg_replace('~ DESC( NULLS LAST)?$~','',$E[0]);$ti=($ri==$c||$ri==$x);echo"";$yd=apply_sql_function($X["fun"],$D);$si=isset($l["privileges"]["order"])||$yd!=$D;echo($si?"$yd":$yd);$Af=($si?"":'');if(!$X["fun"]&&isset($l["privileges"]["where"]))$Af +.=" =";echo($Af?"$Af":"");}$zd[$x]=$X["fun"];next($M);}}$af=array();if($_GET["modify"]){foreach($L as$K){foreach($K -as$w=>$X)$Ae[$w]=max($Ae[$w],min(40,strlen(utf8_decode($X))));}}echo($Ea?"".lang(255):"")."
    ".checkbox("check[]",substr($Ki,1),in_array(substr($Ki,1),(array)$_POST["check"])).($de||information_schema(DB)?"":" ".lang(256).""));reset($M);foreach($K -as$w=>$X){if(isset($pf[$w])){$b=current($M);$l=(array)$m[$w];if($X!=""&&(!isset($nc[$w])||$nc[$w]!=""))$nc[$w]=(is_mail($X)?$pf[$w]:"");$z="";if(is_blob($l)&&$X!="")$z=ME.'download='.urlencode($a).'&field='.urlencode($w).$Ki;if(!$z&&$X!==null){foreach((array)$bd[$w]as$n){if(count($bd[$w])==1||end($n["source"])==$w){$z="";foreach($n["source"]as$r=>$Eh)$z -.=where_link($r,$n["target"][$r],$L[$nf][$Eh]);$z=($n["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($n["db"]),ME):ME).'select='.urlencode($n["table"]).$z;if($n["ns"])$z=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($n["ns"]),$z);if(count($n["source"])==1)break;}}}if($b=="COUNT(*)"){$z=ME."select=".urlencode($a);$r=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Ji))$z -.=where_link($r++,$W["col"],$W["val"],$W["op"]);}foreach($Ji -as$le=>$W)$z -.=where_link($r++,$le,$W);}$Cd=select_value($X,$z,$l,$li);$s=h("val[$Ki][".bracket_escape($w)."]");$Ag=idx(idx($_POST["val"],$Ki),bracket_escape($w));$Oi=idx($l["privileges"],"update");$jc=!is_array($K[$w])&&is_utf8($Cd)&&$L[$nf][$w]==$K[$w]&&!$hd[$w]&&!$l["generated"]&&$Oi;$U=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$b,$A)?$m[idf_unescape($A[2])]["type"]:$l["type"]);$ki=preg_match('~text|json|lob~',$U);$ee=preg_match(number_type(),$U)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$b);echo"".($ki?"":"");}else{$Ie=strpos($Cd,"");echo($Oi?" data-text='".($Ie?2:($ki?1:0))."'".($jc?"":" data-warning='".h(lang(257))."'"):"").">$Cd";}}next($M);}if($Ea)echo"";adminer()->backwardKeysPrint($Ea,$L[$nf]);echo"
    \n","
    \n";}if(!is_ajax()){if($L||$E){$_c=true;if($_GET["page"]!="last"){if(!$y||(count($L)<$y&&($L||!$E)))$ed=($E?$E*$y:0)+count($L);elseif(JUSH!="sql"||!$de){$ed=($de?false:found_rows($S,$Z));if(intval($ed)$y||$E));if($dg)echo(($ed===false?count($L)+1:$ed-$E*$y)>$y?'

    '.lang(258).''.script("qsl('a').onclick = partial(selectLoadMore, $y, '".lang(259)."…');",""):''),"\n";echo"

    ".lang(259):"")."
    ".($Ae||information_schema(DB)?"":"".lang(260)." ").checkbox("check[]",substr($Dj,1),in_array(substr($Dj,1),(array)$_POST["check"])));reset($M);foreach($K +as$x=>$X){if(isset($Rf[$x])){$c=current($M);$l=(array)$m[$x];if($X!=""&&(!isset($zc[$x])||$zc[$x]!=""))$zc[$x]=(is_mail($X)?$Rf[$x]:"");$_="";if(is_blob($l)&&$X!="")$_=ME.'download='.url_escape($a).'&field='.url_escape($x).$Dj;if(!$_&&$X!==null){foreach((array)$rd[$x]as$o){if(count($rd[$x])==1||end($o["source"])==$x){$_="";foreach($o["source"]as$s=>$ui)$_ +.=where_link($s,$o["target"][$s],$L[$Pf][$ui]);$_=($o["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.url_escape($o["db"]),ME):ME).'select='.url_escape($o["table"]).$_;if($o["ns"])$_=preg_replace('~([?&]ns=)[^&]+~','\1'.url_escape($o["ns"]),$_);if(count($o["source"])==1)break;}}}if($c=="COUNT(*)"){$_=ME."select=".url_escape($a);$s=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Cj))$_ +.=where_link($s++,$W["col"],$W["val"],$W["op"]);}foreach($Cj +as$Je=>$W)$_ +.=where_link($s++,$Je,$W);}$Yd=select_value($X,$_,$l,$bj);$u=bracket_escape($Dj);$t=h("val[$u][".bracket_escape($x)."]");$lh=idx(idx($_POST["val"],$u),bracket_escape($x));$Ij=idx($l["privileges"],"update");$vc=!is_array($K[$x])&&!is_blob($l)&&is_utf8($X)&&$L[$Pf][$x]==$X&&!$zd[$x]&&!$l["generated"]&&$Ij;$U=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$c,$B)?$m[idf_unescape($B[2])]["type"]:$l["type"]);$aj=preg_match('~text|json|lob~',$U);$Be=preg_match(number_type(),$U)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$c);echo"".($aj?"":"");}else{$if=strpos($Yd,"");echo($Ij?" data-text='".($if?2:($aj?1:0))."'".($vc?"":" data-warning='".lang(261)."'"):"").">$Yd";}}next($M);}if($Ga)echo"";adminer()->backwardKeysPrint($Ga,$L[$Pf]);echo"
    \n","
    \n";}if(!is_ajax()){if($L||$F||$Md){$Mc=true;if($_GET["page"]!="last"){if(!$z||(count($L)<$z&&($L||!$F)))$ud=($F?$F*$z:0)+count($L);elseif(JUSH!="sql"||!$Ae){$ud=($Ae?false:found_rows($S,$Z));if(intval($ud)$z);$Kg=($z&&($Md||$F));if($Kg)echo($Md?'

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

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

    ","".lang(67)."",script("qsl('a').onclick = partial(toggle, 'import');",""),"";echo -input_token(),"\n",(!$q&&$M?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$P=isset($_GET["status"]);page_header($P?lang(120):lang(119));$cj=($P?adminer()->showStatus():adminer()->showVariables());if(!$cj)echo"

    ".lang(14)."\n";else{echo"\n";foreach($cj -as$K){echo"";$w=array_shift($K);echo"
    ".h($w)."";foreach($K -as$X)echo"".nl_br(h($X));}echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: text/javascript; charset=utf-8");if($_GET["script"]=="db"){$Th=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$C=>$S){json_row("Comment-$C",h($S["Comment"]));if(!is_view($S)||preg_match('~materialized~i',$S["Engine"])){foreach(array("Engine","Collation")as$w)json_row("$w-$C",h($S[$w]));foreach($Th+array("Auto_increment"=>0,"Rows"=>0)as$w=>$X){if($S[$w]!=""){$X=format_number($S[$w]);if($X>=0)json_row("$w-$C",($w=="Rows"&&$X&&$S["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")?"~ $X":$X));if(isset($Th[$w]))$Th[$w]+=($S["Engine"]!="InnoDB"||$w!="Data_free"?$S[$w]:0);}elseif(array_key_exists($w,$S))json_row("$w-$C","?");}}}foreach($Th -as$w=>$X)json_row("sum-$w",format_number($X));json_row("");}elseif($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));else{foreach(count_tables(adminer()->databases())as$i=>$X){json_row("tables-$i",$X);json_row("size-$i",db_size($i));}json_row("");}exit;}else{$ei=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($ei&&!$k&&!$_POST["search"]){$I=true;$B="";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"])$I=truncate_tables($_POST["tables"]);$B=lang(263);}elseif($_POST["move"]){$I=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$B=lang(264);}elseif($_POST["copy"]){$I=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$B=lang(265);}elseif($_POST["drop"]){if($_POST["views"])$I=drop_views($_POST["views"]);if($I&&$_POST["tables"])$I=drop_tables($_POST["tables"]);$B=lang(266);}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$R){foreach(get_rows("PRAGMA integrity_check(".q($R).")")as$K)$B -.="".h($R).": ".h($K["integrity_check"])."
    ";}}elseif(JUSH!="sql"){$I=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?" ANALYZE":""),$_POST["tables"]));$B=lang(267);}elseif(!$_POST["tables"])$B=lang(11);elseif($I=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($K=$I->fetch_assoc())$B -.="".h($K["Table"]).": ".h($K["Msg_text"])."
    ";}queries_redirect($_SERVER["REQUEST_URI"],$B,$I);}page_header(($_GET["ns"]==""?lang(29).": ".h(DB):lang(151).": ".h($_GET["ns"])),$k,true);if(adminer()->homepage()){if($_GET["ns"]!==""){$D=$_GET["order"];echo"

    ".lang(268)."

    \n";$di=($D?table_status():tables_list());if(!$di)echo"

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

    \n";if(support("table")){echo"
    ".lang(269)."
    ",html_select("op",adminer()->operators(),idx($_POST,"op",JUSH=="elastic"?"should":"LIKE %%"))," ",script("qsl('input').onkeydown = partialArg(bodyKeydown, 'search');","")," \n","
    \n";if($_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]=$_POST["op"];search_tables();}}echo"
    \n","\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'','\n";if($D){uasort($di,function($ga,$Ba)use($D){$J=($ga[$D]<$Ba[$D]?-1:($ga[$D]>$Ba[$D]?1:0));return(in_array($D,array('Engine','Collation','Comment'))?$J:-$J);});}$T=0;foreach($di -as$C=>$P){$fj=($D?is_view($P):$P!==null&&!preg_match('~table|sequence~i',$P));$P=($D?$P:array('Engine'=>$P));$s=h("Table-".$C);echo'
    '.script("qs('#check-all').onclick = partial(formCheck, /^(tables|views)\[/);",""),''.lang(134).'';$c=array("Engine"=>array(lang(270).doc_link(array('sql'=>'storage-engines.html'))));if(collations())$c["Collation"]=array(lang(124).doc_link(array('sql'=>'charset-charsets.html','mariadb'=>'supported-character-sets-and-collations/')));if(function_exists('Adminer\alter_table'))$c["Data_length"]=array(lang(271).doc_link(array('sql'=>'show-table-status.html',)),"create",lang(36));if(support('indexes'))$c["Index_length"]=array(lang(272).doc_link(array('sql'=>'show-table-status.html',)),"indexes",lang(137));$c["Data_free"]=array(lang(273).doc_link(array('sql'=>'show-table-status.html')),"edit",lang(37));if(function_exists('Adminer\alter_table'))$c["Auto_increment"]=array(lang(43).doc_link(array('sql'=>'example-auto-increment.html','mariadb'=>'auto_increment/')),"auto_increment=1&create",lang(36));$c["Rows"]=array(lang(274).doc_link(array('sql'=>'show-table-status.html',)),"select",lang(33));if(support("comment"))$c["Comment"]=array(lang(42).doc_link(array('sql'=>'show-table-status.html',)));foreach($c -as$w=>$b)echo"$b[0]";echo"
    '.checkbox(($fj?"views[]":"tables[]"),$C,in_array("$C",$ei,true),"","","",$s),''.(support("table")||support("indexes")?"".h($C).'':h($C));if($fj&&!preg_match('~materialized~i',$P['Engine'])){$pi=lang(133);echo''.(support("view")?"$pi":$pi),'?';if(support("comment"))echo''.h($P['Comment']);}else{foreach($c -as$w=>$b){$s=" id='$w-".h($C)."'";$X=idx($P,$w,'?');echo($b[1]?"".(is_numeric($X)?($X<0?'?':($w=="Rows"&&$X&&$P["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")?'~ ':'').format_number($X)):$X)."":"".h($X));}$T++;}echo"\n";}echo"
    ".lang(247,count($di)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),(collations()?"".h(db_collation(DB,collations())):'');foreach(array("Data_length","Index_length","Data_free")as$w)echo($c[$w]?"":"");echo"\n","
    \n",($D?'':script("ajaxSetHtml('".js_escape(ME)."script=db');")),"
    \n";if(!information_schema(DB)){$Zi=" ".on_help("'VACUUM'");$Mf=" ".on_help(JUSH=="sql"?"'OPTIMIZE TABLE'":"'VACUUM ANALYZE'");$Eg=(JUSH=="sqlite"?$Zi." ".on_help("'PRAGMA integrity_check'"):(JUSH=="pgsql"?$Zi.$Mf:(JUSH=="sql"?" ".on_help("'ANALYZE TABLE'").$Mf." ".on_help("'CHECK TABLE'")." ".on_help("'REPAIR TABLE'"):""))).(function_exists('Adminer\truncate_tables')?" ".on_help(JUSH=="sqlite"?"'DELETE'":"'TRUNCATE".(JUSH=="pgsql"?"'":" TABLE'")).confirm():"").(function_exists('Adminer\drop_tables')?"".on_help("'DROP TABLE'").confirm():"");echo($Eg?"\n";}echo"
    \n",script("tableCheck();");}echo(function_exists('Adminer\alter_table')?"

    ".lang(64)."

    \n";$hh=routines();if($hh){echo"\n",'\n";foreach($hh -as$K){$C=($K["SPECIFIC_NAME"]==$K["ROUTINE_NAME"]?"":"&name=".urlencode($K["ROUTINE_NAME"]));echo'','
    '.lang(190).''.lang(41).''.lang(226)."
    '.h($K["ROUTINE_NAME"]).'',''.h($K["ROUTINE_TYPE"]),''.h($K["DTD_IDENTIFIER"]),''.lang(140)."";}echo"
    \n";}echo'

    ".lang(66)."

    \n";$L=get_rows("SHOW EVENTS");if($L){echo"\n","\n";foreach($L -as$K)echo"","
    ".lang(190)."".lang(284)."".lang(215)."".lang(216)."
    ".h($K["Name"]),"".($K["Execute at"]?lang(285)."".$K["Execute at"]:lang(217)." ".$K["Interval value"]." ".$K["Interval field"]."$K[Starts]"),"$K[Ends]",''.lang(140).'';echo"
    \n";$yc=get_val("SELECT @@event_scheduler");if($yc&&$yc!="ON")echo"

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

    ","".lang(69)."","";echo +input_token(),"\n",(!$r&&$M?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$P=isset($_GET["status"]);page_header($P?lang(124):lang(123));$Xj=($P?adminer()->showStatus():adminer()->showVariables());if(!$Xj)echo"

    ".lang(15)."\n";else{echo"\n";foreach($Xj +as$K){echo"";$x=array_shift($K);echo"
    ".h($x)."";foreach($K +as$X)echo"".nl_br(h($X));}echo"
    \n";}}elseif(isset($_GET["script"])){header("Content-Type: application/json; charset=utf-8");if($_GET["script"]=="db"){$Ji=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$D=>$S){json_row("Comment-$D",h($S["Comment"]));if(!is_view($S)||preg_match('~materialized~i',$S["Engine"])){foreach(array("Engine","Collation")as$x)json_row("$x-$D",h($S[$x]));foreach(array_keys($Ji+array("Auto_increment"=>0,"Rows"=>0))as$x){if(array_key_exists($x,$S))json_row("$x-$D",format_status($S,$x));if($S[$x]!=""&&isset($Ji[$x]))$Ji[$x]+=($S["Engine"]!="InnoDB"||$x!="Data_free"?$S[$x]:0);}}}if(function_exists('Adminer\db_status'))$Ji=db_status();foreach($Ji +as$x=>$X)json_row("sum-$x",format_number($X));json_row("");}elseif($_GET["script"]=="kill")connection()->query("KILL ".number($_POST["kill"]));else{foreach(count_tables(adminer()->databases(false))as$i=>$X){json_row("tables-$i",$X);json_row("size-$i",db_size($i));}json_row("");}exit;}else{$Ui=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($Ui&&!$k&&!$_POST["search"]){$I=true;$C="";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"])$I=truncate_tables($_POST["tables"]);$C=lang(269);}elseif($_POST["move"]){$I=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$C=lang(270);}elseif($_POST["copy"]){$I=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$C=lang(271);}elseif($_POST["drop"]){if($_POST["views"])$I=drop_views($_POST["views"]);if($I&&$_POST["tables"])$I=drop_tables($_POST["tables"]);$C=lang(272);}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$R){foreach(get_rows("PRAGMA integrity_check(".q($R).")")as$K)$C +.="".h($R).": ".h($K["integrity_check"])."
    ";}}elseif(JUSH!="sql"){$I=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?" ANALYZE":""),(array)$_POST["tables"]));$C=lang(273);}elseif(!$_POST["tables"])$C=lang(12);elseif($I=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map('Adminer\idf_escape',$_POST["tables"])))){while($K=$I->fetch_assoc())$C +.="".h($K["Table"]).": ".h($K["Msg_text"])."
    ";}queries_redirect($_SERVER["REQUEST_URI"],$C,$I);}page_header(($_GET["ns"]==""?lang(31).": ".h(DB):lang(156).": ".h($_GET["ns"])),$k,true);if(adminer()->homepage()){if($_GET["ns"]!==""){$E=$_GET["order"];$wd=($E||support("fast_status"));echo"

    \n","

    ".lang(274)."

    \n";$Ti=($wd?table_status():tables_list());if(!$Ti)echo"

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

    \n";if(support("table")){echo"
    ".lang(275)."
    ",html_select("op",adminer()->operators(),idx($_POST,"op",JUSH=="elastic"?"should":"LIKE %%"))," "," \n","
    \n";if(!$k&&$_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]=$_POST["op"];search_tables();}}echo"
    \n","\n",'','\n";if($E){uasort($Ti,function($ga,$Da)use($E,$ya){$J=($ga[$E]<$Da[$E]?-1:($ga[$E]>$Da[$E]?1:0));return(in_array($E,$ya)?$J:-$J);});}$T=0;$Ji=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach($Ti +as$D=>$P){$ak=($wd?is_view($P):$P!==null&&!preg_match('~table|sequence~i',$P));$P=($wd?$P:array('Engine'=>$P));$t=h("Table-".$D);echo'
    ',''.lang(138).'';$d=array("Engine"=>array(lang(276).doc_link(array('sql'=>'storage-engines.html'))));if(collations())$d["Collation"]=array(lang(128).doc_link(array('sql'=>'charset-charsets.html','mariadb'=>'supported-character-sets-and-collations/')));if(function_exists('Adminer\alter_table'))$d["Data_length"]=array(lang(277).doc_link(array('sql'=>'show-table-status.html',)),"create",lang(38),);if(support("indexes"))$d["Index_length"]=array(lang(278).doc_link(array('sql'=>'show-table-status.html',)),"indexes",lang(141),);$d["Data_free"]=array(lang(279).doc_link(array('sql'=>'show-table-status.html')),"edit",lang(39));if(function_exists('Adminer\alter_table'))$d["Auto_increment"]=array(lang(45).doc_link(array('sql'=>'example-auto-increment.html','mariadb'=>'auto_increment/')),"auto_increment=1&create",lang(38),);$d["Rows"]=array(lang(280).doc_link(array('sql'=>'show-table-status.html',)),"select",lang(35),);if(support("comment"))$d["Comment"]=array(lang(44).doc_link(array('sql'=>'show-table-status.html',)));$ya=array('Engine','Collation','Comment');foreach($d +as$x=>$c)echo"$c[0]";echo"
    '.checkbox(($ak?"views[]":"tables[]"),$D,in_array("$D",$Ui,true),"","","",$t),''.(support("table")||support("indexes")?"".h($D).'':h($D));if($ak&&!preg_match('~materialized~i',$P['Engine'])){$fj=lang(137);echo''.(support("view")?"$fj":$fj),"?";if(support("comment"))echo''.h($P['Comment']);}else{if($wd){foreach(array_keys($Ji)as$x)$Ji[$x]+=($P["Engine"]!="InnoDB"||$x!="Data_free"?idx($P,$x):0);}foreach($d +as$x=>$c){$t=" id='$x-".h($D)."'";echo($c[1]?"".format_status($P,$x)."":"".h(idx($P,$x,'?')));}$T++;}echo"\n";}echo"
    ".lang(252,count($Ti)),"".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),(collations()?"".h(db_collation(DB,collations())):'');if($wd&&function_exists('Adminer\db_status'))$Ji=db_status();foreach($Ji +as$x=>$Ii)echo($d[$x]?"".($wd?format_number($Ii):""):"");echo"\n","
    \n",($wd?'':script("ajaxSetHtml('".js_escape(ME)."script=db');")),"
    \n";if(!information_schema(DB)){$Uj=" ";$tg=" ";$qh=(JUSH=="sqlite"?$Uj." ":(JUSH=="pgsql"?$Uj.$tg:(JUSH=="sql"?" ".$tg." "." ":""))).(function_exists('Adminer\truncate_tables')?" ":"").(function_exists('Adminer\drop_tables')?"":"");echo($qh?"\n";}echo"
    \n",script("tableCheck();");}echo(function_exists('Adminer\alter_table')?"
    \n";if(support("routine")){echo"
    \n","

    ".lang(66)."

    \n";$Vh=routines();if($Vh){echo"\n",'\n";foreach($Vh +as$K){$D=($K["SPECIFIC_NAME"]==$K["ROUTINE_NAME"]?"":"&name=".url_escape($K["ROUTINE_NAME"]));echo'','
    '.lang(195).''.lang(43).''.lang(232)."
    '.h($K["ROUTINE_NAME"]).'',''.h($K["ROUTINE_TYPE"]),''.h($K["DTD_IDENTIFIER"]),''.lang(144)."";}echo"
    \n";}echo'
    \n";}if(support("event")){echo"
    \n","

    ".lang(68)."

    \n";$L=get_rows("SHOW EVENTS");if($L){echo"\n","\n";foreach($L +as$K)echo"","
    ".lang(195)."".lang(289)."".lang(221)."".lang(222)."
    ".h($K["Name"]),"".($K["Execute at"]?lang(290)."".h($K["Execute at"]):lang(223)." ".h($K["Interval value"])." ".h($K["Interval field"])."".h($K["Starts"])),"".h($K["Ends"]),''.lang(144).'';echo"
    \n";$Kc=get_val("SELECT @@event_scheduler");if($Kc&&$Kc!="ON")echo"

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

    \n";}}}}page_footer(); \ No newline at end of file From d7f7091490bca2b3acfe8e34ccf49b963deef7a4 Mon Sep 17 00:00:00 2001 From: Thomas Skerbis Date: Mon, 10 Aug 2026 18:10:04 +0200 Subject: [PATCH 2/4] 3.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: Adminer-Start im REDAXO-Backend stabilisiert, weil der aktualisierte Vendor-Stand im Vergleich zur älteren Basis eine strengere Session-/Bootstrap-Initialisierung verwendet. Die Integration wird nun über den Wrapper sauber vorbereitet, ohne den Vendor selbst zu patchen, wodurch die Warnung beim Start entfällt. * Fix: Automatischer Login im Backend wiederhergestellt. * UI: Darstellung von `rex_sql_table code` wieder auf den bewährten 3.5.5-Stand zurückgeführt (Kopier-Box und Dark-Mode-Anbindung an den globalen Adminer-Schalter). --- CHANGELOG.md | 12 ++++++++++-- functions/function_adminer.php | 3 +++ package.yml | 2 +- pages/index.php | 19 ++++++++++++------- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3b6b7d..b15c7f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,18 @@ Changelog ========= -Version 3.5.6 +Version 3.6.0 ----------------------- -Vendor-Update 5.5.1 → 6.0.0 +* Fix: Adminer-Start im REDAXO-Backend stabilisiert, weil der aktualisierte Vendor-Stand im Vergleich zur älteren Basis eine strengere Session-/Bootstrap-Initialisierung verwendet. Die Integration wird nun über den Wrapper sauber vorbereitet, ohne den Vendor selbst zu patchen, wodurch die Warnung beim Start entfällt. +* Fix: Automatischer Login im Backend wiederhergestellt. +* UI: Darstellung von `rex_sql_table code` wieder auf den bewährten 3.5.5-Stand zurückgeführt (Kopier-Box und Dark-Mode-Anbindung an den globalen Adminer-Schalter). + +Version 3.5.5 +----------------------- + +Vendor-Update 5.5.1 → 6.0.0 +Release zurückgzogen Version 3.5.4 diff --git a/functions/function_adminer.php b/functions/function_adminer.php index 10da599..cad934f 100644 --- a/functions/function_adminer.php +++ b/functions/function_adminer.php @@ -7,5 +7,8 @@ function adminer_object() { + // adminer throws warning "A non-numeric value encountered" in PHP 7 + error_reporting(error_reporting() & ~E_WARNING & ~E_NOTICE); + return new Adminer(); } diff --git a/package.yml b/package.yml index 2f18629..ad893bb 100755 --- a/package.yml +++ b/package.yml @@ -1,5 +1,5 @@ package: adminer -version: '3.5.6' +version: '3.6.0' vendor: '6.0.0 adminer' author: Friends Of REDAXO supportpage: https://github.com/FriendsOfREDAXO/adminer diff --git a/pages/index.php b/pages/index.php index f5d2448..6625ec1 100644 --- a/pages/index.php +++ b/pages/index.php @@ -32,6 +32,11 @@ $_GET['username'] = ''; $_GET['db'] = $database['name']; +// Adminer expects an entry in the password/session map for embedded usage. +// Without it, the wrapper may fall back to the login form even though the +// REDAXO backend user is already authenticated. +$_SESSION['pwds']['server'][''][$_GET['username']] = ''; + // adminer uses `page` parameter for pagination (int), but redaxo initially sets `page=adminer` // so we remove the page parameter if it is not a numeric string if (isset($_GET['page']) && $_GET['page'] !== (string) (int) $_GET['page']) { @@ -40,13 +45,9 @@ } } -// workaround against https://github.com/vrana/adminer/commit/15900301eeef0cf22e51f57ed0b7d55b3e822feb -$_SESSION['pwds']['server'][''][$_GET["username"]] = ''; - -// Adminer starts and manages its own session (incl. session ini settings). -// Close REDAXO's session first, as recommended by Adminer when embedding it -// into an application that already has an active session, to avoid -// "ini_set(): Session ini settings cannot be changed when a session is active". +// Adminer adjusts session settings during bootstrap. If REDAXO already has an +// active session, this can trigger a warning from the bundled Adminer file. +// Closing the current session before including Adminer avoids the warning. if (PHP_SESSION_ACTIVE === session_status()) { session_write_close(); } @@ -58,6 +59,9 @@ rex::setProperty('debug', $debug); } +$adminerErrorReporting = error_reporting(); +error_reporting($adminerErrorReporting & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED); + // CSP für die Adminer-Seite anpassen, um inline-scripts zu erlauben if (method_exists('rex_response', 'setHeader')) { rex_response::setHeader('Content-Security-Policy', "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"); @@ -71,6 +75,7 @@ }); include __DIR__ .'/../vendor/adminer.php'; +error_reporting($adminerErrorReporting); // make sure the output buffer callback is called while (ob_get_level()) { From 2926bf8de9c117886ba149183282c1f741538890 Mon Sep 17 00:00:00 2001 From: Thomas Skerbis Date: Mon, 10 Aug 2026 18:20:31 +0200 Subject: [PATCH 3/4] Fix Copilot-Review-Hinweise zu Error-Handling und Changelog --- CHANGELOG.md | 4 ++-- functions/function_adminer.php | 16 +++++++++++++--- pages/index.php | 1 - 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b15c7f9..33d6644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,8 @@ Version 3.6.0 Version 3.5.5 ----------------------- -Vendor-Update 5.5.1 → 6.0.0 -Release zurückgzogen +* Vendor-Update 5.5.1 → 6.0.0 +* Release zurückgezogen. Version 3.5.4 diff --git a/functions/function_adminer.php b/functions/function_adminer.php index cad934f..8b7ab65 100644 --- a/functions/function_adminer.php +++ b/functions/function_adminer.php @@ -7,8 +7,18 @@ function adminer_object() { - // adminer throws warning "A non-numeric value encountered" in PHP 7 - error_reporting(error_reporting() & ~E_WARNING & ~E_NOTICE); + $currentErrorReporting = error_reporting(); - return new Adminer(); + // Workaround for legacy PHP 7 warnings during Adminer bootstrap. + if (PHP_VERSION_ID < 80000) { + error_reporting($currentErrorReporting & ~E_WARNING & ~E_NOTICE); + } + + try { + return new Adminer(); + } finally { + if (PHP_VERSION_ID < 80000) { + error_reporting($currentErrorReporting); + } + } } diff --git a/pages/index.php b/pages/index.php index 6625ec1..f452261 100644 --- a/pages/index.php +++ b/pages/index.php @@ -60,7 +60,6 @@ } $adminerErrorReporting = error_reporting(); -error_reporting($adminerErrorReporting & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED); // CSP für die Adminer-Seite anpassen, um inline-scripts zu erlauben if (method_exists('rex_response', 'setHeader')) { From e8ad969e14b4b30c3219a713ad8aa28482430ecc Mon Sep 17 00:00:00 2001 From: Thomas Skerbis Date: Tue, 11 Aug 2026 11:35:36 +0200 Subject: [PATCH 4/4] 3.6.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: Warning `ini_set(): Session ini settings cannot be changed when a session is active` im Backend-Einbettungsmodus behoben, indem die REDAXO-Session unmittelbar vor dem Adminer-Include geschlossen wird. * Fix: CSRF-Verhalten beim Bearbeiten/Speichern im eingebetteten Adminer stabilisiert (Header- und Token-Fallback für Adminer-POSTs). * Fix: Adminer-URLs mit fremden `rex-api-call`/`_csrf_token`-Parametern werden beim Einstieg bereinigt, um falsche CSRF-Fehlpfade zu vermeiden. --- CHANGELOG.md | 7 +++++++ boot.php | 8 ++++++++ package.yml | 2 +- pages/index.php | 31 ++++++++++++++++++++++++++----- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33d6644..eba659a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +Version 3.6.1 +----------------------- + +* Fix: Warning `ini_set(): Session ini settings cannot be changed when a session is active` im Backend-Einbettungsmodus behoben, indem die REDAXO-Session unmittelbar vor dem Adminer-Include geschlossen wird. +* Fix: CSRF-Verhalten beim Bearbeiten/Speichern im eingebetteten Adminer stabilisiert (Header- und Token-Fallback für Adminer-POSTs). +* Fix: Adminer-URLs mit fremden `rex-api-call`/`_csrf_token`-Parametern werden beim Einstieg bereinigt, um falsche CSRF-Fehlpfade zu vermeiden. + Version 3.6.0 ----------------------- diff --git a/boot.php b/boot.php index fe64f97..e2fa2b6 100644 --- a/boot.php +++ b/boot.php @@ -3,6 +3,14 @@ { return; } + +if (rex_request('page', 'string') === 'adminer' && rex_request('rex-api-call', 'string', '') !== '') { + $params = $_GET; + unset($params['rex-api-call'], $params['_csrf_token']); + + rex_response::sendRedirect(rex_url::backendController($params, false)); +} + // Handle adminer calls with missing page parameter if (rex::isBackend() && rex::getUser() && rex::getUser()->isAdmin() && isset($_GET['username']) && isset($_GET['db'])) { $page = rex_be_controller::getCurrentPage(); diff --git a/package.yml b/package.yml index ad893bb..1b7587d 100755 --- a/package.yml +++ b/package.yml @@ -1,5 +1,5 @@ package: adminer -version: '3.6.0' +version: '3.6.1' vendor: '6.0.0 adminer' author: Friends Of REDAXO supportpage: https://github.com/FriendsOfREDAXO/adminer diff --git a/pages/index.php b/pages/index.php index f452261..e3116a0 100644 --- a/pages/index.php +++ b/pages/index.php @@ -45,11 +45,26 @@ } } -// Adminer adjusts session settings during bootstrap. If REDAXO already has an -// active session, this can trigger a warning from the bundled Adminer file. -// Closing the current session before including Adminer avoids the warning. -if (PHP_SESSION_ACTIVE === session_status()) { - session_write_close(); +// Adminer 6 verifies CSRF token submissions against Sec-Fetch-Site. +// In embedded backend contexts this header can be missing or "none" +// even for same-origin form posts, which causes false negatives. +if (rex_request::server('REQUEST_METHOD', 'string', '') === 'POST') { + $secFetchSite = rex_request::server('HTTP_SEC_FETCH_SITE', 'string', ''); + if ($secFetchSite === '' || strtolower($secFetchSite) === 'none') { + $_SERVER['HTTP_SEC_FETCH_SITE'] = 'same-origin'; + } + + $postedToken = rex_request::post('token', 'string', ''); + if ($postedToken !== '' && (!isset($_SESSION['token']) || (int) $_SESSION['token'] === 0)) { + $tokenParts = explode(':', $postedToken, 2); + if ( + count($tokenParts) === 2 + && ctype_digit($tokenParts[0]) + && ctype_digit($tokenParts[1]) + ) { + $_SESSION['token'] = ((int) $tokenParts[0]) ^ ((int) $tokenParts[1]); + } + } } // deactive `throw_always_exception` debug option, because adminer is throwing some notices @@ -68,6 +83,12 @@ rex_response::cleanOutputBuffers(); +// Adminer adjusts session ini settings during bootstrap. +// Ensure the REDAXO session is closed immediately before include. +if (PHP_SESSION_ACTIVE === session_status()) { + session_write_close(); +} + // add page param to all adminer urls ob_start(function ($output) { return preg_replace('#(?<==(?:"|\'))index\.php\?(?=username=&db=|file=[^&]*&version=)#', 'index.php?page=adminer&', $output);