Untitled

From Anonymous, 4 Days ago, written in Plain Text, viewed 1 times.
URL http://minetest.wjake.com/stikked/view/fda58a94 Embed
Download Paste or View Raw
  1. <?php
  2. /** Adminer - Compact database management
  3. * @link https://www.adminer.org/
  4. * @author Jakub Vrana, https://www.vrana.cz/
  5. * @copyright 2007 Jakub Vrana
  6. * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
  7. * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
  8. * @version 5.4.1
  9. */namespace
  10. Adminer;const
  11. VERSION="5.4.1";error_reporting(24575);set_error_handler(function($Cc,$Ec){return!!preg_match('~^Undefined (array key|offset|index)~',$Ec);},E_WARNING|E_NOTICE);$ad=!preg_match('~^(unsafe_raw)?$~',ini_get("filter.default"));if($ad||ini_get("filter.default_flags")){foreach(array('_GET','_POST','_COOKIE','_SERVER')as$X){$tj=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($tj)$$X=$tj;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
  12. connection($g=null){return($g?:Db::$instance);}function
  13. adminer(){return
  14. Adminer::$instance;}function
  15. driver(){return
  16. Driver::$instance;}function
  17. connect(){$Fb=adminer()->credentials();$J=Driver::connect($Fb[0],$Fb[1],$Fb[2]);return(is_object($J)?$J:null);}function
  18. idf_unescape($u){if(!preg_match('~^[`\'"[]~',$u))return$u;$Ie=substr($u,-1);return
  19. str_replace($Ie.$Ie,$Ie,substr($u,1,-1));}function
  20. q($Q){return
  21. connection()->quote($Q);}function
  22. escape_string($X){return
  23. substr(q($X),1,-1);}function
  24. idx($va,$x,$k=null){return($va&&array_key_exists($x,$va)?$va[$x]:$k);}function
  25. number($X){return
  26. preg_replace('~[^0-9]+~','',$X);}function
  27. number_type(){return'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)';}function
  28. remove_slashes(array$ah,$ad=false){if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){while(list($x,$X)=each($ah)){foreach($X
  29. as$Ae=>$W){unset($ah[$x][$Ae]);if(is_array($W)){$ah[$x][stripslashes($Ae)]=$W;$ah[]=&$ah[$x][stripslashes($Ae)];}else$ah[$x][stripslashes($Ae)]=($ad?$W:stripslashes($W));}}}}function
  30. bracket_escape($u,$Ca=false){static$cj=array(':'=>':1',']'=>':2','['=>':3','"'=>':4');return
  31. strtr($u,($Ca?array_flip($cj):$cj));}function
  32. min_version($Lj,$We="",$g=null){$g=connection($g);$Vh=$g->server_info;if($We&&preg_match('~([\d.]+)-MariaDB~',$Vh,$A)){$Vh=$A[1];$Lj=$We;}return$Lj&&version_compare($Vh,$Lj)>=0;}function
  33. charset(Db$f){return(min_version("5.5.3",0,$f)?"utf8mb4":"utf8");}function
  34. ini_bool($ke){$X=ini_get($ke);return(preg_match('~^(on|true|yes)$~i',$X)||(int)$X);}function
  35. ini_bytes($ke){$X=ini_get($ke);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
  36. sid(){static$J;if($J===null)$J=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$J;}function
  37. set_password($Kj,$N,$V,$F){$_SESSION["pwds"][$Kj][$N][$V]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function
  38. 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
  39. get_val($H,$m=0,$tb=null){$tb=connection($tb);$I=$tb->query($H);if(!is_object($I))return
  40. false;$K=$I->fetch_row();return($K?$K[$m]:false);}function
  41. get_vals($H,$d=0){$J=array();$I=connection()->query($H);if(is_object($I)){while($K=$I->fetch_row())$J[]=$K[$d];}return$J;}function
  42. get_key_vals($H,$g=null,$Yh=true){$g=connection($g);$J=array();$I=$g->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
  43. get_rows($H,$g=null,$l="<p class='error'>"){$tb=connection($g);$J=array();$I=$tb->query($H);if(is_object($I)){while($K=$I->fetch_assoc())$J[]=$K;}elseif(!$I&&!$g&&$l&&(defined('Adminer\PAGE_HEADER')||$l=="-- "))echo$l.error()."\n";return$J;}function
  44. unique_array($K,array$w){foreach($w
  45. as$v){if(preg_match("~PRIMARY|UNIQUE~",$v["type"])){$J=array();foreach($v["columns"]as$x){if(!isset($K[$x]))continue
  46. 2;$J[$x]=$K[$x];}return$J;}}}function
  47. escape_key($x){if(preg_match('(^([\w(]+)('.str_replace("_",".*",preg_quote(idf_escape("_"))).')([ \w)]+)$)',$x,$A))return$A[1].idf_escape(idf_unescape($A[2])).$A[3];return
  48. idf_escape($x);}function
  49. where(array$Z,array$n=array()){$J=array();foreach((array)$Z["where"]as$x=>$X){$x=bracket_escape($x,true);$d=escape_key($x);$m=idx($n,$x,array());$Xc=$m["type"];$J[]=$d.(JUSH=="sql"&&$Xc=="json"?" = CAST(".q($X)." AS JSON)":(JUSH=="pgsql"&&preg_match('~^json~',$Xc)?"::jsonb = ".q($X)."::jsonb":(JUSH=="sql"&&is_numeric($X)&&preg_match('~\.~',$X)?" LIKE ".q($X):(JUSH=="mssql"&&strpos($Xc,"datetime")===false?" LIKE ".q(preg_replace('~[_%[]~','[\0]',$X)):" = ".unconvert_field($m,q($X))))));if(JUSH=="sql"&&preg_match('~char|text~',$Xc)&&preg_match("~[^ -@]~",$X))$J[]="$d = ".q($X)." COLLATE ".charset(connection())."_bin";}foreach((array)$Z["null"]as$x)$J[]=escape_key($x)." IS NULL";return
  50. implode(" AND ",$J);}function
  51. where_check($X,array$n=array()){parse_str($X,$Wa);remove_slashes(array(&$Wa));return
  52. where($Wa,$n);}function
  53. where_link($s,$d,$Y,$Xf="="){return"&where%5B$s%5D%5Bcol%5D=".urlencode($d)."&where%5B$s%5D%5Bop%5D=".urlencode(($Y!==null?$Xf:"IS NULL"))."&where%5B$s%5D%5Bval%5D=".urlencode($Y);}function
  54. convert_fields(array$e,array$n,array$M=array()){$J="";foreach($e
  55. as$x=>$X){if($M&&!in_array(idf_escape($x),$M))continue;$wa=convert_field($n[$x]);if($wa)$J
  56. .=", $wa AS ".idf_escape($x);}return$J;}function
  57. cookie($B,$Y,$Pe=2592000){header("Set-Cookie: $B=".urlencode($Y).($Pe?"; expires=".gmdate("D, d M Y H:i:s",time()+$Pe)." GMT":"")."; path=".preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]).(HTTPS?"; secure":"")."; HttpOnly; SameSite=lax",false);}function
  58. get_settings($Bb){parse_str($_COOKIE[$Bb],$Zh);return$Zh;}function
  59. get_setting($x,$Bb="adminer_settings",$k=null){return
  60. idx(get_settings($Bb),$x,$k);}function
  61. save_settings(array$Zh,$Bb="adminer_settings"){$Y=http_build_query($Zh+get_settings($Bb));cookie($Bb,$Y);$_COOKIE[$Bb]=$Y;}function
  62. restart_session(){if(!ini_bool("session.use_cookies")&&(!function_exists('session_status')||session_status()==1))session_start();}function
  63. stop_session($id=false){$Cj=ini_bool("session.use_cookies");if(!$Cj||$id){session_write_close();if($Cj&&@ini_set("session.use_cookies",'0')===false)session_start();}}function&get_session($x){return$_SESSION[$x][DRIVER][SERVER][$_GET["username"]];}function
  64. set_session($x,$X){$_SESSION[$x][DRIVER][SERVER][$_GET["username"]]=$X;}function
  65. auth_url($Kj,$N,$V,$j=null){$zj=remove_from_uri(implode("|",array_keys(SqlDriver::$drivers))."|username|ext|".($j!==null?"db|":"").($Kj=='mssql'||$Kj=='pgsql'?"":"ns|").session_name());preg_match('~([^?]*)\??(.*)~',$zj,$A);return"$A[1]?".(sid()?SID."&":"").($Kj!="server"||$N!=""?urlencode($Kj)."=".urlencode($N)."&":"").($_GET["ext"]?"ext=".urlencode($_GET["ext"])."&":"")."username=".urlencode($V).($j!=""?"&db=".urlencode($j):"").($A[2]?"&$A[2]":"");}function
  66. is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
  67. redirect($Se,$lf=null){if($lf!==null){restart_session();$_SESSION["messages"][preg_replace('~^[^?]*~','',($Se!==null?$Se:$_SERVER["REQUEST_URI"]))][]=$lf;}if($Se!==null){if($Se=="")$Se=".";header("Location: $Se");exit;}}function
  68. query_redirect($H,$Se,$lf,$jh=true,$Jc=true,$Sc=false,$Pi=""){if($Jc){$oi=microtime(true);$Sc=!connection()->query($H);$Pi=format_time($oi);}$ii=($H?adminer()->messageQuery($H,$Pi,$Sc):"");if($Sc){adminer()->error
  69. .=error().$ii.script("messagesPrint();")."<br>";return
  70. false;}if($jh)redirect($Se,$lf.$ii);return
  71. true;}class
  72. Queries{static$queries=array();static$start=0;}function
  73. queries($H){if(!Queries::$start)Queries::$start=microtime(true);Queries::$queries[]=(preg_match('~;$~',$H)?"DELIMITER ;;\n$H;\nDELIMITER ":$H).";";return
  74. connection()->query($H);}function
  75. apply_queries($H,array$T,$Fc='Adminer\table'){foreach($T
  76. as$R){if(!queries("$H ".$Fc($R)))return
  77. false;}return
  78. true;}function
  79. queries_redirect($Se,$lf,$jh){$eh=implode("\n",Queries::$queries);$Pi=format_time(Queries::$start);return
  80. query_redirect($eh,$Se,$lf,$jh,false,!$jh,$Pi);}function
  81. format_time($oi){return
  82. sprintf('%.3f s',max(0,microtime(true)-$oi));}function
  83. relative_uri(){return
  84. str_replace(":","%3a",preg_replace('~^[^?]*/([^?]*)~','\1',$_SERVER["REQUEST_URI"]));}function
  85. remove_from_uri($ug=""){return
  86. substr(preg_replace("~(?<=[?&])($ug".(SID?"":"|".session_name()).")=[^&]*&~",'',relative_uri()."&"),0,-1);}function
  87. get_file($x,$Rb=false,$Xb=""){$Zc=$_FILES[$x];if(!$Zc)return
  88. null;foreach($Zc
  89. as$x=>$X)$Zc[$x]=(array)$X;$J='';foreach($Zc["error"]as$x=>$l){if($l)return$l;$B=$Zc["name"][$x];$Xi=$Zc["tmp_name"][$x];$yb=file_get_contents($Rb&&preg_match('~\.gz$~',$B)?"compress.zlib://$Xi":$Xi);if($Rb){$oi=substr($yb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$oi))$yb=iconv("utf-16","utf-8",$yb);elseif($oi=="\xEF\xBB\xBF")$yb=substr($yb,3);}$J
  90. .=$yb;if($Xb)$J
  91. .=(preg_match("($Xb\\s*\$)",$yb)?"":$Xb)."\n\n";}return$J;}function
  92. upload_error($l){$gf=($l==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($l?'Unable to upload a file.'.($gf?" ".sprintf('Maximum allowed file size is %sB.',$gf):""):'File does not exist.');}function
  93. repeat_pattern($Gg,$y){return
  94. str_repeat("$Gg{0,65535}",$y/65535)."$Gg{0,".($y%65535)."}";}function
  95. is_utf8($X){return(preg_match('~~u',$X)&&!preg_match('~[\0-\x8\xB\xC\xE-\x1F]~',$X));}function
  96. format_number($X){return
  97. strtr(number_format($X,0,".",','),preg_split('~~u','0123456789',-1,PREG_SPLIT_NO_EMPTY));}function
  98. friendly_url($X){return
  99. preg_replace('~\W~i','-',$X);}function
  100. table_status1($R,$Tc=false){$J=table_status($R,$Tc);return($J?reset($J):array("Name"=>$R));}function
  101. column_foreign_keys($R){$J=array();foreach(adminer()->foreignKeys($R)as$p){foreach($p["source"]as$X)$J[$X][]=$p;}return$J;}function
  102. 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){$B=bracket_escape($x,true);$J[$B]=array("field"=>$B,"privileges"=>array("insert"=>1,"update"=>1,"where"=>1,"order"=>1),"null"=>1,"auto_increment"=>($x==driver()->primary),);}return$J;}function
  103. dump_headers($Qd,$wf=false){$J=adminer()->dumpHeaders($Qd,$wf);$qg=$_POST["output"];if($qg!="text")header("Content-Disposition: attachment; filename=".adminer()->dumpFilename($Qd).".$J".($qg!="file"&&preg_match('~^[0-9a-z]+$~',$qg)?".$qg":""));session_write_close();if(!ob_get_level())ob_start(null,4096);ob_flush();flush();return$J;}function
  104. dump_csv(array$K){foreach($K
  105. as$x=>$X){if(preg_match('~["\n,;\t]|^0.|\.\d*0$~',$X)||$X==="")$K[$x]='"'.str_replace('"','""',$X).'"';}echo
  106. implode(($_POST["format"]=="csv"?",":($_POST["format"]=="tsv"?"\t":";")),$K)."\r\n";}function
  107. apply_sql_function($r,$d){return($r?($r=="unixepoch"?"DATETIME($d, '$r')":($r=="count distinct"?"COUNT(DISTINCT ":strtoupper("$r("))."$d)"):$d);}function
  108. get_temp_dir(){$J=ini_get("upload_tmp_dir");if(!$J){if(function_exists('sys_get_temp_dir'))$J=sys_get_temp_dir();else{$o=@tempnam("","");if(!$o)return'';$J=dirname($o);unlink($o);}}return$J;}function
  109. file_open_lock($o){if(is_link($o))return;$q=@fopen($o,"c+");if(!$q)return;@chmod($o,0660);if(!flock($q,LOCK_EX)){fclose($q);return;}return$q;}function
  110. file_write_unlock($q,$Lb){rewind($q);fwrite($q,$Lb);ftruncate($q,strlen($Lb));file_unlock($q);}function
  111. file_unlock($q){flock($q,LOCK_UN);fclose($q);}function
  112. first(array$va){return
  113. reset($va);}function
  114. password_file($h){$o=get_temp_dir()."/adminer.key";if(!$h&&!file_exists($o))return'';$q=file_open_lock($o);if(!$q)return'';$J=stream_get_contents($q);if(!$J){$J=rand_string();file_write_unlock($q,$J);}else
  115. file_unlock($q);return$J;}function
  116. rand_string(){return
  117. md5(uniqid(strval(mt_rand()),true));}function
  118. select_value($X,$_,array$m,$Oi){if(is_array($X)){$J="";foreach($X
  119. as$Ae=>$W)$J
  120. .="<tr>".($X!=array_values($X)?"<th>".h($Ae):"")."<td>".select_value($W,$_,$m,$Oi);return"<table>$J</table>";}if(!$_)$_=adminer()->selectLink($X,$m);if($_===null){if(is_mail($X))$_="mailto:$X";if(is_url($X))$_=$X;}$J=adminer()->editVal($X,$m);if($J!==null){if(!is_utf8($J))$J="\0";elseif($Oi!=""&&is_shortable($m))$J=shorten_utf8($J,max(0,+$Oi));else$J=h($J);}return
  121. adminer()->selectVal($J,$_,$m,$X);}function
  122. is_blob(array$m){return
  123. preg_match('~blob|bytea|raw|file~',$m["type"])&&!in_array($m["type"],idx(driver()->structuredTypes(),'User types',array()));}function
  124. is_mail($tc){$xa='[-a-z0-9!#$%&\'*+/=?^_`{|}~]';$gc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';$Gg="$xa+(\\.$xa+)*@($gc?\\.)+$gc";return
  125. is_string($tc)&&preg_match("(^$Gg(,\\s*$Gg)*\$)i",$tc);}function
  126. is_url($Q){$gc='[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';return
  127. preg_match("~^(https?)://($gc?\\.)+$gc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$Q);}function
  128. is_shortable(array$m){return
  129. preg_match('~char|text|json|lob|geometry|point|linestring|polygon|string|bytea|hstore~',$m["type"]);}function
  130. host_port($N){return(preg_match('~^(\[(.+)]|([^:]+)):([^:]+)$~',$N,$A)?array($A[2].$A[3],$A[4]):array($N,''));}function
  131. count_rows($R,array$Z,$ue,array$wd){$H=" FROM ".table($R).($Z?" WHERE ".implode(" AND ",$Z):"");return($ue&&(JUSH=="sql"||count($wd)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$wd).")$H":"SELECT COUNT(*)".($ue?" FROM (SELECT 1$H GROUP BY ".implode(", ",$wd).") x":$H));}function
  132. slow_query($H){$j=adminer()->database();$Qi=adminer()->queryTimeout();$di=driver()->slowQuery($H,$Qi);$g=null;if(!$di&&support("kill")){$g=connect();if($g&&($j==""||$g->select_db($j))){$De=get_val(connection_id(),0,$g);echo
  133. script("const timeout = setTimeout(() => { ajax('".js_escape(ME)."script=kill', function () {}, 'kill=$De&token=".get_token()."'); }, 1000 * $Qi);");}}ob_flush();flush();$J=@get_key_vals(($di?:$H),$g,false);if($g){echo
  134. script("clearTimeout(timeout);");ob_flush();flush();}return$J;}function
  135. get_token(){$hh=rand(1,1e6);return($hh^$_SESSION["token"]).":$hh";}function
  136. verify_token(){list($Yi,$hh)=explode(":",$_POST["token"]);return($hh^$_SESSION["token"])==$Yi;}function
  137. lzw_decompress($Ia){$cc=256;$Ja=8;$gb=array();$uh=0;$vh=0;for($s=0;$s<strlen($Ia);$s++){$uh=($uh<<8)+ord($Ia[$s]);$vh+=8;if($vh>=$Ja){$vh-=$Ja;$gb[]=$uh>>$vh;$uh&=(1<<$vh)-1;$cc++;if($cc>>$Ja)$Ja++;}}$bc=range("\0","\xFF");$J="";$Uj="";foreach($gb
  138. as$s=>$fb){$sc=$bc[$fb];if(!isset($sc))$sc=$Uj.$Uj[0];$J
  139. .=$sc;if($s)$bc[]=$Uj.$sc[0];$Uj=$sc;}return$J;}function
  140. script($fi,$bj="\n"){return"<script".nonce().">$fi</script>$bj";}function
  141. script_src($_j,$Ub=false){return"<script src='".h($_j)."'".nonce().($Ub?" defer":"")."></script>\n";}function
  142. nonce(){return' nonce="'.get_nonce().'"';}function
  143. input_hidden($B,$Y=""){return"<input type='hidden' name='".h($B)."' value='".h($Y)."'>\n";}function
  144. input_token(){return
  145. input_hidden("token",get_token());}function
  146. target_blank(){return' target="_blank" rel="noreferrer noopener"';}function
  147. h($Q){return
  148. str_replace("\0","&#0;",htmlspecialchars($Q,ENT_QUOTES,'utf-8'));}function
  149. nl_br($Q){return
  150. str_replace("\n","<br>",$Q);}function
  151. checkbox($B,$Y,$Za,$Fe="",$Wf="",$db="",$He=""){$J="<input type='checkbox' name='$B' value='".h($Y)."'".($Za?" checked":"").($He?" aria-labelledby='$He'":"").">".($Wf?script("qsl('input').onclick = function () { $Wf };",""):"");return($Fe!=""||$db?"<label".($db?" class='$db'":"").">$J".h($Fe)."</label>":$J);}function
  152. optionlist($bg,$Nh=null,$Dj=false){$J="";foreach($bg
  153. as$Ae=>$W){$cg=array($Ae=>$W);if(is_array($W)){$J
  154. .='<optgroup label="'.h($Ae).'">';$cg=$W;}foreach($cg
  155. as$x=>$X)$J
  156. .='<option'.($Dj||is_string($x)?' value="'.h($x).'"':'').($Nh!==null&&($Dj||is_string($x)?(string)$x:$X)===$Nh?' selected':'').'>'.h($X);if(is_array($W))$J
  157. .='</optgroup>';}return$J;}function
  158. html_select($B,array$bg,$Y="",$Vf="",$He=""){static$Fe=0;$Ge="";if(!$He&&substr($bg[""],0,1)=="("){$Fe++;$He="label-$Fe";$Ge="<option value='' id='$He'>".h($bg[""]);unset($bg[""]);}return"<select name='".h($B)."'".($He?" aria-labelledby='$He'":"").">".$Ge.optionlist($bg,$Y)."</select>".($Vf?script("qsl('select').onchange = function () { $Vf };",""):"");}function
  159. html_radios($B,array$bg,$Y="",$Rh=""){$J="";foreach($bg
  160. as$x=>$X)$J
  161. .="<label><input type='radio' name='".h($B)."' value='".h($x)."'".($x==$Y?" checked":"").">".h($X)."</label>$Rh";return$J;}function
  162. confirm($lf="",$Oh="qsl('input')"){return
  163. script("$Oh.onclick = () => confirm('".($lf?js_escape($lf):'Are you sure?')."');","");}function
  164. print_fieldset($t,$Ne,$Oj=false){echo"<fieldset><legend>","<a href='#fieldset-$t'>$Ne</a>",script("qsl('a').onclick = partial(toggle, 'fieldset-$t');",""),"</legend>","<div id='fieldset-$t'".($Oj?"":" class='hidden'").">\n";}function
  165. bold($La,$db=""){return($La?" class='active $db'":($db?" class='$db'":""));}function
  166. js_escape($Q){return
  167. addcslashes($Q,"\r\n'\\/");}function
  168. pagination($D,$Ib){return" ".($D==$Ib?$D+1:'<a href="'.h(remove_from_uri("page").($D?"&page=$D".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).'">'.($D+1)."</a>");}function
  169. hidden_fields(array$ah,array$Ud=array(),$Sg=''){$J=false;foreach($ah
  170. as$x=>$X){if(!in_array($x,$Ud)){if(is_array($X))hidden_fields($X,array(),$x);else{$J=true;echo
  171. input_hidden(($Sg?$Sg."[$x]":$x),$X);}}}return$J;}function
  172. hidden_fields_get(){echo(sid()?input_hidden(session_name(),session_id()):''),(SERVER!==null?input_hidden(DRIVER,SERVER):""),input_hidden("username",$_GET["username"]);}function
  173. file_input($me){$bf="max_file_uploads";$cf=ini_get($bf);$xj="upload_max_filesize";$yj=ini_get($xj);return(ini_bool("file_uploads")?$me.script("qsl('input[type=\"file\"]').onchange = partialArg(fileChange, "."$cf, '".sprintf('Increase %s.',"$bf = $cf")."', ".ini_bytes("upload_max_filesize").", '".sprintf('Increase %s.',"$xj = $yj")."')"):'File uploads are disabled.');}function
  174. enum_input($U,$ya,array$m,$Y,$wc=""){preg_match_all("~'((?:[^']|'')*)'~",$m["length"],$Ze);$Sg=($m["type"]=="enum"?"val-":"");$Za=(is_array($Y)?in_array("null",$Y):$Y===null);$J=($m["null"]&&$Sg?"<label><input type='$U'$ya value='null'".($Za?" checked":"")."><i>$wc</i></label>":"");foreach($Ze[1]as$X){$X=stripcslashes(str_replace("''","'",$X));$Za=(is_array($Y)?in_array($Sg.$X,$Y):$Y===$X);$J
  175. .=" <label><input type='$U'$ya value='".h($Sg.$X)."'".($Za?' checked':'').'>'.h(adminer()->editVal($X,$m)).'</label>';}return$J;}function
  176. input(array$m,$Y,$r,$Ba=false){$B=h(bracket_escape($m["field"]));echo"<td class='function'>";if(is_array($Y)&&!$r){$Y=json_encode($Y,128|64|256);$r="json";}$th=(JUSH=="mssql"&&$m["auto_increment"]);if($th&&!$_POST["save"])$r=null;$rd=(isset($_GET["select"])||$th?array("orig"=>'original'):array())+adminer()->editFunctions($m);$Bc=driver()->enumLength($m);if($Bc){$m["type"]="enum";$m["length"]=$Bc;}$dc=stripos($m["default"],"GENERATED ALWAYS AS ")===0?" disabled=''":"";$ya=" name='fields[$B]".($m["type"]=="enum"||$m["type"]=="set"?"[]":"")."'$dc".($Ba?" autofocus":"");echo
  177. driver()->unconvertFunction($m)." ";$R=$_GET["edit"]?:$_GET["select"];if($m["type"]=="enum")echo
  178. h($rd[""])."<td>".adminer()->editInput($R,$m,$ya,$Y);else{$Dd=(in_array($r,$rd)||isset($rd[$r]));echo(count($rd)>1?"<select name='function[$B]'$dc>".optionlist($rd,$r===null||$Dd?$r:"")."</select>".on_help("event.target.value.replace(/^SQL\$/, '')",1).script("qsl('select').onchange = functionChange;",""):h(reset($rd))).'<td>';$me=adminer()->editInput($R,$m,$ya,$Y);if($me!="")echo$me;elseif(preg_match('~bool~',$m["type"]))echo"<input type='hidden'$ya value='0'>"."<input type='checkbox'".(preg_match('~^(1|t|true|y|yes|on)$~i',$Y)?" checked='checked'":"")."$ya value='1'>";elseif($m["type"]=="set")echo
  179. enum_input("checkbox",$ya,$m,(is_string($Y)?explode(",",$Y):$Y));elseif(is_blob($m)&&ini_bool("file_uploads"))echo"<input type='file' name='fields-$B'>";elseif($r=="json"||preg_match('~^jsonb?$~',$m["type"]))echo"<textarea$ya cols='50' rows='12' class='jush-js'>".h($Y).'</textarea>';elseif(($Mi=preg_match('~text|lob|memo~i',$m["type"]))||preg_match("~\n~",$Y)){if($Mi&&JUSH!="sqlite")$ya
  180. .=" cols='50' rows='12'";else{$L=min(12,substr_count($Y,"\n")+1);$ya
  181. .=" cols='30' rows='$L'";}echo"<textarea$ya>".h($Y).'</textarea>';}else{$nj=driver()->types();$if=(!preg_match('~int~',$m["type"])&&preg_match('~^(\d+)(,(\d+))?$~',$m["length"],$A)?((preg_match("~binary~",$m["type"])?2:1)*$A[1]+($A[3]?1:0)+($A[2]&&!$m["unsigned"]?1:0)):($nj[$m["type"]]?$nj[$m["type"]]+($m["unsigned"]?0:1):0));if(JUSH=='sql'&&min_version(5.6)&&preg_match('~time~',$m["type"]))$if+=7;echo"<input".((!$Dd||$r==="")&&preg_match('~(?<!o)int(?!er)~',$m["type"])&&!preg_match('~\[\]~',$m["full_type"])?" type='number'":"")." value='".h($Y)."'".($if?" data-maxlength='$if'":"").(preg_match('~char|binary~',$m["type"])&&$if>20?" size='".($if>99?60:40)."'":"")."$ya>";}echo
  182. adminer()->editHint($R,$m,$Y);$bd=0;foreach($rd
  183. as$x=>$X){if($x===""||!$X)break;$bd++;}if($bd&&count($rd)>1)echo
  184. script("qsl('td').oninput = partial(skipOriginal, $bd);");}}function
  185. process_input(array$m){if(stripos($m["default"],"GENERATED ALWAYS AS ")===0)return;$u=bracket_escape($m["field"]);$r=idx($_POST["function"],$u);$Y=idx($_POST["fields"],$u);if($m["type"]=="enum"||driver()->enumLength($m)){$Y=$Y[0];if($Y=="orig")return
  186. false;if($Y=="null")return"NULL";$Y=substr($Y,4);}if($m["auto_increment"]&&$Y=="")return
  187. null;if($r=="orig")return(preg_match('~^CURRENT_TIMESTAMP~i',$m["on_update"])?idf_escape($m["field"]):false);if($r=="NULL")return"NULL";if($m["type"]=="set")$Y=implode(",",(array)$Y);if($r=="json"){$r="";$Y=json_decode($Y,true);if(!is_array($Y))return
  188. false;return$Y;}if(is_blob($m)&&ini_bool("file_uploads")){$Zc=get_file("fields-$u");if(!is_string($Zc))return
  189. false;return
  190. driver()->quoteBinary($Zc);}return
  191. adminer()->processInput($m,$Y,$r);}function
  192. search_tables(){$_GET["where"][0]["val"]=$_POST["query"];$Qh="<ul>\n";foreach(table_status('',true)as$R=>$S){$B=adminer()->tableName($S);if(isset($S["Engine"])&&$B!=""&&(!$_POST["tables"]||in_array($R,$_POST["tables"]))){$I=connection()->query("SELECT".limit("1 FROM ".table($R)," WHERE ".implode(" AND ",adminer()->selectSearchProcess(fields($R),array())),1));if(!$I||$I->fetch_row()){$Wg="<a href='".h(ME."select=".urlencode($R)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."'>$B</a>";echo"$Qh<li>".($I?$Wg:"<p class='error'>$Wg: ".error())."\n";$Qh="";}}}echo($Qh?"<p class='message'>".'No tables.':"</ul>")."\n";}function
  193. on_help($mb,$bi=0){return
  194. script("mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $mb, $bi) }, onmouseout: helpMouseout});","");}function
  195. edit_form($R,array$n,$K,$wj,$l=''){$_i=adminer()->tableName(table_status1($R,true));page_header(($wj?'Edit':'Insert'),$l,array("select"=>array($R,$_i)),$_i);adminer()->editRowPrint($R,$n,$K,$wj);if($K===false){echo"<p class='error'>".'No rows.'."\n";return;}echo"<form action='' method='post' enctype='multipart/form-data' id='form'>\n";if(!$n)echo"<p class='error'>".'You have no privileges to update this table.'."\n";else{echo"<table class='layout'>".script("qsl('table').onkeydown = editingKeydown;");$Ba=!$_POST;foreach($n
  196. as$B=>$m){echo"<tr><th>".adminer()->fieldName($m);$k=idx($_GET["set"],bracket_escape($B));if($k===null){$k=$m["default"];if($m["type"]=="bit"&&preg_match("~^b'([01]*)'\$~",$k,$qh))$k=$qh[1];if(JUSH=="sql"&&preg_match('~binary~',$m["type"]))$k=bin2hex($k);}$Y=($K!==null?($K[$B]!=""&&JUSH=="sql"&&preg_match("~enum|set~",$m["type"])&&is_array($K[$B])?implode(",",$K[$B]):(is_bool($K[$B])?+$K[$B]:$K[$B])):(!$wj&&$m["auto_increment"]?"":(isset($_GET["select"])?false:$k)));if(!$_POST["save"]&&is_string($Y))$Y=adminer()->editVal($Y,$m);$r=($_POST["save"]?idx($_POST["function"],$B,""):($wj&&preg_match('~^CURRENT_TIMESTAMP~i',$m["on_update"])?"now":($Y===false?null:($Y!==null?'':'NULL'))));if(!$_POST&&!$wj&&$Y==$m["default"]&&preg_match('~^[\w.]+\(~',$Y))$r="SQL";if(preg_match("~time~",$m["type"])&&preg_match('~^CURRENT_TIMESTAMP~i',$Y)){$Y="";$r="now";}if($m["type"]=="uuid"&&$Y=="uuid()"){$Y="";$r="uuid";}if($Ba!==false)$Ba=($m["auto_increment"]||$r=="now"||$r=="uuid"?null:true);input($m,$Y,$r,$Ba);if($Ba)$Ba=false;echo"\n";}if(!support("table")&&!fields($R))echo"<tr>"."<th><input name='field_keys[]'>".script("qsl('input').oninput = fieldChange;")."<td class='function'>".html_select("field_funs[]",adminer()->editFunctions(array("null"=>isset($_GET["select"]))))."<td><input name='field_vals[]'>"."\n";echo"</table>\n";}echo"<p>\n";if($n){echo"<input type='submit' value='".'Save'."'>\n";if(!isset($_GET["select"]))echo"<input type='submit' name='insert' value='".($wj?'Save and continue edit':'Save and insert next')."' title='Ctrl+Shift+Enter'>\n",($wj?script("qsl('input').onclick = function () { return !ajaxForm(this.form, '".'Saving'."…', this); };"):"");}echo($wj?"<input type='submit' name='delete' value='".'Delete'."'>".confirm()."\n":"");if(isset($_GET["select"]))hidden_fields(array("check"=>(array)$_POST["check"],"clone"=>$_POST["clone"],"all"=>$_POST["all"]));echo
  197. input_hidden("referer",(isset($_POST["referer"])?$_POST["referer"]:$_SERVER["HTTP_REFERER"])),input_hidden("save",1),input_token(),"</form>\n";}function
  198. shorten_utf8($Q,$y=80,$ui=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$y).")($)?)u",$Q,$A))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$y).")($)?)",$Q,$A);return
  199. h($A[1]).$ui.(isset($A[2])?"":"<i>…</i>");}function
  200. icon($Pd,$B,$Od,$Si){return"<button type='submit' name='$B' title='".h($Si)."' class='icon icon-$Pd'><span>$Od</span></button>";}if(isset($_GET["file"])){if(substr(VERSION,-4)!='-dev'){if($_SERVER["HTTP_IF_MODIFIED_SINCE"]){header("HTTP/1.1 304 Not Modified");exit;}header("Expires: ".gmdate("D, d M Y H:i:s",time()+365*24*60*60)." GMT");header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");header("Cache-Control: immutable");}@ini_set("zlib.output_compression",'1');if($_GET["file"]=="default.css"){header("Content-Type: text/css; charset=utf-8");echo
  201. lzw_decompress("h:M‡±h´ÄgÌбÜÍŒ\"PÑiÒm„™cQCa¤é     2óéˆÞd<žÌfóa¼ä:;NBˆqœR;1Lf³9ÈÞu7&)¤l;3ÍÑñÈÀJ/‹†CQXÊr2MÆaäi0›„ƒ)°ìe:LuÝhæ-9ÕÍ23lÈÎi7†³màZw4™†Ñš<-•ÒÌ´¹!†U,—ŒFé”vt2ž‘S,¬äa´Ò‡FêVXúa˜Nqã)“-—ÖÎÇœhê:n5Žû9ÈY¨;jµ”-Þ÷_‘9krùœÙ“;.ÐtTqËo¦0‹³­Öò®{íóyùý\rçHnìGS™ Zh²œ;¼i^ÀuxøWÎ’C@Äö¤©k€Ò=¡Ðb©Ëâì¼/AØà0¤+Â(ÚÁ°lÂÉÂ\\ê Ãxè:\rèÀb8\0æ–0!\0FÆ\nB”ÍŽã(Ò3 \r\\ºÛêÈ„a¼„œ'Iâ|ê(iš\n‹\r©¸ú4Oüg@4ÁC’º@@†!ÄQB°Ý     °¸c¤Ê¯Äq,\r1EhèÈ&2PZ‡¦ðiGûH9G’\"vž§ê’¢££¤œ4r”ÆñÍDÐR¤\n†pJë-A“|/.¯cê“Du·£¤ö:,˜Ê=°¢RÅ]U5¥mVÁkÍLLQ@-\\ª¦ËŒ@9Áã%ÚSrÁÎñMPDãÂIa\rƒ(YY\\ã@XõpÃê:£p÷lŽLC —Åñè¸ƒÍÊO,\rÆ2]7œ?m06ä»pÜTÑÍaÒ¥Cœ;_Ë—ÑyÈ´d‘>¨²bnð…«n¼Ü£3÷X¾€ö8\rí[Ë€-)Ûi>V[Yãy&L3¯#ÌX|Õ †X \\ù`ËC§ç˜å#ÑÙHÉÌ2Ê2.# ö‹Zƒ`Â<¾ãs®·¹ªÃ’£º\0uœhÖ¾—¥M²Í_\niZeO/CÓ’_†`3Ýòð1>‹=Ðk3£…‰R/;ä/dÛÜ\0ú‹ŒãÞÚµmùúò¾¤7/«ÖAÎXƒÂÿ„°“Ãq.½sáL£ý— :\$ÉF¢—¸ª¾£‚w‰8óß¾~«HÔj…­\"¨¼œ•¹Ô³7gSõä±âFLéίçQò_¤’O'WØö]c=ý5¾1X~7;˜™iþ´\rí*\n’¨JS1Z¦™øž£ØÆßÍc傐tœüAÔVí86fÐdÃy;Y]©õzIÀp¡Ñû§ðc‰3®YË]}˜@¡\$.+”1¶'>ZÃcpdàéÒGLæá„#kô8PzœYÒAuÏvÝ]s9‰ÑØ_AqÎÁ„:†ÆÅ\nK€hB¼;­ÖŠXbAHq,âCIÉ`†‚çj¹S[ËŒ¶1ÆVÓrŠñÔ;¶pÞBÃÛ)#鐉;4ÌHñÒ/*Õ<Â3L Á;lfª\n¶s\$K`Ð}ÆôÕ”£Ž¾7ƒjx`d–%j] ¸4œ—Y¤–HbY ØJ`¤GG ’.ÅÜK‚òfÊI©)2ЁMfÖ¸ÝX‰RC‰¸Ì±V,©ÛÑ~g\0è‚àg6Ý:õ[jí1H½:AlIq©u3\"™êæq¤æ|8<9s'ãQ]JÊ|Ð\0Â`p ³îƒ«‰jf„OÆbÐÉú¬¨q¬¢\$驲Ã1J¹>RœH(Ç”q\n#rА’à@že(yóVJµ0¡QÒˆ£òˆ6†Pæ[C:·G伞‘ Ý4©‘Ò^žÓðÃPZе\\´‘è(\nÖ)š~¦´°9R%×Sj·{‰7ä0Þ_šÇs       z|8ÅHê        \"@Ü#9DVLÅ\$H5ÔWJ@—…z®a¿J Ä^  ‘)®2\nQvÀÔ]ëdžÄÁ˜‰j (A¸Ó°BB05´6†b˰][ŒèkªA•wvkgôÆ´öºÕ+k[jm„zc¶}èMyDZií\$5e˜«Ê·°º  ”A˜ CY%.W€b*뮼‚.­Ùóq/%}BÌXˆ­çZV337‡Ê»a™„€ºòÞwW[áLŽQÊÞ²ü_ȏ2`Ç1IÑi,÷曣’Mf&(s-˜ä˜ëÂAİØ*””DwØÄTNÀÉ»ÅjX\$éxª+;ÐðËFÚ93µJk™S;·§ÁqR{>lž;B1AÈIâb) (6±­r÷\rÝ\rÚ‡’Ú‚ìZ‘R^SOy/“ÞM#ÆÏ9{k„àê¸v\"úKCâJƒ¨rEo\0øÌ\\,Ñ|faÍš†³hI“©/oÌ4Äk^pî1HÈ^“ÍphÇ¡VÁvox@ø`ígŸ&(ùˆ­ü;›ƒ~ǍzÌ6×8¯*°ÆÜ5®Ü‰±E ÁÂp†éâîÓ˜˜¤´3“öņgŸ™rDÑLó)4g{»ˆä½å³©—LŽš&ú>è„»¢ØÚZì7¡\0ú°ÌŠ@×ÐÓÛœffÅRVh֝²çIŠÛˆ½âðrÓw)‹ ‚„=x^˜,k’Ÿ2ôÒÝ“jàbël0uëž\"¬fp¨¸1ñRI¿ƒz[]¤wpN6dIªzëõån.7X{;ÁÈ3ØË-I       ‹âûü7pjÝ¢RŽ#ª,ù_-ÐüÂ[ó>3À\\æêÛWqÞq”JÖ˜uh£‡ÐFbLÁKÔåçyVľ©¦ÃÞÑ•®µªüVœîÃf{K}S Êޝ…‰Mþ‡·Í€¼¦.M¶\\ªix¸bÁ¡1‡+£Î±?<Å3ê~HýÓ\$÷\\Ð2Û\$î eØ6tÔÖã\$s¼¼©xÄþx•ó§CánSkVÄÉ=z6½‰¡Ê'æäNaŸ¢Ö¸hŒÜü¸º±ý¯R¤å™£8gމ¢äÊw:_³î­íÿêÒ’IRKݨ.½nkVU+dwj™§%³`#,{é†³ËðʃY‡ý×õ(oÕ¾Éð.¨c‚0gâDXOk†7®èKäÎlÒÍhx;ÏØ ݃Lû´\$09*–9 ÜhNrüMÕ.>\0ØrP9ï\$Èg        \0\$\\Fó*²d'ÎõLå:‹bú—ð42Àô¢ð9Àð@ÂHnbì-¤óE #ÄœÉàêrPY‚ê¨ tÍ Ø\nð5.©àÊâî\$op l€X\n@`\r€Ž   àˆ\r€Ð Î ¦ ’ ‚      ÊàêðÚ Î @Ú@Ú\n ƒ † \0j@ƒQ@™1\rÀ‚@“ ¢      \$p      V\0ò``\n\0¨\n Ð\n@¨' ìÀ¤\n\0`\rÀÚ ¬        à’\rठ´\0Ðr°æÀò    \0„`‚       àî { ,ž\"¨È^PŸ0¥\n¬4±\n0·¤ˆ.0ÃpËðÓ\rpÛ\rðãpëðópûñqñQ0ß%€ÑÑ1Q8\n Ô\0ôkÊȼ\0^—àÒ\0`àÚ@´àÈ>\nÑo1w±,Y      h*=Š¡P¦:Ñ–Vƒïи.q£ÅÍ\rÕ\r‘péÐñ1ÁÑQ   ÑÑ1× ƒ`Ññ/17±ëñò\r ^Àä\"y`Ž\nÀŽ Œ# ˜\0ê      p\n€ò\n€š`Œ ˆr ”Q†ð¦bç1Ò3\n°¯#°µ#ð¼1¥\$q«\$ѱ%0å%q½%Ðù&Ç&qÍ ƒ&ñ'1Ú\rR}16   ï@b\r`µ`Ü\rÀˆ     €ÞÀÌ€d઀¨  j\n¯``À†\n€œ`dcсP–€,ò1Rן\$¿rIÒO ‚ Q       òY32b1É&‘Ï01ÓÑÙ ’Ó fÀÏ\0ª\0¤ Îf€\0j\n f`â   ®\n`´@˜\$n=`†\0ÈÒv nIÐ\$ÿP(Âd'Ëðô„Äà·gÉ6‘™-Šƒ-ÒC7Rçà‡ —        4à ô-1Ë&±Ñ2t\rô\"\n      H*@Ž   ˆ`\n ¤ è     àòlÕ2¿,z\rì~È è\r—Fìth‰Šö€Ø ëmõäÄì´z”~¡\0]GÌF\\¥×I€\\¥£}ItC\nÁT„}ªØ×IEJ\rx×ÉûÂ>ÙMp‹„IHô~êäfht„ë¯.b…—xYEìiK´ªoj\nðíÅLÀÞtr×.À~d»H‡2U4©Gà\\Aê‚ç4þ„uPtÞÃս谐 òàÍL/¿P×       \"G!RîÎMtŸO-̵<#õAPuI‡ëRè\$“c’¹ÃD‹ÆŠ €§¢-‚ÃGâ´O`Pv§^W@tH;Q°µRÄ™Õ\$´©gKèF<\rR*\$4ž®' ó¨ÐÈÊ[í°ÛIªóŽ­UmÑÆh:+þ¼5@/­l¾I¾ªí2¦‚Ž^\0ODøšª¬Ø\rR'Â\rèTЭ[êÖ÷ÄĪ®«MCëMÃZ4æE B\"æ`ö‚´euNí,䙬é]Ïðtú\rª`Ü@hžö*\r¶.Vƒ–%Ú!MBlPF™Ï\"Øï&Õ/@îv\\CÞï©:mMgnò®öÊi8˜I2\rpívjí©Æ÷ï+Z mT©ueõÕfv>f´Ð˜Ö`DU[ZTÏVÐCàµTð\r–¹Uv‹kõ^צøLëÙb/¾K¶Sev2÷ubvÇOVDðÖImÕ\$ò%ÖX?udç!W•|,\rø+îµcnUe×ZÆÄÊ–€þöë-~X¯ºûîÀêÔöBGd¶\$i¶çMv!t#Lì3o·UI—O—u?ZweRÏ ëcwª. `È¡iøñ\rb§%©b€â¦H®\"\"\"hí _\$b@ázªä\0f\"ŒérW¨®*ŠæB|\$\$¬BÖ× \"@r¯‚(\r`Ê îC÷¸Ç(0&†.`ÒNk9B\n&#(Äêâ„@䂯ګd—ü^÷º®Šü £@²`ÒI-{ƒ0£â\n–B{‚4sG{§ø;z®©b÷{ Ñ{bƒ×¯„){BàÁxKÂÀŇ5=cÚª‰«yåî&ìJ£PrÅI/‡ƒÜ \0ÚâV\r¥×‰í‰È=¸£‰‚N\\ئ=ÃK‰è}XVíx¹Š—µŠØ¥ŠË‹x²©døÕŠÛŒ*H'¦Î´¸»{XÆ=ØÊ=\0ï8¼\0¾¹…å[É«†J†ÚtÙùOØe…¹ŽØÉ‹èÞ\røýŒ ÊDXý§Å‡Äý}×z°“¾ ù)y'Ù'ÃяÙIÌ(ù[l(5™`f\\Á`¿”ùe—.lY(¹=z—×”!Y%h€¾O¹+‹ù•—`Ù™\"e“ æçÄ—˜º–Kòù¥þ¿¯£˜¸ÿ– ßšÙ#S™¹EIœYû›.HÖJtG·—œ`¾ŒH¼J5»Í5˜™~ ¸€6C‹¥hø˜§ùXDz\n–x¡‚yshššFK¡c¡zj¢Z€Y8(¹þ%Ù|yŸI«£ß‘؃›Úée¡úY¡X»¡™u¢Ú ´Úiœ]¦Úc¡ÚM¥ú;ŸÈ§‘ùò>Ç¡ƒšQ T©øüú¨ [~Wé~ÙžcÝ‚z›©úµz¥º½¢ú\r¬:  \0èrYû¢x)‚Ê!ªúÉ¡¹K¦ú+§z!£šÓ€C+˜š°´Ù®âï:ÝŽ§ª™¤ú©¢Zgšû~z4f¥¯       ¥:÷£’sºÓª—ê+õxÊš%Œ»ž›=³™G–ÛIf3?˜úãŽø¿µ+Y´úq¶@àûGœúá™y¶»oµÙÑ´Ûp\rª~Á{Wœš¶[…·¹é®yè:\0Æ\\»‹·;e¹Û¡¶YI\"·¸zd˜k©Zö|[uš‚uÏ+˜×¹9q¼¹nR Ë®¥B—˜»Ø×z|\rŠá¤„ýk¤^»€î“ª[1ªÛ%‹.“pA­2<›Û=¼Ø¡•è\$é;Ö5œ)³›m¸œ!‹»ÑXXýº‹YÃx¨5vT\\®QÀ%:À¢>ÀàÉ›Û;¸›e’|/·•yÁŧÅW§x× |g®œŠ™ÓÄCÝÆ\\‰›ü‡¼<¼9z\\®#ð.FV;8¡èNÍX7ø×ÊÎ\"8&d5¬P…4Gj?Ê\0Ü?\"=˜­ùHER");}elseif($_GET["file"]=="dark.css"){header("Content-Type: text/css; charset=utf-8");echo
  202. lzw_decompress("h:M‡±h´ÄgƐÈh0ÁLЁàd91¢S!¤Û      Fƒ!°æ\"-6N‘€ÄbdGgÓ°Â:;Nr£)öc7›\rç(HØb81˜†s9¼¤Ük\rçc)Êm8O•VA¡Âc1”c34Of*’ª- P¨‚1©”r41Ùî6˜Ìd2ŒÖ•®Ûo½ÜÌ#3—‰–BÇf#       ŒÖg9Î¦êØŒfc\rÇI™ÐÂb6E‡C&¬Ð,ŽbuÄêm7aŽVã•ÂÁs²#m!ôèhµårùœÞv\\3\rL:SA”Âdk5ÝnÇ·×ìšýÊaF†¸3é˜Òe6fS¦ëy¾óør!ÇLú -ÎK,Ì3Lâ@º“J¶ƒË²¢*J äìµ£¤‚»    ¸ð—¹Ášb©cèà9­ˆê9¹¤æ@ÏÔè¿ÃHÜ8£ \\·Ãê6>«`ðÅŽ¸Þ;‡Aˆà<T™'¨p&q´qEˆê4Å\rl­…ÃhÂ<5#pÏÈR Ñ#I„Ý%„êfBIØÞܲ”¨>…Ê«29<«åCîj2¯î»¦¶7j¬“8jÒìc(nÔÄç?(a\0Å@”5*3:δæ6Œ£˜æ0Œã-àAÀlL›•PÆ4@Êɰê\$¡H¥4 n31¶æ1Ítò0®áÍ™9ŒƒéWO!¨r¼ÚÔØÜÛÕèHȆ£Ã9ŒQ°Â96èF±¬«<ø7°\rœ-xC\n Üã®@Òø…ÜÔƒ:\$iÜØ¶m«ªË4íKid¬²{\n6\r–…xhË‹â#^'4Vø@aÍÇ<´#h0¦Sæ-…c¸Ö9‰+pŠ«Šaž2Ôcy†h®BO\$Áç9öw‡iX›É”ùVY9*r÷Htm       @bÖÑ|@ü/€l’\$z¦­ +Ô%p2l‹˜É.õØúÕÛìÄ7ï;Ç&{ÀËm„€X¨C<l9ðí6x9ïmìò¤ƒ¯À­7RüÀ0\\ê4Î÷PÈ)AÈoÀŽx„ÄÚqÍO#¸¥Èf[;»ª6~PÛ\rŒa¸ÊTGT0„èìu¸ÞŸ¾³Þ\n3ð\\ \\ÊŽƒJ©udªCGÀ§©PZ÷>“³Áûd8ÖÒ¨èéñ½ïåôC?V…·dLðÅL.(tiƒ’­>«,ôƒÖœÃR+9i‡‡ÞžC\$äØ#\"ÎAC€hV’b\nÐÊ6ðT2ƒewá\nf¡À6m      !1'cÁä;–Ø*eLRn\rì¾G\$ô2S\$áØ0†Àêa„'«l6†&ø~Ad\$ëJ†\$sœ ¦ÈƒB4òÉéjª.ÁRCÌ”ƒQ•jƒ\"7\nãXs!²6=ÎBÈ€}");}elseif($_GET["file"]=="functions.js"){header("Content-Type: text/javascript; charset=utf-8");echo
  203. lzw_decompress("':œÌ¢™Ðäi1ã³1ÔÝ    4›ÍÀ£‰ÌQ6a&ó°Ç:OAIìäe:NFáD|Ý!‘Ÿ†CyŒêm2ËÅ\"ã‰ÔÊr<”̱˜ÙÊ/C#‚‘Ùö:DbqSe‰JŽË¦Cܺ\n\n¡œÇ±S\rZ“H\$RAÜžS+XKvtdÜg:£í6Ÿ‰EvXÅž³j‘ÉmÒ©ej×2šM§©äúB«Ç&Ê®‹L§C°3„åQ0ÕLÆé-xè\nÓìD‘ÈÂyNaäPn:盼äèsœÍƒ( cLÅÜ/õ£(Æ5{ÞôQy4œøg-–‚ý¢êi4ÚƒfÐÎ(ÕëbUýŽÏk·îo7Ü&ãºÃ¤ô*ACb’¾¢Ø`.‡­ŠÛ\rÎÐÜü»ÏÄú¼Í\n ©ChÒ<\r)`èØ¥`æ7¥CÊ’ŒÈâZùµãXÊ<QÅ1X÷¼‰@·0dp9EQüf¾°ÓFØ\r‰ä!ƒæ‹(hô£)‰Ã\np'#ÄŒ¤£HÌ(i*†r¸æ&<#¢æ7KÈÈ~Œ# ȇA:N6ã°Ê‹©lÕ,§\r”ôJPÎ3£!@Ò2>Cr¾¡¬h°N„á]¦(a0M3Í2”×6…ÔUæ„ãE2'!<·Â#3R<ðۏãXÒæÔCHÎ7ƒ#nä+±€a\$!èÜ2ŽàPˆ0¤.°wd¡r:Yö¨éE²æ…!]„<¹šjâ¥ó@ß\\×pl§_\rÁZ¸€Ò“¬TÍ©ZÉsò3\"²~9À©³jã‰PØ)Q“YbÝ•DëYc¿`ˆzácžµÑ¨ÌÛ'ë#t“BOh¢*2ÿ…<Å’Oêfg-Z£œˆÕ# è8aÐ^Žú+r2b‰ø\\Žá~0©áþ“¥ùàW©¸ÁÞnœÙp!#•`åëZö¸6¶12×Ã@é²kyÈÆ9\rìäB3çƒpÞ…î6°è<£!pïG¯9àn‘o›6s¿ð#FØ3íÙàbA¨Ê6ñ9¦ýÀZ£#ÂÞ6ûÊ%?‡s¨È\"ÏÉ|Ø‚§)þbœJc\r»ŽŒ½NÞsÉÛih8χ¹æÝŸè:Š;èúHåÞŒõu‹I5û@è1îªAèPaH^\$H×vãÖ@ÛL~—¨ùb9Ž'§ø¿±S?PÐ-¯˜ò˜0Cð\nRòmÌ4‡ÞÓÈ“:ÀõÜÔ¸ï2òÌ4œµh(k\njIŠÈ6\"˜EYˆ#¹W’rª\r‘G8£@tÐខXÔ“âÌBS\nc0Ék‚C I\rʰ<u`A!ó)ÐÔ2”ÖC¢\0=‡¾ æáäPˆ1‘Ó¢K!¹!†åŸpÄIsÑ,6âdÃéÉi1+°ÈâÔk‰€ê<•¸^  á\nŽÉ20´FÔ‰_\$ë)f\0 ¤C8E^¬Ä/3W!א)Œu™*äÔè&\$ê”2Y\n©]’„EkñDV¨\$ïJ²’‡xTse!RY» R™ƒ`=Lò¸ãàÞ«\nl_.!²V!Â\r\nHÐk²\$א`{1     |± °i<jRrPTG|Ž‚w©4b´\r‰¡Ç4d¤,§E¡È6©äÏ<Ãh[N†q@Oi×>'Ñ©\rŠ¥ó—;¦]#“æ}Ð0»ASIšJdÑA/QÁ´â¸µÂ@t\r¥UG‚Ä_Gž<éÍ<y-IÉzò„¤Ð\" PÂàB\0ýíÀÈÁœq`‘ïvAƒˆaÌ¡Jå RäÊ®)Œ…JB.¦TÜñL¡îy¢÷ Cpp\0(7†cYY•a¨M€é1•em4Óc¢¸r£«S)oñÍà‚pæC!I†¼¾Sœb0mìñŽ(d“EHœøš¸ß³„X‹ª£/¬•™P©èøyÆXŽé85ÈÒ\$+—Ö–»²gdè€öÎÎyÝÜϝ³J×Øë ¢lE“¢urÌ,dCX}e¬ìÅ¥õ«mƒ]ˆÐ2 Ì½È(-z¦‚Zåú;Iöî¼\\Š) ,\n¤>ò)·ž¤æ\rVS\njx*w`â´·SFiÌÓd¯¼,»áÐZÂJFM}Њ À†\\Z¾PìÝ`¹zØZûE]íd¤”ÉŸOëcmԁ]À ¬Á™•‚ƒ%þ\"w4Œ¥\n\$øÉzV¢SQDÛ:Ý6«äG‹wMÔîS0B‰-sÆê)ã¾Zí¤c|Ë^RšïEè8kMïÑÌsŒd¹ka™)h%\"Pà0nn÷†/Áš#;žÖg\rdȸ8†ÞF<3\$©,åP);<4`΢<2\n”Êõé@w-®áÍ—AÏ0¹ºª“¹LrîYhìXCàa˜>ºæt‹ºLõì2‚yto;2‡ÝQª±tîÊfrmè:§”Aíù‰¡÷ANºÝ\\\"kº5oVëɃ=îÀt…7r1ÝpäAv\\+ž9ª„â€{°ç^(iœ‰f¬=·rŠÒºŠuÚÊûtØ]yÓÞ…ÐùCö¶ºÁ³ÒõÝÜgi¥vfÝù+¥Ã˜|Êì;œ€¸Âà]~ÓÊ|\re÷¥ì¿“šÝ‚Ú'ƒíû²‰”¦ä¯²°      ½\0+W‡coµw6wd Su¼j¨3@–Œò0!ã÷\n .w€m[8x<²ËcM¬\n9ý²ý'aùÞˆ1>È£’[¶ïµúdïÞux¯à<\"YŽc¸ÞB!i¹¥ê•wÀ}’ô5U¹kººÜØ]­¶¸ÔÒÀ{óIךR…‰–¥=f W~æ]É(bea®'ubïm‘>ƒ)\$°†P÷á-šƒ6þR*IGu#Æ•UKµAXŒtÑ(Ó`_Âà\" ¾£p¸ &UËËÙIíÉ]ýÁYG6P]Ar!b¡ *ЙJŠo•µÓ¯åÿ™óïÁòvý½*À Ø!éš~_ªÀÙ4B³_~RB˜iKùŒ’þ`ç‰&JÛ\0­ô®N\0Ð\$à̏þåCÂK œSÐòâjZ¤Ð Ìû0pvMJ bN`Lÿæ­eº/`RO.0Pä82`ê        åüƸd ˜GxÇbPž-(@ɸÓ@æ4¨H%<&–ÀÌZà™Àèp„¬°Š%\0®p€ÐЄøêã      …¯   àÈ/\"ö¢J³¢\ns†–_ÀÌ\rŒàgŽ`‹œ!käpX     èÐ:Ävíç6p\$ú'ðÇ¥RUeZÿ¨d\$ì\nLáBºâ†ó.ÞdŒn€î¤Òtm€>v…jä•í€)‘  Mº\r\0Â.àÊŠH’Ñ\"…5‚*!eºZJº‰è’ëãf(dc±¼(xÜÑjg\0\\õ€ÂõÀ¶ Z@ºàê|`^›r)<‹(’ˆ„ˆ†È)ÌëªóÊÐì@YkÂmÌíl3Qyс@É‘ŒÑfÎìPn„缨ÐT ò¯N·mRÕq³íâVmvúN֍‚|úШZ²„ȆÚ(Ypø‰\"„4Ǩæàò&€î%lÒP`Ä€£Xx bbdÐr0Fr5°<»Cæ²z¨¯6ähe!¤ˆ\rdzàØK;Ät³²\nÙÍ …HÆ‹Qš\$QŸEnn¢n\rÀš©#šT\$°²Ëˆ(ÈŸÑ©|c¤,¼-ú#èÚ\r Üá‰Jµ{dÑE\n\$²ÆBrœiTÔò‘+Å2PED•Be‹}&%Rf²¥\nüƒ^ôˆCàÈZàZ RV“ÅA,Ñ;‘«ç<ÂÄì\0O1éÔêc^\r%‚\r ìë`Òn\0y1èÔ.Âð\r´Ä‚K1æM3H®\r\"û0\0NkXPr¸¯{3 ì}   \nSÈd†ˆÚ—Šx.ZñRTñ„’wS;53 .¢s4sO3FºÙ2S~YFpZs¡'Î@Ù‘OqR4\n­6q6@DhÙ6ÍÕ7vE¢l\"Å^;-å(Â&Ïb*²*‹ò.! ä\r’!#çx'G\"€Í†w‰Á\"úÕ È2!\"R(vÀXŒæ|\"DÌvÀ¦)@á,¸zmòAÍwT@ÀÔ  Ð\n‚ÖÓðºÐ«hдIDÔP\$m>æ\r&`‡>´4ÈÒA#*ë#’<”w\$T{\$´4@›ˆdÓ´Rem6¯-#Dd¾%E¥DT\\ \$)@Ü´WC¬(t®\"MàÜ#@úTFŸ\r,g¦\rP8Ã~‘´Ö£Jü°c öŒàĹƂê ÊŽ\"™LªZÔä\r+P4ý=¥¤™Sâ™TõA)Ž0\"¦CDhÇM\nž%FÔpÖÓü|ŽfLNlFtDmH¯ªþ°5å=HÍ\n›ŽÄ¼4ü³õ\$à¾Kñ6\rbZà¨\r\"pEQ%¤wJ´ÿV0Ô’M%ål\"hPFïA¬áA㌮ò/G’6 h6]5¥\$€f‹S÷CLiRT?R¨žþC–ñõ£HU§Z¤æYbFþ/æ.êZÜ\"\"^Îy´6R”G ²‹ÌnâúÜŒ\$ªÑå\\&OÖ(v^ ÏKUºÑ®ÎÒam³(\r€Šïº¯¾ü\$_ªæ%ñ+KTtØö.Ù–36\nëcµ”:´@6 újPÃAQõF’/S®k\"<4A„gAÐaU…\$'ëˆÓáfàûQO\"×k~²S;ÅÀ½ó.ïË: ˆk‘¼9­ü²Šóe]`nú¼Ò-7¨˜;îß+VËâ8WÀ©2H¢U‹®YlBívÞö⯎ÖÔ†´°¶ö       §ýâîp®ÖÉl¾m\0ñ4Bò)¥XÁ\0ÊÂQßqFSq—4–ÿnFx+pÔò¦EÆSovúGW7o×w×KRW×\r4`|cqîe7,×19·u Ïu÷cqä’\"LC tÀhâ)§\r€àJÀ\\øW@à      ç|D#S\rŸ%Œ5læ!%+“+å^‡k^Ê™`/ž7¸‰(z*ñ˜‹€ð“´E€Ý{¦S(Wà×-“XÄ—0V£‘0Ë¥—îÈ=îÍa  ~ëfBëË•2Q­êÂru mCÂìë„£tŽr(\0Q!K;xNýWÀúÿ§øÈ?b< @Å`ÖX,º‡`0eºÆ‚N'²Â‘…šœ¤&~‘øt”Óu‡\"| ¬i… ñBå  7¾Rø” ¸›lSu†°8Aû‰dF%(Ôú äúïžó?3@A-oQŠÅº@|~©K†ÀÊ^@xóbšœ~œD¦@س‰˜¸›…TNÅZ€C   WˆÒÂix<\0P|Äæ\n\0ž\n`¨¥ Ž¹\"&?st|ïˆwî%…ˆàèmdêuÀN£^8À[t©9ƒªB\$àð§Ž©ð¦'\">UŒ~ÿ98‡ é“òÔFÄf °¹€u€È°ž/)9‡À™ˆ\0á˜ëAùz\"FWAx¤\$'©jG´(\"Ù ±s%T’HŠîßÀe, Mœ7ï‹b¼ Ç…Øa„ Ë“”ƃ·&wYÔφ3˜°Øø /’\rÏ–ù¯ŸžÙ{›\"ùÝœp{%4b„óŒ`팤Ôõ~n€åE3  •Π›°9Žå3XÖd›ŽäՏZžÅ9ï'š™@‡¨‡‘l»f¯õØQbP¤*G…oŠåÅ`8•¨‘¯žùA›æB|Àz @¦     àb¡Zn_Íhº'Ñ¢F\$f¬§`öóº†HdDdŒH%4\rsÎAjLRÈ'ÞùfÚ9g IÏØ,R\\·ø”Ê>\n†šH[´\"°À\rӁ…ŒÂ•LÌ,%ëFLl8gzLç<0ko\$Çk­á`ÒÃKPÔvå@dÏ'V:V”ØMü%±èÕ@ø6Ç<\ràùT«‹®LE´‰NÔ€S#ö.¶[„x4¾açÌ­´LL‚® ª\n@’£\0Û«tÙ²å\n^F­—º¥ºŠ5`Í R“7ÈlL uµ(™d’º¡¹ Ô\räBf/uCf×4ÿcÒž Bïì€_´nLÔ\0© \$»îaYƦ¶¸€~ÀUkïv¥eôË¥¦Ë²\0™Z’aZ—“šœXØ£¦ž|CŠq“¨/<}س¡–Åú²”º¶ Zºž*­w\nOã‡Åz`¼5“®18¶cø™€û®¯­®æÚIÀQ2YsÇK‹˜€æ\n£\\›ž\"›­ ð‡c†ò*õB¶€îÌ.éR1<3+õŵ*ØSé[õ4Ómì­›:Rh‹‘ITdevÎIµHäèÒ-Zw\\Æ%nè56Œ\nÌWÓi\$Õōow¬˜+© ºùËrɶ&Jq+û}ÒDàø¼Ój«dÅÎ?æU%BBeÇ/M‚¶Nm=Ï„óU·Âb\$HRfªwb|•²x dû2æNiSàóØgÉ@îq@œß>ÎSv „§—•ƒ|ïkrŒx½Œ\0{ÔRƒ=FÿÏÎÎâ®Ï#r½‚8  ðˆZàvÈ8*ʳ£{2SÝ+;S¦œ‚Ó¨Æ+yL\$\"_Ûë©Bç8¬Ý\"E¸%ºàºŒ\nø‘ÐÂp¾p''«p‚ówUÒª\"8бI\\ @… Ê¾ ‡LnðŽæ Rß#MäDµþqžLNÆî\n\\’ÌŽ\$`~@`\0uç‰~^@àÕlˆ-{5ñ,@bruÁo[Á²¾¨Õ}é/ñy.×é {é6q‚°R™pàÐ\$¸+1Ž3ÛúÚú+ƒ¨O!D)…® à\nu”<¯,«áñß=‚JdÆ+}µd#©0ÉžcӐ3U3»EY¹û¢\rû¦tj5Ò¥7»e©˜wׄǡúµ¢^‚qß‚¿9Æ<\$}kíÍòŒRI-ø°¸+'_Ne?SÛRíhd*X˜4é®üc}¬è\"@Šˆvi>;5>Dn‰ ˜\räë)bNéuP@YäG<ñ¨6iõ#PB2A½-í0d0+ð…ügKûø¿í?¨néãüdœdøOÀ‚Œ¯åácüi<‹ú‘‹0\0œ\\ù—ëÑgùæê¡––…NTi'  ·ô;iômjáÜˆÅ÷»¸uÎJ+ªV~À²ù 'ol`ù³¿ó\",ü†Ì£×ÓFÀå–      ýâ{C©¸¤þT aÏNEÛƒQÆp´ p€+?ø\nÆ>„'l½¤* tÉKάp°(YC\n-qÌ”0å\"*É•Á,#üâ÷7º\"%¨+qĸêB±°=åi.@x7:Å%GcYIЈ0*™îÐkÀÛˆ„\\‡·¯ðQ_{¤ ÅÇ#Áý\rç{H³[p¨ >7ÓchënÎÂÔ.œµ£¦S|&JòMǾ8´Àm€OhþÄí        ÕÑqJ&a€Ý¢¨'‰.bçOpØì\$ö–­Ü€D@°C‚HB–    ƒÈ&âÝ¡|\$Ô¬-6°²+Ì+ÂŒ †•Âàœpº…ଡAC\r’É“…ì/Î0´ñÂî¢M†ÃiZŠnEœÍ¢j*>™û!Ò¢u%¤©gØ0£à€@ä¿5}r…É+3œ%”-m‹¢G‚<”ã¥T;0°¯¨’†DV£dÀgÛ9'lM¶ýHˆ£ F@äP˜‹unütFB%´MÄt'äGÔ2ÅÀ@2¢<«e™”;¢`ˆõ=LXÄ2àÏäX»}oc.LŠ+âxÓŽ†&D¨a’€¡€É«ÁF2\ngLEƒ°.\\xSLýx­;lwÑD=0_QV,a 5Š+Léó+Û|\$Åi­jZ\nê—DÖEÎ,B¾t\\Ï'H0ÁŒ±R~(\\\"¢Ö:”Ðn*ûšÕ(¡×o®1wãÕQí×röÒÃEteÓF•…\$èSÑ’]Ð\rLäyF„‰‘\\BŒiÀh”hdáÿ&ᚇh;fo›¾B-y`ÅÔð0ˆ„JŽlPéxao·\$ŠXq¼,(Ö¡†C*        Îë:¤/‚”öé®HG\"‚ðc€ˆC¢¡Q¸\nFÁÔ„Ò#ð¶…8í¢F:У\0œ€Ok¾âDüÆ])›ÏštT8Lá𒨔æn©`Õα|ªHJ³ˆ€Ö œ˜ \"Ò6ø{‹­ƒÁ?=I<HGc ŤFÒ@†,C ¼@jì‰\$LŸ·â(‰nEÊ‘P¢æjb¿nãΑ«¶äWá \rÀLqé‰èÏÐsPH€ê‰z\\V\$kÄҏtr5‹,¤lšÈØè<ñ'\0^S02¸0f -5\"ac¼\"3U“p£æ“\"ܘ©%•®\0'Zt\"96‘Ì9_ @Z{™0Iˆç¬DÀZE@ôÎNÃh`¡\"½` \0µ„ˆàÐɹ(GÃHâÄCh¥ ™I¼òf`@ZD¹\$)âKá;ZÚø\0ä/éC‘T>r_R@Oå`1r†TÒ¨Ib\0ç*¹8… ÄÇËh\$é_’pùRÄ•\$®¥Ni^ʪP/O)¸Â.ŹT6Ü\\’Ù”@T€¾ÑrÄ…`)øöÀT=ân\0Œ€2–œe«+€9Ê¢\\®—@¥äú‚>ÉPH1  äŠy#Êô¥rú<°a¸eÜK„Û/cM@_.\09ˈ““¨…ÔЁ¬B®ÔÁÙ0i†Žaó\n’ðdea´%|S2ô¿€å#€“¸nˆ»D\$/¹+EÎd‘•øÖ_2PšË\$s,ok¡#ü<‰       ²AÂÄ‘r{B”Ù†A-Q4Ò¤Ù\nª\ryù!Æb䱎«ñáOÚö@ɬÁŽk¤¼ ê±\"§rà*¤Ý‡Œ’YÒ€/ðÈ‘ a0ñÙ%•.gE~ºù&© 89”áÃ#@M_ À”ý7K䃸J`òX)²B\$¯(    :Ÿg‰–n*ù|†M6PZ†ªHtêJtq‰Cx†[Ú¼—äá…l=\n•®ÅU3Êf\\Ì”JîP    ,™:É}TA»SYH(\n¢¸ØI¶Ù²Ä!t(2U\"Ë\\çX­^sÌ Æ“a!®\nPrˆ`ÉX3fnb¥•©àèJ÷¬Ü&¸zåzQSf £üät¡!T?à9%€(QƒžBø}6B°kP\0ó>õg”&~fhUðœr§,¢ p5HiˆÆpƒ„…¢qÉšügöVçVüÏOg“WEJ8â0GìÔak°Õ@N NMÄä°UÐUxȪ­ßS¦x        Áà    ðK‚@c 1yê±VlÏ ¦ÂC’“‚ð2Q^rP6|ýI^Mª,¦j%dÝ`Ü«àüF§Ï\\#%³|ÄC–¿­¡7ì‹¢ÔGÚTN–„Šãùi«H™–ÎQ­O¦ÏÁCÌyB’Ñ\$±%T°‹*á>z\rMM KpÓ J7OÛ·é4å%ò•\$¤pŽà’é4”°€”ŠÍ‚£¯EÒª\"Tõ\0O€\0’Õ@>        r›O¨]š¡¢xÒ}^¥IÚÖ@Ê Åºqnç…Ý0©Bb¡Èµ‚IÉ(¤M/ý;é¦Ê}RN\n¡C£<b­PÔµu?Â=Pe¹C’™•…L^'ìSÔÎ?}4)ŒÓS-ÕÃð1\r5S«OEóSFœÓ˜©AOR+ÓÞ™+v§å5Â&C)ِ®›KSDBß³N|E\rcÚUôYʾÀê£Väøˆ?H˜)実+sFäákºLPW-ø,üU:’&™ãt{‘®Vo¤·ŠJ”l'¨ðWÈe74Xn GFª'‚®Þ`æÉCcö±%Ilñju6£ßÈÂvÂU³ðZë‹\0*œš¨NÔŸ#ö¤(¼ˆ¨n¥-;|•4«]XÇîÁy'œ °;ÝZÅ‘ñ) s9ÈÀ˜%€R+\$À°        ¿‘QÞà(\"¡_kX˜„‘°¦˜\nM#€¦\"!p~:è*úÀ™°\$µ3O‰¸ÄÆŠª6½+•ƒà\nBž{1ðà|H·K<[`3ð#å®F@èÍǐ! |©ØŠ\0àð—>‹Œ®˜ˆ[nrMMý+…á®mO_Ž2¹ÑȆÅ\0«e^      Ì7Z¸&êµBÅJ褓h7QO%rfÆp žÎâÖž¥mØ¨â¾Ã‡Â4Eàl«úü+•àäV®£iñN SZàWté2WÅ[;ªÀv\"%Å\$^Ö-(I\$ÊÈS@R-&³Tãz¬šk(²– ä%R8ìuY\0[9-¢ÈÎ(õ)E¹è‰8¡=^¹†¡ÁG˜5#Á¼€¾)1V¦Éb\r]”Ne;&ÌY›`r¬êI§ØPݱÜËÁÖ²ª \0Å@Pç7°·â0Hª¨Ã؍R­x¾\0000C|än=¨Š`ÐáTT¿Ø\rEhONÈ´Á' Ò&Ütc©K ‡Ü•U5œþÖßÂÎÃõP3\\î‡à2\"\0yó5¢V]¼©6>ÐU!¡@ËhuÌÚ(¼\"E%07B…½6ž¼dáHN±¢–‘µìij';@‚ÕeËMzlSfjKY–֍ó­®-uhó‰H–œ¯smL@éÐ\"r×jʺéj'l7       ò•(u‘u‹ÑEåÂ•·e¥a†@ñ„+K‰:Ó•Â%n«z Vñ·ˆÑ;ä[î_Vz_­•Eàãâ8†<…Sb›¨™‹ÜÍÖ6gÀ¼:cƒÍþÀ7\nµ¨­ì%Q› K¡7óÜ®BÛë‘Úñw¨u¹5©ì0»”ÖšãʹyÃncnK™‰úæ¦T8åÊ™÷s±ºW=+—=K\n_[p¢G¿Ä·C5¢ÁÖÃ'ÛD\"„ÝM<\":|Mq4¹¹Îf•sÁx    qlͰ›‚QPÓ²aOY×E=ûõî6nTë–’–BtœhÄC\0pÿ×@n£ÎD(aÜP°\"„Šï‹'ZN…äÛ¬¢®\rüLNXŠg±Š<!w•¶¸›Ú[û…B)´§)~½×ãcÂx”àvši¦ÿqÉø•¶˜a¤@KÕð7s§EQdý˜ïkô÷Ä?\"Ú3ž-\"UƝ|•½ýíÂï|21D>ß³â]­&ŠŠŠ\\hèTƳ5š\0`Tz¢ás -¼N£¹ÉÙ\"†f¸NåLU¹]n(D©(˜ê&%\"e\\¬—OãÉNæInÛ¿¤”\0ÒÐ€ìÆ•±Ø÷@Á€ÑïVä|RˆMYCÛTßÁûÿbÔUHðp)À€ÈSÕsÀ qÓi±–`Z5vt坉¸*áOO\nñ(…£ÝÖëFà¦Ø58Ã!ax@€{^P¾Õ½¸?«°Àeh}\\³j^2ò„L½,6Á.ØN       K…%±•ß–u”„ipÈÈ!?²lŠ‘† -5íw½†K\"VÈØ\\ÃIs¢Ï2!ßð\$4º5v\n’àèògrÃòNÖå}÷£;žÝý­Âú‡‚æW%D(pWaë\0¡v'à±6ú®Vê«ÔÆ¿0WÀñ„E4ÒEUlÂ8ÇLDî„¶EÂ<kOŠñHÉßDUÚ `vS·¬L“Ã!DTMbnWV™ÁCd‡Š)Ze蟀¸ö:¾2Çd8š¦KåÞ„þ4®-Güb;wQWæ30\rüf\0Ê,µ`Qhl±ÖÙ0ËPõà0h@\\Ôr·8×ÇT–ðŒâ›œÂ1ð`¤&ÿŒÌw–Xï>ÈF?‘—|P‘*ñM¤qZѯŒ¬}†Ë0k`‰œ#ÀÕ«cò’'[Çֱˍ|sÉIJ˜îž\rÞã¬û¿<OaƼ@ÔW‘¬u°TÆÆ:ÑóE^ª²ƒ¾„²!kŠÐÿ„Îa\$È>5ò–u_äâKcCQ¿r-ÑŠä'\rÈiC쎜Ÿ§Ù@8ÎS„PSÁ_XglÒ%£  Án1r.<…w_aɺijèGhÒ4\næW×Z“ïaBn,\\\0¬±DU\nbbZ'ŠÒá72ºÍrÛ¢®–}¿Y>/Àw\\YÐ`^7J«jŒS‡¢•¯ð¨S.À’o%æJg\0GD,¼Æé>7 ¹’R¹0ṯƛø3¼ß6ø%i\0Sª^Lœ·AÔØ\riòäO<º™Àa phv[¯{œ¥‡\0éE«^xóÜ¼g–YzWÎyGža»ç‹:(”>C½€žöÖe\0ãÖÚ])ô3yts_a€7ç+áæ†BúœC˜eT·Þf‚oÅP€Û¤Õ2E·C¾ÚvÇ>Ùwöl–zÛ*pêY²ýö±q°™öØšQâp\nv[|qõÒ¨E[ÑXi€ó¢ì®=²z(  ÈMÛn]7F\r§©Cs4|-} ’˜Ä¿(NU£?,À¥Ú…ý°†â؍ºq   ¸âp†q~ü¬ÿ ¦ê©F–Â% 88·×靦‡¢\$×Þ°—[¼±µrÄo!3ãý(†°†—g†Æô×¥pJ!éÁ´qÚZ°v?Ñøc­ýÑL£7£Ð6èü\$‡mö’Öq§í8l!Ãù5­Cš;Q,ÔdÞsFõ-O˜§fÈø\$äð„6Í%U¨C¸´f\"‚çe(jº\rMtÇFœƒèëR÷x;n¦B\$÷¹SSôx'¢õGöþ陊MÓ     ˜Ë4ͬ'kš¿~±×#9e´³Yº¢Ö~¢ìë­ˆ;fÞ+Îj¼K„9p¨ÉÔM†'XŒ/rt²\0Õ\\ÍJ%Q¨Ýè·R‡\rвO3¤|‹å¯šù×Âϱ³4˜ÝxF–×ðµs5EÈԐ;Ô’WR’ÒJX›Ê¶—Jì\$þÁwzOöÏ&ǵÁÄzkS×\nœ\nNUPŒâ°.ö»0À”…bdk‚ŸPåÌÚ G6Ö+BÜz‡1ÎŽhQ>sHv³ÃÂÄQÙ EØp‰ÝMä€)›Ø\nŠ\\ŒÑžÜPzÄèí.sÛÍ gÅá)a~ÖÆÈ¥Ý!(!Gìhr[²*ª„£ªîÕ¢…`”˜~Í\"!âO’¿‰5¹G3Åž*qkgB—,\$öãÛ**1€c.»n      8¨¥\$d ´±VSne‹MiZ¶íÅ7žg¶Aù5܈½‚Ú\nú`¶,‰2ºÇa¦Ò¯ÿömMkÊ»´ßɯð²/-Ý6µ@?#`ˆØ)ãÔ€Šha©Â†ñІá)VcÆ]Ò_= Rz\\ïVR§µ=¾Ø·³(-ãotõ\$Ü¥È\n÷¢‰dSm³yµÚfÓ©ÙN\rùm(t;DÍÁÿp¸2¤Ý¶²ÃZRl)Ð9MÌ›À,/“YixªÑkя)’.¤2@S^úöuÚådŠ6¤!ˁ>VB’à x<•¸Kt06ƒ‰ò@ÈŒ\nG‚AáP°(ûªNbD•ÐK\n•\"µäcN¬´\ră.põ€¤'2L•‡d…ꟲµÑß\\Ly§A=       õÄDŠƒm3Ÿ%Ä@Œ™±Ùˆ¡¥Á8åqbSP\"âÞ¢™Æ®/ÏDzëC&»OûÇ\0007f€ÂD^1ÅXº/ãƒ,\n„÷vçWx%f)ŒÎ' àDdQ@™„I(Ò‹7Y¾Â|ÉݺAÿQ±¸D«—Ú e 8ׇ7k)_ ñ@\"\"½¼%à}¸      ¡(Ìë11؍§\rõ¡Êãeò†á?-ɵH&ëÍäõé\rLÛêâ€'»eÛ®0ÔT×]ÍÔC!ÀemNzì      UzöñÀɈ‰¢S“Üœaf¶7˜Mê^CŠD£õÂ(_ïìÜãâ#\"ídr5¦9±Ùõ81‰Öhf¨È­áa_—×tZX\0èU¼­†{2nn]¾ ;FRû²!Š}>séƒHiÎy#³´…?\"Ť¥çžíÀ>{°®Î/?7îF®òY¯°úª?Aj’Á.†Uœ!5`‡HÀæŽ\$r\0î'\n¾\":.ŒûdԂٙƪíqÙRÕ­ohõÝ>êŸÌ{ç×1‚Ý+ä>èËÉ·t†Íkð%-Dì=9Ê}ÄC@ã8cm’Hr°ï ÁWÀnÊ \0ÄŽ<(ÂRR«8¾ú´YVàÅ`ëppÜ.Uƒe_`®…°¹^¦õìµ›n^ç_ÅR|ßrÎ…p‰7/!M5±ìÅ|…×À\nû&¢Fù±VVz‚‡O­AÖ~ш|Æ›¶Ð4NÈ’¿¬Õ”ò¸ð”g¿yh-¿\nN\"r\"³ôÕGcôsª‘©€D' XoÙ§¥ø‘O„{¥{Y{¯ÆEø=TŠeìZ‘¸ºú•î{\";•HÛÑXz¤t±ðwê*-ºÕÞõU¨çè§wú-þ¤\"›¦<A^¿OºÍT ¶]ƒD?:—þùåû©å…íæ<‘‚p„qõ[¿‰È,)©&`Û{xKIÂI`º`ŽÎcþ°0ƒ±ùªDÇy8ö‡ÉqC–­YëCFõ˜çJÍÙnkã[¹8÷É¢ñ:\n^Ûց«ÄTØ!X*Mú<”5`\0¯É6Aò2oÐP.µé£aøAH¨¶#x[·—†€â–žïË 'o@¿æO0^äŽê¨óh|ÞPŽ=+Í)ºd[©ÇÈøX-ŽôWÂ!Ÿ…ÓèÆ”/:\"‰0k#XÇž<ôâ°ôhƒCG‰Ý @Fƒ(éŒk†ö‘¹l¢&H½F0OSz…ÅwæQ—ý3ÝÅÙz|+Žˆ\r9b½TÅ}'ܬwA´\r°nFù‹©”Ñ!Èg0Šlp›lÑ1û+ø|¤h‘kz—Ôi&÷ªuëD±{KÖî\\¾ ¢\$t(¶;èÒäÃ¬þªHýr|Bw§D3[Mâ!:(Ý{ŒZ®å(|-ÓHy0ê^“'×½…}ï*£üÒöNKŽ…¯«‘Š5KU›²ájMå\"…Âwá–]%üû–{1qÙÈz †Ÿ)]ÑÅ®[k˜\0O4ßýÒìû“UFÀ\0ócⓜmZEGt‘sDQZã)n;7<’qhlXx§IÆÂ^ÌVîå&†Í·ÑC–`,É‘%£¡1\"@1Ç|Í)—R¥kßþVÏê}S,Ä#!ÉÍGµôá]ý¤ExåÝýYTüý<%ÿQÑ¿Û@Úíö…mô¤¶Jcææ™B£‹B iœ”âGñÇf2 Š˜¨cDÇänÕ§§=Jü€I_¶ûð‚›šî'ŸÌïóiA &,™Ð{ËùcÃÚ4ºÇoV%„d¡2ýx€e»…‘#s_UÓHåÕ‰W!  =Û·ÏOú<(y\0€.À€G¹'Ï\r‰ð‰57äpVòº¶(æ¿Ã¾:îç}ôRRHHy[Òÿ ´²¿ý 1åÂøO\")ññL¦lÀñ1ÂÿûíÇސ‰«û¡Š+<~™        \0¿Âçsø¯ë?ÐB@¯ô€dÿãýäÍ?nÿ‰~Á&LЄ­ ?ð«ÿ@:@;ýÈy¾òðQèº>ȁ‰ãÓfü«ù:\0¼tæ+jþszéK,b^áp·ÀýHXÅ?†PÀ\\Dè?v\"£îËü…\"¢&° ?­÷¯»‡tþ›`áV?«\0“úäJ„wC1Oð„“#êÆƒ*     ûþ@Ì¿é\0ÃþÁƇ‹û¡/#8\"¢OÅ\"¥\0€ã¡ø6Ncìä[ýp@Cóh\0{\0     ¾pDOþÀFt£ÈH/!h@æÿL°;À@ÿì¦wÁôIÔ~Cëˀ¸)îE¡©4+¼¯°)”§áEbç?]«d¤í‘\$ä<¤é‡Ì`o¸¾Ò£îï?}°8Æb¾Ø¸/°Jª§Ùo#ò¼ÚIV,Ac¤´3íXa äÈoîªxiËõ£ð\"椌CUÁª‚D°kˆYÈŠé}©\n\r\0,GÆ\0Ê|q»¯ ‚.ÅŠ€ÆÀNqÄpN†Ð”’jBO\$|Cõp}ŸÆÂƒ4`±ðÂÀ\\*4ÖÐbA¤àó+æD_ôòÀƒÄ™X¡\$Œ‚·‹„@œ¢6\n\0\$…~Ë£æ\0À®JbÝ…¡œÂ U…p”XõiD\"üÛŽ…ç lgÑt'£þ‘ ç+xÂ<¨ÓNŽÞ51eà’Â0`ò¿ñB8qÞ\"O-        C!¦ÒšØmɵƒÞÚÞ*¸¸f@#Ž6…ZЛ9 ¤”ZRàǁ°ê¸ÅÀã HZL€ eò½¢÷î9Â9œÀ T n€Î?xX\$0“´%\0002€\nÁy„!šeà:\$ÈQssAµžnxKÂçl1' €Nz!p¥À¬.Ṇêcép¾“¤1@‹…)mÍ:@PÂ\0á1\nä(CRä5D(¼Š”PÌ1#       Ýd7’+\n‚£Buø‘haM     aî\0”>¸1W¨ý¡\0að˜¾4 sÒ-ׂ'‘jp«‹å\nJmQ¨þ‰È) ");}elseif($_GET["file"]=="jush.js"){header("Content-Type: text/javascript; charset=utf-8");echo
  204. lzw_decompress("v0œF£©ÌÐ==˜ÎFS ÐÊ_6MƳ˜èèr:™E‡CI´Êo:C„”Xc‚\ræØ„J(:=ŸE†¦a28¡xð¸?Ä'ƒi°SANN‘ùðxs…NBáÌVl0›ŒçS   œËUl(D|Ò„çÊP¦À>šE†ã©¶yHchäÂ-3Eb“å ¸b½ßpEÁpÿ9.Š˜Ì~\nŽ?Kb±iw|È`Ç÷d.¼x8EN¦ã!”Í2™‡3©ˆá\r‡ÑYŽÌèy6GFmYŽ8o7\n\r³0²<d4˜E'¸\n#™\ròˆñ¸è.…C!Ä^tè(õÍbqHïÔ.…›¢sžÿƒ2™N‚qÙ¤Ì9÷À#{‡cëÞåµÁì3nÓ¸2»Ár¼:<ƒ+Ì9ˆCȨ®‰Ã\n<ô\r`Èö/bè\\š È!HØ2SÚ™F#8ЈÇIˆ78ÃK‘«*Úº!ÃÀè鎑ˆæ+¨¾:+¯›ù&2|¢:ã¢9ÊÁÚ:­ÐA,IñÌv4Ç¢ûꆌ£˜P-«\nÒ¸¯¨ØË%>(à¬c(P‹ƒ¸74c8XÐï`X…âó”:\r£ä¨3Š ÙKIAHH…Èsë\"NÒ8RÅ0HY5GƒD¹W(®Šã¹3¬Œ¯Ut¢Œê  PÞ9MˆÂùVdû?Œ4\rCPª…bؼ2*bà3®T`Üön¨VM•sb ˆ0]pGµ%n\\£EÏ]ð¢8ß‹íhÆ7µ¡E`Ö@PIí¥jV½öTöíz‰\rC+Œ„¸R8\ró\0a‰Rؾ7ŒÃ0æý¸½÷l_¶2dYAxPZAÛ°Š@y°AðR…ôT Èo¨ä^CK~c˜óôé⊰{}c¸øèãZ.›…~†!Ð`ö¿Á@C«.ž‡‚Þ’.‡¹ô¨é¹¤ýyô¡\nòlöé9wt\\C\$pÕ¨pÉÙ8æ/Á媤eyn_˜³§šæãàHç!fwZôõ%hö…°c5~[ÃH{\$»î\nµ»\r!öô4…¡nÄÿìn6ÍŠ…cHºéçÛJ.6ƒ|`Ó›÷;.“Þ°[—‹ãùpˆÊà¡ÀW›ÝªÝô>ùý\\÷Öî’hWªôZ¾³­ÌOÔÊ7PúöÌxA¾pUWñ)«µ”€ç¹!ˆ/‡pÒiÓ[ÁÀ…´³~‹Xà\nRàôù³â\$Á8?BEÕy!cô†PÚCᝢ5.\nH±]=«y*\$Âé–s©ÐÀtš`¡«5¦¼7a¬\r\0è5ÇjÌÜ-gÌÀû˜ºÞ\0õͤ#“•êoAÐÃÐî‚\"p´;£‚\nH<•¹ºðÑm!¡Œƒ² ¼dÙ—K´>+dø=¡p)ªpP        #À|«<)˜70“Û¬-»ãÀ—á(ek‡þ9HéÊEè9†€¶ÌôŽ’œ.ƒ N¬ä”’ÄJ‡ hL>e<Û¿¼Cš`K´éxVA¿˜ öaPÐA9W”I‚y‹4Wjçp…W«¥ÕÁd²ERÐ2Ëip#)ÑÌÂØÚÝCD?€rºu°‰ªxs—³|ϸœAX+?§þl‘Â<H &ÐÖðîñÐT#¤|Ð Q£b ¶-\$°}Ah:t0íPöD¨9!9Sm‚ÂHûi\ro}ˆ¿ˆÆªP_ŽEÑa¿æx­fš¸u’{šÓ²vàâ<)Â/#ÑQC*ܪ\0ºrNirêÒtÚGNo¤w>’ØÄÀµMÔÓ¼‡ò DJ†¹Cv`ò`N÷a@]¸(˜U ó¦ýS5{’È=ïØ·‰9N´‰Óç8z™3„^<‡»        ë¤Ñ   ðX¢c¥\n=@ü¿s™3&‰êš Šd¥ù˜»Aj%\rÀy\\{<#áš Uš—gÏR`‚¤^Á›K4lå¿!÷t°¼´{…\0žÜW«&ƒ˜|-àƒé¢U¬À/7yU°ÊCº¿ÎÐXªÏR¡6uåH†¤åV‰u|I V§Õ\nq<鼇*p÷)ó¾Óüÿ©&N‚øq¡¼/RÙ„\nV     ¸8©²•‡úÃáÀ3‡<;†©ÔÁÄø}_¬“ƒŠph\rø ¥ ÓŠpt¢9#%<¨¾2iàd3æR–s¹\náÛøkOfÈÇÓä«9pA•\nÊä¸9ƒ ·‚ú¼ I”ùYÌÈòþC¬c,U„²”2æ^Ì\0í0\$öNÀ®qsJÎ+d¶*ƒ@1:u¶†ë´Ï‡ôúíkΆ©!Ó4;é@zšZ‘Ç&¤Ìd\n3\$• ÅßÝ C¨]¦¤ú£QÊÝBVwpª.KÌ\\άԌ\$9Ài<2Zp:aŽ`UÔ´ÁïÖS¨3¤Ý|T!¼&PéÊö,c=´Ä0Ó=ˆÇËN‹ÖÛd’ë›­6nÏZyiTTJ¶¨wÚûeSîuÈ'šnÅm틸I¨n\r;—Ý”Ÿ³Â„Ý*)A…ãiŒƒ™1šyQí\rÛ_8?âÕž¾®7¥6–ðÚÁËl1øÇ½‚þùß{ò™½¿±°‚à‡cƒ²†­vrŠãû»{\\ð®Î.—,Û¼»ßeêvù˜kàÛ›eó~L÷^“ç7†…À®\n@.síÿçÝ8t–}ɘ8¦C‚-ä›Ñ»ô-ý¸4ßIédO{sÕ»8ä–ä[˵òf·;}QÄÁ³¹s^ݹ×QÚ2[ª(@Ä\nL\n)À†‚(Aòað\" žç˜     Á&„PøÂ@O\n師0†(M&è‚}š'š! …0Š{6žñÞ}ûº•k÷ʘ@;ðpx6ázgÖ|+œ‚ÌòDòîâ¾+‹øÏ¤ÊyJŠßL#}Îó¬~ûü*/}ñïÍÈ4·Áä|•Awýûó<À„èwOñ¬èäX\0€ÄâƒÎÕç~ü®ðþ\rÞڏæÞÝ­ÜþÎZåì¨Ä*¢Ù\nðϧ\0vä0 ïèäïþ*Íòù/—hDâ?Oú\rnêéðBïPFøoêíÏñ0\\ÿ`ç0fú°kï„ï°rùOïHðp€ÿðhýîxïpqÏÒ֐Pá‡T b´‰ ¶åOP”įõ8揢æÍÑP ÚOýoÆ.Îí0§Î‡\0Æ\rÀÍ °ªúŽîêPE°Kì®•Í™\rP)\röâoÄðTþèv ê\r‚Dܯý°ŸoâÿíðüMöA(XhC‚L&º›\"h\r,ÒNÂ^qKkb ¶Ø\"‚‘    ðÇ}qy\"ïÀRÍ`ú°Ä\0”°¶Ð²º†n›+”´®\rn¡„ò³qH«HLñ®µ\0V›%ŠŸF: ØŽ‚½Œ\$\rñ¬ƒ‚f鬶јjBçm©Qm£G\\žè•±˜¦„nk«’%\"V½±d¬Âk ‚@ä òª€ç!2+6·Ò%‹ƒ §~”ÈÍÄž%ë r.ÌR[È 2?\"̹#\0¶Ô€w\$ÂU%±#!%²)\$ò  \$LÈmA-W¬È{@Ü·¬ß#Ò_&ìÔxÒÜò]\$S'\0ä\r„ò½ã’gÉ@mè¹0¡`dÍfº`G&L\0È':xƒjxç“*оìDÈLÇä²êè´Ä¶±º™ÅÞ(±ÀqÅ‹°Â,&ÔžÜïlÀNt* \n ¤       †%f(‡£¼ÏоµkZ˜      „¶ˆ%i®n\".žëÄ»Çæ°®Æ~\0æU@Ĥd€¾4Äö'r¤\rn#`äì2HÁ ¶ÍgŠ6ë&œ£v ¶ºŒ×'¢\rr€‚S^”\$åš@ÀÌXf>΃k6Ãr7`\\ 5ˆV‹'W5à¶\rdTb@Eî£2`P( B'〶€º0 ¶/àôw␑sÚ³Þã&r.SVsÑ”9ÉJJòx&—8³Ž´€»ÓvÀÔ!`z4\$k´\0ãÐxš7pIó¤ Ó©Aé9µ;´ª€Î\rÅ~¯è¯4¯ó>~'‡\nPŒŒs0PâíQA+/7`WOåéG1‘Fpæš´\n|í\0P¹G‹GtƒI\"TíiG O@°½FÔV~G荔2Ø\$»éª%¸«96´,7LÐÖæÑLSoL’hÍóP5ʼæÐ£\0¤ Î£PÀÔ\râ\$=Ð%ƒnUjXUÄÜÈkÜÏ‹àN\0æ«ç”\rÀ¾)F€*h“@ök B³”Ú5\$˜«56Lbs|Mo8+8\"õ:ÍóG4³ON“S5‹Î#j²\"ó³Nn§®cçJtå½T¢%(DŸU“SÕ]MÕj\$TK`’5„öo@ú‰è²ÈÌͧrYSNR1ERÖ\rÀ¶³‘¾E²ðXrôNJ†7Õ“b‹“gTUx®M5«*î0rÕ:3¦³    ô™   •2iœš1QŠøµk¼Få¼Ð0Ž•YZstÍe¼½•¦c\n:oHÊFE£ xu¢Í#„ú4ãS#              \$¨t?õ¦E(p•å(êR\"|eB X¦ƒê8   4Å>\r/´<í\0E,^çD.€ËE{5 ÛaµÜ†*äÐ\rÑàZ‰»gç|ÔÖ~Ö\r:mocÔÑ9õ¨ÍJøv*ŒôÃB´Ò7rTÕ&ЭnlH޶ÆPVÊ6ÔÇmDwÈ)m ö\rµñCV¨wãú \$ùuŸSô°ÓwS`AD€èL‡S6qˆk³Š)JklŽ'L£hB9h–Œ Jimn<\0Ð  ‚<æ·\0¾[…¼:\0ìK(¬”~ª•˜Ïs\0÷KÌ’ö¯Y'ʈgÙaçÄO‡¦¸‚´Ø(¶—]v‘:¦&!`íPäàxV^w‚²¶ nºÄ¹àø7\0¾&Œg|B\0(ÒÂÓì*,Á×ľ×²dº˜7⛬tÇöz’w¥zŒ\n»E\",\0Ô\"fb¤\$Bã(óh(Í4Õª5b?Ã΍w¦Áq|@Ƙ+‚ëØ€Þ¶×ô¸&ÉŠÛ~Nâ´Žâ•Ì×—øN6<u¦FxWQµÀ^À^¦¿§;P.#/­‚ƒç|Wȃ8k.ÕÅ/7K/wÈQlÁ8ƒ~QÏˆŠ³\\1Ã\\˜“Ì&\"ئWRï‰Ë/Œ)|¾A5r§µeEƒ@¾Ákµˆ\0OàÍwK&×fØÓ\"'LmޏÜðl@ùøÛ„PZ³ùã÷7ªÈðÄ\r•#‘ožØx†`]ÄbÌ„NzZ@¾0NRè,é†x[P¤¹…øc•²8z“XÈ\r†?ŒóǍÌ?Š9÷2Ãx‡}€LÁÌF'LPðyzð\\ƙnjTÃÌ Å¤¼¬iNÇæÇ€ÂÇ×ÒTx%…xau’cw’¸#l,‡Œ\"àPˆ£Ûb”*¶›˜g†#ZudÍè,5\$¢D¤ä3]‡Ø›?ˆh~«0\n½yæN7Æb˜´Íùþz‹\0Þa5q•˜Ìk·pÃ÷vŒ“’±Q™µù,D–[œ¹A\\EyK†yP#U¡¹Zk¹óˆ&)˜EŠ9qš¸ÜèÀî¿\"ª7¹³’˜!£€Ú[™ÍQ™ÐMdÛ”šuQšJ#\$oŒ¹]¥jÛ¥¹g‰ÀO¦\n¦XDèÍ6É꣢Øe¹·§¶XÇZ£ø§¤:¢åE©:O©šU©ÙbÂz]‘7s–ú«›ØDÃìcƒ£0¹`Â?¢–\\ÖS{Ýyõ¯Èé¯S‰ihÑzÅEiçij&‘®×«e'¼kº­“ŽX’y f6V-Zë„WewÅŠ;G„\$á´×åˆ{S´¸žK—ÎÊ7      ³1nº—>@ÌizúÃzÿw«9 ú‰›{ x;Ÿºš\0˜é¸Ú\nIû…¹šíyk‹‰ž[¥ž©7{·Þ»8-~—ÄÓwñ,[lÈŒÄ@Ï·•’ VÔ˜+Šá¹Ó‹˜ŠØ¿û‰½j½Ûc¸Ø¤Íø©\\qÇŠûˆ¹Y¾¼¾ì'¸Æ¤z½£Y»´˜Ý»«»Ëœœ™?ašA:‹QÙ­ãûæ(¥â} ó‡\n¡‡yî#Sóy\0Ï[‡ì?àÎÏÈ/¡š—¡Ù]¼ªÁÕ«™M£y£{Ë£Ü9¬¼=PÚÏ«¹O†šLs\\sWDÁÀØ»¾Ë±‡|7œñjN-ˆE Ë•+‡`užÆ¼¡\rM}×å~¿»ØI™øÕ~i¦Ú´š±Ž|ç—lvÃù}ÏY€ÄL1˜l>\r¹ŠÅÅúñ±9–à,o¢YŸÐ9£}‰¢™ÇÕSgg¿Œ¬…»éмÊèóË:…Ëu)ËÜÀE¼ÅÌ€CÌÀøR%»·ë~|Ù~ÌwÍë³Î0]Î|êÇ\\îÃyÏ™ŒÃy˜\\öÂØ¬7й•ÐìeÑ,m™Ìuš¥Ò7Öý(T],wñˆÎ¸fU=¯…š‚TRW6–<ÖëÒKÖ½¸š¾gÚ;ô³Ë¦||1Æ\0Qy®\"9ùvb\$5·mwö²Î†—o•è\r\0xb€kH˜é|µÉš ÀZ\rëh»ÀWÊœ\\¦«Ô±±Ôö.…ó3Uö\r˽ؘ\r½Çá>?2)—᩟â/â=âÞ5Ëþ0@Æ…H×~<ŸÐ½âx·ˆÞ_Šþ/˾3æ~I+~l~H‰YäÉ{åýáÞYâ^]À^aãeè^h•ë^r+>C÷¹ÕbB¯,¶û´«2/LÊè²Á ¼Rý#mµRKI€Kˆ'픕EöW­1ï]Fµz´_]óTÞÑ%4Ì”\0ÚV=í4á;\$T’ Çæž{Ÿ¯?æ ÷לּԞó3Àùn\r¦z ¼ûX?c§p—\n?ú#ØÐaîd¡î¤ºµÓX´\nÕÇ:zàÌ-‚^Xì! Ò`ø:\0äÇöy,DlãÕJ`û¢A)hÕUõéµúµõÿê+‘ç¼çñËè5+êüÃæç~_ɉñãþ¿¨–¹+<¹b]<m5Ž~'—óôŸ—ÿ]¹ù')ôÞ¬„šÜº/ú™½Pœ¾rèœ4Óoõ{‹ô_˜ng¿ HFÈpBsÜHû1)žîbó•Þbñ§Ê?•톼\"[ÖC<ýU~<0¶Úyã€:õG @}脬zØïÞºòw)}¡ú[ê–žôçì<8š&·X\"`ÝB­Ww­µ{Åkù”U²¿½¢€.ûãä§E;À=ÏpQÉ¢³óR)t\0;ø¡Ô¼ÒÎ*­†J›C^ ¤d“ë,ý+d-¨€~¸*¿ðxpn‚œ@û¥Añ?ÎQh{䄳'A5öP{dX¼`ßH+”‹êsSªÅkX/’”E(3=¨!00˜4¦’\rjÅ‚ÐZaÛôÁÁ>Œmú­Ý4¡»¾À?og3xÆ•úJW\$°EQÀ’è^&ìÉ\nQE©•ßh¯Òj€è•ÃqC„NüÆ ,yáêH™›Ìβ\$'@\nð¶ú;\0\\]÷ϛв(é\n6arÇ©Àu¡Pä/ò;P¼#q1ÀõË\n£PB.à6©õ°„ð`\n×FÙ°ˆÍ’W»»ËÂþ¦ 3dbZUºÄÖœï±=¨ø×ð›xØaö@=®‚ƒfËÀÍZ¦³;B‘k謀À–ïÅëmJŽîN™gÌ^¢öÝpér²¹äÙ²¯(Ilc‡¢ƒúøŽ¯p*ö‡ŒAŸÒOá«UÂ7\\D<Tö§Ôf+ THÄËÏ `ŽRÇô‚ÁZq’[`of\\ŸˆÂ\"€Ï€xÒ|E‰Ñf€¢Æ²áºÅ°P/‡S\"²_Î8Å-CöFô]\"jãh®ØFù29Àé!EùÓåìb[‹âóÑøEö*ÐꌌMìxÂ\0Œ`9ŒDU_»t½£¹ÑŽq¼^ÄÍ(ÏÅÕñ•‹j!˜ÍÆtX®'›ŠEì_Ø»¥MƐQd^bÁ³|€ò,è{4\\Mò°X°Ffù-¬kN`7,¦ùàBJG5À&ã*1L‰Ì4       #£–-ƒ®üÏÇ`'\n£L?\0)Å|Àr      XŒ˜‘|”çe\nJ9@ʬ¶€È¥À6qÄX\"ÉqE¦      PmÑ¢N»ˆÒ–7¤}  ø¡<I\nªAÍŒj¢£uø÷ÈL+FöÜ'”£CZÈd&Rn›cIÉÅlò\$„ð€»\"‰)|7Ë4hCvcsÉÅ}Âs‘ª”G0~#fÀèeBð°¥í.Š’ràO!<]/dñƒ‘[A\$ ©)šJP’±¾\0Y%žF`&B÷´—ÂvM•II P€*7Àä֐2‡Ô&lüžXo€.\0ªKZ”Bq&<Jáp  ”•eÿi;\r‡¡0“PBÅÙH…ÒM²•ÀL˜üİ=ÉTÞòX„šc1&y-I¨6fN’|¨¤¯&yRÉn0r¨      ä—%VÈÀêÊRKR–dЀHžà €´A ü¤Y\nÜè<Jĺ’ƒ“L±œúù'~V \"•œœ¥l!dÊè'€`”Šqå´ù«>Iit3:Lɲ\\s%Ðͪ¡E@HC¶˜¡ì”\nf\"¤‡ž‚@ 1Ý1 l¨n͆€úª¼îç/X\\‰DK à^-²nÏ|À\"\n‰ƒ8@œ{à)P æ(P(äòs f y0óÀM˜ @°\0&bÊQX¦]3   ™8‰®–<Ãæ#11<Ì.bÓ˜ÔÃf*p'<ó4šÅÏ)1 \0®À)™ÚnÀ~cȁT S˜ ætI11š(\0–P,€‚d\"=üÐ@½6¹²\0‚Àw\\ÕfzY LÖn(›œÝO}5        ºÍàW=„ÒæÝ2Y“Í–e@OlÜ€¹7I»Nò“mX\0”ù‹N:n‰ãïB˜ò\0¢kÀ|¨æ,p>Nxnœxh¦í5éÎ˜  ÀGšd'€Å3é‰MØS\$HÀ©1i‰NÔ0ó¸œÝ€8¹–MvÓĝ\0P€\\©ÐNHó\0|9ç¦@\0!d€H§NÉ¥L”\nSØžÔØ€š*MQuž@&£7i‹8ò“–œÀ¦)1\0#Ljró3\\àç9HKÎÞdÓ?žhgŸ:  îOzvsà”ø§ÈÉóO¢|\0F4ßçÕ>ùöϾpSÕ|õç³<*LBw)ä <è¨?9ìÐ@   3ç¥è+7ŠÏ²esîœÏ\0@™ÓЂy”\$ž€\n(#BÐ'ÐR‚Ó« Åè5CiðР4: çCÚ Ð¾}4D¡”ã(i<jÌPôQ›üÓ\0AD™ñÏf€´%¡ý¨‡>¹»L”õÓ4ŠT€‰@•I°OáúX¹ÀX ×(”&l–')}\$†eI±fÆN_% Ð4àÆi²\\À±UhðCÒ=D§u“œóàË'@‘àv¢Ò8dBÐ-%(“TŸ%Ò7´óã–¨Ôf\n„X\0mˆ@CÎÐ0ÑòI´±\rɽ€w<úQ£õhS0‘9@òÚI,t´')˦\0J7°\r‚—Ë\0ž!†‡Æ·W1\0åôù~¶_ÔÆ\rÝ2\nfÜŠŽû§œ@QKÐ9\r†›“\rXi{/¹~ª‚£§¥Ý2Z_ò™ôÑúùÂ2'*o’œ¬      Uس©ê\0¡{Óe(\$§¸œiáM£4T4Ì4í§}6)⺄ËômV}Aê3Q\0Óìl”Ó/=@QZ…:„kµNƒÀÀ|Q­„&¢Õ4J³†»R*iSPÔ¨5„â‡\n—„®t@最Ô_õ)‡•QI€MXoªÞ äk19B7à=ÐÈäÇ\0žÉ·Ì†l€|ŸØ¦¨[aaÓ.§Ô¨°\n\0½49§Î’v@Gš ´€PO'ŒZHÃX'VZ@T²•n›ÜÙgß7ð>âl3c™DÙæÓXZÄÏfj‡Y«í_ËmX)Ê€¢zG¦¡ÅÀ‚à\"P2|\0NàjÏX™†ìƒ‰{º\0ç0dä¢Tl´ž \nq;Ù߁:bSŸ¡äÊhfy¨Õø)ŠQ+jSCQà䲘ySÉÕ¸§0ôH–qà`  Ú`ÒF¹„l®pT+ yçÒrºjZÕKªc«¡é¹WmAÖ:¹Çyè5ß\0P&úšúÂzWÇÉZ™)D¢ TùvD«V¸Õ3VºõÔF§È­°RjÖ­û¨p³v®5„)šŠÑ'X&@.°åC@ç`›pTª°lSw_ªâ ¢Á#ßí:!/Ô5¢rrâÐr¿ð;ºF»&«M@À\\C\0\"‹\$Øÿ(TÛX+ŠþÈ\$t+Ór¬Š84Xf¸ÖI•’ì‡dë#&¨€cIPëÓZÒõÓälÁ̱(l¬ÁZùƒÖÈÌ6^¦è‚œ3•æ¾|¯•sÅ\\Ô=€‚EàŽrçÁœŠ¿3­¯©w+¬(±,Œ Ðc§ÄÀ‹Ð^ª|Ú:`†h[ÛUah÷t¥¤ZÔÀËÔ¶ËO;¡Þqyˆvì\\êùA^°¥„ñx!ýj2VÕ¤Õ´E¢ªd´0ŒØ±õÖ°4H«²±°YHz •¶0+Ø¿Rjžô´ô‰f_k¢µ…¥AJÁjÌà[´©,U\\jXXó=´©°ZDw5uˤ‚ÓÕŸnù      %'’£}–&¾p&´ )¾Ò¬q´XÔÖ\0+_9ÝC)õIÛŠ)Rý¬ì§‡`ĵÿ¦@ê†/!+UAfâö–áÃ\0RÐ=ÓAóš´%àr3{”\0`%z0æ®\$ê>Ѹ‡•=¦hœ¬]/û6š…–§4\0i•_2¶U¶«•eªè¦;:J±NuV|ë@ø   ¨€üGºhU§=Qh'Œ(T>,þn‹?#ÊÝts¥žýfç©=cÐVvu`¡U'X)ÖMÒé÷QºpÕp7פ!a´˜J¨lÙ0@ZFçE•¨=ClJd­›žáóÓíuAJtȪp˜0’¦W™¼UwŠØëÆ‚ñ÷‘Fa\nišÝ»X‚¢J*»àÙo*6ІÚèkÕ8ýN®÷[* /Ñu¯MCUMaJ”Þ²¶V!¶½ìUŸ!+ÛŬ´p—xhæà<@B‚íâÀ½] ;€ë  íu”®­Ð_2ŽRñL¸ÅÌ:Ç߈  «4½.f1ë@b¬%\0ÇÃä!{ø=MÛ¿°|Š¢`x”       \nÑ‚oú!p)_ýtãȾûŒÝ÷#ˆŽpa¥¿ý±i\\˜ï3D–¸À.ˆ¶ñ¶•Y÷2ÀxÅF„gÑ넞¹8'(Ñ0BJ¼É@b£Z£n   p\"Ee9„ »‚ÁJç0X3ô«„b¸\r; ÅS¢1[yÈ=(73À†       у‘2œ™”¸*ÀÈl0‚!V¥lr‰Z@<ˆ´‚ŸT¸ÙKmŒáXiF\nUÚ?fTˆ\$i8GS)L\$¬8B±iD!\\B#<4aT–·»+ˆ@®-ü7\\¨Ðx6Âp°¡ƒ¼?Ž\r” N/é»°¨%L+`¸hÀtÂÌ<W‡>á•{¢Í~(@ìü…üáØRä™06ÇžP+˜¾{Esö\$ñ*Ù¼b‹       ˜&¦#ð¥…Ì[X̯˜—Áþ&†‰ØÞbùïn‚ÎñS…ÌU•¯¸læ,0G~ç}àƒcUf'dCs<m\r;Ø<Æî‚*4”ÎÜǬÇ~±Ç‰oam4¸]/î0ÄÜ2cÈFxw¦H;Ràâ»qïµ¾&    kXã?AIÆ Æ\">†€´¬xÐ?°÷,PÄôbäiÅ«ñ)c<\\+Ù+ ^n3’Å‘ÔÒä|N'!+PG–N5ìT°ÙÁþBK ‘§!ù1\":¦2bP¤,ä Fy*ÒöNÓ<a[&Â3ÉÀ²té–‡7žù\$\\Çqß” 2ecInÞTãy•2šc_   @\nuþp Áüx‡ÿ+çXžUq·<®A.ØÂKÊ•ÿÊŽ!2¥?¿8ŠfrË—8ƒ\r8(íôp^±!ë€öÿ×!ŸYÊ=q>´\ràv-Ï€Ù—°¯    Ë1âÆgþf,ïõ[ã«,e'ZX:2\\H¡ó ’ƒøy<€1)[αÒ;àD|#ð©‰H@ÁЁòLSÑ3€¨>;ô’]2X¬vjï.GEßBi+d®%ƒÞÂ,Qr%Ц¶*ýŸIÔèà‹5`¦tÑ-És–bª8EÍÛ¾€ƒe\0=ç´2î¿/è¼ùYq9-eZ®„¼1\\ÊçÒ^öU½†ž`&g WJŽËY×hK]8W@;Ðp–ô# âªè#BŠynqÄ•œš\$u™ä¦Y¯ç—!á\$§öŽ)(rX@/+œL8ÉO^‹Ê”p6,¼åÚѰwÂ<%MS©S=Z%´‚WèÌ\r…\nHy/¢2+eÚ1¦Eý†É£\\ÊUw     (p\n-°ÃØI¶¨Sî“EŒñZiI@1        ˜ô¥`ãÆ\$ñ44‰¥´…8íÓ>\0äi·MùŒÓˆ4æƒQ jºY½©yÑp#éxú`Ó¦m'é¥ZÚ‚6œ¨zaé»S iÑ&´í¨Ê’Rü>z\nöžôÃ{TiÿP:˜Ôöœ—jÝZj“TÁt¦Rïù¨@:à‹¨•Þ­5«h”j{\râfÏÚrñ–½Ð\"‡xœ |¦cxÍ?§ró²àkú¨p†‘Õ.²rÓ>tqÐC¡ªê    k5h¯­a†Ž\nó­U:yòÐó¥ã®xW8èk·â×)3Ú!Ò‹kó^ÔtÒ}ôÒ–-x5ï^¸²B(q@±×Qd]Æ´CrØ\"kw[&ÏÊuís‡ÖW:ÉꕝNž@îÀ×Ód±ô¸‰¹=°•³+Z9©¤NÄôµ±°„³@ã¾móÏë{-%>çH‚æ·‡R0*”7K/<~œ•áŒ,jsÖÒön§P\09.Ö͵µ‚þSj\nØË74ŽÝ±,í\$;EÚÎÕŠ-¶†Çmé\0*È»vÔü7µc;u&vÝÖ²¬37íØ¡»y(·ˆtõn;JßÛàA¶ïÚG4¢hfáñù¹R†’@5€)V{[þYÍÅmàb£²©Žè6û¸1Š‘pÛJÝ6㊸ÍÀîœ;[.ÐÅŠ[r¯–Üb9¤V¹÷0­Ëî´\rwÝ€“÷C·—Ïw×à×VT¤ &=×,âhª•zHä€)êè 8¼õE—sI–t<@e+0yÃé¬njçT¤¤ÞÆ®€w©…~’dÁJÿØÏƒù«@û)c‹±+hñª,íûêŠØ«8pµíL KÏÃ:QîA­ñ‘og™õ×1ÄoŸç»?IÊZ.Æ?Á=~”߁¬¥n¹°¼©kF¬!n%/éEŸt0'Ì”€P<Ƶ…GÂqPä´“F¦ÎxAøq¿µêÄ×⃫vn‹`,ùºcWÀ{á9Kúß‡{|±+s£<é£÷4Z+צ¹6ÁP…éPL¿ÈÙÇÀ(L=¼Õ®¡—jf¾h‹Û>)½Aï혠ýq–ÿpK̆¼˜ÕåÒ ü~À6d0€¥ÔY½#y¿}ütOÆî°RýæCSÆ_²ç‡œßðÈ|bHwë¯s…O%UÐðwâpÙÜNòˆœ¤‰ºY]镯íÞÓU\"rMît¦ù»\0jxoW¦DÁƒË[[ÌM± Øy·ÄTÀò•8üÃ@·9˜àh‡“Öâ˜!šùŸÌ‹r`›ïà‹\\/®4Áu{œdÖ8SÇ¡Ásb¹\"ò ¤Á¬ié;™úji¨Ç¿¬kýj}v£iÖ74ß½­JÃä9=Õ—54ð0'ù?›íÕ(Þ7öŽqgûøà t     ôŠ_¶âÝü[§úžízñÓŒ\\wÌ_>sÇÁ“_ÿÞÒg\0¹ç·ú©ŒVœ|\$äpœ¸-½ÞBsðX܇À.ÇÙÈ;ÿ¾3„—¤g²û€PCD¹€êGy1‰ž‚j\0y=MËž;FŸÐm(ÂoD7y³kÇ÷ÁÌbåo”=ç!:’.Ó%C%í¸tß¿‘¹²Xm\$½Ì6&öPÉbjÀëTÞuÑ*ÀTx€\nÀd5¾¼õìΝt^d³(S|²ô×-qËŠøãÑ‘ï«\0©¨Åú(tXYQ!HFî´k‡³÷à·0t«˜ž’æ4H|гoNoûÈN•”%°\\†Çw\"0½ÎBq‹µ\$[玙ùÂfŽ|q›Îü7~EyÖíî¥Xº¡ç—qø×¨>|ë Ob*Ñ\nÒÅèImßcËEЮôºeÈÐ6eŸ¦üvËŸLÀÉÕnÉ©äKxx~aú›ÇœÀf)9„ËŸ]F¦!¤sòI‰iNÄh~áÓ”©ƒ×R£úÒÞ.ì÷µœì¯GF½ú÷«Œ8¢ï/†zdC•fð6-“#g|ûÎï½tÛŠÐ;¿ÞÖ4™TVô)·kVÞ߁Óñ/y„ÀC ×ÀƒÐÉ9òÊ07h@œëÜò).Hq㝀EÝîñN}üšK¯+›ØY€r¹\nb3@ŒØK1 Ö)†lžA˧Þ=#œ«HiL®ýÍÊ„5‹o¾A€†ïãÍ“—B>Y‹@\n1Hºà·!+â×È£s¼0èGH~^7ÀÙ€ ÐÃÉQrIô8²Íð\0ÃŒÐ`¤‡\nw¦=0A›y¨[QÚ8HÊã¢O¡˜üg m¼–ï#Ê®ukHB§ÿް#°o›uf oݐêk íãŽñ^!ÿñp{À}»š›Ø½4Iv½—ºíÅû?x{¨›äCY¬-åICמÐõó»È’>0¤ûl\r¥Ñ\0°Ø|Q×1åÏ5Lö/±öîj¿ù3;›Lï´·^ï{ÆUÞn(}íºÿîÌb½ÍW‘ÈÙ¡Üä+š>æï'¸·‰ðÑ{WsC~qM;PäéR¿vÌ¢×ÆŠº:púàóQšïÕGÀà 7„„a§;Àéá_Ïz‹Üæ)|¿£Á:ðg\0Y‡*Æ/kÄ—\n—Ê>UòÀ0xŸH@ë-=\"0H^U°˜E+Òx+ÿû#Æ;èáª1¯kÅyú’´ƒ£ÍThü:GÛ&ª-Œ!qs‡3^|úÛàxWë-lëƒý!׸íF°÷X“ôt]ÇîBXY;Q€LΉʋ½êé0cIÄojèé„AøQºýŠÆàLþùGGãâˆ%\$(wÒ¹ÐEhÈXKða¹·ïçÑoúºb€¿5ËÎøúĐ…‹sAÕðât/\r‡Ý’`­wÕ7<MP´–*yY¿h>Pî‚r‡Ì=zjW01ÿgùdlþiD/â}^VÉ\"b·À>Д›ŸáàX¼€Rn›ÏÝâƒrˆ.0õëüÿôÌ™9@ÌÙÐæ ¥ÜÿۮȷÖ;å&³^û2š‚hYXh£(´ÿ¡b ‡\0¦Ø€Á/Ü\0ÊlÆ:0ä÷Ü‚Å?ˆóÃt%¥> À€CG4@Öí­@ËE¯<“ã Àh   OŒê0Kä\0‡@rà[ì\"±¾À)›AÎoX4§z¼ è¹NRºÖ̃«`ö¼jä€k¬ÈÀ¦Pށ‡” £]OˆlÀ‚÷ë2\nì³ï*»b½5DnÛö€ï…’ã2òˆ(þ\$ÁÓ<)»Hac:¶Ï‹ƒ/Ë8Ài:ùn6:à0;Î<1úLP\$ Ø£âYÂþ‹\$»¡³®Ñ:0›´¢¨µ–ƒð‡‚ŽjIP¾\n“rL!w”Œ¢û’ŠN\0>~/`4É+\0æ¤Á<‰€^RX°U†6¦„É:\0ö–bNÂ莌*€.éN¯Ìpxp_¶Ã 8\0XoÂKb蘖|Él\0Æ–ÜÂö)\0’°P€Áª:<pl¥\n”@»A½SPP°º¬Æš\\»Ò AÔ×03\0006 ºø(à.ÇØÓpv´}Ø…9©z«ý䵦À@N\$ņ?5§ã…Ÿ¼i+Av“8`»€y¨Ÿ ¨‚¦\n;Ô ¹ óêV€…¤pß€ú\"Ïïj¤í•E=ÙxÁ0d\$§PèÐV…     xßXñ ëg\\?\0ePaAJ/`ÓpS¤ÁLЙÁ       ¨(PYBqÁÎОAï!.bÂVsª¡\$ß   |Pf%gzTã£A¥¤ÐkÁ½Ô0l%.Œ¢l¥5I¦É+“8I+¶“’“‘BH¸*©pÂQ\n‘ŽG^B«        rLPUBµq hB¼–ÈénB”œ,bè¤Ù4€ºÁÍY×`…     |#`.Bæ’Ô.­ÎBïÌ\$ðŸ†6!ì*Ðs\$â”#<ˆB%¡€‹€QÌ*ó”e     ‰NÒˆ•rLÐÚ\0ÎN1!i+\0·ãѤ÷\"Œ60bCgaNÞ\rPUCqä/PÑ\$BNIBÁµ,%#£-÷\r´+e˜³h&pº/d+ðÄÁ·P²C-ÉBÕD;D…C}<BB“”:0¨Ã¸\rPîCPèÐôBiÌ1À•Ár”£Î     à'Ž‚Àìc[Áƒ\r?P•*?ÐæÂ³ü+pñA·,1Q\0ÃL@°qDh.Ð÷½YˆPùÂèû¤´`0¢@‡ç¤6Q·b\n\r€Þ•¬0‘Ã\r\$1Á­@²ÃØœ=ĺBÖ”¨ -€têX°ìBù”C1®“,©+BI”ìÏ´%€ù       ààÖ³(ÙÐíKT\0ÞÐF@¬/¢7Xá\nDÒØ`€ˆœ`ã[Εñ¶p”DǬLÇúDмQ\0\0îœN`3€^ \n@€°%È  9Áü§ø€„›\0Ø…ó€[ð þ  ³LÝÄÏÔMA믤Q“2Q8)”úHWñGDíb€%\np‹     ØSšª …„€(à#¶t–Á‘‹ÚDò’HQq[Éf‘]ƒ\\'(B@€^á(CCvÄúŒV±[Ř`(ñ^E¡üZc!„7ºÃ‘EÌ*ŒY1mEuìYñ_E¥¤\\`ÿEÊc,[1eÅ×ô]Ñ`Eá°\"䆬86 ×ñzÅq¼]±hÅ€xí@†…ÌçOE®™\$O6¥}ÀQq=€›«™!\nŐ<bÑ:µQÜc¢ùOІÆ'„bïÒ\nÜTàÅ(|QqFÅŒR`&E*1ÔRã!L^ÑfÅÙì`Ñ`ņñc\0^H!‘“ÆygÑ|Fƒ\rñbFЦ€l‘<ƐÌcqeF™äiÑpF¡”hÏ–\0ËÌ]Q¦Æôhqbƨ4O #\$=\$g±®FÏ”kñ¢FŒp.ª<\0å„k`©Æün‘´Æ¦§äO(J ³ä[q¿F»j1»FÖ4¤\\(¼¤’3\\TgÿD-œTÑCA´+ \rà7€ÎíM€€àx¾Á        \0Z     R›\0005†…p\r1ÕE\nìVIÆ(;R…š~[>`3„6˜¤rp”™   Ô% ÀÚ-°ÁЖ\0ù dCñü(9¦ÑøÆA‚x“@2Áþ¤!±Ý*`\0002Dz~8SñåŒã P¡•AڏŠ/ Æ#揩‰-§8€1€¤nÁÚt€*\0†#O±øƒ0=0      €'\0d €    À’( xàGù  \$ƒÓ\0 Hôà(¦2Š\n²¦3ø€fïînðâ 7â\ñ`7GþF@>H.á5 >?ÿèB>Ç<ãzò\$`¡À>0ÐR¨útY´…ã¶°+ ÂF®àQ΃ƒ äl@>\0ŠÓÌ…1·0”«\$VòÆ´Kò&\0½¤Š@0µ ûHà>4úäo\0006ÆôŸqî¶8»1ÃP=9Æ\n®ð1°7ê²\0¦D*Ò<€ñ’#H‘\"1|ò#£é!K3Ò=~=nmòHî˜,€ñ#ô…,{I#Út„ÃÉ~)‡ Ö“\r b6òIð!1gàE¢/ì’r\$ä’äÅ)\0ô„…ó€øÈÒ6”ÌŽ'ß0v3g@†É\\ú@\0!¹ ‰3!4ä©HdLùfÃ_è°9rŒ,[ŒxëebÐf ÿHHhpf1~ÈD%,„Áa)”0 Ö¥ã%<ƒN´©øc€>½& K!K0Â-Ø€;øÍH0ª¢‚&—܏ଛ.Á|#´‡°.È@3Éá!Kå\0002\0ó!‰07‰Ê¿ƒeJ9h¿²\\=dðTœò\\\0ßQ™DI«d°\r(II 8‰Dr„Z~(;bÝJ8ËÀCŒ¶U!£RH¼\rˆ» 3Iô¦Ä—¡_ãýAÉN#“32™¨æ1ø@äú{¬£@ÿJ+#¨=R}ˆú2à-‰~H.Ê!`:€àÉT—ñ^‚!Kû )„Jл(\\…-\"#’¥ÊL0     ’tʃ)d…/ï„›!ˆr‹”]8¸„Ñ‹ô.SKҐ\0ŒH\\wGà:Ã)„G÷·Ê˜¼®¯Û5+ÈN   ‹”æNà\rŒÊJÌËÒÿò¾t¡0&‚(\náa‹Í!I„sá!!d€1¼ð0‚²ÊDè 2:Ë5¨¬á‰3)°WîµJ%‹½òÁ:0âÅÒË‚²#Z*ŸHë-kç×´æ\rÈR²Ú<-|Z’Ö2§LµÀÖ\0¬ødxæ›KŠAty2v‹®L­A8Ê\0ÉK²²3–+\\¬’Šƒ¼ÿ{eïöƒ¼ë¼  ˆ…äì!Ö²ï¼ÿ\$¬gãIª.æÉO#«Êò‚µ)Ø>°\$g!PØ€6KFè#Òq\nÖWØP2NˆzS{)|ˆ/'¿²û±ë(k„òá¥øfQ*ÒìJdJ´»€>­©øÁž!0“2ò\0Ñ0“RbrÊÚ4œ•ÁyJ˜ª \r <Ø^H@‚̸S™©°dÁÁWlTÅóÌ\\¦T¼£è¦TÃF;q!àMCÈx!\$ºÖ9²_ñAy?ù–²z¸2|½I|„Ë.«ì2²)*c´BR€‹+ÜÀ‚Ë2Ô­`K›2û\\RåË›+ÀBó0Ë™L©“4ÌÍ3dÀ )ÌÈß(­ËG,ø„\"´Ìˆô¯Ò’3x¿S?LÕ3<ÎSAM.tÏÒù2³.‹Á !+·%8!ÁJ”HŽ@ˆµK%û±ÌÊÍ4Ãÿ³AÌÙ3“±³NÍ*dÔ,ÊM4ä/Å¿£Zc¦ÍO1¸\r‰\0\0ß(¤¢Á§M</ÔÖÓQÌå5Ì­38J75äÌS_=5Ü©AŠ-0’:)~HRàQt¬Í‘\0\rsdGsdLº.Ì‚ó´[6@Öâ5—é6È2¥MÌ’ -/ÍÆ       \0cóLÍΦùÌÀäMÈûÿ³e€Ý7x³q‘\0003‡b½4ŒÑÙ4`1.jä­@•H46\$Wà6\0„\rª™²iÎ\n©ôº¡y\0±8h;Éí>ÌÑÛQ_<40?RH10ÛG (LüfQ5/°„xX’†øÝsŒ­¤bL§`<‰Ë8{£r§´ûSìá‘É­9@Bçß½8x6à¯'´ˆN\nžÎRÙQf`ü€Ý8|è¡\n'´ØÔŸï»6T(2^A*/'0E²tÊ*¼xáɇ#dËgàHØÒë²RHÙ(B›ó°¶U#`\n \$ÎÌc±â\0(#é9ì§2\r>¤óê‹Ü\nÌ`CrýKòHP ©£ìÁÛeP7ˆ­\$ð8Ò†É6„½ñèðY°6¨|¶T»Øhàœº RЄ,4s³ÇŠ*¬ˆ èKœª)Ds€JVÙÔŸ‚õ5¦\n™MH?í/|õ\0006@.LÀhù˨À>óÆKv§L™\"!K(\n“ËI´£¤÷¡Ov¤ó)I —Œø“ÌÏv6Ü3ã¨é>dò€¥!Œ÷à‡O¦¸f/ÞKºÐŽ¥ÎLvž€…0      T’\nØ‘,á,ËÇãÈܹÐ6ÈM³|’ºOdð»!'U=ÃC/øJd*¬Ç­F<ÿÓ¸¥±!H; Ú‚;Ñ™A~—^<aSe¸2Ö˜¡=Oõ1• 9L{9è ,:­9Р,Ð7™øµ¸-\0`¶\0Ö`¸ Ìu:1| €e1ÌVáL#AŒÆ        ÏAp\r“ªú`À©Ì7)ŒÆ@à™,dÄ¡ëÐ{+¯óÜÊÇ5…\0bìÍ`‡°¤Lh¦U\n¥Ð¦e\nSïΖ}ä‡\0ÖÐJAñø!2\0çA,u\0006PKQ|3ðO       PS€68\0%@0ɦ\n˜L­ò5.É™ €¤\0',”Ô<€ä)@¢“í†?(P5óJЍÇgIª\rd—€9\0îùTÌ’´ƒ)ÐBòLA\$c»b)ü¦\r˜ÈXÿèC´O³(ì\$ÂNÑJ „qHV `\"M•8¾tñìÆ\r‹;0»3|QC7Å“XLu1}3X:übO4]©”ëU’çMaEÈ?T=€å%0¤â‚C!ÃT®ÂLŽHøÇ`ÕÑ*P8K‚/\\ÙËK6{ïSY+€“·Íª´àäKQ6@6ôVÍ‘<ƒeI€P¯6CSÔzOÙ\0ÕËPŒf±›€áÈ>¡˜ž80àÂÇôÈaÏ\"gI,gmFû¢çá™”r ®IdŠ|ƒF„R\$ áÈ‹Hñ!“2FܦP †HR¸ ¸       ±8„²aÈ5”•ƒõIh.QLÉ(@;Ó\r³ZÑ3%\0=)@ØBà*ÇíHø?T£\0†#Ÿô¢ÇíI\r”’ÐJpõô•LÉJU%ªeR_Iå&@:R±%Õ&ÔªRq+*‹øR¸Y°?R\"†J…*R¨3ËJ°iÔ¬‚\"ý,ô¸ÒÁF5&jäÌ6ì.¢ˆŠ'KE+Ô£Ë&u)T¶RML)T”°£LD~Ô¹R¶E”ÂSK½    Ô¤ÓKÕ1€!ÒÍL„ª 7ÆÅDÀc‘Kê-3ò4ÓD÷‚‰ÓA/x%T@SVÁI±ûS^= À`\r’Ëê\n5#”Û0  R2Q‚8ªòT–I#¨%S·Âwº´Þ‚|RÏ7ÓœÁ/EÓÊ\0¸¿´ë…›‡~0A/‚\$ÅÚÓ¿@82L!dšƒ¦ÒИtY°Oô|7<aœ(¼Ê®6­4d@\r‹O¸;tÔœAÅ?…Q¶iIᏐ¾|&€,’<wÑñŽ˜ŽÀ-¦ä¢“ÁCÂŽ“¤ñ‚\$0Û€ë+ˆ¬åð‚B1”ô­“Pñ\"Šž ¬Ò*¦è#\0ãHþ§­E£JOÊú¬’5Æ\0\rŒ¢ñ]OÑ첈²^\rxzò:ƒ^  òÁ_(´—Á6M'%[É-i‡]Fà#Ò“€åNü¿Ë÷\0Ä•ÁLNÅ4²fÕ#i:SˆXÂ@4®÷%ù[´Ê™• Í=ã‡&#e’ªÊHcõ\0€€8øf  Æp4ƒ\0öag®àÌ/eD,AÚ€@àbE     \$PõÄJjÔ2\0ƒ*”:Ñà .‰Ãç24ࣨ-P@u“È=ô )Ò\n=x )\0‚˜ò”‚€ =è\n`+§ÃH()\0#€˜x÷€& =:kiÓ&¼€)‘H+>UéßÕ‡Chi\0€OZ~@+“Âx      €\"À.F?B   ôBµmAŽ”üCÉ[¢íDèÕmQuF‡j”µR/4ÁÃT¤uK%‰T“MD–còW!B\0„EÉÁГ`ɏ=èªÒ&L=ô€cϏB(\n̨[ÛÐ0âU\n ÉÕO¸ÏŒ1•EUTu]’\rUÝ\\Dé[†¸\r€žGËí`1ðÖ'Xµd€„UÁTæ?C£¼HµsV3WEcuuÕ!Xðëu\$çà‰,Bâ}e5~ÄUµPÄ1Ö.–'••A:>p¾ ‚蕍iÑ\n¤ùúS‘ÝSµ¥E\n1Ð\"±T@µ@#Á³lNà1[(ñ:³Á¤PQËUÍl4DÕ[%lÑЄ%[Xðu·Dú5ºb¢      ÊkHb×Dµpq“W]p@9\0[R8¡õÅŠÚ(-RÇN©ñ.£Â.UpTW%\\á*U̦)\\Ⴡ@€ÉC­tUÍŸÞj\"\0<WRc}uuÅu]v3’‚¼Q•sõÕ×!]}§ˆWX]­w“·×.¦muê<I\\ 5•×¹†‡ÍrÕÙŠ˜ dæh×^usM󆞸+ 9ÏEuàƒ\njÉÉW¼½y’ã^èÆUòW[_E{õÒ„ãHÐ>µöWÈAõ~Uáƒï_¨: è®k]xÙµþ\0b(ä\\B×\$õ€89\\dàñX4€UÙ…aèH8Wì#es^é€A?ø+=uóÿ\0×`™Äµê•ÊÕ|\0äz)ýuïžpµÓÓãQ½uàâ)”`£”“é]xOu@6¾ewàðØ`qäÅÈ9‡Æ?½„ ÅW@hñÊv#   Ë@m‰\$©X›˜+ <×~(ãf\"Žj§D¢¶×e‹À1XÁ_=rA=¿›W9—\\ 5ØËc=ŒE@Èl€ 1X´Ì: ±^éÆ\0À\$=bM‰sûØ®˜¢FV¯bŠ\$©Y  b8WöC…TÝs6%Y •’@Ù(-’Ö)ÙTÚb±/­ŠD…Ø‘d­¶HØœ®LÇ`À@d      VGÙ=eU‹ü€ÐÑùøvX\ne•”ÖZWF{­—MMY9eM“Ñ²u 2GN(˜-(Ù+bµ˜Ö   K_fX#Öf»9dåŠÖcØvnRb‰Š%4'-—\"Ý\n9\$(J•×W%fÕ™6j@7gvr4ÿd/1ÓÉÏgÕ×€Û[eŒ…}Ó‡c%˜à†ÉÏc¨âN„J\$éøaaÙ¬N…›     Y2”dS¸Úb­¡Q›`\0Å ¯WÊ\r…žÂrÚ,Hü®\r†éhÅrQù…æ\"°‚ງi\n•ÌFÚKK˜;ö”·iP+Vª™iu¤pÚc3ð]ÖšZ`8j\0Ø-‰¹•×ÚEiØ¥ÑØ+d]Š\"Ù‰hƒ   VLϼ¦Å•ÕïÙf}¢1ÙÙj¡6¦Æ7dM‰ö\"XYjÀW@Ù¡ A\r…e%¬\0¢ÚÅjªb–tY§:…¡öªZµ˜Ûá§ÚÒe­v¹¦(Õ®6¬ŠdÈA¡Zûk\r¬iŠE¢§Kœ6ÁÚÕl*Ñ<J]hu®ö¼ÚÿÚ ¨®¨¢–6[#lbò;ØóbÕ³v¶dttà7ØJt°A§‚¼Ùˆ¸8ØòÐÞA\nlxÒ–¹Zþ&°!~©Ò˜¥´€•[OmH¶Õ´~µÊ<\0ém«öÚZ™m»ä,×[Gd¶uéŒi-ŸDqZL¼î66[nE¸ Û‡eÌj1Â[l¥“6Þ—J}s‚/[»me¸–Í#èmŽÆÚJ¤¹vòF7n?Jt€[Ró\\6ÐYoŠÖL…±c`à5Úíoý¯Öòëüvm–Xç-ýŒ6µ‰a côöZsl%¡C@£[‰••ŠWa¬ ÔÖí[žõ¼‚W[Mo•¶Åg\\±¬/\0ÅoØ \"µƒsbM 9ƒ«dÍÄ£×À—ãä5Ç8<vÖ#4ÒmÇ,}Ù†ç§V|Ml¥Ÿ‚S\\Îö‚…im;ÿçᆞ»Ûâ+YQrEÈ·%ÚÉrjÆ7Û¯a}¡À¨ZúMrW\"ܝsÊ3ÿØŠ(êB—4ÜÁqà76q¾Co…*µÙ+q­ÆñÜÛhsžv<……oÕ”W-ÛÉrí“7?ܧt\r· €Øµt-“—>tHá)­rJ7\"@w]Ŭ7IY‹pmÒ·7XYt\nG¬Ê]\rp\rÑQ\n8\nÃ2€Ñ°TezPÝ\0î=ÕvÝNEÉ#ÁܽuÌ—EÝiu-‚—NÖËsíÔ^Ý.é}È÷CÜ•dË‚2Á]1f½¬.gÝr0é4ÖÀÚx°õ‘>WvEÚ7.]—jÝÛUÇ\\k4qö!ÜõtØwIÝÁF]pwq„5w)\0•ýÝÑqµÒp\0\"\0_az]^Û7v]Å[-Ü—<ÝåvÞ–L7®c]ƒa7?\$¯-Ü7;^w5àvµ]=va¡gÚví¼€¯ k\$w±ÊÜ;Z€!µ©Véql@;Vð0íl÷\\‹[ôv-óÝý`X ·xWõ_½Ò\"øÜnð à<^uwíÙÄ^ew=Ó·›]ÕÄr‰u¹pñá*²urÐZ[]™þÁœGÄ>é5CÇÌ»€òÉ(0*É’€Œ˜µV0W‚Å    ‘ ¦ (\nÕ‚¨[zÈò`)^¸Zkɱ'ä#Åî\n\n^ä()—·€’šBiW¼ Ê\n°\nƒÝ¦ ˆò7¶ÞÞ<ˆé¥'Ð@  °^Æ:À3\0*«@ºíì\nЏJãÓ&h\nÀ€…|ï Ì¡zõì\0)_\n=ì  _D=h\n5_Z˜Œ’`*\0²ºÈ3Ò.Àº(\nÀ'¦Îã!h'¼(õ`«><ˆ -\0‹{zi /€®L8ò`/¦:øI‹Uv@Z]€†<ì×À_{À0£ËÖ~=õ`ßm{,7ÔE{=í+£c~òl—·ßÇ}5ìWó_²X×É&\$Jk×õ1mü7÷ßO{%üà«8hx`\"¦Àá­û·ý'{}î7°^袍î÷Ѐt…ò@\$€¢šÕî—ú€™zÐ\n… Vißß±{øi‹&JÅÿWïÞß|Ø\n   ¥UZÍþwÏ_€NWþß(»ÿé:_R„R½ß3}æ—þ`&\n²iAh0™Æ\0¸     ¡|EñSÞߌà¤_%òÃÊ_2Ö ö7Îß¶8ÍýØßÉ|{8%_Y}pcß\0‡}ök¦_k‚ðò©‹_s}Ý÷ «_~Ώ?€` ×»à{µìùàL™pf8;\0¡^8\0¥†˜_¸E` \"b<úwéóߍ~@      ÷å_˜-ùØJߣƒÌ€—º_­˜-ƒ‚:fW·_Ã~Mùiôa1~~wéá=€&í_?„Zo÷·ÕuUàò7º|XJ³aUrbõdßðpZ     ÞÕ¨<ÖwêÞЙ0f#ÔU{~@&_æá€   €*€š˜¾£Ô€¯{zwØ_3` #ÞÀ\$(0¸gU¥ƒPX?·Rk`>+\$.8g߯þxà…âlIßaã†Ýü8[Õ{…ÕX8aßæðóIÒá÷†€\n¸\ràc~Þ€aÍ…µWxà?ˆ\rÿ8&°L>!—Â^µ€|÷ڏt=åa×`=”‡Øß« %ë鈠 âd     ÔâM}x\nW´+|-ì áUãÓx  iaC…˜òÕWa†-òs‡ß¯€ØòÉî'f(ZÙ'}‰ªèãצ\"^'éˆb“Š˜\nxkbª=5ýƒÉßhÒdCݏz=6\$CØ€‚&+¸¦­~ž%8µ\0W‰`ô´â'‰ˆòƒË`‹v&õYà‹µûø\n&0<â€cͨÔ<¸         !MØóƒÏ\0¡Šþ,8bÉŠ–\$˜Ä?EíXÉc\nµþªÝU”­&Ahaí€10ØÃã‰8ø¶âV»F2عâeNIˆbq‹Þ3·À>øÖ\0V..¸Ø€WƒœˆÉ—¦b˜°€#aª=BìêϨ[ŠP‰ˆ*=€   ƒÐ*à˜Ê踂`7Œö¸q+Hº         `\$â‘UØ5k^º=ÐZ    äbš=íí²ã»}÷Xóc½.(¸õ¡«†dÃ_3)øŽ_§3ôCÒbÜ\nF1¸±OŒ†,õ…ÕQ‹Åûycõ‹ö.¸#¦c‹Øó       ¿ãé.A©¼`>™í5…§LšF9¦:<Æ+u…àß‹\"‰ªä€V•[(=>X%ÒŒ=H\nS9ăxãI‘vE «a[ &2‹£dh=PZVU]U†#ŠÄd^\n¶‰˜ã7‘FG™\"&½èT£&•‘Þàâå‡F?¸ä\0&Hy)bïîK9)ãw;P\nù\$d£æ#øÿbˉ&J³§g€vK#Ê=‘nLXÓ㍓H*ا^Û€ýð *'K“Ž•†á‰n¹,¦`®:Ù:\0Vá      )ï&!|ÎPز¦ÁŽVO‚否-ÃÔ§}”š{¸·b       “ÖPØEe#”æO˜›cgþPÀ+ÕZrtù(O{Øôr®â˜ÎByLN˜î2ø2å(&U    ‹ßŽž\0Xê぀ªìk¤MÀf5]Ö˜†VXUU\\<Úp˜íaHÒ#\0˜=öZ˜àXvW       ßá¤,Rû`…ŠØ)˜fß•†6Ucᄝ0Øë,œb…ƒÐÕ¨f'`%ᛔΩŽeÝ€Þ^8\0Ÿ€þ^‰ú§Ò.\nX__­Š¦P\0)Áé‡.B@«d‘va9)'¹‘þN÷×åþO÷ñ+~¾+À«+€¦XA˜¦-‘€     õj3˜¨        ®M˜þaX‚Õ]ƒ\"f)Ù€ª>y:æLà\n÷Å…¡€¸ò˜4€V™½Xø_…’péà0=-ý@§zªíUY…b–ØÃ\0¨¸µ‚ȸx\n™&ñš†jXà&“š¨*É‹_r{R7KˆÖi‰—+q3–kw³€±›8f9šÏ{‚6]éaš ê´¤€V›lùb€’›>jy®fï›Þy´‚¬<Åó)—Öœ(\nkfñœj‰Ô«@­X \0Q~¸÷Ø@åŽF8CßÖL0ô@*\0¾›`òÙÎ^Õ~r…x®gDº6t•Tß|ä€x£á# >uÙÒâ     e)YϪǝ®uñú€‡JkyÕçš2èÃÊ&±šeUø{§MŠ;ªÐâi‰žU·âL=êu#×g£X*tÉßä+Œ0×¾Èš       'µœ¥úîUYŠ^)5VÕ“‹®*Xž-UÝa\"ªÇ†¦ÊÒ8`­}aåוÕUÙ{gæ­Îùâd¡n-8»\0Ÿ…æt9¦”<æLµ„d«‡h÷ ,€¾=I0ÚhŸ8òú¦\"šò´:€¾Ÿ8   Ô£cØ3h1Œ\0i˜§§zð8„Ö™6„cž’d·¶è8­Á1ÎhiŒÖ†Éß'€õXË9™|«£Ì_–•a‚èK ²´)­ß¯Xn‰9µ¨Z0ò5„\0Œ›Æˆxá\0ž<Иà㸠àèžÈ\nX½èÀ.U˜à¦WŽicÉà:»:ƒ«´§ºžø       ½€þQ&§µ €\nZ\r“<ö„YÇèñ£Öƒ£Íèÿ£ê´9Vgµ‡R踶®¿‹ªbʨZ«‚bùúä*˜åIŽGþ˜àk¢€©¢Êcš.ª½‡rmP\0³3–Y\0\"'¾ŸÂ…ª2ÞïUj…IùiI¢º´9È ]W`+èèL>ŽÒ-cÈ< ø|\0¿‰–Zç…¥æ\0¸èe¶{©ó€‰ŽNŒ‹£H´˜¶ƒÚ=h+¤&™ú@á1¦¦dºS^¿‡hôy=fWšžØUa3~…úXNè;ŠB‹‰¼+FŸOÚva\"MøÚwg턆cÈ€˜žÒíšG'Á ðòºGiá¢b)Þçí”@öXC¸f<ö\0¸ÈôØ``¯Ú´:ˆcð<Èšp6<ÆŠcÑaïX^Y„cò=-ax€’žžCRK¨Z<Æ›ÊÒcf%¾?ø‘€ƒ©n,Ù†g種‚š>h/œx÷ÚHç­‘Vyeè‰ÆYWVZ€§}l©ˆ\0±€-ó¹ûj–žO8²_[•0\nY\\§Qª~œ€#€¿n…Z¤€¿Š>wyì৪ØõY_[¥èöX\rê¶šÞ«¸|egUj·:«Õ£–sË¢a‚À\nZ&È­\r`ŠÒ.«îIÔ`{¦.¹n冭«ø\næq•Æ–WÉd.Ÿ’´)Òæa–®`>g†šÔÎX‹ä}Ÿ8ò¸‹€²»(ö\nÒ.Í›v{¸T7œˆ€,3£Îd«£g»~0óØ”á¤ô  <{Î<}°3§‚\$ÍÏ”)±8ˆ@†R34¨:í•­Úäµ¥]¼à~6U!<–@íjZ ÖºS„‹Ø^ÀŽÓˆ´œB€~ 5ôãɳ,›S¨,(˜Mó©ëÕ9p 3ìÎX©/ZæÛu'ø:·FÏp\\è)|Æ£¯X\rÀ<‡Y8Xtè„•!`6 4Æó°.¸à6ìÙÐ+ZÿPÛ°€n¡ñÉ<­0˜Ûñ&b”w®0>ÁŠSr<§@6«d\n•ƒzãlO°úFRlO±;H5°Ú*„ºL^x0¶>g6–s /ãqœ‘Ye\0ˆ‹@<§z=\$‹Cئ•žø\n`+'S£Ž9ëäXõ8«_/‚¾Šiñjöˆ      ·Ìh7²5Y\0&†c©êwøÍäa™Ö¡ØEìÉŸ­Xyfu‡Îb{5ìͳvGµjgãˆnÎXdìè\n²{ƒÔlÇ«†Í™Š§³~­ìV…¡³è ?¦3´Ì÷·éW}æŠÇR Ch0æ>R½=÷ 7Ƭ”à9µxÝ´>S‰\"Ó‚4zöÓúðÒ´0f\"`ð1½·:愸x:ò³’x;ZÊdÆÖ”íÉeµðK€;Ðð@Òg¶TML´¡7N3R¾k™€¾N(iÔF‰;)€Orn:Ó¶°\"â>Ž^#ëe;nÝ!Q\0 /Ô†fU\0\"ý@Rp6ò ˆ¨ŽBóm•®0€ó    ·!ÛYír/T†ÊtŒ1™VÉeOQzBrÑ9,Æ@9mÓ!–Ýt‡¼11;‚\"cmMu,Sæå<Å®W\"ó¶yv¡K)Và»mƒV,ÄÓb¨úkà\"à1¯µhxÅðÈF&…à†È9¹tƒÒ?àÜ„Iq¶ ¤ï\0gø5»MK!,„ò?Áå!PSQGÿe€@šÈa:Àbƒ¾Hd@(: ÝîŸDd†ÔFJ1Ḣ 8Èw&þã@⍅'i¹VmL E/å¡[R˜RË»ZõnÅfՏ§ÞÙ´_¹Gâ‹hl¤bŇ‹»´ŸôlÉ.¦ïÁŽ3%IÎ[c6Žð 3ká,€ID…íçX%›¿JSoxêv„•KøBûq[iDìÊanýO@¼Û±mÚÕ/è|ÌiK¥2RjfVðr±ïZEJ³n™g\0_ºHê;PHDÓnã-ò•ÍiïQº°aÁ)Œ)¯PgÛáëL6»±‹¾%l»±kÕ:†÷s¨kÚ1ÞúS©mÓNF½›ëo¢(žóSJIe:†øÔºJ¯¾=l»ñïFæòÁ)ﲋ\$xàüÍ£¼>óûÆ9¼X›úo¼<û'ºÊmHf!ñï£D;Ž\0áfÐSA˜ër/ã;Všl<üeðšµ±Š¯œ»Ø»2JÎA\$ü£kœUÀŒ¢çÏÄY¯…š€Ú ³      dù\0×»|pP˜!fÅÒðZ\r@â“À¦ã’Oð'_x6;\\4§%´Z6[‚6„tЉÊKŰ#Óu1|î2…XOo&Þ6~¥±DqàÖO<Ý<Œ:Ó¶|Ž­–p%%ÌÖ³RÐ&\rÀ*oÊ¡x\0C[ʸ#¸çõ:lpwªÍ\$KLÈ€;shƒ`äaRnˆzà;Ï”í;·±|8LªÏÜØ=OEÇ¥H†* )š-•Tª/⛲_íH._%›‚öã„ÒHê¯Á7THÙSD5>Šô°SË_µcr~…yÍEì\0Ò*ä^¶ùÿ,ÍŽüFS¸è=†\0é#¨>¦å@c·Eé¢ÅäMA7oØ\r R·ñq½{S©ÜóþÕ´1Ý'ø˜®á'm¹³À{p0f2/¼Ì»<m:-HƸ˜Œ%N'[P°wd…fÍâ\nÀ5<tˆ¶       <n…š5ðF3ñ¹+¨b¡ð*ÏqÆed›—Æ«0”µ@šS;¸éž’d„°‚ì–À:†;=>؁=€ÐÖ#¼‡ÅóÈàNÙR2Ï`ÿFÆd›\"‰ƒwQݵUN«±¦ÀR†€æŽ¯”utvÓ¡\r§'øK#ˆ¶Îþ²O\0ɰ씑Ïír”×'•rƒHË.| í;O°K.8Èê¿L²€Ü„„HTÀ|srž‹ÌƒIMr¤ú/4<䏦Þ<”rª®Æ–0ì5nöÆÛÈln,Ûl?ËNÀࢃaËf¸Ü òá!fƹòåo~À|ºòñ°°@2/œ¦À<¹òûËÐ%|³òÉ1~òiL¾   _1 5ì'Ë}½üÅrÜ!ï1´6òÿEo2¼ºsÌÏ.à•óÌ \r¼ÅrûËý7<ÌóÌß2<Çsn;r5*OÔûlLD°F@Øl[Íœ«;ì]ͦÆHaGw7¼5¶YÆÌš€®°5HµÕ\$ÅA·ª\\<t|µARQD¤ã!D\\îãI¹qv@à}§ŒùÎØ_þÄlh•(ñ¦ÅáSK‰iÏ)|iwT÷Â’ÆÆÎ¼òO>æ,aÃñô–>T™Îá4|‹sÖd`#y\nuÃ,‹Üò\rη@AŠsØ8=Üüt“dñÜYËw&         NßBñhœRãì2ªt %Ÿ»q,TŠýwM˜ñ[!O=ýë²x݈NHJ@ƒC6ßF݃¶~øa\n.ÏG»q•\"'(“„ô‹qà\r8CvhJ`9\0ð/ãÀ´|t–&w@á&ÏÒ+ë\0‡‚¼°]ó¹Ëì<bt‰Ð×?œDqO:ÌÝØ</aÊX‚!8À‰YEÑU”Eñ“½Òl¼Ý7G=ÓÑaLÊtñÓÿ@1^óÛÏÿ><ôÐ‡QõX°½„âÜ€  \0Ç}?CwÔœ©]‚=ÑEWƒŸŒ¥\ríçÑíàäéNR€+½NÔÍ#ß]?õ1ÇoG¬öô}.wG³ïÁ¤}%×6QŸÑèÀ‘#ô²@.åÝh;NÙ <PåÕ䐠1„Ü8ˆtÏÎ⡼þuŸÏ€I¢ÅMÐá!]tUÖ¨DÁ7q&0Ü›Tôz¦þ×\0ÆqH؇tI¬|`6lIe°R¢‹Ø¦M¥°ˆŸ^ .õˆ5€Äuóe^†MÝö×_\"½õó7_½'o+Àè0ÑÓs×çQÝ?†FØ€€º«H¡Ý‹uîXR+€Â—JÌ¢O¤\\Â\rÏ7`ŽN¿ÿ|EtÏÐHû½w¼Yã_„Ý»Oa#b@²ìGÒkÕØNÿÀ0ôœ S„½‹¶U„õȸ޵×h7=\$Œ_Ú0cáxõŒ7e2qtDå¡p–ñ0½€uómÏbÆƒëØ±*]‹^蝍%À7NÝ?öl/PüZôêwO=·‚ÔgnVÜôóÛŝ¡ vçeÕ©wn1að^]Áö]<p\\úÞœÛàÂöÓÏ&AzX4#§Ý¯7د_=Ñk`Ћ}‹!EŒØÁ²õóÁ^ß“ËKØ·t2_÷CØ·\\IX3Ø·ý°Ñ:%՝‚w/P‹QÐ.Ä™£Gݬ†A?•[Ó—Ý“‚'Ýwd\n9p)ÁɃr7vj[àóýÞ@!õìw^ÙR1ÛÚ¤7[Ö„ÝÝÇe;‘‘qïm[«wkØ´µ°¯/5Ù¢rö, ?bƒ']­Úr§ò[\r‹/5Úݰª×¯·rÀ.îñ%ÄUáZv-ßl…6~ËÍBõCóã­ÿ×ÈÖý‹Ghø‡½³S ÄougM¶Ñï€p,×O?Ë÷€ÙßD…d½mwà?]²u!à R¾4âV×_!§xIwö×^øH9_=>÷}á0ÅìÞ‚½)Üå=ÔHÉÛO_=Ýø€dØ¡Œø†íŽØ ¥Ýdƒ 3÷Þ]¬¹ÝþšØÏ_6:xDx7B‹³Ó¼\0Ô]ð/È=ÖvIµJ<AºÝ×X΁,M×Ëeô;G›\0002x|&\nÒtS•½×ÎÜc4uÿã}Âøpv]\"9x_ObÜ'S÷K¥½‹(áKØaÞDøðX·‹ÌSmÝǍ煇áì3€çä§_<;ÏT½þM‚¥äІMù\rHo‹¾*Ëã_ò“¹Ñèƒö-Þ˜RœÔÍ'NàU:Šô׬ñÒH‘Úª’%\0¾5¿g-tˆ\riÅk5ÃÂÇ\n¯ù˜`åHsù¡Í¯isû~qOoí”\r^m>\rŒéO÷/fÕ&?wæÔõ   ÝùrÔ3*}ît󵉏Ý<†‹çwOý÷¸\\eÉV&d%}!.ŸßÞå{Jªöfם&Fx°8+Rªï×:š¢€Œù‹Ó,xà€ú\rØ^üšø2uÞÔV]òqOs]ø™x=#C÷I}¬ýeÝîÅ1bÒšõoÒtàJŸIæwP½\$vñ±´î<Fp—<¦–òyN¤\\·\0Ê=ÖÄâÜ+5ÃÂPl›õ\nS»È³ýÿëÓ¾ç©\\6탿vû»iõÃ9q4Þg#åïª|ùÕÔ¤vìz¨KäÞ½»µtÅ/Ý/ë¯Ü5éÒÊj_IÂöo%!7Iž¸t±¯Q’Äãk‚\nÈMÖwLMë­àé‚pu!0Kށ\n/W¯þº¬]ڐ—´æ[åï®´jzý·ƒ¶)™Ô}\\Xí€)ÓOþ¿ö>}ÂÌS•ìÙ8Á@\0Ö1—Gþ{?Þ÷yU÷ÊaíGžÐ/¶/´Kð~¨Kßí‡-œO_7µ}*«Oa¾Ó{z%áó³Ï/¸Á,Ôµí\0#ÝSû…í=¢`…7í¨aZLí°ý»{ŒH^Þ>ÐpµÂ7EOîð\"àüù†©/¸Þé{ÓÈà=TNƒë½…]¦ÖG.Ô ²€øW·¦Ü×ûãé?]ˆOß¿vLVFʝû{åïíÝÁJÈÙïÏTmioÿì÷¨Ô@œéxO¦?zÆ/0OÝYõ|.Pžb|+ۏ˜»Æ\nðJaW½/ŸÄ+!¯óì?ÎïÅ\\V—_ìWªô|±Õ=¸‘ÇðŠO²ýʆ\\úF‰habÒúoC¸Ç@ìÉOqç|…û\nzÀ§OÂ2ùñ‡j=EøQò—I—÷éñìþ¹v07‘4͈ͮ7³=­z‹Ýß¿2ØMÈ×Í=)ú²M7[!öåÝßj·ƒ„J   §Ë}¼^æwÍÿõ­ómáhzÇx9à{î„ݶMŸ½¹×A”Û|ëìÌèö÷ô³>o‚)ô0Öý¹¸\"ßBx}40ßKì(Ü\rmݹykß§Ð1|ÓOnP–tÓ謔–{û•¼ŽåÜCqÍۏÖ\\dû1ÒŸÓa.uô·Ÿ]t¿7ˆcnãÈYöDEVÑÛdÇÎ5(}        g×½u\ró×ÙåþÙ<TŽ¿\\ý“×\$·cÔ«ó*TûûðþÖœ;•[·«’q{ûÞ×]U}Õ¶ Î_tÉÇ㍢ƒ5udÀ”kmq_Þ¾7µKð†Ý>ý+y{„Ý&Ãa?Ô>N,¼Â5ËQö—¦^±ý}ÿÑ¡.}aEr>ç+å̧@ÔÍê×ÏÝníãì?ce|X}'oìücñ«e_•voìï{Ê÷}-÷x¿~Så_Æ›Ê=ùwn\0;Ø=¸Á|âË'ì8’öâä']³ÿ{CÏèýnü?æÏ[´uIÿÖ±4ü)~ŸëÒ=…uMáßë=½À1ì]>F\$ðsRšüª¯òOšäã\r‹òåMw{°/I»â]íì?²•5í“ú¼ÒõNµûè“û„íØ6›u“ÃàR¿üyJ‡³ tî×Z\"ÈÙpñŠŸtÓÚÁîÝÙÿV_È©šœ¡¿fþsÛ‡oÏzÖ×óÓf€É¹·óÁ7Ì«¿ûðfVúAY\$ª«ç|óëzÕí[n¦P;¥ü[ý\0ŸÝ[Éú/÷eCҝˆ€¬O)wßòUÈBV¶Wïž\\±üƒçàpÔT‚Ž]ˆåØá™_ëô¨     ¯GáŠú#Ó_v}ŠÛ5^éÐMµ/óõò‡õÞ\nD²¨ÜdÙîK­\0B³Ò\$ûóšQz¨¥j ˜ž³“MD)5Ä‘À4«!V¬¸¤\"®XêÌÈUŽ\$þ\\!W:©2OʦÂp!V\r9bõ†Ê°    ôª¤U°‰1J\$à.ªÒ萧 ¤‚žpÑ@.â|Ä÷“\0T½˜YÚÔ)𠏌%؈V\0¬õéJËÉf’·s\0RŠ%åfÀp€ƒµ€4\n\0â˜G«€–V´„¦´µjÑ1ÀAq\n¶eÈ¢A¤€tm4­™Š¶”O)ÅAyùâ?\r[ø^tTD¹Ë@^G‰y‡HÅÞ×”@i%­Ðèè\rËYà8¢¡+ʸé_ê¾(Ù E,dW<@Wê½ÕÇAr H_\$³ñ;|  Q2K„–X¬-àBâ˵wàé P®CYD´2¹%´‹WTÀ¥]2sŠÄoÁZþT·@)jurKoè-\\L`èð'Zý/\0…Énƒws¤ŒàaÀ¢z–zøµ½nk h¬lpïUa©KÔWð6    \rš¹\nëi¥…ô o®™rVšÂÐÃ×Ð9``:®‰z(.h°×#-€ó–<ÔNÀÀl©¹[P€tK5E¡¯ZxЁd¨p\n ×+%Ü\0      @Utix€ý«›X„p¦jº7ÍaOÕщZÚh½`NU·‚ٍ)ý4Ò²…ȃðQk( M¼ ÀYbåÖ-ÃDï\"è鼨ü8%@    ÔG‡„â¸.dåbăÁ¢Ÿ.\n®zŒpËW«9Òg&˰ŸCææ\nв^gŠ«Ši7€õ-XÑ—V\0†Ï\nÊ{Ó†,mƒÕ5j¬1Uk†\n²û“£_öÂñ•`-,­ƒÌ5e4Ëõ—°yæ_\n«Ù‚2‡‚¦Ð¹ƒ3…ú¡îÉ“@\$lêÏà™ÈFaŒß ½2 füÂí…ë\"¨,BaÀ-0È'Fȍ•.h-¥iW³~UŒÃÚü DÒŠ³Ë`–ÆÑœ!V84Ì’˜\rÁ–+I­’‘5æ&L/X—3_ÄÐ%ž{õüE×Z‡’‚¤Ê%–s(È6¬MQ‹9ƒ†Äq†YtfŒ¨ØºÁ°&\\M¤‰:86\rัß_A~X\n\nÃX™Áºƒ¨M!ì5þÌ‘àØ1pƒŽÅ<v-egà…5“ƒÔÍÝUk3î\0€%?ƒÞÓ< ò-</¾dÁ¼<øy@óMàØ0-&ÄžÔ V¡h    éÂ\0ª¾|¬c?h6c`÷“Ö+sæ\r°&!0†š²gj_À=ó3‚·P‡ ´Ãƒ»Ù”ÛCE3P{ج€B\\&ªl(7@ÚQ¯›ƒÞÕÞ\rƒ–'0àæB'b eXlöÇëÛÃÙAÛ'N2{Åøm=Úx²éc€Å*ë> l½Zg4GgÚÇ\r)Ã\0   ¬Ñ\0AP„ºAžû%²êÐj\0\"€Ggß   ‰’“F/„Ù:Á­dŽÉyŸðyH6Œ—šÂkf2¿ˆœdfKÐr`ÏB=„ìź{=F~Ì— ï³bÃaUt¶}š!B²…       Ž&ˆ<Ì—šD2^f[µ‚»%è?F  ±/ÆcÖÆñ’ô §ÁåY/B     …‹ë\0(AmB¡?±ž„\rt*ÖplÈ¡Y\0+„4ÅY’ô!èV°ˆI­B#…wšÛ'˜EIœ¡\\„^&‹?(M\"—Ä…šÉzÓ¸ZZÚ0\0M…jÖ\r¬-HW!4BC_à    Y;8I—˜Þ%iìÂÁŒ1„ÌaØÀ±‡'z¿]‘;†7LÌ  êÂe*ÆÆéœ¢°ø+°la73ö…ñÊ”/è_pXÝAÅc€Æêä¶Ìna}ƒ¢ÆrÜ(Ø:ÁìÀ«AÙ…UÔ1&&́aŒÂ'FÆê3¦‘n¡K³/`®ÆêܨS°X9Aÿcu\nŠ1ˆ_p©¡1¶c?\n±ÐUð„aÂû„(Æê³\0èh†ØÛBºcu\nñ¢3&2lLÕÃG…„Ðê\\4xXÌa!d±¶jîÆêŒ4¦V°gÀ)ÂÕ†­   úÄ-¶6з˜!€+…Á        \nk¦7Œ#XÞ¯°6LݍùZFŠm2â´Î(VÀµ—\"ÿEï°uX2²\0c¢Uųƒ5&;,X\0Kl’¾`=32VB¬ÖÚ`ÁgjzÔ4ºë Ð     x×¶Ã*ƒù\n~øy†‘„Z“¯h_tÔ5—{/`á\$*È^Ó Q‘\"X™¿4Ÿd„ÃhÖ¤!¢·LíØ<•¸f¤V@šÃvÍe‰¬“[b5Úƒ!¶G¤ÌX^0)„ØÉö<&Hñ†Ã/ƒ¹Æ«Dû0 A.7l‡¨ùFóùTþõŸ!9´Kò§‘¾«~ÀóLÒ‚Ð\0´My„\\=—*[œ0.¸wZቚùZkeÌ3Wf¢U˜+8¶UdùÚ2ú_ÖÇøœ“Wæ´-Ó÷SP¶YµP÷­¦…F*mH      ,+6fRåÑYÇ3a'åž#<Õa\n«UWB Läô=0–ɼ\$—'RÈ­|TVHìæIíA£Ozŝóv}LûƒÍÄ4…ÙÙ†»?v폵4÷gîNùŸÌ%V.í\0šD;lzÌ`<‹        ؈ÌèÙÐDKgQR\"s9èWQYÞ4lz흛tìç›±€h Õuzó&ècš•¹&\$ÆõªcDöŠ!éš04^‡4M!£35ž%Wh´lbZ]¨ªì?¢bÌýZ{Ú'âÒ1ž\"Ø>Í'Ù£“½iΕtº#\$h@IWZR´§.ºÒ¤¡YA&áä™Ò³­_\nÎɝòEÆeL.Y­Ä‡H¸Í,£3N¢tkÜZ|'iúÓðŸ\"f 90H'¾Ôz°¶£0ÒZ‰µ)'¾Ô®Lk͏˜¿“¦‡øÒ²¤BF±a1O\0›ñ¬+ V&áé  ˜/š*¾Ö\0žûXfWýšÅ0ˆº] [x?M)¢±2ƒF¬!­f‡­iI«\nôܤ,Ô ­ÌÛ™<Ô0Üõ,X]–èΛ¡\$tî±ñB#t´Õ­Ôì·SHhÈÀ‹„ª€~\\\\*J)ÝnüD¬N“DѼ°nTÿ‰¹bA¦æ      R¿âî!{uÃÏÎ)Û^¶·mzäE!ÛntÙfœ[{6ßqÖ¤„ü¢yFâÆ€Ž¸Ô/„\n€–Ö\rÂB:<I\"à\\*‚MÀhC—[o>žf #ëp—n      CµK¬  q<:`6ߎàEK4\$,Ø©·Ù@ÀÕâwUQ¸4T\0‹mÆÔˆ‚\\ZD1Ù¸3þ%>`J…ñÅ1o‘¹q¥{/ò“|·™krá½cÒk‡Üj|Ÿq¶oXà‘&ˆaF¾±Yç%4‘~+\$>äé;^™ÿ|[1Ûw8«íÜÖÄvzꌘCÁ˜ ¹@Ž7ŠoÈ:Ü HáÅ!Œ”ÅÅ”‹4Ü`\rÊJaD‰Öæ|\"ßM¯XPpÍçßܻ؋NßYµhX¦æOƒŒR®25¦¡;8){î(¦>0Ø¥*Adž\n)„…ÐL½-®ba/wžƒ0ÿ±ÍúJG8.C\"s…1mŠã¨@*×T„Àˆ\$ÿw>÷¸ LÚ!žMƒ®}ß‘6‹ÉàWé´U‘Åè‹ÌØ,l=1!Qhñ¨Ìô/ž-ˆ‘ i“Åð‰\nøÁ<_â6ÀGFïFpàÝ:볿‘‚b²6-ŒÜ‰*€ãøÐ7[V¸ qHâÀ:Gö·ÎFFqJ’àä\nJR—Î-[Õ'¶Ip\$)%ÃŒdÂî˜I¸Év™dÀÀ 鉣ãq@ýLS¢É‡âé/× E p†ü1âÉ€Hÿã¼SN«yÔdMÀ#F=YÚ“ýÅÊ&§i_ÆQ\$ß±ÆZžøÅAŽÜddrƼld\"Î~£!ë½;nÔëeÙ{…ÐŽQ™Þ Æj       €“qïëßFöÎŒsFrwRáͶRïèÎqœQ®áqî**ÏpJnL7 YŒ×Ä'þ± ßÛFn؆î,^G¾F\\ß(¿×{Võ¹¹sÞ¤âëÀà¼;LüÛ‰hRŠÈÓ‚«£Kº¨Jø’5Ò—´âÄ#C;>Sv5[å¸Õñ©#O–~¿ÍáÜTXÓéŽÇe½Š@ö)Äã4¹ƒ¡Ý¬V‚.Á8LTU˜³ÂöF’†îÐLف…cdFÄ|·8Œl÷ó€‹ciÆÎT~¶Ò6ÜkÐíæUqnº4|n7¿¢jRÅEo2®´!Ün–ó)í\0ØÆèÜø!g4@cð6”÷Æ÷ì®Ø',oßÐúÖ=6ñŽ®B8¸ÖÀá^ÿ=àm†20±š£¤§KxF!­ŠTȦ„qXâQu!õN–¦ÄdhÝ)ÁÔ?jtB¢2*(å.µÀ低RAH,ZÊ'²QBŽÇ&\0Ö›Š9¡×øæÑÎ݆½Švé4çx¨°ú£ ºmÊž:=xè¨nÞ«A&ސ†î:[¤gbU£tÇQtNÞÆ:Z—n1Q^Ç[CvpSñ(禮˜“Iÿ8X(ëÍð*ŒŽÀ¸ÛÄTQ•ާ#”ºÝŽgô/‹«8Ý\"_¿iq;âÄGÊÏÀƒ?Ò‹õ»¤wØðn\$c´>Púmô“ôÈð¥Uã½€dôqÛ¤xÇIñå£ÁG˜ý‰½¼y¸òïÌŸŸ•i  …PQæ—9„¹ÑñÀYs¢ƒ´¾d\0¥]<DZ“Ì)ÓðÀL®cÛAXõö/[p%D@J£Ùu|ziA;Üøöññ£â,u¸øÊ\\|¨÷ÂøÕÊ¥~CB>™8ù`K#æÆ…SPÛ‰zOúQî\0¬‚ÃW*íÝM~EÉ\ncÞǸ#ææ>²ðt‹1ûcæGÛø Iêœ}˜û±÷R¶³xø5ñø¢„¼¯SŸT*XM\"n;J\\çLƒé+\$ýX¨̭“¥{1kŸä¸IJ\$\"Z@“½u¯ïÕ©8_{÷‰uÄkÅ.âßtÇݏޖ>³­‹2     ’ÅÇñŠ‘dÔPS QNg·v‚˜ýÇ0¾sû±jd€xþ¼_oäÅv\\¦‰mĒƨ,FQœ¢¤¥ï|vŸÑ^ÒSY å c\$ÿ|v³}¯m§Ê2Ç»ãm”¸Z9&Áø­ßÛÓ-ŽùB.€2HÔ\0€=<ؐü²ë³áàDd3¹bnÀ&™l«Ä×€JâþÅúm>“àØq#Ð ÃýH\\j     4Ø@xžCÆC·z˜Sl„q€IÆ?ê\r       '’¦´›ê6GtG!J\\^Dkŧð@b‡­ìT£u'÷(ȉ>šÄâãýܪj±R?Ýå¥HQ¾¼ó2Ë´ñÚŸU']Ù±Rl‹¦ý/+ß1º/OÖžâF‡¿®«Ü¦%}òÁÒ:iG&¦”Zà\0nö •û`)`a†ß·\"fQÔ‹úwö6Þó‚~*‹#‚1òŒµ8'¤nù‘¼öx/dc·‘`ÐWQ>Ì÷©îªÐ‡­‰á­äá#äKÀ˜øNé\$N¸!O(¬@G€yÜÀ¾E’\$)F[{!ï•ø»‡ÖàT #ê¥J©|‰•¸¼AüX%øÌo—Þ¼®w|¶±ñÀ¨Q4n“Â`šá‘¨çQëcøeu©s 2¹ñ‘ä#\\“gàIjÕìGjj+Tv§×¯DcˆI*xûü0¢”¦Žó2\$Ë}jŸª?[„tq±_\"€h%±è ;¸W²\nžÀÝ#Dj&™·L°DÏÏßt¾„‚S#F@Ëü'—NžK‹p“²EšèýmÑ\$cIQ’èۍ½‹§—ã/MR,ÉzŽa…4»§˜±¡bäÉO¸ÕÔR{Ïàž)ÇLy‘`sر0E#ÜŠ ðýÓËØ)2ò?¾tK| ÀŒ…gOï`Ÿ:E¥&f=ÒÊhî\0RR;uvråâÛ¶è#o«\$¶9I“g#RKd{´òŽž]ÏÉyŽŒÁÙƒ^Y.ÏßÊI±Žð°M;§ù\0º'P^à<#Ö6Ô*íÝ·¤|ºøíéËnGYIáSª¯X¬ô•tKŸN·®{2®¶Hb™UD(ޱɐš˜¶3ôii!o÷‰MID|ü¡ëÖÙRzÞ‘'wúþm­ÈG 5)ÁO?’Zq†P+ùµ§\nF%º?W[\"¦Ph÷¹ W¥\$Iú'¢ˆ™?îäTJ”,þnJ¡÷GàGõʍöè¡ñ\$ØŸÂ@ßÊ*‘¶ÔšT§ñ`ÅR‚‰ÒsÄ    îQ‰G8þòeFË”T¸ª¨\$y/Œ]¼^\0âÎR3¤ïoiÏ#Ö))Fü¤—@nÜe)/Y=#RR‘©åÀ+`c7ȆTÝä`¸?ÄèiBŸFæv¤¹…éÁ…’ ™%'²Q8Þ@/â*÷ãÏô^½4”æü±Ø¤zâ        =\$å¾}\0üMû<ZÙO'ß\$©èmBõûØ0NA\r>š¨øµõ\$žgJod´+îéMÞdr¦Ü2…»Ûù(ÐaÂZ¹Sà”Ÿ‚1q9Ú?좉BNMRtʨ•@øåÔû_‰UÀ”¤8\$ùBX²b?Ì«a¦Í¯\0Œ>»uBžŠU¸       W®n\0©%ÞK ä>RðHN…£4:çI¢Þ8}\"x!uàGçI=•£) ×cØwøÃ”¥U•¡e‹€(±D}@ÆÒJ¬êö4c®LÒ1Òlëvú?W|ŠTÝ•^Éú•ÞéeŠBiÏŽP–Ù“õ)úO´¬ÿ.…SËX-'±0Д œ ÉûNó .Xkî™b\rŠ_ïƒØz|œaאּÉb’#Ò÷½v@ïNXðÓt¶ª#%ÈöƃÕTzµ[¤³à‡B¸ªp–z®2Vd·B!¿VhƒuT”IJÈU|x‰H\0BFð†BÏ€@½\\\n9ÃFfI ¤€¤˜”ÔÂXã!\\è–c,¾Z!-Cteš        è–¸¬Ô””È     ÒÎÕŸÀ(UýP’Ò´YjRÑ—¥+LDû\\µH\0jÔÕ¦À\\Vå,ÆZ¤È¢FB£2Và¼xxÈQ7PQCË|%Ÿ-ùq`H«ÖË‹”Ø'r¹ VÒZ]ìKv–)_\\¹)qÃûÕê,¡—6oŒ. uvò垊ïWwî      \\¸¸Ý‹%QË“î0,ºÄvräÖm;—e.yÚ\\vË'ŽÀt^?-²ª9¨aI¥ÃÀit#”ºÉq2ñÑÝ;>—{Ê[¸¡Òàå½ËÄ4ŒÉþÉþ•¬+ËeçÁ@^-N^0©y’ò`¤ ^¤ÿü≯)iÛ¨2„–Ï8HEð-ÎB`c\0N%Œ¿6{°È˜öÃX†9îÄ0Èil—×à1½&pÇŽ|%Ð       Ìp„ÄC‡6¬1[\"u…ÒÐC\\eÎV’ÈXwläá4Þ&2Ñ—\0XIÌü¡/2÷eáò3\0µü15W¿Aèa\0ÁaT6V‹Ý0†a0†`ãY†Lf0…U\\Îi…ü0¶rLZXB3¬`y0ùzÿ6ká ѱИ.N¥¦Y:’0sX¤3ЈAœ˜ë4 ö,eYì3Ú(RρŽëÀöâL\$ƒÏé£ä,H‹lí¢ÌkgsR\"ÄI˜`o\"0]ˆÄÅ#Cƃ1S4:hpÑ žì6ÂeÑb41Ãe°™’U؍°¡Z3ŒhÐÅ\"4G†ZWW¾Ó(V•¥1V6!YT5Aˆ}ýƒk+¦¢&¡9Dƒ.ŒU}š;†”-*¶”iº&\$áUø~q'bPDž(ƒ„¢ZFŸ1*   œ¤–”=“Pr…q,Yœ5gòÔzc³Q¦°]CÌÌÈdÈZ&Rv®Œ»™0æVËú#…ó“\rj5‰eP]•CX¸›ê˰í+6¤  ¸‚Y–À¢¦Ôô¿HH<a´ëjK\"ãT­ÛPX±¨ª‡…?aA\n\$Ä™ú1•&›iÉ;)7ð¨ŒHþ.2'+iT‚©.\"¶™l\nڡȤVcO3–6ñmhD/3n4Î|Ôæ>XHRÚ}&soÉEi\rRׁ+l%!»pÖã\$±äù7N¨“¢0ƒ^p¿MÛ O©E-z’gÃ%‚‰Æ1í!k‹G‰Uã¶Ç§s•ª\0lzÇ9ÒÞB.Kë/˜ˆ^=òM7fïLßµƒrFç|  lÑ—âîÎÿÉ)OÌüZR#Ö7r#ŠL©¾0)”êÞ'“„ö\"‰^aÔ•ôS*S‰/×í‰JMbu’“qÜ!’Wöß   ƒïsÒ”&F¼•Ñ‘Ž£èÆ’8¥Ò3¿õƒÒ(é¾9|ôöfQkîçꎝ*‰·p²ò5þ›²    t*íÝÍ©­=3öw\nZOª©­ÄÜ×›S\\äQÅ5›¡NŒhÔþïì#B-›M+®K³Ó•À+K\$=ÿv£6ñæ¢9!€K[NH'ZXíVOD¥;²Ž&ÞM‘ŒBëFnTfçãoôҝKÙ0ûN›Æ¡é´U2¾-’ÍÒD“×û¢ê·Ž›ÆQân\$¹e%ô@—¥-Î\0,\0¤àÕ‰ŽÇ%é-ZYt)f*Ìå+>BÎ8f*¤EÒÓÁwKQ›ë8N<·B\\ÐÐüKv\\;7Ø”tM €2ÐoLGÐNàÉeå2§G@…VèëØ(±Ð@@\0001\0n”˜¤â0à\0€4\0g8¤œâ@\0ÀpZ8ÄÚØP@\r§N\$\0l\0à°YdzŠÀÎ+œ‡8¸ÀyǦÔ\0Î4œ–\0À¤ä™Ç³’@NPœ¦\0Þq¤ä©ÄSŽ'Î@œ¦ml™Êà@N6œF\0âq˜iÌÓŒ@€7\0l\0Âq|å¹Ä€@\0007ZÉ9pœäÊs‰§=Nrœ“9äÄä9ÍæÖç/€7œ£9©€9ÈSŸ§.ÎZœo8˜¸s g?N.\0s9Þq4ä\0S¥'G›PœÃ:.t|âYÄó§'N.\0m8ðZoàÀç8N:œ¯8–sê@\r§6ÎMA:ªudé¹Ö3¨g*NkœI9´¤ê‰×“™'GNg\0`\0Ä´ë¹ÌàgΠœÏ8Îtœå03¡§RN8\0d\0Ör”çéΠ'aN*œß:²ryÇS¦'4\0000\0k;:sÃs¹Ïsžg_Nhœ›;vqÄìyÕÓœ§,Nµœ‡:Ns¤îÕ`\rÑ€c6\0Âstì#û3¿ç(ÎÅœÙ:jwäèÉÎÁ§NÇœÑ9Žsìèùͳ­'8ѝŽ\0æuÜê©Í³˜HìÎ~i;ŠrœçYÄÓ¾€N¾\r:Úr¼èiÝŒ€Na\n\0æy\\ïYÜǧ7O  ž-;w„âiÙ€\rgŒ€b\0j’sTóÙ“Ég#ÎÌž9t”ì©Ç\0@NçœÇ:JryS    ã³Ä€N.ž+8ŒÚ€Iã“۝ÎíœÓ;’rìóÜ@\r§›N˝ƒ:bstå        á““'ÎSW9æsöÙÞ“Ö§fNCœ;ªsôñ¹Ú³œç0ÏJœM=jrÄòâs—çO{6·=ÒrøIà×\0Ï9œÑ9ºz8 “‰'DNÜžË9²tœòéÖSÇçÉOWž—;|ôâiç“›§pÎEž§;yløéÒ \r'“Nâ\0e>†süèyÏÓÓ'SÏ„Ÿk<zxäåyɳØ'µOvžÉ<š}úÙÍóÑçÎÑŸg:F|ŒèiÜ€g­Näža>Jr<âéêi¿§IO“œO<¦{¬ïIÅ“¦çiN:œm<js°‰òóŸ'n-tý9V|Tóiüä§´NŠž#9œŒóÉùÓÓgŠÏ띠 >ÎqÔúyÇ–'‘«›ŸÏ9Bw4öéÜSÊçÇÎ3¥;Š{Dä‰Ý³°'ñÎTž[9yÝ\0ÙÒ3Žç'ÏZžc9V~„ë)Ç-Îç¿NI%>:u¤úÉËóå§iNÁœm<Dû!óÿçÈO\\žñ:òs„øiÙ³Ã'6Î-ŸÇ:vÚ3ß§q% h\0Î}æ9ñ¤Å'êP@Ÿ™<æ{H\n³ÀP4 A:yý\0Ù˳Ï@Ïdœk=ît‰µ        ç3ÖgO³ž›?NuœëZ        Sï€Ï Q=ªyìê¹å´çFN†ž?Ærô÷9òsú§Yιœ‹>&s„å9ÒÔ§ÿÎQ}:xÚ„è%4§cÎí };’u¤ýÉï3¸¨Îtžµ=vMYʳéHÍÐD\0Å:JrÍÉëSÃè/Pži:^€óùß³¿Í­Î» Ï;~z-ãÓ´è0 »:†qÜý™ê“Æ(\$N4¡U<J‚í9ú3âè/OÆ¡q=j~ý  yɳ'£ÏL U;<Ú„ÿ©Çӝ§rOü¡›:*‚¤äÙͳ᧘()œÇ>¾„´ñùÝó‘èXУœ«=’u½Z4ç&ÐÁ Õ:tª\0“³hSOÿœ“B\"‚¬ôyË´5'’φ“9:{Í\n\0”§µÎp ›@sTýÙóS§g8N«¡-?Vv<ÿZSâ¨Î¡¡Y@rÀYô3–'ÖP|ÿ>6ˆµ\rù蓽'oϪœWCRz­©ÓÓàhŽO\0žM9¾s|ïyüS°“P\0m?:†œí)Ê´2§Îj¡‹@â}õùøóõçzNâž›9îvÄö\n³÷@Nœ?³DØŒÜû     ïô-gP7Ÿ!@þq])Ì”='ÊPù¢;~e\0¶çsì'UÐØŸBrvØyë”'¨‚N¬¡×9by4ø\nóÖ§Ïn 9BZqÌù*S’gÑ7¢S9ú„-\0Iæ'/Η ;9‚{DóÊSœ§&Oý WDÚ|Tøj\"3רPé*a;ꃐ4'7ÑdœÏ8þŠõú3¨gÑ“ =2r9¹æ3Õh±Q%çFrs­\0ÙÚtD§—ÏŽžaBòx”ä ØóžèÙN0œó8¶-  Üô_çKÑ4œY>Þ…ÄòZ,ôk(UяžD¾\rŠ0“«hQ²¢E:¶‚ÁS\n3£ÍÐX£=       (9ý³Šç´O;Ÿ#;rŠäçZ\0”g­Ð«¡'D–‹ìùÛ”_çÅOhœYGj€™Í“ðè,Nn£O=bx]9üTUPQ@6q\$íz~§IÑžï@^µ       içó·(«ÏûŸÃDÊ€})þ4d)P²œTT´ô¹Ò4^§Ð\r¡µ<¦ˆâª)´>ç‘Ný£FΉ-!:4N§PÎ.¤>â{”êË‹(ÐwŸýC‚‚­Ií3¦'&R!œcFäóðSè}O“¢Ó>*‘ÔòYèô\rhîΗ¢XŠq\rZS‰gØN;¢IE–†=!ª3t…ç:PHžÇDž‚Uöçt=§V#³MüÜîr\rYâTKè\0ÑÔ¡o8ªyÜøéüSg®Nù¡WGò‰mºTC¨`P#¹EÂ~}       ZMÔ>çKÑz¤…Cr}\$û9ÆsÔÆåO%œë9‘khJQÓ¤g´Q/Ÿ™@ý©ç“ð€’P‚¤#Hʍ¼öê\n´Dè”PK5F†€5Š\0%'àQÙ EòsôüÊOóö§SÑúŸ‘>V‹mº;ThÈÍÒ^±B´     -‰Ì4<§ÖQs¥)>€ Iͳî§ñPB£};ž‰¥&Êû§¿NLžgD‚myÐt\\ççÐòœ¡K\"v¤êúS´IiLÒ2Ÿ«@BsE      ©õ“£§õÏU¡³:²tUªT¬(ÃÏMœÑCš—„í™âSÆ)kÑø¡‡=ºsE)YÛ”b§vRïœá:*|‰Ô3²)=ÎË¢‡:2|Ð\$³Ï'ÝP¥U=:y¥éþ°i9QÿL\"•¥\nt((|Ò‚¢Ë;\"‹uUÃsR \0¨‹½zÃ<•íçÉ/mbʱ™Pzeë1XG/ÂfÀÎbã7)„TÐYZ´Å'~½}˜Ã¶^,O™:´»b8ÚJšÊiŒYá    ˆbÜÉÙ‰­5i°™Y¯L\"¦¸ÌV‹\"Ø5ÐùËÃõc¬¾ŽR@JlÌÊñ¸É4<›°) ÐÁŸSiMn›;ŠnŒ‘é»CõfŸÜˆ€: S b»lˆ Í5Û/)„LB`¾Ì ‡þÎU~èy õôà@ÌSƒ¬1%\\Æ8Jl¿—õ³ìa       Zš½4àZÖ©Ð1_‰‚–&:6”-=˜Ä#§P’^SJ:nñ\r)ÏÂ^_×       yŠý7¶~ÔßW†t]*étfš\"ÖmINmë4öi”`¢©äºlwÁÔ<˸]ñp¦•kÂ÷4~]PZií4%‚ÒÈôL2FörDâ    ¼0‹&KLü,ÇÕûpšÂ3’VÂ-X->¶6S˜°§êV‚<85ÔýZ¥«iƒ312eÐÛƒÓTGîÌØŠ€ÛQû°KbJP3ntäÀµÐQb ‘4ª‚DÊܱ£žæWk’€f+æY¿SaUÙÍ‹yvŠ„pé\0¯‰&;P†16.\r™Á˜—jbÅb›§¶·‰;\0\0I§ÎÙ•ƒ4`ÌÇ¡üT=&œLfœ ¥ÚÂÍšâ6\0Â\0ýEmDJ…ìÑ€)°”'ÒÀ’\$83;,B€ÂÔ[`É3™Ô8ÊiØÃÖÃS„`Æn¢Ó¦Œ¦Ù»—\0„Íé›ÈVÊì\"À¤\0skˆ1¼­šŽ@×´Óù„åOíÜs_Uµ…𸁅f¶ëò/ƒaf»ÀW˜G²~©¬}5’m#ÙŠÓ§ˆJ&\"Hڍ\0aj\rTœ‰MPÒ¤â”jwì#Ø™6cÍC!¥ï¬µ™Þ¯}©#M>¤›\n:•¬‡!¦SV©_Rf¥“Rš•Œÿê]ße­†ä¸3U&êTÔÀby`šU8¡OCŸë²ó¨úË–\rLBxŒ3iû3f&¡J2'°\nõj;iž›å›<ú}\0çC'8˧@‹+J,æ™nC²¦“0á–DW¡§ü\$Ç¥>wÄV‰XVSð°ê|²ÂhÔÌM– V\"ìÛI™'Ä©:VhŸû6ÖŽ,ÊÍ/‹fÚÌØ\n²3Val^¡ß…kMO•€êÅY-/Z¨Ì)bÝÒ\rM<    ‡0ñÀÁÚ&añ˜¬Ú£Õƒß\0M_?Q©'p÷´ëªK€C©qTÅ‹p óËîàß´vªVÉš{TZi5OàØ—Ff!U~õCøeURC¯H    \n%£ShUU*”ªˆÐ.ª¼†EM) ÇµCª…R©Ã…óÌXÙ5—„P¢\$&†…\r\nª¢0‡QUµK7êŒUJ*¸/jb'ê¢,(öu?Ù‡º_§U†WÆk¬QjÀ4iƒžÉà<ûg\n°¬f™ŸU8^ß0±ƒõXI†[—éÓ]ªÃM5­SxSJ°Zɰ<…·U³ËfÕþÇª¼Âh«CRUŒ…9ú´ÐªØÐÕDfpMjª#46jŒ¦©ª°d`Àš=Y6ÄÖÊ´abÜÀµV¥[dUpšU±„7Uõ\\ˆDÕVÉôUÊbèÄq¡MUÆõWª1ÔÄ…sVÖ­T*–°ÓÉß©š«‘TҝK1ª–5eØ2€Y&’́³[¦PQ&\0ÌC…—V~¯SrcQ&%ÕñdL.vµQš°d   ¶eXØ^p™!3U\"…çn…BŠ¥Túa}ª´cT½„\r`Ú’Õx@ÓZcuTêûÆŽ«ó*˜BøªƒWVŸ4/¶uQëLª’½ªª]bZhµSIŽ“ÕƒµUF\n•UB|U„fÕX¬UU‰‹{깕WZ€ÕÕ¬ªÐfˆÕ‹=V«Çc y*ÆŒ­j·Sœ¬oY\n«ˆ-\n®lÆ+̆¾¾«Åd¶<5a˜Õ}ewMª²}Z:¯uaêÁ°'¬´Æb²äöV•b«0±™ƒ7YefjÌ5ej\"Ã(§EWаì/µU*² ù/²VY­=eº±‹þk0ց[V¦´ZÆa}Õ¯¬C0­”'rc÷ªÛ26«qг Ú·µ¥YC³!f™\r®i–‘Õ£ÙZ·­IWù©ug\nÒlMjèÕͬÃZ®®€ZºAëjêUt­_WbµU3†›Õ©ÃÖÕÜ6Ýa:vž+UUæ&½Ž³ƒªÙ0kdÕð­0\r±ýg\n¾µ³ÙZÕ÷«òY‹…g\n¿µ¡Ú—V\0&V6\r…RjÁ5‘kËì« Âò°{Oxwõ«+aT˜­ˆ¿\n\rÓB˜2m<*°A°¬1TòRÿŠÃ•ºØŽSFª¿TŠ\r…bzxKö+xA¶ªÍU:±p\nÆTÉïV3®\rÅoÊÇc«ÕÓ¬{ZÚ·5q:¬•ŠÝVD«EMjqZ\n­õÃàäVQ¬°Âö¸•fŠÌu—Y\"U~¬Á\\f¹SÈuµd«˜Vb®eV\"©;ªä• «7×;¬Ë0¾¹­gJå0Ù«;ÖFªa³ÝYÕ𳡶€¨QYº¦%tÖÑu\n3°‹„Àeuh7U£«¡Ö‘«hÄÆ¥µif~•¦+šÖš\rZq|K\"i,ä¡   Õ¼®ÏVþ´õuÚÔ5ÙkQ×C«“\\úš¥\\úÇuݪå—V­eFµ¥qzÊ•¡+šÖ“¦­]ò»iÊk,+£Â3«Á[º5t:ÙUÞ*ö×C­£]â¶œ\nÚÍ,*ýSB®k[nímØ5•€Wüž‰Ìí3y†CkqC…h6Ì™|%`ŠõÁä띐ƒ¶}ø@õÀ@\$׺«-X:©sOv\0pwÙWºˆFV9š\r3Ðò0JÇWÃ&Ÿ]|\rDPóHÿ—Â\0V*é0ˆ˜³ö«ô昬“§0*¥âýÖŒ`WõšáNÜŠ¬\rý~WÓ•©Ìª­¯ÛRž³“9:ûŒ5©Ì±Xa¬~¥;pò-©ÚÂý&½_8˜ÍS€Éˆ³O{NÜe{†?VøØ\0¯‹Nõ†«\rp\nm™aWÊgæOÊÝ€ë\0L’Éœ±\rg÷`v¼œöx,Y Ì¨Y`Š¿ûÌÕ)ÛÓ5°ZΡ~}yƒ•YÀ/¯™\0œÕl¬ú1fÇmCÌ38'}_&ÁÛ:9Ž13, ³¨¯.ÎNŸ    4ª£Œ¤˜@Á¸inO@yú`ÜX°›UŒ=õªèXl€G°aP<›<›\nì™hTC°ÁOÅ›†vÌ–k€B°¦ÁÖÃu{š}  ¯ÓݬXOf©˜ÚÂÄÄl;€Y¦aÚ«9=›uÁÀ*X‚&Ñ[É¢½|ÊÈö,@€Y+b\"Ãý>›‹çI쪳ay\\)Uu9\nz½jŠÓÐ&`àuL¦›Q,áÓ÷±       aâÄUS\nÈv#lH°Œ®;b6šÕŠ»ZX˜bÇOձ儦1l\\µ¬«8Ã~Åã&ú÷5˜ÃSî±zÒÞºÃP«0ƒß4À°Â2Æ;)º~\\X°Óüg~Um–u†ö-µòk XÛ°åca”Yv‹PplqXßbÚŰV-¶:J­²Æg%T<Õt›VÃÌUf&L©šOû5``çÄH_§c²ÇãÚðÍSÅWϨFMàû؈æbcÓº‰vÏî}vsÐ×    óÕx°–ÊrÈ“3Ú‹5I¼l²\$¥*ÈõBÒín@1p'Oa½³ë9ö'lñª‡½hèPm2{6¬4€(mOf½¥CV€lç«ö…e,ÎzÆýUVuYT?°J^Ê+:0÷̪\"0'¯‘c±‡U•(­WêàÔTh7X>ªµ•eW}I‰5²™eX›1¡éj—YY¨zNÉ\r–{#vZ˜kAù¨\0 Ò\rƒTí5ò¬¸Ù=²àM¢É£¶•±U‚²Å®^¿L %—æ:Ö;ZÙf\$&¯H€öL\n*9U–h9_áºö–¬€àÙՍk[a|A[¦aàÌUhÙvU£\r\"¸6*ùTðª†D‡e«Rr¡3ösì\rÛ@°³RLJÃ}•»5V7ìÙY°„=eæÍu•À\n–;,ÚÙ»²`º ´î’7×o©)Q‚¤ yà\nåªN2~FjÂ=}›-ìÜTž^÷gJÀ\"@J²ÍOZœØ\nj@iŠË;ì2+šAܲ*Âõ³Å{Û;áꬳC:„ ¡•L\"kà\0+€D„µ=³Ÿ[LÄØÕ³±¾ªºdË\r†d̉Œ2oe­`æÐ=Š•ŒwjÔ¬`2Ðq5åëðB«E²\nbsR²©=T:–PlØEĸ©~ÁN¥ûKfƒ¶YYÉYʦi`Á{Û-f¶blÛÙv³oc|=t ”ð¬gÖ°±ÙA†L†rVŽ+ÿÙ¿´jMâÂ;Xöª’€AYÚ´Ò;[H†Ö\rp°Í«-g¹£öYâm1Ʊ‘_©ƒTz‰9XÓÜaÊÉæÀ–’wÄÉ@+2â´Éc^\". \n¥fÂÆ`{]’¾í¦ÒcجÚs´`Øý¥í¢ëO\0í3n^Ó¦¦»J2mŒëØfÚ‚&ÈξԨ[DÚ-´£²Aj-¨X˜ÖŽªt•Ÿ©ÓU¾Ó5®ŒCj¯g%Sýž—bc¶ ÙÒÚ‰©Û1\n½Ã;ÒbÚY¦V~a1jŠÝP«¬v08`L–§í–’dw*|Õóiâ˵§‹ìEìk€VYÀÞ(ÞÈ¢06 ‡@!ÚMªkͬ‡ -\"ÚG´’\0¡À(PSQ¡W3Ís@0Å­U~ç9\$#ÔÍìA:;*Yhë”à¢Ì*Ù›÷-n[ÉlsÈ â –!5 1ª¥ÀÉ€.#¾èÐÀ3Ö¿ÀÇE«<¬J\\'0ÅÂl¥Â\"¨4¾–¢ØPÌ•å0?\0001€d\0^\nŒœêÀÄ´ƒg<\0\\ðTV@’À…Y&°4¡%š;\"]m“ÉÈ\nÏlªr…²Â¼¶Êö/\0klÊ   ½²ëe!KÀ[8“Ml¼)x{gÖÍ-˜\08¶‡lêÙ¨P6ÑÖ[@Ž\0ÂÚbôཇaçcÛQ6AT    )Ԑ–Ìí¤[XœámX7mµà–Ø-—ÛT¶omnÙÍ´Ûe6Õ-žÛh¶m®õ¶KnQm¹[S¶•mÖÚÀKoaÔÛ{¡múƒ-·‰Õ–Õm·[D·mhYmµËmA{)\$@Œ·m¦ÚúIâÛې¶¯I!e¸[k´’-±Ûš·nJ˜·ŠIÛmÇÛo·mÆÜõ¹IÑ­ÔÛ—¶ïn¶Û\rÛjì-—ÏR·nVÝ0ùêVå-–ÛŸž¥nfÝ-´IêVçmàÛ]ž¥mžÞ-»à\$¶é-Ü[·Qo&ÜŒõ+u–ô-«ÏR¶—nÒÙISoVöö[Ú·onöލ·û{€ç7Û„·©m†ß-»ËqVämòÛÀ·›mvß-¼K}öçíòÛÈ·ço²Þ]·‹|¶Ð­ñÛå·§oÞÚ½¾[zöùí—Îo··pÙMÀk{öúî\0Û⸲à5¾ë|gæ[úåpZvE·‰Äöù®\0[a¸7oªÜµÁëevøî\rÛò¸'m†‰À»„6Ëè™Ü ·sDÎà•ÀË…\0In\\2¸Yn†ß;y—     îÏ\0¶ñDÎßýÃËe4Lîܸopâ5Ä9Ø÷\n®Ü¸’²r­¸‡4îܸ§pf⽿ˁàî(ÜA¸mq*ŒÅS°÷®&[D 1pºã4òÛ†7\nî%O’¸ÅoÚâÅ  õ7®-\\O¸¹<¶âõÆÀ½”2n2Û]¡“q¢ãõÂ;‹t2nÜz\0¿C&ã…ÅûvþmñÐɸëqÆä8[6îhdÜE¹ mBâEÉ{‰vÞ.L\\€·?rbã]ÉKŠ—#n+\\ƒžqrrv=Èû‘W\$g\\¨¸Ãr’ãˏ¶ç—ܹ!rÖäõ¹–·(m¢\\µ¹næå­È›×-nÜ«¹kr¨:Èëk6Î.e[_¶Ñs6ä-ÌÛ˜W3nbÜÉYo>Ü­Ìۏ73nK-ÏYcm>æeÍ{o·3îq\\ ¹•qJÜ}Î{š78®iÜ⹫sžæEÎ{›w8®nÜÖ¹¿rÆçMÍzHw8n{Üæ¹õq®æUÆëœ—=îvÜ÷¹ßsêçÏ«žw=î\"€#\0Ó9Òt0—CºÝœé8–vLók™S«.~,»œápªèÝÏë›ó“nŽši¡ýt”ÒŒêÛ¥À(‚Ý+w<.ép:7Lg8\\õ¹•>*é¤ù;§7H®N.ºss®æüôÛ§7Aî Ý     ºƒt.éíÓkšåL.šN:º›tê]Ô£Ó¹î¦ÝDº§uêÔ‹¤ÓÏ.šNoº»t‚æ¼æ««·T.oÏdº»tèôê{«·V.“N?º»u*æüâ{¦“®¹Ý<ºM9bëÕ+®÷Z.»ÝVºïu²éLâ»®w\\.NUºi8–ì=×k¥3ŒîÃÝz»uòì]×ë±w`.–Nh»vé1µ¦“¥îÍÝŠºY:JìÝØë³÷d.ÏÝ’»?vRé|ì˳wf\r(…/ºb’ëËdkîg\\ù»elÆè˰\$—i\0ÝÏ@»iv¢q·K·&š@’]¬&\0 ¦ÝÛk·W8îå]Äœév¾çEÍ•j\nnÑ]½ŸãwBí5Ýk¸ îè]Æ»{sâî•Û+ŸwpîÖÎe»_>¾ï=ÝYÆ3µîóÝÙ»×wntÝÞ{»ÓŒnŽ]仏Gjí{s»¿7Y.ÝP@»óvòï¥Ý¹Òw~nùÒ²»_têïµÛÙõ—îþ]Äž«xð{À÷vç(Þ¼u2ðLãç÷kî§^Ÿãx6ílâÛׄgÆÞ¸ê\0Œ¨ úHt‹î{]ºœ‹tVñHËÅs®ÖGOñ¼OxÄ\ru\$:÷gl^¼uzðõûµ÷X¯ Þ »ušò\rá­WníÝn¼ƒxë•áë®—”®Ï]½ºñyJïTú+µó›¯-ÝÛ»yJð,ò[µ÷c/Oâ¼ÇxFræ;»wf¯]œ¼ÛyV‘ýäk·³Ó.×Ï0¼ëwºŒÕ«µ³Æ.˜ÛT¼û<¶óýç Ë·n.æšQ;x\0ì=Þã°÷pÃÞz&\0vï\$;¹7xV]ÒC»czVî}á›ÇWŸn\nÞš»¯zzôTâkÓ—£€ÝÒC½#w‚èé[¼w¡oGÝæ½5w¢õ}Þ©Ì·¢'Þ}œëzÚõ eÙÌ6Ë Ÿ†psk¢_]pK]kšÖ6½ŠÎ–}t9 ël×x®¡[‚\rÓªèl:­WWC\0”Ou\rsXe0~áOAþ_]öÜ2¸sðÒWC‡ƒT\rƒHëuÍX½\0Kk']½ZÚï\0ض×]®ÝVù³­{XBuÜï}Á{©Ž¾¾föªïˆ˜\$×x´y_J¼tLjòL(«šÃY¯%[2¼¥tÈ7VàØW™gš¿½ÒFö¨•I!ÃP¯Y]ý˜œ%\nvñ    *TBZ.ÝWÅ¡):Zf×Ê%Ù¾YUV¥ïZ¾7±¡:VAfÿh*ùìŠåÎCÌl—U\\íìÊ…U|ogׄ…)\\Òú;{Úµ|ok“XªˆMŠ©ÔÄš¾7¸aËÞÞ`é\nh›\$)Ëê°Ëor1k®_\n†{!º¨—º˜>Õñ½Û{¾û4Êé@\nàÑ€D°Všù•^KÞ5¢áRµ±eVÆ¥wc•pª†2^‚õ0ž÷ý5Kà7Éa4Ww«Éf‚ø-øp\nÜa\\ÖÆ«ÑW²ød-!•E*ö_«É}.ü¼-¶dÛª¢XG…ÈÉ‚žÑ8–rʲ^0ƒõZJµõ]êÌ7ÊXúÖp²!Tf³\rìh`·Í—¹X¢†|겫+V”×ÏY\rÖy¬k}ömmJç•1%þWñ¿‹>¶s«é·¶a’1…˜~ù•­õKÛ·×:Vv‡+{rdÀFJ5_ë0Þç§Çîû!?*ÐÚ¬yÃ9­ZòñDîõ¦o¼±ž¬\nPÊÔ¿ ¾‡¾¿ÌN8[à—ú!Uç­‘Y†Á¿æv”«eÓôÀ&`ù¦FÇoè2¿¿0¶œ7g,u-KXꇈ!—Ì161Õ°à†6ÂΡƒjˆ„Ñ,¿_°CQÎÌãE{ä\r˜Ú†T¬³ÿz£L[þ•3¦kß{f²¦¥BRkÑ Ä³Àrͨd‹!ÕYnóªESá'h<fÕ©ÛVÊ\nt¥éÄò`ƒ)ml…zŠÌ%QÆ£j÷®ÚÒå\$=Àºzió€i/4’[  ÅŠÈJjœ2Zöÿ.º’ƒ£oò¤<“s6¾E+_…wàžHZ}•ÎŽ’0;Œ0Àöûà¡-‡¸“É`mÞŸe´¸åÉ#©‹Á²`ˆrþ¨<’‘jpíÙ­g6–‚ HP&ì&\0005àˆq<\\#~ ¢Í¥£-àˆŒ»3#©³¢Ø\$ã2·_ŒÉ¢Ð`(ËÉäŒS¤Ù\0Å'8¤– ª.’Q`pØKǫ̇j&0N¤Ù~‚…Ãa÷\$›*\"þ¨°Rl0¨°Ûþ¬q™òpŸ¨´îíãP7àÕ’zà\0ø`3ª«È^¶`}ÁÆ%­Ûºyý`x”:«\$•PUS6ýx<FÙ`á¨+Ð~=AVò€\0=6߃ÉÕ{…ŒÎ¥…u_\"ƒërïÉö\0¤lºîôëN@(¸D\rpÈ1+·„@UFÐ7/Mb¿»â.\$¤{®ÿC0‘`õL¤6Œ\$.×KÝ;]‹¨ƒÉm@gkªaï`²ÁPî       ˜wÅ MºT6ësˆÛ»PŒp6[à^p\0/‡8ã-°NŒëð\nÈl&AE⚺ü!\$øG\n°\$¦üŽ¿#¹¸ATöL¦É#Þþà}vé…Œó‡ŒEã¹ái…Š0;¾,,ï¯p¸F©,Y×á¬@?Ø^[øH3† Ã¸à. JœŽH9Ã_\n“¯Ì*Tó}HFZpÅÿfÇîËðba’‚jŠQ™€ 0¡ÚŸ t~tX²†°äxd‘Êħ†ˆ;æh®¯Œ06E¯Ó†lªºåg—AÀè-û†C\rŠ×ð5©ÆÜOa´Ãdºà`æ'6¸kÆáµ\\ƒª     xãÉ8-FÍVp†àab—Øe@Âɪo†QÝ0E°f\"BÀ;*nA‡mÐ*p,;øu@×aÛ6R¿qd°ŒáêSL.l=cfðù,˜¨ë…ÈÄQf±Žã!¨-Œg‡ú2„d˜ÉâÍ£&Sw;`iN`æØvâ€â\0ï\"µR– à†ÀvéÌaÕÀì!6eHQOO0êá>ø!ݾ4X‡bŠûÂ+`¸{ˆŽœ;uwb˜RàÈšT;ñߎ¦ä€CPòV#Š4)]\réÁ7¸Ól°cˆdb|Bö>—Ä…ˆÎÙKŸìHxbďˆý\rõãŠ@¬ÇÚÄ—l¦Bè%,8’öbYм¯IÚæ%KҍÄé3Ä Û  öaæöäŽ/q!¸½q\rƒh2^&èÅÎÅ‹bt\0ÚìQ[+ê±8Êpȍ|ÄòYÏN'‘\0À™A6aaÄü²,x%À\$8hAÎây·õq¬nRžAM@áÄð°Òñ¬RôñqCâ\"\n“}&ˆœbðˆwŠòíÍtptvºi¾b²@ŐŽ|¦§<W¬B¡fâ½`ÔÅ?%'tWÌ/í¨°©ÅdÅmŠÑý“›LObÿq`H¤Ä5œÏþ#ìèÞ]ñF\r.èþ+Ž*ÆøoBñ8EÅ¨Ý£>WÁÑ~1O¿ÁŠÙ+<¬ð#²³Àâ¤Ñ\0ôî0ÄØ3غƒ`X\r@ñŒÞ00¸]±yœÅÔpD¦Ã«`apRâüŒ[‚ÌÄ+uP Ì@;:û-γË\0f8¥eÑc‹lU¹v0áe6\0Übܵ±Œ=þ®¬bøÄÖÓ‡4àÑ…­ (¥\$0yšGç‚û0<¼d@›ã+#èAK”o°#.H1œÄjë‘PÜg/ðQ‘G§–S5%VèÒŽb­t…Ÿ–±\0Nׂ®TLJܱ¡ÁƉ8JØpÁpEm°„r¼¤5`9öM¶C\0_°ª'¨\$ªÀ#¸–E!\\ŸaÀ)•âs ˜¡Û‚çÒ1¸‹\0¦–—›rìn¤Ïq¦€eÆÕˆž7°\n¯Nt#Yf`˜¡™äÁ@Fq¿­íÆ÷L­z4Ô¼o¸Ñ%õ¨õàÚ[ÚZ¢˜ÄŽ\"ÆgáÆ‹qÔMIV靿ë¦f)<]¢§Æo!'Ê—@V˜Ï¦ö\0");}elseif($_GET["file"]=="logo.png"){header("Content-Type: image/png");echo"‰PNG\r\n\n\0\0\0\rIHDR\0\0\09\0\0\09\0\0\0~6ž¶\0\0\0000PLTE\0\0\0ƒ—­+NvYt“s‰£ž®¾´¾ÌÈÒÚü‘üsuüIJ÷ÓÔü/.üü¯±úüúC¥×\0\0\0tRNS\0@æØf\0\0\0  pHYs\0\0\0\0\0šœ\0\0´IDAT8Õ”ÍNÂ@ÇûEáìl϶õ¤p6ˆG.\$=£¥Ç>á        w5r}‚z7²>€‘På#\$Œ³K¡j«7üݶ¿ÌÎÌ?4m•„ˆÑ÷t&î~À3!0“0Šš^„½Af0Þ\"å½í,Êð* ç4¼Œâo¥Eè³è×X(*YÓ󼸠       6       ïPcOW¢ÉÎÜŠm’¬rƒ0Ã~/ áL¨\rXj#ÖmÊÁújÀC€]G¦mæ\0¶}Þˬߑu¼A9ÀX£\nÔØ8¼V±YÄ+ÇD#¨iqÞnKQ8Jà1Q6²æY0§`•ŸP³bQ\\h”~>ó:pSÉ€£¦¼¢ØóGEõQ=îIÏ{’*Ÿ3ë2£7÷\neÊLèBŠ~Ð/R(\$°)Êç‹ —ÁHQn€i•6J¶  <×-.–wÇɪjêVm«êüm¿?SÞH ›vÃÌûñÆ©§Ý\0àÖ^Õq«¶)ª—Û]÷‹U¹92Ñ,;ÿǍî'pøµ£!X˃äÚÜÿLñD.»tæ—ý/wÃÓäìR÷   w­dÓÖr2ïÆ¤ª4[=½E5÷S+ñ—c\0\0\0\0IEND®B`‚";}exit;}if($_GET["script"]=="version"){$o=get_temp_dir()."/adminer.version";@unlink($o);$q=file_open_lock($o);if($q)file_write_unlock($q,serialize(array("signature"=>$_POST["signature"],"version"=>$_POST["version"])));exit;}if(!$_SERVER["REQUEST_URI"])$_SERVER["REQUEST_URI"]=$_SERVER["ORIG_PATH_INFO"];if(!strpos($_SERVER["REQUEST_URI"],'?')&&$_SERVER["QUERY_STRING"]!="")$_SERVER["REQUEST_URI"].="?$_SERVER[QUERY_STRING]";if($_SERVER["HTTP_X_FORWARDED_PREFIX"])$_SERVER["REQUEST_URI"]=$_SERVER["HTTP_X_FORWARDED_PREFIX"].$_SERVER["REQUEST_URI"];define('Adminer\HTTPS',($_SERVER["HTTPS"]&&strcasecmp($_SERVER["HTTPS"],"off"))||ini_bool("session.cookie_secure"));@ini_set("session.use_trans_sid",'0');if(!defined("SID")){session_cache_limiter("");session_name("adminer_sid");session_set_cookie_params(0,preg_replace('~\?.*~','',$_SERVER["REQUEST_URI"]),"",HTTPS,true);session_start();}remove_slashes(array(&$_GET,&$_POST,&$_COOKIE),$ad);if(function_exists("get_magic_quotes_runtime")&&get_magic_quotes_runtime())set_magic_quotes_runtime(false);@set_time_limit(0);@ini_set("precision",'15');function
  205. lang($u,$Jf=null){$ua=func_get_args();$ua[0]=$u;return
  206. call_user_func_array('Adminer\lang_format',$ua);}function
  207. lang_format($dj,$Jf=null){if(is_array($dj)){$Ng=($Jf==1?0:1);$dj=$dj[$Ng];}$dj=str_replace("'",'’',$dj);$ua=func_get_args();array_shift($ua);$md=str_replace("%d","%s",$dj);if($md!=$dj)$ua[0]=format_number($Jf);return
  208. vsprintf($md,$ua);}define('Adminer\LANG','en');abstract
  209. class
  210. SqlDb{static$instance;var$extension;var$flavor='';var$server_info;var$affected_rows=0;var$info='';var$errno=0;var$error='';protected$multi;abstract
  211. function
  212. attach($N,$V,$F);abstract
  213. function
  214. quote($Q);abstract
  215. function
  216. select_db($Nb);abstract
  217. function
  218. query($H,$oj=false);function
  219. multi_query($H){return$this->multi=$this->query($H);}function
  220. store_result(){return$this->multi;}function
  221. next_result(){return
  222. false;}}if(extension_loaded('pdo')){abstract
  223. class
  224. PdoDb
  225. extends
  226. SqlDb{protected$pdo;function
  227. dsn($nc,$V,$F,array$bg=array()){$bg[\PDO::ATTR_ERRMODE]=\PDO::ERRMODE_SILENT;$bg[\PDO::ATTR_STATEMENT_CLASS]=array('Adminer\PdoResult');try{$this->pdo=new
  228. \PDO($nc,$V,$F,$bg);}catch(\Exception$Hc){return$Hc->getMessage();}$this->server_info=@$this->pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);return'';}function
  229. quote($Q){return$this->pdo->quote($Q);}function
  230. query($H,$oj=false){$I=$this->pdo->query($H);$this->error="";if(!$I){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error='Unknown error.';return
  231. false;}$this->store_result($I);return$I;}function
  232. store_result($I=null){if(!$I){$I=$this->multi;if(!$I)return
  233. false;}if($I->columnCount()){$I->num_rows=$I->rowCount();return$I;}$this->affected_rows=$I->rowCount();return
  234. true;}function
  235. next_result(){$I=$this->multi;if(!is_object($I))return
  236. false;$I->_offset=0;return@$I->nextRowset();}}class
  237. PdoResult
  238. extends
  239. \PDOStatement{var$_offset=0,$num_rows;function
  240. fetch_assoc(){return$this->fetch_array(\PDO::FETCH_ASSOC);}function
  241. fetch_row(){return$this->fetch_array(\PDO::FETCH_NUM);}private
  242. function
  243. fetch_array($tf){$J=$this->fetch($tf);return($J?array_map(array($this,'unresource'),$J):$J);}private
  244. function
  245. unresource($X){return(is_resource($X)?stream_get_contents($X):$X);}function
  246. fetch_field(){$K=(object)$this->getColumnMeta($this->_offset++);$U=$K->pdo_type;$K->type=($U==\PDO::PARAM_INT?0:15);$K->charsetnr=($U==\PDO::PARAM_LOB||(isset($K->flags)&&in_array("blob",(array)$K->flags))?63:0);return$K;}function
  247. seek($C){for($s=0;$s<$C;$s++)$this->fetch();}}}function
  248. add_driver($t,$B){SqlDriver::$drivers[$t]=$B;}function
  249. get_driver($t){return
  250. SqlDriver::$drivers[$t];}abstract
  251. class
  252. SqlDriver{static$instance;static$drivers=array();static$extensions=array();static$jush;protected$conn;protected$types=array();var$insertFunctions=array();var$editFunctions=array();var$unsigned=array();var$operators=array();var$functions=array();var$grouping=array();var$onActions="RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT";var$partitionBy=array();var$inout="IN|OUT|INOUT";var$enumLength="'(?:''|[^'\\\\]|\\\\.)*'";var$generated=array();static
  253. function
  254. connect($N,$V,$F){$f=new
  255. Db;return($f->attach($N,$V,$F)?:$f);}function
  256. __construct(Db$f){$this->conn=$f;}function
  257. types(){return
  258. call_user_func_array('array_merge',array_values($this->types));}function
  259. structuredTypes(){return
  260. array_map('array_keys',$this->types);}function
  261. enumLength(array$m){}function
  262. unconvertFunction(array$m){}function
  263. select($R,array$M,array$Z,array$wd,array$dg=array(),$z=1,$D=0,$Wg=false){$ue=(count($wd)<count($M));$H=adminer()->selectQueryBuild($M,$Z,$wd,$dg,$z,$D);if(!$H)$H="SELECT".limit(($_GET["page"]!="last"&&$z&&$wd&&$ue&&JUSH=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$M)."\nFROM ".table($R),($Z?"\nWHERE ".implode(" AND ",$Z):"").($wd&&$ue?"\nGROUP BY ".implode(", ",$wd):"").($dg?"\nORDER BY ".implode(", ",$dg):""),$z,($D?$z*$D:0),"\n");$oi=microtime(true);$J=$this->conn->query($H);if($Wg)echo
  264. adminer()->selectQuery($H,$oi,!$J);return$J;}function
  265. delete($R,$fh,$z=0){$H="FROM ".table($R);return
  266. queries("DELETE".($z?limit1($R,$H,$fh):" $H$fh"));}function
  267. update($R,array$O,$fh,$z=0,$Rh="\n"){$Ij=array();foreach($O
  268. as$x=>$X)$Ij[]="$x = $X";$H=table($R)." SET$Rh".implode(",$Rh",$Ij);return
  269. queries("UPDATE".($z?limit1($R,$H,$fh,$Rh):" $H$fh"));}function
  270. insert($R,array$O){return
  271. queries("INSERT INTO ".table($R).($O?" (".implode(", ",array_keys($O)).")\nVALUES (".implode(", ",$O).")":" DEFAULT VALUES").$this->insertReturning($R));}function
  272. insertReturning($R){return"";}function
  273. insertUpdate($R,array$L,array$G){return
  274. false;}function
  275. begin(){return
  276. queries("BEGIN");}function
  277. commit(){return
  278. queries("COMMIT");}function
  279. rollback(){return
  280. queries("ROLLBACK");}function
  281. slowQuery($H,$Qi){}function
  282. convertSearch($u,array$X,array$m){return$u;}function
  283. value($X,array$m){return(method_exists($this->conn,'value')?$this->conn->value($X,$m):$X);}function
  284. quoteBinary($Dh){return
  285. q($Dh);}function
  286. warnings(){}function
  287. tableHelp($B,$ye=false){}function
  288. inheritsFrom($R){return
  289. array();}function
  290. inheritedTables($R){return
  291. array();}function
  292. partitionsInfo($R){return
  293. array();}function
  294. hasCStyleEscapes(){return
  295. false;}function
  296. engines(){return
  297. array();}function
  298. supportsIndex(array$S){return!is_view($S);}function
  299. indexAlgorithms(array$yi){return
  300. array();}function
  301. checkConstraints($R){return
  302. get_key_vals("SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE
  303. FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c
  304. JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME
  305. WHERE c.CONSTRAINT_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
  306. AND t.TABLE_NAME = ".q($R)."
  307. AND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'",$this->conn);}function
  308. allFields(){$J=array();if(DB!=""){foreach(get_rows("SELECT TABLE_NAME AS tab, COLUMN_NAME AS field, IS_NULLABLE AS nullable, DATA_TYPE AS type, CHARACTER_MAXIMUM_LENGTH AS length".(JUSH=='sql'?", COLUMN_KEY = 'PRI' AS `primary`":"")."
  309. FROM INFORMATION_SCHEMA.COLUMNS
  310. WHERE TABLE_SCHEMA = ".q($_GET["ns"]!=""?$_GET["ns"]:DB)."
  311. ORDER BY TABLE_NAME, ORDINAL_POSITION",$this->conn)as$K){$K["null"]=($K["nullable"]=="YES");$J[$K["tab"]][]=$K;}}return$J;}}add_driver("sqlite","SQLite");if(isset($_GET["sqlite"])){define('Adminer\DRIVER',"sqlite");if(class_exists("SQLite3")&&$_GET["ext"]!="pdo"){abstract
  312. class
  313. SqliteDb
  314. extends
  315. SqlDb{var$extension="SQLite3";private$link;function
  316. attach($o,$V,$F){$this->link=new
  317. \SQLite3($o);$Lj=$this->link->version();$this->server_info=$Lj["versionString"];return'';}function
  318. query($H,$oj=false){$I=@$this->link->query($H);$this->error="";if(!$I){$this->errno=$this->link->lastErrorCode();$this->error=$this->link->lastErrorMsg();return
  319. false;}elseif($I->numColumns())return
  320. new
  321. Result($I);$this->affected_rows=$this->link->changes();return
  322. true;}function
  323. quote($Q){return(is_utf8($Q)?"'".$this->link->escapeString($Q)."'":"x'".first(unpack('H*',$Q))."'");}}class
  324. Result{var$num_rows;private$result,$offset=0;function
  325. __construct($I){$this->result=$I;}function
  326. fetch_assoc(){return$this->result->fetchArray(SQLITE3_ASSOC);}function
  327. fetch_row(){return$this->result->fetchArray(SQLITE3_NUM);}function
  328. fetch_field(){$d=$this->offset++;$U=$this->result->columnType($d);return(object)array("name"=>$this->result->columnName($d),"type"=>($U==SQLITE3_TEXT?15:0),"charsetnr"=>($U==SQLITE3_BLOB?63:0),);}function
  329. __destruct(){$this->result->finalize();}}}elseif(extension_loaded("pdo_sqlite")){abstract
  330. class
  331. SqliteDb
  332. extends
  333. PdoDb{var$extension="PDO_SQLite";function
  334. attach($o,$V,$F){return$this->dsn(DRIVER.":$o","","");}}}if(class_exists('Adminer\SqliteDb')){class
  335. Db
  336. extends
  337. SqliteDb{function
  338. attach($o,$V,$F){parent::attach($o,$V,$F);$this->query("PRAGMA foreign_keys = 1");$this->query("PRAGMA busy_timeout = 500");return'';}function
  339. select_db($o){if(is_readable($o)&&$this->query("ATTACH ".$this->quote(preg_match("~(^[/\\\\]|:)~",$o)?$o:dirname($_SERVER["SCRIPT_FILENAME"])."/$o")." AS a"))return!self::attach($o,'','');return
  340. false;}}}class
  341. Driver
  342. extends
  343. SqlDriver{static$extensions=array("SQLite3","PDO_SQLite");static$jush="sqlite";protected$types=array(array("integer"=>0,"real"=>0,"numeric"=>0,"text"=>0,"blob"=>0));var$insertFunctions=array();var$editFunctions=array("integer|real|numeric"=>"+/-","text"=>"||",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("hex","length","lower","round","unixepoch","upper");var$grouping=array("avg","count","count distinct","group_concat","max","min","sum");static
  344. function
  345. connect($N,$V,$F){if($F!="")return'Database does not support password.';return
  346. parent::connect(":memory:","","");}function
  347. __construct(Db$f){parent::__construct($f);if(min_version(3.31,0,$f))$this->generated=array("STORED","VIRTUAL");}function
  348. structuredTypes(){return
  349. array_keys($this->types[0]);}function
  350. insertUpdate($R,array$L,array$G){$Ij=array();foreach($L
  351. as$O)$Ij[]="(".implode(", ",$O).")";return
  352. queries("REPLACE INTO ".table($R)." (".implode(", ",array_keys(reset($L))).") VALUES\n".implode(",\n",$Ij));}function
  353. tableHelp($B,$ye=false){if($B=="sqlite_sequence")return"fileformat2.html#seqtab";if($B=="sqlite_master")return"fileformat2.html#$B";}function
  354. checkConstraints($R){preg_match_all('~ CHECK *(\( *(((?>[^()]*[^() ])|(?1))*) *\))~',get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($R),0,$this->conn),$Ze);return
  355. array_combine($Ze[2],$Ze[2]);}function
  356. allFields(){$J=array();foreach(tables_list()as$R=>$U){foreach(fields($R)as$m)$J[$R][]=$m;}return$J;}}function
  357. idf_escape($u){return'"'.str_replace('"','""',$u).'"';}function
  358. table($u){return
  359. idf_escape($u);}function
  360. get_databases($hd){return
  361. array();}function
  362. limit($H,$Z,$z,$C=0,$Rh=" "){return" $H$Z".($z?$Rh."LIMIT $z".($C?" OFFSET $C":""):"");}function
  363. limit1($R,$H,$Z,$Rh="\n"){return(preg_match('~^INTO~',$H)||get_val("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')")?limit($H,$Z,1,0,$Rh):" $H WHERE rowid = (SELECT rowid FROM ".table($R).$Z.$Rh."LIMIT 1)");}function
  364. db_collation($j,$jb){return
  365. get_val("PRAGMA encoding");}function
  366. logged_user(){return
  367. get_current_user();}function
  368. tables_list(){return
  369. get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name");}function
  370. count_tables($i){return
  371. array();}function
  372. table_status($B=""){$J=array();foreach(get_rows("SELECT name AS Name, type AS Engine, 'rowid' AS Oid, '' AS Auto_increment FROM sqlite_master WHERE type IN ('table', 'view') ".($B!=""?"AND name = ".q($B):"ORDER BY name"))as$K){$K["Rows"]=get_val("SELECT COUNT(*) FROM ".idf_escape($K["Name"]));$J[$K["Name"]]=$K;}foreach(get_rows("SELECT * FROM sqlite_sequence".($B!=""?" WHERE name = ".q($B):""),null,"")as$K)$J[$K["name"]]["Auto_increment"]=$K["seq"];return$J;}function
  373. is_view($S){return$S["Engine"]=="view";}function
  374. fk_support($S){return!get_val("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");}function
  375. fields($R){$J=array();$G="";foreach(get_rows("PRAGMA table_".(min_version(3.31)?"x":"")."info(".table($R).")")as$K){$B=$K["name"];$U=strtolower($K["type"]);$k=$K["dflt_value"];$J[$B]=array("field"=>$B,"type"=>(preg_match('~int~i',$U)?"integer":(preg_match('~char|clob|text~i',$U)?"text":(preg_match('~blob~i',$U)?"blob":(preg_match('~real|floa|doub~i',$U)?"real":"numeric")))),"full_type"=>$U,"default"=>(preg_match("~^'(.*)'$~",$k,$A)?str_replace("''","'",$A[1]):($k=="NULL"?null:$k)),"null"=>!$K["notnull"],"privileges"=>array("select"=>1,"insert"=>1,"update"=>1,"where"=>1,"order"=>1),"primary"=>$K["pk"],);if($K["pk"]){if($G!="")$J[$G]["auto_increment"]=false;elseif(preg_match('~^integer$~i',$U))$J[$B]["auto_increment"]=true;$G=$B;}}$ii=get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($R));$u='(("[^"]*+")+|[a-z0-9_]+)';preg_match_all('~'.$u.'\s+text\s+COLLATE\s+(\'[^\']+\'|\S+)~i',$ii,$Ze,PREG_SET_ORDER);foreach($Ze
  376. as$A){$B=str_replace('""','"',preg_replace('~^"|"$~','',$A[1]));if($J[$B])$J[$B]["collation"]=trim($A[3],"'");}preg_match_all('~'.$u.'\s.*GENERATED ALWAYS AS \((.+)\) (STORED|VIRTUAL)~i',$ii,$Ze,PREG_SET_ORDER);foreach($Ze
  377. as$A){$B=str_replace('""','"',preg_replace('~^"|"$~','',$A[1]));$J[$B]["default"]=$A[3];$J[$B]["generated"]=strtoupper($A[4]);}return$J;}function
  378. indexes($R,$g=null){$g=connection($g);$J=array();$ii=get_val("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ".q($R),0,$g);if(preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i',$ii,$A)){$J[""]=array("type"=>"PRIMARY","columns"=>array(),"lengths"=>array(),"descs"=>array());preg_match_all('~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i',$A[1],$Ze,PREG_SET_ORDER);foreach($Ze
  379. as$A){$J[""]["columns"][]=idf_unescape($A[2]).$A[4];$J[""]["descs"][]=(preg_match('~DESC~i',$A[5])?'1':null);}}if(!$J){foreach(fields($R)as$B=>$m){if($m["primary"])$J[""]=array("type"=>"PRIMARY","columns"=>array($B),"lengths"=>array(),"descs"=>array(null));}}$mi=get_key_vals("SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = ".q($R),$g);foreach(get_rows("PRAGMA index_list(".table($R).")",$g)as$K){$B=$K["name"];$v=array("type"=>($K["unique"]?"UNIQUE":"INDEX"));$v["lengths"]=array();$v["descs"]=array();foreach(get_rows("PRAGMA index_info(".idf_escape($B).")",$g)as$Ch){$v["columns"][]=$Ch["name"];$v["descs"][]=null;}if(preg_match('~^CREATE( UNIQUE)? INDEX '.preg_quote(idf_escape($B).' ON '.idf_escape($R),'~').' \((.*)\)$~i',$mi[$B],$qh)){preg_match_all('/("[^"]*+")+( DESC)?/',$qh[2],$Ze);foreach($Ze[2]as$x=>$X){if($X)$v["descs"][$x]='1';}}if(!$J[""]||$v["type"]!="UNIQUE"||$v["columns"]!=$J[""]["columns"]||$v["descs"]!=$J[""]["descs"]||!preg_match("~^sqlite_~",$B))$J[$B]=$v;}return$J;}function
  380. foreign_keys($R){$J=array();foreach(get_rows("PRAGMA foreign_key_list(".table($R).")")as$K){$p=&$J[$K["id"]];if(!$p)$p=$K;$p["source"][]=$K["from"];$p["target"][]=$K["to"];}return$J;}function
  381. view($B){return
  382. array("select"=>preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\s+~iU','',get_val("SELECT sql FROM sqlite_master WHERE type = 'view' AND name = ".q($B))));}function
  383. collations(){return(isset($_GET["create"])?get_vals("PRAGMA collation_list",1):array());}function
  384. information_schema($j){return
  385. false;}function
  386. error(){return
  387. h(connection()->error);}function
  388. check_sqlite_name($B){$Pc="db|sdb|sqlite";if(!preg_match("~^[^\\0]*\\.($Pc)\$~",$B)){connection()->error=sprintf('Please use one of the extensions %s.',str_replace("|",", ",$Pc));return
  389. false;}return
  390. true;}function
  391. create_database($j,$c){if(file_exists($j)){connection()->error='File exists.';return
  392. false;}if(!check_sqlite_name($j))return
  393. false;try{$_=new
  394. Db();$_->attach($j,'','');}catch(\Exception$Hc){connection()->error=$Hc->getMessage();return
  395. false;}$_->query('PRAGMA encoding = "UTF-8"');$_->query('CREATE TABLE adminer (i)');$_->query('DROP TABLE adminer');return
  396. true;}function
  397. drop_databases($i){connection()->attach(":memory:",'','');foreach($i
  398. as$j){if(!@unlink($j)){connection()->error='File exists.';return
  399. false;}}return
  400. true;}function
  401. rename_database($B,$c){if(!check_sqlite_name($B))return
  402. false;connection()->attach(":memory:",'','');connection()->error='File exists.';return@rename(DB,$B);}function
  403. auto_increment(){return" PRIMARY KEY AUTOINCREMENT";}function
  404. alter_table($R,$B,$n,$jd,$ob,$xc,$c,$_a,$E){$Bj=($R==""||$jd);foreach($n
  405. as$m){if($m[0]!=""||!$m[1]||$m[2]){$Bj=true;break;}}$b=array();$og=array();foreach($n
  406. as$m){if($m[1]){$b[]=($Bj?$m[1]:"ADD ".implode($m[1]));if($m[0]!="")$og[$m[0]]=$m[1][0];}}if(!$Bj){foreach($b
  407. as$X){if(!queries("ALTER TABLE ".table($R)." $X"))return
  408. false;}if($R!=$B&&!queries("ALTER TABLE ".table($R)." RENAME TO ".table($B)))return
  409. false;}elseif(!recreate_table($R,$B,$b,$og,$jd,$_a))return
  410. false;if($_a){queries("BEGIN");queries("UPDATE sqlite_sequence SET seq = $_a WHERE name = ".q($B));if(!connection()->affected_rows)queries("INSERT INTO sqlite_sequence (name, seq) VALUES (".q($B).", $_a)");queries("COMMIT");}return
  411. true;}function
  412. recreate_table($R,$B,array$n,array$og,array$jd,$_a="",$w=array(),$jc="",$ja=""){if($R!=""){if(!$n){foreach(fields($R)as$x=>$m){if($w)$m["auto_increment"]=0;$n[]=process_field($m,$m);$og[$x]=idf_escape($x);}}$Vg=false;foreach($n
  413. as$m){if($m[6])$Vg=true;}$lc=array();foreach($w
  414. as$x=>$X){if($X[2]=="DROP"){$lc[$X[1]]=true;unset($w[$x]);}}foreach(indexes($R)as$Be=>$v){$e=array();foreach($v["columns"]as$x=>$d){if(!$og[$d])continue
  415. 2;$e[]=$og[$d].($v["descs"][$x]?" DESC":"");}if(!$lc[$Be]){if($v["type"]!="PRIMARY"||!$Vg)$w[]=array($v["type"],$Be,$e);}}foreach($w
  416. as$x=>$X){if($X[0]=="PRIMARY"){unset($w[$x]);$jd[]="  PRIMARY KEY (".implode(", ",$X[2]).")";}}foreach(foreign_keys($R)as$Be=>$p){foreach($p["source"]as$x=>$d){if(!$og[$d])continue
  417. 2;$p["source"][$x]=idf_unescape($og[$d]);}if(!isset($jd[" $Be"]))$jd[]=" ".format_foreign_key($p);}queries("BEGIN");}$Ua=array();foreach($n
  418. as$m){if(preg_match('~GENERATED~',$m[3]))unset($og[array_search($m[0],$og)]);$Ua[]="  ".implode($m);}$Ua=array_merge($Ua,array_filter($jd));foreach(driver()->checkConstraints($R)as$Wa){if($Wa!=$jc)$Ua[]="  CHECK ($Wa)";}if($ja)$Ua[]="  CHECK ($ja)";$Ki=($R==$B?"adminer_$B":$B);if(!queries("CREATE TABLE ".table($Ki)." (\n".implode(",\n",$Ua)."\n)"))return
  419. false;if($R!=""){if($og&&!queries("INSERT INTO ".table($Ki)." (".implode(", ",$og).") SELECT ".implode(", ",array_map('Adminer\idf_escape',array_keys($og)))." FROM ".table($R)))return
  420. false;$kj=array();foreach(triggers($R)as$ij=>$Ri){$hj=trigger($ij,$R);$kj[]="CREATE TRIGGER ".idf_escape($ij)." ".implode(" ",$Ri)." ON ".table($B)."\n$hj[Statement]";}$_a=$_a?"":get_val("SELECT seq FROM sqlite_sequence WHERE name = ".q($R));if(!queries("DROP TABLE ".table($R))||($R==$B&&!queries("ALTER TABLE ".table($Ki)." RENAME TO ".table($B)))||!alter_indexes($B,$w))return
  421. false;if($_a)queries("UPDATE sqlite_sequence SET seq = $_a WHERE name = ".q($B));foreach($kj
  422. as$hj){if(!queries($hj))return
  423. false;}queries("COMMIT");}return
  424. true;}function
  425. index_sql($R,$U,$B,$e){return"CREATE $U ".($U!="INDEX"?"INDEX ":"").idf_escape($B!=""?$B:uniqid($R."_"))." ON ".table($R)." $e";}function
  426. alter_indexes($R,$b){foreach($b
  427. as$G){if($G[0]=="PRIMARY")return
  428. recreate_table($R,$R,array(),array(),array(),"",$b);}foreach(array_reverse($b)as$X){if(!queries($X[2]=="DROP"?"DROP INDEX ".idf_escape($X[1]):index_sql($R,$X[0],$X[1],"(".implode(", ",$X[2]).")")))return
  429. false;}return
  430. true;}function
  431. truncate_tables($T){return
  432. apply_queries("DELETE FROM",$T);}function
  433. drop_views($Nj){return
  434. apply_queries("DROP VIEW",$Nj);}function
  435. drop_tables($T){return
  436. apply_queries("DROP TABLE",$T);}function
  437. move_tables($T,$Nj,$Ii){return
  438. false;}function
  439. trigger($B,$R){if($B=="")return
  440. array("Statement"=>"BEGIN\n\t;\nEND");$u='(?:[^`"\s]+|`[^`]*`|"[^"]*")+';$jj=trigger_options();preg_match("~^CREATE\\s+TRIGGER\\s*$u\\s*(".implode("|",$jj["Timing"]).")\\s+([a-z]+)(?:\\s+OF\\s+($u))?\\s+ON\\s*$u\\s*(?:FOR\\s+EACH\\s+ROW\\s)?(.*)~is",get_val("SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = ".q($B)),$A);$Lf=$A[3];return
  441. array("Timing"=>strtoupper($A[1]),"Event"=>strtoupper($A[2]).($Lf?" OF":""),"Of"=>idf_unescape($Lf),"Trigger"=>$B,"Statement"=>$A[4],);}function
  442. triggers($R){$J=array();$jj=trigger_options();foreach(get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = ".q($R))as$K){preg_match('~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*('.implode("|",$jj["Timing"]).')\s*(.*?)\s+ON\b~i',$K["sql"],$A);$J[$K["name"]]=array($A[1],$A[2]);}return$J;}function
  443. trigger_options(){return
  444. array("Timing"=>array("BEFORE","AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
  445. begin(){return
  446. queries("BEGIN");}function
  447. last_id($I){return
  448. get_val("SELECT LAST_INSERT_ROWID()");}function
  449. explain($f,$H){return$f->query("EXPLAIN QUERY PLAN $H");}function
  450. found_rows($S,$Z){}function
  451. types(){return
  452. array();}function
  453. create_sql($R,$_a,$si){$J=get_val("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = ".q($R));foreach(indexes($R)as$B=>$v){if($B=='')continue;$J
  454. .=";\n\n".index_sql($R,$v['type'],$B,"(".implode(", ",array_map('Adminer\idf_escape',$v['columns'])).")");}return$J;}function
  455. truncate_sql($R){return"DELETE FROM ".table($R);}function
  456. use_sql($Nb,$si=""){}function
  457. trigger_sql($R){return
  458. implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = ".q($R)));}function
  459. show_variables(){$J=array();foreach(get_rows("PRAGMA pragma_list")as$K){$B=$K["name"];if($B!="pragma_list"&&$B!="compile_options"){$J[$B]=array($B,'');foreach(get_rows("PRAGMA $B")as$K)$J[$B][1].=implode(", ",$K)."\n";}}return$J;}function
  460. show_status(){$J=array();foreach(get_vals("PRAGMA compile_options")as$ag)$J[]=explode("=",$ag,2)+array('','');return$J;}function
  461. convert_field($m){}function
  462. unconvert_field($m,$J){return$J;}function
  463. support($Uc){return
  464. preg_match('~^(check|columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~',$Uc);}}add_driver("pgsql","PostgreSQL");if(isset($_GET["pgsql"])){define('Adminer\DRIVER',"pgsql");if(extension_loaded("pgsql")&&$_GET["ext"]!="pdo"){class
  465. PgsqlDb
  466. extends
  467. SqlDb{var$extension="PgSQL";var$timeout=0;private$link,$string,$database=true;function
  468. _error($Cc,$l){if(ini_bool("html_errors"))$l=html_entity_decode(strip_tags($l));$l=preg_replace('~^[^:]*: ~','',$l);$this->error=$l;}function
  469. attach($N,$V,$F){$j=adminer()->database();set_error_handler(array($this,'_error'));list($Md,$Mg)=host_port(addcslashes($N,"'\\"));$this->string="host='$Md'".($Mg?" port='$Mg'":"")." user='".addcslashes($V,"'\\")."' password='".addcslashes($F,"'\\")."'";$ni=adminer()->connectSsl();if(isset($ni["mode"]))$this->string
  470. .=" sslmode='".$ni["mode"]."'";$this->link=@pg_connect("$this->string dbname='".($j!=""?addcslashes($j,"'\\"):"postgres")."'",PGSQL_CONNECT_FORCE_NEW);if(!$this->link&&$j!=""){$this->database=false;$this->link=@pg_connect("$this->string dbname='postgres'",PGSQL_CONNECT_FORCE_NEW);}restore_error_handler();if($this->link)pg_set_client_encoding($this->link,"UTF8");return($this->link?'':$this->error);}function
  471. quote($Q){return(function_exists('pg_escape_literal')?pg_escape_literal($this->link,$Q):"'".pg_escape_string($this->link,$Q)."'");}function
  472. value($X,array$m){return($m["type"]=="bytea"&&$X!==null?pg_unescape_bytea($X):$X);}function
  473. select_db($Nb){if($Nb==adminer()->database())return$this->database;$J=@pg_connect("$this->string dbname='".addcslashes($Nb,"'\\")."'",PGSQL_CONNECT_FORCE_NEW);if($J)$this->link=$J;return$J;}function
  474. close(){$this->link=@pg_connect("$this->string dbname='postgres'");}function
  475. query($H,$oj=false){$I=@pg_query($this->link,$H);$this->error="";if(!$I){$this->error=pg_last_error($this->link);$J=false;}elseif(!pg_num_fields($I)){$this->affected_rows=pg_affected_rows($I);$J=true;}else$J=new
  476. Result($I);if($this->timeout){$this->timeout=0;$this->query("RESET statement_timeout");}return$J;}function
  477. warnings(){return
  478. h(pg_last_notice($this->link));}function
  479. copyFrom($R,array$L){$this->error='';set_error_handler(function($Cc,$l){$this->error=(ini_bool('html_errors')?html_entity_decode($l):$l);return
  480. true;});$J=pg_copy_from($this->link,$R,$L);restore_error_handler();return$J;}}class
  481. Result{var$num_rows;private$result,$offset=0;function
  482. __construct($I){$this->result=$I;$this->num_rows=pg_num_rows($I);}function
  483. fetch_assoc(){return
  484. pg_fetch_assoc($this->result);}function
  485. fetch_row(){return
  486. pg_fetch_row($this->result);}function
  487. fetch_field(){$d=$this->offset++;$J=new
  488. \stdClass;$J->orgtable=pg_field_table($this->result,$d);$J->name=pg_field_name($this->result,$d);$U=pg_field_type($this->result,$d);$J->type=(preg_match(number_type(),$U)?0:15);$J->charsetnr=($U=="bytea"?63:0);return$J;}function
  489. __destruct(){pg_free_result($this->result);}}}elseif(extension_loaded("pdo_pgsql")){class
  490. PgsqlDb
  491. extends
  492. PdoDb{var$extension="PDO_PgSQL";var$timeout=0;function
  493. attach($N,$V,$F){$j=adminer()->database();list($Md,$Mg)=host_port(addcslashes($N,"'\\"));$nc="pgsql:host='$Md'".($Mg?" port='$Mg'":"")." client_encoding=utf8 dbname='".($j!=""?addcslashes($j,"'\\"):"postgres")."'";$ni=adminer()->connectSsl();if(isset($ni["mode"]))$nc
  494. .=" sslmode='".$ni["mode"]."'";return$this->dsn($nc,$V,$F);}function
  495. select_db($Nb){return(adminer()->database()==$Nb);}function
  496. query($H,$oj=false){$J=parent::query($H,$oj);if($this->timeout){$this->timeout=0;parent::query("RESET statement_timeout");}return$J;}function
  497. warnings(){}function
  498. copyFrom($R,array$L){$J=$this->pdo->pgsqlCopyFromArray($R,$L);$this->error=idx($this->pdo->errorInfo(),2)?:'';return$J;}function
  499. close(){}}}if(class_exists('Adminer\PgsqlDb')){class
  500. Db
  501. extends
  502. PgsqlDb{function
  503. multi_query($H){if(preg_match('~\bCOPY\s+(.+?)\s+FROM\s+stdin;\n?(.*)\n\\\\\.$~is',str_replace("\r\n","\n",$H),$A)){$L=explode("\n",$A[2]);$this->affected_rows=count($L);return$this->copyFrom($A[1],$L);}return
  504. parent::multi_query($H);}}}class
  505. Driver
  506. extends
  507. SqlDriver{static$extensions=array("PgSQL","PDO_PgSQL");static$jush="pgsql";var$operators=array("=","<",">","<=",">=","!=","~","!~","LIKE","LIKE %%","ILIKE","ILIKE %%","IN","IS NULL","NOT LIKE","NOT ILIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("char_length","lower","round","to_hex","to_timestamp","upper");var$grouping=array("avg","count","count distinct","max","min","sum");var$nsOid="(SELECT oid FROM pg_namespace WHERE nspname = current_schema())";static
  508. function
  509. connect($N,$V,$F){$f=parent::connect($N,$V,$F);if(is_string($f))return$f;$Lj=get_val("SELECT version()",0,$f);$f->flavor=(preg_match('~CockroachDB~',$Lj)?'cockroach':'');$f->server_info=preg_replace('~^\D*([\d.]+[-\w]*).*~','\1',$Lj);if(min_version(9,0,$f))$f->query("SET application_name = 'Adminer'");if($f->flavor=='cockroach')add_driver(DRIVER,"CockroachDB");return$f;}function
  510. __construct(Db$f){parent::__construct($f);$this->types=array('Numbers'=>array("smallint"=>5,"integer"=>10,"bigint"=>19,"boolean"=>1,"numeric"=>0,"real"=>7,"double precision"=>16,"money"=>20),'Date and time'=>array("date"=>13,"time"=>17,"timestamp"=>20,"timestamptz"=>21,"interval"=>0),'Strings'=>array("character"=>0,"character varying"=>0,"text"=>0,"tsquery"=>0,"tsvector"=>0,"uuid"=>0,"xml"=>0),'Binary'=>array("bit"=>0,"bit varying"=>0,"bytea"=>0),'Network'=>array("cidr"=>43,"inet"=>43,"macaddr"=>17,"macaddr8"=>23,"txid_snapshot"=>0),'Geometry'=>array("box"=>0,"circle"=>0,"line"=>0,"lseg"=>0,"path"=>0,"point"=>0,"polygon"=>0),);if(min_version(9.2,0,$f)){$this->types['Strings']["json"]=4294967295;if(min_version(9.4,0,$f))$this->types['Strings']["jsonb"]=4294967295;}$this->insertFunctions=array("char"=>"md5","date|time"=>"now",);$this->editFunctions=array(number_type()=>"+/-","date|time"=>"+ interval/- interval","char|text"=>"||",);if(min_version(12,0,$f))$this->generated=array("STORED");$this->partitionBy=array("RANGE","LIST");if(!$f->flavor)$this->partitionBy[]="HASH";}function
  511. enumLength(array$m){$zc=$this->types['User types'][$m["type"]];return($zc?type_values($zc):"");}function
  512. setUserTypes($nj){$this->types['User types']=array_flip($nj);}function
  513. insertReturning($R){$_a=array_filter(fields($R),function($m){return$m['auto_increment'];});return(count($_a)==1?" RETURNING ".idf_escape(key($_a)):"");}function
  514. insertUpdate($R,array$L,array$G){foreach($L
  515. as$O){$wj=array();$Z=array();foreach($O
  516. as$x=>$X){$wj[]="$x = $X";if(isset($G[idf_unescape($x)]))$Z[]="$x = $X";}if(!(($Z&&queries("UPDATE ".table($R)." SET ".implode(", ",$wj)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($O)).") VALUES (".implode(", ",$O).")")))return
  517. false;}return
  518. true;}function
  519. slowQuery($H,$Qi){$this->conn->query("SET statement_timeout = ".(1000*$Qi));$this->conn->timeout=1000*$Qi;return$H;}function
  520. convertSearch($u,array$X,array$m){$Ni="char|text";if(strpos($X["op"],"LIKE")===false)$Ni
  521. .="|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|".number_type();return(preg_match("~$Ni~",$m["type"])?$u:"CAST($u AS text)");}function
  522. quoteBinary($Dh){return"'\\x".bin2hex($Dh)."'";}function
  523. warnings(){return$this->conn->warnings();}function
  524. tableHelp($B,$ye=false){$Re=array("information_schema"=>"infoschema","pg_catalog"=>($ye?"view":"catalog"),);$_=$Re[$_GET["ns"]];if($_)return"$_-".str_replace("_","-",$B).".html";}function
  525. inheritsFrom($R){return
  526. get_vals("SELECT relname FROM pg_class JOIN pg_inherits ON inhparent = oid WHERE inhrelid = ".$this->tableOid($R)." ORDER BY 1");}function
  527. inheritedTables($R){return
  528. get_vals("SELECT relname FROM pg_inherits JOIN pg_class ON inhrelid = oid WHERE inhparent = ".$this->tableOid($R)." ORDER BY 1");}function
  529. partitionsInfo($R){$K=(min_version(10)?$this->conn->query("SELECT * FROM pg_partitioned_table WHERE partrelid = ".$this->tableOid($R))->fetch_assoc():null);if($K){$ya=get_vals("SELECT attname FROM pg_attribute WHERE attrelid = $K[partrelid] AND attnum IN (".str_replace(" ",", ",$K["partattrs"]).")");$Oa=array('h'=>'HASH','l'=>'LIST','r'=>'RANGE');return
  530. array("partition_by"=>$Oa[$K["partstrat"]],"partition"=>implode(", ",array_map('Adminer\idf_escape',$ya)),);}return
  531. array();}function
  532. tableOid($R){return"(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = ".q($R)." AND relkind IN ('r', 'm', 'v', 'f', 'p'))";}function
  533. indexAlgorithms(array$yi){static$J=array();if(!$J)$J=get_vals("SELECT amname FROM pg_am".(min_version(9.6)?" WHERE amtype = 'i'":"")." ORDER BY amname = '".($this->conn->flavor=='cockroach'?"prefix":"btree")."' DESC, amname");return$J;}function
  534. supportsIndex(array$S){return$S["Engine"]!="view";}function
  535. hasCStyleEscapes(){static$Qa;if($Qa===null)$Qa=(get_val("SHOW standard_conforming_strings",0,$this->conn)=="off");return$Qa;}}function
  536. idf_escape($u){return'"'.str_replace('"','""',$u).'"';}function
  537. table($u){return
  538. idf_escape($u);}function
  539. get_databases($hd){return
  540. get_vals("SELECT datname FROM pg_database
  541. WHERE datallowconn = TRUE AND has_database_privilege(datname, 'CONNECT')
  542. ORDER BY datname");}function
  543. limit($H,$Z,$z,$C=0,$Rh=" "){return" $H$Z".($z?$Rh."LIMIT $z".($C?" OFFSET $C":""):"");}function
  544. limit1($R,$H,$Z,$Rh="\n"){return(preg_match('~^INTO~',$H)?limit($H,$Z,1,0,$Rh):" $H".(is_view(table_status1($R))?$Z:$Rh."WHERE ctid = (SELECT ctid FROM ".table($R).$Z.$Rh."LIMIT 1)"));}function
  545. db_collation($j,$jb){return
  546. get_val("SELECT datcollate FROM pg_database WHERE datname = ".q($j));}function
  547. logged_user(){return
  548. get_val("SELECT user");}function
  549. tables_list(){$H="SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";if(support("materializedview"))$H
  550. .="
  551. UNION ALL
  552. SELECT matviewname, 'MATERIALIZED VIEW'
  553. FROM pg_matviews
  554. WHERE schemaname = current_schema()";$H
  555. .="
  556. ORDER BY 1";return
  557. get_key_vals($H);}function
  558. count_tables($i){$J=array();foreach($i
  559. as$j){if(connection()->select_db($j))$J[$j]=count(tables_list());}return$J;}function
  560. table_status($B=""){static$Fd;if($Fd===null)$Fd=get_val("SELECT 'pg_table_size'::regproc");$J=array();foreach(get_rows("SELECT
  561.         relname AS \"Name\",
  562.         CASE relkind WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' ELSE 'table' END AS \"Engine\"".($Fd?",
  563.         pg_table_size(c.oid) AS \"Data_length\",
  564.         pg_indexes_size(c.oid) AS \"Index_length\"":"").",
  565.         obj_description(c.oid, 'pg_class') AS \"Comment\",
  566.         ".(min_version(12)?"''":"CASE WHEN relhasoids THEN 'oid' ELSE '' END")." AS \"Oid\",
  567.         reltuples AS \"Rows\",
  568.         ".(min_version(10)?"relispartition::int AS partition,":"")."
  569.         current_schema() AS nspname
  570. FROM pg_class c
  571. WHERE relkind IN ('r', 'm', 'v', 'f', 'p')
  572. AND relnamespace = ".driver()->nsOid."
  573. ".($B!=""?"AND relname = ".q($B):"ORDER BY relname"))as$K)$J[$K["Name"]]=$K;return$J;}function
  574. is_view($S){return
  575. in_array($S["Engine"],array("view","materialized view"));}function
  576. fk_support($S){return
  577. true;}function
  578. fields($R){$J=array();$ra=array('timestamp without time zone'=>'timestamp','timestamp with time zone'=>'timestamptz',);foreach(get_rows("SELECT
  579.         a.attname AS field,
  580.         format_type(a.atttypid, a.atttypmod) AS full_type,
  581.         pg_get_expr(d.adbin, d.adrelid) AS default,
  582.         a.attnotnull::int,
  583.         col_description(a.attrelid, a.attnum) AS comment".(min_version(10)?",
  584.         a.attidentity".(min_version(12)?",
  585.         a.attgenerated":""):"")."
  586. FROM pg_attribute a
  587. LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
  588. WHERE a.attrelid = ".driver()->tableOid($R)."
  589. AND NOT a.attisdropped
  590. AND a.attnum > 0
  591. ORDER BY a.attnum")as$K){preg_match('~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~',$K["full_type"],$A);list(,$U,$y,$K["length"],$ka,$va)=$A;$K["length"].=$va;$Ya=$U.$ka;if(isset($ra[$Ya])){$K["type"]=$ra[$Ya];$K["full_type"]=$K["type"].$y.$va;}else{$K["type"]=$U;$K["full_type"]=$K["type"].$y.$ka.$va;}if(in_array($K['attidentity'],array('a','d')))$K['default']='GENERATED '.($K['attidentity']=='d'?'BY DEFAULT':'ALWAYS').' AS IDENTITY';$K["generated"]=($K["attgenerated"]=="s"?"STORED":"");$K["null"]=!$K["attnotnull"];$K["auto_increment"]=$K['attidentity']||preg_match('~^nextval\(~i',$K["default"])||preg_match('~^unique_rowid\(~',$K["default"]);$K["privileges"]=array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1);if(preg_match('~(.+)::[^,)]+(.*)~',$K["default"],$A))$K["default"]=($A[1]=="NULL"?null:idf_unescape($A[1]).$A[2]);$J[$K["field"]]=$K;}return$J;}function
  592. indexes($R,$g=null){$g=connection($g);$J=array();$Ai=driver()->tableOid($R);$e=get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $Ai AND attnum > 0",$g);foreach(get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, amname, pg_get_expr(indpred, indrelid, true) AS partial, pg_get_expr(indexprs, indrelid) AS indexpr
  593. FROM pg_index
  594. JOIN pg_class ON indexrelid = oid
  595. JOIN pg_am ON pg_am.oid = pg_class.relam
  596. WHERE indrelid = $Ai
  597. ORDER BY indisprimary DESC, indisunique DESC",$g)as$K){$rh=$K["relname"];$J[$rh]["type"]=($K["partial"]?"INDEX":($K["indisprimary"]?"PRIMARY":($K["indisunique"]?"UNIQUE":"INDEX")));$J[$rh]["columns"]=array();$J[$rh]["descs"]=array();$J[$rh]["algorithm"]=$K["amname"];$J[$rh]["partial"]=$K["partial"];$ee=preg_split('~(?<=\)), (?=\()~',$K["indexpr"]);foreach(explode(" ",$K["indkey"])as$fe)$J[$rh]["columns"][]=($fe?$e[$fe]:array_shift($ee));foreach(explode(" ",$K["indoption"])as$ge)$J[$rh]["descs"][]=(intval($ge)&1?'1':null);$J[$rh]["lengths"]=array();}return$J;}function
  598. foreign_keys($R){$J=array();foreach(get_rows("SELECT conname, condeferrable::int AS deferrable, pg_get_constraintdef(oid) AS definition
  599. FROM pg_constraint
  600. WHERE conrelid = ".driver()->tableOid($R)."
  601. AND contype = 'f'::char
  602. ORDER BY conkey, conname")as$K){if(preg_match('~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA',$K['definition'],$A)){$K['source']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$A[1])));if(preg_match('~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~',$A[2],$Xe)){$K['ns']=idf_unescape($Xe[2]);$K['table']=idf_unescape($Xe[4]);}$K['target']=array_map('Adminer\idf_unescape',array_map('trim',explode(',',$A[3])));$K['on_delete']=(preg_match("~ON DELETE (".driver()->onActions.")~",$A[4],$Xe)?$Xe[1]:'NO ACTION');$K['on_update']=(preg_match("~ON UPDATE (".driver()->onActions.")~",$A[4],$Xe)?$Xe[1]:'NO ACTION');$J[$K['conname']]=$K;}}return$J;}function
  603. view($B){return
  604. array("select"=>trim(get_val("SELECT pg_get_viewdef(".driver()->tableOid($B).")")));}function
  605. collations(){return
  606. array();}function
  607. information_schema($j){return
  608. get_schema()=="information_schema";}function
  609. error(){$J=h(connection()->error);if(preg_match('~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s',$J,$A))$J=$A[1].preg_replace('~((?:[^&]|&[^;]*;){'.strlen($A[3]).'})(.*)~','\1<b>\2</b>',$A[2]).$A[4];return
  610. nl_br($J);}function
  611. create_database($j,$c){return
  612. queries("CREATE DATABASE ".idf_escape($j).($c?" ENCODING ".idf_escape($c):""));}function
  613. drop_databases($i){connection()->close();return
  614. apply_queries("DROP DATABASE",$i,'Adminer\idf_escape');}function
  615. rename_database($B,$c){connection()->close();return
  616. queries("ALTER DATABASE ".idf_escape(DB)." RENAME TO ".idf_escape($B));}function
  617. auto_increment(){return"";}function
  618. alter_table($R,$B,$n,$jd,$ob,$xc,$c,$_a,$E){$b=array();$eh=array();if($R!=""&&$R!=$B)$eh[]="ALTER TABLE ".table($R)." RENAME TO ".table($B);$Sh="";foreach($n
  619. as$m){$d=idf_escape($m[0]);$X=$m[1];if(!$X)$b[]="DROP $d";else{$Hj=$X[5];unset($X[5]);if($m[0]==""){if(isset($X[6]))$X[1]=($X[1]==" bigint"?" big":($X[1]==" smallint"?" small":" "))."serial";$b[]=($R!=""?"ADD ":"  ").implode($X);if(isset($X[6]))$b[]=($R!=""?"ADD":" ")." PRIMARY KEY ($X[0])";}else{if($d!=$X[0])$eh[]="ALTER TABLE ".table($B)." RENAME $d TO $X[0]";$b[]="ALTER $d TYPE$X[1]";$Th=$R."_".idf_unescape($X[0])."_seq";$b[]="ALTER $d ".($X[3]?"SET".preg_replace('~GENERATED ALWAYS(.*) STORED~','EXPRESSION\1',$X[3]):(isset($X[6])?"SET DEFAULT nextval(".q($Th).")":"DROP DEFAULT"));if(isset($X[6]))$Sh="CREATE SEQUENCE IF NOT EXISTS ".idf_escape($Th)." OWNED BY ".idf_escape($R).".$X[0]";$b[]="ALTER $d ".($X[2]==" NULL"?"DROP NOT":"SET").$X[2];}if($m[0]!=""||$Hj!="")$eh[]="COMMENT ON COLUMN ".table($B).".$X[0] IS ".($Hj!=""?substr($Hj,9):"''");}}$b=array_merge($b,$jd);if($R==""){$P="";if($E){$eb=(connection()->flavor=='cockroach');$P=" PARTITION BY $E[partition_by]($E[partition])";if($E["partition_by"]=='HASH'){$Cg=+$E["partitions"];for($s=0;$s<$Cg;$s++)$eh[]="CREATE TABLE ".idf_escape($B."_$s")." PARTITION OF ".idf_escape($B)." FOR VALUES WITH (MODULUS $Cg, REMAINDER $s)";}else{$Ug="MINVALUE";foreach($E["partition_names"]as$s=>$X){$Y=$E["partition_values"][$s];$zg=" VALUES ".($E["partition_by"]=='LIST'?"IN ($Y)":"FROM ($Ug) TO ($Y)");if($eb)$P
  620. .=($s?",":" (")."\n  PARTITION ".(preg_match('~^DEFAULT$~i',$X)?$X:idf_escape($X))."$zg";else$eh[]="CREATE TABLE ".idf_escape($B."_$X")." PARTITION OF ".idf_escape($B)." FOR$zg";$Ug=$Y;}$P
  621. .=($eb?"\n)":"");}}array_unshift($eh,"CREATE TABLE ".table($B)." (\n".implode(",\n",$b)."\n)$P");}elseif($b)array_unshift($eh,"ALTER TABLE ".table($R)."\n".implode(",\n",$b));if($Sh)array_unshift($eh,$Sh);if($ob!==null)$eh[]="COMMENT ON TABLE ".table($B)." IS ".q($ob);foreach($eh
  622. as$H){if(!queries($H))return
  623. false;}return
  624. true;}function
  625. alter_indexes($R,$b){$h=array();$ic=array();$eh=array();foreach($b
  626. as$X){if($X[0]!="INDEX")$h[]=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");elseif($X[2]=="DROP")$ic[]=idf_escape($X[1]);else$eh[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R).($X[3]?" USING $X[3]":"")." (".implode(", ",$X[2]).")".($X[4]?" WHERE $X[4]":"");}if($h)array_unshift($eh,"ALTER TABLE ".table($R).implode(",",$h));if($ic)array_unshift($eh,"DROP INDEX ".implode(", ",$ic));foreach($eh
  627. as$H){if(!queries($H))return
  628. false;}return
  629. true;}function
  630. truncate_tables($T){return
  631. queries("TRUNCATE ".implode(", ",array_map('Adminer\table',$T)));}function
  632. drop_views($Nj){return
  633. drop_tables($Nj);}function
  634. drop_tables($T){foreach($T
  635. as$R){$P=table_status1($R);if(!queries("DROP ".strtoupper($P["Engine"])." ".table($R)))return
  636. false;}return
  637. true;}function
  638. move_tables($T,$Nj,$Ii){foreach(array_merge($T,$Nj)as$R){$P=table_status1($R);if(!queries("ALTER ".strtoupper($P["Engine"])." ".table($R)." SET SCHEMA ".idf_escape($Ii)))return
  639. false;}return
  640. true;}function
  641. trigger($B,$R){if($B=="")return
  642. array("Statement"=>"EXECUTE PROCEDURE ()");$e=array();$Z="WHERE trigger_schema = current_schema() AND event_object_table = ".q($R)." AND trigger_name = ".q($B);foreach(get_rows("SELECT * FROM information_schema.triggered_update_columns $Z")as$K)$e[]=$K["event_object_column"];$J=array();foreach(get_rows('SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \'FOR EACH \' || action_orientation AS "Type", action_statement AS "Statement"
  643. FROM information_schema.triggers'."
  644. $Z
  645. ORDER BY event_manipulation DESC")as$K){if($e&&$K["Event"]=="UPDATE")$K["Event"].=" OF";$K["Of"]=implode(", ",$e);if($J)$K["Event"].=" OR $J[Event]";$J=$K;}return$J;}function
  646. triggers($R){$J=array();foreach(get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = ".q($R))as$K){$hj=trigger($K["trigger_name"],$R);$J[$hj["Trigger"]]=array($hj["Timing"],$hj["Event"]);}return$J;}function
  647. trigger_options(){return
  648. array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE","INSERT OR UPDATE","INSERT OR UPDATE OF","DELETE OR INSERT","DELETE OR UPDATE","DELETE OR UPDATE OF","DELETE OR INSERT OR UPDATE","DELETE OR INSERT OR UPDATE OF"),"Type"=>array("FOR EACH ROW","FOR EACH STATEMENT"),);}function
  649. routine($B,$U){$L=get_rows('SELECT routine_definition AS definition, LOWER(external_language) AS language, *
  650. FROM information_schema.routines
  651. WHERE routine_schema = current_schema() AND specific_name = '.q($B));$J=idx($L,0,array());$J["returns"]=array("type"=>$J["type_udt_name"]);$J["fields"]=get_rows('SELECT COALESCE(parameter_name, ordinal_position::text) AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout
  652. FROM information_schema.parameters
  653. WHERE specific_schema = current_schema() AND specific_name = '.q($B).'
  654. ORDER BY ordinal_position');return$J;}function
  655. routines(){return
  656. get_rows('SELECT specific_name AS "SPECIFIC_NAME", routine_type AS "ROUTINE_TYPE", routine_name AS "ROUTINE_NAME", type_udt_name AS "DTD_IDENTIFIER"
  657. FROM information_schema.routines
  658. WHERE routine_schema = current_schema()
  659. ORDER BY SPECIFIC_NAME');}function
  660. routine_languages(){return
  661. get_vals("SELECT LOWER(lanname) FROM pg_catalog.pg_language");}function
  662. routine_id($B,$K){$J=array();foreach($K["fields"]as$m){$y=$m["length"];$J[]=$m["type"].($y?"($y)":"");}return
  663. idf_escape($B)."(".implode(", ",$J).")";}function
  664. last_id($I){$K=(is_object($I)?$I->fetch_row():array());return($K?$K[0]:0);}function
  665. explain($f,$H){return$f->query("EXPLAIN $H");}function
  666. found_rows($S,$Z){if(preg_match("~ rows=([0-9]+)~",get_val("EXPLAIN SELECT * FROM ".idf_escape($S["Name"]).($Z?" WHERE ".implode(" AND ",$Z):"")),$qh))return$qh[1];}function
  667. types(){return
  668. get_key_vals("SELECT oid, typname
  669. FROM pg_type
  670. WHERE typnamespace = ".driver()->nsOid."
  671. AND typtype IN ('b','d','e')
  672. AND typelem = 0");}function
  673. type_values($t){$Bc=get_vals("SELECT enumlabel FROM pg_enum WHERE enumtypid = $t ORDER BY enumsortorder");return($Bc?"'".implode("', '",array_map('addslashes',$Bc))."'":"");}function
  674. schemas(){return
  675. get_vals("SELECT nspname FROM pg_namespace ORDER BY nspname");}function
  676. get_schema(){return
  677. get_val("SELECT current_schema()");}function
  678. set_schema($Fh,$g=null){if(!$g)$g=connection();$J=$g->query("SET search_path TO ".idf_escape($Fh));driver()->setUserTypes(types());return$J;}function
  679. foreign_keys_sql($R){$J="";$P=table_status1($R);$fd=foreign_keys($R);ksort($fd);foreach($fd
  680. as$ed=>$dd)$J
  681. .="ALTER TABLE ONLY ".idf_escape($P['nspname']).".".idf_escape($P['Name'])." ADD CONSTRAINT ".idf_escape($ed)." $dd[definition] ".($dd['deferrable']?'DEFERRABLE':'NOT DEFERRABLE').";\n";return($J?"$J\n":$J);}function
  682. create_sql($R,$_a,$si){$wh=array();$Uh=array();$P=table_status1($R);if(is_view($P)){$Mj=view($R);return
  683. rtrim("CREATE VIEW ".idf_escape($R)." AS $Mj[select]",";");}$n=fields($R);if(count($P)<2||empty($n))return
  684. false;$J="CREATE TABLE ".idf_escape($P['nspname']).".".idf_escape($P['Name'])." (\n    ";foreach($n
  685. as$m){$xg=idf_escape($m['field']).' '.$m['full_type'].default_value($m).($m['null']?"":" NOT NULL");$wh[]=$xg;if(preg_match('~nextval\(\'([^\']+)\'\)~',$m['default'],$Ze)){$Th=$Ze[1];$hi=first(get_rows((min_version(10)?"SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = ".q(idf_unescape($Th)):"SELECT * FROM $Th"),null,"-- "));$Uh[]=($si=="DROP+CREATE"?"DROP SEQUENCE IF EXISTS $Th;\n":"")."CREATE SEQUENCE $Th INCREMENT $hi[increment_by] MINVALUE $hi[min_value] MAXVALUE $hi[max_value]".($_a&&$hi['last_value']?" START ".($hi["last_value"]+1):"")." CACHE $hi[cache_value];";}}if(!empty($Uh))$J=implode("\n\n",$Uh)."\n\n$J";$G="";foreach(indexes($R)as$ce=>$v){if($v['type']=='PRIMARY'){$G=$ce;$wh[]="CONSTRAINT ".idf_escape($ce)." PRIMARY KEY (".implode(', ',array_map('Adminer\idf_escape',$v['columns'])).")";}}foreach(driver()->checkConstraints($R)as$ub=>$wb)$wh[]="CONSTRAINT ".idf_escape($ub)." CHECK $wb";$J
  686. .=implode(",\n    ",$wh)."\n)";$zg=driver()->partitionsInfo($P['Name']);if($zg)$J
  687. .="\nPARTITION BY $zg[partition_by]($zg[partition])";$J
  688. .="\nWITH (oids = ".($P['Oid']?'true':'false').");";if($P['Comment'])$J
  689. .="\n\nCOMMENT ON TABLE ".idf_escape($P['nspname']).".".idf_escape($P['Name'])." IS ".q($P['Comment']).";";foreach($n
  690. as$Wc=>$m){if($m['comment'])$J
  691. .="\n\nCOMMENT ON COLUMN ".idf_escape($P['nspname']).".".idf_escape($P['Name']).".".idf_escape($Wc)." IS ".q($m['comment']).";";}foreach(get_rows("SELECT indexdef FROM pg_catalog.pg_indexes WHERE schemaname = current_schema() AND tablename = ".q($R).($G?" AND indexname != ".q($G):""),null,"-- ")as$K)$J
  692. .="\n\n$K[indexdef];";return
  693. rtrim($J,';');}function
  694. truncate_sql($R){return"TRUNCATE ".table($R);}function
  695. trigger_sql($R){$P=table_status1($R);$J="";foreach(triggers($R)as$gj=>$fj){$hj=trigger($gj,$P['Name']);$J
  696. .="\nCREATE TRIGGER ".idf_escape($hj['Trigger'])." $hj[Timing] $hj[Event] ON ".idf_escape($P["nspname"]).".".idf_escape($P['Name'])." $hj[Type] $hj[Statement];;\n";}return$J;}function
  697. use_sql($Nb,$si=""){$B=idf_escape($Nb);$J="";if(preg_match('~CREATE~',$si)){if($si=="DROP+CREATE")$J="DROP DATABASE IF EXISTS $B;\n";$J
  698. .="CREATE DATABASE $B;\n";}return"$J\\connect $B";}function
  699. show_variables(){return
  700. get_rows("SHOW ALL");}function
  701. process_list(){return
  702. get_rows("SELECT * FROM pg_stat_activity ORDER BY ".(min_version(9.2)?"pid":"procpid"));}function
  703. convert_field($m){}function
  704. unconvert_field($m,$J){return$J;}function
  705. support($Uc){return
  706. preg_match('~^(check|columns|comment|database|drop_col|dump|descidx|indexes|kill|partial_indexes|routine|scheme|sequence|sql|table|trigger|type|variables|view'.(min_version(9.3)?'|materializedview':'').(min_version(11)?'|procedure':'').(connection()->flavor=='cockroach'?'':'|processlist').')$~',$Uc);}function
  707. kill_process($X){return
  708. queries("SELECT pg_terminate_backend(".number($X).")");}function
  709. connection_id(){return"SELECT pg_backend_pid()";}function
  710. max_connections(){return
  711. get_val("SHOW max_connections");}}add_driver("oracle","Oracle (beta)");if(isset($_GET["oracle"])){define('Adminer\DRIVER',"oracle");if(extension_loaded("oci8")&&$_GET["ext"]!="pdo"){class
  712. Db
  713. extends
  714. SqlDb{var$extension="oci8";var$_current_db;private$link;function
  715. _error($Cc,$l){if(ini_bool("html_errors"))$l=html_entity_decode(strip_tags($l));$l=preg_replace('~^[^:]*: ~','',$l);$this->error=$l;}function
  716. attach($N,$V,$F){$this->link=@oci_new_connect($V,$F,$N,"AL32UTF8");if($this->link){$this->server_info=oci_server_version($this->link);return'';}$l=oci_error();return$l["message"];}function
  717. quote($Q){return"'".str_replace("'","''",$Q)."'";}function
  718. select_db($Nb){$this->_current_db=$Nb;return
  719. true;}function
  720. query($H,$oj=false){$I=oci_parse($this->link,$H);$this->error="";if(!$I){$l=oci_error($this->link);$this->errno=$l["code"];$this->error=$l["message"];return
  721. false;}set_error_handler(array($this,'_error'));$J=@oci_execute($I);restore_error_handler();if($J){if(oci_num_fields($I))return
  722. new
  723. Result($I);$this->affected_rows=oci_num_rows($I);oci_free_statement($I);}return$J;}function
  724. timeout($uf){return
  725. oci_set_call_timeout($this->link,$uf);}}class
  726. Result{var$num_rows;private$result,$offset=1;function
  727. __construct($I){$this->result=$I;}private
  728. function
  729. convert($K){foreach((array)$K
  730. as$x=>$X){if(is_a($X,'OCILob')||is_a($X,'OCI-Lob'))$K[$x]=$X->load();}return$K;}function
  731. fetch_assoc(){return$this->convert(oci_fetch_assoc($this->result));}function
  732. fetch_row(){return$this->convert(oci_fetch_row($this->result));}function
  733. fetch_field(){$d=$this->offset++;$J=new
  734. \stdClass;$J->name=oci_field_name($this->result,$d);$J->type=oci_field_type($this->result,$d);$J->charsetnr=(preg_match("~raw|blob|bfile~",$J->type)?63:0);return$J;}function
  735. __destruct(){oci_free_statement($this->result);}}}elseif(extension_loaded("pdo_oci")){class
  736. Db
  737. extends
  738. PdoDb{var$extension="PDO_OCI";var$_current_db;function
  739. attach($N,$V,$F){return$this->dsn("oci:dbname=//$N;charset=AL32UTF8",$V,$F);}function
  740. select_db($Nb){$this->_current_db=$Nb;return
  741. true;}}}class
  742. Driver
  743. extends
  744. SqlDriver{static$extensions=array("OCI8","PDO_OCI");static$jush="oracle";var$insertFunctions=array("date"=>"current_date","timestamp"=>"current_timestamp",);var$editFunctions=array("number|float|double"=>"+/-","date|timestamp"=>"+ interval/- interval","char|clob"=>"||",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL");var$functions=array("length","lower","round","upper");var$grouping=array("avg","count","count distinct","max","min","sum");function
  745. __construct(Db$f){parent::__construct($f);$this->types=array('Numbers'=>array("number"=>38,"binary_float"=>12,"binary_double"=>21),'Date and time'=>array("date"=>10,"timestamp"=>29,"interval year"=>12,"interval day"=>28),'Strings'=>array("char"=>2000,"varchar2"=>4000,"nchar"=>2000,"nvarchar2"=>4000,"clob"=>4294967295,"nclob"=>4294967295),'Binary'=>array("raw"=>2000,"long raw"=>2147483648,"blob"=>4294967295,"bfile"=>4294967296),);}function
  746. begin(){return
  747. true;}function
  748. insertUpdate($R,array$L,array$G){foreach($L
  749. as$O){$wj=array();$Z=array();foreach($O
  750. as$x=>$X){$wj[]="$x = $X";if(isset($G[idf_unescape($x)]))$Z[]="$x = $X";}if(!(($Z&&queries("UPDATE ".table($R)." SET ".implode(", ",$wj)." WHERE ".implode(" AND ",$Z))&&$this->conn->affected_rows)||queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($O)).") VALUES (".implode(", ",$O).")")))return
  751. false;}return
  752. true;}function
  753. hasCStyleEscapes(){return
  754. true;}}function
  755. idf_escape($u){return'"'.str_replace('"','""',$u).'"';}function
  756. table($u){return
  757. idf_escape($u);}function
  758. get_databases($hd){return
  759. get_vals("SELECT DISTINCT tablespace_name FROM (
  760. SELECT tablespace_name FROM user_tablespaces
  761. UNION SELECT tablespace_name FROM all_tables WHERE tablespace_name IS NOT NULL
  762. )
  763. ORDER BY 1");}function
  764. limit($H,$Z,$z,$C=0,$Rh=" "){return($C?" * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $H$Z) t WHERE rownum <= ".($z+$C).") WHERE rnum > $C":($z?" * FROM (SELECT $H$Z) WHERE rownum <= ".($z+$C):" $H$Z"));}function
  765. limit1($R,$H,$Z,$Rh="\n"){return" $H$Z";}function
  766. db_collation($j,$jb){return
  767. get_val("SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'");}function
  768. logged_user(){return
  769. get_val("SELECT USER FROM DUAL");}function
  770. get_current_db(){$j=connection()->_current_db?:DB;unset(connection()->_current_db);return$j;}function
  771. where_owner($Sg,$rg="owner"){if(!$_GET["ns"])return'';return"$Sg$rg = sys_context('USERENV', 'CURRENT_SCHEMA')";}function
  772. views_table($e){$rg=where_owner('');return"(SELECT $e FROM all_views WHERE ".($rg?:"rownum < 0").")";}function
  773. tables_list(){$Mj=views_table("view_name");$rg=where_owner(" AND ");return
  774. get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = ".q(DB)."$rg
  775. UNION SELECT view_name, 'view' FROM $Mj
  776. ORDER BY 1");}function
  777. count_tables($i){$J=array();foreach($i
  778. as$j)$J[$j]=get_val("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = ".q($j));return$J;}function
  779. table_status($B=""){$J=array();$Kh=q($B);$j=get_current_db();$Mj=views_table("view_name");$rg=where_owner(" AND ");foreach(get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = '.q($j).$rg.($B!=""?" AND table_name = $Kh":"")."
  780. UNION SELECT view_name, 'view', 0, 0 FROM $Mj".($B!=""?" WHERE view_name = $Kh":"")."
  781. ORDER BY 1")as$K)$J[$K["Name"]]=$K;return$J;}function
  782. is_view($S){return$S["Engine"]=="view";}function
  783. fk_support($S){return
  784. true;}function
  785. fields($R){$J=array();$rg=where_owner(" AND ");foreach(get_rows("SELECT * FROM all_tab_columns WHERE table_name = ".q($R)."$rg ORDER BY column_id")as$K){$U=$K["DATA_TYPE"];$y="$K[DATA_PRECISION],$K[DATA_SCALE]";if($y==",")$y=$K["CHAR_COL_DECL_LENGTH"];$J[$K["COLUMN_NAME"]]=array("field"=>$K["COLUMN_NAME"],"full_type"=>$U.($y?"($y)":""),"type"=>strtolower($U),"length"=>$y,"default"=>$K["DATA_DEFAULT"],"null"=>($K["NULLABLE"]=="Y"),"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1),);}return$J;}function
  786. indexes($R,$g=null){$J=array();$rg=where_owner(" AND ","aic.table_owner");foreach(get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
  787. FROM all_ind_columns aic
  788. LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
  789. LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
  790. WHERE aic.table_name = ".q($R)."$rg
  791. ORDER BY ac.constraint_type, aic.column_position",$g)as$K){$ce=$K["INDEX_NAME"];$lb=$K["DATA_DEFAULT"];$lb=($lb?trim($lb,'"'):$K["COLUMN_NAME"]);$J[$ce]["type"]=($K["CONSTRAINT_TYPE"]=="P"?"PRIMARY":($K["CONSTRAINT_TYPE"]=="U"?"UNIQUE":"INDEX"));$J[$ce]["columns"][]=$lb;$J[$ce]["lengths"][]=($K["CHAR_LENGTH"]&&$K["CHAR_LENGTH"]!=$K["COLUMN_LENGTH"]?$K["CHAR_LENGTH"]:null);$J[$ce]["descs"][]=($K["DESCEND"]&&$K["DESCEND"]=="DESC"?'1':null);}return$J;}function
  792. view($B){$Mj=views_table("view_name, text");$L=get_rows('SELECT text "select" FROM '.$Mj.' WHERE view_name = '.q($B));return
  793. reset($L);}function
  794. collations(){return
  795. array();}function
  796. information_schema($j){return
  797. get_schema()=="INFORMATION_SCHEMA";}function
  798. error(){return
  799. h(connection()->error);}function
  800. explain($f,$H){$f->query("EXPLAIN PLAN FOR $H");return$f->query("SELECT * FROM plan_table");}function
  801. found_rows($S,$Z){}function
  802. auto_increment(){return"";}function
  803. alter_table($R,$B,$n,$jd,$ob,$xc,$c,$_a,$E){$b=$ic=array();$kg=($R?fields($R):array());foreach($n
  804. as$m){$X=$m[1];if($X&&$m[0]!=""&&idf_escape($m[0])!=$X[0])queries("ALTER TABLE ".table($R)." RENAME COLUMN ".idf_escape($m[0])." TO $X[0]");$jg=$kg[$m[0]];if($X&&$jg){$Nf=process_field($jg,$jg);if($X[2]==$Nf[2])$X[2]="";}if($X)$b[]=($R!=""?($m[0]!=""?"MODIFY (":"ADD ("):"  ").implode($X).($R!=""?")":"");else$ic[]=idf_escape($m[0]);}if($R=="")return
  805. queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$b)."\n)");return(!$b||queries("ALTER TABLE ".table($R)."\n".implode("\n",$b)))&&(!$ic||queries("ALTER TABLE ".table($R)." DROP (".implode(", ",$ic).")"))&&($R==$B||queries("ALTER TABLE ".table($R)." RENAME TO ".table($B)));}function
  806. alter_indexes($R,$b){$ic=array();$eh=array();foreach($b
  807. as$X){if($X[0]!="INDEX"){$X[2]=preg_replace('~ DESC$~','',$X[2]);$h=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");array_unshift($eh,"ALTER TABLE ".table($R).$h);}elseif($X[2]=="DROP")$ic[]=idf_escape($X[1]);else$eh[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R)." (".implode(", ",$X[2]).")";}if($ic)array_unshift($eh,"DROP INDEX ".implode(", ",$ic));foreach($eh
  808. as$H){if(!queries($H))return
  809. false;}return
  810. true;}function
  811. foreign_keys($R){$J=array();$H="SELECT c_list.CONSTRAINT_NAME as NAME,
  812. c_src.COLUMN_NAME as SRC_COLUMN,
  813. c_dest.OWNER as DEST_DB,
  814. c_dest.TABLE_NAME as DEST_TABLE,
  815. c_dest.COLUMN_NAME as DEST_COLUMN,
  816. c_list.DELETE_RULE as ON_DELETE
  817. FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
  818. WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
  819. AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
  820. AND c_list.CONSTRAINT_TYPE = 'R'
  821. AND c_src.TABLE_NAME = ".q($R);foreach(get_rows($H)as$K)$J[$K['NAME']]=array("db"=>$K['DEST_DB'],"table"=>$K['DEST_TABLE'],"source"=>array($K['SRC_COLUMN']),"target"=>array($K['DEST_COLUMN']),"on_delete"=>$K['ON_DELETE'],"on_update"=>null,);return$J;}function
  822. truncate_tables($T){return
  823. apply_queries("TRUNCATE TABLE",$T);}function
  824. drop_views($Nj){return
  825. apply_queries("DROP VIEW",$Nj);}function
  826. drop_tables($T){return
  827. apply_queries("DROP TABLE",$T);}function
  828. last_id($I){return
  829. 0;}function
  830. schemas(){$J=get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) ORDER BY 1");return($J?:get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = ".q(DB)." ORDER BY 1"));}function
  831. get_schema(){return
  832. get_val("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual");}function
  833. set_schema($Hh,$g=null){if(!$g)$g=connection();return$g->query("ALTER SESSION SET CURRENT_SCHEMA = ".idf_escape($Hh));}function
  834. show_variables(){return
  835. get_rows('SELECT name, display_value FROM v$parameter');}function
  836. show_status(){$J=array();$L=get_rows('SELECT * FROM v$instance');foreach(reset($L)as$x=>$X)$J[]=array($x,$X);return$J;}function
  837. process_list(){return
  838. get_rows('SELECT
  839.         sess.process AS "process",
  840.         sess.username AS "user",
  841.         sess.schemaname AS "schema",
  842.         sess.status AS "status",
  843.         sess.wait_class AS "wait_class",
  844.         sess.seconds_in_wait AS "seconds_in_wait",
  845.         sql.sql_text AS "sql_text",
  846.         sess.machine AS "machine",
  847.         sess.port AS "port"
  848. FROM v$session sess LEFT OUTER JOIN v$sql sql
  849. ON sql.sql_id = sess.sql_id
  850. WHERE sess.type = \'USER\'
  851. ORDER BY PROCESS
  852. ');}function
  853. convert_field($m){}function
  854. unconvert_field($m,$J){return$J;}function
  855. support($Uc){return
  856. preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~',$Uc);}}add_driver("mssql","MS SQL");if(isset($_GET["mssql"])){define('Adminer\DRIVER',"mssql");if(extension_loaded("sqlsrv")&&$_GET["ext"]!="pdo"){class
  857. Db
  858. extends
  859. SqlDb{var$extension="sqlsrv";private$link,$result;private
  860. function
  861. get_error(){$this->error="";foreach(sqlsrv_errors()as$l){$this->errno=$l["code"];$this->error
  862. .="$l[message]\n";}$this->error=rtrim($this->error);}function
  863. attach($N,$V,$F){$vb=array("UID"=>$V,"PWD"=>$F,"CharacterSet"=>"UTF-8");$ni=adminer()->connectSsl();if(isset($ni["Encrypt"]))$vb["Encrypt"]=$ni["Encrypt"];if(isset($ni["TrustServerCertificate"]))$vb["TrustServerCertificate"]=$ni["TrustServerCertificate"];$j=adminer()->database();if($j!="")$vb["Database"]=$j;list($Md,$Mg)=host_port($N);$this->link=@sqlsrv_connect($Md.($Mg?",$Mg":""),$vb);if($this->link){$he=sqlsrv_server_info($this->link);$this->server_info=$he['SQLServerVersion'];}else$this->get_error();return($this->link?'':$this->error);}function
  864. quote($Q){$pj=strlen($Q)!=strlen(utf8_decode($Q));return($pj?"N":"")."'".str_replace("'","''",$Q)."'";}function
  865. select_db($Nb){return$this->query(use_sql($Nb));}function
  866. query($H,$oj=false){$I=sqlsrv_query($this->link,$H);$this->error="";if(!$I){$this->get_error();return
  867. false;}return$this->store_result($I);}function
  868. multi_query($H){$this->result=sqlsrv_query($this->link,$H);$this->error="";if(!$this->result){$this->get_error();return
  869. false;}return
  870. true;}function
  871. store_result($I=null){if(!$I)$I=$this->result;if(!$I)return
  872. false;if(sqlsrv_field_metadata($I))return
  873. new
  874. Result($I);$this->affected_rows=sqlsrv_rows_affected($I);return
  875. true;}function
  876. next_result(){return$this->result?!!sqlsrv_next_result($this->result):false;}}class
  877. Result{var$num_rows;private$result,$offset=0,$fields;function
  878. __construct($I){$this->result=$I;}private
  879. function
  880. convert($K){foreach((array)$K
  881. as$x=>$X){if(is_a($X,'DateTime'))$K[$x]=$X->format("Y-m-d H:i:s");}return$K;}function
  882. fetch_assoc(){return$this->convert(sqlsrv_fetch_array($this->result,SQLSRV_FETCH_ASSOC));}function
  883. fetch_row(){return$this->convert(sqlsrv_fetch_array($this->result,SQLSRV_FETCH_NUMERIC));}function
  884. fetch_field(){if(!$this->fields)$this->fields=sqlsrv_field_metadata($this->result);$m=$this->fields[$this->offset++];$J=new
  885. \stdClass;$J->name=$m["Name"];$J->type=($m["Type"]==1?254:15);$J->charsetnr=0;return$J;}function
  886. seek($C){for($s=0;$s<$C;$s++)sqlsrv_fetch($this->result);}function
  887. __destruct(){sqlsrv_free_stmt($this->result);}}function
  888. last_id($I){return
  889. get_val("SELECT SCOPE_IDENTITY()");}function
  890. explain($f,$H){$f->query("SET SHOWPLAN_ALL ON");$J=$f->query($H);$f->query("SET SHOWPLAN_ALL OFF");return$J;}}else{abstract
  891. class
  892. MssqlDb
  893. extends
  894. PdoDb{function
  895. select_db($Nb){return$this->query(use_sql($Nb));}function
  896. lastInsertId(){return$this->pdo->lastInsertId();}}function
  897. last_id($I){return
  898. connection()->lastInsertId();}function
  899. explain($f,$H){}if(extension_loaded("pdo_sqlsrv")){class
  900. Db
  901. extends
  902. MssqlDb{var$extension="PDO_SQLSRV";function
  903. attach($N,$V,$F){list($Md,$Mg)=host_port($N);return$this->dsn("sqlsrv:Server=$Md".($Mg?",$Mg":""),$V,$F);}}}elseif(extension_loaded("pdo_dblib")){class
  904. Db
  905. extends
  906. MssqlDb{var$extension="PDO_DBLIB";function
  907. attach($N,$V,$F){list($Md,$Mg)=host_port($N);return$this->dsn("dblib:charset=utf8;host=$Md".($Mg?(is_numeric($Mg)?";port=":";unix_socket=").$Mg:""),$V,$F);}}}}class
  908. Driver
  909. extends
  910. SqlDriver{static$extensions=array("SQLSRV","PDO_SQLSRV","PDO_DBLIB");static$jush="mssql";var$insertFunctions=array("date|time"=>"getdate");var$editFunctions=array("int|decimal|real|float|money|datetime"=>"+/-","char|text"=>"+",);var$operators=array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL");var$functions=array("len","lower","round","upper");var$grouping=array("avg","count","count distinct","max","min","sum");var$generated=array("PERSISTED","VIRTUAL");var$onActions="NO ACTION|CASCADE|SET NULL|SET DEFAULT";static
  911. function
  912. connect($N,$V,$F){if($N=="")$N="localhost:1433";return
  913. parent::connect($N,$V,$F);}function
  914. __construct(Db$f){parent::__construct($f);$this->types=array('Numbers'=>array("tinyint"=>3,"smallint"=>5,"int"=>10,"bigint"=>20,"bit"=>1,"decimal"=>0,"real"=>12,"float"=>53,"smallmoney"=>10,"money"=>20),'Date and time'=>array("date"=>10,"smalldatetime"=>19,"datetime"=>19,"datetime2"=>19,"time"=>8,"datetimeoffset"=>10),'Strings'=>array("char"=>8000,"varchar"=>8000,"text"=>2147483647,"nchar"=>4000,"nvarchar"=>4000,"ntext"=>1073741823),'Binary'=>array("binary"=>8000,"varbinary"=>8000,"image"=>2147483647),);}function
  915. insertUpdate($R,array$L,array$G){$n=fields($R);$wj=array();$Z=array();$O=reset($L);$e="c".implode(", c",range(1,count($O)));$Pa=0;$ne=array();foreach($O
  916. as$x=>$X){$Pa++;$B=idf_unescape($x);if(!$n[$B]["auto_increment"])$ne[$x]="c$Pa";if(isset($G[$B]))$Z[]="$x = c$Pa";else$wj[]="$x = c$Pa";}$Ij=array();foreach($L
  917. as$O)$Ij[]="(".implode(", ",$O).")";if($Z){$Rd=queries("SET IDENTITY_INSERT ".table($R)." ON");$J=queries("MERGE ".table($R)." USING (VALUES\n\t".implode(",\n\t",$Ij)."\n) AS source ($e) ON ".implode(" AND ",$Z).($wj?"\nWHEN MATCHED THEN UPDATE SET ".implode(", ",$wj):"")."\nWHEN NOT MATCHED THEN INSERT (".implode(", ",array_keys($Rd?$O:$ne)).") VALUES (".($Rd?$e:implode(", ",$ne)).");");if($Rd)queries("SET IDENTITY_INSERT ".table($R)." OFF");}else$J=queries("INSERT INTO ".table($R)." (".implode(", ",array_keys($O)).") VALUES\n".implode(",\n",$Ij));return$J;}function
  918. begin(){return
  919. queries("BEGIN TRANSACTION");}function
  920. tableHelp($B,$ye=false){$Re=array("sys"=>"catalog-views/sys-","INFORMATION_SCHEMA"=>"information-schema-views/",);$_=$Re[get_schema()];if($_)return"relational-databases/system-$_".preg_replace('~_~','-',strtolower($B))."-transact-sql";}}function
  921. idf_escape($u){return"[".str_replace("]","]]",$u)."]";}function
  922. table($u){return($_GET["ns"]!=""?idf_escape($_GET["ns"]).".":"").idf_escape($u);}function
  923. get_databases($hd){return
  924. get_vals("SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')");}function
  925. limit($H,$Z,$z,$C=0,$Rh=" "){return($z?" TOP (".($z+$C).")":"")." $H$Z";}function
  926. limit1($R,$H,$Z,$Rh="\n"){return
  927. limit($H,$Z,1,0,$Rh);}function
  928. db_collation($j,$jb){return
  929. get_val("SELECT collation_name FROM sys.databases WHERE name = ".q($j));}function
  930. logged_user(){return
  931. get_val("SELECT SUSER_NAME()");}function
  932. tables_list(){return
  933. get_key_vals("SELECT name, type_desc FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') ORDER BY name");}function
  934. count_tables($i){$J=array();foreach($i
  935. as$j){connection()->select_db($j);$J[$j]=get_val("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES");}return$J;}function
  936. table_status($B=""){$J=array();foreach(get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment
  937. FROM sys.all_objects AS ao
  938. WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') ".($B!=""?"AND name = ".q($B):"ORDER BY name"))as$K)$J[$K["Name"]]=$K;return$J;}function
  939. is_view($S){return$S["Engine"]=="VIEW";}function
  940. fk_support($S){return
  941. true;}function
  942. fields($R){$qb=get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', ".q(get_schema()).", 'table', ".q($R).", 'column', NULL)");$J=array();$zi=get_val("SELECT object_id FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN ('S', 'U', 'V') AND name = ".q($R));foreach(get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, d.definition [default], d.name default_constraint, i.is_primary_key
  943. FROM sys.all_columns c
  944. JOIN sys.types t ON c.user_type_id = t.user_type_id
  945. LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id
  946. LEFT JOIN sys.index_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id
  947. LEFT JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
  948. WHERE c.object_id = ".q($zi))as$K){$U=$K["type"];$y=(preg_match("~char|binary~",$U)?intval($K["max_length"])/($U[0]=='n'?2:1):($U=="decimal"?"$K[precision],$K[scale]":""));$J[$K["name"]]=array("field"=>$K["name"],"full_type"=>$U.($y?"($y)":""),"type"=>$U,"length"=>$y,"default"=>(preg_match("~^\('(.*)'\)$~",$K["default"],$A)?str_replace("''","'",$A[1]):$K["default"]),"default_constraint"=>$K["default_constraint"],"null"=>$K["is_nullable"],"auto_increment"=>$K["is_identity"],"collation"=>$K["collation_name"],"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,"where"=>1,"order"=>1),"primary"=>$K["is_primary_key"],"comment"=>$qb[$K["name"]],);}foreach(get_rows("SELECT * FROM sys.computed_columns WHERE object_id = ".q($zi))as$K){$J[$K["name"]]["generated"]=($K["is_persisted"]?"PERSISTED":"VIRTUAL");$J[$K["name"]]["default"]=$K["definition"];}return$J;}function
  949. indexes($R,$g=null){$J=array();foreach(get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
  950. FROM sys.indexes i
  951. INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
  952. INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
  953. WHERE OBJECT_NAME(i.object_id) = ".q($R),$g)as$K){$B=$K["name"];$J[$B]["type"]=($K["is_primary_key"]?"PRIMARY":($K["is_unique"]?"UNIQUE":"INDEX"));$J[$B]["lengths"]=array();$J[$B]["columns"][$K["key_ordinal"]]=$K["column_name"];$J[$B]["descs"][$K["key_ordinal"]]=($K["is_descending_key"]?'1':null);}return$J;}function
  954. view($B){return
  955. array("select"=>preg_replace('~^(?:[^[]|\[[^]]*])*\s+AS\s+~isU','',get_val("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = ".q($B))));}function
  956. collations(){$J=array();foreach(get_vals("SELECT name FROM fn_helpcollations()")as$c)$J[preg_replace('~_.*~','',$c)][]=$c;return$J;}function
  957. information_schema($j){return
  958. get_schema()=="INFORMATION_SCHEMA";}function
  959. error(){return
  960. nl_br(h(preg_replace('~^(\[[^]]*])+~m','',connection()->error)));}function
  961. create_database($j,$c){return
  962. queries("CREATE DATABASE ".idf_escape($j).(preg_match('~^[a-z0-9_]+$~i',$c)?" COLLATE $c":""));}function
  963. drop_databases($i){return
  964. queries("DROP DATABASE ".implode(", ",array_map('Adminer\idf_escape',$i)));}function
  965. rename_database($B,$c){if(preg_match('~^[a-z0-9_]+$~i',$c))queries("ALTER DATABASE ".idf_escape(DB)." COLLATE $c");queries("ALTER DATABASE ".idf_escape(DB)." MODIFY NAME = ".idf_escape($B));return
  966. true;}function
  967. auto_increment(){return" IDENTITY".($_POST["Auto_increment"]!=""?"(".number($_POST["Auto_increment"]).",1)":"")." PRIMARY KEY";}function
  968. alter_table($R,$B,$n,$jd,$ob,$xc,$c,$_a,$E){$b=array();$qb=array();$kg=fields($R);foreach($n
  969. as$m){$d=idf_escape($m[0]);$X=$m[1];if(!$X)$b["DROP"][]=" COLUMN $d";else{$X[1]=preg_replace("~( COLLATE )'(\\w+)'~",'\1\2',$X[1]);$qb[$m[0]]=$X[5];unset($X[5]);if(preg_match('~ AS ~',$X[3]))unset($X[1],$X[2]);if($m[0]=="")$b["ADD"][]="\n  ".implode("",$X).($R==""?substr($jd[$X[0]],16+strlen($X[0])):"");else{$k=$X[3];unset($X[3]);unset($X[6]);if($d!=$X[0])queries("EXEC sp_rename ".q(table($R).".$d").", ".q(idf_unescape($X[0])).", 'COLUMN'");$b["ALTER COLUMN ".implode("",$X)][]="";$jg=$kg[$m[0]];if(default_value($jg)!=$k){if($jg["default"]!==null)$b["DROP"][]=" ".idf_escape($jg["default_constraint"]);if($k)$b["ADD"][]="\n $k FOR $d";}}}}if($R=="")return
  970. queries("CREATE TABLE ".table($B)." (".implode(",",(array)$b["ADD"])."\n)");if($R!=$B)queries("EXEC sp_rename ".q(table($R)).", ".q($B));if($jd)$b[""]=$jd;foreach($b
  971. as$x=>$X){if(!queries("ALTER TABLE ".table($B)." $x".implode(",",$X)))return
  972. false;}foreach($qb
  973. as$x=>$X){$ob=substr($X,9);queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = ".q(get_schema()).", @level1type = N'Table', @level1name = ".q($B).", @level2type = N'Column', @level2name = ".q($x));queries("EXEC sp_addextendedproperty
  974. @name = N'MS_Description',
  975. @value = $ob,
  976. @level0type = N'Schema',
  977. @level0name = ".q(get_schema()).",
  978. @level1type = N'Table',
  979. @level1name = ".q($B).",
  980. @level2type = N'Column',
  981. @level2name = ".q($x));}return
  982. true;}function
  983. alter_indexes($R,$b){$v=array();$ic=array();foreach($b
  984. as$X){if($X[2]=="DROP"){if($X[0]=="PRIMARY")$ic[]=idf_escape($X[1]);else$v[]=idf_escape($X[1])." ON ".table($R);}elseif(!queries(($X[0]!="PRIMARY"?"CREATE $X[0] ".($X[0]!="INDEX"?"INDEX ":"").idf_escape($X[1]!=""?$X[1]:uniqid($R."_"))." ON ".table($R):"ALTER TABLE ".table($R)." ADD PRIMARY KEY")." (".implode(", ",$X[2]).")"))return
  985. false;}return(!$v||queries("DROP INDEX ".implode(", ",$v)))&&(!$ic||queries("ALTER TABLE ".table($R)." DROP ".implode(", ",$ic)));}function
  986. found_rows($S,$Z){}function
  987. foreign_keys($R){$J=array();$Uf=array("CASCADE","NO ACTION","SET NULL","SET DEFAULT");foreach(get_rows("EXEC sp_fkeys @fktable_name = ".q($R).", @fktable_owner = ".q(get_schema()))as$K){$p=&$J[$K["FK_NAME"]];$p["db"]=$K["PKTABLE_QUALIFIER"];$p["ns"]=$K["PKTABLE_OWNER"];$p["table"]=$K["PKTABLE_NAME"];$p["on_update"]=$Uf[$K["UPDATE_RULE"]];$p["on_delete"]=$Uf[$K["DELETE_RULE"]];$p["source"][]=$K["FKCOLUMN_NAME"];$p["target"][]=$K["PKCOLUMN_NAME"];}return$J;}function
  988. truncate_tables($T){return
  989. apply_queries("TRUNCATE TABLE",$T);}function
  990. drop_views($Nj){return
  991. queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Nj)));}function
  992. drop_tables($T){return
  993. queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$T)));}function
  994. move_tables($T,$Nj,$Ii){return
  995. apply_queries("ALTER SCHEMA ".idf_escape($Ii)." TRANSFER",array_merge($T,$Nj));}function
  996. trigger($B,$R){if($B=="")return
  997. array();$L=get_rows("SELECT s.name [Trigger],
  998. CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
  999. CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],
  1000. c.text
  1001. FROM sysobjects s
  1002. JOIN syscomments c ON s.id = c.id
  1003. WHERE s.xtype = 'TR' AND s.name = ".q($B));$J=reset($L);if($J)$J["Statement"]=preg_replace('~^.+\s+AS\s+~isU','',$J["text"]);return$J;}function
  1004. triggers($R){$J=array();foreach(get_rows("SELECT sys1.name,
  1005. CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event],
  1006. CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing]
  1007. FROM sysobjects sys1
  1008. JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id
  1009. WHERE sys1.xtype = 'TR' AND sys2.name = ".q($R))as$K)$J[$K["name"]]=array($K["Timing"],$K["Event"]);return$J;}function
  1010. trigger_options(){return
  1011. array("Timing"=>array("AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("AS"),);}function
  1012. schemas(){return
  1013. get_vals("SELECT name FROM sys.schemas");}function
  1014. get_schema(){if($_GET["ns"]!="")return$_GET["ns"];return
  1015. get_val("SELECT SCHEMA_NAME()");}function
  1016. set_schema($Fh){$_GET["ns"]=$Fh;return
  1017. true;}function
  1018. create_sql($R,$_a,$si){if(is_view(table_status1($R))){$Mj=view($R);return"CREATE VIEW ".table($R)." AS $Mj[select]";}$n=array();$G=false;foreach(fields($R)as$B=>$m){$X=process_field($m,$m);if($X[6])$G=true;$n[]=implode("",$X);}foreach(indexes($R)as$B=>$v){if(!$G||$v["type"]!="PRIMARY"){$e=array();foreach($v["columns"]as$x=>$X)$e[]=idf_escape($X).($v["descs"][$x]?" DESC":"");$B=idf_escape($B);$n[]=($v["type"]=="INDEX"?"INDEX $B":"CONSTRAINT $B ".($v["type"]=="UNIQUE"?"UNIQUE":"PRIMARY KEY"))." (".implode(", ",$e).")";}}foreach(driver()->checkConstraints($R)as$B=>$Wa)$n[]="CONSTRAINT ".idf_escape($B)." CHECK ($Wa)";return"CREATE TABLE ".table($R)." (\n\t".implode(",\n\t",$n)."\n)";}function
  1019. foreign_keys_sql($R){$n=array();foreach(foreign_keys($R)as$jd)$n[]=ltrim(format_foreign_key($jd));return($n?"ALTER TABLE ".table($R)." ADD\n\t".implode(",\n\t",$n).";\n\n":"");}function
  1020. truncate_sql($R){return"TRUNCATE TABLE ".table($R);}function
  1021. use_sql($Nb,$si=""){return"USE ".idf_escape($Nb);}function
  1022. trigger_sql($R){$J="";foreach(triggers($R)as$B=>$hj)$J
  1023. .=create_trigger(" ON ".table($R),trigger($B,$R)).";";return$J;}function
  1024. convert_field($m){}function
  1025. unconvert_field($m,$J){return$J;}function
  1026. support($Uc){return
  1027. preg_match('~^(check|comment|columns|database|drop_col|dump|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~',$Uc);}}class
  1028. Adminer{static$instance;var$error='';function
  1029. name(){return"<a href='https://www.adminer.org/'".target_blank()." id='h1'><img src='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.4.1")."' width='24' height='24' alt='' id='logo'>Adminer</a>";}function
  1030. credentials(){return
  1031. array(SERVER,$_GET["username"],get_password());}function
  1032. connectSsl(){}function
  1033. permanentLogin($h=false){return
  1034. password_file($h);}function
  1035. bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
  1036. serverName($N){return
  1037. h($N);}function
  1038. database(){return
  1039. DB;}function
  1040. databases($hd=true){return
  1041. get_databases($hd);}function
  1042. pluginsLinks(){}function
  1043. operators(){return
  1044. driver()->operators;}function
  1045. schemas(){return
  1046. schemas();}function
  1047. queryTimeout(){return
  1048. 2;}function
  1049. afterConnect(){}function
  1050. headers(){}function
  1051. csp(array$Gb){return$Gb;}function
  1052. head($Kb=null){return
  1053. true;}function
  1054. bodyClass(){echo" adminer";}function
  1055. css(){$J=array();foreach(array("","-dark")as$tf){$o="adminer$tf.css";if(file_exists($o)){$Zc=file_get_contents($o);$J["$o?v=".crc32($Zc)]=($tf?"dark":(preg_match('~prefers-color-scheme:\s*dark~',$Zc)?'':'light'));}}return$J;}function
  1056. loginForm(){echo"<table class='layout'>\n",adminer()->loginFormField('driver','<tr><th>'.'System'.'<td>',html_select("auth[driver]",SqlDriver::$drivers,DRIVER,"loginDriver(this);")),adminer()->loginFormField('server','<tr><th>'.'Server'.'<td>','<input name="auth[server]" value="'.h(SERVER).'" title="hostname[:port]" placeholder="localhost" autocapitalize="off">'),adminer()->loginFormField('username','<tr><th>'.'Username'.'<td>','<input name="auth[username]" id="username" autofocus value="'.h($_GET["username"]).'" autocomplete="username" autocapitalize="off">'.script("const authDriver = qs('#username').form['auth[driver]']; authDriver && authDriver.onchange();")),adminer()->loginFormField('password','<tr><th>'.'Password'.'<td>','<input type="password" name="auth[password]" autocomplete="current-password">'),adminer()->loginFormField('db','<tr><th>'.'Database'.'<td>','<input name="auth[db]" value="'.h($_GET["db"]).'" autocapitalize="off">'),"</table>\n","<p><input type='submit' value='".'Login'."'>\n",checkbox("auth[permanent]",1,$_COOKIE["adminer_permanent"],'Permanent login')."\n";}function
  1057. loginFormField($B,$Hd,$Y){return$Hd.$Y."\n";}function
  1058. login($Te,$F){if($F=="")return
  1059. sprintf('Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.',target_blank());return
  1060. true;}function
  1061. tableName(array$yi){return
  1062. h($yi["Name"]);}function
  1063. fieldName(array$m,$dg=0){$U=$m["full_type"];$ob=$m["comment"];return'<span title="'.h($U.($ob!=""?($U?": ":"").$ob:'')).'">'.h($m["field"]).'</span>';}function
  1064. selectLinks(array$yi,$O=""){$B=$yi["Name"];echo'<p class="links">';$Re=array("select"=>'Select data');if(support("table")||support("indexes"))$Re["table"]='Show structure';$ye=false;if(support("table")){$ye=is_view($yi);if(!$ye)$Re["create"]='Alter table';elseif(support("view"))$Re["view"]='Alter view';}if($O!==null)$Re["edit"]='New item';foreach($Re
  1065. as$x=>$X)echo" <a href='".h(ME)."$x=".urlencode($B).($x=="edit"?$O:"")."'".bold(isset($_GET[$x])).">$X</a>";echo
  1066. doc_link(array(JUSH=>driver()->tableHelp($B,$ye)),"?"),"\n";}function
  1067. foreignKeys($R){return
  1068. foreign_keys($R);}function
  1069. backwardKeys($R,$xi){return
  1070. array();}function
  1071. backwardKeysPrint(array$Da,array$K){}function
  1072. selectQuery($H,$oi,$Sc=false){$J="</p>\n";if(!$Sc&&($Qj=driver()->warnings())){$t="warnings";$J=", <a href='#$t'>".'Warnings'."</a>".script("qsl('a').onclick = partial(toggle, '$t');","")."$J<div id='$t' class='hidden'>\n$Qj</div>\n";}return"<p><code class='jush-".JUSH."'>".h(str_replace("\n"," ",$H))."</code> <span class='time'>(".format_time($oi).")</span>".(support("sql")?" <a href='".h(ME)."sql=".urlencode($H)."'>".'Edit'."</a>":"").$J;}function
  1073. sqlCommandQuery($H){return
  1074. shorten_utf8(trim($H),1000);}function
  1075. sqlPrintAfter(){}function
  1076. rowDescription($R){return"";}function
  1077. rowDescriptions(array$L,array$kd){return$L;}function
  1078. selectLink($X,array$m){}function
  1079. selectVal($X,$_,array$m,$ng){$J=($X===null?"<i>NULL</i>":(preg_match("~char|binary|boolean~",$m["type"])&&!preg_match("~var~",$m["type"])?"<code>$X</code>":(preg_match('~json~',$m["type"])?"<code class='jush-js'>$X</code>":$X)));if(is_blob($m)&&!is_utf8($X))$J="<i>".lang_format(array('%d byte','%d bytes'),strlen($ng))."</i>";return($_?"<a href='".h($_)."'".(is_url($_)?target_blank():"").">$J</a>":$J);}function
  1080. editVal($X,array$m){return$X;}function
  1081. config(){return
  1082. array();}function
  1083. tableStructurePrint(array$n,$yi=null){echo"<div class='scrollable'>\n","<table class='nowrap odds'>\n","<thead><tr><th>".'Column'."<td>".'Type'.(support("comment")?"<td>".'Comment':"")."</thead>\n";$ri=driver()->structuredTypes();foreach($n
  1084. as$m){echo"<tr><th>".h($m["field"]);$U=h($m["full_type"]);$c=h($m["collation"]);echo"<td><span title='$c'>".(in_array($U,(array)$ri['User types'])?"<a href='".h(ME.'type='.urlencode($U))."'>$U</a>":$U.($c&&isset($yi["Collation"])&&$c!=$yi["Collation"]?" $c":""))."</span>",($m["null"]?" <i>NULL</i>":""),($m["auto_increment"]?" <i>".'Auto Increment'."</i>":"");$k=h($m["default"]);echo(isset($m["default"])?" <span title='".'Default value'."'>[<b>".($m["generated"]?"<code class='jush-".JUSH."'>$k</code>":$k)."</b>]</span>":""),(support("comment")?"<td>".h($m["comment"]):""),"\n";}echo"</table>\n","</div>\n";}function
  1085. tableIndexesPrint(array$w,array$yi){$yg=false;foreach($w
  1086. as$B=>$v)$yg|=!!$v["partial"];echo"<table>\n";$Sb=first(driver()->indexAlgorithms($yi));foreach($w
  1087. as$B=>$v){ksort($v["columns"]);$Wg=array();foreach($v["columns"]as$x=>$X)$Wg[]="<i>".h($X)."</i>".($v["lengths"][$x]?"(".$v["lengths"][$x].")":"").($v["descs"][$x]?" DESC":"");echo"<tr title='".h($B)."'>","<th>$v[type]".($Sb&&$v['algorithm']!=$Sb?" ($v[algorithm])":""),"<td>".implode(", ",$Wg);if($yg)echo"<td>".($v['partial']?"<code class='jush-".JUSH."'>WHERE ".h($v['partial']):"");echo"\n";}echo"</table>\n";}function
  1088. selectColumnsPrint(array$M,array$e){print_fieldset("select",'Select',$M);$s=0;$M[""]=array();foreach($M
  1089. as$x=>$X){$X=idx($_GET["columns"],$x,array());$d=select_input(" name='columns[$s][col]'",$e,$X["col"],($x!==""?"selectFieldChange":"selectAddRow"));echo"<div>".(driver()->functions||driver()->grouping?html_select("columns[$s][fun]",array(-1=>"")+array_filter(array('Functions'=>driver()->functions,'Aggregation'=>driver()->grouping)),$X["fun"]).on_help("event.target.value && event.target.value.replace(/ |\$/, '(') + ')'",1).script("qsl('select').onchange = function () { helpClose();".($x!==""?"":" qsl('select, input', this.parentNode).onchange();")." };","")."($d)":$d)."</div>\n";$s++;}echo"</div></fieldset>\n";}function
  1090. selectSearchPrint(array$Z,array$e,array$w){print_fieldset("search",'Search',$Z);foreach($w
  1091. as$s=>$v){if($v["type"]=="FULLTEXT")echo"<div>(<i>".implode("</i>, <i>",array_map('Adminer\h',$v["columns"]))."</i>) AGAINST"," <input type='search' name='fulltext[$s]' value='".h(idx($_GET["fulltext"],$s))."'>",script("qsl('input').oninput = selectFieldChange;",""),checkbox("boolean[$s]",1,isset($_GET["boolean"][$s]),"BOOL"),"</div>\n";}$Ta="this.parentNode.firstChild.onchange();";foreach(array_merge((array)$_GET["where"],array(array()))as$s=>$X){if(!$X||("$X[col]$X[val]"!=""&&in_array($X["op"],adminer()->operators())))echo"<div>".select_input(" name='where[$s][col]'",$e,$X["col"],($X?"selectFieldChange":"selectAddRow"),"(".'anywhere'.")"),html_select("where[$s][op]",adminer()->operators(),$X["op"],$Ta),"<input type='search' name='where[$s][val]' value='".h($X["val"])."'>",script("mixin(qsl('input'), {oninput: function () { $Ta }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});",""),"</div>\n";}echo"</div></fieldset>\n";}function
  1092. selectOrderPrint(array$dg,array$e,array$w){print_fieldset("sort",'Sort',$dg);$s=0;foreach((array)$_GET["order"]as$x=>$X){if($X!=""){echo"<div>".select_input(" name='order[$s]'",$e,$X,"selectFieldChange"),checkbox("desc[$s]",1,isset($_GET["desc"][$x]),'descending')."</div>\n";$s++;}}echo"<div>".select_input(" name='order[$s]'",$e,"","selectAddRow"),checkbox("desc[$s]",1,false,'descending')."</div>\n","</div></fieldset>\n";}function
  1093. selectLimitPrint($z){echo"<fieldset><legend>".'Limit'."</legend><div>","<input type='number' name='limit' class='size' value='".intval($z)."'>",script("qsl('input').oninput = selectFieldChange;",""),"</div></fieldset>\n";}function
  1094. selectLengthPrint($Oi){if($Oi!==null)echo"<fieldset><legend>".'Text length'."</legend><div>","<input type='number' name='text_length' class='size' value='".h($Oi)."'>","</div></fieldset>\n";}function
  1095. selectActionPrint(array$w){echo"<fieldset><legend>".'Action'."</legend><div>","<input type='submit' value='".'Select'."'>"," <span id='noindex' title='".'Full table scan'."'></span>","<script".nonce().">\n","const indexColumns = ";$e=array();foreach($w
  1096. as$v){$Jb=reset($v["columns"]);if($v["type"]!="FULLTEXT"&&$Jb)$e[$Jb]=1;}$e[""]=1;foreach($e
  1097. as$x=>$X)json_row($x);echo";\n","selectFieldChange.call(qs('#form')['select']);\n","</script>\n","</div></fieldset>\n";}function
  1098. selectCommandPrint(){return!information_schema(DB);}function
  1099. selectImportPrint(){return!information_schema(DB);}function
  1100. selectEmailPrint(array$uc,array$e){}function
  1101. selectColumnsProcess(array$e,array$w){$M=array();$wd=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))$wd[]=$M[$x];}}return
  1102. array($M,$wd);}function
  1103. selectSearchProcess(array$n,array$w){$J=array();foreach($w
  1104. 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":"").")";}foreach((array)$_GET["where"]as$x=>$X){$hb=$X["col"];if("$hb$X[val]"!=""&&in_array($X["op"],adminer()->operators())){$sb=array();foreach(($hb!=""?array($hb=>$n[$hb]):$n)as$B=>$m){$Sg="";$rb=" $X[op]";if(preg_match('~IN$~',$X["op"])){$Wd=process_length($X["val"]);$rb
  1105. .=" ".($Wd!=""?$Wd:"(NULL)");}elseif($X["op"]=="SQL")$rb=" $X[val]";elseif(preg_match('~^(I?LIKE) %%$~',$X["op"],$A))$rb=" $A[1] ".adminer()->processInput($m,"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$Sg="$X[op](".q($X["val"]).", ";$rb=")";}elseif(!preg_match('~NULL$~',$X["op"]))$rb
  1106. .=" ".adminer()->processInput($m,$X["val"]);if($hb!=""||(isset($m["privileges"]["where"])&&(preg_match('~^[-\d.'.(preg_match('~IN$~',$X["op"])?',':'').']+$~',$X["val"])||!preg_match('~'.number_type().'|bit~',$m["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match('~char|text|enum|set~',$m["type"]))&&(!preg_match('~date|timestamp~',$m["type"])||preg_match('~^\d+-\d+-\d+~',$X["val"]))))$sb[]=$Sg.driver()->convertSearch(idf_escape($B),$X,$m).$rb;}$J[]=(count($sb)==1?$sb[0]:($sb?"(".implode(" OR ",$sb).")":"1 = 0"));}}return$J;}function
  1107. selectOrderProcess(array$n,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":"");}return$J;}function
  1108. selectLimitProcess(){return(isset($_GET["limit"])?intval($_GET["limit"]):50);}function
  1109. selectLengthProcess(){return(isset($_GET["text_length"])?"$_GET[text_length]":"100");}function
  1110. selectEmailProcess(array$Z,array$kd){return
  1111. false;}function
  1112. selectQueryBuild(array$M,array$Z,array$wd,array$dg,$z,$D){return"";}function
  1113. messageQuery($H,$Pi,$Sc=false){restart_session();$Jd=&get_session("queries");if(!idx($Jd,$_GET["db"]))$Jd[$_GET["db"]]=array();if(strlen($H)>1e6)$H=preg_replace('~[\x80-\xFF]+$~','',substr($H,0,1e6))."\n…";$Jd[$_GET["db"]][]=array($H,time(),$Pi);$ki="sql-".count($Jd[$_GET["db"]]);$J="<a href='#$ki' class='toggle'>".'SQL command'."</a> <a href='' class='jsonly copy'>🗐</a>\n";if(!$Sc&&($Qj=driver()->warnings())){$t="warnings-".count($Jd[$_GET["db"]]);$J="<a href='#$t' class='toggle'>".'Warnings'."</a>, $J<div id='$t' class='hidden'>\n$Qj</div>\n";}return" <span class='time'>".@date("H:i:s")."</span>"." $J<div id='$ki' class='hidden'><pre><code class='jush-".JUSH."'>".shorten_utf8($H,1000)."</code></pre>".($Pi?" <span class='time'>($Pi)</span>":'').(support("sql")?'<p><a href="'.h(str_replace("db=".urlencode(DB),"db=".urlencode($_GET["db"]),ME).'sql=&history='.(count($Jd[$_GET["db"]])-1)).'">'.'Edit'.'</a>':'').'</div>';}function
  1114. editRowPrint($R,array$n,$K,$wj){}function
  1115. editFunctions(array$m){$J=($m["null"]?"NULL/":"");$wj=isset($_GET["select"])||where($_GET);foreach(array(driver()->insertFunctions,driver()->editFunctions)as$x=>$rd){if(!$x||(!isset($_GET["call"])&&$wj)){foreach($rd
  1116. as$Gg=>$X){if(!$Gg||preg_match("~$Gg~",$m["type"]))$J
  1117. .="/$X";}}if($x&&$rd&&!preg_match('~set|bool~',$m["type"])&&!is_blob($m))$J
  1118. .="/SQL";}if($m["auto_increment"]&&!$wj)$J='Auto Increment';return
  1119. explode("/",$J);}function
  1120. editInput($R,array$m,$ya,$Y){if($m["type"]=="enum")return(isset($_GET["select"])?"<label><input type='radio'$ya value='orig' checked><i>".'original'."</i></label> ":"").enum_input("radio",$ya,$m,$Y,"NULL");return"";}function
  1121. editHint($R,array$m,$Y){return"";}function
  1122. processInput(array$m,$Y,$r=""){if($r=="SQL")return$Y;$B=$m["field"];$J=q($Y);if(preg_match('~^(now|getdate|uuid)$~',$r))$J="$r()";elseif(preg_match('~^current_(date|timestamp)$~',$r))$J=$r;elseif(preg_match('~^([+-]|\|\|)$~',$r))$J=idf_escape($B)." $r $J";elseif(preg_match('~^[+-] interval$~',$r))$J=idf_escape($B)." $r ".(preg_match("~^(\\d+|'[0-9.: -]') [A-Z_]+\$~i",$Y)&&JUSH!="pgsql"?$Y:$J);elseif(preg_match('~^(addtime|subtime|concat)$~',$r))$J="$r(".idf_escape($B).", $J)";elseif(preg_match('~^(md5|sha1|password|encrypt)$~',$r))$J="$r($J)";return
  1123. unconvert_field($m,$J);}function
  1124. dumpOutput(){$J=array('text'=>'open','file'=>'save');if(function_exists('gzencode'))$J['gz']='gzip';return$J;}function
  1125. dumpFormat(){return(support("dump")?array('sql'=>'SQL'):array())+array('csv'=>'CSV,','csv;'=>'CSV;','tsv'=>'TSV');}function
  1126. dumpDatabase($j){}function
  1127. dumpTable($R,$si,$ye=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($si)dump_csv(array_keys(fields($R)));}else{if($ye==2){$n=array();foreach(fields($R)as$B=>$m)$n[]=idf_escape($B)." $m[full_type]";$h="CREATE TABLE ".table($R)." (".implode(", ",$n).")";}else$h=create_sql($R,$_POST["auto_increment"],$si);set_utf8mb4($h);if($si&&$h){if($si=="DROP+CREATE"||$ye==1)echo"DROP ".($ye==2?"VIEW":"TABLE")." IF EXISTS ".table($R).";\n";if($ye==1)$h=remove_definer($h);echo"$h;\n\n";}}}function
  1128. dumpData($R,$si,$H){if($si){$df=(JUSH=="sqlite"?0:1048576);$n=array();$Sd=false;if($_POST["format"]=="sql"){if($si=="TRUNCATE+INSERT")echo
  1129. truncate_sql($R).";\n";$n=fields($R);if(JUSH=="mssql"){foreach($n
  1130. as$m){if($m["auto_increment"]){echo"SET IDENTITY_INSERT ".table($R)." ON;\n";$Sd=true;break;}}}}$I=connection()->query($H,1);if($I){$ne="";$Na="";$Ce=array();$sd=array();$ui="";$Vc=($R!=''?'fetch_assoc':'fetch_row');$Cb=0;while($K=$I->$Vc()){if(!$Ce){$Ij=array();foreach($K
  1131. as$X){$m=$I->fetch_field();if(idx($n[$m->name],'generated')){$sd[$m->name]=true;continue;}$Ce[]=$m->name;$x=idf_escape($m->name);$Ij[]="$x = VALUES($x)";}$ui=($si=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Ij):"").";\n";}if($_POST["format"]!="sql"){if($si=="table"){dump_csv($Ce);$si="INSERT";}dump_csv($K);}else{if(!$ne)$ne="INSERT INTO ".table($R)." (".implode(", ",array_map('Adminer\idf_escape',$Ce)).") VALUES";foreach($K
  1132. as$x=>$X){if($sd[$x]){unset($K[$x]);continue;}$m=$n[$x];$K[$x]=($X!==null?unconvert_field($m,preg_match(number_type(),$m["type"])&&!preg_match('~\[~',$m["full_type"])&&is_numeric($X)?$X:q(($X===false?0:$X))):"NULL");}$Dh=($df?"\n":" ")."(".implode(",\t",$K).")";if(!$Na)$Na=$ne.$Dh;elseif(JUSH=='mssql'?$Cb%1000!=0:strlen($Na)+4+strlen($Dh)+strlen($ui)<$df)$Na
  1133. .=",$Dh";else{echo$Na.$ui;$Na=$ne.$Dh;}}$Cb++;}if($Na)echo$Na.$ui;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",connection()->error)."\n";if($Sd)echo"SET IDENTITY_INSERT ".table($R)." OFF;\n";}}function
  1134. dumpFilename($Qd){return
  1135. friendly_url($Qd!=""?$Qd:(SERVER?:"localhost"));}function
  1136. dumpHeaders($Qd,$wf=false){$qg=$_POST["output"];$Nc=(preg_match('~sql~',$_POST["format"])?"sql":($wf?"tar":"csv"));header("Content-Type: ".($qg=="gz"?"application/x-gzip":($Nc=="tar"?"application/x-tar":($Nc=="sql"||$qg!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($qg=="gz"){ob_start(function($Q){return
  1137. gzencode($Q);},1e6);}return$Nc;}function
  1138. dumpFooter(){if($_POST["format"]=="sql")echo"-- ".gmdate("Y-m-d H:i:s e")."\n";}function
  1139. importServerPath(){return"adminer.sql";}function
  1140. homepage(){echo'<p class="links">'.($_GET["ns"]==""&&support("database")?'<a href="'.h(ME).'database=">'.'Alter database'."</a>\n":""),(support("scheme")?"<a href='".h(ME)."scheme='>".($_GET["ns"]!=""?'Alter schema':'Create schema')."</a>\n":""),($_GET["ns"]!==""?'<a href="'.h(ME).'schema=">'.'Database schema'."</a>\n":""),(support("privileges")?"<a href='".h(ME)."privileges='>".'Privileges'."</a>\n":"");if($_GET["ns"]!=="")echo(support("routine")?"<a href='#routines'>".'Routines'."</a>\n":""),(support("sequence")?"<a href='#sequences'>".'Sequences'."</a>\n":""),(support("type")?"<a href='#user-types'>".'User types'."</a>\n":""),(support("event")?"<a href='#events'>".'Events'."</a>\n":"");return
  1141. true;}function
  1142. navigation($sf){echo"<h1>".adminer()->name()." <span class='version'>".VERSION;$Df=$_COOKIE["adminer_version"];echo" <a href='https://www.adminer.org/#download'".target_blank()." id='version'>".(version_compare(VERSION,$Df)<0?h($Df):"")."</a>","</span></h1>\n";if($sf=="auth"){$qg="";foreach((array)$_SESSION["pwds"]as$Kj=>$Wh){foreach($Wh
  1143. as$N=>$Fj){$B=h(get_setting("vendor-$Kj-$N")?:get_driver($Kj));foreach($Fj
  1144. as$V=>$F){if($F!==null){$Qb=$_SESSION["db"][$Kj][$N][$V];foreach(($Qb?array_keys($Qb):array(""))as$j)$qg
  1145. .="<li><a href='".h(auth_url($Kj,$N,$V,$j))."'>($B) ".h("$V@".($N!=""?adminer()->serverName($N):"").($j!=""?" - $j":""))."</a>\n";}}}}if($qg)echo"<ul id='logins'>\n$qg</ul>\n".script("mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$T=array();if($_GET["ns"]!==""&&!$sf&&DB!=""){connection()->select_db(DB);$T=table_status('',true);}adminer()->syntaxHighlighting($T);adminer()->databasesPrint($sf);$ia=array();if(DB==""||!$sf){if(support("sql")){$ia[]="<a href='".h(ME)."sql='".bold(isset($_GET["sql"])&&!isset($_GET["import"])).">".'SQL command'."</a>";$ia[]="<a href='".h(ME)."import='".bold(isset($_GET["import"])).">".'Import'."</a>";}$ia[]="<a href='".h(ME)."dump=".urlencode(isset($_GET["table"])?$_GET["table"]:$_GET["select"])."' id='dump'".bold(isset($_GET["dump"])).">".'Export'."</a>";}$Xd=$_GET["ns"]!==""&&!$sf&&DB!="";if($Xd)$ia[]='<a href="'.h(ME).'create="'.bold($_GET["create"]==="").">".'Create table'."</a>";echo($ia?"<p class='links'>\n".implode("\n",$ia)."\n":"");if($Xd){if($T)adminer()->tablesPrint($T);else
  1146. echo"<p class='message'>".'No tables.'."</p>\n";}}}function
  1147. syntaxHighlighting(array$T){echo
  1148. script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=5.4.1",true);if(support("sql")){echo"<script".nonce().">\n";if($T){$Re=array();foreach($T
  1149. as$R=>$U)$Re[]=preg_quote($R,'/');echo"var jushLinks = { ".JUSH.":";json_row(js_escape(ME).(support("table")?"table":"select").'=$&','/\b('.implode('|',$Re).')\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"])){$Ei=array_fill_keys(array_keys($T),array());foreach(driver()->allFields()as$R=>$n){foreach($n
  1150. as$m)$Ei[$R][]=$m["field"];}echo"addEventListener('DOMContentLoaded', () => { autocompleter = jush.autocompleteSql('".idf_escape("")."', ".json_encode($Ei)."); });\n";}}echo"</script>\n";}echo
  1151. script("syntaxHighlighting('".preg_replace('~^(\d\.?\d).*~s','\1',connection()->server_info)."', '".connection()->flavor."');");}function
  1152. databasesPrint($sf){$i=adminer()->databases();if(DB&&$i&&!in_array(DB,$i))array_unshift($i,DB);echo"<form action=''>\n<p id='dbs'>\n";hidden_fields_get();$Ob=script("mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});");echo"<label title='".'Database'."'>".'DB'.": ".($i?html_select("db",array(""=>"")+$i,DB).$Ob:"<input name='db' value='".h(DB)."' autocapitalize='off' size='19'>\n")."</label>","<input type='submit' value='".'Use'."'".($i?" class='hidden'":"").">\n";if(support("scheme")){if($sf!="db"&&DB!=""&&connection()->select_db(DB)){echo"<br><label>".'Schema'.": ".html_select("ns",array(""=>"")+adminer()->schemas(),$_GET["ns"])."$Ob</label>";if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo
  1153. input_hidden($X);break;}}echo"</p></form>\n";}function
  1154. tablesPrint(array$T){echo"<ul id='tables'>".script("mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($T
  1155. as$R=>$P){$R="$R";$B=adminer()->tableName($P);if($B!=""&&!$P["partition"])echo'<li><a href="'.h(ME).'select='.urlencode($R).'"'.bold($_GET["select"]==$R||$_GET["edit"]==$R,"select")." title='".'Select data'."'>".'select'."</a> ",(support("table")||support("indexes")?'<a href="'.h(ME).'table='.urlencode($R).'"'.bold(in_array($R,array($_GET["table"],$_GET["create"],$_GET["indexes"],$_GET["foreign"],$_GET["trigger"],$_GET["check"],$_GET["view"])),(is_view($P)?"view":"structure"))." title='".'Show structure'."'>$B</a>":"<span>$B</span>")."\n";}echo"</ul>\n";}function
  1156. processList(){return
  1157. process_list();}function
  1158. killProcess($t){return
  1159. kill_process($t);}}class
  1160. Plugins{private
  1161. static$append=array('dumpFormat'=>true,'dumpOutput'=>true,'editRowPrint'=>true,'editFunctions'=>true,'config'=>true);var$plugins;var$error='';private$hooks=array();function
  1162. __construct($Lg){if($Lg===null){$Lg=array();$Ha="adminer-plugins";if(is_dir($Ha)){foreach(glob("$Ha/*.php")as$o)$Yd=include_once"./$o";}$Id=" href='https://www.adminer.org/plugins/#use'".target_blank();if(file_exists("$Ha.php")){$Yd=include_once"./$Ha.php";if(is_array($Yd)){foreach($Yd
  1163. as$Kg)$Lg[get_class($Kg)]=$Kg;}else$this->error
  1164. .=sprintf('%s must <a%s>return an array</a>.',"<b>$Ha.php</b>",$Id)."<br>";}foreach(get_declared_classes()as$db){if(!$Lg[$db]&&preg_match('~^Adminer\w~i',$db)){$oh=new
  1165. \ReflectionClass($db);$xb=$oh->getConstructor();if($xb&&$xb->getNumberOfRequiredParameters())$this->error
  1166. .=sprintf('<a%s>Configure</a> %s in %s.',$Id,"<b>$db</b>","<b>$Ha.php</b>")."<br>";else$Lg[$db]=new$db;}}}$this->plugins=$Lg;$la=new
  1167. Adminer;$Lg[]=$la;$oh=new
  1168. \ReflectionObject($la);foreach($oh->getMethods()as$qf){foreach($Lg
  1169. as$Kg){$B=$qf->getName();if(method_exists($Kg,$B))$this->hooks[$B][]=$Kg;}}}function
  1170. __call($B,array$vg){$ua=array();foreach($vg
  1171. as$x=>$X)$ua[]=&$vg[$x];$J=null;foreach($this->hooks[$B]as$Kg){$Y=call_user_func_array(array($Kg,$B),$ua);if($Y!==null){if(!self::$append[$B])return$Y;$J=$Y+(array)$J;}}return$J;}}abstract
  1172. class
  1173. Plugin{protected$translations=array();function
  1174. description(){return$this->lang('');}function
  1175. screenshot(){return"";}protected
  1176. function
  1177. lang($u,$Jf=null){$ua=func_get_args();$ua[0]=idx($this->translations[LANG],$u)?:$u;return
  1178. call_user_func_array('Adminer\lang_format',$ua);}}Adminer::$instance=(function_exists('adminer_object')?adminer_object():(is_dir("adminer-plugins")||file_exists("adminer-plugins.php")?new
  1179. Plugins(null):new
  1180. 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
  1181. Db
  1182. extends
  1183. \MySQLi{static$instance;var$extension="MySQLi",$flavor='';function
  1184. __construct(){parent::init();}function
  1185. attach($N,$V,$F){mysqli_report(MYSQLI_REPORT_OFF);list($Md,$Mg)=host_port($N);$ni=adminer()->connectSsl();if($ni)$this->ssl_set($ni['key'],$ni['cert'],$ni['ca'],'','');$J=@$this->real_connect(($N!=""?$Md: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($Mg)?intval($Mg):ini_get("mysqli.default_port")),(is_numeric($Mg)?null:$Mg),($ni?($ni['verify']!==false?2048:64):0));$this->options(MYSQLI_OPT_LOCAL_INFILE,0);return($J?'':$this->error);}function
  1186. set_charset($Va){if(parent::set_charset($Va))return
  1187. true;parent::set_charset('utf8');return$this->query("SET NAMES $Va");}function
  1188. next_result(){return
  1189. self::more_results()&&parent::next_result();}function
  1190. 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
  1191. Db
  1192. extends
  1193. SqlDb{private$link;function
  1194. attach($N,$V,$F){if(ini_bool("mysql.allow_local_infile"))return
  1195. sprintf('Disable %s or enable %s or %s extensions.',"'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
  1196. mysql_error();$this->server_info=mysql_get_server_info($this->link);return'';}function
  1197. set_charset($Va){if(function_exists('mysql_set_charset')){if(mysql_set_charset($Va,$this->link))return
  1198. true;mysql_set_charset('utf8',$this->link);}return$this->query("SET NAMES $Va");}function
  1199. quote($Q){return"'".mysql_real_escape_string($Q,$this->link)."'";}function
  1200. select_db($Nb){return
  1201. mysql_select_db($Nb,$this->link);}function
  1202. query($H,$oj=false){$I=@($oj?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
  1203. false;}if($I===true){$this->affected_rows=mysql_affected_rows($this->link);$this->info=mysql_info($this->link);return
  1204. true;}return
  1205. new
  1206. Result($I);}}class
  1207. Result{var$num_rows;private$result;private$offset=0;function
  1208. __construct($I){$this->result=$I;$this->num_rows=mysql_num_rows($I);}function
  1209. fetch_assoc(){return
  1210. mysql_fetch_assoc($this->result);}function
  1211. fetch_row(){return
  1212. mysql_fetch_row($this->result);}function
  1213. fetch_field(){$J=mysql_fetch_field($this->result,$this->offset++);$J->orgtable=$J->table;$J->charsetnr=($J->blob?63:0);return$J;}function
  1214. __destruct(){mysql_free_result($this->result);}}}elseif(extension_loaded("pdo_mysql")){class
  1215. Db
  1216. extends
  1217. PdoDb{var$extension="PDO_MySQL";function
  1218. attach($N,$V,$F){$bg=array(\PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$ni=adminer()->connectSsl();if($ni){if($ni['key'])$bg[\PDO::MYSQL_ATTR_SSL_KEY]=$ni['key'];if($ni['cert'])$bg[\PDO::MYSQL_ATTR_SSL_CERT]=$ni['cert'];if($ni['ca'])$bg[\PDO::MYSQL_ATTR_SSL_CA]=$ni['ca'];if(isset($ni['verify']))$bg[\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT]=$ni['verify'];}list($Md,$Mg)=host_port($N);return$this->dsn("mysql:charset=utf8;host=$Md".($Mg?(is_numeric($Mg)?";port=":";unix_socket=").$Mg:""),$V,$F,$bg);}function
  1219. set_charset($Va){return$this->query("SET NAMES $Va");}function
  1220. select_db($Nb){return$this->query("USE ".idf_escape($Nb));}function
  1221. query($H,$oj=false){$this->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$oj);return
  1222. parent::query($H,$oj);}}}class
  1223. Driver
  1224. extends
  1225. 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");static
  1226. function
  1227. connect($N,$V,$F){$f=parent::connect($N,$V,$F);if(is_string($f)){if(function_exists('iconv')&&!is_utf8($f)&&strlen($Dh=iconv("windows-1250","utf-8",$f))>strlen($f))$f=$Dh;return$f;}$f->set_charset(charset($f));$f->query("SET sql_quote_show_create = 1, autocommit = 1");$f->flavor=(preg_match('~MariaDB~',$f->server_info)?'maria':'mysql');add_driver(DRIVER,($f->flavor=='maria'?"MariaDB":"MySQL"));return$f;}function
  1228. __construct(Db$f){parent::__construct($f);$this->types=array('Numbers'=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),'Date and time'=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),'Strings'=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),'Lists'=>array("enum"=>65535,"set"=>64),'Binary'=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),'Geometry'=>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,$f))$this->types['Strings']["json"]=4294967295;if(min_version('',10.7,$f)){$this->types['Strings']["uuid"]=128;$this->insertFunctions['uuid']='uuid';}if(min_version(9,'',$f)){$this->types['Numbers']["vector"]=16383;$this->insertFunctions['vector']='string_to_vector';}if(min_version(5.1,'',$f))$this->partitionBy=array("HASH","LINEAR HASH","KEY","LINEAR KEY","RANGE","LIST");if(min_version(5.7,10.2,$f))$this->generated=array("STORED","VIRTUAL");}function
  1229. unconvertFunction(array$m){return(preg_match("~binary~",$m["type"])?"<code class='jush-sql'>UNHEX</code>":($m["type"]=="bit"?doc_link(array('sql'=>'bit-value-literals.html'),"<code>b''</code>"):(preg_match("~geometry|point|linestring|polygon~",$m["type"])?"<code class='jush-sql'>GeomFromText</code>":"")));}function
  1230. insert($R,array$O){return($O?parent::insert($R,$O):queries("INSERT INTO ".table($R)." ()\nVALUES ()"));}function
  1231. insertUpdate($R,array$L,array$G){$e=array_keys(reset($L));$Sg="INSERT INTO ".table($R)." (".implode(", ",$e).") VALUES\n";$Ij=array();foreach($e
  1232. as$x)$Ij[$x]="$x = VALUES($x)";$ui="\nON DUPLICATE KEY UPDATE ".implode(", ",$Ij);$Ij=array();$y=0;foreach($L
  1233. as$O){$Y="(".implode(", ",$O).")";if($Ij&&(strlen($Sg)+$y+strlen($Y)+strlen($ui)>1e6)){if(!queries($Sg.implode(",\n",$Ij).$ui))return
  1234. false;$Ij=array();$y=0;}$Ij[]=$Y;$y+=strlen($Y)+2;}return
  1235. queries($Sg.implode(",\n",$Ij).$ui);}function
  1236. slowQuery($H,$Qi){if(min_version('5.7.8','10.1.2')){if($this->conn->flavor=='maria')return"SET STATEMENT max_statement_time=$Qi FOR $H";elseif(preg_match('~^(SELECT\b)(.+)~is',$H,$A))return"$A[1] /*+ MAX_EXECUTION_TIME(".($Qi*1000).") */ $A[2]";}}function
  1237. convertSearch($u,array$X,array$m){return(preg_match('~char|text|enum|set~',$m["type"])&&!preg_match("~^utf8~",$m["collation"])&&preg_match('~[\x80-\xFF]~',$X['val'])?"CONVERT($u USING ".charset($this->conn).")":$u);}function
  1238. warnings(){$I=$this->conn->query("SHOW WARNINGS");if($I&&$I->num_rows){ob_start();print_select_result($I);return
  1239. ob_get_clean();}}function
  1240. tableHelp($B,$ye=false){$Ve=($this->conn->flavor=='maria');if(information_schema(DB))return
  1241. strtolower("information-schema-".($Ve?"$B-table/":str_replace("_","-",$B)."-table.html"));if(DB=="mysql")return($Ve?"mysql$B-table/":"system-schema.html");}function
  1242. partitionsInfo($R){$pd="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 $pd ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");$J=array();list($J["partition_by"],$J["partition"],$J["partitions"])=$I->fetch_row();$Cg=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $pd AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");$J["partition_names"]=array_keys($Cg);$J["partition_values"]=array_values($Cg);return$J;}function
  1243. hasCStyleEscapes(){static$Qa;if($Qa===null){$li=get_val("SHOW VARIABLES LIKE 'sql_mode'",1,$this->conn);$Qa=(strpos($li,'NO_BACKSLASH_ESCAPES')===false);}return$Qa;}function
  1244. engines(){$J=array();foreach(get_rows("SHOW ENGINES")as$K){if(preg_match("~YES|DEFAULT~",$K["Support"]))$J[]=$K["Engine"];}return$J;}function
  1245. indexAlgorithms(array$yi){return(preg_match('~^(MEMORY|NDB)$~',$yi["Engine"])?array("HASH","BTREE"):array());}}function
  1246. idf_escape($u){return"`".str_replace("`","``",$u)."`";}function
  1247. table($u){return
  1248. idf_escape($u);}function
  1249. get_databases($hd){$J=get_session("dbs");if($J===null){$H="SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME";$J=($hd?slow_query($H):get_vals($H));restart_session();set_session("dbs",$J);stop_session();}return$J;}function
  1250. limit($H,$Z,$z,$C=0,$Rh=" "){return" $H$Z".($z?$Rh."LIMIT $z".($C?" OFFSET $C":""):"");}function
  1251. limit1($R,$H,$Z,$Rh="\n"){return
  1252. limit($H,$Z,1,0,$Rh);}function
  1253. db_collation($j,array$jb){$J=null;$h=get_val("SHOW CREATE DATABASE ".idf_escape($j),1);if(preg_match('~ COLLATE ([^ ]+)~',$h,$A))$J=$A[1];elseif(preg_match('~ CHARACTER SET ([^ ]+)~',$h,$A))$J=$jb[$A[1]][-1];return$J;}function
  1254. logged_user(){return
  1255. get_val("SELECT USER()");}function
  1256. tables_list(){return
  1257. get_key_vals("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME");}function
  1258. count_tables(array$i){$J=array();foreach($i
  1259. as$j)$J[$j]=count(get_vals("SHOW TABLES IN ".idf_escape($j)));return$J;}function
  1260. table_status($B="",$Tc=false){$J=array();foreach(get_rows($Tc?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($B!=""?"AND TABLE_NAME = ".q($B):"ORDER BY Name"):"SHOW TABLE STATUS".($B!=""?" LIKE ".q(addcslashes($B,"%_\\")):""))as$K){if($K["Engine"]=="InnoDB")$K["Comment"]=preg_replace('~(?:(.+); )?InnoDB free: .*~','\1',$K["Comment"]);if(!isset($K["Engine"]))$K["Comment"]="";if($B!="")$K["Name"]=$B;$J[$K["Name"]]=$K;}return$J;}function
  1261. is_view(array$S){return$S["Engine"]===null;}function
  1262. fk_support(array$S){return
  1263. preg_match('~InnoDB|IBMDB2I'.(min_version(5.6)?'|NDB':'').'~i',$S["Engine"]);}function
  1264. fields($R){$Ve=(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){$m=$K["COLUMN_NAME"];$U=$K["COLUMN_TYPE"];$td=$K["GENERATION_EXPRESSION"];$Qc=$K["EXTRA"];preg_match('~^(VIRTUAL|PERSISTENT|STORED)~',$Qc,$sd);preg_match('~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~',$U,$Ye);$k=$K["COLUMN_DEFAULT"];if($k!=""){$xe=preg_match('~text|json~',$Ye[1]);if(!$Ve&&$xe)$k=preg_replace("~^(_\w+)?('.*')$~",'\2',stripslashes($k));if($Ve||$xe){$k=($k=="NULL"?null:preg_replace_callback("~^'(.*)'$~",function($A){return
  1265. stripslashes(str_replace("''","'",$A[1]));},$k));}if(!$Ve&&preg_match('~binary~',$Ye[1])&&preg_match('~^0x(\w*)$~',$k,$A))$k=pack("H*",$A[1]);}$J[$m]=array("field"=>$m,"full_type"=>$U,"type"=>$Ye[1],"length"=>$Ye[2],"unsigned"=>ltrim($Ye[3].$Ye[4]),"default"=>($sd?($Ve?$td:stripslashes($td)):$k),"null"=>($K["IS_NULLABLE"]=="YES"),"auto_increment"=>($Qc=="auto_increment"),"on_update"=>(preg_match('~\bon update (\w+)~i',$Qc,$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"=>($sd[1]=="PERSISTENT"?"STORED":$sd[1]),);}return$J;}function
  1266. indexes($R,$g=null){$J=array();foreach(get_rows("SHOW INDEX FROM ".table($R),$g)as$K){$B=$K["Key_name"];$J[$B]["type"]=($B=="PRIMARY"?"PRIMARY":($K["Index_type"]=="FULLTEXT"?"FULLTEXT":($K["Non_unique"]?($K["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$J[$B]["columns"][]=$K["Column_name"];$J[$B]["lengths"][]=($K["Index_type"]=="SPATIAL"?null:$K["Sub_part"]);$J[$B]["descs"][]=null;$J[$B]["algorithm"]=$K["Index_type"];}return$J;}function
  1267. foreign_keys($R){static$Gg='(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")';$J=array();$Db=get_val("SHOW CREATE TABLE ".table($R),1);if($Db){preg_match_all("~CONSTRAINT ($Gg) FOREIGN KEY ?\\(((?:$Gg,? ?)+)\\) REFERENCES ($Gg)(?:\\.($Gg))? \\(((?:$Gg,? ?)+)\\)(?: ON DELETE (".driver()->onActions."))?(?: ON UPDATE (".driver()->onActions."))?~",$Db,$Ze,PREG_SET_ORDER);foreach($Ze
  1268. as$A){preg_match_all("~$Gg~",$A[2],$fi);preg_match_all("~$Gg~",$A[5],$Ii);$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',$fi[0]),"target"=>array_map('Adminer\idf_unescape',$Ii[0]),"on_delete"=>($A[6]?:"RESTRICT"),"on_update"=>($A[7]?:"RESTRICT"),);}}return$J;}function
  1269. view($B){return
  1270. array("select"=>preg_replace('~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU','',get_val("SHOW CREATE VIEW ".table($B),1)));}function
  1271. 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
  1272. as$x=>$X)sort($J[$x]);return$J;}function
  1273. information_schema($j){return($j=="information_schema")||(min_version(5.5)&&$j=="performance_schema");}function
  1274. error(){return
  1275. h(preg_replace('~^You have an error.*syntax to use~U',"Syntax error",connection()->error));}function
  1276. create_database($j,$c){return
  1277. queries("CREATE DATABASE ".idf_escape($j).($c?" COLLATE ".q($c):""));}function
  1278. drop_databases(array$i){$J=apply_queries("DROP DATABASE",$i,'Adminer\idf_escape');restart_session();set_session("dbs",null);return$J;}function
  1279. rename_database($B,$c){$J=false;if(create_database($B,$c)){$T=array();$Nj=array();foreach(tables_list()as$R=>$U){if($U=='VIEW')$Nj[]=$R;else$T[]=$R;}$J=(!$T&&!$Nj)||move_tables($T,$Nj,$B);drop_databases($J?array(DB):array());}return$J;}function
  1280. auto_increment(){$Aa=" 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)){$Aa="";break;}if($v["type"]=="PRIMARY")$Aa=" UNIQUE";}}return" AUTO_INCREMENT$Aa";}function
  1281. alter_table($R,$B,array$n,array$jd,$ob,$xc,$c,$_a,$E){$b=array();foreach($n
  1282. as$m){if($m[1]){$k=$m[1][3];if(preg_match('~ GENERATED~',$k)){$m[1][3]=(connection()->flavor=='maria'?"":$m[1][2]);$m[1][2]=$k;}$b[]=($R!=""?($m[0]!=""?"CHANGE ".idf_escape($m[0]):"ADD"):" ")." ".implode($m[1]).($R!=""?$m[2]:"");}else$b[]="DROP ".idf_escape($m[0]);}$b=array_merge($b,$jd);$P=($ob!==null?" COMMENT=".q($ob):"").($xc?" ENGINE=".q($xc):"").($c?" COLLATE ".q($c):"").($_a!=""?" AUTO_INCREMENT=$_a":"");if($E){$Cg=array();if($E["partition_by"]=='RANGE'||$E["partition_by"]=='LIST'){foreach($E["partition_names"]as$x=>$X){$Y=$E["partition_values"][$x];$Cg[]="\n  PARTITION ".idf_escape($X)." VALUES ".($E["partition_by"]=='RANGE'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$P
  1283. .="\nPARTITION BY $E[partition_by]($E[partition])";if($Cg)$P
  1284. .=" (".implode(",",$Cg)."\n)";elseif($E["partitions"])$P
  1285. .=" PARTITIONS ".(+$E["partitions"]);}elseif($E===null)$P
  1286. .="\nREMOVE PARTITIONING";if($R=="")return
  1287. queries("CREATE TABLE ".table($B)." (\n".implode(",\n",$b)."\n)$P");if($R!=$B)$b[]="RENAME TO ".table($B);if($P)$b[]=ltrim($P);return($b?queries("ALTER TABLE ".table($R)."\n".implode(",\n",$b)):true);}function
  1288. alter_indexes($R,$b){$Ua=array();foreach($b
  1289. as$X)$Ua[]=($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
  1290. queries("ALTER TABLE ".table($R).implode(",",$Ua));}function
  1291. truncate_tables(array$T){return
  1292. apply_queries("TRUNCATE TABLE",$T);}function
  1293. drop_views(array$Nj){return
  1294. queries("DROP VIEW ".implode(", ",array_map('Adminer\table',$Nj)));}function
  1295. drop_tables(array$T){return
  1296. queries("DROP TABLE ".implode(", ",array_map('Adminer\table',$T)));}function
  1297. move_tables(array$T,array$Nj,$Ii){$sh=array();foreach($T
  1298. as$R)$sh[]=table($R)." TO ".idf_escape($Ii).".".table($R);if(!$sh||queries("RENAME TABLE ".implode(", ",$sh))){$Wb=array();foreach($Nj
  1299. as$R)$Wb[table($R)]=view($R);connection()->select_db($Ii);$j=idf_escape(DB);foreach($Wb
  1300. as$B=>$Mj){if(!queries("CREATE VIEW $B AS ".str_replace(" $j."," ",$Mj["select"]))||!queries("DROP VIEW $j.$B"))return
  1301. false;}return
  1302. true;}return
  1303. false;}function
  1304. copy_tables(array$T,array$Nj,$Ii){queries("SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'");foreach($T
  1305. as$R){$B=($Ii==DB?table("copy_$R"):idf_escape($Ii).".".table($R));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $B"))||!queries("CREATE TABLE $B LIKE ".table($R))||!queries("INSERT INTO $B SELECT * FROM ".table($R)))return
  1306. false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")))as$K){$hj=$K["Trigger"];if(!queries("CREATE TRIGGER ".($Ii==DB?idf_escape("copy_$hj"):idf_escape($Ii).".".idf_escape($hj))." $K[Timing] $K[Event] ON $B FOR EACH ROW\n$K[Statement];"))return
  1307. false;}}foreach($Nj
  1308. as$R){$B=($Ii==DB?table("copy_$R"):idf_escape($Ii).".".table($R));$Mj=view($R);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $B"))||!queries("CREATE VIEW $B AS $Mj[select]"))return
  1309. false;}return
  1310. true;}function
  1311. trigger($B,$R){if($B=="")return
  1312. array();$L=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($B));return
  1313. reset($L);}function
  1314. 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
  1315. trigger_options(){return
  1316. array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
  1317. routine($B,$U){$ra=array("bool","boolean","integer","double precision","real","dec","numeric","fixed","national char","national varchar");$gi="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$zc=driver()->enumLength;$mj="((".implode("|",array_merge(array_keys(driver()->types()),$ra)).")\\b(?:\\s*\\(((?:[^'\")]|$zc)++)\\))?"."\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?(?:\\s*COLLATE\\s*['\"]?[^'\"\\s,]+['\"]?)?";$Gg="$gi*(".($U=="FUNCTION"?"":driver()->inout).")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$mj";$h=get_val("SHOW CREATE $U ".idf_escape($B),2);preg_match("~\\(((?:$Gg\\s*,?)*)\\)\\s*".($U=="FUNCTION"?"RETURNS\\s+$mj\\s+":"")."(.*)~is",$h,$A);$n=array();preg_match_all("~$Gg\\s*,?~is",$A[1],$Ze,PREG_SET_ORDER);foreach($Ze
  1318. as$ug)$n[]=array("field"=>str_replace("``","`",$ug[2]).$ug[3],"type"=>strtolower($ug[5]),"length"=>preg_replace_callback("~$zc~s",'Adminer\normalize_enum',$ug[6]),"unsigned"=>strtolower(preg_replace('~\s+~',' ',trim("$ug[8] $ug[7]"))),"null"=>true,"full_type"=>$ug[4],"inout"=>strtoupper($ug[1]),"collation"=>strtolower($ug[9]),);return
  1319. array("fields"=>$n,"comment"=>get_val("SELECT ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_NAME = ".q($B)),)+($U!="FUNCTION"?array("definition"=>$A[11]):array("returns"=>array("type"=>$A[12],"length"=>$A[13],"unsigned"=>$A[15],"collation"=>$A[16]),"definition"=>$A[17],"language"=>"SQL",));}function
  1320. routines(){return
  1321. get_rows("SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()");}function
  1322. routine_languages(){return
  1323. array();}function
  1324. routine_id($B,array$K){return
  1325. idf_escape($B);}function
  1326. last_id($I){return
  1327. get_val("SELECT LAST_INSERT_ID()");}function
  1328. explain(Db$f,$H){return$f->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$H);}function
  1329. found_rows(array$S,array$Z){return($Z||$S["Engine"]!="InnoDB"?null:$S["Rows"]);}function
  1330. create_sql($R,$_a,$si){$J=get_val("SHOW CREATE TABLE ".table($R),1);if(!$_a)$J=preg_replace('~ AUTO_INCREMENT=\d+~','',$J);return$J;}function
  1331. truncate_sql($R){return"TRUNCATE ".table($R);}function
  1332. use_sql($Nb,$si=""){$B=idf_escape($Nb);$J="";if(preg_match('~CREATE~',$si)&&($h=get_val("SHOW CREATE DATABASE $B",1))){set_utf8mb4($h);if($si=="DROP+CREATE")$J="DROP DATABASE IF EXISTS $B;\n";$J
  1333. .="$h;\n";}return$J."USE $B";}function
  1334. trigger_sql($R){$J="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($R,"%_\\")),null,"-- ")as$K)$J
  1335. .="\nCREATE TRIGGER ".idf_escape($K["Trigger"])." $K[Timing] $K[Event] ON ".table($K["Table"])." FOR EACH ROW\n$K[Statement];;\n";return$J;}function
  1336. show_variables(){return
  1337. get_rows("SHOW VARIABLES");}function
  1338. show_status(){return
  1339. get_rows("SHOW STATUS");}function
  1340. process_list(){return
  1341. get_rows("SHOW FULL PROCESSLIST");}function
  1342. convert_field(array$m){if(preg_match("~binary~",$m["type"]))return"HEX(".idf_escape($m["field"]).")";if($m["type"]=="bit")return"BIN(".idf_escape($m["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$m["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($m["field"]).")";}function
  1343. unconvert_field(array$m,$J){if(preg_match("~binary~",$m["type"]))$J="UNHEX($J)";if($m["type"]=="bit")$J="CONVERT(b$J, UNSIGNED)";if(preg_match("~geometry|point|linestring|polygon~",$m["type"])){$Sg=(min_version(8)?"ST_":"");$J=$Sg."GeomFromText($J, $Sg"."SRID($m[field]))";}return$J;}function
  1344. support($Uc){return
  1345. preg_match('~^(comment|columns|copy|database|drop_col|dump|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'.(min_version(5.1)?'|event':'').(min_version(8)?'|descidx':'').(min_version('8.0.16','10.2.1')?'|check':'').')$~',$Uc);}function
  1346. kill_process($t){return
  1347. queries("KILL ".number($t));}function
  1348. connection_id(){return"SELECT CONNECTION_ID()";}function
  1349. max_connections(){return
  1350. get_val("SELECT @@max_connections");}function
  1351. types(){return
  1352. array();}function
  1353. type_values($t){return"";}function
  1354. schemas(){return
  1355. array();}function
  1356. get_schema(){return"";}function
  1357. set_schema($Fh,$g=null){return
  1358. 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
  1359. page_header($Si,$l="",$Ma=array(),$Ti=""){page_headers();if(is_ajax()&&$l){page_messages($l);exit;}if(!ob_get_level())ob_start('ob_gzhandler',4096);$Ui=$Si.($Ti!=""?": $Ti":"");$Vi=strip_tags($Ui.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".adminer()->name());echo'<!DOCTYPE html>
  1360. <html lang="en" dir="ltr">
  1361. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  1362. <meta name="robots" content="noindex">
  1363. <meta name="viewport" content="width=device-width,initial-scale=1">
  1364. <title>',$Vi,'</title>
  1365. <link rel="stylesheet" href="',h(preg_replace("~\\?.*~","",ME)."?file=default.css&version=5.4.1"),'">
  1366. ';$Hb=adminer()->css();if(is_int(key($Hb)))$Hb=array_fill_keys($Hb,'light');$Ed=in_array('light',$Hb)||in_array('',$Hb);$Cd=in_array('dark',$Hb)||in_array('',$Hb);$Kb=($Ed?($Cd?null:false):($Cd?:null));$jf=" media='(prefers-color-scheme: dark)'";if($Kb!==false)echo"<link rel='stylesheet'".($Kb?"":$jf)." href='".h(preg_replace("~\\?.*~","",ME)."?file=dark.css&version=5.4.1")."'>\n";echo"<meta name='color-scheme' content='".($Kb===null?"light dark":($Kb?"dark":"light"))."'>\n",script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=5.4.1");if(adminer()->head($Kb))echo"<link rel='icon' href='data:image/gif;base64,R0lGODlhEAAQAJEAAAQCBPz+/PwCBAROZCH5BAEAAAAALAAAAAAQABAAAAI2hI+pGO1rmghihiUdvUBnZ3XBQA7f05mOak1RWXrNq5nQWHMKvuoJ37BhVEEfYxQzHjWQ5qIAADs='>\n","<link rel='apple-touch-icon' href='".h(preg_replace("~\\?.*~","",ME)."?file=logo.png&version=5.4.1")."'>\n";foreach($Hb
  1367. as$_j=>$tf){$ya=($tf=='dark'&&!$Kb?$jf:($tf=='light'&&$Cd?" media='(prefers-color-scheme: light)'":""));echo"<link rel='stylesheet'$ya href='".h($_j)."'>\n";}echo"\n<body class='".'ltr'." nojs";adminer()->bodyClass();echo"'>\n";$o=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists('openssl_verify')&&file_exists($o)&&filemtime($o)+86400>time()){$Lj=unserialize(file_get_contents($o));$ch="-----BEGIN PUBLIC KEY-----
  1368. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK
  1369. RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs
  1370. DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
  1371. h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO
  1372. jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B
  1373. nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ
  1374. fQIDAQAB
  1375. -----END PUBLIC KEY-----
  1376. ";if(openssl_verify($Lj["version"],base64_decode($Lj["signature"]),$ch)==1)$_COOKIE["adminer_version"]=$Lj["version"];}echo
  1377. script("mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick".(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, '".VERSION."', '".js_escape(ME)."', '".get_token()."')")."});
  1378. document.body.classList.replace('nojs', 'js');
  1379. const offlineMessage = '".js_escape('You are offline.')."';
  1380. const thousandsSeparator = '".js_escape(',')."';"),"<div id='help' class='jush-".JUSH." jsonly hidden'></div>\n",script("mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});"),"<div id='content'>\n","<span id='menuopen' class='jsonly'>".icon("move","","menu","")."</span>".script("qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }");if($Ma!==null){$_=substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1);echo'<p id="breadcrumb"><a href="'.h($_?:".").'">'.get_driver(DRIVER).'</a> » ';$_=substr(preg_replace('~\b(db|ns)=[^&]*&~','',ME),0,-1);$N=adminer()->serverName(SERVER);$N=($N!=""?$N:'Server');if($Ma===false)echo"$N\n";else{echo"<a href='".h($_)."' accesskey='1' title='Alt+Shift+1'>$N</a> » ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ma)))echo'<a href="'.h($_."&db=".urlencode(DB).(support("scheme")?"&ns=":"")).'">'.h(DB).'</a> » ';if(is_array($Ma)){if($_GET["ns"]!="")echo'<a href="'.h(substr(ME,0,-1)).'">'.h($_GET["ns"]).'</a> » ';foreach($Ma
  1381. as$x=>$X){$Yb=(is_array($X)?$X[1]:h($X));if($Yb!="")echo"<a href='".h(ME."$x=").urlencode(is_array($X)?$X[0]:$X)."'>$Yb</a> » ";}}echo"$Si\n";}}echo"<h2>$Ui</h2>\n","<div id='ajaxstatus' class='jsonly hidden'></div>\n";restart_session();page_messages($l);$i=&get_session("dbs");if(DB!=""&&$i&&!in_array(DB,$i,true))$i=null;stop_session();define('Adminer\PAGE_HEADER',1);}function
  1382. 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$Gb){$Gd=array();foreach($Gb
  1383. as$x=>$X)$Gd[]="$x $X";header("Content-Security-Policy: ".implode("; ",$Gd));}adminer()->headers();}function
  1384. csp(){return
  1385. array(array("script-src"=>"'self' 'unsafe-inline' 'nonce-".get_nonce()."' 'strict-dynamic'","connect-src"=>"'self'","frame-src"=>"https://www.adminer.org","object-src"=>"'none'","base-uri"=>"'none'","form-action"=>"'self'",),);}function
  1386. get_nonce(){static$Ff;if(!$Ff)$Ff=base64_encode(rand_string());return$Ff;}function
  1387. page_messages($l){$zj=preg_replace('~^[^?]*~','',$_SERVER["REQUEST_URI"]);$pf=idx($_SESSION["messages"],$zj);if($pf){echo"<div class='message'>".implode("</div>\n<div class='message'>",$pf)."</div>".script("messagesPrint();");unset($_SESSION["messages"][$zj]);}if($l)echo"<div class='error'>$l</div>\n";if(adminer()->error)echo"<div class='error'>".adminer()->error."</div>\n";}function
  1388. page_footer($sf=""){echo"</div>\n\n<div id='foot' class='foot'>\n<div id='menu'>\n";adminer()->navigation($sf);echo"</div>\n";if($sf!="auth")echo'<form action="" method="post">
  1389. <p class="logout">
  1390. <span>',h($_GET["username"])."\n",'</span>
  1391. <input type="submit" name="logout" value="Logout" id="logout">
  1392. ',input_token(),'</form>
  1393. ';echo"</div>\n\n",script("setupSubmitHighlight(document);");}function
  1394. int32($yf){while($yf>=2147483648)$yf-=4294967296;while($yf<=-2147483649)$yf+=4294967296;return(int)$yf;}function
  1395. long2str(array$W,$Pj){$Dh='';foreach($W
  1396. as$X)$Dh
  1397. .=pack('V',$X);if($Pj)return
  1398. substr($Dh,0,end($W));return$Dh;}function
  1399. str2long($Dh,$Pj){$W=array_values(unpack('V*',str_pad($Dh,4*ceil(strlen($Dh)/4),"\0")));if($Pj)$W[]=strlen($Dh);return$W;}function
  1400. xxtea_mx($Wj,$Vj,$vi,$Ae){return
  1401. int32((($Wj>>5&0x7FFFFFF)^$Vj<<2)+(($Vj>>3&0x1FFFFFFF)^$Wj<<4))^int32(($vi^$Vj)+($Ae^$Wj));}function
  1402. encrypt_string($qi,$x){if($qi=="")return"";$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($qi,true);$yf=count($W)-1;$Wj=$W[$yf];$Vj=$W[0];$dh=floor(6+52/($yf+1));$vi=0;while($dh-->0){$vi=int32($vi+0x9E3779B9);$oc=$vi>>2&3;for($sg=0;$sg<$yf;$sg++){$Vj=$W[$sg+1];$xf=xxtea_mx($Wj,$Vj,$vi,$x[$sg&3^$oc]);$Wj=int32($W[$sg]+$xf);$W[$sg]=$Wj;}$Vj=$W[0];$xf=xxtea_mx($Wj,$Vj,$vi,$x[$sg&3^$oc]);$Wj=int32($W[$yf]+$xf);$W[$yf]=$Wj;}return
  1403. long2str($W,false);}function
  1404. decrypt_string($qi,$x){if($qi=="")return"";if(!$x)return
  1405. false;$x=array_values(unpack("V*",pack("H*",md5($x))));$W=str2long($qi,false);$yf=count($W)-1;$Wj=$W[$yf];$Vj=$W[0];$dh=floor(6+52/($yf+1));$vi=int32($dh*0x9E3779B9);while($vi){$oc=$vi>>2&3;for($sg=$yf;$sg>0;$sg--){$Wj=$W[$sg-1];$xf=xxtea_mx($Wj,$Vj,$vi,$x[$sg&3^$oc]);$Vj=int32($W[$sg]-$xf);$W[$sg]=$Vj;}$Wj=$W[$yf];$xf=xxtea_mx($Wj,$Vj,$vi,$x[$sg&3^$oc]);$Vj=int32($W[0]-$xf);$W[0]=$Vj;$vi=int32($vi-0x9E3779B9);}return
  1406. long2str($W,true);}$Ig=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($x)=explode(":",$X);$Ig[$x]=$X;}}function
  1407. add_invalid_login(){$Fa=get_temp_dir()."/adminer.invalid";foreach(glob("$Fa*")?:array($Fa)as$o){$q=file_open_lock($o);if($q)break;}if(!$q)$q=file_open_lock("$Fa-".rand_string());if(!$q)return;$se=unserialize(stream_get_contents($q));$Pi=time();if($se){foreach($se
  1408. as$te=>$X){if($X[0]<$Pi)unset($se[$te]);}}$re=&$se[adminer()->bruteForceKey()];if(!$re)$re=array($Pi+30*60,0);$re[1]++;file_write_unlock($q,serialize($se));}function
  1409. check_invalid_login(array&$Ig){$se=array();foreach(glob(get_temp_dir()."/adminer.invalid*")as$o){$q=file_open_lock($o);if($q){$se=unserialize(stream_get_contents($q));file_unlock($q);break;}}$re=idx($se,adminer()->bruteForceKey(),array());$Ef=($re[1]>29?$re[0]-time():0);if($Ef>0)auth_error(lang_format(array('Too many unsuccessful logins, try again in %d minute.','Too many unsuccessful logins, try again in %d minutes.'),ceil($Ef/60)),$Ig);}$za=$_POST["auth"];if($za){session_regenerate_id();$Kj=$za["driver"];$N=$za["server"];$V=$za["username"];$F=(string)$za["password"];$j=$za["db"];set_password($Kj,$N,$V,$F);$_SESSION["db"][$Kj][$N][$V][$j]=true;if($za["permanent"]){$x=implode("-",array_map('base64_encode',array($Kj,$N,$V,$j)));$Xg=adminer()->permanentLogin(true);$Ig[$x]="$x:".base64_encode($Xg?encrypt_string($F,$Xg):"");cookie("adminer_permanent",implode(" ",$Ig));}if(count($_POST)==1||DRIVER!=$Kj||SERVER!=$N||$_GET["username"]!==$V||DB!=$j)redirect(auth_url($Kj,$N,$V,$j));}elseif($_POST["logout"]&&(!$_SESSION["token"]||verify_token())){foreach(array("pwds","db","dbs","queries")as$x)set_session($x,null);unset_permanent($Ig);redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~','',ME),0,-1),'Logout successful.'.' '.'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.');}elseif($Ig&&!$_SESSION["pwds"]){session_regenerate_id();$Xg=adminer()->permanentLogin();foreach($Ig
  1410. as$x=>$X){list(,$cb)=explode(":",$X);list($Kj,$N,$V,$j)=array_map('base64_decode',explode("-",$x));set_password($Kj,$N,$V,decrypt_string(base64_decode($cb),$Xg));$_SESSION["db"][$Kj][$N][$V][$j]=true;}}function
  1411. unset_permanent(array&$Ig){foreach($Ig
  1412. as$x=>$X){list($Kj,$N,$V,$j)=array_map('base64_decode',explode("-",$x));if($Kj==DRIVER&&$N==SERVER&&$V==$_GET["username"]&&$j==DB)unset($Ig[$x]);}cookie("adminer_permanent",implode(" ",$Ig));}function
  1413. auth_error($l,array&$Ig){$Xh=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$Xh]||$_GET[$Xh])&&!$_SESSION["token"])$l='Session expired, please login again.';else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$l
  1414. .=($l?'<br>':'').sprintf('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.',target_blank(),'<code>permanentLogin()</code>');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent($Ig);}}if(!$_COOKIE[$Xh]&&$_GET[$Xh]&&ini_bool("session.use_only_cookies"))$l='Session support must be enabled.';$vg=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?:rand_string()),$vg["lifetime"]);if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);page_header('Login',$l,null);echo"<form action='' method='post'>\n","<div>";if(hidden_fields($_POST,array("auth")))echo"<p class='message'>".'The action will be performed after successful login with the same credentials.'."\n";echo"</div>\n";adminer()->loginForm();echo"</form>\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists('Adminer\Db')){unset($_SESSION["pwds"][DRIVER]);unset_permanent($Ig);page_header('No extension',sprintf('None of the supported PHP extensions (%s) are available.',implode(", ",Driver::$extensions)),false);page_footer("auth");exit;}$f='';if(isset($_GET["username"])&&is_string(get_password())){list(,$Mg)=host_port(SERVER);if(preg_match('~^\s*([-+]?\d+)~',$Mg,$A)&&($A[1]<1024||$A[1]>65535))auth_error('Connecting to privileged ports is not allowed.',$Ig);check_invalid_login($Ig);$Fb=adminer()->credentials();$f=Driver::connect($Fb[0],$Fb[1],$Fb[2]);if(is_object($f)){Db::$instance=$f;Driver::$instance=new
  1415. Driver($f);if($f->flavor)save_settings(array("vendor-".DRIVER."-".SERVER=>get_driver(DRIVER)));}}$Te=null;if(!is_object($f)||($Te=adminer()->login($_GET["username"],get_password()))!==true){$l=(is_string($f)?nl_br(h($f)):(is_string($Te)?$Te:'Invalid credentials.')).(preg_match('~^ | $~',get_password())?'<br>'.'There is a space in the input password which might be the cause.':'');auth_error($l,$Ig);}if($_POST["logout"]&&$_SESSION["token"]&&!verify_token()){page_header('Logout','Invalid CSRF token. Send the form again.');page_footer("db");exit;}if(!$_SESSION["token"])$_SESSION["token"]=rand(1,1e6);stop_session(true);if($za&&$_POST["token"])$_POST["token"]=get_token();$l='';if($_POST){if(!verify_token()){$ke="max_input_vars";$hf=ini_get($ke);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$x){$X=ini_get($x);if($X&&(!$hf||$X<$hf)){$ke=$x;$hf=$X;}}}$l=(!$_POST["token"]&&$hf?sprintf('Maximum number of allowed fields exceeded. Please increase %s.',"'$ke'"):'Invalid CSRF token. Send the form again.'.' '.'If you did not send this request from Adminer then close this page.');}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$l=sprintf('Too big POST data. Reduce the data or increase the %s configuration directive.',"'post_max_size'");if(isset($_GET["sql"]))$l
  1416. .=' '.'You can upload a big SQL file via FTP and import it from server.';}function
  1417. print_select_result($I,$g=null,array$hg=array(),$z=0){$Re=array();$w=array();$e=array();$Ka=array();$nj=array();$J=array();for($s=0;(!$z||$s<$z)&&($K=$I->fetch_row());$s++){if(!$s){echo"<div class='scrollable'>\n","<table class='nowrap odds'>\n","<thead><tr>";for($ze=0;$ze<count($K);$ze++){$m=$I->fetch_field();$B=$m->name;$gg=(isset($m->orgtable)?$m->orgtable:"");$fg=(isset($m->orgname)?$m->orgname:$B);if($hg&&JUSH=="sql")$Re[$ze]=($B=="table"?"table=":($B=="possible_keys"?"indexes=":null));elseif($gg!=""){if(isset($m->table))$J[$m->table]=$gg;if(!isset($w[$gg])){$w[$gg]=array();foreach(indexes($gg,$g)as$v){if($v["type"]=="PRIMARY"){$w[$gg]=array_flip($v["columns"]);break;}}$e[$gg]=$w[$gg];}if(isset($e[$gg][$fg])){unset($e[$gg][$fg]);$w[$gg][$fg]=$ze;$Re[$ze]=$gg;}}if($m->charsetnr==63)$Ka[$ze]=true;$nj[$ze]=$m->type;echo"<th".($gg!=""||$m->name!=$fg?" title='".h(($gg!=""?"$gg.":"").$fg)."'":"").">".h($B).($hg?doc_link(array('sql'=>"explain-output.html#explain_".strtolower($B),'mariadb'=>"explain/#the-columns-in-explain-select",)):"");}echo"</thead>\n";}echo"<tr>";foreach($K
  1418. as$x=>$X){$_="";if(isset($Re[$x])&&!$e[$Re[$x]]){if($hg&&JUSH=="sql"){$R=$K[array_search("table=",$Re)];$_=ME.$Re[$x].urlencode($hg[$R]!=""?$hg[$R]:$R);}else{$_=ME."edit=".urlencode($Re[$x]);foreach($w[$Re[$x]]as$hb=>$ze){if($K[$ze]===null){$_="";break;}$_
  1419. .="&where".urlencode("[".bracket_escape($hb)."]")."=".urlencode($K[$ze]);}}}elseif(is_url($X))$_=$X;if($X===null)$X="<i>NULL</i>";elseif($Ka[$x]&&!is_utf8($X))$X="<i>".lang_format(array('%d byte','%d bytes'),strlen($X))."</i>";else{$X=h($X);if($nj[$x]==254)$X="<code>$X</code>";}if($_)$X="<a href='".h($_)."'".(is_url($_)?target_blank():'').">$X</a>";echo"<td".($nj[$x]<=9||$nj[$x]==246?" class='number'":"").">$X";}}echo($s?"</table>\n</div>":"<p class='message'>".'No rows.')."\n";return$J;}function
  1420. referencable_primary($Ph){$J=array();foreach(table_status('',true)as$_i=>$R){if($_i!=$Ph&&fk_support($R)){foreach(fields($_i)as$m){if($m["primary"]){if($J[$_i]){unset($J[$_i]);break;}$J[$_i]=$m;}}}}return$J;}function
  1421. textarea($B,$Y,$L=10,$kb=80){echo"<textarea name='".h($B)."' rows='$L' cols='$kb' class='sqlarea jush-".JUSH."' spellcheck='false' wrap='off'>";if(is_array($Y)){foreach($Y
  1422. as$X)echo
  1423. h($X[0])."\n\n\n";}else
  1424. echo
  1425. h($Y);echo"</textarea>";}function
  1426. select_input($ya,array$bg,$Y="",$Vf="",$Jg=""){$Hi=($bg?"select":"input");return"<$Hi$ya".($bg?"><option value=''>$Jg".optionlist($bg,$Y,true)."</select>":" size='10' value='".h($Y)."' placeholder='$Jg'>").($Vf?script("qsl('$Hi').onchange = $Vf;",""):"");}function
  1427. json_row($x,$X=null,$Fc=true){static$bd=true;if($bd)echo"{";if($x!=""){echo($bd?"":",")."\n\t\"".addcslashes($x,"\r\n\t\"\\/").'": '.($X!==null?($Fc?'"'.addcslashes($X,"\r\n\"\\/").'"':$X):'null');$bd=false;}else{echo"\n}\n";$bd=true;}}function
  1428. edit_type($x,array$m,array$jb,array$ld=array(),array$Rc=array()){$U=$m["type"];echo"<td><select name='".h($x)."[type]' class='type' aria-labelledby='label-type'>";if($U&&!array_key_exists($U,driver()->types())&&!isset($ld[$U])&&!in_array($U,$Rc))$Rc[]=$U;$ri=driver()->structuredTypes();if($ld)$ri['Foreign keys']=$ld;echo
  1429. optionlist(array_merge($Rc,$ri),$U),"</select><td>","<input name='".h($x)."[length]' value='".h($m["length"])."' size='3'".(!$m["length"]&&preg_match('~var(char|binary)$~',$U)?" class='required'":"")." aria-labelledby='label-length'>","<td class='options'>",($jb?"<input list='collations' name='".h($x)."[collation]'".(preg_match('~(char|text|enum|set)$~',$U)?"":" class='hidden'")." value='".h($m["collation"])."' placeholder='(".'collation'.")'>":''),(driver()->unsigned?"<select name='".h($x)."[unsigned]'".(!$U||preg_match(number_type(),$U)?"":" class='hidden'").'><option>'.optionlist(driver()->unsigned,$m["unsigned"]).'</select>':''),(isset($m['on_update'])?"<select name='".h($x)."[on_update]'".(preg_match('~timestamp|datetime~',$U)?"":" class='hidden'").'>'.optionlist(array(""=>"(".'ON UPDATE'.")","CURRENT_TIMESTAMP"),(preg_match('~^CURRENT_TIMESTAMP~i',$m["on_update"])?"CURRENT_TIMESTAMP":$m["on_update"])).'</select>':''),($ld?"<select name='".h($x)."[on_delete]'".(preg_match("~`~",$U)?"":" class='hidden'")."><option value=''>(".'ON DELETE'.")".optionlist(explode("|",driver()->onActions),$m["on_delete"])."</select> ":" ");}function
  1430. process_length($y){$Ac=driver()->enumLength;return(preg_match("~^\\s*\\(?\\s*$Ac(?:\\s*,\\s*$Ac)*+\\s*\\)?\\s*\$~",$y)&&preg_match_all("~$Ac~",$y,$Ze)?"(".implode(",",$Ze[0]).")":preg_replace('~^[0-9].*~','(\0)',preg_replace('~[^-0-9,+()[\]]~','',$y)));}function
  1431. process_type(array$m,$ib="COLLATE"){return" $m[type]".process_length($m["length"]).(preg_match(number_type(),$m["type"])&&in_array($m["unsigned"],driver()->unsigned)?" $m[unsigned]":"").(preg_match('~char|text|enum|set~',$m["type"])&&$m["collation"]?" $ib ".(JUSH=="mssql"?$m["collation"]:q($m["collation"])):"");}function
  1432. process_field(array$m,array$lj){if($m["on_update"])$m["on_update"]=str_ireplace("current_timestamp()","CURRENT_TIMESTAMP",$m["on_update"]);return
  1433. array(idf_escape(trim($m["field"])),process_type($lj),($m["null"]?" NULL":" NOT NULL"),default_value($m),(preg_match('~timestamp|datetime~',$m["type"])&&$m["on_update"]?" ON UPDATE $m[on_update]":""),(support("comment")&&$m["comment"]!=""?" COMMENT ".q($m["comment"]):""),($m["auto_increment"]?auto_increment():null),);}function
  1434. default_value(array$m){$k=$m["default"];$sd=$m["generated"];return($k===null?"":(in_array($sd,driver()->generated)?(JUSH=="mssql"?" AS ($k)".($sd=="VIRTUAL"?"":" $sd")."":" GENERATED ALWAYS AS ($k) $sd"):" DEFAULT ".(!preg_match('~^GENERATED ~i',$k)&&(preg_match('~char|binary|text|json|enum|set~',$m["type"])||preg_match('~^(?![a-z])~i',$k))?(JUSH=="sql"&&preg_match('~text|json~',$m["type"])?"(".q($k).")":q($k)):str_ireplace("current_timestamp()","CURRENT_TIMESTAMP",(JUSH=="sqlite"?"($k)":$k)))));}function
  1435. type_class($U){foreach(array('char'=>'text','date'=>'time|year','binary'=>'blob','enum'=>'set',)as$x=>$X){if(preg_match("~$x|$X~",$U))return" class='$x'";}}function
  1436. edit_fields(array$n,array$jb,$U="TABLE",array$ld=array()){$n=array_values($n);$Tb=(($_POST?$_POST["defaults"]:get_setting("defaults"))?"":" class='hidden'");$pb=(($_POST?$_POST["comments"]:get_setting("comments"))?"":" class='hidden'");echo"<thead><tr>\n",($U=="PROCEDURE"?"<td>":""),"<th id='label-name'>".($U=="TABLE"?'Column name':'Parameter name'),"<td id='label-type'>".'Type'."<textarea id='enum-edit' rows='4' cols='12' wrap='off' style='display: none;'></textarea>".script("qs('#enum-edit').onblur = editingLengthBlur;"),"<td id='label-length'>".'Length',"<td>".'Options';if($U=="TABLE")echo"<td id='label-null'>NULL\n","<td><input type='radio' name='auto_increment_col' value=''><abbr id='label-ai' title='".'Auto Increment'."'>AI</abbr>",doc_link(array('sql'=>"example-auto-increment.html",'mariadb'=>"auto_increment/",'sqlite'=>"autoinc.html",'pgsql'=>"datatype-numeric.html#DATATYPE-SERIAL",'mssql'=>"t-sql/statements/create-table-transact-sql-identity-property",)),"<td id='label-default'$Tb>".'Default value',(support("comment")?"<td id='label-comment'$pb>".'Comment':"");echo"<td>".icon("plus","add[".(support("move_col")?0:count($n))."]","+",'Add next'),"</thead>\n<tbody>\n",script("mixin(qsl('tbody'), {onclick: editingClick, onkeydown: editingKeydown, oninput: editingInput});");foreach($n
  1437. as$s=>$m){$s++;$ig=$m[($_POST?"orig":"field")];$ec=(isset($_POST["add"][$s-1])||(isset($m["field"])&&!idx($_POST["drop_col"],$s)))&&(support("drop_col")||$ig=="");echo"<tr".($ec?"":" style='display: none;'").">\n",($U=="PROCEDURE"?"<td>".html_select("fields[$s][inout]",explode("|",driver()->inout),$m["inout"]):"")."<th>";if($ec)echo"<input name='fields[$s][field]' value='".h($m["field"])."' data-maxlength='64' autocapitalize='off' aria-labelledby='label-name'".(isset($_POST["add"][$s-1])?" autofocus":"").">";echo
  1438. input_hidden("fields[$s][orig]",$ig);edit_type("fields[$s]",$m,$jb,$ld);if($U=="TABLE")echo"<td>".checkbox("fields[$s][null]",1,$m["null"],"","","block","label-null"),"<td><label class='block'><input type='radio' name='auto_increment_col' value='$s'".($m["auto_increment"]?" checked":"")." aria-labelledby='label-ai'></label>","<td$Tb>".(driver()->generated?html_select("fields[$s][generated]",array_merge(array("","DEFAULT"),driver()->generated),$m["generated"])." ":checkbox("fields[$s][generated]",1,$m["generated"],"","","","label-default")),"<input name='fields[$s][default]' value='".h($m["default"])."' aria-labelledby='label-default'>",(support("comment")?"<td$pb><input name='fields[$s][comment]' value='".h($m["comment"])."' data-maxlength='".(min_version(5.5)?1024:255)."' aria-labelledby='label-comment'>":"");echo"<td>",(support("move_col")?icon("plus","add[$s]","+",'Add next')." ".icon("up","up[$s]","↑",'Move up')." ".icon("down","down[$s]","↓",'Move down')." ":""),($ig==""||support("drop_col")?icon("cross","drop_col[$s]","x",'Remove'):"");}}function
  1439. process_fields(array&$n){$C=0;if($_POST["up"]){$Ie=0;foreach($n
  1440. as$x=>$m){if(key($_POST["up"])==$x){unset($n[$x]);array_splice($n,$Ie,0,array($m));break;}if(isset($m["field"]))$Ie=$C;$C++;}}elseif($_POST["down"]){$nd=false;foreach($n
  1441. as$x=>$m){if(isset($m["field"])&&$nd){unset($n[key($_POST["down"])]);array_splice($n,$C,0,array($nd));break;}if(key($_POST["down"])==$x)$nd=$m;$C++;}}elseif($_POST["add"]){$n=array_values($n);array_splice($n,key($_POST["add"]),0,array(array()));}elseif(!$_POST["drop_col"])return
  1442. false;return
  1443. true;}function
  1444. normalize_enum(array$A){$X=$A[0];return"'".str_replace("'","''",addcslashes(stripcslashes(str_replace($X[0].$X[0],$X[0],substr($X,1,-1))),'\\'))."'";}function
  1445. grant($ud,array$Zg,$e,$Sf){if(!$Zg)return
  1446. true;if($Zg==array("ALL PRIVILEGES","GRANT OPTION"))return($ud=="GRANT"?queries("$ud ALL PRIVILEGES$Sf WITH GRANT OPTION"):queries("$ud ALL PRIVILEGES$Sf")&&queries("$ud GRANT OPTION$Sf"));return
  1447. queries("$ud ".preg_replace('~(GRANT OPTION)\([^)]*\)~','\1',implode("$e, ",$Zg).$e).$Sf);}function
  1448. drop_create($ic,$h,$kc,$Li,$mc,$Se,$of,$mf,$nf,$Pf,$Bf){if($_POST["drop"])query_redirect($ic,$Se,$of);elseif($Pf=="")query_redirect($h,$Se,$nf);elseif($Pf!=$Bf){$Eb=queries($h);queries_redirect($Se,$mf,$Eb&&queries($ic));if($Eb)queries($kc);}else
  1449. queries_redirect($Se,$mf,queries($Li)&&queries($mc)&&queries($ic)&&queries($h));}function
  1450. create_trigger($Sf,array$K){$Ri=" $K[Timing] $K[Event]".(preg_match('~ OF~',$K["Event"])?" $K[Of]":"");return"CREATE TRIGGER ".idf_escape($K["Trigger"]).(JUSH=="mssql"?$Sf.$Ri:$Ri.$Sf).rtrim(" $K[Type]\n$K[Statement]",";").";";}function
  1451. create_routine($_h,array$K){$O=array();$n=(array)$K["fields"];ksort($n);foreach($n
  1452. as$m){if($m["field"]!="")$O[]=(preg_match("~^(".driver()->inout.")\$~",$m["inout"])?"$m[inout] ":"").idf_escape($m["field"]).process_type($m,"CHARACTER SET");}$Vb=rtrim($K["definition"],";");return"CREATE $_h ".idf_escape(trim($K["name"]))." (".implode(", ",$O).")".($_h=="FUNCTION"?" RETURNS".process_type($K["returns"],"CHARACTER SET"):"").($K["language"]?" LANGUAGE $K[language]":"").(JUSH=="pgsql"?" AS ".q($Vb):"\n$Vb;");}function
  1453. remove_definer($H){return
  1454. preg_replace('~^([A-Z =]+) DEFINER=`'.preg_replace('~@(.*)~','`@`(%|\1)',logged_user()).'`~','\1',$H);}function
  1455. format_foreign_key(array$p){$j=$p["db"];$Gf=$p["ns"];return" FOREIGN KEY (".implode(", ",array_map('Adminer\idf_escape',$p["source"])).") REFERENCES ".($j!=""&&$j!=$_GET["db"]?idf_escape($j).".":"").($Gf!=""&&$Gf!=$_GET["ns"]?idf_escape($Gf).".":"").idf_escape($p["table"])." (".implode(", ",array_map('Adminer\idf_escape',$p["target"])).")".(preg_match("~^(".driver()->onActions.")\$~",$p["on_delete"])?" ON DELETE $p[on_delete]":"").(preg_match("~^(".driver()->onActions.")\$~",$p["on_update"])?" ON UPDATE $p[on_update]":"");}function
  1456. tar_file($o,$Wi){$J=pack("a100a8a8a8a12a12",$o,644,0,0,decoct($Wi->size),decoct(time()));$bb=8*32;for($s=0;$s<strlen($J);$s++)$bb+=ord($J[$s]);$J
  1457. .=sprintf("%06o",$bb)."\0 ";echo$J,str_repeat("\0",512-strlen($J));$Wi->send();echo
  1458. str_repeat("\0",511-($Wi->size+511)%512);}function
  1459. doc_link(array$Fg,$Mi="<sup>?</sup>"){$Vh=connection()->server_info;$Lj=preg_replace('~^(\d\.?\d).*~s','\1',$Vh);$Aj=array('sql'=>"https://dev.mysql.com/doc/refman/$Lj/en/",'sqlite'=>"https://www.sqlite.org/",'pgsql'=>"https://www.postgresql.org/docs/".(connection()->flavor=='cockroach'?"current":$Lj)."/",'mssql'=>"https://learn.microsoft.com/en-us/sql/",'oracle'=>"https://www.oracle.com/pls/topic/lookup?ctx=db".preg_replace('~^.* (\d+)\.(\d+)\.\d+\.\d+\.\d+.*~s','\1\2',$Vh)."&id=",);if(connection()->flavor=='maria'){$Aj['sql']="https://mariadb.com/kb/en/";$Fg['sql']=(isset($Fg['mariadb'])?$Fg['mariadb']:str_replace(".html","/",$Fg['sql']));}return($Fg[JUSH]?"<a href='".h($Aj[JUSH].$Fg[JUSH].(JUSH=='mssql'?"?view=sql-server-ver$Lj":""))."'".target_blank().">$Mi</a>":"");}function
  1460. db_size($j){if(!connection()->select_db($j))return"?";$J=0;foreach(table_status()as$S)$J+=$S["Data_length"]+$S["Index_length"];return
  1461. format_number($J);}function
  1462. set_utf8mb4($h){static$O=false;if(!$O&&preg_match('~\butf8mb4~i',$h)){$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!=""?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('Database'.": ".h(DB),'Invalid database.',true);}else{if($_POST["db"]&&!$l)queries_redirect(substr(ME,0,-1),'Databases have been dropped.',drop_databases($_POST["db"]));page_header('Select database',$l,false);echo"<p class='links'>\n";foreach(array('database'=>'Create database','privileges'=>'Privileges','processlist'=>'Process list','variables'=>'Variables','status'=>'Status',)as$x=>$X){if(support($x))echo"<a href='".h(ME)."$x='>$X</a>\n";}echo"<p>".sprintf('%s version: %s through PHP extension %s',get_driver(DRIVER),"<b>".h(connection()->server_info)."</b>","<b>".connection()->extension."</b>")."\n","<p>".sprintf('Logged as: %s',"<b>".h(logged_user())."</b>")."\n";$i=adminer()->databases();if($i){$Hh=support("scheme");$jb=collations();echo"<form action='' method='post'>\n","<table class='checkable odds'>\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),"<thead><tr>".(support("database")?"<td>":"")."<th>".'Database'.(get_session("dbs")!==null?" - <a href='".h(ME)."refresh=1'>".'Refresh'."</a>":"")."<td>".'Collation'."<td>".'Tables'."<td>".'Size'." - <a href='".h(ME)."dbsize=1'>".'Compute'."</a>".script("qsl('a').onclick = partial(ajaxSetHtml, '".js_escape(ME)."script=connect');","")."</thead>\n";$i=($_GET["dbsize"]?count_tables($i):array_flip($i));foreach($i
  1463. as$j=>$T){$zh=h(ME)."db=".urlencode($j);$t=h("Db-".$j);echo"<tr>".(support("database")?"<td>".checkbox("db[]",$j,in_array($j,(array)$_POST["db"]),"","","",$t):""),"<th><a href='$zh' id='$t'>".h($j)."</a>";$c=h(db_collation($j,$jb));echo"<td>".(support("database")?"<a href='$zh".($Hh?"&amp;ns=":"")."&amp;database=' title='".'Alter database'."'>$c</a>":$c),"<td align='right'><a href='$zh&amp;schema=' id='tables-".h($j)."' title='".'Database schema'."'>".($_GET["dbsize"]?$T:"?")."</a>","<td align='right' id='size-".h($j)."'>".($_GET["dbsize"]?db_size($j):"?"),"\n";}echo"</table>\n",(support("database")?"<div class='footer'><div>\n"."<fieldset><legend>".'Selected'." <span id='selected'></span></legend><div>\n".input_hidden("all").script("qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^db/)); };")."<input type='submit' name='drop' value='".'Drop'."'>".confirm()."\n"."</div></fieldset>\n"."</div></div>\n":""),input_token(),"</form>\n",script("tableCheck();");}if(!empty(adminer()->plugins)){echo"<div class='plugins'>\n","<h3>".'Loaded plugins'."</h3>\n<ul>\n";foreach(adminer()->plugins
  1464. as$Kg){$Zb=(method_exists($Kg,'description')?$Kg->description():"");if(!$Zb){$oh=new
  1465. \ReflectionObject($Kg);if(preg_match('~^/[\s*]+(.+)~',$oh->getDocComment(),$A))$Zb=$A[1];}$Ih=(method_exists($Kg,'screenshot')?$Kg->screenshot():"");echo"<li><b>".get_class($Kg)."</b>".h($Zb?": $Zb":"").($Ih?" (<a href='".h($Ih)."'".target_blank().">".'screenshot'."</a>)":"")."\n";}echo"</ul>\n";adminer()->pluginsLinks();echo"</div>\n";}}page_footer("db");exit;}if(support("scheme")){if(DB!=""&&$_GET["ns"]!==""){if(!isset($_GET["ns"]))redirect(preg_replace('~ns=[^&]*&~','',ME)."ns=".get_schema());if(!set_schema($_GET["ns"])){header("HTTP/1.1 404 Not Found");page_header('Schema'.": ".h($_GET["ns"]),'Invalid schema.',true);page_footer("ns");exit;}}}adminer()->afterConnect();class
  1466. TmpFile{private$handler;var$size;function
  1467. __construct(){$this->handler=tmpfile();}function
  1468. write($zb){$this->size+=strlen($zb);fwrite($this->handler,$zb);}function
  1469. 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"];$n=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,$n)),$M);$K=($I?$I->fetch_row():array());echo
  1470. driver()->value($K[0],$n[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$n=fields($a);if(!$n)$l=error()?:'No tables.';$S=table_status1($a);$B=adminer()->tableName($S);page_header(($n&&is_view($S)?$S['Engine']=='materialized view'?'Materialized view':'View':'Table').": ".($B!=""?$B:h($a)),$l);$yh=array();foreach($n
  1471. as$x=>$m)$yh+=$m["privileges"];adminer()->selectLinks($S,(isset($yh["insert"])||!support("table")?"":null));$ob=$S["Comment"];if($ob!="")echo"<p class='nowrap'>".'Comment'.": ".h($ob)."\n";if($n)adminer()->tableStructurePrint($n,$S);function
  1472. tables_links(array$T){echo"<ul>\n";foreach($T
  1473. as$R)echo"<li><a href='".h(ME."table=".urlencode($R))."'>".h($R)."</a>";echo"</ul>\n";}$je=driver()->inheritsFrom($a);if($je){echo"<h3>".'Inherits from'."</h3>\n";tables_links($je);}if(support("indexes")&&driver()->supportsIndex($S)){echo"<h3 id='indexes'>".'Indexes'."</h3>\n";$w=indexes($a);if($w)adminer()->tableIndexesPrint($w,$S);echo'<p class="links"><a href="'.h(ME).'indexes='.urlencode($a).'">'.'Alter indexes'."</a>\n";}if(!is_view($S)){if(fk_support($S)){echo"<h3 id='foreign-keys'>".'Foreign keys'."</h3>\n";$ld=foreign_keys($a);if($ld){echo"<table>\n","<thead><tr><th>".'Source'."<td>".'Target'."<td>".'ON DELETE'."<td>".'ON UPDATE'."<td></thead>\n";foreach($ld
  1474. as$B=>$p){echo"<tr title='".h($B)."'>","<th><i>".implode("</i>, <i>",array_map('Adminer\h',$p["source"]))."</i>";$_=($p["db"]!=""?preg_replace('~db=[^&]*~',"db=".urlencode($p["db"]),ME):($p["ns"]!=""?preg_replace('~ns=[^&]*~',"ns=".urlencode($p["ns"]),ME):ME));echo"<td><a href='".h($_."table=".urlencode($p["table"]))."'>".($p["db"]!=""&&$p["db"]!=DB?"<b>".h($p["db"])."</b>.":"").($p["ns"]!=""&&$p["ns"]!=$_GET["ns"]?"<b>".h($p["ns"])."</b>.":"").h($p["table"])."</a>","(<i>".implode("</i>, <i>",array_map('Adminer\h',$p["target"]))."</i>)","<td>".h($p["on_delete"]),"<td>".h($p["on_update"]),'<td><a href="'.h(ME.'foreign='.urlencode($a).'&name='.urlencode($B)).'">'.'Alter'.'</a>',"\n";}echo"</table>\n";}echo'<p class="links"><a href="'.h(ME).'foreign='.urlencode($a).'">'.'Add foreign key'."</a>\n";}if(support("check")){echo"<h3 id='checks'>".'Checks'."</h3>\n";$Xa=driver()->checkConstraints($a);if($Xa){echo"<table>\n";foreach($Xa
  1475. as$x=>$X)echo"<tr title='".h($x)."'>","<td><code class='jush-".JUSH."'>".h($X),"<td><a href='".h(ME.'check='.urlencode($a).'&name='.urlencode($x))."'>".'Alter'."</a>","\n";echo"</table>\n";}echo'<p class="links"><a href="'.h(ME).'check='.urlencode($a).'">'.'Create check'."</a>\n";}}if(support(is_view($S)?"view_trigger":"trigger")){echo"<h3 id='triggers'>".'Triggers'."</h3>\n";$kj=triggers($a);if($kj){echo"<table>\n";foreach($kj
  1476. as$x=>$X)echo"<tr valign='top'><td>".h($X[0])."<td>".h($X[1])."<th>".h($x)."<td><a href='".h(ME.'trigger='.urlencode($a).'&name='.urlencode($x))."'>".'Alter'."</a>\n";echo"</table>\n";}echo'<p class="links"><a href="'.h(ME).'trigger='.urlencode($a).'">'.'Add trigger'."</a>\n";}$ie=driver()->inheritedTables($a);if($ie){echo"<h3 id='partitions'>".'Inherited by'."</h3>\n";$zg=driver()->partitionsInfo($a);if($zg)echo"<p><code class='jush-".JUSH."'>BY ".h("$zg[partition_by]($zg[partition])")."</code>\n";tables_links($ie);}}elseif(isset($_GET["schema"])){page_header('Database schema',"",array(),h(DB.($_GET["ns"]?".$_GET[ns]":"")));$Bi=array();$Ci=array();$ca=($_GET["schema"]?:$_COOKIE["adminer_schema-".str_replace(".","_",DB)]);preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~',$ca,$Ze,PREG_SET_ORDER);foreach($Ze
  1477. as$s=>$A){$Bi[$A[1]]=array($A[2],$A[3]);$Ci[]="\n\t'".js_escape($A[1])."': [ $A[2], $A[3] ]";}$Zi=0;$Ga=-1;$Fh=array();$nh=array();$Me=array();$sa=driver()->allFields();foreach(table_status('',true)as$R=>$S){if(is_view($S))continue;$Ng=0;$Fh[$R]["fields"]=array();foreach($sa[$R]as$m){$Ng+=1.25;$m["pos"]=$Ng;$Fh[$R]["fields"][$m["field"]]=$m;}$Fh[$R]["pos"]=($Bi[$R]?:array($Zi,0));foreach(adminer()->foreignKeys($R)as$X){if(!$X["db"]){$Ke=$Ga;if(idx($Bi[$R],1)||idx($Bi[$X["table"]],1))$Ke=min(idx($Bi[$R],1,0),idx($Bi[$X["table"]],1,0))-1;else$Ga-=.1;while($Me[(string)$Ke])$Ke-=.0001;$Fh[$R]["references"][$X["table"]][(string)$Ke]=array($X["source"],$X["target"]);$nh[$X["table"]][$R][(string)$Ke]=$X["target"];$Me[(string)$Ke]=true;}}$Zi=max($Zi,$Fh[$R]["pos"][0]+2.5+$Ng);}echo'<div id="schema" style="height: ',$Zi,'em;">
  1478. <script',nonce(),'>
  1479. qs(\'#schema\').onselectstart = () => false;
  1480. const tablePos = {',implode(",",$Ci)."\n",'};
  1481. const em = qs(\'#schema\').offsetHeight / ',$Zi,';
  1482. document.onmousemove = schemaMousemove;
  1483. document.onmouseup = partialArg(schemaMouseup, \'',js_escape(DB),'\');
  1484. </script>
  1485. ';foreach($Fh
  1486. as$B=>$R){echo"<div class='table' style='top: ".$R["pos"][0]."em; left: ".$R["pos"][1]."em;'>",'<a href="'.h(ME).'table='.urlencode($B).'"><b>'.h($B)."</b></a>",script("qsl('div').onmousedown = schemaMousedown;");foreach($R["fields"]as$m){$X='<span'.type_class($m["type"]).' title="'.h($m["type"].($m["length"]?"($m[length])":"").($m["null"]?" NULL":'')).'">'.h($m["field"]).'</span>';echo"<br>".($m["primary"]?"<i>$X</i>":$X);}foreach((array)$R["references"]as$Ji=>$ph){foreach($ph
  1487. as$Ke=>$kh){$Le=$Ke-idx($Bi[$B],1);$s=0;foreach($kh[0]as$fi)echo"\n<div class='references' title='".h($Ji)."' id='refs$Ke-".($s++)."' style='left: $Le"."em; top: ".$R["fields"][$fi]["pos"]."em; padding-top: .5em;'>"."<div style='border-top: 1px solid gray; width: ".(-$Le)."em;'></div></div>";}}foreach((array)$nh[$B]as$Ji=>$ph){foreach($ph
  1488. as$Ke=>$e){$Le=$Ke-idx($Bi[$B],1);$s=0;foreach($e
  1489. as$Ii)echo"\n<div class='references arrow' title='".h($Ji)."' id='refd$Ke-".($s++)."' style='left: $Le"."em; top: ".$R["fields"][$Ii]["pos"]."em;'>"."<div style='height: .5em; border-bottom: 1px solid gray; width: ".(-$Le)."em;'></div>"."</div>";}}echo"\n</div>\n";}foreach($Fh
  1490. as$B=>$R){foreach((array)$R["references"]as$Ji=>$ph){foreach($ph
  1491. as$Ke=>$kh){$rf=$Zi;$ff=-10;foreach($kh[0]as$x=>$fi){$Og=$R["pos"][0]+$R["fields"][$fi]["pos"];$Pg=$Fh[$Ji]["pos"][0]+$Fh[$Ji]["fields"][$kh[1][$x]]["pos"];$rf=min($rf,$Og,$Pg);$ff=max($ff,$Og,$Pg);}echo"<div class='references' id='refl$Ke' style='left: $Ke"."em; top: $rf"."em; padding: .5em 0;'><div style='border-right: 1px solid gray; margin-top: 1px; height: ".($ff-$rf)."em;'></div></div>\n";}}}echo'</div>
  1492. <p class="links"><a href="',h(ME."schema=".urlencode($ca)),'" id="schema-link">Permanent link</a>
  1493. ';}elseif(isset($_GET["dump"])){$a=$_GET["dump"];if($_POST&&!$l){save_settings(array_intersect_key($_POST,array_flip(array("output","format","db_style","types","routines","events","table_style","auto_increment","triggers","data_style"))),"adminer_export");$T=array_flip((array)$_POST["tables"])+array_flip((array)$_POST["data"]);$Nc=dump_headers((count($T)==1?key($T):DB),(DB==""||count($T)>1));$we=preg_match('~sql~',$_POST["format"]);if($we){echo"-- Adminer ".VERSION." ".get_driver(DRIVER)." ".str_replace("\n"," ",connection()->server_info)." dump\n\n";if(JUSH=="sql"){echo"SET NAMES utf8;
  1494. SET time_zone = '+00:00';
  1495. SET foreign_key_checks = 0;
  1496. ".($_POST["data_style"]?"SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
  1497. ":"")."
  1498. ";connection()->query("SET time_zone = '+00:00'");connection()->query("SET sql_mode = ''");}}$si=$_POST["db_style"];$i=array(DB);if(DB==""){$i=$_POST["databases"];if(is_string($i))$i=explode("\n",rtrim(str_replace("\r","",$i),"\n"));}foreach((array)$i
  1499. as$j){adminer()->dumpDatabase($j);if(connection()->select_db($j)){if($we){if($si)echo
  1500. use_sql($j,$si).";\n\n";$pg="";if($_POST["types"]){foreach(types()as$t=>$U){$Bc=type_values($t);if($Bc)$pg
  1501. .=($si!='DROP+CREATE'?"DROP TYPE IF EXISTS ".idf_escape($U).";;\n":"")."CREATE TYPE ".idf_escape($U)." AS ENUM ($Bc);\n\n";else$pg
  1502. .="-- Could not export type $U\n\n";}}if($_POST["routines"]){foreach(routines()as$K){$B=$K["ROUTINE_NAME"];$_h=$K["ROUTINE_TYPE"];$h=create_routine($_h,array("name"=>$B)+routine($K["SPECIFIC_NAME"],$_h));set_utf8mb4($h);$pg
  1503. .=($si!='DROP+CREATE'?"DROP $_h IF EXISTS ".idf_escape($B).";;\n":"")."$h;\n\n";}}if($_POST["events"]){foreach(get_rows("SHOW EVENTS",null,"-- ")as$K){$h=remove_definer(get_val("SHOW CREATE EVENT ".idf_escape($K["Name"]),3));set_utf8mb4($h);$pg
  1504. .=($si!='DROP+CREATE'?"DROP EVENT IF EXISTS ".idf_escape($K["Name"]).";;\n":"")."$h;;\n\n";}}echo($pg&&JUSH=='sql'?"DELIMITER ;;\n\n$pg"."DELIMITER ;\n\n":$pg);}if($_POST["table_style"]||$_POST["data_style"]){$Nj=array();foreach(table_status('',true)as$B=>$S){$R=(DB==""||in_array($B,(array)$_POST["tables"]));$Lb=(DB==""||in_array($B,(array)$_POST["data"]));if($R||$Lb){$Wi=null;if($Nc=="tar"){$Wi=new
  1505. TmpFile;ob_start(array($Wi,'write'),1e5);}adminer()->dumpTable($B,($R?$_POST["table_style"]:""),(is_view($S)?2:0));if(is_view($S))$Nj[]=$B;elseif($Lb){$n=fields($B);adminer()->dumpData($B,$_POST["data_style"],"SELECT *".convert_fields($n,$n)." FROM ".table($B));}if($we&&$_POST["triggers"]&&$R&&($kj=trigger_sql($B)))echo"\nDELIMITER ;;\n$kj\nDELIMITER ;\n";if($Nc=="tar"){ob_end_flush();tar_file((DB!=""?"":"$j/")."$B.csv",$Wi);}elseif($we)echo"\n";}}if(function_exists('Adminer\foreign_keys_sql')){foreach(table_status('',true)as$B=>$S){$R=(DB==""||in_array($B,(array)$_POST["tables"]));if($R&&!is_view($S))echo
  1506. foreign_keys_sql($B);}}foreach($Nj
  1507. as$Mj)adminer()->dumpTable($Mj,$_POST["table_style"],1);if($Nc=="tar")echo
  1508. pack("x512");}}}adminer()->dumpFooter();exit;}page_header('Export',$l,($_GET["export"]!=""?array("table"=>$_GET["export"]):array()),h(DB));echo'
  1509. <form action="" method="post">
  1510. <table class="layout">
  1511. ';$Pb=array('','USE','DROP+CREATE','CREATE');$Di=array('','DROP+CREATE','CREATE');$Mb=array('','TRUNCATE+INSERT','INSERT');if(JUSH=="sql")$Mb[]='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");if(!isset($K["events"])){$K["routines"]=$K["events"]=($_GET["dump"]=="");$K["triggers"]=$K["table_style"];}echo"<tr><th>".'Output'."<td>".html_radios("output",adminer()->dumpOutput(),$K["output"])."\n","<tr><th>".'Format'."<td>".html_radios("format",adminer()->dumpFormat(),$K["format"])."\n",(JUSH=="sqlite"?"":"<tr><th>".'Database'."<td>".html_select('db_style',$Pb,$K["db_style"]).(support("type")?checkbox("types",1,$K["types"],'User types'):"").(support("routine")?checkbox("routines",1,$K["routines"],'Routines'):"").(support("event")?checkbox("events",1,$K["events"],'Events'):"")),"<tr><th>".'Tables'."<td>".html_select('table_style',$Di,$K["table_style"]).checkbox("auto_increment",1,$K["auto_increment"],'Auto Increment').(support("trigger")?checkbox("triggers",1,$K["triggers"],'Triggers'):""),"<tr><th>".'Data'."<td>".html_select('data_style',$Mb,$K["data_style"]),'</table>
  1512. <p><input type="submit" value="Export">
  1513. ',input_token(),'
  1514. <table>
  1515. ',script("qsl('table').onclick = dumpClick;");$Tg=array();if(DB!=""){$Za=($a!=""?"":" checked");echo"<thead><tr>","<th style='text-align: left;'><label class='block'><input type='checkbox' id='check-tables'$Za>".'Tables'."</label>".script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);",""),"<th style='text-align: right;'><label class='block'>".'Data'."<input type='checkbox' id='check-data'$Za></label>".script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);",""),"</thead>\n";$Nj="";$Fi=tables_list();foreach($Fi
  1516. as$B=>$U){$Sg=preg_replace('~_.*~','',$B);$Za=($a==""||$a==(substr($a,-1)=="%"?"$Sg%":$B));$Wg="<tr><td>".checkbox("tables[]",$B,$Za,$B,"","block");if($U!==null&&!preg_match('~table~i',$U))$Nj
  1517. .="$Wg\n";else
  1518. echo"$Wg<td align='right'><label class='block'><span id='Rows-".h($B)."'></span>".checkbox("data[]",$B,$Za)."</label>\n";$Tg[$Sg]++;}echo$Nj;if($Fi)echo
  1519. script("ajaxSetHtml('".js_escape(ME)."script=db');");}else{echo"<thead><tr><th style='text-align: left;'>","<label class='block'><input type='checkbox' id='check-databases'".($a==""?" checked":"").">".'Database'."</label>",script("qs('#check-databases').onclick = partial(formCheck, /^databases\\[/);",""),"</thead>\n";$i=adminer()->databases();if($i){foreach($i
  1520. as$j){if(!information_schema($j)){$Sg=preg_replace('~_.*~','',$j);echo"<tr><td>".checkbox("databases[]",$j,$a==""||$a=="$Sg%",$j,"","block")."\n";$Tg[$Sg]++;}}}else
  1521. echo"<tr><td><textarea name='databases' rows='10' cols='20'></textarea>";}echo'</table>
  1522. </form>
  1523. ';$bd=true;foreach($Tg
  1524. as$x=>$X){if($x!=""&&$X>1){echo($bd?"<p>":" ")."<a href='".h(ME)."dump=".urlencode("$x%")."'>".h($x)."</a>";$bd=false;}}}elseif(isset($_GET["privileges"])){page_header('Privileges');echo'<p class="links"><a href="'.h(ME).'user=">'.'Create user'."</a>";$I=connection()->query("SELECT User, Host FROM mysql.".(DB==""?"user":"db WHERE ".q(DB)." LIKE Db")." ORDER BY Host, User");$ud=$I;if(!$I)$I=connection()->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host");echo"<form action=''><p>\n";hidden_fields_get();echo
  1525. input_hidden("db",DB),($ud?"":input_hidden("grant")),"<table class='odds'>\n","<thead><tr><th>".'Username'."<th>".'Server'."<th></thead>\n";while($K=$I->fetch_assoc())echo'<tr><td>'.h($K["User"])."<td>".h($K["Host"]).'<td><a href="'.h(ME.'user='.urlencode($K["User"]).'&host='.urlencode($K["Host"])).'">'.'Edit'."</a>\n";if(!$ud||DB!="")echo"<tr><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value='".'Edit'."'>\n";echo"</table>\n","</form>\n";}elseif(isset($_GET["sql"])){if(!$l&&$_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();$Kd=&get_session("queries");$Jd=&$Kd[DB];if(!$l&&$_POST["clear"]){$Jd=array();redirect(remove_from_uri("history"));}stop_session();page_header((isset($_GET["import"])?'Import':'SQL command'),$l);$Qe='--'.(JUSH=='sql'?' ':'');if(!$l&&$_POST){$q=false;if(!isset($_GET["import"]))$H=$_POST["query"];elseif($_POST["webfile"]){$ji=adminer()->importServerPath();$q=@fopen((file_exists($ji)?$ji:"compress.zlib://$ji.gz"),"rb");$H=($q?fread($q,1e6):false);}else$H=get_file("sql_file",true,";");if(is_string($H)){if(function_exists('memory_get_usage')&&($kf=ini_bytes("memory_limit"))!="-1")@ini_set("memory_limit",max($kf,strval(2*strlen($H)+memory_get_usage()+8e6)));if($H!=""&&strlen($H)<1e6){$dh=$H.(preg_match("~;[ \t\r\n]*\$~",$H)?"":";");if(!$Jd||first(end($Jd))!=$dh){restart_session();$Jd[]=array($dh,time());set_session("queries",$Kd);stop_session();}}$gi="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|$Qe)[^\n]*\n?|--\r?\n)";$Xb=";";$C=0;$wc=true;$g=connect();if($g&&DB!=""){$g->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$g);}$nb=0;$Dc=array();$wg='[\'"'.(JUSH=="sql"?'`#':(JUSH=="sqlite"?'`[':(JUSH=="mssql"?'[':''))).']|/\*|'.$Qe.'|$'.(JUSH=="pgsql"?'|\$([a-zA-Z]\w*)?\$':'');$aj=microtime(true);$ma=get_settings("adminer_import");while($H!=""){if(!$C&&preg_match("~^$gi*+DELIMITER\\s+(\\S+)~i",$H,$A)){$Xb=preg_quote($A[1]);$H=substr($H,strlen($A[0]));}elseif(!$C&&JUSH=='pgsql'&&preg_match("~^($gi*+COPY\\s+)[^;]+\\s+FROM\\s+stdin;~i",$H,$A)){$Xb="\n\\\\\\.\r?\n";$C=strlen($A[0]);}else{preg_match("($Xb\\s*|$wg)",$H,$A,PREG_OFFSET_CAPTURE,$C);list($nd,$Ng)=$A[0];if(!$nd&&$q&&!feof($q))$H
  1526. .=fread($q,1e5);else{if(!$nd&&rtrim($H)=="")break;$C=$Ng+strlen($nd);if($nd&&!preg_match("(^$Xb)",$nd)){$Ra=driver()->hasCStyleEscapes()||(JUSH=="pgsql"&&($Ng>0&&strtolower($H[$Ng-1])=="e"));$Gg=($nd=='/*'?'\*/':($nd=='['?']':(preg_match("~^$Qe|^#~",$nd)?"\n":preg_quote($nd).($Ra?'|\\\\.':''))));while(preg_match("($Gg|\$)s",$H,$A,PREG_OFFSET_CAPTURE,$C)){$Dh=$A[0][0];if(!$Dh&&$q&&!feof($q))$H
  1527. .=fread($q,1e5);else{$C=$A[0][1]+strlen($Dh);if(!$Dh||$Dh[0]!="\\")break;}}}else{$wc=false;$dh=substr($H,0,$Ng+($Xb[0]=="\n"?3:0));$nb++;$Wg="<pre id='sql-$nb'><code class='jush-".JUSH."'>".adminer()->sqlCommandQuery($dh)."</code></pre>\n";if(JUSH=="sqlite"&&preg_match("~^$gi*+ATTACH\\b~i",$dh,$A)){echo$Wg,"<p class='error'>".'ATTACH queries are not supported.'."\n";$Dc[]=" <a href='#sql-$nb'>$nb</a>";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$Wg;ob_flush();flush();}$oi=microtime(true);if(connection()->multi_query($dh)&&$g&&preg_match("~^$gi*+USE\\b~i",$dh))$g->query($dh);do{$I=connection()->store_result();if(connection()->error){echo($_POST["only_errors"]?$Wg:""),"<p class='error'>".'Error in query'.(connection()->errno?" (".connection()->errno.")":"").": ".error()."\n";$Dc[]=" <a href='#sql-$nb'>$nb</a>";if($_POST["error_stops"])break
  1528. 2;}else{$Pi=" <span class='time'>(".format_time($oi).")</span>".(strlen($dh)<1000?" <a href='".h(ME)."sql=".urlencode(trim($dh))."'>".'Edit'."</a>":"");$oa=connection()->affected_rows;$Qj=($_POST["only_errors"]?"":driver()->warnings());$Rj="warnings-$nb";if($Qj)$Pi
  1529. .=", <a href='#$Rj'>".'Warnings'."</a>".script("qsl('a').onclick = partial(toggle, '$Rj');","");$Lc=null;$hg=null;$Mc="explain-$nb";if(is_object($I)){$z=$_POST["limit"];$hg=print_select_result($I,$g,array(),$z);if(!$_POST["only_errors"]){echo"<form action='' method='post'>\n";$If=$I->num_rows;echo"<p class='sql-footer'>".($If?($z&&$If>$z?sprintf('%d / ',$z):"").lang_format(array('%d row','%d rows'),$If):""),$Pi;if($g&&preg_match("~^($gi|\\()*+SELECT\\b~i",$dh)&&($Lc=explain($g,$dh)))echo", <a href='#$Mc'>Explain</a>".script("qsl('a').onclick = partial(toggle, '$Mc');","");$t="export-$nb";echo", <a href='#$t'>".'Export'."</a>".script("qsl('a').onclick = partial(toggle, '$t');","")."<span id='$t' class='hidden'>: ".html_select("output",adminer()->dumpOutput(),$ma["output"])." ".html_select("format",adminer()->dumpFormat(),$ma["format"]).input_hidden("query",$dh)."<input type='submit' name='export' value='".'Export'."'>".input_token()."</span>\n"."</form>\n";}}else{if(preg_match("~^$gi*+(CREATE|DROP|ALTER)$gi++(DATABASE|SCHEMA)\\b~i",$dh)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"<p class='message' title='".h(connection()->info)."'>".lang_format(array('Query executed OK, %d row affected.','Query executed OK, %d rows affected.'),$oa)."$Pi\n";}echo($Qj?"<div id='$Rj' class='hidden'>\n$Qj</div>\n":"");if($Lc){echo"<div id='$Mc' class='hidden explain'>\n";print_select_result($Lc,$g,$hg);echo"</div>\n";}}$oi=microtime(true);}while(connection()->next_result());}$H=substr($H,$C);$C=0;}}}}if($wc)echo"<p class='message'>".'No commands to execute.'."\n";elseif($_POST["only_errors"])echo"<p class='message'>".lang_format(array('%d query executed OK.','%d queries executed OK.'),$nb-count($Dc))," <span class='time'>(".format_time($aj).")</span>\n";elseif($Dc&&$nb>1)echo"<p class='error'>".'Error in query'.": ".implode("",$Dc)."\n";}else
  1530. echo"<p class='error'>".upload_error($H)."\n";}echo'
  1531. <form action="" method="post" enctype="multipart/form-data" id="form">
  1532. ';$Jc="<input type='submit' value='".'Execute'."' title='Ctrl+Enter'>";if(!isset($_GET["import"])){$dh=$_GET["sql"];if($_POST)$dh=$_POST["query"];elseif($_GET["history"]=="all")$dh=$Jd;elseif($_GET["history"]!="")$dh=idx($Jd[$_GET["history"]],0);echo"<p>";textarea("query",$dh,20);echo
  1533. 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"))."');"),"<p>";adminer()->sqlPrintAfter();echo"$Jc\n",'Limit rows'.": <input type='number' name='limit' class='size' value='".h($_POST?$_POST["limit"]:$_GET["limit"])."'>\n";}else{$_d=(extension_loaded("zlib")?"[.gz]":"");echo"<fieldset><legend>".'File upload'."</legend><div>",file_input("SQL$_d: <input type='file' name='sql_file[]' multiple>\n$Jc"),"</div></fieldset>\n";$Vd=adminer()->importServerPath();if($Vd)echo"<fieldset><legend>".'From server'."</legend><div>",sprintf('Webserver file %s',"<code>".h($Vd)."$_d</code>"),' <input type="submit" name="webfile" value="'.'Run file'.'">',"</div></fieldset>\n";echo"<p>";}echo
  1534. checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),'Stop on error')."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),'Show only errors')."\n",input_token();if(!isset($_GET["import"])&&$Jd){print_fieldset("history",'History',$_GET["history"]!="");for($X=end($Jd);$X;$X=prev($Jd)){$x=key($Jd);list($dh,$Pi,$rc)=$X;echo'<a href="'.h(ME."sql=&history=$x").'">'.'Edit'."</a>"." <span class='time' title='".@date('Y-m-d',$Pi)."'>".@date("H:i:s",$Pi)."</span>"." <code class='jush-".JUSH."'>".shorten_utf8(ltrim(str_replace("\n"," ",str_replace("\r","",preg_replace("~^(#|$Qe).*~m",'',$dh)))),80,"</code>").($rc?" <span class='time'>($rc)</span>":"")."<br>\n";}echo"<input type='submit' name='clear' value='".'Clear'."'>\n","<a href='".h(ME."sql=&history=all")."'>".'Edit all'."</a>\n","</div></fieldset>\n";}echo'</form>
  1535. ';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$n=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$n):""):where($_GET,$n));$wj=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($n
  1536. as$B=>$m){if(!isset($m["privileges"][$wj?"update":"insert"])||adminer()->fieldName($m)==""||$m["generated"])unset($n[$B]);}if($_POST&&!$l&&!isset($_GET["select"])){$Se=$_POST["referer"];if($_POST["insert"])$Se=($wj?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match('~^.+&select=.+$~',$Se))$Se=ME."select=".urlencode($a);$w=indexes($a);$rj=unique_array($_GET["where"],$w);$gh="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($Se,'Item has been deleted.',driver()->delete($a,$gh,$rj?0:1));else{$O=array();foreach($n
  1537. as$B=>$m){$X=process_input($m);if($X!==false&&$X!==null)$O[idf_escape($B)]=$X;}if($wj){if(!$O)redirect($Se);queries_redirect($Se,'Item has been updated.',driver()->update($a,$O,$gh,$rj?0:1));if(is_ajax()){page_headers();page_messages($l);exit;}}else{$I=driver()->insert($a,$O);$Je=($I?last_id($I):0);queries_redirect($Se,sprintf('Item%s has been inserted.',($Je?" $Je":"")),$I);}}}$K=null;if($_POST["save"])$K=(array)$_POST["fields"];elseif($Z){$M=array();foreach($n
  1538. as$B=>$m){if(isset($m["privileges"]["select"])){$wa=($_POST["clone"]&&$m["auto_increment"]?"''":convert_field($m));$M[]=($wa?"$wa AS ":"").idf_escape($B);}}$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)$l=error();else{$K=$I->fetch_assoc();if(!$K)$K=false;}if(isset($_GET["select"])&&(!$K||$I->fetch_assoc()))$K=null;}}if(!support("table")&&!$n){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
  1539. as$x=>$X){if(!$Z)$K[$x]=null;$n[$x]=array("field"=>$x,"null"=>($x!=driver()->primary),"auto_increment"=>($x==driver()->primary));}}}edit_form($a,$n,$K,$wj,$l);}elseif(isset($_GET["create"])){$a=$_GET["create"];$Ag=driver()->partitionBy;$Dg=($Ag?driver()->partitionsInfo($a):array());$mh=referencable_primary($a);$ld=array();foreach($mh
  1540. as$_i=>$m)$ld[str_replace("`","``",$_i)."`".str_replace("`","``",$m["field"])]=$_i;$kg=array();$S=array();if($a!=""){$kg=fields($a);$S=table_status1($a);if(count($S)<2)$l='No tables.';}$K=$_POST;$K["fields"]=(array)$K["fields"];if($K["auto_increment_col"])$K["fields"][$K["auto_increment_col"]]["auto_increment"]=true;if($_POST)save_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($K["fields"])&&!$l){if($_POST["drop"])queries_redirect(substr(ME,0,-1),'Table has been dropped.',drop_tables(array($a)));else{$n=array();$sa=array();$Bj=false;$jd=array();$jg=reset($kg);$qa=" FIRST";foreach($K["fields"]as$x=>$m){$p=$ld[$m["type"]];$lj=($p!==null?$mh[$p]:$m);if($m["field"]!=""){if(!$m["generated"])$m["default"]=null;$bh=process_field($m,$lj);$sa[]=array($m["orig"],$bh,$qa);if(!$jg||$bh!==process_field($jg,$jg)){$n[]=array($m["orig"],$bh,$qa);if($m["orig"]!=""||$qa)$Bj=true;}if($p!==null)$jd[idf_escape($m["field"])]=($a!=""&&JUSH!="sqlite"?"ADD":" ").format_foreign_key(array('table'=>$ld[$m["type"]],'source'=>array($m["field"]),'target'=>array($lj["field"]),'on_delete'=>$m["on_delete"],));$qa=" AFTER ".idf_escape($m["field"]);}elseif($m["orig"]!=""){$Bj=true;$n[]=array($m["orig"]);}if($m["orig"]!=""){$jg=next($kg);if(!$jg)$qa="";}}$E=array();if(in_array($K["partition_by"],$Ag)){foreach($K
  1541. as$x=>$X){if(preg_match('~^partition~',$x))$E[$x]=$X;}foreach($E["partition_names"]as$x=>$B){if($B==""){unset($E["partition_names"][$x]);unset($E["partition_values"][$x]);}}$E["partition_names"]=array_values($E["partition_names"]);$E["partition_values"]=array_values($E["partition_values"]);if($E==$Dg)$E=array();}elseif(preg_match("~partitioned~",$S["Create_options"]))$E=null;$lf='Table has been altered.';if($a==""){cookie("adminer_engine",$K["Engine"]);$lf='Table has been created.';}$B=trim($K["name"]);queries_redirect(ME.(support("table")?"table=":"select=").urlencode($B),$lf,alter_table($a,$B,(JUSH=="sqlite"&&($Bj||$jd)?$sa:$n),$jd,($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"]):""),$E));}}page_header(($a!=""?'Alter table':'Create table'),$l,array("table"=>$a),h($a));if(!$_POST){$nj=driver()->types();$K=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($nj["int"])?"int":(isset($nj["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($kg
  1542. as$m){$m["generated"]=$m["generated"]?:(isset($m["default"])?"DEFAULT":"");$K["fields"][]=$m;}if($Ag){$K+=$Dg;$K["partition_names"][]="";$K["partition_values"][]="";}}}$jb=collations();if(is_array(reset($jb)))$jb=call_user_func_array('array_merge',array_values($jb));$yc=driver()->engines();foreach($yc
  1543. as$xc){if(!strcasecmp($xc,$K["Engine"])){$K["Engine"]=$xc;break;}}echo'
  1544. <form action="" method="post" id="form">
  1545. <p>
  1546. ';if(support("columns")||$a==""){echo'Table name'.": <input name='name'".($a==""&&!$_POST?" autofocus":"")." data-maxlength='64' value='".h($K["name"])."' autocapitalize='off'>\n",($yc?html_select("Engine",array(""=>"(".'engine'.")")+$yc,$K["Engine"]).on_help("event.target.value",1).script("qsl('select').onchange = helpClose;")."\n":"");if($jb)echo"<datalist id='collations'>".optionlist($jb)."</datalist>\n",(preg_match("~sqlite|mssql~",JUSH)?"":"<input list='collations' name='Collation' value='".h($K["Collation"])."' placeholder='(".'collation'.")'>\n");echo"<input type='submit' value='".'Save'."'>\n";}if(support("columns")){echo"<div class='scrollable'>\n","<table id='edit-fields' class='nowrap'>\n";edit_fields($K["fields"],$jb,"TABLE",$ld);echo"</table>\n",script("editFields();"),"</div>\n<p>\n",'Auto Increment'.": <input type='number' name='Auto_increment' class='size' value='".h($K["Auto_increment"])."'>\n",checkbox("defaults",1,($_POST?$_POST["defaults"]:get_setting("defaults")),'Default values',"columnShow(this.checked, 5)","jsonly");$qb=($_POST?$_POST["comments"]:get_setting("comments"));echo(support("comment")?checkbox("comments",1,$qb,'Comment',"editingCommentsClick(this, true);","jsonly").' '.(preg_match('~\n~',$K["Comment"])?"<textarea name='Comment' rows='2' cols='20'".($qb?"":" class='hidden'").">".h($K["Comment"])."</textarea>":'<input name="Comment" value="'.h($K["Comment"]).'" data-maxlength="'.(min_version(5.5)?2048:60).'"'.($qb?"":" class='hidden'").'>'):''),'<p>
  1547. <input type="submit" value="Save">
  1548. ';}echo'
  1549. ';if($a!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$a));if($Ag&&(JUSH=='sql'||$a=="")){$Bg=preg_match('~RANGE|LIST~',$K["partition_by"]);print_fieldset("partition",'Partition by',$K["partition_by"]);echo"<p>".html_select("partition_by",array_merge(array(""),$Ag),$K["partition_by"]).on_help("event.target.value.replace(/./, 'PARTITION BY \$&')",1).script("qsl('select').onchange = partitionByChange;"),"(<input name='partition' value='".h($K["partition"])."'>)\n",'Partitions'.": <input type='number' name='partitions' class='size".($Bg||!$K["partition_by"]?" hidden":"")."' value='".h($K["partitions"])."'>\n","<table id='partition-table'".($Bg?"":" class='hidden'").">\n","<thead><tr><th>".'Partition name'."<th>".'Values'."</thead>\n";foreach($K["partition_names"]as$x=>$X)echo'<tr>','<td><input name="partition_names[]" value="'.h($X).'" autocapitalize="off">',($x==count($K["partition_names"])-1?script("qsl('input').oninput = partitionNameChange;"):''),'<td><input name="partition_values[]" value="'.h(idx($K["partition_values"],$x)).'">';echo"</table>\n</div></fieldset>\n";}echo
  1550. input_token(),'</form>
  1551. ';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$de=array("PRIMARY","UNIQUE","INDEX");$S=table_status1($a,true);$ae=driver()->indexAlgorithms($S);if(preg_match('~MyISAM|M?aria'.(min_version(5.6,'10.0.5')?'|InnoDB':'').'~i',$S["Engine"]))$de[]="FULLTEXT";if(preg_match('~MyISAM|M?aria'.(min_version(5.7,'10.2.2')?'|InnoDB':'').'~i',$S["Engine"]))$de[]="SPATIAL";$w=indexes($a);$n=fields($a);$G=array();if(JUSH=="mongo"){$G=$w["_id_"];unset($de[0]);unset($w["_id_"]);}$K=$_POST;if($K)save_settings(array("index_options"=>$K["options"]));if($_POST&&!$l&&!$_POST["add"]&&!$_POST["drop_col"]){$b=array();foreach($K["indexes"]as$v){$B=$v["name"];if(in_array($v["type"],$de)){$e=array();$Oe=array();$ac=array();$be=(support("partial_indexes")?$v["partial"]:"");$Zd=(in_array($v["algorithm"],$ae)?$v["algorithm"]:"");$O=array();ksort($v["columns"]);foreach($v["columns"]as$x=>$d){if($d!=""){$y=idx($v["lengths"],$x);$Yb=idx($v["descs"],$x);$O[]=($n[$d]?idf_escape($d):$d).($y?"(".(+$y).")":"").($Yb?" DESC":"");$e[]=$d;$Oe[]=($y?:null);$ac[]=$Yb;}}$Kc=$w[$B];if($Kc){ksort($Kc["columns"]);ksort($Kc["lengths"]);ksort($Kc["descs"]);if($v["type"]==$Kc["type"]&&array_values($Kc["columns"])===$e&&(!$Kc["lengths"]||array_values($Kc["lengths"])===$Oe)&&array_values($Kc["descs"])===$ac&&$Kc["partial"]==$be&&(!$ae||$Kc["algorithm"]==$Zd)){unset($w[$B]);continue;}}if($e)$b[]=array($v["type"],$B,$O,$Zd,$be);}}foreach($w
  1552. as$B=>$Kc)$b[]=array($Kc["type"],$B,"DROP");if(!$b)redirect(ME."table=".urlencode($a));queries_redirect(ME."table=".urlencode($a),'Indexes have been altered.',alter_indexes($a,$b));}page_header('Indexes',$l,array("table"=>$a),h($a));$Yc=array_keys($n);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
  1553. as$x=>$v){$w[$x]["name"]=$x;$w[$x]["columns"][]="";}$w[]=array("columns"=>array(1=>""));$K["indexes"]=$w;}$Oe=(JUSH=="sql"||JUSH=="mssql");$ai=($_POST?$_POST["options"]:get_setting("index_options"));echo'
  1554. <form action="" method="post">
  1555. <div class="scrollable">
  1556. <table class="nowrap">
  1557. <thead><tr>
  1558. <th id="label-type">Index Type
  1559. ';$Td=" class='idxopts".($ai?"":" hidden")."'";if($ae)echo"<th id='label-algorithm'$Td>".'Algorithm'.doc_link(array('sql'=>'create-index.html#create-index-storage-engine-index-types','mariadb'=>'storage-engine-index-types/','pgsql'=>'indexes-types.html',));echo'<th><input type="submit" class="wayoff">','Columns'.($Oe?"<span$Td> (".'length'.")</span>":"");if($Oe||support("descidx"))echo
  1560. checkbox("options",1,$ai,'Options',"indexOptionsShow(this.checked)","jsonly")."\n";echo'<th id="label-name">Name
  1561. ';if(support("partial_indexes"))echo"<th id='label-condition'$Td>".'Condition';echo'<th><noscript>',icon("plus","add[0]","+",'Add next'),'</noscript>
  1562. </thead>
  1563. ';if($G){echo"<tr><td>PRIMARY<td>";foreach($G["columns"]as$x=>$d)echo
  1564. select_input(" disabled",$Yc,$d),"<label><input disabled type='checkbox'>".'descending'."</label> ";echo"<td><td>\n";}$ze=1;foreach($K["indexes"]as$v){if(!$_POST["drop_col"]||$ze!=key($_POST["drop_col"])){echo"<tr><td>".html_select("indexes[$ze][type]",array(-1=>"")+$de,$v["type"],($ze==count($K["indexes"])?"indexesAddRow.call(this);":""),"label-type");if($ae)echo"<td$Td>".html_select("indexes[$ze][algorithm]",array_merge(array(""),$ae),$v['algorithm'],"label-algorithm");echo"<td>";ksort($v["columns"]);$s=1;foreach($v["columns"]as$x=>$d){echo"<span>".select_input(" name='indexes[$ze][columns][$s]' title='".'Column'."'",($n&&($d==""||$n[$d])?array_combine($Yc,$Yc):array()),$d,"partial(".($s==count($v["columns"])?"indexesAddColumn":"indexesChangeColumn").", '".js_escape(JUSH=="sql"?"":$_GET["indexes"]."_")."')"),"<span$Td>",($Oe?"<input type='number' name='indexes[$ze][lengths][$s]' class='size' value='".h(idx($v["lengths"],$x))."' title='".'Length'."'>":""),(support("descidx")?checkbox("indexes[$ze][descs][$s]",1,idx($v["descs"],$x),'descending'):""),"</span> </span>";$s++;}echo"<td><input name='indexes[$ze][name]' value='".h($v["name"])."' autocapitalize='off' aria-labelledby='label-name'>\n";if(support("partial_indexes"))echo"<td$Td><input name='indexes[$ze][partial]' value='".h($v["partial"])."' autocapitalize='off' aria-labelledby='label-condition'>\n";echo"<td>".icon("cross","drop_col[$ze]","x",'Remove').script("qsl('button').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");}$ze++;}echo'</table>
  1565. </div>
  1566. <p>
  1567. <input type="submit" value="Save">
  1568. ',input_token(),'</form>
  1569. ';}elseif(isset($_GET["database"])){$K=$_POST;if($_POST&&!$l&&!$_POST["add"]){$B=trim($K["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),'Database has been dropped.',drop_databases(array(DB)));}elseif(DB!==$B){if(DB!=""){$_GET["db"]=$B;queries_redirect(preg_replace('~\bdb=[^&]*&~','',ME)."db=".urlencode($B),'Database has been renamed.',rename_database($B,$K["collation"]));}else{$i=explode("\n",str_replace("\r","",$B));$ti=true;$Ie="";foreach($i
  1570. as$j){if(count($i)==1||$j!=""){if(!create_database($j,$K["collation"]))$ti=false;$Ie=$j;}}restart_session();set_session("dbs",null);queries_redirect(ME."db=".urlencode($Ie),'Database has been created.',$ti);}}else{if(!$K["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($B).(preg_match('~^[a-z0-9_]+$~i',$K["collation"])?" COLLATE $K[collation]":""),substr(ME,0,-1),'Database has been altered.');}}page_header(DB!=""?'Alter database':'Create database',$l,array(),h(DB));$jb=collations();$B=DB;if($_POST)$B=$K["name"];elseif(DB!="")$K["collation"]=db_collation(DB,$jb);elseif(JUSH=="sql"){foreach(get_vals("SHOW GRANTS")as$ud){if(preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~',$ud,$A)&&$A[1]){$B=stripcslashes(idf_unescape("`$A[2]`"));break;}}}echo'
  1571. <form action="" method="post">
  1572. <p>
  1573. ',($_POST["add"]||strpos($B,"\n")?'<textarea autofocus name="name" rows="10" cols="40">'.h($B).'</textarea><br>':'<input name="name" autofocus value="'.h($B).'" data-maxlength="64" autocapitalize="off">')."\n".($jb?html_select("collation",array(""=>"(".'collation'.")")+$jb,$K["collation"]).doc_link(array('sql'=>"charset-charsets.html",'mariadb'=>"supported-character-sets-and-collations/",'mssql'=>"relational-databases/system-functions/sys-fn-helpcollations-transact-sql",)):""),'<input type="submit" value="Save">
  1574. ';if(DB!="")echo"<input type='submit' name='drop' value='".'Drop'."'>".confirm(sprintf('Drop %s?',DB))."\n";elseif(!$_POST["add"]&&$_GET["db"]=="")echo
  1575. icon("plus","add[0]","+",'Add next')."\n";echo
  1576. input_token(),'</form>
  1577. ';}elseif(isset($_GET["scheme"])){$K=$_POST;if($_POST&&!$l){$_=preg_replace('~ns=[^&]*&~','',ME)."ns=";if($_POST["drop"])query_redirect("DROP SCHEMA ".idf_escape($_GET["ns"]),$_,'Schema has been dropped.');else{$B=trim($K["name"]);$_
  1578. .=urlencode($B);if($_GET["ns"]=="")query_redirect("CREATE SCHEMA ".idf_escape($B),$_,'Schema has been created.');elseif($_GET["ns"]!=$B)query_redirect("ALTER SCHEMA ".idf_escape($_GET["ns"])." RENAME TO ".idf_escape($B),$_,'Schema has been altered.');else
  1579. redirect($_);}}page_header($_GET["ns"]!=""?'Alter schema':'Create schema',$l);if(!$K)$K["name"]=$_GET["ns"];echo'
  1580. <form action="" method="post">
  1581. <p><input name="name" autofocus value="',h($K["name"]),'" autocapitalize="off">
  1582. <input type="submit" value="Save">
  1583. ';if($_GET["ns"]!="")echo"<input type='submit' name='drop' value='".'Drop'."'>".confirm(sprintf('Drop %s?',$_GET["ns"]))."\n";echo
  1584. input_token(),'</form>
  1585. ';}elseif(isset($_GET["call"])){$ba=($_GET["name"]?:$_GET["call"]);page_header('Call'.": ".h($ba),$l);$_h=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Wd=array();$pg=array();foreach($_h["fields"]as$s=>$m){if(substr($m["inout"],-3)=="OUT"&&JUSH=='sql')$pg[$s]="@".idf_escape($m["field"])." AS ".idf_escape($m["field"]);if(!$m["inout"]||substr($m["inout"],0,2)=="IN")$Wd[]=$s;}if(!$l&&$_POST){$Sa=array();foreach($_h["fields"]as$x=>$m){$X="";if(in_array($x,$Wd)){$X=process_input($m);if($X===false)$X="''";if(isset($pg[$x]))connection()->query("SET @".idf_escape($m["field"])." = $X");}if(isset($pg[$x]))$Sa[]="@".idf_escape($m["field"]);elseif(in_array($x,$Wd))$Sa[]=$X;}$H=(isset($_GET["callf"])?"SELECT ":"CALL ").($_h["returns"]["type"]=="record"?"* FROM ":"").table($ba)."(".implode(", ",$Sa).")";$oi=microtime(true);$I=connection()->multi_query($H);$oa=connection()->affected_rows;echo
  1586. adminer()->selectQuery($H,$oi,!$I);if(!$I)echo"<p class='error'>".error()."\n";else{$g=connect();if($g)$g->select_db(DB);do{$I=connection()->store_result();if(is_object($I))print_select_result($I,$g);else
  1587. echo"<p class='message'>".lang_format(array('Routine has been called, %d row affected.','Routine has been called, %d rows affected.'),$oa)." <span class='time'>".@date("H:i:s")."</span>\n";}while(connection()->next_result());if($pg)print_select_result(connection()->query("SELECT ".implode(", ",$pg)));}}echo'
  1588. <form action="" method="post">
  1589. ';if($Wd){echo"<table class='layout'>\n";foreach($Wd
  1590. as$x){$m=$_h["fields"][$x];$B=$m["field"];echo"<tr><th>".adminer()->fieldName($m);$Y=idx($_POST["fields"],$B);if($Y!=""){if($m["type"]=="set")$Y=implode(",",$Y);}input($m,$Y,idx($_POST["function"],$B,""));echo"\n";}echo"</table>\n";}echo'<p>
  1591. <input type="submit" value="Call">
  1592. ',input_token(),'</form>
  1593.  
  1594. <pre>
  1595. ';function
  1596. pre_tr($Dh){return
  1597. preg_replace('~^~m','<tr>',preg_replace('~\|~','<td>',preg_replace('~\|$~m',"",rtrim($Dh))));}$R='(\+--[-+]+\+\n)';$K='(\| .* \|\n)';echo
  1598. preg_replace_callback("~^$R?$K$R?($K*)$R?~m",function($A){$cd=pre_tr($A[2]);return"<table>\n".($A[1]?"<thead>$cd</thead>\n":$cd).pre_tr($A[4])."\n</table>";},preg_replace('~(\n(    -|mysql)&gt; )(.+)~',"\\1<code class='jush-sql'>\\3</code>",preg_replace('~(.+)\n---+\n~',"<b>\\1</b>\n",h($_h['comment']))));echo'</pre>
  1599. ';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$B=$_GET["name"];$K=$_POST;if($_POST&&!$l&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){if(!$_POST["drop"]){$K["source"]=array_filter($K["source"],'strlen');ksort($K["source"]);$Ii=array();foreach($K["source"]as$x=>$X)$Ii[$x]=$K["target"][$x];$K["target"]=$Ii;}if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(" $B"=>($K["drop"]?"":" ".format_foreign_key($K))));else{$b="ALTER TABLE ".table($a);$I=($B==""||queries("$b DROP ".(JUSH=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($B)));if(!$K["drop"])$I=queries("$b ADD".format_foreign_key($K));}queries_redirect(ME."table=".urlencode($a),($K["drop"]?'Foreign key has been dropped.':($B!=""?'Foreign key has been altered.':'Foreign key has been created.')),$I);if(!$K["drop"])$l='Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.';}page_header('Foreign key',$l,array("table"=>$a),h($a));if($_POST){ksort($K["source"]);if($_POST["add"])$K["source"][]="";elseif($_POST["change"]||$_POST["change-js"])$K["target"]=array();}elseif($B!=""){$ld=foreign_keys($a);$K=$ld[$B];$K["source"][]="";}else{$K["table"]=$a;$K["source"]=array("");}echo'
  1600. <form action="" method="post">
  1601. ';$fi=array_keys(fields($a));if($K["db"]!="")connection()->select_db($K["db"]);if($K["ns"]!=""){$lg=get_schema();set_schema($K["ns"]);}$lh=array_keys(array_filter(table_status('',true),'Adminer\fk_support'));$Ii=array_keys(fields(in_array($K["table"],$lh)?$K["table"]:reset($lh)));$Vf="this.form['change-js'].value = '1'; this.form.submit();";echo"<p><label>".'Target table'.": ".html_select("table",$lh,$K["table"],$Vf)."</label>\n";if(support("scheme")){$Gh=array_filter(adminer()->schemas(),function($Fh){return!preg_match('~^information_schema$~i',$Fh);});echo"<label>".'Schema'.": ".html_select("ns",$Gh,$K["ns"]!=""?$K["ns"]:$_GET["ns"],$Vf)."</label>";if($K["ns"]!="")set_schema($lg);}elseif(JUSH!="sqlite"){$Qb=array();foreach(adminer()->databases()as$j){if(!information_schema($j))$Qb[]=$j;}echo"<label>".'DB'.": ".html_select("db",$Qb,$K["db"]!=""?$K["db"]:$_GET["db"],$Vf)."</label>";}echo
  1602. input_hidden("change-js"),'<noscript><p><input type="submit" name="change" value="Change"></noscript>
  1603. <table>
  1604. <thead><tr><th id="label-source">Source<th id="label-target">Target</thead>
  1605. ';$ze=0;foreach($K["source"]as$x=>$X){echo"<tr>","<td>".html_select("source[".(+$x)."]",array(-1=>"")+$fi,$X,($ze==count($K["source"])-1?"foreignAddRow.call(this);":""),"label-source"),"<td>".html_select("target[".(+$x)."]",$Ii,idx($K["target"],$x),"","label-target");$ze++;}echo'</table>
  1606. <p>
  1607. <label>ON DELETE: ',html_select("on_delete",array(-1=>"")+explode("|",driver()->onActions),$K["on_delete"]),'</label>
  1608. <label>ON UPDATE: ',html_select("on_update",array(-1=>"")+explode("|",driver()->onActions),$K["on_update"]),'</label>
  1609. ',doc_link(array('sql'=>"innodb-foreign-key-constraints.html",'mariadb'=>"foreign-keys/",'pgsql'=>"sql-createtable.html#SQL-CREATETABLE-REFERENCES",'mssql'=>"t-sql/statements/create-table-transact-sql",'oracle'=>"SQLRF01111",)),'<p>
  1610. <input type="submit" value="Save">
  1611. <noscript><p><input type="submit" name="add" value="Add column"></noscript>
  1612. ';if($B!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$B));echo
  1613. input_token(),'</form>
  1614. ';}elseif(isset($_GET["view"])){$a=$_GET["view"];$K=$_POST;$mg="VIEW";if(JUSH=="pgsql"&&$a!=""){$P=table_status1($a);$mg=strtoupper($P["Engine"]);}if($_POST&&!$l){$B=trim($K["name"]);$wa=" AS\n$K[select]";$Se=ME."table=".urlencode($B);$lf='View has been altered.';$U=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$B&&JUSH!="sqlite"&&$U=="VIEW"&&$mg=="VIEW")query_redirect((JUSH=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($B).$wa,$Se,$lf);else{$Ki=$B."_adminer_".uniqid();drop_create("DROP $mg ".table($a),"CREATE $U ".table($B).$wa,"DROP $U ".table($B),"CREATE $U ".table($Ki).$wa,"DROP $U ".table($Ki),($_POST["drop"]?substr(ME,0,-1):$Se),'View has been dropped.',$lf,'View has been created.',$a,$B);}}if(!$_POST&&$a!=""){$K=view($a);$K["name"]=$a;$K["materialized"]=($mg!="VIEW");if(!$l)$l=error();}page_header(($a!=""?'Alter view':'Create view'),$l,array("table"=>$a),h($a));echo'
  1615. <form action="" method="post">
  1616. <p>Name: <input name="name" value="',h($K["name"]),'" data-maxlength="64" autocapitalize="off">
  1617. ',(support("materializedview")?" ".checkbox("materialized",1,$K["materialized"],'Materialized view'):""),'<p>';textarea("select",$K["select"]);echo'<p>
  1618. <input type="submit" value="Save">
  1619. ';if($a!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$a));echo
  1620. input_token(),'</form>
  1621. ';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$qe=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$pi=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$K=$_POST;if($_POST&&!$l){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),'Event has been dropped.');elseif(in_array($K["INTERVAL_FIELD"],$qe)&&isset($pi[$K["STATUS"]])){$Eh="\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!=""?'Event has been altered.':'Event has been created.'),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$Eh.($aa!=$K["EVENT_NAME"]?"\nRENAME TO ".idf_escape($K["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($K["EVENT_NAME"]).$Eh)."\n".$pi[$K["STATUS"]]." COMMENT ".q($K["EVENT_COMMENT"]).rtrim(" DO\n$K[EVENT_DEFINITION]",";").";"));}}page_header(($aa!=""?'Alter event'.": ".h($aa):'Create event'),$l);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'
  1622. <form action="" method="post">
  1623. <table class="layout">
  1624. <tr><th>Name<td><input name="EVENT_NAME" value="',h($K["EVENT_NAME"]),'" data-maxlength="64" autocapitalize="off">
  1625. <tr><th title="datetime">Start<td><input name="STARTS" value="',h("$K[EXECUTE_AT]$K[STARTS]"),'">
  1626. <tr><th title="datetime">End<td><input name="ENDS" value="',h($K["ENDS"]),'">
  1627. <tr><th>Every<td><input type="number" name="INTERVAL_VALUE" value="',h($K["INTERVAL_VALUE"]),'" class="size"> ',html_select("INTERVAL_FIELD",$qe,$K["INTERVAL_FIELD"]),'<tr><th>Status<td>',html_select("STATUS",$pi,$K["STATUS"]),'<tr><th>Comment<td><input name="EVENT_COMMENT" value="',h($K["EVENT_COMMENT"]),'" data-maxlength="64">
  1628. <tr><th><td>',checkbox("ON_COMPLETION","PRESERVE",$K["ON_COMPLETION"]=="PRESERVE",'On completion preserve'),'</table>
  1629. <p>';textarea("EVENT_DEFINITION",$K["EVENT_DEFINITION"]);echo'<p>
  1630. <input type="submit" value="Save">
  1631. ';if($aa!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$aa));echo
  1632. input_token(),'</form>
  1633. ';}elseif(isset($_GET["procedure"])){$ba=($_GET["name"]?:$_GET["procedure"]);$_h=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$K=$_POST;$K["fields"]=(array)$K["fields"];if($_POST&&!process_fields($K["fields"])&&!$l){$ig=routine($_GET["procedure"],$_h);$Ki="$K[name]_adminer_".uniqid();foreach($K["fields"]as$x=>$m){if($m["field"]=="")unset($K["fields"][$x]);}drop_create("DROP $_h ".routine_id($ba,$ig),create_routine($_h,$K),"DROP $_h ".routine_id($K["name"],$K),create_routine($_h,array("name"=>$Ki)+$K),"DROP $_h ".routine_id($Ki,$K),substr(ME,0,-1),'Routine has been dropped.','Routine has been altered.','Routine has been created.',$ba,$K["name"]);}page_header(($ba!=""?(isset($_GET["function"])?'Alter function':'Alter procedure').": ".h($ba):(isset($_GET["function"])?'Create function':'Create procedure')),$l);if(!$_POST){if($ba=="")$K["language"]="sql";else{$K=routine($_GET["procedure"],$_h);$K["name"]=$ba;}}$jb=get_vals("SHOW CHARACTER SET");sort($jb);$Ah=routine_languages();echo($jb?"<datalist id='collations'>".optionlist($jb)."</datalist>":""),'
  1634. <form action="" method="post" id="form">
  1635. <p>Name: <input name="name" value="',h($K["name"]),'" data-maxlength="64" autocapitalize="off">
  1636. ',($Ah?"<label>".'Language'.": ".html_select("language",$Ah,$K["language"])."</label>\n":""),'<input type="submit" value="Save">
  1637. <div class="scrollable">
  1638. <table class="nowrap">
  1639. ';edit_fields($K["fields"],$jb,$_h);if(isset($_GET["function"])){echo"<tr><td>".'Return type';edit_type("returns",(array)$K["returns"],$jb,array(),(JUSH=="pgsql"?array("void","trigger"):array()));}echo'</table>
  1640. ',script("editFields();"),'</div>
  1641. <p>';textarea("definition",$K["definition"],20);echo'<p>
  1642. <input type="submit" value="Save">
  1643. ';if($ba!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$ba));echo
  1644. input_token(),'</form>
  1645. ';}elseif(isset($_GET["sequence"])){$da=$_GET["sequence"];$K=$_POST;if($_POST&&!$l){$_=substr(ME,0,-1);$B=trim($K["name"]);if($_POST["drop"])query_redirect("DROP SEQUENCE ".idf_escape($da),$_,'Sequence has been dropped.');elseif($da=="")query_redirect("CREATE SEQUENCE ".idf_escape($B),$_,'Sequence has been created.');elseif($da!=$B)query_redirect("ALTER SEQUENCE ".idf_escape($da)." RENAME TO ".idf_escape($B),$_,'Sequence has been altered.');else
  1646. redirect($_);}page_header($da!=""?'Alter sequence'.": ".h($da):'Create sequence',$l);if(!$K)$K["name"]=$da;echo'
  1647. <form action="" method="post">
  1648. <p><input name="name" value="',h($K["name"]),'" autocapitalize="off">
  1649. <input type="submit" value="Save">
  1650. ';if($da!="")echo"<input type='submit' name='drop' value='".'Drop'."'>".confirm(sprintf('Drop %s?',$da))."\n";echo
  1651. input_token(),'</form>
  1652. ';}elseif(isset($_GET["type"])){$ea=$_GET["type"];$K=$_POST;if($_POST&&!$l){$_=substr(ME,0,-1);if($_POST["drop"])query_redirect("DROP TYPE ".idf_escape($ea),$_,'Type has been dropped.');else
  1653. query_redirect("CREATE TYPE ".idf_escape(trim($K["name"]))." $K[as]",$_,'Type has been created.');}page_header($ea!=""?'Alter type'.": ".h($ea):'Create type',$l);if(!$K)$K["as"]="AS ";echo'
  1654. <form action="" method="post">
  1655. <p>
  1656. ';if($ea!=""){$nj=driver()->types();$Bc=type_values($nj[$ea]);if($Bc)echo"<code class='jush-".JUSH."'>ENUM (".h($Bc).")</code>\n<p>";echo"<input type='submit' name='drop' value='".'Drop'."'>".confirm(sprintf('Drop %s?',$ea))."\n";}else{echo'Name'.": <input name='name' value='".h($K['name'])."' autocapitalize='off'>\n",doc_link(array('pgsql'=>"datatype-enum.html",),"?");textarea("as",$K["as"]);echo"<p><input type='submit' value='".'Save'."'>\n";}echo
  1657. input_token(),'</form>
  1658. ';}elseif(isset($_GET["check"])){$a=$_GET["check"];$B=$_GET["name"];$K=$_POST;if($K&&!$l){if(JUSH=="sqlite")$I=recreate_table($a,$a,array(),array(),array(),"",array(),"$B",($K["drop"]?"":$K["clause"]));else{$I=($B==""||queries("ALTER TABLE ".table($a)." DROP CONSTRAINT ".idf_escape($B)));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"]?'Check has been dropped.':($B!=""?'Check has been altered.':'Check has been created.')),$I);}page_header(($B!=""?'Alter check'.": ".h($B):'Create check'),$l,array("table"=>$a));if(!$K){$ab=driver()->checkConstraints($a);$K=array("name"=>$B,"clause"=>$ab[$B]);}echo'
  1659. <form action="" method="post">
  1660. <p>';if(JUSH!="sqlite")echo'Name'.': <input name="name" value="'.h($K["name"]).'" data-maxlength="64" autocapitalize="off"> ';echo
  1661. doc_link(array('sql'=>"create-table-check-constraints.html",'mariadb'=>"constraint/",'pgsql'=>"ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS",'mssql'=>"relational-databases/tables/create-check-constraints",'sqlite'=>"lang_createtable.html#check_constraints",),"?"),'<p>';textarea("clause",$K["clause"]);echo'<p><input type="submit" value="Save">
  1662. ';if($B!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$B));echo
  1663. input_token(),'</form>
  1664. ';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$B="$_GET[name]";$jj=trigger_options();$K=(array)trigger($B,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$l&&in_array($_POST["Timing"],$jj["Timing"])&&in_array($_POST["Event"],$jj["Event"])&&in_array($_POST["Type"],$jj["Type"])){$Sf=" ON ".table($a);$ic="DROP TRIGGER ".idf_escape($B).(JUSH=="pgsql"?$Sf:"");$Se=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($ic,$Se,'Trigger has been dropped.');else{if($B!="")queries($ic);queries_redirect($Se,($B!=""?'Trigger has been altered.':'Trigger has been created.'),queries(create_trigger($Sf,$_POST)));if($B!="")queries(create_trigger($Sf,$K+array("Type"=>reset($jj["Type"]))));}}$K=$_POST;}page_header(($B!=""?'Alter trigger'.": ".h($B):'Create trigger'),$l,array("table"=>$a));echo'
  1665. <form action="" method="post" id="form">
  1666. <table class="layout">
  1667. <tr><th>Time<td>',html_select("Timing",$jj["Timing"],$K["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, '".js_escape($a)."', this.form);"),'<tr><th>Event<td>',html_select("Event",$jj["Event"],$K["Event"],"this.form['Timing'].onchange();"),(in_array("UPDATE OF",$jj["Event"])?" <input name='Of' value='".h($K["Of"])."' class='hidden'>":""),'<tr><th>Type<td>',html_select("Type",$jj["Type"],$K["Type"]),'</table>
  1668. <p>Name: <input name="Trigger" value="',h($K["Trigger"]),'" data-maxlength="64" autocapitalize="off">
  1669. ',script("qs('#form')['Timing'].onchange();"),'<p>';textarea("Statement",$K["Statement"]);echo'<p>
  1670. <input type="submit" value="Save">
  1671. ';if($B!="")echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',$B));echo
  1672. input_token(),'</form>
  1673. ';}elseif(isset($_GET["user"])){$fa=$_GET["user"];$Zg=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$K){foreach(explode(",",($K["Privilege"]=="Grant option"?"":$K["Context"]))as$_b)$Zg[$_b][$K["Privilege"]]=$K["Comment"];}$Zg["Server Admin"]+=$Zg["File access on server"];$Zg["Databases"]["Create routine"]=$Zg["Procedures"]["Create routine"];unset($Zg["Procedures"]["Create routine"]);$Zg["Columns"]=array();foreach(array("Select","Insert","Update","References")as$X)$Zg["Columns"][$X]=$Zg["Tables"][$X];unset($Zg["Server Admin"]["Usage"]);foreach($Zg["Tables"]as$x=>$X)unset($Zg["Databases"][$x]);$Af=array();if($_POST){foreach($_POST["objects"]as$x=>$X)$Af[$X]=(array)$Af[$X]+idx($_POST["grants"],$x,array());}$vd=array();$Qf="";if(isset($_GET["host"])&&($I=connection()->query("SHOW GRANTS FOR ".q($fa)."@".q($_GET["host"])))){while($K=$I->fetch_row()){if(preg_match('~GRANT (.*) ON (.*) TO ~',$K[0],$A)&&preg_match_all('~ *([^(,]*[^ ,(])( *\([^)]+\))?~',$A[1],$Ze,PREG_SET_ORDER)){foreach($Ze
  1674. as$X){if($X[1]!="USAGE")$vd["$A[2]$X[2]"][$X[1]]=true;if(preg_match('~ WITH GRANT OPTION~',$K[0]))$vd["$A[2]$X[2]"]["GRANT OPTION"]=true;}}if(preg_match("~ IDENTIFIED BY PASSWORD '([^']+)~",$K[0],$A))$Qf=$A[1];}}if($_POST&&!$l){$Rf=(isset($_GET["host"])?q($fa)."@".q($_GET["host"]):"''");if($_POST["drop"])query_redirect("DROP USER $Rf",ME."privileges=",'User has been dropped.');else{$Cf=q($_POST["user"])."@".q($_POST["host"]);$Eg=$_POST["pass"];if($Eg!=''&&!$_POST["hashed"]&&!min_version(8)){$Eg=get_val("SELECT PASSWORD(".q($Eg).")");$l=!$Eg;}$Eb=false;if(!$l){if($Rf!=$Cf){$Eb=queries((min_version(5)?"CREATE USER":"GRANT USAGE ON *.* TO")." $Cf IDENTIFIED BY ".(min_version(8)?"":"PASSWORD ").q($Eg));$l=!$Eb;}elseif($Eg!=$Qf)queries("SET PASSWORD FOR $Cf = ".q($Eg));}if(!$l){$xh=array();foreach($Af
  1675. as$Kf=>$ud){if(isset($_GET["grant"]))$ud=array_filter($ud);$ud=array_keys($ud);if(isset($_GET["grant"]))$xh=array_diff(array_keys(array_filter($Af[$Kf],'strlen')),$ud);elseif($Rf==$Cf){$Of=array_keys((array)$vd[$Kf]);$xh=array_diff($Of,$ud);$ud=array_diff($ud,$Of);unset($vd[$Kf]);}if(preg_match('~^(.+)\s*(\(.*\))?$~U',$Kf,$A)&&(!grant("REVOKE",$xh,$A[2]," ON $A[1] FROM $Cf")||!grant("GRANT",$ud,$A[2]," ON $A[1] TO $Cf"))){$l=true;break;}}}if(!$l&&isset($_GET["host"])){if($Rf!=$Cf)queries("DROP USER $Rf");elseif(!isset($_GET["grant"])){foreach($vd
  1676. as$Kf=>$xh){if(preg_match('~^(.+)(\(.*\))?$~U',$Kf,$A))grant("REVOKE",array_keys($xh),$A[2]," ON $A[1] FROM $Cf");}}}queries_redirect(ME."privileges=",(isset($_GET["host"])?'User has been altered.':'User has been created.'),!$l);if($Eb)connection()->query("DROP USER $Cf");}}page_header((isset($_GET["host"])?'Username'.": ".h("$fa@$_GET[host]"):'Create user'),$l,array("privileges"=>array('','Privileges')));$K=$_POST;if($K)$vd=$Af;else{$K=$_GET+array("host"=>get_val("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)"));$K["pass"]=$Qf;if($Qf!="")$K["hashed"]=true;$vd[(DB==""||$vd?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo'<form action="" method="post">
  1677. <table class="layout">
  1678. <tr><th>Server<td><input name="host" data-maxlength="60" value="',h($K["host"]),'" autocapitalize="off">
  1679. <tr><th>Username<td><input name="user" data-maxlength="80" value="',h($K["user"]),'" autocapitalize="off">
  1680. <tr><th>Password<td><input name="pass" id="pass" value="',h($K["pass"]),'" autocomplete="new-password">
  1681. ',($K["hashed"]?"":script("typePassword(qs('#pass'));")),(min_version(8)?"":checkbox("hashed",1,$K["hashed"],'Hashed',"typePassword(this.form['pass'], this.checked);")),'</table>
  1682.  
  1683. ',"<table class='odds'>\n","<thead><tr><th colspan='2'>".'Privileges'.doc_link(array('sql'=>"grant.html#priv_level"));$s=0;foreach($vd
  1684. as$Kf=>$ud){echo'<th>'.($Kf!="*.*"?"<input name='objects[$s]' value='".h($Kf)."' size='10' autocapitalize='off'>":input_hidden("objects[$s]","*.*")."*.*");$s++;}echo"</thead>\n";foreach(array(""=>"","Server Admin"=>'Server',"Databases"=>'Database',"Tables"=>'Table',"Columns"=>'Column',"Procedures"=>'Routine',)as$_b=>$Yb){foreach((array)$Zg[$_b]as$Yg=>$ob){echo"<tr><td".($Yb?">$Yb<td":" colspan='2'").' lang="en" title="'.h($ob).'">'.h($Yg);$s=0;foreach($vd
  1685. as$Kf=>$ud){$B="'grants[$s][".h(strtoupper($Yg))."]'";$Y=$ud[strtoupper($Yg)];if($_b=="Server Admin"&&$Kf!=(isset($vd["*.*"])?"*.*":".*"))echo"<td>";elseif(isset($_GET["grant"]))echo"<td><select name=$B><option><option value='1'".($Y?" selected":"").">".'Grant'."<option value='0'".($Y=="0"?" selected":"").">".'Revoke'."</select>";else
  1686. echo"<td align='center'><label class='block'>","<input type='checkbox' name=$B value='1'".($Y?" checked":"").($Yg=="All privileges"?" id='grants-$s-all'>":">".($Yg=="Grant option"?"":script("qsl('input').onclick = function () { if (this.checked) formUncheck('grants-$s-all'); };"))),"</label>";$s++;}}}echo"</table>\n",'<p>
  1687. <input type="submit" value="Save">
  1688. ';if(isset($_GET["host"]))echo'<input type="submit" name="drop" value="Drop">',confirm(sprintf('Drop %s?',"$fa@$_GET[host]"));echo
  1689. input_token(),'</form>
  1690. ';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$l){$Ee=0;foreach((array)$_POST["kill"]as$X){if(adminer()->killProcess($X))$Ee++;}queries_redirect(ME."processlist=",lang_format(array('%d process has been killed.','%d processes have been killed.'),$Ee),$Ee||!$_POST["kill"]);}}page_header('Process list',$l);echo'
  1691. <form action="" method="post">
  1692. <div class="scrollable">
  1693. <table class="nowrap checkable odds">
  1694. ',script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");$s=-1;foreach(adminer()->processList()as$s=>$K){if(!$s){echo"<thead><tr lang='en'>".(support("kill")?"<th>":"");foreach($K
  1695. as$x=>$X)echo"<th>$x".doc_link(array('sql'=>"show-processlist.html#processlist_".strtolower($x),'pgsql'=>"monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",'oracle'=>"REFRN30223",));echo"</thead>\n";}echo"<tr>".(support("kill")?"<td>".checkbox("kill[]",$K[JUSH=="sql"?"Id":"pid"],0):"");foreach($K
  1696. as$x=>$X)echo"<td>".((JUSH=="sql"&&$x=="Info"&&preg_match("~Query|Killed~",$K["Command"])&&$X!="")||(JUSH=="pgsql"&&$x=="current_query"&&$X!="<IDLE>")||(JUSH=="oracle"&&$x=="sql_text"&&$X!="")?"<code class='jush-".JUSH."'>".shorten_utf8($X,100,"</code>").' <a href="'.h(ME.($K["db"]!=""?"db=".urlencode($K["db"])."&":"")."sql=".urlencode($X)).'">'.'Clone'.'</a>':h($X));echo"\n";}echo'</table>
  1697. </div>
  1698. <p>
  1699. ';if(support("kill"))echo($s+1)."/".sprintf('%d in total',max_connections()),"<p><input type='submit' value='".'Kill'."'>\n";echo
  1700. input_token(),'</form>
  1701. ',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$S=table_status1($a);$w=indexes($a);$n=fields($a);$ld=column_foreign_keys($a);$Mf=$S["Oid"];$na=get_settings("adminer_import");$yh=array();$e=array();$Lh=array();$eg=array();$Oi="";foreach($n
  1702. as$x=>$m){$B=adminer()->fieldName($m);$zf=html_entity_decode(strip_tags($B),ENT_QUOTES);if(isset($m["privileges"]["select"])&&$B!=""){$e[$x]=$zf;if(is_shortable($m))$Oi=adminer()->selectLengthProcess();}if(isset($m["privileges"]["where"])&&$B!="")$Lh[$x]=$zf;if(isset($m["privileges"]["order"])&&$B!="")$eg[$x]=$zf;$yh+=$m["privileges"];}list($M,$wd)=adminer()->selectColumnsProcess($e,$w);$M=array_unique($M);$wd=array_unique($wd);$ue=count($wd)<count($M);$Z=adminer()->selectSearchProcess($n,$w);$dg=adminer()->selectOrderProcess($n,$w);$z=adminer()->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$sj=>$K){$wa=convert_field($n[key($K)]);$M=array($wa?:idf_escape(key($K)));$Z[]=where_check($sj,$n);$J=driver()->select($a,$M,$Z,$M);if($J)echo
  1703. first($J->fetch_row());}exit;}$G=$uj=array();foreach($w
  1704. as$v){if($v["type"]=="PRIMARY"){$G=array_flip($v["columns"]);$uj=($M?$G:array());foreach($uj
  1705. as$x=>$X){if(in_array(idf_escape($x),$M))unset($uj[$x]);}break;}}if($Mf&&!$G){$G=$uj=array($Mf=>0);$w[]=array("type"=>"PRIMARY","columns"=>array($Mf));}if($_POST&&!$l){$Tj=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$ab=array();foreach($_POST["check"]as$Wa)$ab[]=where_check($Wa,$n);$Tj[]="((".implode(") OR (",$ab)."))";}$Tj=($Tj?"\nWHERE ".implode(" AND ",$Tj):"");if($_POST["export"]){save_settings(array("output"=>$_POST["output"],"format"=>$_POST["format"]),"adminer_import");dump_headers($a);adminer()->dumpTable($a,"");$pd=($M?implode(", ",$M):"*").convert_fields($e,$n,$M)."\nFROM ".table($a);$yd=($wd&&$ue?"\nGROUP BY ".implode(", ",$wd):"").($dg?"\nORDER BY ".implode(", ",$dg):"");$H="SELECT $pd$Tj$yd";if(is_array($_POST["check"])&&!$G){$qj=array();foreach($_POST["check"]as$X)$qj[]="(SELECT".limit($pd,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$n).$yd,1).")";$H=implode(" UNION ALL ",$qj);}adminer()->dumpData($a,"table",$H);adminer()->dumpFooter();exit;}if(!adminer()->selectEmailProcess($Z,$ld)){if($_POST["save"]||$_POST["delete"]){$I=true;$oa=0;$O=array();if(!$_POST["delete"]){foreach($_POST["fields"]as$B=>$X){$X=process_input($n[$B]);if($X!==null&&($_POST["clone"]||$X!==false))$O[idf_escape($B)]=($X!==false?$X:idf_escape($B));}}if($_POST["delete"]||$O){$H=($_POST["clone"]?"INTO ".table($a)." (".implode(", ",array_keys($O)).")\nSELECT ".implode(", ",$O)."\nFROM ".table($a):"");if($_POST["all"]||($G&&is_array($_POST["check"]))||$ue){$I=($_POST["delete"]?driver()->delete($a,$Tj):($_POST["clone"]?queries("INSERT $H$Tj".driver()->insertReturning($a)):driver()->update($a,$O,$Tj)));$oa=connection()->affected_rows;if(is_object($I))$oa+=$I->num_rows;}else{foreach((array)$_POST["check"]as$X){$Sj="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$n);$I=($_POST["delete"]?driver()->delete($a,$Sj,1):($_POST["clone"]?queries("INSERT".limit1($a,$H,$Sj)):driver()->update($a,$O,$Sj,1)));if(!$I)break;$oa+=connection()->affected_rows;}}}$lf=lang_format(array('%d item has been affected.','%d items have been affected.'),$oa);if($_POST["clone"]&&$I&&$oa==1){$Je=last_id($I);if($Je)$lf=sprintf('Item%s has been inserted.'," $Je");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$lf,$I);if(!$_POST["delete"]){$Qg=(array)$_POST["fields"];edit_form($a,array_intersect_key($n,$Qg),$Qg,!$_POST["clone"],$l);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$l='Ctrl+click on a value to modify it.';else{$I=true;$oa=0;foreach($_POST["val"]as$sj=>$K){$O=array();foreach($K
  1706. as$x=>$X){$x=bracket_escape($x,true);$O[idf_escape($x)]=(preg_match('~char|text~',$n[$x]["type"])||$X!=""?adminer()->processInput($n[$x],$X):"NULL");}$I=driver()->update($a,$O," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($sj,$n),($ue||$G?0:1)," ");if(!$I)break;$oa+=connection()->affected_rows;}queries_redirect(remove_from_uri(),lang_format(array('%d item has been affected.','%d items have been affected.'),$oa),$I);}}elseif(!is_string($Zc=get_file("csv_file",true)))$l=upload_error($Zc);elseif(!preg_match('~~u',$Zc))$l='File must be in UTF-8 encoding.';else{save_settings(array("output"=>$na["output"],"format"=>$_POST["separator"]),"adminer_import");$I=true;$kb=array_keys($n);preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~',$Zc,$Ze);$oa=count($Ze[0]);driver()->begin();$Rh=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$L=array();foreach($Ze[0]as$x=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$Rh]*)$Rh~",$X.$Rh,$af);if(!$x&&!array_diff($af[1],$kb)){$kb=$af[1];$oa--;}else{$O=array();foreach($af[1]as$s=>$hb)$O[idf_escape($kb[$s])]=($hb==""&&$n[$kb[$s]]["null"]?"NULL":q(preg_match('~^".*"$~s',$hb)?str_replace('""','"',substr($hb,1,-1)):$hb));$L[]=$O;}}$I=(!$L||driver()->insertUpdate($a,$L,$G));if($I)driver()->commit();queries_redirect(remove_from_uri("page"),lang_format(array('%d row has been imported.','%d rows have been imported.'),$oa),$I);driver()->rollback();}}}$_i=adminer()->tableName($S);if(is_ajax()){page_headers();ob_start();}else
  1707. page_header('Select'.": $_i",$l);$O=null;if(isset($yh["insert"])||!support("table")){$vg=array();foreach((array)$_GET["where"]as$X){if(isset($ld[$X["col"]])&&count($ld[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&(is_array($X["val"])||!preg_match('~[_%]~',$X["val"])))))$vg["set"."[".bracket_escape($X["col"])."]"]=$X["val"];}$O=$vg?"&".http_build_query($vg):"";}adminer()->selectLinks($S,$O);if(!$e&&support("table"))echo"<p class='error'>".'Unable to select the table'.($n?".":": ".error())."\n";else{echo"<form action='' id='form'>\n","<div style='display: none;'>";hidden_fields_get();echo(DB!=""?input_hidden("db",DB).(isset($_GET["ns"])?input_hidden("ns",$_GET["ns"]):""):""),input_hidden("select",$a),"</div>\n";adminer()->selectColumnsPrint($M,$e);adminer()->selectSearchPrint($Z,$Lh,$w);adminer()->selectOrderPrint($dg,$eg,$w);adminer()->selectLimitPrint($z);adminer()->selectLengthPrint($Oi);adminer()->selectActionPrint($w);echo"</form>\n";$D=$_GET["page"];$od=null;if($D=="last"){$od=get_val(count_rows($a,$Z,$ue,$wd));$D=floor(max(0,intval($od)-1)/$z);}$Mh=$M;$xd=$wd;if(!$Mh){$Mh[]="*";$Ab=convert_fields($e,$n,$M);if($Ab)$Mh[]=substr($Ab,2);}foreach($M
  1708. as$x=>$X){$m=$n[idf_unescape($X)];if($m&&($wa=convert_field($m)))$Mh[$x]="$wa AS $X";}if(!$ue&&$uj){foreach($uj
  1709. as$x=>$X){$Mh[]=idf_escape($x);if($xd)$xd[]=idf_escape($x);}}$I=driver()->select($a,$Mh,$Z,$xd,$dg,$z,$D,true);if(!$I)echo"<p class='error'>".error()."\n";else{if(JUSH=="mssql"&&$D)$I->seek($z*$D);$vc=array();echo"<form action='' method='post' enctype='multipart/form-data'>\n";$L=array();while($K=$I->fetch_assoc()){if($D&&JUSH=="oracle")unset($K["RNUM"]);$L[]=$K;}if($_GET["page"]!="last"&&$z&&$wd&&$ue&&JUSH=="sql")$od=get_val(" SELECT FOUND_ROWS()");if(!$L)echo"<p class='message'>".'No rows.'."\n";else{$Ea=adminer()->backwardKeys($a,$_i);echo"<div class='scrollable'>","<table id='table' class='nowrap checkable odds'>",script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"<thead><tr>".(!$wd&&$M?"":"<td><input type='checkbox' id='all-page' class='jsonly'>".script("qs('#all-page').onclick = partial(formCheck, /check/);","")." <a href='".h($_GET["modify"]?remove_from_uri("modify"):$_SERVER["REQUEST_URI"]."&modify=1")."'>".'Modify'."</a>");$_f=array();$rd=array();reset($M);$ih=1;foreach($L[0]as$x=>$X){if(!isset($uj[$x])){$X=idx($_GET["columns"],key($M))?:array();$m=$n[$M?($X?$X["col"]:current($M)):$x];$B=($m?adminer()->fieldName($m,$ih):($X["fun"]?"*":h($x)));if($B!=""){$ih++;$_f[$x]=$B;$d=idf_escape($x);$Nd=remove_from_uri('(order|desc)[^=]*|page').'&order%5B0%5D='.urlencode($x);$Yb="&desc%5B0%5D=1";echo"<th id='th[".h(bracket_escape($x))."]'>".script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});","");$qd=apply_sql_function($X["fun"],$B);$ei=isset($m["privileges"]["order"])||$qd;echo($ei?"<a href='".h($Nd.($dg[0]==$d||$dg[0]==$x?$Yb:''))."'>$qd</a>":$qd),"<span class='column hidden'>";if($ei)echo"<a href='".h($Nd.$Yb)."' title='".'descending'."' class='text'> ↓</a>";if(!$X["fun"]&&isset($m["privileges"]["where"]))echo'<a href="#fieldset-search" title="'.'Search'.'" class="text jsonly"> =</a>',script("qsl('a').onclick = partial(selectSearch, '".js_escape($x)."');");echo"</span>";}$rd[$x]=$X["fun"];next($M);}}$Oe=array();if($_GET["modify"]){foreach($L
  1710. as$K){foreach($K
  1711. as$x=>$X)$Oe[$x]=max($Oe[$x],min(40,strlen(utf8_decode($X))));}}echo($Ea?"<th>".'Relations':"")."</thead>\n";if(is_ajax())ob_end_clean();foreach(adminer()->rowDescriptions($L,$ld)as$yf=>$K){$rj=unique_array($L[$yf],$w);if(!$rj){$rj=array();reset($M);foreach($L[$yf]as$x=>$X){if(!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\(~',current($M)))$rj[$x]=$X;next($M);}}$sj="";foreach($rj
  1712. as$x=>$X){$m=(array)$n[$x];if((JUSH=="sql"||JUSH=="pgsql")&&preg_match('~char|text|enum|set~',$m["type"])&&strlen($X)>64){$x=(strpos($x,'(')?$x:idf_escape($x));$x="MD5(".(JUSH!='sql'||preg_match("~^utf8~",$m["collation"])?$x:"CONVERT($x USING ".charset(connection()).")").")";$X=md5($X);}$sj
  1713. .="&".($X!==null?urlencode("where[".bracket_escape($x)."]")."=".urlencode($X===false?"f":$X):"null%5B%5D=".urlencode($x));}echo"<tr>".(!$wd&&$M?"":"<td>".checkbox("check[]",substr($sj,1),in_array(substr($sj,1),(array)$_POST["check"])).($ue||information_schema(DB)?"":" <a href='".h(ME."edit=".urlencode($a).$sj)."' class='edit'>".'edit'."</a>"));reset($M);foreach($K
  1714. as$x=>$X){if(isset($_f[$x])){$d=current($M);$m=(array)$n[$x];$X=driver()->value($X,$m);if($X!=""&&(!isset($vc[$x])||$vc[$x]!=""))$vc[$x]=(is_mail($X)?$_f[$x]:"");$_="";if(is_blob($m)&&$X!="")$_=ME.'download='.urlencode($a).'&field='.urlencode($x).$sj;if(!$_&&$X!==null){foreach((array)$ld[$x]as$p){if(count($ld[$x])==1||end($p["source"])==$x){$_="";foreach($p["source"]as$s=>$fi)$_
  1715. .=where_link($s,$p["target"][$s],$L[$yf][$fi]);$_=($p["db"]!=""?preg_replace('~([?&]db=)[^&]+~','\1'.urlencode($p["db"]),ME):ME).'select='.urlencode($p["table"]).$_;if($p["ns"])$_=preg_replace('~([?&]ns=)[^&]+~','\1'.urlencode($p["ns"]),$_);if(count($p["source"])==1)break;}}}if($d=="COUNT(*)"){$_=ME."select=".urlencode($a);$s=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$rj))$_
  1716. .=where_link($s++,$W["col"],$W["val"],$W["op"]);}foreach($rj
  1717. as$Ae=>$W)$_
  1718. .=where_link($s++,$Ae,$W);}$Od=select_value($X,$_,$m,$Oi);$t=h("val[$sj][".bracket_escape($x)."]");$Rg=idx(idx($_POST["val"],$sj),bracket_escape($x));$qc=!is_array($K[$x])&&is_utf8($Od)&&$L[$yf][$x]==$K[$x]&&!$rd[$x]&&!$m["generated"];$U=(preg_match('~^(AVG|MIN|MAX)\((.+)\)~',$d,$A)?$n[idf_unescape($A[2])]["type"]:$m["type"]);$Mi=preg_match('~text|json|lob~',$U);$ve=preg_match(number_type(),$U)||preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\(~',$d);echo"<td id='$t'".($ve&&($X===null||is_numeric(strip_tags($Od))||$U=="money")?" class='number'":"");if(($_GET["modify"]&&$qc&&$X!==null)||$Rg!==null){$Ad=h($Rg!==null?$Rg:$K[$x]);echo">".($Mi?"<textarea name='$t' cols='30' rows='".(substr_count($K[$x],"\n")+1)."'>$Ad</textarea>":"<input name='$t' value='$Ad' size='$Oe[$x]'>");}else{$Ue=strpos($Od,"<i>…</i>");echo" data-text='".($Ue?2:($Mi?1:0))."'".($qc?"":" data-warning='".h('Use edit link to modify this value.')."'").">$Od";}}next($M);}if($Ea)echo"<td>";adminer()->backwardKeysPrint($Ea,$L[$yf]);echo"</tr>\n";}if(is_ajax())exit;echo"</table>\n","</div>\n";}if(!is_ajax()){if($L||$D){$Ic=true;if($_GET["page"]!="last"){if(!$z||(count($L)<$z&&($L||!$D)))$od=($D?$D*$z:0)+count($L);elseif(JUSH!="sql"||!$ue){$od=($ue?false:found_rows($S,$Z));if(intval($od)<max(1e4,2*($D+1)*$z))$od=first(slow_query(count_rows($a,$Z,$ue,$wd)));else$Ic=false;}}$tg=($z&&($od===false||$od>$z||$D));if($tg)echo(($od===false?count($L)+1:$od-$D*$z)>$z?'<p><a href="'.h(remove_from_uri("page")."&page=".($D+1)).'" class="loadmore">'.'Load more data'.'</a>'.script("qsl('a').onclick = partial(selectLoadMore, $z, '".'Loading'."…');",""):''),"\n";echo"<div class='footer'><div>\n";if($tg){$ef=($od===false?$D+(count($L)>=$z?2:1):floor(($od-1)/$z));echo"<fieldset>";if(JUSH!="simpledb"){echo"<legend><a href='".h(remove_from_uri("page"))."'>".'Page'."</a></legend>",script("qsl('a').onclick = function () { pageClick(this.href, +prompt('".'Page'."', '".($D+1)."')); return false; };"),pagination(0,$D).($D>5?" …":"");for($s=max(1,$D-4);$s<min($ef,$D+5);$s++)echo
  1719. pagination($s,$D);if($ef>0)echo($D+5<$ef?" …":""),($Ic&&$od!==false?pagination($ef,$D):" <a href='".h(remove_from_uri("page")."&page=last")."' title='~$ef'>".'last'."</a>");}else
  1720. echo"<legend>".'Page'."</legend>",pagination(0,$D).($D>1?" …":""),($D?pagination($D,$D):""),($ef>$D?pagination($D+1,$D).($ef>$D+1?" …":""):"");echo"</fieldset>\n";}echo"<fieldset>","<legend>".'Whole result'."</legend>";$fc=($Ic?"":"~ ").$od;$Wf="const checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$fc' : checked); selectCount('selected2', this.checked || !checked ? '$fc' : checked);";echo
  1721. checkbox("all",1,0,($od!==false?($Ic?"":"~ ").lang_format(array('%d row','%d rows'),$od):""),$Wf)."\n","</fieldset>\n";if(adminer()->selectCommandPrint())echo'<fieldset',($_GET["modify"]?'':' class="jsonly"'),'><legend>Modify</legend><div>
  1722. <input type="submit" value="Save"',($_GET["modify"]?'':' title="'.'Ctrl+click on a value to modify it.'.'"'),'>
  1723. </div></fieldset>
  1724. <fieldset><legend>Selected <span id="selected"></span></legend><div>
  1725. <input type="submit" name="edit" value="Edit">
  1726. <input type="submit" name="clone" value="Clone">
  1727. <input type="submit" name="delete" value="Delete">',confirm(),'</div></fieldset>
  1728. ';$md=adminer()->dumpFormat();foreach((array)$_GET["columns"]as$d){if($d["fun"]){unset($md['sql']);break;}}if($md){print_fieldset("export",'Export'." <span id='selected2'></span>");$qg=adminer()->dumpOutput();echo($qg?html_select("output",$qg,$na["output"])." ":""),html_select("format",$md,$na["format"])," <input type='submit' name='export' value='".'Export'."'>\n","</div></fieldset>\n";}adminer()->selectEmailPrint(array_filter($vc,'strlen'),$e);echo"</div></div>\n";}if(adminer()->selectImportPrint())echo"<p>","<a href='#import'>".'Import'."</a>",script("qsl('a').onclick = partial(toggle, 'import');",""),"<span id='import'".($_POST["import"]?"":" class='hidden'").">: ",file_input("<input type='file' name='csv_file'> ".html_select("separator",array("csv"=>"CSV,","csv;"=>"CSV;","tsv"=>"TSV"),$na["format"])." <input type='submit' name='import' value='".'Import'."'>"),"</span>";echo
  1729. input_token(),"</form>\n",(!$wd&&$M?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$P=isset($_GET["status"]);page_header($P?'Status':'Variables');$Jj=($P?show_status():show_variables());if(!$Jj)echo"<p class='message'>".'No rows.'."\n";else{echo"<table>\n";foreach($Jj
  1730. as$K){echo"<tr>";$x=array_shift($K);echo"<th><code class='jush-".JUSH.($P?"status":"set")."'>".h($x)."</code>";foreach($K
  1731. as$X)echo"<td>".nl_br(h($X));}echo"</table>\n";}}elseif(isset($_GET["script"])){header("Content-Type: text/javascript; charset=utf-8");if($_GET["script"]=="db"){$wi=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$B=>$S){json_row("Comment-$B",h($S["Comment"]));if(!is_view($S)||preg_match('~materialized~i',$S["Engine"])){foreach(array("Engine","Collation")as$x)json_row("$x-$B",h($S[$x]));foreach($wi+array("Auto_increment"=>0,"Rows"=>0)as$x=>$X){if($S[$x]!=""){$X=format_number($S[$x]);if($X>=0)json_row("$x-$B",($x=="Rows"&&$X&&$S["Engine"]==(JUSH=="pgsql"?"table":"InnoDB")?"~ $X":$X));if(isset($wi[$x]))$wi[$x]+=($S["Engine"]!="InnoDB"||$x!="Data_free"?$S[$x]:0);}elseif(array_key_exists($x,$S))json_row("$x-$B","?");}}}foreach($wi
  1732. 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())as$j=>$X){json_row("tables-$j",$X);json_row("size-$j",db_size($j));}json_row("");}exit;}else{$Gi=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($Gi&&!$l&&!$_POST["search"]){$I=true;$lf="";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"]);$lf='Tables have been truncated.';}elseif($_POST["move"]){$I=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$lf='Tables have been moved.';}elseif($_POST["copy"]){$I=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$lf='Tables have been copied.';}elseif($_POST["drop"]){if($_POST["views"])$I=drop_views($_POST["views"]);if($I&&$_POST["tables"])$I=drop_tables($_POST["tables"]);$lf='Tables have been dropped.';}elseif(JUSH=="sqlite"&&$_POST["check"]){foreach((array)$_POST["tables"]as$R){foreach(get_rows("PRAGMA integrity_check(".q($R).")")as$K)$lf
  1733. .="<b>".h($R)."</b>: ".h($K["integrity_check"])."<br>";}}elseif(JUSH!="sql"){$I=(JUSH=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?"":" ANALYZE"),$_POST["tables"]));$lf='Tables have been optimized.';}elseif(!$_POST["tables"])$lf='No tables.';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())$lf
  1734. .="<b>".h($K["Table"])."</b>: ".h($K["Msg_text"])."<br>";}queries_redirect(substr(ME,0,-1),$lf,$I);}page_header(($_GET["ns"]==""?'Database'.": ".h(DB):'Schema'.": ".h($_GET["ns"])),$l,true);if(adminer()->homepage()){if($_GET["ns"]!==""){echo"<h3 id='tables-views'>".'Tables and views'."</h3>\n";$Fi=tables_list();if(!$Fi)echo"<p class='message'>".'No tables.'."\n";else{echo"<form action='' method='post'>\n";if(support("table")){echo"<fieldset><legend>".'Search data in tables'." <span id='selected2'></span></legend><div>",html_select("op",adminer()->operators(),idx($_POST,"op",JUSH=="elastic"?"should":"LIKE %%"))," <input type='search' name='query' value='".h($_POST["query"])."'>",script("qsl('input').onkeydown = partialArg(bodyKeydown, 'search');","")," <input type='submit' name='search' value='".'Search'."'>\n","</div></fieldset>\n";if($_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]=$_POST["op"];search_tables();}}echo"<div class='scrollable'>\n","<table class='nowrap checkable odds'>\n",script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),'<thead><tr class="wrap">','<td><input id="check-all" type="checkbox" class="jsonly">'.script("qs('#check-all').onclick = partial(formCheck, /^(tables|views)\[/);",""),'<th>'.'Table','<td>'.'Engine'.doc_link(array('sql'=>'storage-engines.html')),'<td>'.'Collation'.doc_link(array('sql'=>'charset-charsets.html','mariadb'=>'supported-character-sets-and-collations/')),'<td>'.'Data Length'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT','oracle'=>'REFRN20286')),'<td>'.'Index Length'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT')),'<td>'.'Data Free'.doc_link(array('sql'=>'show-table-status.html')),'<td>'.'Auto Increment'.doc_link(array('sql'=>'example-auto-increment.html','mariadb'=>'auto_increment/')),'<td>'.'Rows'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'catalog-pg-class.html#CATALOG-PG-CLASS','oracle'=>'REFRN20286')),(support("comment")?'<td>'.'Comment'.doc_link(array('sql'=>'show-table-status.html','pgsql'=>'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE')):''),"</thead>\n";$T=0;foreach($Fi
  1735. as$B=>$U){$Mj=($U!==null&&!preg_match('~table|sequence~i',$U));$t=h("Table-".$B);echo'<tr><td>'.checkbox(($Mj?"views[]":"tables[]"),$B,in_array("$B",$Gi,true),"","","",$t),'<th>'.(support("table")||support("indexes")?"<a href='".h(ME)."table=".urlencode($B)."' title='".'Show structure'."' id='$t'>".h($B).'</a>':h($B));if($Mj&&!preg_match('~materialized~i',$U)){$Si='View';echo'<td colspan="6">'.(support("view")?"<a href='".h(ME)."view=".urlencode($B)."' title='".'Alter view'."'>$Si</a>":$Si),'<td align="right"><a href="'.h(ME)."select=".urlencode($B).'" title="'.'Select data'.'">?</a>';}else{foreach(array("Engine"=>array(),"Collation"=>array(),"Data_length"=>array("create",'Alter table'),"Index_length"=>array("indexes",'Alter indexes'),"Data_free"=>array("edit",'New item'),"Auto_increment"=>array("auto_increment=1&create",'Alter table'),"Rows"=>array("select",'Select data'),)as$x=>$_){$t=" id='$x-".h($B)."'";echo($_?"<td align='right'>".(support("table")||$x=="Rows"||(support("indexes")&&$x!="Data_length")?"<a href='".h(ME."$_[0]=").urlencode($B)."'$t title='$_[1]'>?</a>":"<span$t>?</span>"):"<td id='$x-".h($B)."'>");}$T++;}echo(support("comment")?"<td id='Comment-".h($B)."'>":""),"\n";}echo"<tr><td><th>".sprintf('%d in total',count($Fi)),"<td>".h(JUSH=="sql"?get_val("SELECT @@default_storage_engine"):""),"<td>".h(db_collation(DB,collations()));foreach(array("Data_length","Index_length","Data_free")as$x)echo"<td align='right' id='sum-$x'>";echo"\n","</table>\n",script("ajaxSetHtml('".js_escape(ME)."script=db');"),"</div>\n";if(!information_schema(DB)){echo"<div class='footer'><div>\n";$Gj="<input type='submit' value='".'Vacuum'."'> ".on_help("'VACUUM'");$Zf="<input type='submit' name='optimize' value='".'Optimize'."'> ".on_help(JUSH=="sql"?"'OPTIMIZE TABLE'":"'VACUUM OPTIMIZE'");echo"<fieldset><legend>".'Selected'." <span id='selected'></span></legend><div>".(JUSH=="sqlite"?$Gj."<input type='submit' name='check' value='".'Check'."'> ".on_help("'PRAGMA integrity_check'"):(JUSH=="pgsql"?$Gj.$Zf:(JUSH=="sql"?"<input type='submit' value='".'Analyze'."'> ".on_help("'ANALYZE TABLE'").$Zf."<input type='submit' name='check' value='".'Check'."'> ".on_help("'CHECK TABLE'")."<input type='submit' name='repair' value='".'Repair'."'> ".on_help("'REPAIR TABLE'"):"")))."<input type='submit' name='truncate' value='".'Truncate'."'> ".on_help(JUSH=="sqlite"?"'DELETE'":"'TRUNCATE".(JUSH=="pgsql"?"'":" TABLE'")).confirm()."<input type='submit' name='drop' value='".'Drop'."'>".on_help("'DROP TABLE'").confirm()."\n";$i=(support("scheme")?adminer()->schemas():adminer()->databases());echo"</div></fieldset>\n";$Jh="";if(count($i)!=1&&JUSH!="sqlite"){echo"<fieldset><legend>".'Move to other database'." <span id='selected3'></span></legend><div>";$j=(isset($_POST["target"])?$_POST["target"]:(support("scheme")?$_GET["ns"]:DB));echo($i?html_select("target",$i,$j):'<input name="target" value="'.h($j).'" autocapitalize="off">'),"</label> <input type='submit' name='move' value='".'Move'."'>",(support("copy")?" <input type='submit' name='copy' value='".'Copy'."'> ".checkbox("overwrite",1,$_POST["overwrite"],'overwrite'):""),"</div></fieldset>\n";$Jh=" selectCount('selected3', formChecked(this, /^(tables|views)\[/));";}echo"<input type='hidden' name='all' value=''>",script("qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^(tables|views)\[/));".(support("table")?" selectCount('selected2', formChecked(this, /^tables\[/) || $T);":"")."$Jh }"),input_token(),"</div></div>\n";}echo"</form>\n",script("tableCheck();");}echo"<p class='links'><a href='".h(ME)."create='>".'Create table'."</a>\n",(support("view")?"<a href='".h(ME)."view='>".'Create view'."</a>\n":"");if(support("routine")){echo"<h3 id='routines'>".'Routines'."</h3>\n";$Bh=routines();if($Bh){echo"<table class='odds'>\n",'<thead><tr><th>'.'Name'.'<td>'.'Type'.'<td>'.'Return type'."<td></thead>\n";foreach($Bh
  1736. as$K){$B=($K["SPECIFIC_NAME"]==$K["ROUTINE_NAME"]?"":"&name=".urlencode($K["ROUTINE_NAME"]));echo'<tr>','<th><a href="'.h(ME.($K["ROUTINE_TYPE"]!="PROCEDURE"?'callf=':'call=').urlencode($K["SPECIFIC_NAME"]).$B).'">'.h($K["ROUTINE_NAME"]).'</a>','<td>'.h($K["ROUTINE_TYPE"]),'<td>'.h($K["DTD_IDENTIFIER"]),'<td><a href="'.h(ME.($K["ROUTINE_TYPE"]!="PROCEDURE"?'function=':'procedure=').urlencode($K["SPECIFIC_NAME"]).$B).'">'.'Alter'."</a>";}echo"</table>\n";}echo'<p class="links">'.(support("procedure")?'<a href="'.h(ME).'procedure=">'.'Create procedure'.'</a>':'').'<a href="'.h(ME).'function=">'.'Create function'."</a>\n";}if(support("sequence")){echo"<h3 id='sequences'>".'Sequences'."</h3>\n";$Uh=get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name");if($Uh){echo"<table class='odds'>\n","<thead><tr><th>".'Name'."</thead>\n";foreach($Uh
  1737. as$X)echo"<tr><th><a href='".h(ME)."sequence=".urlencode($X)."'>".h($X)."</a>\n";echo"</table>\n";}echo"<p class='links'><a href='".h(ME)."sequence='>".'Create sequence'."</a>\n";}if(support("type")){echo"<h3 id='user-types'>".'User types'."</h3>\n";$Ej=types();if($Ej){echo"<table class='odds'>\n","<thead><tr><th>".'Name'."</thead>\n";foreach($Ej
  1738. as$X)echo"<tr><th><a href='".h(ME)."type=".urlencode($X)."'>".h($X)."</a>\n";echo"</table>\n";}echo"<p class='links'><a href='".h(ME)."type='>".'Create type'."</a>\n";}if(support("event")){echo"<h3 id='events'>".'Events'."</h3>\n";$L=get_rows("SHOW EVENTS");if($L){echo"<table>\n","<thead><tr><th>".'Name'."<td>".'Schedule'."<td>".'Start'."<td>".'End'."<td></thead>\n";foreach($L
  1739. as$K)echo"<tr>","<th>".h($K["Name"]),"<td>".($K["Execute at"]?'At given time'."<td>".$K["Execute at"]:'Every'." ".$K["Interval value"]." ".$K["Interval field"]."<td>$K[Starts]"),"<td>$K[Ends]",'<td><a href="'.h(ME).'event='.urlencode($K["Name"]).'">'.'Alter'.'</a>';echo"</table>\n";$Gc=get_val("SELECT @@event_scheduler");if($Gc&&$Gc!="ON")echo"<p class='error'><code class='jush-sqlset'>event_scheduler</code>: ".h($Gc)."\n";}echo'<p class="links"><a href="'.h(ME).'event=">'.'Create event'."</a>\n";}}}}page_footer();

Reply to "Untitled"

Here you can reply to the paste above