[
  {
    "path": ".editorconfig",
    "content": "# https://editorconfig.org/\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.{php,css,js,xml}]\nindent_style = tab\n\n[*.json]\nindent_style = space\nindent_size = 4\n\n[*.md]\nindent_style = space\ntrim_trailing_whitespace = false\nmax_line_length = 120\n"
  },
  {
    "path": ".gitattributes",
    "content": "/.gitattributes export-ignore\n/.github export-ignore\n/.gitignore export-ignore\n/.gitmodules export-ignore\n/.travis.yml export-ignore\n/tests export-ignore\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: vrana\npatreon: jakubvrana\ncustom: [\"https://www.paypal.com/donate/?hosted_button_id=6PK5VNUCFT3FG\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Adminer version:** <!-- please use latest published or Git -->\n**Compiled:** single file / single language / source codes / custom compilation\n**Driver:** <!-- e.g. MySQLi -->\n**Database version:** <!-- e.g. 10.2.12-MariaDB -->\n**Plugins used:**\n\n<!--\nPlease provide reproducible steps including a SQL dump (with no personal information) if applicable.\nAlso please include a screenshot.\nReport issues with Adminer Docker image at https://github.com/TimWolla/docker-adminer._\n-->\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  pull_request:\n    branches: [ master ]\n  workflow_dispatch:\n\njobs:\n  build-test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: php-actions/composer@v6\n      - uses: php-actions/phpcs@v1\n        with:\n          path: .\n          standard: phpcs.xml\n      - uses: php-actions/phpstan@v3\n"
  },
  {
    "path": ".gitignore",
    "content": "/adminer/adminer.css\n/adminer/adminer-dark.css\n/editor/adminer.css\n/editor/adminer-dark.css\n/adminer*.php\n/editor*.php\n/tests/pdo-*.html\n/tests/screenshots/\n/tests/cropped/\n/vendor/\nadminer-plugins/\nadminer-plugins.php\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"jush\"]\n\tpath = externals/jush\n\turl = https://github.com/vrana/jush\n[submodule \"JsShrink\"]\n\tpath = externals/JsShrink\n\turl = https://github.com/vrana/JsShrink\n[submodule \"PhpShrink\"]\n\tpath = externals/PhpShrink\n\turl = https://github.com/vrana/PhpShrink\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## Adminer dev\n- Tables overview: allow sorting (bug #1231)\n- Select: Disable Ctrl+click inline edit without UPDATE privilege\n- Select: Display NULL in column title\n- Export: Remember unchecked objects (regression from 5.0.6)\n- Foreign key: Display new field in case of an error\n- PostgreSQL: Order NULL last\n- PostgreSQL: Display all SQL command warnings and only once\n- PostgreSQL: Export serial as serial, not nextval()\n- PostgreSQL: Export schema in nextval()\n- PostgreSQL: Export schema in REFERENCES\n- Editor: Display tinyint(1) as checkbox (bug #1246, regression from 5.4.2)\n- Croatian translation\n\n## Adminer 5.4.2 (released 2026-02-08)\n- Avoid denial-of-service via version check (GHSA-q4f2-39gr-45jh, regression from 4.6.2)\n- Pretty print JSON in edit\n- Support multiline generated values in alter table\n- Link //domain.tld values\n- Improve print of nested tables\n- Hide sort links on unsortable columns\n- Display uneditable fields in edit form\n- Shorten all but numeric and date types in select\n- Fix escaping spaces in cookie value (bug #1208)\n- Don't quote comma in TSV export (bug #1238)\n- MariaDB: Don't display checks with the same name from another table (bug #1135)\n- PostgreSQL: Offer foreign keys in create table\n- PostgreSQL: Add missing parentheses to CHECK export\n- PostgreSQL: Allow creating NOT DEFERRABLE foreign keys\n- PostgreSQL: Remove duplicate DEFERRABLE in foreign key export\n- PostgreSQL: Add schema to sequence and view export\n- PostgreSQL: Fix definition of complex generated columns\n- PostgreSQL: Mark unique partial indexes as unique (bug #1172)\n- PostgreSQL: Fix namespace in inheritance links (bug #1221)\n- non-PostgreSQL: Display NOT NULL checks (bug #1237)\n- ClickHouse: Fix offset (bug #1188)\n- ClickHouse: Fix list of tables (bug #1176)\n- Plugins: Methods showVariables() and showStatus() (bug #1157)\n- Plugins: Allow to be in any namespace\n- New plugin: IGDB driver\n\n## Adminer 5.4.1 (released 2025-09-26)\n- SQL command: Unlink NULL primary keys\n- Do not quote 0 in CSV export\n- Warn about exceeded upload_max_filesize in imports\n- Prolong queries saved from SQL command to URL (bug #1154)\n- MySQL: Fix displaying routine definition (bug #1156, regression from 5.4.0)\n\n## Adminer 5.4.0 (released 2025-09-08)\n- Allow specifying operator in search anywhere\n- Do not order descending in GROUP BY select\n- Allow exporting SQL in SQL command (bug #1092)\n- Add section links in database overview\n- Warn about exceeded max_file_uploads in import\n- Display @ after username without server in existing logins\n- Display data length and index length for materialized views\n- Link routines from syntax highlighting\n- Autofocus added field in alter table\n- Executed SQL commands: Add button for copy to clipboard\n- Load more: run syntax highlighter\n- Allow connecting to IPv6 (bug #1095)\n- MySQL: Fix saving empty enum (bug #1152)\n- MySQL 5.0-: Do not load partitioning info in alter table (bug #1099)\n- MariaDB: Parse COLLATE in routine definition (bug #1104)\n- PostgreSQL: Show structure of inherited tables\n- PostgreSQL: Display index expressions\n- PostgreSQL: Add SQL operator to select\n- PostgreSQL: Hide only partitions, not all inherited tables from menu\n- PostgreSQL: Allow comparing json columns (bug #1107)\n- PostgreSQL: Shorten values in hstore columns\n- PostgreSQL: Quote edit value with interval operator\n- PostgreSQL: Fix calling functions with name-less parameters\n- PostgreSQL: Fix calling functions returing table\n- PostgreSQL: Don't treat user types containing 'file' as blobs (bug #1118)\n- PostgreSQL: Export DROP and CREATE DATABASE (bug #1140)\n- PostgreSQL 11-: Avoid duplicate oid in table status (bug #1089, regression from 5.3.0)\n- Elasticsearch: Support dropping aliases\n- Plugins: Methods afterConnect(), processList() and killProcess()\n- New plugin: Display row numbers in select (bug #1106)\n- New plugin: Specify query timeout\n\n## Adminer 5.3.0 (released 2025-05-04)\n- Align numeric functions right\n- Autocomplete: Support table aliases\n- Fix type error in Create function (bug #1053, regression from 5.1.1)\n- Add border to column actions (bug #1072)\n- Align money values right (bug #1071)\n- MySQL: Avoid warning on selecting tables with fulltext indexes (bug #1036)\n- MySQL, PostgreSQL: Support index algorithms (bug #1030)\n- MySQL: Fix connecting to localhost:3306 (bug #1057, regression from 5.1.1)\n- PostgreSQL, CockroachDB: Creating partitioned tables (bug #1031)\n- PostgreSQL: Move partitioned tables from table list to parent table\n- PostgreSQL: Support partial indices (bug #1048)\n- PostgreSQL: Support calling functions returning table (bug #1040)\n- PostgreSQL: Add NOT ILIKE operator (bug #1066)\n- Editor: Fix bit and enum search (bug #1062)\n- Designs: adminer.css with 'prefers-color-scheme: dark' doesn't disable dark mode\n- Plugins: Method bodyClass() to add &lt;body class>\n- Plugins: Allow setting dark mode in css()\n- Hindi translation\n\n## Adminer 5.2.1 (released 2025-04-11)\n- Fix search anywhere (bug #1004, regression from 5.1.1)\n- Fix import without primary key (bug #1017, regression from 5.1.1)\n- PostgreSQL PDO: Fix bytea without primary key (bug #1021)\n- non-MySQL: Parse '--' without trailing space as comment in SQL command (bug #1025, regression from 5.2.0)\n\n## Adminer 5.2.0 (released 2025-04-08)\n- Autocomplete SQL commands\n- Do not edit NULL values by Modify (bug #967)\n- Fix foreign key actions (regression from 5.1.1)\n- MySQL: Display number of found rows in group queries (regression from 5.1.1)\n- PostgreSQL: Support COPY FROM stdin in SQL query (bug #942)\n- non-MySQL: Parse '--' without trailing space as comment in SQL command (bug SF-842)\n- MS SQL: Limit one INSERT in export to 1000 rows (bug #983)\n- CSS: Add logo\n- Editor: Move mass sending e-mails to a plugin\n- Plugins: Support translations by extending Adminer\\Plugin\n- New plugin: Configure options by end-users and store them to a cookie\n- New plugin: Configure menu table links\n- New plugin: Set up driver, server and database in Adminer Editor\n\n## Adminer 5.1.1 (released 2025-04-02)\n- Export: Fix tar (regression from 5.0.3)\n- Select: Allow ordering by COUNT(*) (bug #966, regression from 5.0.2)\n- Optimize retrieving columns for schema\n- Elasticsearch: Make it work with Elasticsearch 8\n- CSS: Hide menu on mobile\n- CSS: Invert icons in dark mode\n- Plugins: Allow changing CSP by more plugins\n- New plugin: Use Monaco Editor for syntax highlighting\n- New plugin: Use Prism for syntax highlighting\n\n## Adminer 5.1.0 (released 2025-03-24)\n- Display collation at table structure if different from table\n- Ctrl+click in select moves the cursor in modern browsers\n- URL parameter ?ext=pdo to force using PDO\n- PDO: Handle PHP warnings for internal queries\n- PostgreSQL: Display auto_increment of inserted rows\n- PostgreSQL: Display description of system variables\n- PostgreSQL: Avoid warning about crdb_version (bug #924, regression from 5.0.5)\n- PostgreSQL 11: Support PROCEDURE\n- SQLite PDO: Display results in SQL query\n- MS SQL: Fix collation issues when retrieving default values\n- MS SQL PDO: Display last insert ID\n- CSS: Sticky table headers (bug #918)\n- CSS: Allow more custom styles with dark mode (bug #925)\n- CSS: Increase maximum width of string edit (bug #930)\n- CSS: Increase space after SQL result (bug #937)\n- Plugins: Autoload plugins from adminer-plugins/\n- Plugins: Configure plugins with adminer-plugins.php\n- Plugins: Display loaded plugins in server overview\n- New plugin: AI prompt in SQL command generating the queries with Google Gemini\n- New plugin: Verify new versions from GitHub\n- New plugin: IMAP driver created for fun\n- New plugin: Display links to tables referencing current row\n- New plugin: Allow switching light and dark mode (bug #926)\n- New plugin: Confirm before unloading page with changed form\n- Uzbek translation\n\n## Adminer 5.0.6 (released 2025-03-17)\n- Align numbers right (bug #912)\n- Display comment in title of field\n- Remember export setting at SQL command\n- Shorten queries saved from SQL command to URL (bug #917)\n- SQL textarea: Open help on Ctrl+click\n- Security: Disallow writing temporary files to symlinks (bug SF-855)\n- MariaDB: Display MariaDB instead of MySQL\n- CSS: Dark mode syntax highlighting\n- CSS: Dark input fields in dark mode\n- Designs named adminer-dark.css use dark basic style\n- Plugins: Add method syntaxHighlighting()\n- New plugin: Use Codemirror 5 for syntax highlighting and SQL with typeahead\n\n## Adminer 5.0.5 (released 2025-03-13)\n- MySQL: Display converting function for binary, bit or geometry fields\n- MySQL: Display default values of binary columns\n- MySQL: Allow setting default values of json column\n- MariaDB: Don't display NULL as default value (regression from 5.0.0)\n- PostgreSQL PDO: Escape bytea values (bug SF-218)\n- CockroachDB: Display version\n- CockroachDB: Recognize unique_rowid() as auto_increment\n- MS SQL: Fix editing rows with datetime column in primary key\n- MongoDB: Move to plugin\n- CSS: Add dark theme\n\n## Adminer 5.0.4 (released 2025-03-11)\n- Compile: Fix shortening in private methods (regression from 5.0.3)\n\n## Adminer 5.0.3 (released 2025-03-11)\n- Fix gzip export (bug #896, regression from 5.0.0)\n- Fix importing multiple SQL files not terminated by semicolon\n- Use &lt;datalist> for altering collations\n- MySQL: Allow setting default values of text column\n- MySQL: Stop treating enum and set as numbers (bug SF-475)\n- MySQL, MariaDB: Fix default values with ' (bug #895)\n- MariaDB: Fix creating and altering generated columns (bug #897)\n- PostgreSQL: Fix \"where\" and \"order\" privileges (bug #902, regression from 5.0.2)\n- SQLite: Fix creating table in compiled version (bug #901, regression from 5.0.0)\n- Elasticsearch: Do not pass null values on insert (PR #892)\n- Elasticsearch: Fix displaying sparse rows (PR #893)\n- Plugins: Add method dumpFooter()\n\n## Adminer 5.0.2 (released 2025-03-10)\n- PostgreSQL: Fix setting NULL and original value on enum (bug SF-884)\n- CockroachDB: Add support via PostgreSQL driver\n- Elasticsearch: Add support for \"where\" and \"order\" field privilege\n\n## Adminer 5.0.1 (released 2025-03-07)\n- Fix bulk operations with tables (regression from 5.0.0)\n- Remove duplicate columns from select (bug SF-670)\n- MariaDB: Fix link to status variable doc (bug SF-658)\n- PostgreSQL: Support indexes on materialized views (PR #467)\n- Elasticsearch: Drop support for version &lt; 7\n\n## Adminer 5.0.0 (released 2025-03-07)\n- Speed up with disabled output buffering\n- Allow creating generated columns (bug SF-857)\n- Don't autofocus computed fields in insert form\n- Skip generated columns in multi-edit (bug SF-882)\n- MySQL: Display generated value in table structure\n- MySQL: Drop support for MySQL 4\n- PostgreSQL: Compute size of all databases (bug SF-881)\n- PostgreSQL: Do not alter indexes with expressions\n- PostgreSQL: Fix export of indexes with expressions (bug SF-768)\n- PostgreSQL: Display ENUM types\n- PostgreSQL: Export ENUM types (bug SF-587)\n- PostgreSQL: Display ? instead of -1 rows in table overview (bug SF-883)\n- PostgreSQL: Show accessible databases to non-owners (regression from 4.9.1)\n- PostgreSQL: Skip editing generated columns\n- PostgreSQL, MS SQL, Oracle: Hide table actions for information_schema\n- SQLite: Support CHECK constraint\n- SQLite: Support generated columns\n- SQLite: Add command Check tables\n- SQLite: Display all rows of variable values\n- SQLite: Remove support for SQLite version 2\n- MS SQL: Support export (bug SF-480)\n- MS SQL: Display foreign keys ON UPDATE and ON DELETE\n- MS SQL: Support computed columns\n- MS SQL: Fix CSV import (bug SF-859)\n- MS SQL: Fix altering foreign key\n- MS SQL PDO: Support offset\n- MS SQL: Remove support for MSSQL extension\n- MS SQL: Add support for PDO_SQLSRV extension\n- MS SQL: Link help from sys tables\n- MS SQL: Fix highlighting columns as primary keys\n- MongoDB: Remove support for deprecated extension mongo\n- Elasticsearch: Fix text search on boolean fields\n- Plugins: Adminer code is now in a namespace\n\n## Adminer 4.17.1 (released 2025-02-25)\n- MySQL: Fix typo in the date type (regression from 4.17.0)\n\n## Adminer 4.17.0 (released 2025-02-24)\n- Hide index column options by default\n- Offer original values in multi-row editing (regression from 4.16.0)\n- Print SQL errors as comments in export (regression from 3.2.0)\n- MySQL, PostgreSQL, MS SQL: Support CHECK constraint\n- MySQL: Show comments at routine call (bug SF-874)\n- MySQL: Don't offer empty enum value in edit\n- MySQL 9+: Support vector type\n- PostgreSQL: Link user defined types\n- PostgreSQL: Constraint enum values in editing (bug SF-270)\n- PostgreSQL: Export functions\n- PostgreSQL 8+: Fix exporting table constraints\n- SQLite: Show all supported pragmas in Variables\n- MS SQL: Allow altering table in non-default schema (bug SF-405)\n- MS SQL: Fix default values (bug SF-732, bug SF-733)\n- MS SQL: Fix length of nvarchar columns\n- Editor PDO: Select value of foreign key in edit (bug SF-847)\n- Mobile devices: Use device width\n\n## Adminer 4.16.0 (released 2025-02-20)\n- MySQL: Fix saving bit(64) values (bug SF-839)\n- PostgreSQL: Preserve whitespace in EXPLAIN (bug SF-827)\n- PostgreSQL: Support SSL\n- PostgreSQL: Support altering auto_increment (bug SF-761)\n- SQLite: Fix altering forign keys (bug SF-841)\n- SQLite: Fix expressions in default values (bug SF-860)\n- MS SQL: Foreign keys in non-default schema (bug SF-833)\n- Oracle: Include tables granted by other user\n- Elasticsearch: Move to plugin\n- MongoDB: Execute commands against the selected DB\n\n## Adminer 4.15.0\n- Escape unknown field in select\n- HTTP drivers: Don't allow path in server name\n- HTTP drivers: Hide connection error message\n- SimpleDB: Disable XML entity loader\n- Latvian translation\n\n## Adminer 4.14.0\n- Use autofocus HTML attribute\n- PostgreSQL: Fix initial value of exported autoincrement\n- PostgreSQL: Fix renaming a database\n\n## Adminer 4.12.0\n- Fix SQL query code direction if RTL language is used\n- MariaDB: Add support for UUID data type\n- MS SQL, MongoDB: Connect to localhost with default port if server is not specified\n- MongoDB: Fix parsing WHERE condition from SQL query\n\n## Adminer 4.11.0\n- MySQL: Fix highlighting current table in menu on macOS\n- MariaDB: Fix several links to documentation pages\n- MS SQL: Prefix Unicode strings with 'N' so they are treated correctly\n\n## Adminer 4.10.0\n- Print username next to the logout button\n- Do not display empty action links in main menu\n\n## Adminer 4.9.4\n- Unify displaying of 'New item' action based on privileges\n- Firefox: Fix opening a database to the new browser's tab with Ctrl+click\n- Editor: Fix array conversion to string (issue adminerneo#3).\n- Editor: Fix building links with array parameters\n\n## Adminer 4.9.3\n- MySQL, PostgreSQL: Fix queries splitting and string constants\n- MySQL: Fix where clause for JSON column\n- MySQL: Do not include unchanged PARTITION BY definition into ALTER TABLE query\n- MariaDB: Support current_timestamp()\n- PostgreSQL: Fix editing record that contains a field with GENERATED ALWAYS default value\n\n## Adminer 4.9.2\n- PostgreSQL: Fix search fields configuration (regression from 4.9.0)\n- PostgreSQL: Fix exporting CREATE TABLE query with GENERATED default values\n- PostgreSQL: Fix exporting CREATE TABLE with sequence default value\n- PostgreSQL: Fix search condition for network address types, add macaddr8 type\n\n## Adminer 4.9.1\n- Support PHP 8.3\n- PostgreSQL: Show only accessible databases\n\n## Adminer 4.9.0\n- Validate connection to server in HTTP based drivers\n- Elasticsearch 5: Make unusable driver usable again, move it to plugins\n- Add new Elasticsearch 7 driver\n- MySQL: Skip dump of generated columns\n\n## Adminer 4.8.2\n- Support multi-line table comments\n- MySQL: Use ST_SRID() instead of SRID() for MySQL 8 (PR #418)\n- PostgreSQL: Don't reset table comments (regression from 4.2.0)\n- PostgreSQL PDO: Allow editing rows identified by boolean column (PR #380)\n\n## Adminer 4.8.1 (released 2021-05-14)\n- Internet Explorer or PDO in Adminer 4.7.8-4.8.0: Fix XSS in doc_link (bug SF-797)\n- Fix more PHP 8 warnings (bug SF-781)\n- Avoid PHP warnings with PDO drivers (bug SF-786, regression from 4.7.8)\n- MySQL: Allow moving views to other DB and renaming DB with views (bug SF-783)\n- MariaDB: Do not treat sequences as views (PR #416)\n- PostgreSQL: Support UPDATE OF triggers (bug SF-789)\n- PostgreSQL: Support triggers with more events (OR)\n- PostgreSQL: Fix parsing of foreign keys with non-ASCII column names\n- PostgreSQL &lt; 10 PDO: Avoid displaying GENERATED ALWAYS BY IDENTITY everywhere (bug SF-785, regression from 4.7.9)\n- SQLite: Fix displayed types (bug SF-784, regression from 4.8.0)\n\n## Adminer 4.8.0 (released 2021-02-10)\n- Support function default values in insert (bug SF-713)\n- Allow SQL pseudo-function in insert\n- Skip date columns for non-date values in search anywhere\n- Add DB version to comment in export\n- Support PHP 8 in create table (regression from 4.7.9)\n- MySQL 8: Fix EXPLAIN in SQL command\n- PostgreSQL: Create PRIMARY KEY for auto increment columns\n- PostgreSQL: Avoid exporting empty sequence last value (bug SF-768)\n- PostgreSQL: Do not show triggers from other schemas (PR #412)\n- PostgreSQL: Fix multi-parameter functions in default values (bug SF-736)\n- PostgreSQL: Fix displaying NULL bytea fields\n- PostgreSQL PDO: Do not select NULL function for false values in edit\n- Oracle: Alter indexes\n- Oracle: Count tables\n- Oracle: Import from CSV\n- Oracle: Fix column size with string type\n- MongoDB: Handle errors\n- SimpleDB, Firebird, ClickHouse: Move to plugin\n\n## Adminer 4.7.9 (released 2021-02-07)\n- Fix XSS in browsers which don't encode URL parameters (bug SF-775, regression from 4.7.0)\n- Elasticsearch, ClickHouse: Do not print response if HTTP code is not 200\n- Don't syntax highlight during IME composition (bug SF-747)\n- Quote values with leading and trailing zeroes in CSV export (bug SF-777)\n- Link URLs in SQL command (PR #411)\n- Fix displayed foreign key columns from other DB (bug SF-766)\n- Re-enable PHP warnings (regression from 4.7.8)\n- MySQL: Do not export names in quotes with sql_mode='ANSI_QUOTES' (bug SF-749)\n- MySQL: Avoid error in PHP 8 when connecting to socket (PR #409)\n- MySQL: Don't quote default value of text fields (bug SF-779)\n- PostgreSQL: Export all FKs after all CREATE TABLE (PR #351)\n- PostgreSQL: Fix dollar-quoted syntax highlighting (bug SF-738)\n- PostgreSQL: Do not show view definition from other schema (PR #392)\n- PostgreSQL: Use bigserial for bigint auto increment (bug SF-765, regression from 3.0.0)\n- PostgreSQL PDO: Support PgBouncer, unsupport PostgreSQL &lt; 9.1 (bug SF-771)\n- PostgreSQL 10: Support GENERATED ALWAYS BY IDENTITY (PR #386)\n- PostgreSQL 10: Support partitioned tables (PR #396)\n- PostgreSQL 11: Create PRIMARY KEY for auto increment columns\n- SQLite: Set busy_timeout to 500\n- MS SQL: Don't truncate comments to 30 chars (PR #376)\n- Elasticsearch 6: Fix displaying type mapping (PR #402)\n- MongoDB: Fix password-less check in the mongo extension (PR #405)\n- Editor: Cast to string when searching (bug SF-325)\n- Editor: Avoid trailing dot in export filename\n\n## Adminer 4.7.8 (released 2020-12-06)\n- Support PHP 8\n- Disallow connecting to privileged ports (bug SF-769)\n\n## Adminer 4.7.7 (released 2020-05-11)\n- Fix open redirect if Adminer is accessible at //adminer.php%2F@\n\n## Adminer 4.7.6 (released 2020-01-31)\n- Speed up alter table form (regression from 4.4.0)\n- Fix clicking on non-input fields in alter table (regression from 4.6.2)\n- Display time of procedure execution\n- Disallow connecting to ports > 65535 (bug SF-730)\n- MySQL: Always set foreign_key_checks in export\n- PostgreSQL: Support exporting views\n- Editor: Fix focusing foreign key search in select\n\n## Adminer 4.7.5 (released 2019-11-13)\n- Add id=\"\" to cells with failed inline edit (bug SF-708)\n- PostgreSQL: Fix getting default value in PostgreSQL 12 (bug SF-719)\n- PostgreSQL, Oracle: Set schema for EXPLAIN queries in SQL command (bug SF-706)\n- ClickHouse: SQL command\n- Swedish translation\n\n## Adminer 4.7.4 (released 2019-10-22)\n- Fix XSS if Adminer is accessible at URL /data:\n\n## Adminer 4.7.3 (released 2019-08-27)\n- Allow editing foreign keys pointing to tables in other database/schema (bug SF-694)\n- Fix blocking of concurrent instances in PHP >7.2 (bug SF-703)\n- MySQL: Speed up displaying tables in large databases (bug SF-700, regression from 4.7.2)\n- MySQL: Allow editing rows identified by negative floats (bug SF-695)\n- MySQL: Skip editing generated columns\n- SQLite: Quote strings stored in integer columns in export (bug SF-696)\n- SQLite: Handle error in altering table (bug SF-697)\n- SQLite: Allow setting auto increment for empty tables\n- SQLite: Preserve auto increment when recreating table\n- MS SQL: Support foreign keys to other DB\n- MongoDB: Allow setting authSource from environment variable\n\n## Adminer 4.7.2 (released 2019-07-18)\n- Do not attempt logging in without password (bug SF-676)\n- Stretch footer over the whole table width (bug SF-624)\n- Allow overwriting tables when copying them\n- Fix displaying SQL command after Save and continue edit\n- Cache busting for adminer.css\n- MySQL: Fix displaying multi-columns foreign keys (bug SF-675, regression from 4.7.0)\n- MySQL: Fix creating users and changing password in MySQL 8 (bug SF-663)\n- MySQL: Pass SRID to GeomFromText\n- PostgreSQL: Fix setting column comments on new table\n- PostgreSQL: Display definitions of materialized views (bug SF-682)\n- PostgreSQL: Fix table status in PostgreSQL 12 (bug SF-683)\n- MS SQL: Support comments\n- Elasticsearch: Fix setting number of rows\n\n## Adminer 4.7.1 (released 2019-01-24)\n- Display the tables scrollbar (bug SF-647)\n- Remember visible columns in Create Table form (bug SF-493)\n- Add autocomplete attributes to login form\n- PHP &lt;5.4 compatibility even with ClickHouse enabled (regression from 4.7.0)\n- SQLite: Hide server field in login form\n- Editor: Allow disabling boolean fields in PostgreSQL (bug SF-640)\n\n## Adminer 4.7.0 (released 2018-11-24)\n- Simplify storing executed SQL queries to bookmarks\n- Warn when using password with leading or trailing spaces\n- Hide import from server if importServerPath() returns an empty string\n- Fix inline editing of empty cells (regression from 4.6.3)\n- Allow adding more than two indexes and forign key columns at a time (regression from 4.4.0)\n- Avoid overwriting existing tables when copying tables (bug SF-642)\n- Fix function change with set data type\n- Increase username maxlength to 80 (bug SF-623)\n- Make maxlength in all fields a soft limit\n- Make tables horizontally scrollable\n- MySQL: Support foreign keys created with ANSI quotes (bug SF-620)\n- MySQL: Recognize ON UPDATE current_timestamp() (bug SF-632, bug SF-638)\n- MySQL: Descending indexes in MySQL 8 (bug SF-643)\n- PostgreSQL: Quote array values in export (bug SF-621)\n- PostgreSQL: Export DESC indexes (bug SF-639)\n- PostgreSQL: Support GENERATED BY DEFAULT AS IDENTITY in PostgreSQL 10\n- MS SQL: Pass database when connecting\n- ClickHouse: Connect, databases list, tables list, select, SQL command\n- Georgian translation\n\n## Adminer 4.6.3 (released 2018-06-28)\n- Disallow using password-less databases\n- Copy triggers when copying table\n- Stop session before connecting\n- Simplify running slow queries\n- Decrease timeout for running slow queries from 5 seconds to 2 seconds\n- Fix displaying info about non-alphabetical objects (bug SF-599)\n- Use secure cookies on HTTP if session.cookie_secure is set\n- PDO: Support binary fields download\n- MySQL: Disallow LOAD DATA LOCAL INFILE\n- MySQL: Use CONVERT() only when searching for non-ASCII (bug SF-603)\n- MySQL: Order database names in MySQL 8 (bug SF-613)\n- PostgreSQL: Fix editing data in views (bug SF-605, regression from 4.6.0)\n- PostgreSQL: Do not cast date/time/number/uuid searches to text (bug SF-608)\n- PostgreSQL: Export false as 0 in PDO (bug SF-619)\n- MS SQL: Support port with sqlsrv\n- Editor: Do not check boolean checkboxes with false in PostgreSQL (bug SF-607)\n\n## Adminer 4.6.2 (released 2018-02-20)\n- Semi-transparent border on table actions\n- Shorten JSON values in select (bug SF-594)\n- Speed up alter table form (regression from 4.4.0)\n- Store current version without authentication and in Editor\n- PostgreSQL: Fix exporting string default values\n- PostgreSQL: Fix exporting sequences in PostgreSQL 10\n- PostgreSQL: Add IF EXISTS to DROP SEQUENCE in export (bug SF-595)\n- Editor: Fix displaying of true boolean values (regression from 4.5.0)\n\n## Adminer 4.6.1 (released 2018-02-09)\n- Sticky position of table actions\n- Speed up rendering of long tables (regression from 4.4.0)\n- Display notification about performing action after relogin\n- Add system tables help links\n- MySQL: Support non-utf8 charset in search in column\n- MySQL: Support geometry in MySQL 8 (bug SF-574)\n- MariaDB: Links to documentation\n- SQLite: Allow deleting PRIMARY KEY from tables with auto increment\n- PostgreSQL: Support binary files in bytea fields\n- PostgreSQL: Don't treat interval type as number (bug SF-474)\n- PostgreSQL: Cast to string when searching using LIKE (bug SF-325)\n- PostgreSQL: Fix condition for selecting no rows\n- PostgreSQL: Support TRUNCATE+INSERT export\n- Customization: Support connecting to MySQL via SSL\n- Customization: Allow specifying server name displayed in breadcrumbs\n\n## Adminer 4.6.0 (released 2018-02-05)\n- Fix counting selected rows after going back to select page\n- PHP &lt;5.3 compatibility even with Elasticsearch enabled\n- Fully support functions in default values\n- Stop redirecting links via adminer.org\n- Support X-Forwarded-Prefix\n- Display options for timestamp columns when creating a new table\n- Disable autocompleting password on create user page\n- Use primary key to edit rows even if not selected\n- MySQL, PostgreSQL: Display warnings\n- MySQL: Add floor and ceil select functions\n- MySQL: Add FIND_IN_SET search operator\n- MariaDB: Support JSON since MariaDB 10.2\n- SQLite, PostgreSQL: Limit rows in data manipulation without unique key\n- PostgreSQL: Support routines\n- PostgreSQL: Allow editing views with uppercase letters (bug SF-467)\n- PostgreSQL: Allow now() as default value (bug SF-525)\n- SimpleDB: Document that allow_url_fopen is required\n- Malay translation\n\n## Adminer 4.5.0 (released 2018-01-24)\n- Display name of the object in confirmation when dropping it\n- Display newlines in column comments (bug SF-573)\n- Support current_timestamp() as default of time fields (bug SF-572)\n- Hide window.opener from pages opened in a new window (bug SF-561)\n- Display error when getting row to edit\n- Store current Adminer version server-side to avoid excessive requests\n- Adminer: Fix Search data in tables (regression from 4.4.0)\n- CSP: Allow any styles, images, media and fonts, disallow base-uri\n- MySQL: Support geometry in MySQL 8 (bug SF-574)\n- MySQL: Support routines with comments in parameters (bug SF-460)\n- MariaDB: Support fulltext and spatial indexes in InnoDB (bug SF-583)\n- SQLite: Enable foreign key checks\n- PostgreSQL: Respect NULL default value\n- PostgreSQL: Display foreign tables (bug SF-576)\n- PostgreSQL: Do not export triggers if not requested\n- PostgreSQL: Export DROP SEQUENCE if dropping table\n- PostgreSQL: Display boolean values as code (bug SF-562)\n- MS SQL: Support freetds\n- non-MySQL: Avoid CONVERT() (bug SF-509)\n- Elasticsearch: Insert, update, delete\n- MongoDB: Support mongodb PHP extension\n- Editor: Fix displaying of false values in PostgreSQL (bug SF-568)\n\n## Adminer 4.4.0 (released 2018-01-17)\n- Add Content Security Policy\n- Disallow scripts without nonce\n- Rate limit password-less login attempts from the same IP address\n- Disallow connecting to privileged ports\n- Add nosniff header\n- PHP 7.1: Prevent warning when using empty limit\n- PHP 7.2: Prevent warning when searching in select\n- MySQL: Remove dedicated view for replication status (added in 4.3.0)\n- PostgreSQL: Sort table names (regression from 4.3.1)\n- Editor: Don't set time zone from PHP, fixes DST\n- Editor: Display field comment's text inside [] only in edit form\n- Editor: Fix doubleclick on database page\n- Editor: Fix Search data in tables\n- Customization: Always send security headers\n- Hebrew translation\n\n## Adminer 4.3.1 (released 2017-04-14)\n- Fix permanent login after logout (bug SF-539)\n- Fix SQL command autofocus (regression from 4.0.0)\n- PostgreSQL: Support JSON and JSONB data types\n- PostgreSQL: Fix index size computation in PostgreSQL &lt; 9.0 (regression from 4.3.0)\n- PostgreSQL: Fix nullable fields in export\n\n## Adminer 4.3.0 (released 2017-03-15)\n- Make maxlength in edit fields a soft limit\n- Add accessibility labels\n- Add Cache-Control: immutable to static files\n- MySQL: Support MySQL 8\n- MySQL: Support JSON data type\n- MySQL: Add dedicated view for replication status\n- MySQL: Support spatial indexes\n- PostgreSQL: Export\n- PostgreSQL: Don't treat partial indexes as unique\n- MS SQL: Support pdo_dblib\n- Elasticsearch: Support HTTPS by inputting https://server\n\n## Adminer 4.2.5 (released 2016-06-01)\n- Fix remote execution in SQLite query\n- SQLite: Require credentials to use\n- PostgreSQL: Support KILL\n\n## Adminer 4.2.4 (released 2016-02-06)\n- Fix remote execution in SQLite query\n- MySQL: Support PHP 7\n- Bosnian translation\n- Finnish translation\n\n## Adminer 4.2.3 (released 2015-11-15)\n- Fix XSS in indexes (non-MySQL only)\n- Support PHP 7\n- Greek translation\n- Galician translation\n- Bulgarian translation\n\n## Adminer 4.2.2 (released 2015-08-05)\n- Fix XSS in alter table (found by HP Fortify)\n\n## Adminer 4.2.1 (released 2015-03-10)\n- Send referrer header to the same domain\n- MySQL: Fix usage of utf8mb4 if the client library doesn't support it\n- MySQL: Use utf8mb4 in export only if required\n- SQLite: Use EXPLAIN QUERY PLAN in SQL query\n\n## Adminer 4.2.0 (released 2015-02-07)\n- Fix XSS in login form (bug SF-436)\n- Allow limiting number of displayed rows in SQL command\n- Fix reading routine column collations\n- Unlock session in alter database\n- Make master key unreadable to others (bug SF-410)\n- Fix edit by long non-utf8 string\n- Specify encoding for PHP 5.6 with invalid default_charset\n- Fix saving NULL value, bug since Adminer 4.0.3\n- Send 403 for auth error\n- Report offline and other AJAX errors (bug SF-419)\n- Don't alter table comment if not changed\n- Add links to documentation on table status page\n- Fix handling of 64 bit numbers in auto_increment\n- Add referrer: never meta tag\n- MySQL: Use utf8mb4 if available\n- MySQL: Support foreign keys in NDB storage\n- PostgreSQL: Materialized views\n- SQLite: Support CURRENT_* default values (bug SF-417)\n- Elasticsearch: Use where in select\n- Firebird: Alpha version\n- Danish translation\n\n## Adminer 4.1.0 (released 2014-04-18)\n- Provide size of all databases in the overview\n- Prevent against brute force login attempts from the same IP address\n- Compute number of tables in the overview explicitly\n- Display edit form after error in clone or multi-edit\n- Trim trailing non-breaking spaces in SQL textarea\n- Display time of the select command\n- Print elapsed time in HTML instead of SQL command comment\n- Improve gzip export ratio (bug SF-387)\n- Use rel=\"noreferrer\" for external links, skip adminer.org redirect in WebKit\n- MySQL: Fix enum types in routines (bug SF-391)\n- MySQL: Fix editing rows by binary values, bug since Adminer 3.7.1\n- MySQL: Respect daylight saving time in dump, bug since Adminer 3.6.4\n- MySQL 5.6.5+: Support ON UPDATE on datatime column\n- SQLite: Support UPDATE OF triggers\n- SQLite: Display auto-created unique indexes, bug since Adminer 3.5.0\n- Editor: Fix login() method, bug since Adminer 4.0.0\n- Translate numbers in ar, bn, fa\n- Vietnamese translation\n\n## Adminer 4.0.3 (released 2014-02-01)\n- MongoDB: insert, truncate, indexes\n- SimpleDB, MongoDB: insert more fields at once\n- SQLite: Fix creating table and altering primary key, bug since Adminer 4.0.0\n- Don't store invalid credentials to session, bug since Adminer 4.0.0\n- Norweigan translation\n\n## Adminer 4.0.2 (released 2014-01-11)\n- Fix handling of long text in SQL textarea\n- Support paste to SQL textarea in Opera\n\n## Adminer 4.0.1 (released 2014-01-11)\n- Don't use type=number if a SQL function is used\n- Disable highlighting in textareas with long texts\n- Don't autofocus SQL textarea in Firefox\n- Don't link NULL foreign key values\n- Fix displaying images in Editor, bug since Adminer 3.6.0\n- Fix uploading files, bug since Adminer 4.0.0\n- MongoDB: Count tables, display ObjectIds, sort, limit, offset, count rows\n- Elasticsearch: Fix compiled version, create and drop DB, drop table\n\n## Adminer 4.0.0 (released 2014-01-08)\n- Driver for SimpleDB, MongoDB and Elasticsearch\n- Highlight SQL in textareas\n- Save and continue edit by AJAX\n- Split SQL command and import\n- Add a new column in alter table on key press\n- Mark length as required for strings\n- Add label to database selection, move logout button\n- Add button for dropping an index\n- Display number of selected rows\n- Add links to documentation\n- Disable underlining links\n- Differentiate views in navigation\n- Improve speed of CSV import\n- Keep form values after refresh in Firefox\n- Mark auto_increment fields in edit\n- Don't append newlines to uploaded files, bug since Adminer 3.7.0\n- Don't display SQL edit form on Ctrl+click on the select query, introduced in Adminer 3.6.4\n- Use MD5 for editing long keys only in supported drivers, bug since Adminer 3.6.4\n- Don't reset column when searching for an empty value with Enter, bug since Adminer 3.6.4\n- Encrypt passwords stored in session by a key stored in cookie\n- Don't execute external JavaScript when verifying version\n- Include JUSH in the compiled version\n- Protect CSRF token against BREACH\n- Non-MySQL: View triggers\n- SQLite: Allow editing primary key\n- SQLite: Allow editing foreign keys\n- PostgreSQL: Fix handling of nextval() default values\n- PostgreSQL: Support creating array columns\n- Customization: Provide schemas()\n- Portugal Portuguese translation\n- Thai translation\n\n## Adminer 3.7.1 (released 2013-06-29)\n- Increase click target for checkboxes\n- Use shadow for highlighting default button\n- Don't use LIMIT 1 if inline updating unique row\n- Don't check previous checkbox on added column in create table (bug SF-326)\n- Order table list by name\n- Verify UTF-8 encoding of CSV import\n- Notify user about expired master password for permanent login\n- Highlight table being altered in navigation\n- Send 404 for invalid database and schema\n- Fix title and links on invalid table pages\n- Display error on invalid alter table and view pages\n- MySQL: Speed up updating rows without numeric or UTF-8 primary key\n- Non-MySQL: Descending indexes\n- PostgreSQL: Fix detecting oid column in PDO\n- PostgreSQL: Handle timestamp types (bug SF-324)\n- Korean translation\n\n## Adminer 3.7.0 (released 2013-05-19)\n- Allow more SQL files to be uploaded at the same time\n- Print run time next to executed queries\n- Don't drop original view and routine before creating the new one\n- Highlight default submit button\n- Add server placeholder to login form\n- Disable SQL export when applying functions in select\n- Allow using lang() in plugins (customization)\n- Remove bzip2 compression support\n- Constraint memory used in TAR export\n- Allow exporting views dependent on each other (bug SF-214)\n- Fix resetting search (bug SF-318)\n- Don't use LIMIT 1 if updating unique row (bug SF-320)\n- Restrict editing rows without unique identifier to search results\n- Display navigation below main content on mobile browsers\n- Get number of rows on export page asynchronously\n- Respect 'whole result' even if some rows are checked (bug SF-339 since Adminer 3.7.0)\n- MySQL: Optimize create table page and Editor navigation\n- MySQL: Display bit type as binary number\n- MySQL: Improve export of binary data types\n- MySQL: Fix handling of POINT data type (bug SF-282)\n- MySQL: Don't export binary and geometry columns twice in select\n- MySQL: Fix EXPLAIN in MySQL &lt; 5.1, bug since Adminer 3.6.4\n- SQLite: Export views\n- PostgreSQL: Fix swapped NULL and NOT NULL columns in PDO\n\n## Adminer 3.6.4 (released 2013-04-26)\n- Display pagination on a fixed position\n- Increase default select limit to 50\n- Display SQL edit form on Ctrl+click on the select query\n- Display SQL history from newest\n- Recover original view, trigger, routine if creating fails\n- Do not store plain text password to history in creating user\n- Selectable ON UPDATE CURRENT_TIMESTAMP field in create table\n- Open database to a new window after selecting it with Ctrl\n- Clear column name after resetting search (bug SF-296)\n- Explain partitions in SQL query (bug SF-294)\n- Allow loading more data with inline edit (bug SF-299)\n- Stay on the same page after deleting rows (bug SF-301)\n- Respect checked tables in export filename (bug SF-133)\n- Respect PHP configuration max_input_vars\n- Fix unsetting permanent login after logout\n- Disable autocapitalize in identifiers on mobile browsers\n- MySQL: Compatibility with MySQL 5.6\n- MySQL: Move ALTER export to plugin\n- MySQL: Use numeric time zone in export\n- MySQL: Link processlist documentation\n- SQLite: Export indexes\n\n## Adminer 3.6.3 (released 2013-01-23)\n- Display error code in SQL query\n- Allow specifying external links\n- Treat Meta key same as Ctrl\n- Fix XSS in displaying non-UTF-8 strings\n- Don't use type=\"number\" for decimal numbers\n\n## Adminer 3.6.2 (released 2012-12-21)\n- Edit values by Ctrl+click instead of double click\n- Don't select row on double click\n- Support NULL in routine calls\n- Shorten printed values in varchar fields\n- Display table default values on wide screens\n- Display date in SQL history\n- HTML5 input fields\n- Display warning for missing UPDATE privilege\n- Fix switching language on first load\n- Support enabled mbstring.func_overload\n- MySQL: Prolong comment length since MySQL 5.5\n- PostgreSQL: Fix process list in version 9.2\n- MS SQL: Support databases starting with number\n\n## Adminer 3.6.1 (released 2012-09-17)\n- Fix compiled version on PHP with multibyte support\n\n## Adminer 3.6.0 (released 2012-09-16)\n- Load more data in select\n- Edit strings with \\n in textarea\n- Time out long running database list and select count\n- Use VALUES() in INSERT+UPDATE export\n- Style logout button as link\n- Store selected database to permanent login\n- Ctrl+click and Shift+click on button opens form to a blank window\n- Switch language by POST\n- Compress translations\n- MySQL: Support geometry data types\n- selectQueryBuild() method (customization)\n- Serbian translation\n\n## Adminer 3.5.1 (released 2012-08-10)\n- Support same name fields in CSV export\n- Support Shift+click in export\n\n## Adminer 3.5.0 (released 2012-08-05)\n- Links for column search in select\n- Autohide column context menu in select\n- Autodisplay long table names in tables list\n- Display assigned auto_increment after clone\n- SQLite: Full alter table\n- SQLite: Better editing in tables without primary key\n- SQLite: Display number of rows in database overview\n\n## Adminer 3.4.0 (released 2012-06-30)\n- Link to descending order\n- Shift+click on checkbox to select consecutive rows\n- Print current time next to executed SQL queries\n- Warn about selecting data without index\n- Allow specifying database in login form\n- Link to original table in EXPLAIN of SELECT * FROM table t\n- Format numbers in translations\n- MySQL: inform about disabled event_scheduler\n- SQLite: support binary data\n- PostgreSQL: approximate row count in table overview\n- PostgreSQL: improve PDO support in SQL command\n- Oracle: schema, processlist, table overview numbers\n- Simplify work with NULL values (customization)\n- Use namespace in login form (customization)\n- Customizable export filename (customization)\n- Replace JSMin by better JavaScript minifier\n- Don't use AJAX links and forms\n- Indonesian translation\n- Ukrainian translation\n- Bengali translation\n\n## Adminer 3.3.4 (released 2012-03-07)\n- Foreign keys default actions (bug SF-188)\n- SET DEFAULT foreign key action\n- Fix minor parser bug in SQL command with webserver file\n- Ctrl+click on button opens form to a blank window\n- Trim table and column names (bug SF-195)\n- Error message with no response from server in AJAX\n- Esc to cancel AJAX request\n- Move AJAX loading indicator to the right\n- Don't quote bit type in export\n- Don't check row while selecting text\n- Fix invalid references line position on Database schema\n- Disable selecting text on Database schema\n- Ability to disable export (customization)\n- Extensible list of databases (customization)\n- MySQL: set autocommit after connect\n- SQLite, PostgreSQL: vacuum\n- SQLite, PostgreSQL: don't use LIKE for numbers (bug SF-202)\n- PostgreSQL: fix alter foreign key\n- PostgreSQL over PDO: connect if the eponymous database does not exist (bug SF-185)\n- Boolean search (Editor)\n- Persian translation\n\n## Adminer 3.3.3 (released 2011-08-12)\n- Highlight checked rows\n- Titles of links in database overview and navigation\n- Fix trigger export (SQLite)\n- Default trigger statement (SQLite, PostgreSQL)\n- Remove search by expression (PostgreSQL, MS SQL)\n\n## Adminer 3.3.2 (released 2011-08-08)\n- Display error with non-existent row in edit\n- Fix minor parser bug in SQL command with webserver file\n- Fix SQL command Stop on error\n- Don't scroll with AJAX select order and alter move column\n- Fast number of rows with big tables (PostgreSQL)\n- Sort databases and schemas (PostgreSQL)\n\n## Adminer 3.3.1 (released 2011-07-27)\n- Fix XSS introduced in Adminer 3.2.0\n- Fix altering default values (PostgreSQL)\n- Process list (PostgreSQL)\n\n## Adminer 3.3.0 (released 2011-07-19)\n- Use Esc to disable in-place edit\n- Shortcut for database privileges\n- Editable index names\n- Append new index with auto index selection (bug SF-138)\n- Preserve original timestamp value in multiple update (bug SF-158)\n- Bit type default value\n- Display foreign key name in tooltip\n- Display default column value in table overview\n- Display column collation in tooltip\n- Keyboard shortcuts: Alt+Shift+1 for homepage, Ctrl+Shift+Enter for Save and continue edit\n- Show only errors with Webserver file SQL command\n- Remember select export and import options\n- Link tables and indexes from SQL command EXPLAIN (MySQL)\n- Display error with all wrong SQL commands (MySQL)\n- Display foreign keys from other schemas (PostgreSQL)\n- Pagination support (Oracle)\n- Autocomplete for big foreign keys (Editor)\n- Display name of the referenced record in PostgreSQL (Editor)\n- Prefer NULL to empty string (Editor, bug SF-162)\n- Display searched columns (Editor)\n- Customizable favicon (customization)\n- Method name can return a link (customization)\n- Easier sending of default headers (customization)\n- Lithuanian and Romanian translation\n\n## Adminer 3.2.2 (released 2011-03-28)\n- Fix AJAX history after reload\n\n## Adminer 3.2.1 (released 2011-03-23)\n- Ability to save expression in edit\n- Respect default database collation (bug SF-119)\n- Don't export triggers without table (bug SF-123)\n- Esc to focus next field in Tab textarea\n- Send forms by Ctrl+Enter on &lt;select>\n- Enum editor and textarea Ctrl+Enter working in IE\n- AJAX forms in Google Chrome\n- Parse UTF-16 and UTF-8 BOM in all text uploads\n- Display ; in history\n- Use DELIMITER in history\n- Show databases even with skip_show_database in MySQL 5\n- Disable maxlength with functions in edit\n- Better placement of AJAX icon\n- Table header in CSV export (Editor)\n- Time format hint (Editor)\n- Respect order after search (Editor)\n- Set MySQL time zone by PHP setting (Editor)\n- Allow own code in &lt;head> (customization)\n- Polish translation\n\n## Adminer 3.2.0 (released 2011-02-24)\n- Get long texts and slow information by AJAX\n- Most links and forms by AJAX in browsers with support for history.pushState\n- Copy tables\n- Ability to search by expression in select\n- Export SQL command result (bug SF-99)\n- Focus first field with insert (bug SF-106)\n- Permanent link in schema\n- Display total time in show only errors mode in SQL command\n- History: edit all\n- MS SQL: auto primary and foreign key\n- SQLite: display 0\n- Create table default data type: int\n- Focus upper/lower fields by Ctrl+Up/Ctrl+Down\n- Hide credentials for SQLite\n- Utilize oids in PostgreSQL\n- Homepage customization\n- Use IN for search in numeric fields (Editor)\n- Use password input for _md5 and _sha1 fields (Editor)\n- Work without session.use_cookies (bug SF-107)\n- Fix saving schema to cookie in Opera\n- Portuguese, Slovenian and Turkish translation\n\n## Adminer 3.1.0 (released 2010-11-16)\n- TSV export and import\n- Customizable export\n- Option to show only errors in SQL command\n- Link to bookmark SQL command\n- Recognize $$ strings in SQL command (PostgreSQL)\n- Highlight and edit SQL command in processlist\n- Always display all drivers\n- Timestamp at the end of export\n- Link to refresh database cache (bug SF-96)\n- Support for virtual foreign keys\n- Disable XSS \"protection\" of IE8\n- Immunity against zend.ze1_compatibility_mode (bug SF-86)\n- Fix last page with empty result set\n- Arabic translation and RTL support\n- Dual licensing: Apache or GPL\n\n## Adminer 3.0.1 (released 2010-10-18)\n- Send the form by Ctrl+Enter in all textareas\n- Disable creating SQLite databases with extension other than db, sdb, sqlite\n- Ability to use Adminer in a frame through customization\n- Catalan translation\n- MS SQL 2005 compatibility\n- PostgreSQL: connect if the eponymous database does not exist\n\n## Adminer 3.0.0 (released 2010-10-15)\n- Drivers for MS SQL, SQLite, PostgreSQL, Oracle\n- Allow concurrent logins on the same server\n- Allow permanent login without customization\n- In-place editation in select\n- Foreign key options in Table creation\n- Treat binary type as hex\n- Show number of tables in server overview\n- Operator LIKE %%\n- Remember export parameters in cookie\n- Allow semicolon as CSV separator\n- Schemas, sequences and types support (PostgreSQL)\n- Autofocus username in login form\n- Allow to insert Tab in SQL textareas and send the form by Ctrl+Enter\n- Disable spellchecking in SQL textareas\n- Display auto_increment value of inserted item\n- Allow disabling auto_increment value export\n- Prefill auto_increment column name\n- Ability to jump to any page in select by JavaScript\n- Display comment in table overview\n- Link last page above data in select\n- Link table names in SQL queries\n- Hungarian, Japanese and Tamil translation\n- Defer table information in database overview to JavaScript (performance)\n- Big tables optimizations (performance)\n\n## Adminer 2.3.2 (released 2010-04-21)\n- Fix COUNT(*) link\n- Fix Save and continue edit\n\n## Adminer 2.3.1 (released 2010-04-06)\n- Add Drop button to Alter pages (regression from 2.0.0)\n- Link COUNT(*) result to listing\n- Newlines in select query edit\n- Return to referrer after edit\n- Respect session.auto_start (bug SF-42)\n\n## Adminer 2.3.0 (released 2010-02-26)\n- Support for permanent login (customization required)\n- Search in all tables\n- Show status variables\n- Print sums in tables overview\n- Add Delete button to Edit page (regression from 2.0.0)\n- Print error summary in SQL command\n- Simplify SQL syntax error message\n- Show SQL query info if available\n- Delete length when changing type in alter table\n- Ability to check table prefix in export\n\n## Adminer 2.2.1 (released 2009-11-26)\n- Highlight current links\n- Improve concurrency\n- Move number of tables to DB info (performance)\n- Search by foreign keys (Editor)\n- Link new item in backward keys (Editor)\n\n## Adminer 2.2.0 (released 2009-10-20)\n- Database list - bulk drop, number of tables\n- Enlarge field for enum and set definition\n- Display table links above table structure\n- Link URLs in select\n- Display number of manipulated rows in JS confirm\n- Set required memory in SQL command\n- Fix removed default in ALTER\n- Display whitespace in texts (bug SF-11)\n- ClickJacking protection in modern browsers\n- E-mail attachments (Editor)\n- Optional year in date (Editor)\n- Search operators (Editor)\n- Align numbers to right in select (Editor)\n- Move &lt;h1> to $adminer->navigation (customization)\n- Rename get_dbh to connection (customization)\n\n## Adminer 2.1.0 (released 2009-09-12)\n- Edit default values directly in table creation\n- Execute SQL file stored on server disk\n- Display EXPLAIN in SQL query\n- Compress export and import\n- Display column comments in table overview\n- Use ON DUPLICATE KEY UPDATE for CSV import\n- Print ALTER export instead of executing it\n- Click on row selects it\n- Fix Editor date format\n- Fix long SQL query crash (bug SF-3)\n- Speed up simple alter table\n- Traditional Chinese translation\n\n## Adminer 2.0.0 (released 2009-08-06)\n- Editor: User friendly data editor\n- Customization: Adminer class\n- Create single column foreign key in table structure\n- Table relations (Editor)\n- Send e-mails (Editor)\n- Display images in blob (Editor)\n- Localize date (Editor)\n- Treat tinyint(1) as bool (Editor)\n- Divide types to groups in table creation\n- Link e-mails in select\n- Show type in field name title\n- Preselect now() for timestamp columns\n- Clear history\n- Prefill insert by foreign key searches\n- Print number of rows in SQL command\n- Remove Delete button from Edit page - use mass operation for it\n- Faster multiple update, clone and delete\n- Faster table list in navigation\n- Download version checker and syntax highlighting from HTTPS\n- Use HTML Strict instead of XHTML\n- Remove function minification in favor of performance and customization\n- Fix grant ALL PRIVILEGES with GRANT OPTION\n- Fix CSV import\n- Fix work with default values\n\n## Adminer 1.11.1 (released 2009-07-03)\n- Fix problem with enabled Filter extension\n\n## Adminer 1.11.0 (released 2009-07-02)\n- Connection through socket by server :/path/to/socket\n- Simplify export\n- Display execution time in SQL query\n- Relative date and time functions\n- Version checker\n- Save queries to history and display it on SQL page\n- Display MySQL variables\n- Ability to select all rows on current page of select\n- Separate JavaScript functions\n- Always use the default style before the external one\n- Always try to use the syntax highlighter\n- All privileges in user rights\n- Fix FOUND_ROWS() in SQL command\n- Export only selected columns in select\n- Bulk database creation\n- Include views in drop and move on database overview\n- Hide fieldsets in select\n- Automatically add new fields in table creation\n- Use \\n in SQL commands\n\n## phpMinAdmin 1.10.1 (released 2009-05-07)\n- Highlight odd and hover rows\n- Partition editing comfort (bug SF-12)\n- Allow full length in limited int\n\n## phpMinAdmin 1.10.0 (released 2009-04-28)\n- Partitioning (MySQL 5.1)\n- CSV import\n- Plus and minus functions\n- Option to stop on error in SQL command\n- Cross links to select and table (bug SF-5), link new item\n- Suhosin compatibility\n- Remove max_allowed_packet from export\n- Read style from phpMinAdmin.css if exists\n- Size reduction by minification of variables and functions\n- Russian translation\n\n## phpMinAdmin 1.9.1 (released 2008-10-27)\n- Update translations\n\n## phpMinAdmin 1.9.0 (released 2008-10-16)\n- List of tables and views with maintenance commands\n- Clone rows\n- Bulk edit and clone\n- Function results in edit\n- NOT operators in select\n- Search without column restriction\n- Use type=password for unhashed password\n- Only one button for each action in select\n- Choose language through option-list\n- XHTML syntax errors\n- Don't set global variable in export\n- SHOW DATABASES can be revoked\n- Order by function result working also in older MySQL versions\n- Tested on IIS\n\n## phpMinAdmin 1.8.0 (released 2008-09-12)\n- Events (MySQL 5.1)\n- Access without login - accept ?username=\n- Print SQL query in select, messages and warnings\n- Display number of found rows\n- Don't wrap lines in select table\n- Italian and Estonian translation\n- Order by COUNT(*)\n\n## phpMinAdmin 1.7.0 (released 2008-08-26)\n- Customizable export (select objects to export, SQL or CSV)\n- Ability to alter existing tables and drop old tables in export\n- Choose columns in select, aggregation\n- Order rows by clicking on table heading\n- Truncate only search results\n- Automatically select name for trigger\n- Chinese and French translation\n- Preserve default values when altering table\n- Maintain auto_increment when moving columns\n- Smaller multilingual file\n- Cache static files\n- Faster checking of number of results\n\n## phpMinAdmin 1.6.1 (released 2008-05-22)\n- Set session parameters only if not session.auto_start\n\n## phpMinAdmin 1.6.0 (released 2008-05-16)\n- Order of columns in table\n- Set max_allowed_packet in dump and use extended insert\n- Spanish and German translations\n- Use images for editing buttons\n- Protection against big POST data\n- Logout by POST\n- Information about logged user\n- Separate stylesheet\n- Last-Modified header for files\n- Several bug fixes\n\n## phpMinAdmin 1.5.0 (released 2008-01-09)\n- Mass delete\n- Vertical privileges\n- Specify connection port by colon in server\n- Ignore length in date and time types\n- Boolean fulltext search for all columns in MyISAM\n- Shrink compiled output\n- Remove maxlength from server and username\n- Uncheck NULL by change\n- Mark shortened fields in select\n\n## phpMinAdmin 1.4.0 (released 2007-08-15)\n- Privileges\n- New design\n- Dutch translation\n- Use NULL for auto_increment (bug SF-1)\n- Fix dropping procedure parameters\n\n## phpMinAdmin 1.3.2 (released 2007-08-06)\n- Next field by JavaScript in foreign keys\n- Set time zone in dump\n- Refresh lang cookie\n- Remember drop result in case of faulty create\n- Move vertical lines in schema properly\n- Fix maximum page in select\n\n## phpMinAdmin 1.3.1 (released 2007-07-31)\n- Move references lines in schema\n- Fix dump\n- Fix update links\n\n## phpMinAdmin 1.3.0 (released 2007-07-27)\n- Breadcrumb navigation\n- Operator IN\n- Timestamp default values\n- Draggable tables in schema\n- Number of rows in navigation\n- Display MySQL version and used PHP extension\n- More friendly user interface\n- Slovak translation\n\n## phpMinAdmin 1.2.0 (released 2007-07-25)\n- Manipulate triggers\n- PDO Abstraction\n- Auto_increment value\n- JavaScript for adding rows\n\n## phpMinAdmin 1.1.0 (released 2007-07-19)\n- Routines manipulation\n- Views manipulation\n- Foreign keys manipulation\n- Database schema with references\n- Processlist\n- Index length\n- Dump individual tables\n- JavaScript for next rows in table edit\n- Cache databases list\n\n## phpMinAdmin 1.0.0 (released 2007-07-11)\n- First official release\n\n`SF-` means https://sourceforge.net/p/adminer/bugs-and-features/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "- Reproducible [bug reports](https://github.com/vrana/adminer/issues/new?template=bug_report.md) are warmly welcomed.\n- [Feature requests](https://github.com/vrana/adminer/issues/new?template=BLANK_ISSUE) are also fine, but I'm quite picky about what to accept into Adminer. Please don't be offended if I close the issue as \"Not Planned,\" especially if it can be achieved with a plugin.\n- [Pull requests](https://github.com/vrana/adminer/pulls) for both bug fixes and simple features are welcome. Before working on anything more complicated, get familiar with the [Adminer philosophy](https://github.com/vrana/adminer/blob/master/developing.md).\n"
  },
  {
    "path": "LICENSE",
    "content": "Apache License 2.0 or GPL 2\n"
  },
  {
    "path": "Makefile",
    "content": "ROOT_DIRECTORY = $(shell dirname \"$(realpath $(lastword $(MAKEFILE_LIST)))\")\nPHP := $(shell which php)\nPORT := 8000\n\n\n.DEFAULT_GOAL := default\n\n\n.PHONY: default\ndefault: compile\n\n.PHONY: compile\ncompile:\n\t$(PHP) $(ROOT_DIRECTORY)/compile.php\n\n.PHONY: server\nserver:\n\tphp \\\n\t  --server 127.0.0.1:$(PORT) \\\n\t  --docroot $(ROOT_DIRECTORY)\n\n.PHONY: initialize\ninitialize:\n\tgit \\\n\t  -C $(ROOT_DIRECTORY) \\\n\t  submodule \\\n\t  update \\\n\t  --init \\\n\t  --recursive\n\n.PHONY: clean\nclean:\n\trm \\\n\t  --recursive \\\n\t  --force \\\n\t  $(ROOT_DIRECTORY)/adminer.php\n\n.PHONY: clean.all\nclean.all: clean\n"
  },
  {
    "path": "README.md",
    "content": "# Adminer\n**Adminer** is a full-featured database management tool written in PHP. It consists of a single file ready to deploy to the target server.\n**Adminer Editor** offers data manipulation for end-users.\n\n[Official Website](https://www.adminer.org/)\n\n## Features\n- **Supports:** MySQL, MariaDB, PostgreSQL, CockroachDB, SQLite, MS SQL, Oracle\n- **Plugins for:** Elasticsearch, SimpleDB, MongoDB, Firebird, ClickHouse, IMAP\n- **Requirements:** PHP 5.3+ (compiled file), PHP 7.4+ (source codes)\n\n## Screenshot\n![Table structure](https://www.adminer.org/static/screenshots/table.png)\n\n## Installation\nIf downloaded from Git then run: `git submodule update --init`\n\n- `adminer/index.php` - Run development version of Adminer\n- `editor/index.php` - Run development version of Adminer Editor\n- `editor/example.php` - Example customization\n- `compile.php` - Create a single file version\n- `lang.php` - Update translations\n- `tests/*.html` - Katalon Recorder test suites\n\n## Plugins\nThere are several plugins distributed with Adminer, as well as many user-contributed plugins listed on the [Adminer Plugins page](https://www.adminer.org/plugins/).\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nOnly the latest published version and the latest development version (last commit) are supported.\n\n## Reporting a Vulnerability\n\nTo report a vulnerability, create a new draft security advisory at [GitHub Security Advisories](https://github.com/vrana/adminer/security/advisories/new).\n\nSecurity issues are handled with top priority. If you don't receive a response within a week, please follow up on the report. Once a vulnerability is acknowledged, a fix should be available and a new version released within a few days. The issue will be made public after the fix is released or if the report is declined.\n"
  },
  {
    "path": "adminer/call.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$PROCEDURE = ($_GET[\"name\"] ?: $_GET[\"call\"]);\npage_header(lang('Call') . \": \" . h($PROCEDURE), $error);\n\n$routine = routine($_GET[\"call\"], (isset($_GET[\"callf\"]) ? \"FUNCTION\" : \"PROCEDURE\"));\n$in = array();\n$out = array();\nforeach ($routine[\"fields\"] as $i => $field) {\n\tif (substr($field[\"inout\"], -3) == \"OUT\" && JUSH == 'sql') {\n\t\t$out[$i] = \"@\" . idf_escape($field[\"field\"]) . \" AS \" . idf_escape($field[\"field\"]);\n\t}\n\tif (!$field[\"inout\"] || substr($field[\"inout\"], 0, 2) == \"IN\") {\n\t\t$in[] = $i;\n\t}\n}\n\nif (!$error && $_POST) {\n\t$call = array();\n\tforeach ($routine[\"fields\"] as $key => $field) {\n\t\t$val = \"\";\n\t\tif (in_array($key, $in)) {\n\t\t\t$val = process_input($field);\n\t\t\tif ($val === false) {\n\t\t\t\t$val = \"''\";\n\t\t\t}\n\t\t\tif (isset($out[$key])) {\n\t\t\t\tconnection()->query(\"SET @\" . idf_escape($field[\"field\"]) . \" = $val\");\n\t\t\t}\n\t\t}\n\t\tif (isset($out[$key])) {\n\t\t\t$call[] = \"@\" . idf_escape($field[\"field\"]);\n\t\t} elseif (in_array($key, $in)) {\n\t\t\t$call[] = $val;\n\t\t}\n\t}\n\n\t$query = (isset($_GET[\"callf\"]) ? \"SELECT \" : \"CALL \") . (idx($routine[\"returns\"], \"type\") == \"record\" ? \"* FROM \" : \"\") . table($PROCEDURE) . \"(\" . implode(\", \", $call) . \")\";\n\t$start = microtime(true);\n\t$result = connection()->multi_query($query);\n\t$affected = connection()->affected_rows; // getting warnings overwrites this\n\techo adminer()->selectQuery($query, $start, !$result);\n\n\tif (!$result) {\n\t\techo \"<p class='error'>\" . error() . \"\\n\";\n\t} else {\n\t\t$connection2 = connect();\n\t\tif ($connection2) {\n\t\t\t$connection2->select_db(DB);\n\t\t}\n\n\t\tdo {\n\t\t\t$result = connection()->store_result();\n\t\t\tif (is_object($result)) {\n\t\t\t\tprint_select_result($result, $connection2);\n\t\t\t} else {\n\t\t\t\techo \"<p class='message'>\" . lang('Routine has been called, %d row(s) affected.', $affected)\n\t\t\t\t\t. \" <span class='time'>\" . @date(\"H:i:s\") . \"</span>\\n\" // @ - time zone may be not set\n\t\t\t\t;\n\t\t\t}\n\t\t} while (connection()->next_result());\n\n\t\tif ($out) {\n\t\t\tprint_select_result(connection()->query(\"SELECT \" . implode(\", \", $out)));\n\t\t}\n\t}\n}\n?>\n\n<form action=\"\" method=\"post\">\n<?php\nif ($in) {\n\techo \"<table class='layout'>\\n\";\n\tforeach ($in as $key) {\n\t\t$field = $routine[\"fields\"][$key];\n\t\t$name = $field[\"field\"];\n\t\techo \"<tr><th>\" . adminer()->fieldName($field);\n\t\t$value = idx($_POST[\"fields\"], $name);\n\t\tif ($value != \"\") {\n\t\t\tif ($field[\"type\"] == \"set\") {\n\t\t\t\t$value = implode(\",\", $value);\n\t\t\t}\n\t\t}\n\t\tinput($field, $value, idx($_POST[\"function\"], $name, \"\")); // param name can be empty\n\t\techo \"\\n\";\n\t}\n\techo \"</table>\\n\";\n}\n?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Call'); ?>\">\n<?php echo input_token(); ?>\n</form>\n\n<pre>\n<?php\n/** Format string as table row\n* @return string HTML\n*/\nfunction pre_tr(string $s): string {\n\treturn preg_replace('~^~m', '<tr>', preg_replace('~\\|~', '<td>', preg_replace('~\\|$~m', \"\", rtrim($s))));\n}\n\n$table = '(\\+--[-+]+\\+\\n)';\n$row = '(\\| .* \\|\\n)';\necho preg_replace_callback(\n\t\"~^$table?$row$table?($row*)$table?~m\",\n\tfunction ($match) {\n\t\t$first_row = pre_tr($match[2]);\n\t\treturn \"<table>\\n\" . ($match[1] ? \"<thead>$first_row</thead>\\n\" : $first_row) . pre_tr($match[4]) . \"\\n</table>\";\n\t},\n\tpreg_replace(\n\t\t'~(\\n(    -|mysql)&gt; )(.+)~',\n\t\t\"\\\\1<code class='jush-sql'>\\\\3</code>\",\n\t\tpreg_replace('~(.+)\\n---+\\n~', \"<b>\\\\1</b>\\n\", h($routine['comment']))\n\t)\n);\n?>\n</pre>\n"
  },
  {
    "path": "adminer/check.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"check\"];\n$name = $_GET[\"name\"];\n$row = $_POST;\n\nif ($row && !$error) {\n\tif (JUSH == \"sqlite\") {\n\t\t$result = recreate_table($TABLE, $TABLE, array(), array(), array(), \"\", array(), \"$name\", ($row[\"drop\"] ? \"\" : $row[\"clause\"]));\n\t} else {\n\t\t$result = ($name == \"\" || queries(\"ALTER TABLE \" . table($TABLE) . \" DROP CONSTRAINT \" . idf_escape($name)));\n\t\tif (!$row[\"drop\"]) {\n\t\t\t$result = queries(\"ALTER TABLE \" . table($TABLE) . \" ADD\" . ($row[\"name\"] != \"\" ? \" CONSTRAINT \" . idf_escape($row[\"name\"]) : \"\") . \" CHECK ($row[clause])\"); //! SQL injection\n\t\t}\n\t}\n\tqueries_redirect(\n\t\tME . \"table=\" . urlencode($TABLE),\n\t\t($row[\"drop\"] ? lang('Check has been dropped.') : ($name != \"\" ? lang('Check has been altered.') : lang('Check has been created.'))),\n\t\t$result\n\t);\n}\n\npage_header(($name != \"\" ? lang('Alter check') . \": \" . h($name) : lang('Create check')), $error, array(\"table\" => $TABLE));\n\nif (!$row) {\n\t$checks = driver()->checkConstraints($TABLE);\n\t$row = array(\"name\" => $name, \"clause\" => $checks[$name]);\n}\n?>\n\n<form action=\"\" method=\"post\">\n<p><?php\nif (JUSH != \"sqlite\") {\n\techo lang('Name') . ': <input name=\"name\" value=\"' . h($row[\"name\"]) . '\" data-maxlength=\"64\" autocapitalize=\"off\"> ';\n}\necho doc_link(array(\n\t'sql' => \"create-table-check-constraints.html\",\n\t'mariadb' => \"constraint/\",\n\t'pgsql' => \"ddl-constraints.html#DDL-CONSTRAINTS-CHECK-CONSTRAINTS\",\n\t'mssql' => \"relational-databases/tables/create-check-constraints\",\n\t'sqlite' => \"lang_createtable.html#check_constraints\",\n), \"?\");\n?>\n<p><?php textarea(\"clause\", $row[\"clause\"]); ?>\n<p><input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php if ($name != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $name)); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/create.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"create\"];\n$partition_by = driver()->partitionBy;\n$partitions_info = ($partition_by ? driver()->partitionsInfo($TABLE) : array());\n\n$referencable_primary = referencable_primary($TABLE);\n$foreign_keys = array();\nforeach ($referencable_primary as $table_name => $field) {\n\t$foreign_keys[str_replace(\"`\", \"``\", $table_name) . \"`\" . str_replace(\"`\", \"``\", $field[\"field\"])] = $table_name; // not idf_escape() - used in JS\n}\n\n$orig_fields = array();\n$table_status = array();\nif ($TABLE != \"\") {\n\t$orig_fields = fields($TABLE);\n\t$table_status = table_status1($TABLE);\n\tif (count($table_status) < 2) { // there's only the Name field\n\t\t$error = lang('No tables.');\n\t}\n}\n\n$row = $_POST;\n$row[\"fields\"] = (array) $row[\"fields\"];\nif ($row[\"auto_increment_col\"]) {\n\t$row[\"fields\"][$row[\"auto_increment_col\"]][\"auto_increment\"] = true;\n}\n\nif ($_POST) {\n\tsave_settings(array(\"comments\" => $_POST[\"comments\"], \"defaults\" => $_POST[\"defaults\"]));\n}\n\nif ($_POST && !process_fields($row[\"fields\"]) && !$error) {\n\tif ($_POST[\"drop\"]) {\n\t\tqueries_redirect(substr(ME, 0, -1), lang('Table has been dropped.'), drop_tables(array($TABLE)));\n\t} else {\n\t\t$fields = array();\n\t\t$all_fields = array();\n\t\t$use_all_fields = false;\n\t\t$foreign = array();\n\t\t$orig_field = reset($orig_fields);\n\t\t$after = \" FIRST\";\n\n\t\tforeach ($row[\"fields\"] as $key => $field) {\n\t\t\t$foreign_key = $foreign_keys[$field[\"type\"]];\n\t\t\t$type_field = ($foreign_key !== null ? $referencable_primary[$foreign_key] : $field); //! can collide with user defined type\n\t\t\tif ($field[\"field\"] != \"\") {\n\t\t\t\tif (!$field[\"generated\"]) {\n\t\t\t\t\t$field[\"default\"] = null;\n\t\t\t\t}\n\t\t\t\t$process_field = process_field($field, $type_field);\n\t\t\t\t$all_fields[] = array($field[\"orig\"], $process_field, $after);\n\t\t\t\tif (!$orig_field || $process_field !== process_field($orig_field, $orig_field)) {\n\t\t\t\t\t$fields[] = array($field[\"orig\"], $process_field, $after);\n\t\t\t\t\tif ($field[\"orig\"] != \"\" || $after) {\n\t\t\t\t\t\t$use_all_fields = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($foreign_key !== null) {\n\t\t\t\t\t$foreign[idf_escape($field[\"field\"])] = ($TABLE != \"\" && JUSH != \"sqlite\" ? \"ADD\" : \" \") . format_foreign_key(array(\n\t\t\t\t\t\t'table' => $foreign_keys[$field[\"type\"]],\n\t\t\t\t\t\t'source' => array($field[\"field\"]),\n\t\t\t\t\t\t'target' => array($type_field[\"field\"]),\n\t\t\t\t\t\t'on_delete' => $field[\"on_delete\"],\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t\t$after = \" AFTER \" . idf_escape($field[\"field\"]);\n\t\t\t} elseif ($field[\"orig\"] != \"\") {\n\t\t\t\t$use_all_fields = true;\n\t\t\t\t$fields[] = array($field[\"orig\"]);\n\t\t\t}\n\t\t\tif ($field[\"orig\"] != \"\") {\n\t\t\t\t$orig_field = next($orig_fields);\n\t\t\t\tif (!$orig_field) {\n\t\t\t\t\t$after = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t$partitioning = array();\n\t\tif (in_array($row[\"partition_by\"], $partition_by)) {\n\t\t\tforeach ($row as $key => $val) {\n\t\t\t\tif (preg_match('~^partition~', $key)) {\n\t\t\t\t\t$partitioning[$key] = $val;\n\t\t\t\t}\n\t\t\t}\n\t\t\tforeach ($partitioning[\"partition_names\"] as $key => $name) {\n\t\t\t\tif ($name == \"\") {\n\t\t\t\t\tunset($partitioning[\"partition_names\"][$key]);\n\t\t\t\t\tunset($partitioning[\"partition_values\"][$key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$partitioning[\"partition_names\"] = array_values($partitioning[\"partition_names\"]);\n\t\t\t$partitioning[\"partition_values\"] = array_values($partitioning[\"partition_values\"]);\n\t\t\tif ($partitioning == $partitions_info) {\n\t\t\t\t$partitioning = array();\n\t\t\t}\n\t\t} elseif (preg_match(\"~partitioned~\", $table_status[\"Create_options\"])) {\n\t\t\t$partitioning = null;\n\t\t}\n\n\t\t$message = lang('Table has been altered.');\n\t\tif ($TABLE == \"\") {\n\t\t\tcookie(\"adminer_engine\", $row[\"Engine\"]);\n\t\t\t$message = lang('Table has been created.');\n\t\t}\n\t\t$name = trim($row[\"name\"]);\n\n\t\tqueries_redirect(ME . (support(\"table\") ? \"table=\" : \"select=\") . urlencode($name), $message, alter_table(\n\t\t\t$TABLE,\n\t\t\t$name,\n\t\t\t(JUSH == \"sqlite\" && ($use_all_fields || $foreign) ? $all_fields : $fields),\n\t\t\t$foreign,\n\t\t\t($row[\"Comment\"] != $table_status[\"Comment\"] ? $row[\"Comment\"] : null),\n\t\t\t($row[\"Engine\"] && $row[\"Engine\"] != $table_status[\"Engine\"] ? $row[\"Engine\"] : \"\"),\n\t\t\t($row[\"Collation\"] && $row[\"Collation\"] != $table_status[\"Collation\"] ? $row[\"Collation\"] : \"\"),\n\t\t\t($row[\"Auto_increment\"] != \"\" ? number($row[\"Auto_increment\"]) : \"\"),\n\t\t\t$partitioning\n\t\t));\n\t}\n}\n\npage_header(($TABLE != \"\" ? lang('Alter table') : lang('Create table')), $error, array(\"table\" => $TABLE), h($TABLE));\n\nif (!$_POST) {\n\t$types = driver()->types();\n\t$row = array(\n\t\t\"Engine\" => $_COOKIE[\"adminer_engine\"],\n\t\t\"fields\" => array(array(\"field\" => \"\", \"type\" => (isset($types[\"int\"]) ? \"int\" : (isset($types[\"integer\"]) ? \"integer\" : \"\")), \"on_update\" => \"\")),\n\t\t\"partition_names\" => array(\"\"),\n\t);\n\n\tif ($TABLE != \"\") {\n\t\t$row = $table_status;\n\t\t$row[\"name\"] = $TABLE;\n\t\t$row[\"fields\"] = array();\n\t\tif (!$_GET[\"auto_increment\"]) { // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids\n\t\t\t$row[\"Auto_increment\"] = \"\";\n\t\t}\n\t\tforeach ($orig_fields as $field) {\n\t\t\t$field[\"generated\"] = $field[\"generated\"] ?: (isset($field[\"default\"]) ? \"DEFAULT\" : \"\");\n\t\t\t$row[\"fields\"][] = $field;\n\t\t}\n\n\t\tif ($partition_by) {\n\t\t\t$row += $partitions_info;\n\t\t\t$row[\"partition_names\"][] = \"\";\n\t\t\t$row[\"partition_values\"][] = \"\";\n\t\t}\n\t}\n}\n\n$collations = collations();\nif (is_array(reset($collations))) {\n\t$collations = call_user_func_array('array_merge', array_values($collations));\n}\n$engines = driver()->engines();\n// case of engine may differ\nforeach ($engines as $engine) {\n\tif (!strcasecmp($engine, $row[\"Engine\"])) {\n\t\t$row[\"Engine\"] = $engine;\n\t\tbreak;\n\t}\n}\n?>\n\n<form action=\"\" method=\"post\" id=\"form\">\n<p>\n<?php\nif (support(\"columns\") || $TABLE == \"\") {\n\techo lang('Table name') . \": <input name='name'\" . ($TABLE == \"\" && !$_POST ? \" autofocus\" : \"\") . \" data-maxlength='64' value='\" . h($row[\"name\"]) . \"' autocapitalize='off'>\\n\";\n\techo ($engines ? html_select(\"Engine\", array(\"\" => \"(\" . lang('engine') . \")\") + $engines, $row[\"Engine\"]) . on_help(\"event.target.value\", 1) . script(\"qsl('select').onchange = helpClose;\") . \"\\n\" : \"\");\n\tif ($collations) {\n\t\techo \"<datalist id='collations'>\" . optionlist($collations) . \"</datalist>\\n\";\n\t\techo (preg_match(\"~sqlite|mssql~\", JUSH) ? \"\" : \"<input list='collations' name='Collation' value='\" . h($row[\"Collation\"]) . \"' placeholder='(\" . lang('collation') . \")'>\\n\");\n\t}\n\techo \"<input type='submit' value='\" . lang('Save') . \"'>\\n\";\n}\n\nif (support(\"columns\")) {\n\techo \"<div class='scrollable'>\\n\";\n\techo \"<table id='edit-fields' class='nowrap'>\\n\";\n\tedit_fields($row[\"fields\"], $collations, \"TABLE\", $foreign_keys);\n\techo \"</table>\\n\";\n\techo script(\"editFields();\");\n\techo \"</div>\\n<p>\\n\";\n\techo lang('Auto Increment') . \": <input type='number' name='Auto_increment' class='size' value='\" . h($row[\"Auto_increment\"]) . \"'>\\n\";\n\techo checkbox(\"defaults\", 1, ($_POST ? $_POST[\"defaults\"] : get_setting(\"defaults\")), lang('Default values'), \"columnShow(this.checked, 5)\", \"jsonly\");\n\t$comments = ($_POST ? $_POST[\"comments\"] : get_setting(\"comments\"));\n\techo (support(\"comment\")\n\t\t? checkbox(\"comments\", 1, $comments, lang('Comment'), \"editingCommentsClick(this, true);\", \"jsonly\")\n\t\t\t. ' ' . (preg_match('~\\n~', $row[\"Comment\"])\n\t\t\t\t? \"<textarea name='Comment' rows='2' cols='20'\" . ($comments ? \"\" : \" class='hidden'\") . \">\" . h($row[\"Comment\"]) . \"</textarea>\"\n\t\t\t\t: '<input name=\"Comment\" value=\"' . h($row[\"Comment\"]) . '\" data-maxlength=\"' . (min_version(5.5) ? 2048 : 60) . '\"' . ($comments ? \"\" : \" class='hidden'\") . '>'\n\t\t\t)\n\t\t: '')\n\t;\n\t?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php } ?>\n\n<?php if ($TABLE != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $TABLE)); ?>\n<?php } ?>\n<?php\nif ($partition_by && (JUSH == 'sql' || $TABLE == \"\")) {\n\t$partition_table = preg_match('~RANGE|LIST~', $row[\"partition_by\"]);\n\tprint_fieldset(\"partition\", lang('Partition by'), $row[\"partition_by\"]);\n\techo \"<p>\" . html_select(\"partition_by\", array_merge(array(\"\"), $partition_by), $row[\"partition_by\"]) . on_help(\"event.target.value.replace(/./, 'PARTITION BY \\$&')\", 1) . script(\"qsl('select').onchange = partitionByChange;\");\n\techo \"(<input name='partition' value='\" . h($row[\"partition\"]) . \"'>)\\n\";\n\techo lang('Partitions') . \": <input type='number' name='partitions' class='size\" . ($partition_table || !$row[\"partition_by\"] ? \" hidden\" : \"\") . \"' value='\" . h($row[\"partitions\"]) . \"'>\\n\";\n\techo \"<table id='partition-table'\" . ($partition_table ? \"\" : \" class='hidden'\") . \">\\n\";\n\techo \"<thead><tr><th>\" . lang('Partition name') . \"<th>\" . lang('Values') . \"</thead>\\n\";\n\tforeach ($row[\"partition_names\"] as $key => $val) {\n\t\techo '<tr>';\n\t\techo '<td><input name=\"partition_names[]\" value=\"' . h($val) . '\" autocapitalize=\"off\">';\n\t\techo ($key == count($row[\"partition_names\"]) - 1 ? script(\"qsl('input').oninput = partitionNameChange;\") : '');\n\t\techo '<td><input name=\"partition_values[]\" value=\"' . h(idx($row[\"partition_values\"], $key)) . '\">';\n\t}\n\techo \"</table>\\n</div></fieldset>\\n\";\n}\necho input_token();\n?>\n</form>\n"
  },
  {
    "path": "adminer/database.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$row = $_POST;\n\nif ($_POST && !$error && !$_POST[\"add\"]) {\n\t$name = trim($row[\"name\"]);\n\tif ($_POST[\"drop\"]) {\n\t\t$_GET[\"db\"] = \"\"; // to save in global history\n\t\tqueries_redirect(remove_from_uri(\"db|database\"), lang('Database has been dropped.'), drop_databases(array(DB)));\n\t} elseif (DB !== $name) {\n\t\t// create or rename database\n\t\tif (DB != \"\") {\n\t\t\t$_GET[\"db\"] = $name;\n\t\t\tqueries_redirect(preg_replace('~\\bdb=[^&]*&~', '', ME) . \"db=\" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $row[\"collation\"]));\n\t\t} else {\n\t\t\t$databases = explode(\"\\n\", str_replace(\"\\r\", \"\", $name));\n\t\t\t$success = true;\n\t\t\t$last = \"\";\n\t\t\tforeach ($databases as $db) {\n\t\t\t\tif (count($databases) == 1 || $db != \"\") { // ignore empty lines but always try to create single database\n\t\t\t\t\tif (!create_database($db, $row[\"collation\"])) {\n\t\t\t\t\t\t$success = false;\n\t\t\t\t\t}\n\t\t\t\t\t$last = $db;\n\t\t\t\t}\n\t\t\t}\n\t\t\trestart_session();\n\t\t\tset_session(\"dbs\", null);\n\t\t\tqueries_redirect(ME . \"db=\" . urlencode($last), lang('Database has been created.'), $success);\n\t\t}\n\t} else {\n\t\t// alter database\n\t\tif (!$row[\"collation\"]) {\n\t\t\tredirect(substr(ME, 0, -1));\n\t\t}\n\t\tquery_redirect(\"ALTER DATABASE \" . idf_escape($name) . (preg_match('~^[a-z0-9_]+$~i', $row[\"collation\"]) ? \" COLLATE $row[collation]\" : \"\"), substr(ME, 0, -1), lang('Database has been altered.'));\n\t}\n}\n\npage_header(DB != \"\" ? lang('Alter database') : lang('Create database'), $error, array(), h(DB));\n\n$collations = collations();\n$name = DB;\nif ($_POST) {\n\t$name = $row[\"name\"];\n} elseif (DB != \"\") {\n\t$row[\"collation\"] = db_collation(DB, $collations);\n} elseif (JUSH == \"sql\") {\n\t// propose database name with limited privileges\n\tforeach (get_vals(\"SHOW GRANTS\") as $grant) {\n\t\tif (preg_match('~ ON (`(([^\\\\\\\\`]|``|\\\\\\\\.)*)%`\\.\\*)?~', $grant, $match) && $match[1]) {\n\t\t\t$name = stripcslashes(idf_unescape(\"`$match[2]`\"));\n\t\t\tbreak;\n\t\t}\n\t}\n}\n?>\n\n<form action=\"\" method=\"post\">\n<p>\n<?php\necho ($_POST[\"add\"] || strpos($name, \"\\n\")\n\t? '<textarea autofocus name=\"name\" rows=\"10\" cols=\"40\">' . h($name) . '</textarea><br>'\n\t: '<input name=\"name\" autofocus value=\"' . h($name) . '\" data-maxlength=\"64\" autocapitalize=\"off\">'\n) . \"\\n\" . ($collations ? html_select(\"collation\", array(\"\" => \"(\" . lang('collation') . \")\") + $collations, $row[\"collation\"]) . doc_link(array(\n\t'sql' => \"charset-charsets.html\",\n\t'mariadb' => \"supported-character-sets-and-collations/\",\n\t'mssql' => \"relational-databases/system-functions/sys-fn-helpcollations-transact-sql\",\n)) : \"\");\n?>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php\nif (DB != \"\") {\n\techo \"<input type='submit' name='drop' value='\" . lang('Drop') . \"'>\" . confirm(lang('Drop %s?', DB)) . \"\\n\";\n} elseif (!$_POST[\"add\"] && $_GET[\"db\"] == \"\") {\n\techo icon(\"plus\", \"add[0]\", \"+\", lang('Add next')) . \"\\n\";\n}\necho input_token();\n?>\n</form>\n"
  },
  {
    "path": "adminer/db.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$tables_views = array_merge((array) $_POST[\"tables\"], (array) $_POST[\"views\"]);\n\nif ($tables_views && !$error && !$_POST[\"search\"]) {\n\t$result = true;\n\t$message = \"\";\n\tif (JUSH == \"sql\" && $_POST[\"tables\"] && count($_POST[\"tables\"]) > 1 && ($_POST[\"drop\"] || $_POST[\"truncate\"] || $_POST[\"copy\"])) {\n\t\tqueries(\"SET foreign_key_checks = 0\"); // allows to truncate or drop several tables at once\n\t}\n\n\tif ($_POST[\"truncate\"]) {\n\t\tif ($_POST[\"tables\"]) {\n\t\t\t$result = truncate_tables($_POST[\"tables\"]);\n\t\t}\n\t\t$message = lang('Tables have been truncated.');\n\t} elseif ($_POST[\"move\"]) {\n\t\t$result = move_tables((array) $_POST[\"tables\"], (array) $_POST[\"views\"], $_POST[\"target\"]);\n\t\t$message = lang('Tables have been moved.');\n\t} elseif ($_POST[\"copy\"]) {\n\t\t$result = copy_tables((array) $_POST[\"tables\"], (array) $_POST[\"views\"], $_POST[\"target\"]);\n\t\t$message = lang('Tables have been copied.');\n\t} elseif ($_POST[\"drop\"]) {\n\t\tif ($_POST[\"views\"]) {\n\t\t\t$result = drop_views($_POST[\"views\"]);\n\t\t}\n\t\tif ($result && $_POST[\"tables\"]) {\n\t\t\t$result = drop_tables($_POST[\"tables\"]);\n\t\t}\n\t\t$message = lang('Tables have been dropped.');\n\t} elseif (JUSH == \"sqlite\" && $_POST[\"check\"]) {\n\t\tforeach ((array) $_POST[\"tables\"] as $table) {\n\t\t\tforeach (get_rows(\"PRAGMA integrity_check(\" . q($table) . \")\") as $row) {\n\t\t\t\t$message .= \"<b>\" . h($table) . \"</b>: \" . h($row[\"integrity_check\"]) . \"<br>\";\n\t\t\t}\n\t\t}\n\t} elseif (JUSH != \"sql\") {\n\t\t$result = (JUSH == \"sqlite\"\n\t\t\t? queries(\"VACUUM\")\n\t\t\t: apply_queries(\"VACUUM\" . ($_POST[\"optimize\"] ? \" ANALYZE\" : \"\"), $_POST[\"tables\"])\n\t\t);\n\t\t$message = lang('Tables have been optimized.');\n\t} elseif (!$_POST[\"tables\"]) {\n\t\t$message = lang('No tables.');\n\t} elseif ($result = queries(($_POST[\"optimize\"] ? \"OPTIMIZE\" : ($_POST[\"check\"] ? \"CHECK\" : ($_POST[\"repair\"] ? \"REPAIR\" : \"ANALYZE\"))) . \" TABLE \" . implode(\", \", array_map('Adminer\\idf_escape', $_POST[\"tables\"])))) {\n\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t$message .= \"<b>\" . h($row[\"Table\"]) . \"</b>: \" . h($row[\"Msg_text\"]) . \"<br>\";\n\t\t}\n\t}\n\n\tqueries_redirect($_SERVER[\"REQUEST_URI\"], $message, $result);\n}\n\npage_header(($_GET[\"ns\"] == \"\" ? lang('Database') . \": \" . h(DB) : lang('Schema') . \": \" . h($_GET[\"ns\"])), $error, true);\n\nif (adminer()->homepage()) {\n\tif ($_GET[\"ns\"] !== \"\") {\n\t\t$order = $_GET[\"order\"];\n\t\techo \"<h3 id='tables-views'>\" . lang('Tables and views') . \"</h3>\\n\";\n\t\t$tables_list = ($order ? table_status() : tables_list());\n\t\tif (!$tables_list) {\n\t\t\techo \"<p class='message'>\" . lang('No tables.') . \"\\n\";\n\t\t} else {\n\t\t\techo \"<form action='' method='post'>\\n\";\n\t\t\tif (support(\"table\")) {\n\t\t\t\techo \"<fieldset><legend>\" . lang('Search data in tables') . \" <span id='selected2'></span></legend><div>\";\n\t\t\t\techo html_select(\"op\", adminer()->operators(), idx($_POST, \"op\", JUSH == \"elastic\" ? \"should\" : \"LIKE %%\"));\n\t\t\t\techo \" <input type='search' name='query' value='\" . h($_POST[\"query\"]) . \"'>\";\n\t\t\t\techo script(\"qsl('input').onkeydown = partialArg(bodyKeydown, 'search');\", \"\");\n\t\t\t\techo \" <input type='submit' name='search' value='\" . lang('Search') . \"'>\\n\";\n\t\t\t\techo \"</div></fieldset>\\n\";\n\t\t\t\tif ($_POST[\"search\"] && $_POST[\"query\"] != \"\") {\n\t\t\t\t\t$_GET[\"where\"][0][\"op\"] = $_POST[\"op\"];\n\t\t\t\t\tsearch_tables();\n\t\t\t\t}\n\t\t\t}\n\t\t\techo \"<div class='scrollable'>\\n\";\n\t\t\techo \"<table class='nowrap checkable odds'>\\n\";\n\t\t\techo script(\"mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});\");\n\t\t\techo '<thead><tr class=\"wrap\">';\n\t\t\techo '<td><input id=\"check-all\" type=\"checkbox\" class=\"jsonly\">' . script(\"qs('#check-all').onclick = partial(formCheck, /^(tables|views)\\[/);\", \"\");\n\t\t\techo '<th><a href=\"' . h(substr(ME, 0, -1)) . '\">' . lang('Table') . '</a>';\n\t\t\t$columns = array(\"Engine\" => array(lang('Engine') . doc_link(array('sql' => 'storage-engines.html'))));\n\t\t\tif (collations()) {\n\t\t\t\t$columns[\"Collation\"] = array(lang('Collation') . doc_link(array('sql' => 'charset-charsets.html', 'mariadb' => 'supported-character-sets-and-collations/')));\n\t\t\t}\n\t\t\tif (function_exists('Adminer\\alter_table')) {\n\t\t\t\t$columns[\"Data_length\"] = array(lang('Data Length') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT', 'oracle' => 'REFRN20286')), \"create\", lang('Alter table'));\n\t\t\t}\n\t\t\tif (support('indexes')) {\n\t\t\t\t$columns[\"Index_length\"] = array(lang('Index Length') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT')), \"indexes\", lang('Alter indexes'));\n\t\t\t}\n\t\t\t$columns[\"Data_free\"] = array(lang('Data Free') . doc_link(array('sql' => 'show-table-status.html')), \"edit\", lang('New item'));\n\t\t\tif (function_exists('Adminer\\alter_table')) {\n\t\t\t\t$columns[\"Auto_increment\"] = array(lang('Auto Increment') . doc_link(array('sql' => 'example-auto-increment.html', 'mariadb' => 'auto_increment/')), \"auto_increment=1&create\", lang('Alter table'));\n\t\t\t}\n\t\t\t$columns[\"Rows\"] = array(lang('Rows') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'catalog-pg-class.html#CATALOG-PG-CLASS', 'oracle' => 'REFRN20286')), \"select\", lang('Select data'));\n\t\t\tif (support(\"comment\")) {\n\t\t\t\t$columns[\"Comment\"] = array(lang('Comment') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE')));\n\t\t\t}\n\t\t\tforeach ($columns as $key => $column) {\n\t\t\t\techo \"<th><a href='\" . h(ME) . \"order=$key'>$column[0]</a>\";\n\t\t\t}\n\t\t\techo \"</thead>\\n\";\n\n\t\t\tif ($order) {\n\t\t\t\tuasort($tables_list, function ($a, $b) use ($order) {\n\t\t\t\t\t$return = ($a[$order] < $b[$order] ? -1 : ($a[$order] > $b[$order] ? 1 : 0)); // <=> available since PHP 7.1\n\t\t\t\t\treturn (in_array($order, array('Engine', 'Collation', 'Comment')) ? $return : -$return);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$tables = 0;\n\t\t\tforeach ($tables_list as $name => $status) {\n\t\t\t\t$view = ($order ? is_view($status) : $status !== null && !preg_match('~table|sequence~i', $status));\n\t\t\t\t$status = ($order ? $status : array('Engine' => $status));\n\t\t\t\t$id = h(\"Table-\" . $name);\n\t\t\t\techo '<tr><td>' . checkbox(($view ? \"views[]\" : \"tables[]\"), $name, in_array(\"$name\", $tables_views, true), \"\", \"\", \"\", $id); // \"$name\" to check numeric table names\n\t\t\t\techo '<th>' . (support(\"table\") || support(\"indexes\") ? \"<a href='\" . h(ME) . \"table=\" . urlencode($name) . \"' title='\" . lang('Show structure') . \"' id='$id'>\" . h($name) . '</a>' : h($name));\n\t\t\t\tif ($view && !preg_match('~materialized~i', $status['Engine'])) {\n\t\t\t\t\t$title = lang('View');\n\t\t\t\t\techo '<td colspan=\"' . (count($columns) - 2) . '\">' . (support(\"view\") ? \"<a href='\" . h(ME) . \"view=\" . urlencode($name) . \"' title='\" . lang('Alter view') . \"'>$title</a>\" : $title);\n\t\t\t\t\techo '<td align=\"right\"><a href=\"' . h(ME) . \"select=\" . urlencode($name) . '\" title=\"' . lang('Select data') . '\">?</a>';\n\t\t\t\t\techo '<td>' . h($status['Comment']);\n\t\t\t\t} else {\n\t\t\t\t\tforeach ($columns as $key => $column) {\n\t\t\t\t\t\t$id = \" id='$key-\" . h($name) . \"'\";\n\t\t\t\t\t\t$val = idx($status, $key, '?');\n\t\t\t\t\t\techo ($column[1]\n\t\t\t\t\t\t\t? \"<td align='right'><a href='\" . h(ME . \"$column[1]=\") . urlencode($name) . \"'$id title='$column[2]'>\" . (is_numeric($val)\n\t\t\t\t\t\t\t\t? ($val < 0 ? '?' : ($key == \"Rows\" && $val && $status[\"Engine\"] == (JUSH == \"pgsql\" ? \"table\" : \"InnoDB\") ? '~ ' : '') . format_number($val))\n\t\t\t\t\t\t\t\t: $val\n\t\t\t\t\t\t\t) . \"</a>\"\n\t\t\t\t\t\t\t: \"<td id='$key-\" . h($name) . \"'>\" . h($val)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t$tables++;\n\t\t\t\t}\n\t\t\t\techo \"\\n\";\n\t\t\t}\n\n\t\t\techo \"<tr><td><th>\" . lang('%d in total', count($tables_list));\n\t\t\techo \"<td>\" . h(JUSH == \"sql\" ? get_val(\"SELECT @@default_storage_engine\") : \"\");\n\t\t\techo (collations() ? \"<td>\" . h(db_collation(DB, collations())) : '');\n\t\t\tforeach (array(\"Data_length\", \"Index_length\", \"Data_free\") as $key) {\n\t\t\t\techo ($columns[$key] ? \"<td align='right' id='sum-$key'>\" : \"\");\n\t\t\t}\n\t\t\techo \"\\n\";\n\n\t\t\techo \"</table>\\n\";\n\t\t\techo ($order ? '' : script(\"ajaxSetHtml('\" . js_escape(ME) . \"script=db');\"));\n\t\t\techo \"</div>\\n\";\n\t\t\tif (!information_schema(DB)) {\n\t\t\t\t$vacuum = \"<input type='submit' value='\" . lang('Vacuum') . \"'> \" . on_help(\"'VACUUM'\");\n\t\t\t\t$optimize = \"<input type='submit' name='optimize' value='\" . lang('Optimize') . \"'> \" . on_help(JUSH == \"sql\" ? \"'OPTIMIZE TABLE'\" : \"'VACUUM ANALYZE'\");\n\t\t\t\t$print = (JUSH == \"sqlite\" ? $vacuum . \"<input type='submit' name='check' value='\" . lang('Check') . \"'> \" . on_help(\"'PRAGMA integrity_check'\")\n\t\t\t\t: (JUSH == \"pgsql\" ? $vacuum . $optimize\n\t\t\t\t: (JUSH == \"sql\" ? \"<input type='submit' value='\" . lang('Analyze') . \"'> \" . on_help(\"'ANALYZE TABLE'\")\n\t\t\t\t\t. $optimize\n\t\t\t\t\t. \"<input type='submit' name='check' value='\" . lang('Check') . \"'> \" . on_help(\"'CHECK TABLE'\")\n\t\t\t\t\t. \"<input type='submit' name='repair' value='\" . lang('Repair') . \"'> \" . on_help(\"'REPAIR TABLE'\")\n\t\t\t\t: \"\")))\n\t\t\t\t. (function_exists('Adminer\\truncate_tables') ? \"<input type='submit' name='truncate' value='\" . lang('Truncate') . \"'> \" . on_help(JUSH == \"sqlite\" ? \"'DELETE'\" : \"'TRUNCATE\" . (JUSH == \"pgsql\" ? \"'\" : \" TABLE'\")) . confirm() : \"\")\n\t\t\t\t. (function_exists('Adminer\\drop_tables') ? \"<input type='submit' name='drop' value='\" . lang('Drop') . \"'>\" . on_help(\"'DROP TABLE'\") . confirm() : \"\");\n\t\t\t\techo ($print ? \"<div class='footer'><div>\\n<fieldset><legend>\" . lang('Selected') . \" <span id='selected'></span></legend><div>$print\\n</div></fieldset>\\n\" : \"\");\n\n\t\t\t\t$databases = (support(\"scheme\") ? adminer()->schemas() : adminer()->databases());\n\t\t\t\t$script = \"\";\n\t\t\t\tif (count($databases) != 1 && JUSH != \"sqlite\") {\n\t\t\t\t\techo \"<fieldset><legend>\" . lang('Move to other database') . \" <span id='selected3'></span></legend><div>\";\n\t\t\t\t\t$db = (isset($_POST[\"target\"]) ? $_POST[\"target\"] : (support(\"scheme\") ? $_GET[\"ns\"] : DB));\n\t\t\t\t\techo ($databases ? html_select(\"target\", $databases, $db) : '<input name=\"target\" value=\"' . h($db) . '\" autocapitalize=\"off\">');\n\t\t\t\t\techo \"</label> <input type='submit' name='move' value='\" . lang('Move') . \"'>\";\n\t\t\t\t\techo (support(\"copy\") ? \" <input type='submit' name='copy' value='\" . lang('Copy') . \"'> \" . checkbox(\"overwrite\", 1, $_POST[\"overwrite\"], lang('overwrite')) : \"\");\n\t\t\t\t\techo \"</div></fieldset>\\n\";\n\t\t\t\t\t$script = \" selectCount('selected3', formChecked(this, /^(tables|views)\\[/));\";\n\t\t\t\t}\n\t\t\t\techo \"<input type='hidden' name='all' value=''>\"; // used by trCheck()\n\t\t\t\techo script(\"qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^(tables|views)\\[/));\"\n\t\t\t\t\t. (support(\"table\") ? \" selectCount('selected2', formChecked(this, /^tables\\[/) || $tables);\" : \"\")\n\t\t\t\t\t. \"$script }\")\n\t\t\t\t;\n\t\t\t\techo input_token();\n\t\t\t\techo \"</div></div>\\n\";\n\t\t\t}\n\t\t\techo \"</form>\\n\";\n\t\t\techo script(\"tableCheck();\");\n\t\t}\n\n\t\techo (function_exists('Adminer\\alter_table') ? \"<p class='links'><a href='\" . h(ME) . \"create='>\" . lang('Create table') . \"</a>\\n\" : '');\n\t\techo (support(\"view\") ? \"<a href='\" . h(ME) . \"view='>\" . lang('Create view') . \"</a>\\n\" : \"\");\n\n\t\tif (support(\"routine\")) {\n\t\t\techo \"<h3 id='routines'>\" . lang('Routines') . \"</h3>\\n\";\n\t\t\t$routines = routines();\n\t\t\tif ($routines) {\n\t\t\t\techo \"<table class='odds'>\\n\";\n\t\t\t\techo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . \"<td></thead>\\n\";\n\t\t\t\tforeach ($routines as $row) {\n\t\t\t\t\t$name = ($row[\"SPECIFIC_NAME\"] == $row[\"ROUTINE_NAME\"] ? \"\" : \"&name=\" . urlencode($row[\"ROUTINE_NAME\"])); // not computed on the pages to be able to print the header first\n\t\t\t\t\techo '<tr>';\n\t\t\t\t\techo '<th><a href=\"' . h(ME . ($row[\"ROUTINE_TYPE\"] != \"PROCEDURE\" ? 'callf=' : 'call=') . urlencode($row[\"SPECIFIC_NAME\"]) . $name) . '\">' . h($row[\"ROUTINE_NAME\"]) . '</a>';\n\t\t\t\t\techo '<td>' . h($row[\"ROUTINE_TYPE\"]);\n\t\t\t\t\techo '<td>' . h($row[\"DTD_IDENTIFIER\"]);\n\t\t\t\t\techo '<td><a href=\"' . h(ME . ($row[\"ROUTINE_TYPE\"] != \"PROCEDURE\" ? 'function=' : 'procedure=') . urlencode($row[\"SPECIFIC_NAME\"]) . $name) . '\">' . lang('Alter') . \"</a>\";\n\t\t\t\t}\n\t\t\t\techo \"</table>\\n\";\n\t\t\t}\n\t\t\techo '<p class=\"links\">'\n\t\t\t\t. (support(\"procedure\") ? '<a href=\"' . h(ME) . 'procedure=\">' . lang('Create procedure') . '</a>' : '')\n\t\t\t\t. '<a href=\"' . h(ME) . 'function=\">' . lang('Create function') . \"</a>\\n\"\n\t\t\t;\n\t\t}\n\n\t\tif (support(\"sequence\")) {\n\t\t\techo \"<h3 id='sequences'>\" . lang('Sequences') . \"</h3>\\n\";\n\t\t\t$sequences = get_vals(\"SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name\");\n\t\t\tif ($sequences) {\n\t\t\t\techo \"<table class='odds'>\\n\";\n\t\t\t\techo \"<thead><tr><th>\" . lang('Name') . \"</thead>\\n\";\n\t\t\t\tforeach ($sequences as $val) {\n\t\t\t\t\techo \"<tr><th><a href='\" . h(ME) . \"sequence=\" . urlencode($val) . \"'>\" . h($val) . \"</a>\\n\";\n\t\t\t\t}\n\t\t\t\techo \"</table>\\n\";\n\t\t\t}\n\t\t\techo \"<p class='links'><a href='\" . h(ME) . \"sequence='>\" . lang('Create sequence') . \"</a>\\n\";\n\t\t}\n\n\t\tif (support(\"type\")) {\n\t\t\techo \"<h3 id='user-types'>\" . lang('User types') . \"</h3>\\n\";\n\t\t\t$user_types = types();\n\t\t\tif ($user_types) {\n\t\t\t\techo \"<table class='odds'>\\n\";\n\t\t\t\techo \"<thead><tr><th>\" . lang('Name') . \"</thead>\\n\";\n\t\t\t\tforeach ($user_types as $val) {\n\t\t\t\t\techo \"<tr><th><a href='\" . h(ME) . \"type=\" . urlencode($val) . \"'>\" . h($val) . \"</a>\\n\";\n\t\t\t\t}\n\t\t\t\techo \"</table>\\n\";\n\t\t\t}\n\t\t\techo \"<p class='links'><a href='\" . h(ME) . \"type='>\" . lang('Create type') . \"</a>\\n\";\n\t\t}\n\n\t\tif (support(\"event\")) {\n\t\t\techo \"<h3 id='events'>\" . lang('Events') . \"</h3>\\n\";\n\t\t\t$rows = get_rows(\"SHOW EVENTS\");\n\t\t\tif ($rows) {\n\t\t\t\techo \"<table>\\n\";\n\t\t\t\techo \"<thead><tr><th>\" . lang('Name') . \"<td>\" . lang('Schedule') . \"<td>\" . lang('Start') . \"<td>\" . lang('End') . \"<td></thead>\\n\";\n\t\t\t\tforeach ($rows as $row) {\n\t\t\t\t\techo \"<tr>\";\n\t\t\t\t\techo \"<th>\" . h($row[\"Name\"]);\n\t\t\t\t\techo \"<td>\" . ($row[\"Execute at\"] ? lang('At given time') . \"<td>\" . $row[\"Execute at\"] : lang('Every') . \" \" . $row[\"Interval value\"] . \" \" . $row[\"Interval field\"] . \"<td>$row[Starts]\");\n\t\t\t\t\techo \"<td>$row[Ends]\";\n\t\t\t\t\techo '<td><a href=\"' . h(ME) . 'event=' . urlencode($row[\"Name\"]) . '\">' . lang('Alter') . '</a>';\n\t\t\t\t}\n\t\t\t\techo \"</table>\\n\";\n\t\t\t\t$event_scheduler = get_val(\"SELECT @@event_scheduler\");\n\t\t\t\tif ($event_scheduler && $event_scheduler != \"ON\") {\n\t\t\t\t\techo \"<p class='error'><code class='jush-sqlset'>event_scheduler</code>: \" . h($event_scheduler) . \"\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t\techo '<p class=\"links\"><a href=\"' . h(ME) . 'event=\">' . lang('Create event') . \"</a>\\n\";\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "adminer/designs.php",
    "content": "<?php\nfunction adminer_object() {\n\tinclude_once \"../plugins/designs.php\";\n\t$designs = array();\n\tforeach (glob(\"../designs/*/*.css\") as $filename) {\n\t\t$designs[$filename] = basename(dirname($filename));\n\t}\n\treturn new Adminer\\Plugins(array(\n\t\tnew AdminerDesigns($designs),\n\t));\n}\n\ninclude \"./index.php\";\n"
  },
  {
    "path": "adminer/download.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"download\"];\n$fields = fields($TABLE);\nheader(\"Content-Type: application/octet-stream\");\nheader(\"Content-Disposition: attachment; filename=\" . friendly_url(\"$TABLE-\" . implode(\"_\", $_GET[\"where\"])) . \".\" . friendly_url($_GET[\"field\"]));\n$select = array(idf_escape($_GET[\"field\"]));\n$result = driver()->select($TABLE, $select, array(where($_GET, $fields)), $select);\n$row = ($result ? $result->fetch_row() : array());\necho driver()->value($row[0], $fields[$_GET[\"field\"]]);\nexit; // don't output footer\n"
  },
  {
    "path": "adminer/drivers/mssql.inc.php",
    "content": "<?php\n/**\n* @author Jakub Cernohuby\n* @author Vladimir Stastka\n* @author Jakub Vrana\n*/\n\nnamespace Adminer;\n\nadd_driver(\"mssql\", \"MS SQL\");\n\nif (isset($_GET[\"mssql\"])) {\n\tdefine('Adminer\\DRIVER', \"mssql\");\n\n\tif (extension_loaded(\"sqlsrv\") && $_GET[\"ext\"] != \"pdo\") {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"sqlsrv\";\n\t\t\tprivate $link, $result;\n\n\t\t\tprivate function get_error() {\n\t\t\t\t$this->error = \"\";\n\t\t\t\tforeach (sqlsrv_errors() as $error) {\n\t\t\t\t\t$this->errno = $error[\"code\"];\n\t\t\t\t\t$this->error .= \"$error[message]\\n\";\n\t\t\t\t}\n\t\t\t\t$this->error = rtrim($this->error);\n\t\t\t}\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t$connection_info = array(\"UID\" => $username, \"PWD\" => $password, \"CharacterSet\" => \"UTF-8\");\n\t\t\t\t$ssl = adminer()->connectSsl();\n\t\t\t\tif (isset($ssl[\"Encrypt\"])) {\n\t\t\t\t\t$connection_info[\"Encrypt\"] = $ssl[\"Encrypt\"];\n\t\t\t\t}\n\t\t\t\tif (isset($ssl[\"TrustServerCertificate\"])) {\n\t\t\t\t\t$connection_info[\"TrustServerCertificate\"] = $ssl[\"TrustServerCertificate\"];\n\t\t\t\t}\n\t\t\t\t$db = adminer()->database();\n\t\t\t\tif ($db != \"\") {\n\t\t\t\t\t$connection_info[\"Database\"] = $db;\n\t\t\t\t}\n\t\t\t\tlist($host, $port) = host_port($server);\n\t\t\t\t$this->link = @sqlsrv_connect($host . ($port ? \",$port\" : \"\"), $connection_info);\n\t\t\t\tif ($this->link) {\n\t\t\t\t\t$info = sqlsrv_server_info($this->link);\n\t\t\t\t\t$this->server_info = $info['SQLServerVersion'];\n\t\t\t\t} else {\n\t\t\t\t\t$this->get_error();\n\t\t\t\t}\n\t\t\t\treturn ($this->link ? '' : $this->error);\n\t\t\t}\n\n\t\t\tfunction quote(string $string): string {\n\t\t\t\t$unicode = strlen($string) != strlen(utf8_decode($string));\n\t\t\t\treturn ($unicode ? \"N\" : \"\") . \"'\" . str_replace(\"'\", \"''\", $string) . \"'\";\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\treturn $this->query(use_sql($database));\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$result = sqlsrv_query($this->link, $query); //! , array(), ($unbuffered ? array() : array(\"Scrollable\" => \"keyset\"))\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$this->get_error();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn $this->store_result($result);\n\t\t\t}\n\n\t\t\tfunction multi_query(string $query) {\n\t\t\t\t$this->result = sqlsrv_query($this->link, $query);\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif (!$this->result) {\n\t\t\t\t\t$this->get_error();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction store_result($result = null) {\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$result = $this->result;\n\t\t\t\t}\n\t\t\t\tif (!$result) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (sqlsrv_field_metadata($result)) {\n\t\t\t\t\treturn new Result($result);\n\t\t\t\t}\n\t\t\t\t$this->affected_rows = sqlsrv_rows_affected($result);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction next_result(): bool {\n\t\t\t\treturn $this->result ? !!sqlsrv_next_result($this->result) : false;\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $result, $offset = 0, $fields;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t\t// $this->num_rows = sqlsrv_num_rows($result); // available only in scrollable results\n\t\t\t}\n\n\t\t\tprivate function convert($row) {\n\t\t\t\tforeach ((array) $row as $key => $val) {\n\t\t\t\t\tif (is_a($val, 'DateTime')) {\n\t\t\t\t\t\t$row[$key] = $val->format(\"Y-m-d H:i:s\");\n\t\t\t\t\t}\n\t\t\t\t\t//! stream\n\t\t\t\t}\n\t\t\t\treturn $row;\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\treturn $this->convert(sqlsrv_fetch_array($this->result, SQLSRV_FETCH_ASSOC));\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\treturn $this->convert(sqlsrv_fetch_array($this->result, SQLSRV_FETCH_NUMERIC));\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\tif (!$this->fields) {\n\t\t\t\t\t$this->fields = sqlsrv_field_metadata($this->result);\n\t\t\t\t}\n\t\t\t\t$field = $this->fields[$this->offset++];\n\t\t\t\t$return = new \\stdClass;\n\t\t\t\t$return->name = $field[\"Name\"];\n\t\t\t\t$return->type = ($field[\"Type\"] == 1 ? 254 : 15);\n\t\t\t\t$return->charsetnr = 0;\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction seek($offset) {\n\t\t\t\tfor ($i=0; $i < $offset; $i++) {\n\t\t\t\t\tsqlsrv_fetch($this->result); // SQLSRV_SCROLL_ABSOLUTE added in sqlsrv 1.1\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction __destruct() {\n\t\t\t\tsqlsrv_free_stmt($this->result);\n\t\t\t}\n\t\t}\n\n\t\tfunction last_id($result) {\n\t\t\treturn get_val(\"SELECT SCOPE_IDENTITY()\"); // @@IDENTITY can return trigger INSERT\n\t\t}\n\n\t\tfunction explain($connection, $query) {\n\t\t\t$connection->query(\"SET SHOWPLAN_ALL ON\");\n\t\t\t$return = $connection->query($query);\n\t\t\t$connection->query(\"SET SHOWPLAN_ALL OFF\"); // connection is used also for indexes\n\t\t\treturn $return;\n\t\t}\n\n\t} else {\n\t\tabstract class MssqlDb extends PdoDb {\n\t\t\tfunction select_db(string $database) {\n\t\t\t\t// database selection is separated from the connection so dbname in DSN can't be used\n\t\t\t\treturn $this->query(use_sql($database));\n\t\t\t}\n\n\t\t\tfunction lastInsertId() {\n\t\t\t\treturn $this->pdo->lastInsertId();\n\t\t\t}\n\t\t}\n\n\t\tfunction last_id($result) {\n\t\t\treturn connection()->lastInsertId();\n\t\t}\n\n\t\tfunction explain($connection, $query) {\n\t\t}\n\n\t\tif (extension_loaded(\"pdo_sqlsrv\")) {\n\t\t\tclass Db extends MssqlDb {\n\t\t\t\tpublic $extension = \"PDO_SQLSRV\";\n\n\t\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t\tlist($host, $port) = host_port($server);\n\t\t\t\t\treturn $this->dsn(\"sqlsrv:Server=$host\" . ($port ? \",$port\" : \"\"), $username, $password);\n\t\t\t\t}\n\t\t\t}\n\n\t\t} elseif (extension_loaded(\"pdo_dblib\")) {\n\t\t\tclass Db extends MssqlDb {\n\t\t\t\tpublic $extension = \"PDO_DBLIB\";\n\n\t\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t\tlist($host, $port) = host_port($server);\n\t\t\t\t\treturn $this->dsn(\"dblib:charset=utf8;host=$host\" . ($port ? (is_numeric($port) ? \";port=\" : \";unix_socket=\") . $port : \"\"), $username, $password);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"SQLSRV\", \"PDO_SQLSRV\", \"PDO_DBLIB\");\n\t\tstatic $jush = \"mssql\";\n\n\t\tpublic $insertFunctions = array(\"date|time\" => \"getdate\");\n\t\tpublic $editFunctions = array(\n\t\t\t\"int|decimal|real|float|money|datetime\" => \"+/-\",\n\t\t\t\"char|text\" => \"+\",\n\t\t);\n\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"LIKE\", \"LIKE %%\", \"IN\", \"IS NULL\", \"NOT LIKE\", \"NOT IN\", \"IS NOT NULL\");\n\t\tpublic $functions = array(\"len\", \"lower\", \"round\", \"upper\");\n\t\tpublic $grouping = array(\"avg\", \"count\", \"count distinct\", \"max\", \"min\", \"sum\");\n\t\tpublic $generated = array(\"PERSISTED\", \"VIRTUAL\");\n\t\tpublic $onActions = \"NO ACTION|CASCADE|SET NULL|SET DEFAULT\";\n\n\t\tstatic function connect(string $server, string $username, string $password) {\n\t\t\tif ($server == \"\") {\n\t\t\t\t$server = \"localhost:1433\";\n\t\t\t}\n\t\t\treturn parent::connect($server, $username, $password);\n\t\t}\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\t$this->types = array( //! use sys.types\n\t\t\t\tlang('Numbers') => array(\"tinyint\" => 3, \"smallint\" => 5, \"int\" => 10, \"bigint\" => 20, \"bit\" => 1, \"decimal\" => 0, \"real\" => 12, \"float\" => 53, \"smallmoney\" => 10, \"money\" => 20),\n\t\t\t\tlang('Date and time') => array(\"date\" => 10, \"smalldatetime\" => 19, \"datetime\" => 19, \"datetime2\" => 19, \"time\" => 8, \"datetimeoffset\" => 10),\n\t\t\t\tlang('Strings') => array(\"char\" => 8000, \"varchar\" => 8000, \"text\" => 2147483647, \"nchar\" => 4000, \"nvarchar\" => 4000, \"ntext\" => 1073741823),\n\t\t\t\tlang('Binary') => array(\"binary\" => 8000, \"varbinary\" => 8000, \"image\" => 2147483647),\n\t\t\t);\n\t\t}\n\n\t\tfunction insertUpdate(string $table, array $rows, array $primary) {\n\t\t\t$fields = fields($table);\n\t\t\t$update = array();\n\t\t\t$where = array();\n\t\t\t$set = reset($rows);\n\t\t\t$columns = \"c\" . implode(\", c\", range(1, count($set)));\n\t\t\t$c = 0;\n\t\t\t$insert = array();\n\t\t\tforeach ($set as $key => $val) {\n\t\t\t\t$c++;\n\t\t\t\t$name = idf_unescape($key);\n\t\t\t\tif (!$fields[$name][\"auto_increment\"]) {\n\t\t\t\t\t$insert[$key] = \"c$c\";\n\t\t\t\t}\n\t\t\t\tif (isset($primary[$name])) {\n\t\t\t\t\t$where[] = \"$key = c$c\";\n\t\t\t\t} else {\n\t\t\t\t\t$update[] = \"$key = c$c\";\n\t\t\t\t}\n\t\t\t}\n\t\t\t$values = array();\n\t\t\tforeach ($rows as $set) {\n\t\t\t\t$values[] = \"(\" . implode(\", \", $set) . \")\";\n\t\t\t}\n\t\t\tif ($where) {\n\t\t\t\t$identity = queries(\"SET IDENTITY_INSERT \" . table($table) . \" ON\");\n\t\t\t\t$return = queries(\n\t\t\t\t\t\"MERGE \" . table($table) . \" USING (VALUES\\n\\t\" . implode(\",\\n\\t\", $values) . \"\\n) AS source ($columns) ON \" . implode(\" AND \", $where) //! source, c1 - possible conflict\n\t\t\t\t\t. ($update ? \"\\nWHEN MATCHED THEN UPDATE SET \" . implode(\", \", $update) : \"\")\n\t\t\t\t\t. \"\\nWHEN NOT MATCHED THEN INSERT (\" . implode(\", \", array_keys($identity ? $set : $insert)) . \") VALUES (\" . ($identity ? $columns : implode(\", \", $insert)) . \");\" // ; is mandatory\n\t\t\t\t);\n\t\t\t\tif ($identity) {\n\t\t\t\t\tqueries(\"SET IDENTITY_INSERT \" . table($table) . \" OFF\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$return = queries(\"INSERT INTO \" . table($table) . \" (\" . implode(\", \", array_keys($set)) . \") VALUES\\n\" . implode(\",\\n\", $values));\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction begin() {\n\t\t\treturn queries(\"BEGIN TRANSACTION\");\n\t\t}\n\n\t\tfunction tableHelp(string $name, bool $is_view = false) {\n\t\t\t$links = array(\n\t\t\t\t\"sys\" => \"catalog-views/sys-\",\n\t\t\t\t\"INFORMATION_SCHEMA\" => \"information-schema-views/\",\n\t\t\t);\n\t\t\t$link = $links[get_schema()];\n\t\t\tif ($link) {\n\t\t\t\treturn \"relational-databases/system-$link\" . preg_replace('~_~', '-', strtolower($name)) . \"-transact-sql\";\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tfunction idf_escape($idf) {\n\t\treturn \"[\" . str_replace(\"]\", \"]]\", $idf) . \"]\";\n\t}\n\n\tfunction table($idf) {\n\t\treturn ($_GET[\"ns\"] != \"\" ? idf_escape($_GET[\"ns\"]) . \".\" : \"\") . idf_escape($idf);\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn get_vals(\"SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')\");\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn ($limit ? \" TOP (\" . ($limit + $offset) . \")\" : \"\") . \" $query$where\"; // seek later\n\t}\n\n\tfunction limit1($table, $query, $where, $separator = \"\\n\") {\n\t\treturn limit($query, $where, 1, 0, $separator);\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t\treturn get_val(\"SELECT collation_name FROM sys.databases WHERE name = \" . q($db));\n\t}\n\n\tfunction logged_user() {\n\t\treturn get_val(\"SELECT SUSER_NAME()\");\n\t}\n\n\tfunction tables_list() {\n\t\treturn 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\");\n\t}\n\n\tfunction count_tables($databases) {\n\t\t$return = array();\n\t\tforeach ($databases as $db) {\n\t\t\tconnection()->select_db($db);\n\t\t\t$return[$db] = get_val(\"SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES\");\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction table_status($name = \"\") {\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_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\nFROM sys.all_objects AS ao\nWHERE schema_id = SCHEMA_ID(\" . q(get_schema()) . \") AND type IN ('S', 'U', 'V') \" . ($name != \"\" ? \"AND name = \" . q($name) : \"ORDER BY name\")) as $row\n\t\t) {\n\t\t\t$return[$row[\"Name\"]] = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn $table_status[\"Engine\"] == \"VIEW\";\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn true;\n\t}\n\n\tfunction fields($table) {\n\t\t$comments = get_key_vals(\"SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', \" . q(get_schema()) . \", 'table', \" . q($table) . \", 'column', NULL)\");\n\t\t$return = array();\n\t\t$table_id = 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($table));\n\t\tforeach (\n\t\t\tget_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\nFROM sys.all_columns c\nJOIN sys.types t ON c.user_type_id = t.user_type_id\nLEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id\nLEFT JOIN sys.index_columns ic ON c.object_id = ic.object_id AND c.column_id = ic.column_id\nLEFT JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id\nWHERE c.object_id = \" . q($table_id)) as $row\n\t\t) {\n\t\t\t$type = $row[\"type\"];\n\t\t\t$length = (preg_match(\"~char|binary~\", $type)\n\t\t\t\t? intval($row[\"max_length\"]) / ($type[0] == 'n' ? 2 : 1)\n\t\t\t\t: ($type == \"decimal\" ? \"$row[precision],$row[scale]\" : \"\")\n\t\t\t);\n\t\t\t$return[$row[\"name\"]] = array(\n\t\t\t\t\"field\" => $row[\"name\"],\n\t\t\t\t\"full_type\" => $type . ($length ? \"($length)\" : \"\"),\n\t\t\t\t\"type\" => $type,\n\t\t\t\t\"length\" => $length,\n\t\t\t\t\"default\" => (preg_match(\"~^\\('(.*)'\\)$~\", $row[\"default\"], $match) ? str_replace(\"''\", \"'\", $match[1]) : $row[\"default\"]),\n\t\t\t\t\"default_constraint\" => $row[\"default_constraint\"],\n\t\t\t\t\"null\" => $row[\"is_nullable\"],\n\t\t\t\t\"auto_increment\" => $row[\"is_identity\"],\n\t\t\t\t\"collation\" => $row[\"collation_name\"],\n\t\t\t\t\"privileges\" => array(\"insert\" => 1, \"select\" => 1, \"update\" => 1, \"where\" => 1, \"order\" => 1),\n\t\t\t\t\"primary\" => $row[\"is_primary_key\"],\n\t\t\t\t\"comment\" => $comments[$row[\"name\"]],\n\t\t\t);\n\t\t}\n\t\tforeach (get_rows(\"SELECT * FROM sys.computed_columns WHERE object_id = \" . q($table_id)) as $row) {\n\t\t\t$return[$row[\"name\"]][\"generated\"] = ($row[\"is_persisted\"] ? \"PERSISTED\" : \"VIRTUAL\");\n\t\t\t$return[$row[\"name\"]][\"default\"] = $row[\"definition\"];\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\t$return = array();\n\t\t// sp_statistics doesn't return information about primary key\n\t\tforeach (\n\t\t\tget_rows(\"SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key\nFROM sys.indexes i\nINNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id\nINNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id\nWHERE OBJECT_NAME(i.object_id) = \" . q($table), $connection2) as $row\n\t\t) {\n\t\t\t$name = $row[\"name\"];\n\t\t\t$return[$name][\"type\"] = ($row[\"is_primary_key\"] ? \"PRIMARY\" : ($row[\"is_unique\"] ? \"UNIQUE\" : \"INDEX\"));\n\t\t\t$return[$name][\"lengths\"] = array();\n\t\t\t$return[$name][\"columns\"][$row[\"key_ordinal\"]] = $row[\"column_name\"];\n\t\t\t$return[$name][\"descs\"][$row[\"key_ordinal\"]] = ($row[\"is_descending_key\"] ? '1' : null);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction view($name) {\n\t\treturn 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($name))));\n\t}\n\n\tfunction collations() {\n\t\t$return = array();\n\t\tforeach (get_vals(\"SELECT name FROM fn_helpcollations()\") as $collation) {\n\t\t\t$return[preg_replace('~_.*~', '', $collation)][] = $collation;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction information_schema($db) {\n\t\treturn get_schema() == \"INFORMATION_SCHEMA\";\n\t}\n\n\tfunction error() {\n\t\treturn nl_br(h(preg_replace('~^(\\[[^]]*])+~m', '', connection()->error)));\n\t}\n\n\tfunction create_database($db, $collation) {\n\t\treturn queries(\"CREATE DATABASE \" . idf_escape($db) . (preg_match('~^[a-z0-9_]+$~i', $collation) ? \" COLLATE $collation\" : \"\"));\n\t}\n\n\tfunction drop_databases($databases) {\n\t\treturn queries(\"DROP DATABASE \" . implode(\", \", array_map('Adminer\\idf_escape', $databases)));\n\t}\n\n\tfunction rename_database($name, $collation) {\n\t\tif (preg_match('~^[a-z0-9_]+$~i', $collation)) {\n\t\t\tqueries(\"ALTER DATABASE \" . idf_escape(DB) . \" COLLATE $collation\");\n\t\t}\n\t\tqueries(\"ALTER DATABASE \" . idf_escape(DB) . \" MODIFY NAME = \" . idf_escape($name));\n\t\treturn true; //! false negative \"The database name 'test2' has been set.\"\n\t}\n\n\tfunction auto_increment() {\n\t\treturn \" IDENTITY\" . ($_POST[\"Auto_increment\"] != \"\" ? \"(\" . number($_POST[\"Auto_increment\"]) . \",1)\" : \"\") . \" PRIMARY KEY\";\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\t$alter = array();\n\t\t$comments = array();\n\t\t$orig_fields = fields($table);\n\t\tforeach ($fields as $field) {\n\t\t\t$column = idf_escape($field[0]);\n\t\t\t$val = $field[1];\n\t\t\tif (!$val) {\n\t\t\t\t$alter[\"DROP\"][] = \" COLUMN $column\";\n\t\t\t} else {\n\t\t\t\t$val[1] = preg_replace(\"~( COLLATE )'(\\\\w+)'~\", '\\1\\2', $val[1]);\n\t\t\t\t$comments[$field[0]] = $val[5];\n\t\t\t\tunset($val[5]);\n\t\t\t\tif (preg_match('~ AS ~', $val[3])) {\n\t\t\t\t\tunset($val[1], $val[2]);\n\t\t\t\t}\n\t\t\t\tif ($field[0] == \"\") {\n\t\t\t\t\t$alter[\"ADD\"][] = \"\\n  \" . implode(\"\", $val) . ($table == \"\" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : \"\"); // 16 - strlen(\"  FOREIGN KEY ()\")\n\t\t\t\t} else {\n\t\t\t\t\t$default = $val[3];\n\t\t\t\t\tunset($val[3]); // default values are set separately\n\t\t\t\t\tunset($val[6]); //! identity can't be removed\n\t\t\t\t\tif ($column != $val[0]) {\n\t\t\t\t\t\tqueries(\"EXEC sp_rename \" . q(table($table) . \".$column\") . \", \" . q(idf_unescape($val[0])) . \", 'COLUMN'\");\n\t\t\t\t\t}\n\t\t\t\t\t$alter[\"ALTER COLUMN \" . implode(\"\", $val)][] = \"\";\n\t\t\t\t\t$orig_field = $orig_fields[$field[0]];\n\t\t\t\t\tif (default_value($orig_field) != $default) {\n\t\t\t\t\t\tif ($orig_field[\"default\"] !== null) {\n\t\t\t\t\t\t\t$alter[\"DROP\"][] = \" \" . idf_escape($orig_field[\"default_constraint\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($default) {\n\t\t\t\t\t\t\t$alter[\"ADD\"][] = \"\\n $default FOR $column\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ($table == \"\") {\n\t\t\treturn queries(\"CREATE TABLE \" . table($name) . \" (\" . implode(\",\", (array) $alter[\"ADD\"]) . \"\\n)\");\n\t\t}\n\t\tif ($table != $name) {\n\t\t\tqueries(\"EXEC sp_rename \" . q(table($table)) . \", \" . q($name));\n\t\t}\n\t\tif ($foreign) {\n\t\t\t$alter[\"\"] = $foreign;\n\t\t}\n\t\tforeach ($alter as $key => $val) {\n\t\t\tif (!queries(\"ALTER TABLE \" . table($name) . \" $key\" . implode(\",\", $val))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tforeach ($comments as $key => $val) {\n\t\t\t$comment = substr($val, 9); // 9 - strlen(\" COMMENT \")\n\t\t\tqueries(\"EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = \" . q(get_schema()) . \", @level1type = N'Table', @level1name = \" . q($name) . \", @level2type = N'Column', @level2name = \" . q($key));\n\t\t\tqueries(\"EXEC sp_addextendedproperty\n@name = N'MS_Description',\n@value = $comment,\n@level0type = N'Schema',\n@level0name = \" . q(get_schema()) . \",\n@level1type = N'Table',\n@level1name = \" . q($name) . \",\n@level2type = N'Column',\n@level2name = \" . q($key))\n\t\t\t;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction alter_indexes($table, $alter) {\n\t\t$index = array();\n\t\t$drop = array();\n\t\tforeach ($alter as $val) {\n\t\t\tif ($val[2] == \"DROP\") {\n\t\t\t\tif ($val[0] == \"PRIMARY\") { //! sometimes used also for UNIQUE\n\t\t\t\t\t$drop[] = idf_escape($val[1]);\n\t\t\t\t} else {\n\t\t\t\t\t$index[] = idf_escape($val[1]) . \" ON \" . table($table);\n\t\t\t\t}\n\t\t\t} elseif (\n\t\t\t\t!queries(($val[0] != \"PRIMARY\"\n\t\t\t\t\t? \"CREATE $val[0] \" . ($val[0] != \"INDEX\" ? \"INDEX \" : \"\") . idf_escape($val[1] != \"\" ? $val[1] : uniqid($table . \"_\")) . \" ON \" . table($table)\n\t\t\t\t\t: \"ALTER TABLE \" . table($table) . \" ADD PRIMARY KEY\"\n\t\t\t\t) . \" (\" . implode(\", \", $val[2]) . \")\")\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn (!$index || queries(\"DROP INDEX \" . implode(\", \", $index)))\n\t\t\t&& (!$drop || queries(\"ALTER TABLE \" . table($table) . \" DROP \" . implode(\", \", $drop)))\n\t\t;\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t}\n\n\tfunction foreign_keys($table) {\n\t\t$return = array();\n\t\t$on_actions = array(\"CASCADE\", \"NO ACTION\", \"SET NULL\", \"SET DEFAULT\");\n\t\tforeach (get_rows(\"EXEC sp_fkeys @fktable_name = \" . q($table) . \", @fktable_owner = \" . q(get_schema())) as $row) {\n\t\t\t$foreign_key = &$return[$row[\"FK_NAME\"]];\n\t\t\t$foreign_key[\"db\"] = $row[\"PKTABLE_QUALIFIER\"];\n\t\t\t$foreign_key[\"ns\"] = $row[\"PKTABLE_OWNER\"];\n\t\t\t$foreign_key[\"table\"] = $row[\"PKTABLE_NAME\"];\n\t\t\t$foreign_key[\"on_update\"] = $on_actions[$row[\"UPDATE_RULE\"]];\n\t\t\t$foreign_key[\"on_delete\"] = $on_actions[$row[\"DELETE_RULE\"]];\n\t\t\t$foreign_key[\"source\"][] = $row[\"FKCOLUMN_NAME\"];\n\t\t\t$foreign_key[\"target\"][] = $row[\"PKCOLUMN_NAME\"];\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\treturn apply_queries(\"TRUNCATE TABLE\", $tables);\n\t}\n\n\tfunction drop_views($views) {\n\t\treturn queries(\"DROP VIEW \" . implode(\", \", array_map('Adminer\\table', $views)));\n\t}\n\n\tfunction drop_tables($tables) {\n\t\treturn queries(\"DROP TABLE \" . implode(\", \", array_map('Adminer\\table', $tables)));\n\t}\n\n\tfunction move_tables($tables, $views, $target) {\n\t\treturn apply_queries(\"ALTER SCHEMA \" . idf_escape($target) . \" TRANSFER\", array_merge($tables, $views));\n\t}\n\n\tfunction trigger($name, $table) {\n\t\tif ($name == \"\") {\n\t\t\treturn array();\n\t\t}\n\t\t$rows = get_rows(\n\t\t\t\"SELECT s.name [Trigger],\nCASE 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],\nCASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing],\nc.text\nFROM sysobjects s\nJOIN syscomments c ON s.id = c.id\nWHERE s.xtype = 'TR' AND s.name = \" . q($name)\n\t\t); // triggers are not schema-scoped\n\t\t$return = reset($rows);\n\t\tif ($return) {\n\t\t\t$return[\"Statement\"] = preg_replace('~^.+\\s+AS\\s+~isU', '', $return[\"text\"]); //! identifiers, comments\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction triggers($table) {\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_rows(\"SELECT sys1.name,\nCASE 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],\nCASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing]\nFROM sysobjects sys1\nJOIN sysobjects sys2 ON sys1.parent_obj = sys2.id\nWHERE sys1.xtype = 'TR' AND sys2.name = \" . q($table)) as $row\n\t\t) { // triggers are not schema-scoped\n\t\t\t$return[$row[\"name\"]] = array($row[\"Timing\"], $row[\"Event\"]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction trigger_options() {\n\t\treturn array(\n\t\t\t\"Timing\" => array(\"AFTER\", \"INSTEAD OF\"),\n\t\t\t\"Event\" => array(\"INSERT\", \"UPDATE\", \"DELETE\"),\n\t\t\t\"Type\" => array(\"AS\"),\n\t\t);\n\t}\n\n\tfunction schemas() {\n\t\treturn get_vals(\"SELECT name FROM sys.schemas\");\n\t}\n\n\tfunction get_schema() {\n\t\tif ($_GET[\"ns\"] != \"\") {\n\t\t\treturn $_GET[\"ns\"];\n\t\t}\n\t\treturn get_val(\"SELECT SCHEMA_NAME()\");\n\t}\n\n\tfunction set_schema($schema) {\n\t\t$_GET[\"ns\"] = $schema;\n\t\treturn true; // ALTER USER is permanent\n\t}\n\n\tfunction create_sql($table, $auto_increment, $style) {\n\t\tif (is_view(table_status1($table))) {\n\t\t\t$view = view($table);\n\t\t\treturn \"CREATE VIEW \" . table($table) . \" AS $view[select]\";\n\t\t}\n\t\t$fields = array();\n\t\t$primary = false;\n\t\tforeach (fields($table) as $name => $field) {\n\t\t\t$val = process_field($field, $field);\n\t\t\tif ($val[6]) {\n\t\t\t\t$primary = true;\n\t\t\t}\n\t\t\t$fields[] = implode(\"\", $val);\n\t\t}\n\t\tforeach (indexes($table) as $name => $index) {\n\t\t\tif (!$primary || $index[\"type\"] != \"PRIMARY\") {\n\t\t\t\t$columns = array();\n\t\t\t\tforeach ($index[\"columns\"] as $key => $val) {\n\t\t\t\t\t$columns[] = idf_escape($val) . ($index[\"descs\"][$key] ? \" DESC\" : \"\");\n\t\t\t\t}\n\t\t\t\t$name = idf_escape($name);\n\t\t\t\t$fields[] = ($index[\"type\"] == \"INDEX\" ? \"INDEX $name\" : \"CONSTRAINT $name \" . ($index[\"type\"] == \"UNIQUE\" ? \"UNIQUE\" : \"PRIMARY KEY\")) . \" (\" . implode(\", \", $columns) . \")\";\n\t\t\t}\n\t\t}\n\t\tforeach (driver()->checkConstraints($table) as $name => $check) {\n\t\t\t$fields[] = \"CONSTRAINT \" . idf_escape($name) . \" CHECK ($check)\";\n\t\t}\n\t\treturn \"CREATE TABLE \" . table($table) . \" (\\n\\t\" . implode(\",\\n\\t\", $fields) . \"\\n)\";\n\t}\n\n\tfunction foreign_keys_sql($table) {\n\t\t$fields = array();\n\t\tforeach (foreign_keys($table) as $foreign) {\n\t\t\t$fields[] = ltrim(format_foreign_key($foreign));\n\t\t}\n\t\treturn ($fields ? \"ALTER TABLE \" . table($table) . \" ADD\\n\\t\" . implode(\",\\n\\t\", $fields) . \";\\n\\n\" : \"\");\n\t}\n\n\tfunction truncate_sql($table) {\n\t\treturn \"TRUNCATE TABLE \" . table($table);\n\t}\n\n\tfunction use_sql($database, $style = \"\") {\n\t\treturn \"USE \" . idf_escape($database);\n\t}\n\n\tfunction trigger_sql($table) {\n\t\t$return = \"\";\n\t\tforeach (triggers($table) as $name => $trigger) {\n\t\t\t$return .= create_trigger(\" ON \" . table($table), trigger($name, $table)) . \";\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match('~^(check|comment|columns|database|drop_col|dump|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|\n\t}\n}\n"
  },
  {
    "path": "adminer/drivers/mysql.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nSqlDriver::$drivers = array(\"server\" => \"MySQL / MariaDB\") + SqlDriver::$drivers;\n\nif (!defined('Adminer\\DRIVER')) {\n\tdefine('Adminer\\DRIVER', \"server\"); // server - backwards compatibility\n\n\t// MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable\n\tif (extension_loaded(\"mysqli\") && $_GET[\"ext\"] != \"pdo\") {\n\t\tclass Db extends \\MySQLi {\n\t\t\t/** @var Db */ static $instance;\n\t\t\tpublic $extension = \"MySQLi\", $flavor = '';\n\n\t\t\tfunction __construct() {\n\t\t\t\tparent::init();\n\t\t\t}\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\tmysqli_report(MYSQLI_REPORT_OFF); // stays between requests, not required since PHP 5.3.4\n\t\t\t\tlist($host, $port) = host_port($server);\n\t\t\t\t$ssl = adminer()->connectSsl();\n\t\t\t\tif ($ssl) {\n\t\t\t\t\t$this->ssl_set($ssl['key'], $ssl['cert'], $ssl['ca'], '', '');\n\t\t\t\t}\n\t\t\t\t$return = @$this->real_connect(\n\t\t\t\t\t($server != \"\" ? $host : ini_get(\"mysqli.default_host\")),\n\t\t\t\t\t($server . $username != \"\" ? $username : ini_get(\"mysqli.default_user\")),\n\t\t\t\t\t($server . $username . $password != \"\" ? $password : ini_get(\"mysqli.default_pw\")),\n\t\t\t\t\tnull,\n\t\t\t\t\t(is_numeric($port) ? intval($port) : ini_get(\"mysqli.default_port\")),\n\t\t\t\t\t(is_numeric($port) ? null : $port),\n\t\t\t\t\t($ssl ? ($ssl['verify'] !== false ? 2048 : 64) : 0) // 2048 - MYSQLI_CLIENT_SSL, 64 - MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT (not available before PHP 5.6.16)\n\t\t\t\t);\n\t\t\t\t$this->options(MYSQLI_OPT_LOCAL_INFILE, 0);\n\t\t\t\treturn ($return ? '' : $this->error);\n\t\t\t}\n\n\t\t\tfunction set_charset($charset) {\n\t\t\t\tif (parent::set_charset($charset)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// the client library may not support utf8mb4\n\t\t\t\tparent::set_charset('utf8');\n\t\t\t\treturn $this->query(\"SET NAMES $charset\");\n\t\t\t}\n\n\t\t\tfunction next_result() {\n\t\t\t\treturn self::more_results() && parent::next_result(); // triggers E_STRICT on PHP < 7.4 otherwise\n\t\t\t}\n\n\t\t\tfunction quote(string $string): string {\n\t\t\t\treturn \"'\" . $this->escape_string($string) . \"'\";\n\t\t\t}\n\t\t}\n\n\t} elseif (extension_loaded(\"mysql\") && !((ini_bool(\"sql.safe_mode\") || ini_bool(\"mysql.allow_local_infile\")) && extension_loaded(\"pdo_mysql\"))) {\n\t\tclass Db extends SqlDb {\n\t\t\t/** @var resource */ private $link;\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\tif (ini_bool(\"mysql.allow_local_infile\")) {\n\t\t\t\t\treturn lang('Disable %s or enable %s or %s extensions.', \"'mysql.allow_local_infile'\", \"MySQLi\", \"PDO_MySQL\");\n\t\t\t\t}\n\t\t\t\t$this->link = @mysql_connect(\n\t\t\t\t\t($server != \"\" ? $server : ini_get(\"mysql.default_host\")),\n\t\t\t\t\t($server . $username != \"\" ? $username : ini_get(\"mysql.default_user\")),\n\t\t\t\t\t($server . $username . $password != \"\" ? $password : ini_get(\"mysql.default_password\")),\n\t\t\t\t\ttrue,\n\t\t\t\t\t131072 // CLIENT_MULTI_RESULTS for CALL\n\t\t\t\t);\n\t\t\t\tif (!$this->link) {\n\t\t\t\t\treturn mysql_error();\n\t\t\t\t}\n\t\t\t\t$this->server_info = mysql_get_server_info($this->link);\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\t/** Set the client character set */\n\t\t\tfunction set_charset(string $charset): bool {\n\t\t\t\tif (function_exists('mysql_set_charset')) {\n\t\t\t\t\tif (mysql_set_charset($charset, $this->link)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// the client library may not support utf8mb4\n\t\t\t\t\tmysql_set_charset('utf8', $this->link);\n\t\t\t\t}\n\t\t\t\treturn $this->query(\"SET NAMES $charset\");\n\t\t\t}\n\n\t\t\tfunction quote(string $string): string {\n\t\t\t\treturn \"'\" . mysql_real_escape_string($string, $this->link) . \"'\";\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\treturn mysql_select_db($database, $this->link);\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$result = @($unbuffered ? mysql_unbuffered_query($query, $this->link) : mysql_query($query, $this->link)); // @ - mute mysql.trace_mode\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$this->errno = mysql_errno($this->link);\n\t\t\t\t\t$this->error = mysql_error($this->link);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif ($result === true) {\n\t\t\t\t\t$this->affected_rows = mysql_affected_rows($this->link);\n\t\t\t\t\t$this->info = mysql_info($this->link);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn new Result($result);\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows; // number of rows in the result\n\t\t\t/** @var resource */ private $result;\n\t\t\tprivate int $offset = 0;\n\n\t\t\t/** @param resource $result */\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t\t$this->num_rows = mysql_num_rows($result);\n\t\t\t}\n\n\t\t\t/** Fetch next row as associative array\n\t\t\t* @return array<?string>|false\n\t\t\t*/\n\t\t\tfunction fetch_assoc() {\n\t\t\t\treturn mysql_fetch_assoc($this->result);\n\t\t\t}\n\n\t\t\t/** Fetch next row as numbered array\n\t\t\t* @return list<?string>|false\n\t\t\t*/\n\t\t\tfunction fetch_row() {\n\t\t\t\treturn mysql_fetch_row($this->result);\n\t\t\t}\n\n\t\t\t/** Fetch next field\n\t\t\t* @return \\stdClass properties: name, type (0 number, 15 varchar, 254 char), charsetnr (63 binary); optionally: table, orgtable, orgname\n\t\t\t*/\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$return = mysql_fetch_field($this->result, $this->offset++); // offset required under certain conditions\n\t\t\t\t$return->orgtable = $return->table;\n\t\t\t\t$return->charsetnr = ($return->blob ? 63 : 0);\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\t/** Free result set */\n\t\t\tfunction __destruct() {\n\t\t\t\tmysql_free_result($this->result);\n\t\t\t}\n\t\t}\n\n\t} elseif (extension_loaded(\"pdo_mysql\")) {\n\t\tclass Db extends PdoDb {\n\t\t\tpublic $extension = \"PDO_MySQL\";\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t$options = array(\\PDO::MYSQL_ATTR_LOCAL_INFILE => false);\n\t\t\t\t$ssl = adminer()->connectSsl();\n\t\t\t\tif ($ssl) {\n\t\t\t\t\tif ($ssl['key']) {\n\t\t\t\t\t\t$options[\\PDO::MYSQL_ATTR_SSL_KEY] = $ssl['key'];\n\t\t\t\t\t}\n\t\t\t\t\tif ($ssl['cert']) {\n\t\t\t\t\t\t$options[\\PDO::MYSQL_ATTR_SSL_CERT] = $ssl['cert'];\n\t\t\t\t\t}\n\t\t\t\t\tif ($ssl['ca']) {\n\t\t\t\t\t\t$options[\\PDO::MYSQL_ATTR_SSL_CA] = $ssl['ca'];\n\t\t\t\t\t}\n\t\t\t\t\tif (isset($ssl['verify'])) {\n\t\t\t\t\t\t$options[\\PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = $ssl['verify'];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlist($host, $port) = host_port($server);\n\t\t\t\treturn $this->dsn(\n\t\t\t\t\t\"mysql:charset=utf8;host=$host\" . ($port ? (is_numeric($port) ? \";port=\" : \";unix_socket=\") . $port : \"\"),\n\t\t\t\t\t$username,\n\t\t\t\t\t$password,\n\t\t\t\t\t$options\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction set_charset($charset) {\n\t\t\t\treturn $this->query(\"SET NAMES $charset\"); // charset in DSN is ignored before PHP 5.3.6\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\t// database selection is separated from the connection so dbname in DSN can't be used\n\t\t\t\treturn $this->query(\"USE \" . idf_escape($database));\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$this->pdo->setAttribute(\\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, !$unbuffered);\n\t\t\t\treturn parent::query($query, $unbuffered);\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"MySQLi\", \"MySQL\", \"PDO_MySQL\");\n\t\tstatic $jush = \"sql\"; // JUSH identifier\n\n\t\tpublic $unsigned = array(\"unsigned\", \"zerofill\", \"unsigned zerofill\");\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"LIKE\", \"LIKE %%\", \"REGEXP\", \"IN\", \"FIND_IN_SET\", \"IS NULL\", \"NOT LIKE\", \"NOT REGEXP\", \"NOT IN\", \"IS NOT NULL\", \"SQL\");\n\t\tpublic $functions = array(\"char_length\", \"date\", \"from_unixtime\", \"lower\", \"round\", \"floor\", \"ceil\", \"sec_to_time\", \"time_to_sec\", \"upper\");\n\t\tpublic $grouping = array(\"avg\", \"count\", \"count distinct\", \"group_concat\", \"max\", \"min\", \"sum\");\n\n\t\tstatic function connect(string $server, string $username, string $password) {\n\t\t\t$connection = parent::connect($server, $username, $password);\n\t\t\tif (is_string($connection)) {\n\t\t\t\tif (function_exists('iconv') && !is_utf8($connection) && strlen($s = iconv(\"windows-1250\", \"utf-8\", $connection)) > strlen($connection)) { // windows-1250 - most common Windows encoding\n\t\t\t\t\t$connection = $s;\n\t\t\t\t}\n\t\t\t\treturn $connection;\n\t\t\t}\n\t\t\t$connection->set_charset(charset($connection));\n\t\t\t$connection->query(\"SET sql_quote_show_create = 1, autocommit = 1\");\n\t\t\t$connection->flavor = (preg_match('~MariaDB~', $connection->server_info) ? 'maria' : 'mysql');\n\t\t\tadd_driver(DRIVER, ($connection->flavor == 'maria' ? \"MariaDB\" : \"MySQL\"));\n\t\t\treturn $connection;\n\t\t}\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\t$this->types = array(\n\t\t\t\tlang('Numbers') => array(\"tinyint\" => 3, \"smallint\" => 5, \"mediumint\" => 8, \"int\" => 10, \"bigint\" => 20, \"decimal\" => 66, \"float\" => 12, \"double\" => 21),\n\t\t\t\tlang('Date and time') => array(\"date\" => 10, \"datetime\" => 19, \"timestamp\" => 19, \"time\" => 10, \"year\" => 4),\n\t\t\t\tlang('Strings') => array(\"char\" => 255, \"varchar\" => 65535, \"tinytext\" => 255, \"text\" => 65535, \"mediumtext\" => 16777215, \"longtext\" => 4294967295),\n\t\t\t\tlang('Lists') => array(\"enum\" => 65535, \"set\" => 64),\n\t\t\t\tlang('Binary') => array(\"bit\" => 20, \"binary\" => 255, \"varbinary\" => 65535, \"tinyblob\" => 255, \"blob\" => 65535, \"mediumblob\" => 16777215, \"longblob\" => 4294967295),\n\t\t\t\tlang('Geometry') => array(\"geometry\" => 0, \"point\" => 0, \"linestring\" => 0, \"polygon\" => 0, \"multipoint\" => 0, \"multilinestring\" => 0, \"multipolygon\" => 0, \"geometrycollection\" => 0),\n\t\t\t);\n\t\t\t$this->insertFunctions = array(\n\t\t\t\t\"char\" => \"md5/sha1/password/encrypt/uuid\",\n\t\t\t\t\"binary\" => \"md5/sha1\",\n\t\t\t\t\"date|time\" => \"now\",\n\t\t\t);\n\t\t\t$this->editFunctions = array(\n\t\t\t\tnumber_type() => \"+/-\",\n\t\t\t\t\"date\" => \"+ interval/- interval\",\n\t\t\t\t\"time\" => \"addtime/subtime\",\n\t\t\t\t\"char|text\" => \"concat\",\n\t\t\t);\n\t\t\tif (min_version('5.7.8', 10.2, $connection)) {\n\t\t\t\t$this->types[lang('Strings')][\"json\"] = 4294967295;\n\t\t\t}\n\t\t\tif (min_version('', 10.7, $connection)) {\n\t\t\t\t$this->types[lang('Strings')][\"uuid\"] = 128;\n\t\t\t\t$this->insertFunctions['uuid'] = 'uuid';\n\t\t\t}\n\t\t\tif (min_version(9, '', $connection)) {\n\t\t\t\t$this->types[lang('Numbers')][\"vector\"] = 16383;\n\t\t\t\t$this->insertFunctions['vector'] = 'string_to_vector';\n\t\t\t}\n\t\t\tif (min_version(5.1, '', $connection)) {\n\t\t\t\t$this->partitionBy = array(\"HASH\", \"LINEAR HASH\", \"KEY\", \"LINEAR KEY\", \"RANGE\", \"LIST\");\n\t\t\t}\n\t\t\tif (min_version(5.7, 10.2, $connection)) {\n\t\t\t\t$this->generated = array(\"STORED\", \"VIRTUAL\");\n\t\t\t}\n\t\t}\n\n\t\tfunction unconvertFunction(array $field) {\n\t\t\treturn (preg_match(\"~binary~\", $field[\"type\"]) ? \"<code class='jush-sql'>UNHEX</code>\"\n\t\t\t\t: ($field[\"type\"] == \"bit\" ? doc_link(array('sql' => 'bit-value-literals.html'), \"<code>b''</code>\")\n\t\t\t\t: (preg_match(\"~geometry|point|linestring|polygon~\", $field[\"type\"]) ? \"<code class='jush-sql'>GeomFromText</code>\"\n\t\t\t\t: \"\")));\n\t\t}\n\n\t\tfunction insert(string $table, array $set) {\n\t\t\treturn ($set ? parent::insert($table, $set) : queries(\"INSERT INTO \" . table($table) . \" ()\\nVALUES ()\"));\n\t\t}\n\n\t\tfunction insertUpdate(string $table, array $rows, array $primary) {\n\t\t\t$columns = array_keys(reset($rows));\n\t\t\t$prefix = \"INSERT INTO \" . table($table) . \" (\" . implode(\", \", $columns) . \") VALUES\\n\";\n\t\t\t$values = array();\n\t\t\tforeach ($columns as $key) {\n\t\t\t\t$values[$key] = \"$key = VALUES($key)\";\n\t\t\t}\n\t\t\t$suffix = \"\\nON DUPLICATE KEY UPDATE \" . implode(\", \", $values);\n\t\t\t$values = array();\n\t\t\t$length = 0;\n\t\t\tforeach ($rows as $set) {\n\t\t\t\t$value = \"(\" . implode(\", \", $set) . \")\";\n\t\t\t\tif ($values && (strlen($prefix) + $length + strlen($value) + strlen($suffix) > 1e6)) { // 1e6 - default max_allowed_packet\n\t\t\t\t\tif (!queries($prefix . implode(\",\\n\", $values) . $suffix)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t$values = array();\n\t\t\t\t\t$length = 0;\n\t\t\t\t}\n\t\t\t\t$values[] = $value;\n\t\t\t\t$length += strlen($value) + 2; // 2 - strlen(\",\\n\")\n\t\t\t}\n\t\t\treturn queries($prefix . implode(\",\\n\", $values) . $suffix);\n\t\t}\n\n\t\tfunction slowQuery(string $query, int $timeout) {\n\t\t\tif (min_version('5.7.8', '10.1.2')) {\n\t\t\t\tif ($this->conn->flavor == 'maria') {\n\t\t\t\t\treturn \"SET STATEMENT max_statement_time=$timeout FOR $query\";\n\t\t\t\t} elseif (preg_match('~^(SELECT\\b)(.+)~is', $query, $match)) {\n\t\t\t\t\treturn \"$match[1] /*+ MAX_EXECUTION_TIME(\" . ($timeout * 1000) . \") */ $match[2]\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction convertSearch(string $idf, array $val, array $field): string {\n\t\t\treturn (preg_match('~char|text|enum|set~', $field[\"type\"]) && !preg_match(\"~^utf8~\", $field[\"collation\"]) && preg_match('~[\\x80-\\xFF]~', $val['val'])\n\t\t\t\t? \"CONVERT($idf USING \" . charset($this->conn) . \")\"\n\t\t\t\t: $idf\n\t\t\t);\n\t\t}\n\n\t\tfunction warnings() {\n\t\t\t$result = $this->conn->query(\"SHOW WARNINGS\");\n\t\t\tif ($result && $result->num_rows) {\n\t\t\t\tob_start();\n\t\t\t\tprint_select_result($result); // print_select_result() usually needs to print a big table progressively\n\t\t\t\treturn ob_get_clean();\n\t\t\t}\n\t\t}\n\n\t\tfunction tableHelp(string $name, bool $is_view = false) {\n\t\t\t$maria = ($this->conn->flavor == 'maria');\n\t\t\tif (information_schema(DB)) {\n\t\t\t\treturn strtolower(\"information-schema-\" . ($maria ? \"$name-table/\" : str_replace(\"_\", \"-\", $name) . \"-table.html\"));\n\t\t\t}\n\t\t\tif (DB == \"mysql\") {\n\t\t\t\treturn ($maria ? \"mysql$name-table/\" : \"system-schema.html\"); //! more precise link\n\t\t\t}\n\t\t}\n\n\t\tfunction partitionsInfo(string $table): array {\n\t\t\t$from = \"FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = \" . q(DB) . \" AND TABLE_NAME = \" . q($table);\n\t\t\t$result = $this->conn->query(\"SELECT PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_ORDINAL_POSITION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1\");\n\t\t\t$return = array();\n\t\t\tlist($return[\"partition_by\"], $return[\"partition\"], $return[\"partitions\"]) = $result->fetch_row();\n\t\t\t$partitions = get_key_vals(\"SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION\");\n\t\t\t$return[\"partition_names\"] = array_keys($partitions);\n\t\t\t$return[\"partition_values\"] = array_values($partitions);\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction hasCStyleEscapes(): bool {\n\t\t\tstatic $c_style;\n\t\t\tif ($c_style === null) {\n\t\t\t\t$sql_mode = get_val(\"SHOW VARIABLES LIKE 'sql_mode'\", 1, $this->conn);\n\t\t\t\t$c_style = (strpos($sql_mode, 'NO_BACKSLASH_ESCAPES') === false);\n\t\t\t}\n\t\t\treturn $c_style;\n\t\t}\n\n\t\tfunction engines(): array {\n\t\t\t$return = array();\n\t\t\tforeach (get_rows(\"SHOW ENGINES\") as $row) {\n\t\t\t\tif (preg_match(\"~YES|DEFAULT~\", $row[\"Support\"])) {\n\t\t\t\t\t$return[] = $row[\"Engine\"];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction indexAlgorithms(array $tableStatus): array {\n\t\t\treturn (preg_match('~^(MEMORY|NDB)$~', $tableStatus[\"Engine\"]) ? array(\"HASH\", \"BTREE\") : array());\n\t\t}\n\t}\n\n\n\n\t/** Escape database identifier */\n\tfunction idf_escape(string $idf): string {\n\t\treturn \"`\" . str_replace(\"`\", \"``\", $idf) . \"`\";\n\t}\n\n\t/** Get escaped table name */\n\tfunction table(string $idf): string {\n\t\treturn idf_escape($idf);\n\t}\n\n\t/** Get cached list of databases\n\t* @return list<string>\n\t*/\n\tfunction get_databases(bool $flush): array {\n\t\t// SHOW DATABASES can take a very long time so it is cached\n\t\t$return = get_session(\"dbs\");\n\t\tif ($return === null) {\n\t\t\t$query = \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME\"; // SHOW DATABASES can be disabled by skip_show_database\n\t\t\t$return = ($flush ? slow_query($query) : get_vals($query));\n\t\t\trestart_session();\n\t\t\tset_session(\"dbs\", $return);\n\t\t\tstop_session();\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Formulate SQL query with limit\n\t* @param string $query everything after SELECT\n\t* @param string $where including WHERE\n\t*/\n\tfunction limit(string $query, string $where, int $limit, int $offset = 0, string $separator = \" \"): string {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT $limit\" . ($offset ? \" OFFSET $offset\" : \"\") : \"\");\n\t}\n\n\t/** Formulate SQL modification query with limit 1\n\t* @param string $query everything after UPDATE or DELETE\n\t*/\n\tfunction limit1(string $table, string $query, string $where, string $separator = \"\\n\"): string {\n\t\treturn limit($query, $where, 1, 0, $separator);\n\t}\n\n\t/** Get database collation\n\t* @param string[][] $collations result of collations()\n\t*/\n\tfunction db_collation(string $db, array $collations): ?string {\n\t\t$return = null;\n\t\t$create = get_val(\"SHOW CREATE DATABASE \" . idf_escape($db), 1);\n\t\tif (preg_match('~ COLLATE ([^ ]+)~', $create, $match)) {\n\t\t\t$return = $match[1];\n\t\t} elseif (preg_match('~ CHARACTER SET ([^ ]+)~', $create, $match)) {\n\t\t\t// default collation\n\t\t\t$return = $collations[$match[1]][-1];\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get logged user */\n\tfunction logged_user(): string {\n\t\treturn get_val(\"SELECT USER()\");\n\t}\n\n\t/** Get tables list\n\t* @return string[] [$name => $type]\n\t*/\n\tfunction tables_list(): array {\n\t\treturn get_key_vals(\"SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME\");\n\t}\n\n\t/** Count tables in all databases\n\t* @param list<string> $databases\n\t* @return int[] [$db => $tables]\n\t*/\n\tfunction count_tables(array $databases): array {\n\t\t$return = array();\n\t\tforeach ($databases as $db) {\n\t\t\t$return[$db] = count(get_vals(\"SHOW TABLES IN \" . idf_escape($db)));\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get table status\n\t* @param bool $fast return only \"Name\", \"Engine\" and \"Comment\" fields\n\t* @return array<string, TableStatus>\n\t*/\n\tfunction table_status(string $name = \"\", bool $fast = false): array {\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_rows(\n\t\t\t\t$fast\n\t\t\t\t? \"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() \" . ($name != \"\" ? \"AND TABLE_NAME = \" . q($name) : \"ORDER BY Name\")\n\t\t\t\t: \"SHOW TABLE STATUS\" . ($name != \"\" ? \" LIKE \" . q(addcslashes($name, \"%_\\\\\")) : \"\")\n\t\t\t) as $row\n\t\t) {\n\t\t\tif ($row[\"Engine\"] == \"InnoDB\") {\n\t\t\t\t// ignore internal comment, unnecessary since MySQL 5.1.21\n\t\t\t\t$row[\"Comment\"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row[\"Comment\"]);\n\t\t\t}\n\t\t\tif (!isset($row[\"Engine\"])) {\n\t\t\t\t$row[\"Comment\"] = \"\";\n\t\t\t}\n\t\t\tif ($name != \"\") {\n\t\t\t\t// MariaDB: Table name is returned as lowercase on macOS, so we fix it here.\n\t\t\t\t$row[\"Name\"] = $name;\n\t\t\t}\n\t\t\t$return[$row[\"Name\"]] = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Find out whether the identifier is view\n\t* @param TableStatus $table_status\n\t*/\n\tfunction is_view(array $table_status): bool {\n\t\treturn $table_status[\"Engine\"] === null;\n\t}\n\n\t/** Check if table supports foreign keys\n\t* @param TableStatus $table_status\n\t*/\n\tfunction fk_support(array $table_status): bool {\n\t\treturn preg_match('~InnoDB|IBMDB2I' . (min_version(5.6) ? '|NDB' : '') . '~i', $table_status[\"Engine\"]);\n\t}\n\n\t/** Get information about fields\n\t* @return Field[]\n\t*/\n\tfunction fields(string $table): array {\n\t\t$maria = (connection()->flavor == 'maria');\n\t\t$return = array();\n\t\tforeach (get_rows(\"SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = \" . q($table) . \" ORDER BY ORDINAL_POSITION\") as $row) {\n\t\t\t$field = $row[\"COLUMN_NAME\"];\n\t\t\t$type = $row[\"COLUMN_TYPE\"];\n\t\t\t$generation = $row[\"GENERATION_EXPRESSION\"];\n\t\t\t$extra = $row[\"EXTRA\"];\n\t\t\t// https://mariadb.com/kb/en/library/show-columns/, https://github.com/vrana/adminer/pull/359#pullrequestreview-276677186\n\t\t\tpreg_match('~^(VIRTUAL|PERSISTENT|STORED)~', $extra, $generated);\n\t\t\tpreg_match('~^([^( ]+)(?:\\((.+)\\))?( unsigned)?( zerofill)?$~', $type, $match_type);\n\t\t\t$default = $row[\"COLUMN_DEFAULT\"];\n\t\t\tif ($default != \"\") {\n\t\t\t\t$is_text = preg_match('~text|json~', $match_type[1]);\n\t\t\t\tif (!$maria && $is_text) {\n\t\t\t\t\t// default value a'b of text column is stored as _utf8mb4\\'a\\\\\\'b\\' in MySQL\n\t\t\t\t\t$default = preg_replace(\"~^(_\\w+)?('.*')$~\", '\\2', stripslashes($default));\n\t\t\t\t}\n\t\t\t\tif ($maria || $is_text) {\n\t\t\t\t\t$default = ($default == \"NULL\" ? null : preg_replace_callback(\"~^'(.*)'$~\", function ($match) {\n\t\t\t\t\t\treturn stripslashes(str_replace(\"''\", \"'\", $match[1]));\n\t\t\t\t\t}, $default));\n\t\t\t\t}\n\t\t\t\tif (!$maria && preg_match('~binary~', $match_type[1]) && preg_match('~^0x(\\w*)$~', $default, $match)) {\n\t\t\t\t\t$default = pack(\"H*\", $match[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$return[$field] = array(\n\t\t\t\t\"field\" => $field,\n\t\t\t\t\"full_type\" => $type,\n\t\t\t\t\"type\" => $match_type[1],\n\t\t\t\t\"length\" => $match_type[2],\n\t\t\t\t\"unsigned\" => ltrim($match_type[3] . $match_type[4]),\n\t\t\t\t\"default\" => ($generated\n\t\t\t\t\t? ($maria ? $generation : stripslashes($generation))\n\t\t\t\t\t: $default\n\t\t\t\t),\n\t\t\t\t\"null\" => ($row[\"IS_NULLABLE\"] == \"YES\"),\n\t\t\t\t\"auto_increment\" => ($extra == \"auto_increment\"),\n\t\t\t\t\"on_update\" => (preg_match('~\\bon update (\\w+)~i', $extra, $match) ? $match[1] : \"\"), //! available since MySQL 5.1.23\n\t\t\t\t\"collation\" => $row[\"COLLATION_NAME\"],\n\t\t\t\t\"privileges\" => array_flip(explode(\",\", \"$row[PRIVILEGES],where,order\")),\n\t\t\t\t\"comment\" => $row[\"COLUMN_COMMENT\"],\n\t\t\t\t\"primary\" => ($row[\"COLUMN_KEY\"] == \"PRI\"),\n\t\t\t\t\"generated\" => ($generated[1] == \"PERSISTENT\" ? \"STORED\" : $generated[1]),\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get table indexes\n\t* @return Index[]\n\t*/\n\tfunction indexes(string $table, ?Db $connection2 = null): array {\n\t\t$return = array();\n\t\tforeach (get_rows(\"SHOW INDEX FROM \" . table($table), $connection2) as $row) {\n\t\t\t$name = $row[\"Key_name\"];\n\t\t\t$return[$name][\"type\"] = ($name == \"PRIMARY\" ? \"PRIMARY\" : ($row[\"Index_type\"] == \"FULLTEXT\" ? \"FULLTEXT\" : ($row[\"Non_unique\"] ? ($row[\"Index_type\"] == \"SPATIAL\" ? \"SPATIAL\" : \"INDEX\") : \"UNIQUE\")));\n\t\t\t$return[$name][\"columns\"][] = $row[\"Column_name\"];\n\t\t\t$return[$name][\"lengths\"][] = ($row[\"Index_type\"] == \"SPATIAL\" ? null : $row[\"Sub_part\"]);\n\t\t\t$return[$name][\"descs\"][] = null;\n\t\t\t$return[$name][\"algorithm\"] = $row[\"Index_type\"];\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get foreign keys in table\n\t* @return ForeignKey[]\n\t*/\n\tfunction foreign_keys(string $table): array {\n\t\tstatic $pattern = '(?:`(?:[^`]|``)+`|\"(?:[^\"]|\"\")+\")';\n\t\t$return = array();\n\t\t$create_table = get_val(\"SHOW CREATE TABLE \" . table($table), 1);\n\t\tif ($create_table) {\n\t\t\tpreg_match_all(\n\t\t\t\t\"~CONSTRAINT ($pattern) FOREIGN KEY ?\\\\(((?:$pattern,? ?)+)\\\\) REFERENCES ($pattern)(?:\\\\.($pattern))? \\\\(((?:$pattern,? ?)+)\\\\)(?: ON DELETE (\" . driver()->onActions . \"))?(?: ON UPDATE (\" . driver()->onActions . \"))?~\",\n\t\t\t\t$create_table,\n\t\t\t\t$matches,\n\t\t\t\tPREG_SET_ORDER\n\t\t\t);\n\t\t\tforeach ($matches as $match) {\n\t\t\t\tpreg_match_all(\"~$pattern~\", $match[2], $source);\n\t\t\t\tpreg_match_all(\"~$pattern~\", $match[5], $target);\n\t\t\t\t$return[idf_unescape($match[1])] = array(\n\t\t\t\t\t\"db\" => idf_unescape($match[4] != \"\" ? $match[3] : $match[4]),\n\t\t\t\t\t\"table\" => idf_unescape($match[4] != \"\" ? $match[4] : $match[3]),\n\t\t\t\t\t\"source\" => array_map('Adminer\\idf_unescape', $source[0]),\n\t\t\t\t\t\"target\" => array_map('Adminer\\idf_unescape', $target[0]),\n\t\t\t\t\t\"on_delete\" => ($match[6] ?: \"RESTRICT\"),\n\t\t\t\t\t\"on_update\" => ($match[7] ?: \"RESTRICT\"),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get view SELECT\n\t* @return array{select:string}\n\t*/\n\tfunction view(string $name): array {\n\t\treturn array(\"select\" => preg_replace('~^(?:[^`]|`[^`]*`)*\\s+AS\\s+~isU', '', get_val(\"SHOW CREATE VIEW \" . table($name), 1)));\n\t}\n\n\t/** Get sorted grouped list of collations\n\t* @return string[][]\n\t*/\n\tfunction collations(): array {\n\t\t$return = array();\n\t\tforeach (get_rows(\"SHOW COLLATION\") as $row) {\n\t\t\tif ($row[\"Default\"]) {\n\t\t\t\t$return[$row[\"Charset\"]][-1] = $row[\"Collation\"];\n\t\t\t} else {\n\t\t\t\t$return[$row[\"Charset\"]][] = $row[\"Collation\"];\n\t\t\t}\n\t\t}\n\t\tksort($return);\n\t\tforeach ($return as $key => $val) {\n\t\t\tsort($return[$key]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Find out if database is information_schema */\n\tfunction information_schema(?string $db): bool {\n\t\treturn ($db == \"information_schema\")\n\t\t\t|| (min_version(5.5) && $db == \"performance_schema\");\n\t}\n\n\t/** Get escaped error message */\n\tfunction error(): string {\n\t\treturn h(preg_replace('~^You have an error.*syntax to use~U', \"Syntax error\", connection()->error));\n\t}\n\n\t/** Create database\n\t* @return Result\n\t*/\n\tfunction create_database(string $db, string $collation) {\n\t\treturn queries(\"CREATE DATABASE \" . idf_escape($db) . ($collation ? \" COLLATE \" . q($collation) : \"\"));\n\t}\n\n\t/** Drop databases\n\t* @param list<string> $databases\n\t*/\n\tfunction drop_databases(array $databases): bool {\n\t\t$return = apply_queries(\"DROP DATABASE\", $databases, 'Adminer\\idf_escape');\n\t\trestart_session();\n\t\tset_session(\"dbs\", null);\n\t\treturn $return;\n\t}\n\n\t/** Rename database from DB\n\t* @param string $name new name\n\t*/\n\tfunction rename_database(string $name, string $collation): bool {\n\t\t$return = false;\n\t\tif (create_database($name, $collation)) {\n\t\t\t$tables = array();\n\t\t\t$views = array();\n\t\t\tforeach (tables_list() as $table => $type) {\n\t\t\t\tif ($type == 'VIEW') {\n\t\t\t\t\t$views[] = $table;\n\t\t\t\t} else {\n\t\t\t\t\t$tables[] = $table;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$return = (!$tables && !$views) || move_tables($tables, $views, $name);\n\t\t\tdrop_databases($return ? array(DB) : array());\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Generate modifier for auto increment column */\n\tfunction auto_increment(): string {\n\t\t$auto_increment_index = \" PRIMARY KEY\";\n\t\t// don't overwrite primary key by auto_increment\n\t\tif ($_GET[\"create\"] != \"\" && $_POST[\"auto_increment_col\"]) {\n\t\t\tforeach (indexes($_GET[\"create\"]) as $index) {\n\t\t\t\tif (in_array($_POST[\"fields\"][$_POST[\"auto_increment_col\"]][\"orig\"], $index[\"columns\"], true)) {\n\t\t\t\t\t$auto_increment_index = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ($index[\"type\"] == \"PRIMARY\") {\n\t\t\t\t\t$auto_increment_index = \" UNIQUE\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \" AUTO_INCREMENT$auto_increment_index\";\n\t}\n\n\t/** Run commands to create or alter table\n\t* @param string $table \"\" to create\n\t* @param string $name new name\n\t* @param list<array{string, list<string>, string}> $fields of [$orig, $process_field, $after]\n\t* @param string[] $foreign\n\t* @param numeric-string|'' $auto_increment\n\t* @param ?Partitions $partitioning null means remove partitioning\n\t* @return Result|bool\n\t*/\n\tfunction alter_table(string $table, string $name, array $fields, array $foreign, ?string $comment, string $engine, string $collation, string $auto_increment, ?array $partitioning) {\n\t\t$alter = array();\n\t\tforeach ($fields as $field) {\n\t\t\tif ($field[1]) {\n\t\t\t\t$default = $field[1][3];\n\t\t\t\tif (preg_match('~ GENERATED~', $default)) {\n\t\t\t\t\t// swap default and null\n\t\t\t\t\t$field[1][3] = (connection()->flavor == 'maria' ? \"\" : $field[1][2]); // MariaDB doesn't support NULL on virtual columns\n\t\t\t\t\t$field[1][2] = $default;\n\t\t\t\t}\n\t\t\t\t$alter[] = ($table != \"\" ? ($field[0] != \"\" ? \"CHANGE \" . idf_escape($field[0]) : \"ADD\") : \" \") . \" \" . implode($field[1]) . ($table != \"\" ? $field[2] : \"\");\n\t\t\t} else {\n\t\t\t\t$alter[] = \"DROP \" . idf_escape($field[0]);\n\t\t\t}\n\t\t}\n\t\t$alter = array_merge($alter, $foreign);\n\t\t$status = ($comment !== null ? \" COMMENT=\" . q($comment) : \"\")\n\t\t\t. ($engine ? \" ENGINE=\" . q($engine) : \"\")\n\t\t\t. ($collation ? \" COLLATE \" . q($collation) : \"\")\n\t\t\t. ($auto_increment != \"\" ? \" AUTO_INCREMENT=$auto_increment\" : \"\")\n\t\t;\n\n\t\tif ($partitioning) {\n\t\t\t$partitions = array();\n\t\t\tif ($partitioning[\"partition_by\"] == 'RANGE' || $partitioning[\"partition_by\"] == 'LIST') {\n\t\t\t\tforeach ($partitioning[\"partition_names\"] as $key => $val) {\n\t\t\t\t\t$value = $partitioning[\"partition_values\"][$key];\n\t\t\t\t\t$partitions[] = \"\\n  PARTITION \" . idf_escape($val) . \" VALUES \" . ($partitioning[\"partition_by\"] == 'RANGE' ? \"LESS THAN\" : \"IN\") . ($value != \"\" ? \" ($value)\" : \" MAXVALUE\"); //! SQL injection\n\t\t\t\t}\n\t\t\t}\n\t\t\t// $partitioning[\"partition\"] can be expression, not only column\n\t\t\t$status .= \"\\nPARTITION BY $partitioning[partition_by]($partitioning[partition])\";\n\t\t\tif ($partitions) {\n\t\t\t\t$status .= \" (\" . implode(\",\", $partitions) . \"\\n)\";\n\t\t\t} elseif ($partitioning[\"partitions\"]) {\n\t\t\t\t$status .= \" PARTITIONS \" . (+$partitioning[\"partitions\"]);\n\t\t\t}\n\t\t} elseif ($partitioning === null) {\n\t\t\t$status .= \"\\nREMOVE PARTITIONING\";\n\t\t}\n\n\t\tif ($table == \"\") {\n\t\t\treturn queries(\"CREATE TABLE \" . table($name) . \" (\\n\" . implode(\",\\n\", $alter) . \"\\n)$status\");\n\t\t}\n\t\tif ($table != $name) {\n\t\t\t$alter[] = \"RENAME TO \" . table($name);\n\t\t}\n\t\tif ($status) {\n\t\t\t$alter[] = ltrim($status);\n\t\t}\n\t\treturn ($alter ? queries(\"ALTER TABLE \" . table($table) . \"\\n\" . implode(\",\\n\", $alter)) : true);\n\t}\n\n\t/** Run commands to alter indexes\n\t* @param string $table escaped table name\n\t* @param list<array{string, string, 'DROP'|list<string>, 3?: string, 4?: string}> $alter of [\"index type\", \"name\", [\"column definition\", ...], \"algorithm\", \"condition\"] or [\"index type\", \"name\", \"DROP\"]\n\t* @return Result|bool\n\t*/\n\tfunction alter_indexes(string $table, $alter) {\n\t\t$changes = array();\n\t\tforeach ($alter as $val) {\n\t\t\t$changes[] = ($val[2] == \"DROP\"\n\t\t\t\t? \"\\nDROP INDEX \" . idf_escape($val[1])\n\t\t\t\t: \"\\nADD $val[0] \" . ($val[0] == \"PRIMARY\" ? \"KEY \" : \"\") . ($val[1] != \"\" ? idf_escape($val[1]) . \" \" : \"\") . \"(\" . implode(\", \", $val[2]) . \")\"\n\t\t\t);\n\t\t}\n\t\treturn queries(\"ALTER TABLE \" . table($table) . implode(\",\", $changes));\n\t}\n\n\t/** Run commands to truncate tables\n\t* @param list<string> $tables\n\t*/\n\tfunction truncate_tables(array $tables): bool {\n\t\treturn apply_queries(\"TRUNCATE TABLE\", $tables);\n\t}\n\n\t/** Drop views\n\t* @param list<string> $views\n\t* @return Result|bool\n\t*/\n\tfunction drop_views(array $views) {\n\t\treturn queries(\"DROP VIEW \" . implode(\", \", array_map('Adminer\\table', $views)));\n\t}\n\n\t/** Drop tables\n\t* @param list<string> $tables\n\t* @return Result|bool\n\t*/\n\tfunction drop_tables(array $tables) {\n\t\treturn queries(\"DROP TABLE \" . implode(\", \", array_map('Adminer\\table', $tables)));\n\t}\n\n\t/** Move tables to other schema\n\t* @param list<string> $tables\n\t* @param list<string> $views\n\t*/\n\tfunction move_tables(array $tables, array $views, string $target): bool {\n\t\t$rename = array();\n\t\tforeach ($tables as $table) {\n\t\t\t$rename[] = table($table) . \" TO \" . idf_escape($target) . \".\" . table($table);\n\t\t}\n\t\tif (!$rename || queries(\"RENAME TABLE \" . implode(\", \", $rename))) {\n\t\t\t$definitions = array();\n\t\t\tforeach ($views as $table) {\n\t\t\t\t$definitions[table($table)] = view($table);\n\t\t\t}\n\t\t\tconnection()->select_db($target);\n\t\t\t$db = idf_escape(DB);\n\t\t\tforeach ($definitions as $name => $view) {\n\t\t\t\tif (!queries(\"CREATE VIEW $name AS \" . str_replace(\" $db.\", \" \", $view[\"select\"])) || !queries(\"DROP VIEW $db.$name\")) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\t//! move triggers\n\t\treturn false;\n\t}\n\n\t/** Copy tables to other schema\n\t* @param list<string> $tables\n\t* @param list<string> $views\n\t*/\n\tfunction copy_tables(array $tables, array $views, string $target): bool {\n\t\tqueries(\"SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'\");\n\t\tforeach ($tables as $table) {\n\t\t\t$name = ($target == DB ? table(\"copy_$table\") : idf_escape($target) . \".\" . table($table));\n\t\t\tif (\n\t\t\t\t($_POST[\"overwrite\"] && !queries(\"\\nDROP TABLE IF EXISTS $name\"))\n\t\t\t\t|| !queries(\"CREATE TABLE $name LIKE \" . table($table))\n\t\t\t\t|| !queries(\"INSERT INTO $name SELECT * FROM \" . table($table))\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tforeach (get_rows(\"SHOW TRIGGERS LIKE \" . q(addcslashes($table, \"%_\\\\\"))) as $row) {\n\t\t\t\t$trigger = $row[\"Trigger\"];\n\t\t\t\tif (!queries(\"CREATE TRIGGER \" . ($target == DB ? idf_escape(\"copy_$trigger\") : idf_escape($target) . \".\" . idf_escape($trigger)) . \" $row[Timing] $row[Event] ON $name FOR EACH ROW\\n$row[Statement];\")) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tforeach ($views as $table) {\n\t\t\t$name = ($target == DB ? table(\"copy_$table\") : idf_escape($target) . \".\" . table($table));\n\t\t\t$view = view($table);\n\t\t\tif (\n\t\t\t\t($_POST[\"overwrite\"] && !queries(\"DROP VIEW IF EXISTS $name\"))\n\t\t\t\t|| !queries(\"CREATE VIEW $name AS $view[select]\") //! USE to avoid db.table\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/** Get information about trigger\n\t* @param string $name trigger name\n\t* @return Trigger\n\t*/\n\tfunction trigger(string $name, string $table): array {\n\t\tif ($name == \"\") {\n\t\t\treturn array();\n\t\t}\n\t\t$rows = get_rows(\"SHOW TRIGGERS WHERE `Trigger` = \" . q($name));\n\t\treturn reset($rows);\n\t}\n\n\t/** Get defined triggers\n\t* @return array{string, string}[]\n\t*/\n\tfunction triggers(string $table): array {\n\t\t$return = array();\n\t\tforeach (get_rows(\"SHOW TRIGGERS LIKE \" . q(addcslashes($table, \"%_\\\\\"))) as $row) {\n\t\t\t$return[$row[\"Trigger\"]] = array($row[\"Timing\"], $row[\"Event\"]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get trigger options\n\t* @return array{Timing: list<string>, Event: list<string>, Type: list<string>}\n\t*/\n\tfunction trigger_options(): array {\n\t\treturn array(\n\t\t\t\"Timing\" => array(\"BEFORE\", \"AFTER\"),\n\t\t\t\"Event\" => array(\"INSERT\", \"UPDATE\", \"DELETE\"),\n\t\t\t\"Type\" => array(\"FOR EACH ROW\"),\n\t\t);\n\t}\n\n\t/** Get information about stored routine\n\t* @param 'FUNCTION'|'PROCEDURE' $type\n\t* @return Routine\n\t*/\n\tfunction routine(string $name, string $type): array {\n\t\t$fields = get_rows(\"SELECT\n\tPARAMETER_NAME field,\n\tDATA_TYPE type,\n\tCHARACTER_MAXIMUM_LENGTH length,\n\tREGEXP_REPLACE(DTD_IDENTIFIER, '^[^ ]+ ', '') `unsigned`,\n\t1 `null`,\n\tDTD_IDENTIFIER full_type,\n\tPARAMETER_MODE `inout`,\n\tCHARACTER_SET_NAME collation\nFROM information_schema.PARAMETERS\nWHERE SPECIFIC_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$type' AND SPECIFIC_NAME = \" . q($name) . \"\nORDER BY ORDINAL_POSITION\");\n\t\t$return = connection()->query(\"SELECT ROUTINE_COMMENT comment, ROUTINE_DEFINITION definition, 'SQL' language\nFROM information_schema.ROUTINES\nWHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '$type' AND ROUTINE_NAME = \" . q($name))->fetch_assoc();\n\t\tif ($fields && $fields[0]['field'] == '') {\n\t\t\t$return['returns'] = array_shift($fields);\n\t\t}\n\t\t$return['fields'] = $fields;\n\t\t/** @phpstan-var Routine */\n\t\treturn $return;\n\t}\n\n\t/** Get list of routines\n\t* @return list<string[]> [\"SPECIFIC_NAME\" => , \"ROUTINE_NAME\" => , \"ROUTINE_TYPE\" => , \"DTD_IDENTIFIER\" => ]\n\t*/\n\tfunction routines(): array {\n\t\treturn get_rows(\"SELECT SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE()\");\n\t}\n\n\t/** Get list of available routine languages\n\t* @return list<string>\n\t*/\n\tfunction routine_languages(): array {\n\t\treturn array(); // \"SQL\" not required\n\t}\n\n\t/** Get routine signature\n\t* @param Routine $row\n\t*/\n\tfunction routine_id(string $name, array $row): string {\n\t\treturn idf_escape($name);\n\t}\n\n\t/** Get last auto increment ID\n\t* @param Result|bool $result\n\t*/\n\tfunction last_id($result): string {\n\t\treturn get_val(\"SELECT LAST_INSERT_ID()\"); // mysql_insert_id() truncates bigint\n\t}\n\n\t/** Explain select\n\t* @return Result\n\t*/\n\tfunction explain(Db $connection, string $query) {\n\t\treturn $connection->query(\"EXPLAIN \" . (min_version(5.1) && !min_version(5.7) ? \"PARTITIONS \" : \"\") . $query);\n\t}\n\n\t/** Get approximate number of rows\n\t* @param TableStatus $table_status\n\t* @param list<string> $where\n\t* @return numeric-string|null null if approximate number can't be retrieved\n\t*/\n\tfunction found_rows(array $table_status, array $where) {\n\t\treturn ($where || $table_status[\"Engine\"] != \"InnoDB\" ? null : $table_status[\"Rows\"]);\n\t}\n\n\t/** Get SQL command to create table */\n\tfunction create_sql(string $table, ?bool $auto_increment, string $style): string {\n\t\t$return = get_val(\"SHOW CREATE TABLE \" . table($table), 1);\n\t\tif (!$auto_increment) {\n\t\t\t$return = preg_replace('~ AUTO_INCREMENT=\\d+~', '', $return); //! skip comments\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get SQL command to truncate table */\n\tfunction truncate_sql(string $table): string {\n\t\treturn \"TRUNCATE \" . table($table);\n\t}\n\n\t/** Get SQL command to change database */\n\tfunction use_sql(string $database, string $style = \"\"): string {\n\t\t$name = idf_escape($database);\n\t\t$return = \"\";\n\t\tif (preg_match('~CREATE~', $style) && ($create = get_val(\"SHOW CREATE DATABASE $name\", 1))) {\n\t\t\tset_utf8mb4($create);\n\t\t\tif ($style == \"DROP+CREATE\") {\n\t\t\t\t$return = \"DROP DATABASE IF EXISTS $name;\\n\";\n\t\t\t}\n\t\t\t$return .= \"$create;\\n\";\n\t\t}\n\t\treturn $return . \"USE $name\";\n\t}\n\n\t/** Get SQL commands to create triggers */\n\tfunction trigger_sql(string $table): string {\n\t\t$return = \"\";\n\t\tforeach (get_rows(\"SHOW TRIGGERS LIKE \" . q(addcslashes($table, \"%_\\\\\")), null, \"-- \") as $row) {\n\t\t\t$return .= \"\\nCREATE TRIGGER \" . idf_escape($row[\"Trigger\"]) . \" $row[Timing] $row[Event] ON \" . table($row[\"Table\"]) . \" FOR EACH ROW\\n$row[Statement];;\\n\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Get server variables\n\t* @return list<string[]> [[$name, $value]]\n\t*/\n\tfunction show_variables(): array {\n\t\treturn get_rows(\"SHOW VARIABLES\");\n\t}\n\n\t/** Get status variables\n\t* @return list<string[]> [[$name, $value]]\n\t*/\n\tfunction show_status(): array {\n\t\treturn get_rows(\"SHOW STATUS\");\n\t}\n\n\t/** Get process list\n\t* @return list<string[]> [$row]\n\t*/\n\tfunction process_list(): array {\n\t\treturn get_rows(\"SHOW FULL PROCESSLIST\");\n\t}\n\n\t/** Convert field in select and edit\n\t* @param Field $field\n\t* @return string|void\n\t*/\n\tfunction convert_field(array $field) {\n\t\tif (preg_match(\"~binary~\", $field[\"type\"])) {\n\t\t\treturn \"HEX(\" . idf_escape($field[\"field\"]) . \")\";\n\t\t}\n\t\tif ($field[\"type\"] == \"bit\") {\n\t\t\treturn \"BIN(\" . idf_escape($field[\"field\"]) . \" + 0)\"; // + 0 is required outside MySQLnd\n\t\t}\n\t\tif (preg_match(\"~geometry|point|linestring|polygon~\", $field[\"type\"])) {\n\t\t\treturn (min_version(8) ? \"ST_\" : \"\") . \"AsWKT(\" . idf_escape($field[\"field\"]) . \")\";\n\t\t}\n\t}\n\n\t/** Convert value in edit after applying functions back\n\t* @param Field $field\n\t* @param string $return SQL expression\n\t*/\n\tfunction unconvert_field(array $field, string $return): string {\n\t\tif (preg_match(\"~binary~\", $field[\"type\"])) {\n\t\t\t$return = \"UNHEX($return)\";\n\t\t}\n\t\tif ($field[\"type\"] == \"bit\") {\n\t\t\t$return = \"CONVERT(b$return, UNSIGNED)\";\n\t\t}\n\t\tif (preg_match(\"~geometry|point|linestring|polygon~\", $field[\"type\"])) {\n\t\t\t$prefix = (min_version(8) ? \"ST_\" : \"\");\n\t\t\t$return = $prefix . \"GeomFromText($return, $prefix\" . \"SRID($field[field]))\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Check whether a feature is supported\n\t* @param literal-string $feature check|comment|columns|copy|database|descidx|drop_col|dump|event|indexes|kill|materializedview\n\t* |move_col|privileges|procedure|processlist|routine|scheme|sequence|sql|status|table|trigger|type|variables|view|view_trigger\n\t*/\n\tfunction support(string $feature): bool {\n\t\treturn preg_match(\n\t\t\t'~^(comment|columns|copy|database|drop_col|dump|indexes|kill|privileges|move_col|procedure|processlist|routine|sql|status|table|trigger|variables|view'\n\t\t\t\t. (min_version(5.1) ? '|event' : '')\n\t\t\t\t. (min_version(8) ? '|descidx' : '')\n\t\t\t\t. (min_version('8.0.16', '10.2.1') ? '|check' : '')\n\t\t\t\t. ')$~',\n\t\t\t$feature\n\t\t);\n\t}\n\n\t/** Kill a process\n\t* @param numeric-string $id\n\t* @return Result|bool\n\t*/\n\tfunction kill_process(string $id) {\n\t\treturn queries(\"KILL \" . number($id));\n\t}\n\n\t/** Return query to get connection ID */\n\tfunction connection_id(): string {\n\t\treturn \"SELECT CONNECTION_ID()\";\n\t}\n\n\t/** Get maximum number of connections\n\t* @return numeric-string\n\t*/\n\tfunction max_connections(): string {\n\t\treturn get_val(\"SELECT @@max_connections\");\n\t}\n\n\t// Not used is MySQL but checked in compile.php:\n\n\t/** Get user defined types\n\t* @return string[] [$id => $name]\n\t*/\n\tfunction types(): array {\n\t\treturn array();\n\t}\n\n\t/** Get values of user defined type */\n\tfunction type_values(int $id): string {\n\t\treturn \"\";\n\t}\n\n\t/** Get existing schemas\n\t* @return list<string>\n\t*/\n\tfunction schemas(): array {\n\t\treturn array();\n\t}\n\n\t/** Get current schema */\n\tfunction get_schema(): string {\n\t\treturn \"\";\n\t}\n\n\t/** Set current schema\n\t*/\n\tfunction set_schema(string $schema, ?Db $connection2 = null): bool {\n\t\treturn true;\n\t}\n}\n"
  },
  {
    "path": "adminer/drivers/oracle.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"oracle\", \"Oracle (beta)\");\n\nif (isset($_GET[\"oracle\"])) {\n\tdefine('Adminer\\DRIVER', \"oracle\");\n\n\tif (extension_loaded(\"oci8\") && $_GET[\"ext\"] != \"pdo\") {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"oci8\";\n\t\t\tpublic $_current_db;\n\t\t\tprivate $link;\n\n\t\t\tfunction _error($errno, $error) {\n\t\t\t\tif (ini_bool(\"html_errors\")) {\n\t\t\t\t\t$error = html_entity_decode(strip_tags($error));\n\t\t\t\t}\n\t\t\t\t$error = preg_replace('~^[^:]*: ~', '', $error);\n\t\t\t\t$this->error = $error;\n\t\t\t}\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t$this->link = @oci_new_connect($username, $password, $server, \"AL32UTF8\");\n\t\t\t\tif ($this->link) {\n\t\t\t\t\t$this->server_info = oci_server_version($this->link);\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\t$error = oci_error();\n\t\t\t\treturn $error[\"message\"];\n\t\t\t}\n\n\t\t\tfunction quote(string $string): string {\n\t\t\t\treturn \"'\" . str_replace(\"'\", \"''\", $string) . \"'\";\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\t$this->_current_db = $database;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$result = oci_parse($this->link, $query);\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$error = oci_error($this->link);\n\t\t\t\t\t$this->errno = $error[\"code\"];\n\t\t\t\t\t$this->error = $error[\"message\"];\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tset_error_handler(array($this, '_error'));\n\t\t\t\t$return = @oci_execute($result);\n\t\t\t\trestore_error_handler();\n\t\t\t\tif ($return) {\n\t\t\t\t\tif (oci_num_fields($result)) {\n\t\t\t\t\t\treturn new Result($result);\n\t\t\t\t\t}\n\t\t\t\t\t$this->affected_rows = oci_num_rows($result);\n\t\t\t\t\toci_free_statement($result);\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction timeout(int $ms): bool {\n\t\t\t\treturn oci_set_call_timeout($this->link, $ms);\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $result, $offset = 1;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t}\n\n\t\t\tprivate function convert($row) {\n\t\t\t\tforeach ((array) $row as $key => $val) {\n\t\t\t\t\tif (is_a($val, 'OCILob') || is_a($val, 'OCI-Lob')) {\n\t\t\t\t\t\t$row[$key] = $val->load();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $row;\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\treturn $this->convert(oci_fetch_assoc($this->result));\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\treturn $this->convert(oci_fetch_row($this->result));\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$column = $this->offset++;\n\t\t\t\t$return = new \\stdClass;\n\t\t\t\t$return->name = oci_field_name($this->result, $column);\n\t\t\t\t$return->type = oci_field_type($this->result, $column); //! map to MySQL numbers\n\t\t\t\t$return->charsetnr = (preg_match(\"~raw|blob|bfile~\", $return->type) ? 63 : 0); // 63 - binary\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction __destruct() {\n\t\t\t\toci_free_statement($this->result);\n\t\t\t}\n\t\t}\n\n\t} elseif (extension_loaded(\"pdo_oci\")) {\n\t\tclass Db extends PdoDb {\n\t\t\tpublic $extension = \"PDO_OCI\";\n\t\t\tpublic $_current_db;\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\treturn $this->dsn(\"oci:dbname=//$server;charset=AL32UTF8\", $username, $password);\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\t$this->_current_db = $database;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"OCI8\", \"PDO_OCI\");\n\t\tstatic $jush = \"oracle\";\n\n\t\tpublic $insertFunctions = array( //! no parentheses\n\t\t\t\"date\" => \"current_date\",\n\t\t\t\"timestamp\" => \"current_timestamp\",\n\t\t);\n\t\tpublic $editFunctions = array(\n\t\t\t\"number|float|double\" => \"+/-\",\n\t\t\t\"date|timestamp\" => \"+ interval/- interval\",\n\t\t\t\"char|clob\" => \"||\",\n\t\t);\n\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"LIKE\", \"LIKE %%\", \"IN\", \"IS NULL\", \"NOT LIKE\", \"NOT IN\", \"IS NOT NULL\", \"SQL\");\n\t\tpublic $functions = array(\"length\", \"lower\", \"round\", \"upper\");\n\t\tpublic $grouping = array(\"avg\", \"count\", \"count distinct\", \"max\", \"min\", \"sum\");\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\t$this->types = array(\n\t\t\t\tlang('Numbers') => array(\"number\" => 38, \"binary_float\" => 12, \"binary_double\" => 21),\n\t\t\t\tlang('Date and time') => array(\"date\" => 10, \"timestamp\" => 29, \"interval year\" => 12, \"interval day\" => 28), //! year(), day() to second()\n\t\t\t\tlang('Strings') => array(\"char\" => 2000, \"varchar2\" => 4000, \"nchar\" => 2000, \"nvarchar2\" => 4000, \"clob\" => 4294967295, \"nclob\" => 4294967295),\n\t\t\t\tlang('Binary') => array(\"raw\" => 2000, \"long raw\" => 2147483648, \"blob\" => 4294967295, \"bfile\" => 4294967296),\n\t\t\t);\n\t\t}\n\n\t\t//! support empty $set in insert()\n\n\t\tfunction begin() {\n\t\t\treturn true; // automatic start\n\t\t}\n\n\t\tfunction insertUpdate(string $table, array $rows, array $primary) {\n\t\t\tforeach ($rows as $set) {\n\t\t\t\t$update = array();\n\t\t\t\t$where = array();\n\t\t\t\tforeach ($set as $key => $val) {\n\t\t\t\t\t$update[] = \"$key = $val\";\n\t\t\t\t\tif (isset($primary[idf_unescape($key)])) {\n\t\t\t\t\t\t$where[] = \"$key = $val\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!(($where && queries(\"UPDATE \" . table($table) . \" SET \" . implode(\", \", $update) . \" WHERE \" . implode(\" AND \", $where)) && $this->conn->affected_rows)\n\t\t\t\t\t|| queries(\"INSERT INTO \" . table($table) . \" (\" . implode(\", \", array_keys($set)) . \") VALUES (\" . implode(\", \", $set) . \")\"))\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction hasCStyleEscapes(): bool {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\n\n\tfunction idf_escape($idf) {\n\t\treturn '\"' . str_replace('\"', '\"\"', $idf) . '\"';\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn get_vals(\n\t\t\t\"SELECT DISTINCT tablespace_name FROM (\nSELECT tablespace_name FROM user_tablespaces\nUNION SELECT tablespace_name FROM all_tables WHERE tablespace_name IS NOT NULL\n)\nORDER BY 1\"\n\t\t);\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn ($offset ? \" * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $query$where) t WHERE rownum <= \" . ($limit + $offset) . \") WHERE rnum > $offset\"\n\t\t\t: ($limit ? \" * FROM (SELECT $query$where) WHERE rownum <= \" . ($limit + $offset)\n\t\t\t: \" $query$where\"\n\t\t));\n\t}\n\n\tfunction limit1($table, $query, $where, $separator = \"\\n\") {\n\t\treturn \" $query$where\"; //! limit\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t\treturn get_val(\"SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'\"); //! respect $db\n\t}\n\n\tfunction logged_user() {\n\t\treturn get_val(\"SELECT USER FROM DUAL\");\n\t}\n\n\tfunction get_current_db() {\n\t\t$db = connection()->_current_db ?: DB;\n\t\tunset(connection()->_current_db);\n\t\treturn $db;\n\t}\n\n\tfunction where_owner($prefix, $owner = \"owner\") {\n\t\tif (!$_GET[\"ns\"]) {\n\t\t\treturn '';\n\t\t}\n\t\treturn \"$prefix$owner = sys_context('USERENV', 'CURRENT_SCHEMA')\";\n\t}\n\n\tfunction views_table($columns) {\n\t\t$owner = where_owner('');\n\t\treturn \"(SELECT $columns FROM all_views WHERE \" . ($owner ?: \"rownum < 0\") . \")\";\n\t}\n\n\tfunction tables_list() {\n\t\t$view = views_table(\"view_name\");\n\t\t$owner = where_owner(\" AND \");\n\t\treturn get_key_vals(\n\t\t\t\"SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = \" . q(DB) . \"$owner\nUNION SELECT view_name, 'view' FROM $view\nORDER BY 1\"\n\t\t); //! views don't have schema\n\t}\n\n\tfunction count_tables($databases) {\n\t\t$return = array();\n\t\tforeach ($databases as $db) {\n\t\t\t$return[$db] = get_val(\"SELECT COUNT(*) FROM all_tables WHERE tablespace_name = \" . q($db));\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction table_status($name = \"\") {\n\t\t$return = array();\n\t\t$search = q($name);\n\t\t$db = get_current_db();\n\t\t$view = views_table(\"view_name\");\n\t\t$owner = where_owner(\" AND \");\n\t\tforeach (\n\t\t\tget_rows('SELECT table_name \"Name\", \\'table\\' \"Engine\", avg_row_len * num_rows \"Data_length\", num_rows \"Rows\" FROM all_tables WHERE tablespace_name = ' . q($db) . $owner . ($name != \"\" ? \" AND table_name = $search\" : \"\") . \"\nUNION SELECT view_name, 'view', 0, 0 FROM $view\" . ($name != \"\" ? \" WHERE view_name = $search\" : \"\") . \"\nORDER BY 1\") as $row\n\t\t) {\n\t\t\t$return[$row[\"Name\"]] = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn $table_status[\"Engine\"] == \"view\";\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn true;\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\t$owner = where_owner(\" AND \");\n\t\tforeach (get_rows(\"SELECT * FROM all_tab_columns WHERE table_name = \" . q($table) . \"$owner ORDER BY column_id\") as $row) {\n\t\t\t$type = $row[\"DATA_TYPE\"];\n\t\t\t$length = \"$row[DATA_PRECISION],$row[DATA_SCALE]\";\n\t\t\tif ($length == \",\") {\n\t\t\t\t$length = $row[\"CHAR_COL_DECL_LENGTH\"];\n\t\t\t} //! int\n\t\t\t$return[$row[\"COLUMN_NAME\"]] = array(\n\t\t\t\t\"field\" => $row[\"COLUMN_NAME\"],\n\t\t\t\t\"full_type\" => $type . ($length ? \"($length)\" : \"\"),\n\t\t\t\t\"type\" => strtolower($type),\n\t\t\t\t\"length\" => $length,\n\t\t\t\t\"default\" => $row[\"DATA_DEFAULT\"],\n\t\t\t\t\"null\" => ($row[\"NULLABLE\"] == \"Y\"),\n\t\t\t\t//! \"auto_increment\" => false,\n\t\t\t\t//! \"collation\" => $row[\"CHARACTER_SET_NAME\"],\n\t\t\t\t\"privileges\" => array(\"insert\" => 1, \"select\" => 1, \"update\" => 1, \"where\" => 1, \"order\" => 1),\n\t\t\t\t//! \"comment\" => $row[\"Comment\"],\n\t\t\t\t//! \"primary\" => ($row[\"Key\"] == \"PRI\"),\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\t$return = array();\n\t\t$owner = where_owner(\" AND \", \"aic.table_owner\");\n\t\tforeach (\n\t\t\tget_rows(\"SELECT aic.*, ac.constraint_type, atc.data_default\nFROM all_ind_columns aic\nLEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner\nLEFT 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\nWHERE aic.table_name = \" . q($table) . \"$owner\nORDER BY ac.constraint_type, aic.column_position\", $connection2) as $row\n\t\t) {\n\t\t\t$index_name = $row[\"INDEX_NAME\"];\n\t\t\t$column_name = $row[\"DATA_DEFAULT\"];\n\t\t\t$column_name = ($column_name ? trim($column_name, '\"') : $row[\"COLUMN_NAME\"]); // trim - possibly wrapped in quotes but never contains quotes inside\n\t\t\t$return[$index_name][\"type\"] = ($row[\"CONSTRAINT_TYPE\"] == \"P\" ? \"PRIMARY\" : ($row[\"CONSTRAINT_TYPE\"] == \"U\" ? \"UNIQUE\" : \"INDEX\"));\n\t\t\t$return[$index_name][\"columns\"][] = $column_name;\n\t\t\t$return[$index_name][\"lengths\"][] = ($row[\"CHAR_LENGTH\"] && $row[\"CHAR_LENGTH\"] != $row[\"COLUMN_LENGTH\"] ? $row[\"CHAR_LENGTH\"] : null);\n\t\t\t$return[$index_name][\"descs\"][] = ($row[\"DESCEND\"] && $row[\"DESCEND\"] == \"DESC\" ? '1' : null);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction view($name) {\n\t\t$view = views_table(\"view_name, text\");\n\t\t$rows = get_rows('SELECT text \"select\" FROM ' . $view . ' WHERE view_name = ' . q($name));\n\t\treturn reset($rows);\n\t}\n\n\tfunction collations() {\n\t\treturn array(); //!\n\t}\n\n\tfunction information_schema($db) {\n\t\treturn get_schema() == \"INFORMATION_SCHEMA\";\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error); //! highlight sqltext from offset\n\t}\n\n\tfunction explain($connection, $query) {\n\t\t$connection->query(\"EXPLAIN PLAN FOR $query\");\n\t\treturn $connection->query(\"SELECT * FROM plan_table\");\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t}\n\n\tfunction auto_increment() {\n\t\treturn \"\";\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\t$alter = $drop = array();\n\t\t$orig_fields = ($table ? fields($table) : array());\n\t\tforeach ($fields as $field) {\n\t\t\t$val = $field[1];\n\t\t\tif ($val && $field[0] != \"\" && idf_escape($field[0]) != $val[0]) {\n\t\t\t\tqueries(\"ALTER TABLE \" . table($table) . \" RENAME COLUMN \" . idf_escape($field[0]) . \" TO $val[0]\");\n\t\t\t}\n\t\t\t$orig_field = $orig_fields[$field[0]];\n\t\t\tif ($val && $orig_field) {\n\t\t\t\t$old = process_field($orig_field, $orig_field);\n\t\t\t\tif ($val[2] == $old[2]) {\n\t\t\t\t\t$val[2] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($val) {\n\t\t\t\t$alter[] = ($table != \"\" ? ($field[0] != \"\" ? \"MODIFY (\" : \"ADD (\") : \"  \") . implode($val) . ($table != \"\" ? \")\" : \"\"); //! error with name change only\n\t\t\t} else {\n\t\t\t\t$drop[] = idf_escape($field[0]);\n\t\t\t}\n\t\t}\n\t\tif ($table == \"\") {\n\t\t\treturn queries(\"CREATE TABLE \" . table($name) . \" (\\n\" . implode(\",\\n\", $alter) . \"\\n)\");\n\t\t}\n\t\treturn (!$alter || queries(\"ALTER TABLE \" . table($table) . \"\\n\" . implode(\"\\n\", $alter)))\n\t\t\t&& (!$drop || queries(\"ALTER TABLE \" . table($table) . \" DROP (\" . implode(\", \", $drop) . \")\"))\n\t\t\t&& ($table == $name || queries(\"ALTER TABLE \" . table($table) . \" RENAME TO \" . table($name)))\n\t\t;\n\t}\n\n\tfunction alter_indexes($table, $alter) {\n\t\t$drop = array();\n\t\t$queries = array();\n\t\tforeach ($alter as $val) {\n\t\t\tif ($val[0] != \"INDEX\") {\n\t\t\t\t$val[2] = preg_replace('~ DESC$~', '', $val[2]);\n\t\t\t\t$create = ($val[2] == \"DROP\"\n\t\t\t\t\t? \"\\nDROP CONSTRAINT \" . idf_escape($val[1])\n\t\t\t\t\t: \"\\nADD\" . ($val[1] != \"\" ? \" CONSTRAINT \" . idf_escape($val[1]) : \"\") . \" $val[0] \" . ($val[0] == \"PRIMARY\" ? \"KEY \" : \"\") . \"(\" . implode(\", \", $val[2]) . \")\"\n\t\t\t\t);\n\t\t\t\tarray_unshift($queries, \"ALTER TABLE \" . table($table) . $create);\n\t\t\t} elseif ($val[2] == \"DROP\") {\n\t\t\t\t$drop[] = idf_escape($val[1]);\n\t\t\t} else {\n\t\t\t\t$queries[] = \"CREATE INDEX \" . idf_escape($val[1] != \"\" ? $val[1] : uniqid($table . \"_\")) . \" ON \" . table($table) . \" (\" . implode(\", \", $val[2]) . \")\";\n\t\t\t}\n\t\t}\n\t\tif ($drop) {\n\t\t\tarray_unshift($queries, \"DROP INDEX \" . implode(\", \", $drop));\n\t\t}\n\t\tforeach ($queries as $query) {\n\t\t\tif (!queries($query)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction foreign_keys($table) {\n\t\t$return = array();\n\t\t$query = \"SELECT c_list.CONSTRAINT_NAME as NAME,\nc_src.COLUMN_NAME as SRC_COLUMN,\nc_dest.OWNER as DEST_DB,\nc_dest.TABLE_NAME as DEST_TABLE,\nc_dest.COLUMN_NAME as DEST_COLUMN,\nc_list.DELETE_RULE as ON_DELETE\nFROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest\nWHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME\nAND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME\nAND c_list.CONSTRAINT_TYPE = 'R'\nAND c_src.TABLE_NAME = \" . q($table);\n\t\tforeach (get_rows($query) as $row) {\n\t\t\t$return[$row['NAME']] = array(\n\t\t\t\t\"db\" => $row['DEST_DB'],\n\t\t\t\t\"table\" => $row['DEST_TABLE'],\n\t\t\t\t\"source\" => array($row['SRC_COLUMN']),\n\t\t\t\t\"target\" => array($row['DEST_COLUMN']),\n\t\t\t\t\"on_delete\" => $row['ON_DELETE'],\n\t\t\t\t\"on_update\" => null,\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\treturn apply_queries(\"TRUNCATE TABLE\", $tables);\n\t}\n\n\tfunction drop_views($views) {\n\t\treturn apply_queries(\"DROP VIEW\", $views);\n\t}\n\n\tfunction drop_tables($tables) {\n\t\treturn apply_queries(\"DROP TABLE\", $tables);\n\t}\n\n\tfunction last_id($result) {\n\t\treturn 0; //!\n\t}\n\n\tfunction schemas() {\n\t\t$return = 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\");\n\t\treturn ($return ?: get_vals(\"SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = \" . q(DB) . \" ORDER BY 1\"));\n\t}\n\n\tfunction get_schema() {\n\t\treturn get_val(\"SELECT sys_context('USERENV', 'SESSION_USER') FROM dual\");\n\t}\n\n\tfunction set_schema($scheme, $connection2 = null) {\n\t\tif (!$connection2) {\n\t\t\t$connection2 = connection();\n\t\t}\n\t\treturn $connection2->query(\"ALTER SESSION SET CURRENT_SCHEMA = \" . idf_escape($scheme));\n\t}\n\n\tfunction show_variables() {\n\t\treturn get_rows('SELECT name, display_value FROM v$parameter');\n\t}\n\n\tfunction show_status() {\n\t\t$return = array();\n\t\t$rows = get_rows('SELECT * FROM v$instance');\n\t\tforeach (reset($rows) as $key => $val) {\n\t\t\t$return[] = array($key, $val);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction process_list() {\n\t\treturn get_rows('SELECT\n\tsess.process AS \"process\",\n\tsess.username AS \"user\",\n\tsess.schemaname AS \"schema\",\n\tsess.status AS \"status\",\n\tsess.wait_class AS \"wait_class\",\n\tsess.seconds_in_wait AS \"seconds_in_wait\",\n\tsql.sql_text AS \"sql_text\",\n\tsess.machine AS \"machine\",\n\tsess.port AS \"port\"\nFROM v$session sess LEFT OUTER JOIN v$sql sql\nON sql.sql_id = sess.sql_id\nWHERE sess.type = \\'USER\\'\nORDER BY PROCESS\n');\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~', $feature); //!\n\t}\n}\n"
  },
  {
    "path": "adminer/drivers/pgsql.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"pgsql\", \"PostgreSQL\");\n\nif (isset($_GET[\"pgsql\"])) {\n\tdefine('Adminer\\DRIVER', \"pgsql\");\n\n\tif (extension_loaded(\"pgsql\") && $_GET[\"ext\"] != \"pdo\") {\n\t\tclass PgsqlDb extends SqlDb {\n\t\t\tpublic $extension = \"PgSQL\";\n\t\t\tpublic $timeout = 0;\n\t\t\tprivate $link, $string, $database = true;\n\n\t\t\tfunction _error($errno, $error) {\n\t\t\t\tif (ini_bool(\"html_errors\")) {\n\t\t\t\t\t$error = html_entity_decode(strip_tags($error));\n\t\t\t\t}\n\t\t\t\t$error = preg_replace('~^[^:]*: ~', '', $error);\n\t\t\t\t$this->error = $error;\n\t\t\t}\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t$db = adminer()->database();\n\t\t\t\tset_error_handler(array($this, '_error'));\n\t\t\t\tlist($host, $port) = host_port(addcslashes($server, \"'\\\\\"));\n\t\t\t\t$this->string = \"host='$host'\" . ($port ? \" port='$port'\" : \"\") . \" user='\" . addcslashes($username, \"'\\\\\") . \"' password='\" . addcslashes($password, \"'\\\\\") . \"'\";\n\t\t\t\t$ssl = adminer()->connectSsl();\n\t\t\t\tif (isset($ssl[\"mode\"])) {\n\t\t\t\t\t$this->string .= \" sslmode='\" . $ssl[\"mode\"] . \"'\";\n\t\t\t\t}\n\t\t\t\t$this->link = @pg_connect(\"$this->string dbname='\" . ($db != \"\" ? addcslashes($db, \"'\\\\\") : \"postgres\") . \"'\", PGSQL_CONNECT_FORCE_NEW);\n\t\t\t\tif (!$this->link && $db != \"\") {\n\t\t\t\t\t// try to connect directly with database for performance\n\t\t\t\t\t$this->database = false;\n\t\t\t\t\t$this->link = @pg_connect(\"$this->string dbname='postgres'\", PGSQL_CONNECT_FORCE_NEW);\n\t\t\t\t}\n\t\t\t\trestore_error_handler();\n\t\t\t\tif ($this->link) {\n\t\t\t\t\tpg_set_client_encoding($this->link, \"UTF8\");\n\t\t\t\t}\n\t\t\t\treturn ($this->link ? '' : $this->error);\n\t\t\t}\n\n\t\t\tfunction quote(string $string): string {\n\t\t\t\treturn (function_exists('pg_escape_literal')\n\t\t\t\t\t? pg_escape_literal($this->link, $string) // available since PHP 5.4.4\n\t\t\t\t\t: \"'\" . pg_escape_string($this->link, $string) . \"'\"\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction value(?string $val, array $field): ?string {\n\t\t\t\treturn ($field[\"type\"] == \"bytea\" && $val !== null ? pg_unescape_bytea($val) : $val);\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\tif ($database == adminer()->database()) {\n\t\t\t\t\treturn $this->database;\n\t\t\t\t}\n\t\t\t\t$return = @pg_connect(\"$this->string dbname='\" . addcslashes($database, \"'\\\\\") . \"'\", PGSQL_CONNECT_FORCE_NEW);\n\t\t\t\tif ($return) {\n\t\t\t\t\t$this->link = $return;\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction close() {\n\t\t\t\t$this->link = @pg_connect(\"$this->string dbname='postgres'\");\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$result = @pg_query($this->link, $query);\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$this->error = pg_last_error($this->link);\n\t\t\t\t\t$return = false;\n\t\t\t\t} elseif (!pg_num_fields($result)) {\n\t\t\t\t\t$this->affected_rows = pg_affected_rows($result);\n\t\t\t\t\t$return = true;\n\t\t\t\t} else {\n\t\t\t\t\t$return = new Result($result);\n\t\t\t\t}\n\t\t\t\tif ($this->timeout) {\n\t\t\t\t\t$this->timeout = 0;\n\t\t\t\t\t$this->query(\"RESET statement_timeout\");\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction warnings() {\n\t\t\t\tif (PHP_VERSION_ID >= 70100) {\n\t\t\t\t\t$return = implode(\"\\n\", pg_last_notice($this->link, 2)); // 2 - PGSQL_NOTICE_ALL\n\t\t\t\t\tpg_last_notice($this->link, 3); // 3 - PGSQL_NOTICE_CLEAR\n\t\t\t\t} else {\n\t\t\t\t\t$return = pg_last_notice($this->link);\n\t\t\t\t}\n\t\t\t\treturn nl_br(h($return));\n\t\t\t}\n\n\t\t\t/** Copy from array into a table\n\t\t\t* @param list<string> $rows\n\t\t\t*/\n\t\t\tfunction copyFrom(string $table, array $rows): bool {\n\t\t\t\t$this->error = '';\n\t\t\t\tset_error_handler(function (int $errno, string $error): bool {\n\t\t\t\t\t$this->error = (ini_bool('html_errors') ? html_entity_decode($error) : $error);\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\t$return = pg_copy_from($this->link, $table, $rows);\n\t\t\t\trestore_error_handler();\n\t\t\t\treturn $return;\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $result, $offset = 0;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t\t$this->num_rows = pg_num_rows($result);\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\treturn pg_fetch_assoc($this->result);\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\treturn pg_fetch_row($this->result);\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$column = $this->offset++;\n\t\t\t\t$return = new \\stdClass;\n\t\t\t\t$return->orgtable = pg_field_table($this->result, $column);\n\t\t\t\t$return->name = pg_field_name($this->result, $column);\n\t\t\t\t$type = pg_field_type($this->result, $column);\n\t\t\t\t$return->type = (preg_match(number_type(), $type) ? 0 : 15);\n\t\t\t\t$return->charsetnr = ($type == \"bytea\" ? 63 : 0); // 63 - binary\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction __destruct() {\n\t\t\t\tpg_free_result($this->result);\n\t\t\t}\n\t\t}\n\n\t} elseif (extension_loaded(\"pdo_pgsql\")) {\n\t\tclass PgsqlDb extends PdoDb {\n\t\t\tpublic $extension = \"PDO_PgSQL\";\n\t\t\tpublic $timeout = 0;\n\n\t\t\tfunction attach(string $server, string $username, string $password): string {\n\t\t\t\t$db = adminer()->database();\n\t\t\t\tlist($host, $port) = host_port(addcslashes($server, \"'\\\\\"));\n\t\t\t\t//! client_encoding is supported since 9.1, but we can't yet use min_version here\n\t\t\t\t$dsn = \"pgsql:host='$host'\" . ($port ? \" port='$port'\" : \"\") . \" client_encoding=utf8 dbname='\" . ($db != \"\" ? addcslashes($db, \"'\\\\\") : \"postgres\") . \"'\";\n\t\t\t\t$ssl = adminer()->connectSsl();\n\t\t\t\tif (isset($ssl[\"mode\"])) {\n\t\t\t\t\t$dsn .= \" sslmode='\" . $ssl[\"mode\"] . \"'\";\n\t\t\t\t}\n\t\t\t\treturn $this->dsn($dsn, $username, $password);\n\t\t\t}\n\n\t\t\tfunction select_db(string $database) {\n\t\t\t\treturn (adminer()->database() == $database);\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$return = parent::query($query, $unbuffered);\n\t\t\t\tif ($this->timeout) {\n\t\t\t\t\t$this->timeout = 0;\n\t\t\t\t\tparent::query(\"RESET statement_timeout\");\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction warnings() {\n\t\t\t\t// not implemented in PDO_PgSQL as of PHP 7.2.1\n\t\t\t}\n\n\t\t\tfunction copyFrom(string $table, array $rows): bool {\n\t\t\t\t$return = $this->pdo->pgsqlCopyFromArray($table, $rows);\n\t\t\t\t$this->error = idx($this->pdo->errorInfo(), 2) ?: '';\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction close() {\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\n\tif (class_exists('Adminer\\PgsqlDb')) {\n\t\tclass Db extends PgsqlDb {\n\t\t\tfunction multi_query(string $query) {\n\t\t\t\tif (preg_match('~\\bCOPY\\s+(.+?)\\s+FROM\\s+stdin;\\n?(.*)\\n\\\\\\\\\\.$~is', str_replace(\"\\r\\n\", \"\\n\", $query), $match)) { // no ^ to allow leading comments\n\t\t\t\t\t$rows = explode(\"\\n\", $match[2]);\n\t\t\t\t\t$this->affected_rows = count($rows);\n\t\t\t\t\treturn $this->copyFrom($match[1], $rows);\n\t\t\t\t}\n\t\t\t\treturn parent::multi_query($query);\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"PgSQL\", \"PDO_PgSQL\");\n\t\tstatic $jush = \"pgsql\";\n\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"~\", \"!~\", \"LIKE\", \"LIKE %%\", \"ILIKE\", \"ILIKE %%\", \"IN\", \"IS NULL\", \"NOT LIKE\", \"NOT ILIKE\", \"NOT IN\", \"IS NOT NULL\", \"SQL\"); //! SQL - same-site CSRF\n\t\tpublic $functions = array(\"char_length\", \"lower\", \"round\", \"to_hex\", \"to_timestamp\", \"upper\");\n\t\tpublic $grouping = array(\"avg\", \"count\", \"count distinct\", \"max\", \"min\", \"sum\");\n\n\t\tpublic string $nsOid = \"(SELECT oid FROM pg_namespace WHERE nspname = current_schema())\";\n\n\t\tstatic function connect(string $server, string $username, string $password) {\n\t\t\t$connection = parent::connect($server, $username, $password);\n\t\t\tif (is_string($connection)) {\n\t\t\t\treturn $connection;\n\t\t\t}\n\t\t\t$version = get_val(\"SELECT version()\", 0, $connection);\n\t\t\t$connection->flavor = (preg_match('~CockroachDB~', $version) ? 'cockroach' : '');\n\t\t\t$connection->server_info = preg_replace('~^\\D*([\\d.]+[-\\w]*).*~', '\\1', $version);\n\t\t\tif (min_version(9, 0, $connection)) {\n\t\t\t\t$connection->query(\"SET application_name = 'Adminer'\");\n\t\t\t}\n\t\t\tif ($connection->flavor == 'cockroach') { // we don't use \"PostgreSQL / CockroachDB\" by default because it's too long\n\t\t\t\tadd_driver(DRIVER, \"CockroachDB\");\n\t\t\t}\n\t\t\treturn $connection;\n\t\t}\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\t$this->types = array( //! arrays\n\t\t\t\tlang('Numbers') => array(\"smallint\" => 5, \"integer\" => 10, \"bigint\" => 19, \"boolean\" => 1, \"numeric\" => 0, \"real\" => 7, \"double precision\" => 16, \"money\" => 20),\n\t\t\t\tlang('Date and time') => array(\"date\" => 13, \"time\" => 17, \"timestamp\" => 20, \"timestamptz\" => 21, \"interval\" => 0),\n\t\t\t\tlang('Strings') => array(\"character\" => 0, \"character varying\" => 0, \"text\" => 0, \"tsquery\" => 0, \"tsvector\" => 0, \"uuid\" => 0, \"xml\" => 0),\n\t\t\t\tlang('Binary') => array(\"bit\" => 0, \"bit varying\" => 0, \"bytea\" => 0),\n\t\t\t\tlang('Network') => array(\"cidr\" => 43, \"inet\" => 43, \"macaddr\" => 17, \"macaddr8\" => 23, \"txid_snapshot\" => 0),\n\t\t\t\tlang('Geometry') => array(\"box\" => 0, \"circle\" => 0, \"line\" => 0, \"lseg\" => 0, \"path\" => 0, \"point\" => 0, \"polygon\" => 0),\n\t\t\t);\n\t\t\tif (min_version(9.2, 0, $connection)) {\n\t\t\t\t$this->types[lang('Strings')][\"json\"] = 4294967295;\n\t\t\t\tif (min_version(9.4, 0, $connection)) {\n\t\t\t\t\t$this->types[lang('Strings')][\"jsonb\"] = 4294967295;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$this->insertFunctions = array(\n\t\t\t\t\"char\" => \"md5\",\n\t\t\t\t\"date|time\" => \"now\",\n\t\t\t);\n\t\t\t$this->editFunctions = array(\n\t\t\t\tnumber_type() => \"+/-\",\n\t\t\t\t\"date|time\" => \"+ interval/- interval\", //! escape\n\t\t\t\t\"char|text\" => \"||\",\n\t\t\t);\n\t\t\tif (min_version(12, 0, $connection)) {\n\t\t\t\t$this->generated = array(\"STORED\");\n\t\t\t}\n\t\t\t$this->partitionBy = array(\"RANGE\", \"LIST\");\n\t\t\tif (!$connection->flavor) {\n\t\t\t\t$this->partitionBy[] = \"HASH\";\n\t\t\t}\n\t\t}\n\n\t\tfunction enumLength(array $field) {\n\t\t\t$enum = $this->types[lang('User types')][$field[\"type\"]];\n\t\t\treturn ($enum ? type_values($enum) : \"\");\n\t\t}\n\n\t\tfunction setUserTypes($types) {\n\t\t\t$this->types[lang('User types')] = array_flip($types);\n\t\t}\n\n\t\tfunction insertReturning(string $table): string {\n\t\t\t$auto_increment = array_filter(fields($table), function ($field) {\n\t\t\t\treturn $field['auto_increment'];\n\t\t\t});\n\t\t\treturn (count($auto_increment) == 1 ? \" RETURNING \" . idf_escape(key($auto_increment)) : \"\");\n\t\t}\n\n\t\tfunction insertUpdate(string $table, array $rows, array $primary) {\n\t\t\tforeach ($rows as $set) {\n\t\t\t\t$update = array();\n\t\t\t\t$where = array();\n\t\t\t\tforeach ($set as $key => $val) {\n\t\t\t\t\t$update[] = \"$key = $val\";\n\t\t\t\t\tif (isset($primary[idf_unescape($key)])) {\n\t\t\t\t\t\t$where[] = \"$key = $val\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\t!(($where && queries(\"UPDATE \" . table($table) . \" SET \" . implode(\", \", $update) . \" WHERE \" . implode(\" AND \", $where)) && $this->conn->affected_rows)\n\t\t\t\t\t|| queries(\"INSERT INTO \" . table($table) . \" (\" . implode(\", \", array_keys($set)) . \") VALUES (\" . implode(\", \", $set) . \")\"))\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction slowQuery(string $query, int $timeout) {\n\t\t\t$this->conn->query(\"SET statement_timeout = \" . (1000 * $timeout));\n\t\t\t$this->conn->timeout = 1000 * $timeout;\n\t\t\treturn $query;\n\t\t}\n\n\t\tfunction convertSearch(string $idf, array $val, array $field): string {\n\t\t\t$textTypes = \"char|text\";\n\t\t\tif (strpos($val[\"op\"], \"LIKE\") === false) {\n\t\t\t\t$textTypes .= \"|date|time(stamp)?|boolean|uuid|inet|cidr|macaddr|\" . number_type();\n\t\t\t}\n\n\t\t\treturn (preg_match(\"~$textTypes~\", $field[\"type\"]) ? $idf : \"CAST($idf AS text)\");\n\t\t}\n\n\t\tfunction quoteBinary(string $s): string {\n\t\t\treturn \"'\\\\x\" . bin2hex($s) . \"'\"; // available since PostgreSQL 8.1\n\t\t}\n\n\t\tfunction warnings() {\n\t\t\treturn $this->conn->warnings();\n\t\t}\n\n\t\tfunction tableHelp(string $name, bool $is_view = false) {\n\t\t\t$links = array(\n\t\t\t\t\"information_schema\" => \"infoschema\",\n\t\t\t\t\"pg_catalog\" => ($is_view ? \"view\" : \"catalog\"),\n\t\t\t);\n\t\t\t$link = $links[$_GET[\"ns\"]];\n\t\t\tif ($link) {\n\t\t\t\treturn \"$link-\" . str_replace(\"_\", \"-\", $name) . \".html\";\n\t\t\t}\n\t\t}\n\n\t\tfunction inheritsFrom(string $table): array {\n\t\t\treturn get_rows(\"SELECT relname AS table, nspname AS ns FROM pg_class JOIN pg_inherits ON inhparent = oid JOIN pg_namespace ON relnamespace = pg_namespace.oid WHERE inhrelid = \" . $this->tableOid($table) . \" ORDER BY 2, 1\");\n\t\t}\n\n\t\tfunction inheritedTables(string $table): array {\n\t\t\treturn get_rows(\"SELECT relname AS table, nspname AS ns FROM pg_inherits JOIN pg_class ON inhrelid = oid JOIN pg_namespace ON relnamespace = pg_namespace.oid WHERE inhparent = \" . $this->tableOid($table) . \" ORDER BY 2, 1\");\n\t\t}\n\n\t\tfunction partitionsInfo(string $table): array {\n\t\t\t$row = (min_version(10) ? $this->conn->query(\"SELECT * FROM pg_partitioned_table WHERE partrelid = \" . $this->tableOid($table))->fetch_assoc() : null);\n\t\t\tif ($row) {\n\t\t\t\t$attrs = get_vals(\"SELECT attname FROM pg_attribute WHERE attrelid = $row[partrelid] AND attnum IN (\" . str_replace(\" \", \", \", $row[\"partattrs\"]) . \")\"); //! ordering\n\t\t\t\t$by = array('h' => 'HASH', 'l' => 'LIST', 'r' => 'RANGE');\n\t\t\t\treturn array(\n\t\t\t\t\t\"partition_by\" => $by[$row[\"partstrat\"]],\n\t\t\t\t\t\"partition\" => implode(\", \", array_map('Adminer\\idf_escape', $attrs)),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn array();\n\t\t}\n\n\t\tfunction tableOid(string $table): string {\n\t\t\treturn \"(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = \" . q($table) . \" AND relkind IN ('r', 'm', 'v', 'f', 'p'))\";\n\t\t}\n\n\t\tfunction indexAlgorithms(array $tableStatus): array {\n\t\t\tstatic $return = array();\n\t\t\tif (!$return) {\n\t\t\t\t$return = 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\");\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction supportsIndex(array $table_status): bool {\n\t\t\t// returns true for \"materialized view\"\n\t\t\treturn $table_status[\"Engine\"] != \"view\";\n\t\t}\n\n\t\tfunction hasCStyleEscapes(): bool {\n\t\t\tstatic $c_style;\n\t\t\tif ($c_style === null) {\n\t\t\t\t$c_style = (get_val(\"SHOW standard_conforming_strings\", 0, $this->conn) == \"off\");\n\t\t\t}\n\t\t\treturn $c_style;\n\t\t}\n\t}\n\n\n\n\tfunction idf_escape($idf) {\n\t\treturn '\"' . str_replace('\"', '\"\"', $idf) . '\"';\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn get_vals(\"SELECT datname FROM pg_database\nWHERE datallowconn = TRUE AND has_database_privilege(datname, 'CONNECT')\nORDER BY datname\");\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT $limit\" . ($offset ? \" OFFSET $offset\" : \"\") : \"\");\n\t}\n\n\tfunction limit1($table, $query, $where, $separator = \"\\n\") {\n\t\treturn (preg_match('~^INTO~', $query)\n\t\t\t? limit($query, $where, 1, 0, $separator)\n\t\t\t: \" $query\" . (is_view(table_status1($table)) ? $where : $separator . \"WHERE ctid = (SELECT ctid FROM \" . table($table) . $where . $separator . \"LIMIT 1)\")\n\t\t);\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t\treturn get_val(\"SELECT datcollate FROM pg_database WHERE datname = \" . q($db));\n\t}\n\n\tfunction logged_user() {\n\t\treturn get_val(\"SELECT user\");\n\t}\n\n\tfunction tables_list() {\n\t\t$query = \"SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()\";\n\t\tif (support(\"materializedview\")) {\n\t\t\t$query .= \"\nUNION ALL\nSELECT matviewname, 'MATERIALIZED VIEW'\nFROM pg_matviews\nWHERE schemaname = current_schema()\";\n\t\t}\n\t\t$query .= \"\nORDER BY 1\";\n\t\treturn get_key_vals($query);\n\t}\n\n\tfunction count_tables($databases) {\n\t\t$return = array();\n\t\tforeach ($databases as $db) {\n\t\t\tif (connection()->select_db($db)) {\n\t\t\t\t$return[$db] = count(tables_list());\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction table_status($name = \"\") {\n\t\tstatic $has_size;\n\t\tif ($has_size === null) {\n\t\t\t// https://github.com/cockroachdb/cockroach/issues/40391\n\t\t\t$has_size = get_val(\"SELECT 'pg_table_size'::regproc\");\n\t\t}\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_rows(\"SELECT\n\trelname AS \\\"Name\\\",\n\tCASE relkind WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' ELSE 'table' END AS \\\"Engine\\\"\" . ($has_size ? \",\n\tpg_table_size(c.oid) AS \\\"Data_length\\\",\n\tpg_indexes_size(c.oid) AS \\\"Index_length\\\"\" : \"\") . \",\n\tobj_description(c.oid, 'pg_class') AS \\\"Comment\\\",\n\t\" . (min_version(12) ? \"''\" : \"CASE WHEN relhasoids THEN 'oid' ELSE '' END\") . \" AS \\\"Oid\\\",\n\treltuples AS \\\"Rows\\\",\n\t\" . (min_version(10) ? \"relispartition::int AS partition,\" : \"\") . \"\n\tcurrent_schema() AS nspname\nFROM pg_class c\nWHERE relkind IN ('r', 'm', 'v', 'f', 'p')\nAND relnamespace = \" . driver()->nsOid . \"\n\" . ($name != \"\" ? \"AND relname = \" . q($name) : \"ORDER BY relname\")) as $row //! Auto_increment\n\t\t) {\n\t\t\t$return[$row[\"Name\"]] = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn in_array($table_status[\"Engine\"], array(\"view\", \"materialized view\"));\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn true;\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\t$aliases = array(\n\t\t\t'timestamp without time zone' => 'timestamp',\n\t\t\t'timestamp with time zone' => 'timestamptz',\n\t\t);\n\t\tforeach (\n\t\t\tget_rows(\"SELECT\n\ta.attname AS field,\n\tformat_type(a.atttypid, a.atttypmod) AS full_type,\n\tpg_get_expr(d.adbin, d.adrelid) AS default,\n\ta.attnotnull::int,\n\ti.indrelid AS primary,\n\tcol_description(a.attrelid, a.attnum) AS comment\" . (min_version(10) ? \",\n\ta.attidentity\" . (min_version(12) ? \",\n\ta.attgenerated\" : \"\") : \"\") . \"\nFROM pg_attribute a\nLEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum\nLEFT JOIN pg_index i ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) AND i.indisprimary\nWHERE a.attrelid = \" . driver()->tableOid($table) . \"\nAND NOT a.attisdropped\nAND a.attnum > 0\nORDER BY a.attnum\") as $row\n\t\t) {\n\t\t\t//! collation\n\t\t\tpreg_match('~([^([]+)(\\((.*)\\))?([a-z ]+)?((\\[[0-9]*])*)$~', $row[\"full_type\"], $match);\n\t\t\tlist(, $type, $length, $row[\"length\"], $addon, $array) = $match;\n\t\t\t$row[\"length\"] .= $array;\n\t\t\t$check_type = $type . $addon;\n\t\t\tif (isset($aliases[$check_type])) {\n\t\t\t\t$row[\"type\"] = $aliases[$check_type];\n\t\t\t\t$row[\"full_type\"] = $row[\"type\"] . $length . $array;\n\t\t\t} else {\n\t\t\t\t$row[\"type\"] = $type;\n\t\t\t\t$row[\"full_type\"] = $row[\"type\"] . $length . $addon . $array;\n\t\t\t}\n\t\t\tif (in_array($row['attidentity'], array('a', 'd'))) {\n\t\t\t\t$row['default'] = 'GENERATED ' . ($row['attidentity'] == 'd' ? 'BY DEFAULT' : 'ALWAYS') . ' AS IDENTITY';\n\t\t\t}\n\t\t\t$row[\"generated\"] = ($row[\"attgenerated\"] == \"s\" ? \"STORED\" : \"\");\n\t\t\t$row[\"null\"] = !$row[\"attnotnull\"];\n\t\t\t$row[\"auto_increment\"] = $row['attidentity'] || preg_match('~^nextval\\(~i', $row[\"default\"])\n\t\t\t\t|| preg_match('~^unique_rowid\\(~', $row[\"default\"]); // CockroachDB\n\t\t\t$row[\"privileges\"] = array(\"insert\" => 1, \"select\" => 1, \"update\" => 1, \"where\" => 1, \"order\" => 1);\n\t\t\tif (!$row['generated'] && preg_match('~(.+)::[^,)]+(.*)~', $row[\"default\"], $match)) {\n\t\t\t\t$row[\"default\"] = ($match[1] == \"NULL\" ? null : idf_unescape($match[1]) . $match[2]);\n\t\t\t}\n\t\t\t$return[$row[\"field\"]] = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\t$connection2 = connection($connection2);\n\t\t$return = array();\n\t\t$table_oid = driver()->tableOid($table);\n\t\t$columns = get_key_vals(\"SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0\", $connection2);\n\t\tforeach (\n\t\t\tget_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\nFROM pg_index\nJOIN pg_class ON indexrelid = oid\nJOIN pg_am ON pg_am.oid = pg_class.relam\nWHERE indrelid = $table_oid\nORDER BY indisprimary DESC, indisunique DESC\", $connection2) as $row\n\t\t) {\n\t\t\t$relname = $row[\"relname\"];\n\t\t\t$return[$relname][\"type\"] = ($row[\"indisprimary\"] ? \"PRIMARY\" : ($row[\"indisunique\"] ? \"UNIQUE\" : \"INDEX\"));\n\t\t\t$return[$relname][\"columns\"] = array();\n\t\t\t$return[$relname][\"descs\"] = array();\n\t\t\t$return[$relname][\"algorithm\"] = $row[\"amname\"];\n\t\t\t$return[$relname][\"partial\"] = $row[\"partial\"];\n\t\t\t$indexpr = preg_split('~(?<=\\)), (?=\\()~', $row[\"indexpr\"]); //! '), (' used in expression\n\t\t\tforeach (explode(\" \", $row[\"indkey\"]) as $indkey) {\n\t\t\t\t$return[$relname][\"columns\"][] = ($indkey ? $columns[$indkey] : array_shift($indexpr));\n\t\t\t}\n\t\t\tforeach (explode(\" \", $row[\"indoption\"]) as $indoption) {\n\t\t\t\t$return[$relname][\"descs\"][] = (intval($indoption) & 1 ? '1' : null); // 1 - INDOPTION_DESC\n\t\t\t}\n\t\t\t$return[$relname][\"lengths\"] = array();\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction foreign_keys($table) {\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_rows(\"SELECT conname, condeferrable::int AS deferrable, condeferred::int AS deferred, pg_get_constraintdef(oid) AS definition\nFROM pg_constraint\nWHERE conrelid = \" . driver()->tableOid($table) . \"\nAND contype = 'f'::char\nORDER BY conkey, conname\") as $row\n\t\t) {\n\t\t\t$row['deferrable'] = ($row['deferrable'] ? '' : 'NOT ') . 'DEFERRABLE' . ($row['deferred'] ? ' INITIALLY DEFERRED' : '');\n\t\t\tif (preg_match('~FOREIGN KEY\\s*\\((.+)\\)\\s*REFERENCES (.+)\\((.+)\\)(.*)$~iA', $row['definition'], $match)) {\n\t\t\t\t$row['source'] = array_map('Adminer\\idf_unescape', array_map('trim', explode(',', $match[1])));\n\t\t\t\tif (preg_match('~^((\"([^\"]|\"\")+\"|[^\"]+)\\.)?\"?(\"([^\"]|\"\")+\"|[^\"]+)$~', $match[2], $match2)) {\n\t\t\t\t\t$row['ns'] = idf_unescape($match2[2]);\n\t\t\t\t\t$row['table'] = idf_unescape($match2[4]);\n\t\t\t\t}\n\t\t\t\t$row['target'] = array_map('Adminer\\idf_unescape', array_map('trim', explode(',', $match[3])));\n\t\t\t\t$row['on_delete'] = (preg_match(\"~ON DELETE (\" . driver()->onActions . \")~\", $match[4], $match2) ? $match2[1] : 'NO ACTION');\n\t\t\t\t$row['on_update'] = (preg_match(\"~ON UPDATE (\" . driver()->onActions . \")~\", $match[4], $match2) ? $match2[1] : 'NO ACTION');\n\t\t\t\t$return[$row['conname']] = $row;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction view($name) {\n\t\treturn array(\"select\" => trim(get_val(\"SELECT pg_get_viewdef(\" . driver()->tableOid($name) . \")\")));\n\t}\n\n\tfunction collations() {\n\t\t//! supported in CREATE DATABASE\n\t\treturn array();\n\t}\n\n\tfunction information_schema($db) {\n\t\treturn get_schema() == \"information_schema\";\n\t}\n\n\tfunction error() {\n\t\t$return = h(connection()->error);\n\t\tif (preg_match('~^(.*\\n)?([^\\n]*)\\n( *)\\^(\\n.*)?$~s', $return, $match)) {\n\t\t\t$return = $match[1] . preg_replace('~((?:[^&]|&[^;]*;){' . strlen($match[3]) . '})(.*)~', '\\1<b>\\2</b>', $match[2]) . $match[4];\n\t\t}\n\t\treturn nl_br($return);\n\t}\n\n\tfunction create_database($db, $collation) {\n\t\treturn queries(\"CREATE DATABASE \" . idf_escape($db) . ($collation ? \" ENCODING \" . idf_escape($collation) : \"\"));\n\t}\n\n\tfunction drop_databases($databases) {\n\t\tconnection()->close();\n\t\treturn apply_queries(\"DROP DATABASE\", $databases, 'Adminer\\idf_escape');\n\t}\n\n\tfunction rename_database($name, $collation) {\n\t\tconnection()->close();\n\t\treturn queries(\"ALTER DATABASE \" . idf_escape(DB) . \" RENAME TO \" . idf_escape($name));\n\t}\n\n\tfunction auto_increment() {\n\t\treturn \"\";\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\t$alter = array();\n\t\t$queries = array();\n\t\tif ($table != \"\" && $table != $name) {\n\t\t\t$queries[] = \"ALTER TABLE \" . table($table) . \" RENAME TO \" . table($name);\n\t\t}\n\t\t$sequence = \"\";\n\t\tforeach ($fields as $field) {\n\t\t\t$column = idf_escape($field[0]);\n\t\t\t$val = $field[1];\n\t\t\tif (!$val) {\n\t\t\t\t$alter[] = \"DROP $column\";\n\t\t\t} else {\n\t\t\t\t$val5 = $val[5];\n\t\t\t\tunset($val[5]);\n\t\t\t\tif ($field[0] == \"\") {\n\t\t\t\t\tif (isset($val[6])) { // auto_increment\n\t\t\t\t\t\t$val[1] = ($val[1] == \" bigint\" ? \" big\" : ($val[1] == \" smallint\" ? \" small\" : \" \")) . \"serial\";\n\t\t\t\t\t}\n\t\t\t\t\t$alter[] = ($table != \"\" ? \"ADD \" : \"  \") . implode($val);\n\t\t\t\t\tif (isset($val[6])) {\n\t\t\t\t\t\t$alter[] = ($table != \"\" ? \"ADD\" : \" \") . \" PRIMARY KEY ($val[0])\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ($column != $val[0]) {\n\t\t\t\t\t\t$queries[] = \"ALTER TABLE \" . table($name) . \" RENAME $column TO $val[0]\";\n\t\t\t\t\t}\n\t\t\t\t\t$alter[] = \"ALTER $column TYPE$val[1]\";\n\t\t\t\t\t$sequence_name = $table . \"_\" . idf_unescape($val[0]) . \"_seq\";\n\t\t\t\t\t$alter[] = \"ALTER $column \" . ($val[3] ? \"SET\" . preg_replace('~GENERATED ALWAYS(.*) STORED~', 'EXPRESSION\\1', $val[3])\n\t\t\t\t\t\t: (isset($val[6]) ? \"SET DEFAULT nextval(\" . q($sequence_name) . \")\"\n\t\t\t\t\t\t: \"DROP DEFAULT\" //! change to DROP EXPRESSION with generated columns\n\t\t\t\t\t));\n\t\t\t\t\tif (isset($val[6])) {\n\t\t\t\t\t\t$sequence = \"CREATE SEQUENCE IF NOT EXISTS \" . idf_escape($sequence_name) . \" OWNED BY \" . idf_escape($table) . \".$val[0]\";\n\t\t\t\t\t}\n\t\t\t\t\t$alter[] = \"ALTER $column \" . ($val[2] == \" NULL\" ? \"DROP NOT\" : \"SET\") . $val[2];\n\t\t\t\t}\n\t\t\t\tif ($field[0] != \"\" || $val5 != \"\") {\n\t\t\t\t\t$queries[] = \"COMMENT ON COLUMN \" . table($name) . \".$val[0] IS \" . ($val5 != \"\" ? substr($val5, 9) : \"''\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t$alter = array_merge($alter, $foreign);\n\t\tif ($table == \"\") {\n\t\t\t$status = \"\";\n\t\t\tif ($partitioning) {\n\t\t\t\t$cockroach = (connection()->flavor == 'cockroach');\n\t\t\t\t$status = \" PARTITION BY $partitioning[partition_by]($partitioning[partition])\";\n\t\t\t\tif ($partitioning[\"partition_by\"] == 'HASH') {\n\t\t\t\t\t$partitions = +$partitioning[\"partitions\"];\n\t\t\t\t\tfor ($i=0; $i < $partitions; $i++) {\n\t\t\t\t\t\t$queries[] = \"CREATE TABLE \" . idf_escape($name . \"_$i\") . \" PARTITION OF \" . idf_escape($name) . \" FOR VALUES WITH (MODULUS $partitions, REMAINDER $i)\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$prev = \"MINVALUE\";\n\t\t\t\t\tforeach ($partitioning[\"partition_names\"] as $i => $val) {\n\t\t\t\t\t\t$value = $partitioning[\"partition_values\"][$i];\n\t\t\t\t\t\t$partition = \" VALUES \" . ($partitioning[\"partition_by\"] == 'LIST' ? \"IN ($value)\" : \"FROM ($prev) TO ($value)\");\n\t\t\t\t\t\tif ($cockroach) {\n\t\t\t\t\t\t\t$status .= ($i ? \",\" : \" (\") . \"\\n  PARTITION \" . (preg_match('~^DEFAULT$~i', $val) ? $val : idf_escape($val)) . \"$partition\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$queries[] = \"CREATE TABLE \" . idf_escape($name . \"_$val\") . \" PARTITION OF \" . idf_escape($name) . \" FOR$partition\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$prev = $value;\n\t\t\t\t\t}\n\t\t\t\t\t$status .= ($cockroach ? \"\\n)\" : \"\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tarray_unshift($queries, \"CREATE TABLE \" . table($name) . \" (\\n\" . implode(\",\\n\", $alter) . \"\\n)$status\");\n\t\t} elseif ($alter) {\n\t\t\tarray_unshift($queries, \"ALTER TABLE \" . table($table) . \"\\n\" . implode(\",\\n\", $alter));\n\t\t}\n\t\tif ($sequence) {\n\t\t\tarray_unshift($queries, $sequence);\n\t\t}\n\t\tif ($comment !== null) {\n\t\t\t$queries[] = \"COMMENT ON TABLE \" . table($name) . \" IS \" . q($comment);\n\t\t}\n\t\t// if ($auto_increment != \"\") {\n\t\t\t//! $queries[] = \"SELECT setval(pg_get_serial_sequence(\" . q($name) . \", ), $auto_increment)\";\n\t\t// }\n\t\tforeach ($queries as $query) {\n\t\t\tif (!queries($query)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction alter_indexes($table, $alter) {\n\t\t$create = array();\n\t\t$drop = array();\n\t\t$queries = array();\n\t\tforeach ($alter as $val) {\n\t\t\tif ($val[0] != \"INDEX\") {\n\t\t\t\t//! descending UNIQUE indexes result in syntax error\n\t\t\t\t$create[] = ($val[2] == \"DROP\"\n\t\t\t\t\t? \"\\nDROP CONSTRAINT \" . idf_escape($val[1])\n\t\t\t\t\t: \"\\nADD\" . ($val[1] != \"\" ? \" CONSTRAINT \" . idf_escape($val[1]) : \"\") . \" $val[0] \" . ($val[0] == \"PRIMARY\" ? \"KEY \" : \"\") . \"(\" . implode(\", \", $val[2]) . \")\"\n\t\t\t\t);\n\t\t\t} elseif ($val[2] == \"DROP\") {\n\t\t\t\t$drop[] = idf_escape($val[1]);\n\t\t\t} else {\n\t\t\t\t$queries[] = \"CREATE INDEX \" . idf_escape($val[1] != \"\" ? $val[1] : uniqid($table . \"_\"))\n\t\t\t\t\t. \" ON \" . table($table)\n\t\t\t\t\t. ($val[3] ? \" USING $val[3]\" : \"\")\n\t\t\t\t\t. \" (\" . implode(\", \", $val[2]) . \")\"\n\t\t\t\t\t. ($val[4] ? \" WHERE $val[4]\" : \"\")\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t\tif ($create) {\n\t\t\tarray_unshift($queries, \"ALTER TABLE \" . table($table) . implode(\",\", $create));\n\t\t}\n\t\tif ($drop) {\n\t\t\tarray_unshift($queries, \"DROP INDEX \" . implode(\", \", $drop));\n\t\t}\n\t\tforeach ($queries as $query) {\n\t\t\tif (!queries($query)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\treturn queries(\"TRUNCATE \" . implode(\", \", array_map('Adminer\\table', $tables)));\n\t}\n\n\tfunction drop_views($views) {\n\t\treturn drop_tables($views);\n\t}\n\n\tfunction drop_tables($tables) {\n\t\tforeach ($tables as $table) {\n\t\t\t$status = table_status1($table);\n\t\t\tif (!queries(\"DROP \" . strtoupper($status[\"Engine\"]) . \" \" . table($table))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction move_tables($tables, $views, $target) {\n\t\tforeach (array_merge($tables, $views) as $table) {\n\t\t\t$status = table_status1($table);\n\t\t\tif (!queries(\"ALTER \" . strtoupper($status[\"Engine\"]) . \" \" . table($table) . \" SET SCHEMA \" . idf_escape($target))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction trigger($name, $table) {\n\t\tif ($name == \"\") {\n\t\t\treturn array(\"Statement\" => \"EXECUTE PROCEDURE ()\");\n\t\t}\n\t\t$columns = array();\n\t\t$where = \"WHERE trigger_schema = current_schema() AND event_object_table = \" . q($table) . \" AND trigger_name = \" . q($name);\n\t\tforeach (get_rows(\"SELECT * FROM information_schema.triggered_update_columns $where\") as $row) {\n\t\t\t$columns[] = $row[\"event_object_column\"];\n\t\t}\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_rows('SELECT trigger_name AS \"Trigger\", action_timing AS \"Timing\", event_manipulation AS \"Event\", \\'FOR EACH \\' || action_orientation AS \"Type\", action_statement AS \"Statement\"\nFROM information_schema.triggers' . \"\n$where\nORDER BY event_manipulation DESC\") as $row\n\t\t) {\n\t\t\tif ($columns && $row[\"Event\"] == \"UPDATE\") {\n\t\t\t\t$row[\"Event\"] .= \" OF\";\n\t\t\t}\n\t\t\t$row[\"Of\"] = implode(\", \", $columns);\n\t\t\tif ($return) {\n\t\t\t\t$row[\"Event\"] .= \" OR $return[Event]\";\n\t\t\t}\n\t\t\t$return = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction triggers($table) {\n\t\t$return = array();\n\t\tforeach (get_rows(\"SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = \" . q($table)) as $row) {\n\t\t\t$trigger = trigger($row[\"trigger_name\"], $table);\n\t\t\t$return[$trigger[\"Trigger\"]] = array($trigger[\"Timing\"], $trigger[\"Event\"]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction trigger_options() {\n\t\treturn array(\n\t\t\t\"Timing\" => array(\"BEFORE\", \"AFTER\"),\n\t\t\t\"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\"),\n\t\t\t\"Type\" => array(\"FOR EACH ROW\", \"FOR EACH STATEMENT\"),\n\t\t);\n\t}\n\n\tfunction routine($name, $type) {\n\t\t$rows = get_rows('SELECT routine_definition AS definition, LOWER(external_language) AS language, *\nFROM information_schema.routines\nWHERE routine_schema = current_schema() AND specific_name = ' . q($name));\n\t\t$return = idx($rows, 0, array());\n\t\t$return[\"returns\"] = array(\"type\" => $return[\"type_udt_name\"]);\n\t\t$return[\"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\nFROM information_schema.parameters\nWHERE specific_schema = current_schema() AND specific_name = ' . q($name) . '\nORDER BY ordinal_position');\n\t\treturn $return;\n\t}\n\n\tfunction routines() {\n\t\treturn get_rows('SELECT specific_name AS \"SPECIFIC_NAME\", routine_type AS \"ROUTINE_TYPE\", routine_name AS \"ROUTINE_NAME\", type_udt_name AS \"DTD_IDENTIFIER\"\nFROM information_schema.routines\nWHERE routine_schema = current_schema()\nORDER BY SPECIFIC_NAME');\n\t}\n\n\tfunction routine_languages() {\n\t\treturn get_vals(\"SELECT LOWER(lanname) FROM pg_catalog.pg_language\");\n\t}\n\n\tfunction routine_id($name, $row) {\n\t\t$return = array();\n\t\tforeach ($row[\"fields\"] as $field) {\n\t\t\t$length = $field[\"length\"];\n\t\t\t$return[] = $field[\"type\"] . ($length ? \"($length)\" : \"\");\n\t\t}\n\t\treturn idf_escape($name) . \"(\" . implode(\", \", $return) . \")\";\n\t}\n\n\tfunction last_id($result) {\n\t\t$row = (is_object($result) ? $result->fetch_row() : array());\n\t\treturn ($row ? $row[0] : 0);\n\t}\n\n\tfunction explain($connection, $query) {\n\t\treturn $connection->query(\"EXPLAIN $query\");\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t\tif (preg_match(\"~ rows=([0-9]+)~\", get_val(\"EXPLAIN SELECT * FROM \" . idf_escape($table_status[\"Name\"]) . ($where ? \" WHERE \" . implode(\" AND \", $where) : \"\")), $regs)) {\n\t\t\treturn $regs[1];\n\t\t}\n\t}\n\n\tfunction types(): array {\n\t\treturn get_key_vals(\n\t\t\t\"SELECT oid, typname\nFROM pg_type\nWHERE typnamespace = \" . driver()->nsOid . \"\nAND typtype IN ('b','d','e')\nAND typelem = 0\"\n\t\t);\n\t}\n\n\tfunction type_values($id) {\n\t\t// to get values from type string: unnest(enum_range(NULL::\"$type\"))\n\t\t$enums = get_vals(\"SELECT enumlabel FROM pg_enum WHERE enumtypid = $id ORDER BY enumsortorder\");\n\t\treturn ($enums ? \"'\" . implode(\"', '\", array_map('addslashes', $enums)) . \"'\" : \"\");\n\t}\n\n\tfunction schemas() {\n\t\treturn get_vals(\"SELECT nspname FROM pg_namespace ORDER BY nspname\");\n\t}\n\n\tfunction get_schema() {\n\t\treturn get_val(\"SELECT current_schema()\");\n\t}\n\n\tfunction set_schema($schema, $connection2 = null) {\n\t\tif (!$connection2) {\n\t\t\t$connection2 = connection();\n\t\t}\n\t\t$return = $connection2->query(\"SET search_path TO \" . idf_escape($schema));\n\t\tdriver()->setUserTypes(types()); //! get types from current_schemas('t')\n\t\treturn $return;\n\t}\n\n\t// create_sql() produces CREATE TABLE without FK CONSTRAINTs\n\t// foreign_keys_sql() produces all FK CONSTRAINTs as ALTER TABLE ... ADD CONSTRAINT\n\t// so that all FKs can be added after all tables have been created, avoiding any need to reorder CREATE TABLE statements in order of their FK dependencies\n\tfunction foreign_keys_sql($table) {\n\t\t$return = \"\";\n\n\t\t$status = table_status1($table);\n\t\t$ns = idf_escape($status['nspname']);\n\t\t$fkeys = foreign_keys($table);\n\t\tksort($fkeys);\n\n\t\tforeach ($fkeys as $fkey_name => $fkey) {\n\t\t\t$return .= \"ALTER TABLE ONLY $ns.\" . idf_escape($status['Name']) . \" ADD CONSTRAINT \" . idf_escape($fkey_name) . \" \" . preg_replace('~( REFERENCES )([^(.]+\\()~', \"\\\\1$ns.\\\\2\", $fkey[\"definition\"]) . \";\\n\";\n\t\t}\n\n\t\treturn ($return ? \"$return\\n\" : $return);\n\t}\n\n\tfunction create_sql($table, $auto_increment, $style) {\n\t\t$return_parts = array();\n\t\t$sequences = array();\n\n\t\t$status = table_status1($table);\n\t\t$ns = idf_escape($status['nspname']);\n\t\tif (is_view($status)) {\n\t\t\t$view = view($table);\n\t\t\treturn rtrim(\"CREATE VIEW $ns.\" . idf_escape($table) . \" AS $view[select]\", \";\");\n\t\t}\n\t\t$fields = fields($table);\n\n\t\tif (count($status) < 2 || empty($fields)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t$return = \"CREATE TABLE $ns.\" . idf_escape($status['Name']) . \" (\\n    \";\n\n\t\t// fields' definitions\n\t\tforeach ($fields as $field) {\n\t\t\tif ($field['default'] == \"nextval('$status[Name]_$field[field]_seq')\") {\n\t\t\t\t$field['default'] = null;\n\t\t\t\t$field['full_type'] = preg_replace('~int(eger)?~', 'serial', $field['full_type']);\n\t\t\t}\n\n\t\t\t$part = idf_escape($field['field']) . ' ' . $field['full_type']\n\t\t\t\t. preg_replace('~(nextval\\(\\')([^.\\']+\\')~', '\\1' . str_replace(\"'\", \"''\", $status['nspname']) . '.\\2', default_value($field))\n\t\t\t\t. ($field['null'] ? \"\" : \" NOT NULL\");\n\t\t\t$return_parts[] = $part;\n\n\t\t\t// sequences for fields\n\t\t\tif (preg_match('~nextval\\(\\'([^\\']+)\\'\\)~', $field['default'], $matches)) {\n\t\t\t\t$sequence_name = $matches[1];\n\t\t\t\t$sq = first(get_rows((min_version(10)\n\t\t\t\t\t? \"SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = \" . q(idf_unescape($sequence_name))\n\t\t\t\t\t: \"SELECT * FROM $sequence_name\"\n\t\t\t\t), null, \"-- \"));\n\t\t\t\t$sequences[] = ($style == \"DROP+CREATE\" ? \"DROP SEQUENCE IF EXISTS $ns.$sequence_name;\\n\" : \"\")\n\t\t\t\t\t. \"CREATE SEQUENCE $ns.$sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value]\"\n\t\t\t\t\t. ($auto_increment && $sq['last_value'] ? \" START \" . ($sq[\"last_value\"] + 1) : \"\")\n\t\t\t\t\t. \" CACHE $sq[cache_value];\"\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\n\t\t// adding sequences before table definition\n\t\tif (!empty($sequences)) {\n\t\t\t$return = implode(\"\\n\\n\", $sequences) . \"\\n\\n$return\";\n\t\t}\n\n\t\t$primary = \"\";\n\t\tforeach (indexes($table) as $index_name => $index) {\n\t\t\tif ($index['type'] == 'PRIMARY') {\n\t\t\t\t$primary = $index_name;\n\t\t\t\t$return_parts[] = \"CONSTRAINT \" . idf_escape($index_name) . \" PRIMARY KEY (\" . implode(', ', array_map('Adminer\\idf_escape', $index['columns'])) . \")\";\n\t\t\t}\n\t\t}\n\n\t\tforeach (driver()->checkConstraints($table) as $conname => $consrc) {\n\t\t\t$return_parts[] = \"CONSTRAINT \" . idf_escape($conname) . \" CHECK ($consrc)\";\n\t\t}\n\t\t$return .= implode(\",\\n    \", $return_parts) . \"\\n)\";\n\n\t\t$partition = driver()->partitionsInfo($status['Name']);\n\t\tif ($partition) {\n\t\t\t$return .= \"\\nPARTITION BY $partition[partition_by]($partition[partition])\";\n\t\t}\n\t\t//! parse pg_class.relpartbound to create PARTITION OF\n\t\t//! don't insert partitioned data twice\n\n\t\t$return .= \"\\nWITH (oids = \" . ($status['Oid'] ? 'true' : 'false') . \");\";\n\n\t\t// comments for table & fields\n\t\tif ($status['Comment']) {\n\t\t\t$return .= \"\\n\\nCOMMENT ON TABLE $ns.\" . idf_escape($status['Name']) . \" IS \" . q($status['Comment']) . \";\";\n\t\t}\n\n\t\tforeach ($fields as $field_name => $field) {\n\t\t\tif ($field['comment']) {\n\t\t\t\t$return .= \"\\n\\nCOMMENT ON COLUMN $ns.\" . idf_escape($status['Name']) . \".\" . idf_escape($field_name) . \" IS \" . q($field['comment']) . \";\";\n\t\t\t}\n\t\t}\n\n\t\tforeach (get_rows(\"SELECT indexdef FROM pg_catalog.pg_indexes WHERE schemaname = current_schema() AND tablename = \" . q($table) . ($primary ? \" AND indexname != \" . q($primary) : \"\"), null, \"-- \") as $row) {\n\t\t\t$return .= \"\\n\\n$row[indexdef];\";\n\t\t}\n\n\t\treturn rtrim($return, ';');\n\t}\n\n\tfunction truncate_sql($table) {\n\t\treturn \"TRUNCATE \" . table($table);\n\t}\n\n\tfunction trigger_sql($table) {\n\t\t$status = table_status1($table);\n\t\t$return = \"\";\n\t\tforeach (triggers($table) as $trg_id => $trg) {\n\t\t\t$trigger = trigger($trg_id, $status['Name']);\n\t\t\t$return .= \"\\nCREATE TRIGGER \" . idf_escape($trigger['Trigger']) . \" $trigger[Timing] $trigger[Event] ON \" . idf_escape($status[\"nspname\"]) . \".\" . idf_escape($status['Name']) . \" $trigger[Type] $trigger[Statement];;\\n\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\n\tfunction use_sql($database, $style = \"\") {\n\t\t$name = idf_escape($database);\n\t\t$return = \"\";\n\t\tif (preg_match('~CREATE~', $style)) {\n\t\t\tif ($style == \"DROP+CREATE\") {\n\t\t\t\t$return = \"DROP DATABASE IF EXISTS $name;\\n\";\n\t\t\t}\n\t\t\t$return .= \"CREATE DATABASE $name;\\n\"; //! get info from pg_database\n\t\t}\n\t\treturn \"$return\\\\connect $name\";\n\t}\n\n\tfunction show_variables() {\n\t\treturn get_rows(\"SHOW ALL\");\n\t}\n\n\tfunction process_list() {\n\t\treturn get_rows(\"SELECT * FROM pg_stat_activity ORDER BY \" . (min_version(9.2) ? \"pid\" : \"procpid\"));\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match('~^(check|columns|comment|database|drop_col|dump|descidx|indexes|kill|partial_indexes|routine|scheme|sequence|sql|table|trigger|type|variables|view'\n\t\t\t. (min_version(9.3) ? '|materializedview' : '')\n\t\t\t. (min_version(11) ? '|procedure' : '')\n\t\t\t. (connection()->flavor == 'cockroach' ? '' : '|processlist') // https://github.com/cockroachdb/cockroach/issues/24745\n\t\t\t. ')$~', $feature)\n\t\t;\n\t}\n\n\tfunction kill_process($val) {\n\t\treturn queries(\"SELECT pg_terminate_backend(\" . number($val) . \")\");\n\t}\n\n\tfunction connection_id() {\n\t\treturn \"SELECT pg_backend_pid()\";\n\t}\n\n\tfunction max_connections() {\n\t\treturn get_val(\"SHOW max_connections\");\n\t}\n}\n"
  },
  {
    "path": "adminer/drivers/sqlite.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"sqlite\", \"SQLite\");\n\nif (isset($_GET[\"sqlite\"])) {\n\tdefine('Adminer\\DRIVER', \"sqlite\");\n\n\tif (class_exists(\"SQLite3\") && $_GET[\"ext\"] != \"pdo\") {\n\t\tabstract class SqliteDb extends SqlDb {\n\t\t\tpublic $extension = \"SQLite3\";\n\t\t\tprivate $link;\n\n\t\t\tfunction attach(string $filename, string $username, string $password): string {\n\t\t\t\t$this->link = new \\SQLite3($filename);\n\t\t\t\t$version = $this->link->version();\n\t\t\t\t$this->server_info = $version[\"versionString\"];\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t\t$result = @$this->link->query($query);\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$this->errno = $this->link->lastErrorCode();\n\t\t\t\t\t$this->error = $this->link->lastErrorMsg();\n\t\t\t\t\treturn false;\n\t\t\t\t} elseif ($result->numColumns()) {\n\t\t\t\t\treturn new Result($result);\n\t\t\t\t}\n\t\t\t\t$this->affected_rows = $this->link->changes();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction quote(string $string): string {\n\t\t\t\treturn (is_utf8($string)\n\t\t\t\t\t? \"'\" . $this->link->escapeString($string) . \"'\"\n\t\t\t\t\t: \"x'\" . first(unpack('H*', $string)) . \"'\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $result, $offset = 0;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\treturn $this->result->fetchArray(SQLITE3_ASSOC);\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\treturn $this->result->fetchArray(SQLITE3_NUM);\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$column = $this->offset++;\n\t\t\t\t$type = $this->result->columnType($column);\n\t\t\t\treturn (object) array(\n\t\t\t\t\t\"name\" => $this->result->columnName($column),\n\t\t\t\t\t\"type\" => ($type == SQLITE3_TEXT ? 15 : 0),\n\t\t\t\t\t\"charsetnr\" => ($type == SQLITE3_BLOB ? 63 : 0), // 63 - binary\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction __destruct() {\n\t\t\t\t$this->result->finalize();\n\t\t\t}\n\t\t}\n\n\t} elseif (extension_loaded(\"pdo_sqlite\")) {\n\t\tabstract class SqliteDb extends PdoDb {\n\t\t\tpublic $extension = \"PDO_SQLite\";\n\n\t\t\tfunction attach(string $filename, string $username, string $password): string {\n\t\t\t\treturn $this->dsn(DRIVER . \":$filename\", \"\", \"\");\n\t\t\t}\n\t\t}\n\n\t}\n\n\tif (class_exists('Adminer\\SqliteDb')) {\n\t\tclass Db extends SqliteDb {\n\t\t\tfunction attach(string $filename, string $username, string $password): string {\n\t\t\t\tparent::attach($filename, $username, $password);\n\t\t\t\t$this->query(\"PRAGMA foreign_keys = 1\");\n\t\t\t\t$this->query(\"PRAGMA busy_timeout = 500\");\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tfunction select_db(string $filename): bool {\n\t\t\t\tif (is_readable($filename) && $this->query(\"ATTACH \" . $this->quote(preg_match(\"~(^[/\\\\\\\\]|:)~\", $filename) ? $filename : dirname($_SERVER[\"SCRIPT_FILENAME\"]) . \"/$filename\") . \" AS a\")) {\n\t\t\t\t\treturn !self::attach($filename, '', '');\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"SQLite3\", \"PDO_SQLite\");\n\t\tstatic $jush = \"sqlite\";\n\n\t\tprotected $types = array(array(\"integer\" => 0, \"real\" => 0, \"numeric\" => 0, \"text\" => 0, \"blob\" => 0));\n\n\t\tpublic $insertFunctions = array(); // \"text\" => \"date('now')/time('now')/datetime('now')\",\n\t\tpublic $editFunctions = array(\n\t\t\t\"integer|real|numeric\" => \"+/-\",\n\t\t\t// \"text\" => \"date/time/datetime\",\n\t\t\t\"text\" => \"||\",\n\t\t);\n\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"LIKE\", \"LIKE %%\", \"IN\", \"IS NULL\", \"NOT LIKE\", \"NOT IN\", \"IS NOT NULL\", \"SQL\"); // REGEXP can be user defined function\n\t\tpublic $functions = array(\"hex\", \"length\", \"lower\", \"round\", \"unixepoch\", \"upper\");\n\t\tpublic $grouping = array(\"avg\", \"count\", \"count distinct\", \"group_concat\", \"max\", \"min\", \"sum\");\n\n\t\tstatic function connect(string $server, string $username, string $password) {\n\t\t\tif ($password != \"\") {\n\t\t\t\treturn lang('Database does not support password.');\n\t\t\t}\n\t\t\treturn parent::connect(\":memory:\", \"\", \"\");\n\t\t}\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\tif (min_version(3.31, 0, $connection)) {\n\t\t\t\t$this->generated = array(\"STORED\", \"VIRTUAL\");\n\t\t\t}\n\t\t}\n\n\t\tfunction structuredTypes(): array {\n\t\t\treturn array_keys($this->types[0]);\n\t\t}\n\n\t\tfunction insertUpdate(string $table, array $rows, array $primary) {\n\t\t\t$values = array();\n\t\t\tforeach ($rows as $set) {\n\t\t\t\t$values[] = \"(\" . implode(\", \", $set) . \")\";\n\t\t\t}\n\t\t\treturn queries(\"REPLACE INTO \" . table($table) . \" (\" . implode(\", \", array_keys(reset($rows))) . \") VALUES\\n\" . implode(\",\\n\", $values));\n\t\t}\n\n\t\tfunction tableHelp(string $name, bool $is_view = false) {\n\t\t\tif ($name == \"sqlite_sequence\") {\n\t\t\t\treturn \"fileformat2.html#seqtab\";\n\t\t\t}\n\t\t\tif ($name == \"sqlite_master\") {\n\t\t\t\treturn \"fileformat2.html#$name\";\n\t\t\t}\n\t\t}\n\n\t\tfunction checkConstraints(string $table): array {\n\t\t\tpreg_match_all('~ CHECK *(\\( *(((?>[^()]*[^() ])|(?1))*) *\\))~', get_val(\"SELECT sql FROM sqlite_master WHERE type = 'table' AND name = \" . q($table), 0, $this->conn), $matches); //! could be inside a comment\n\t\t\treturn array_combine($matches[2], $matches[2]);\n\t\t}\n\n\t\tfunction allFields(): array {\n\t\t\t$return = array();\n\t\t\tforeach (tables_list() as $table => $type) {\n\t\t\t\tforeach (fields($table) as $field) {\n\t\t\t\t\t$return[$table][] = $field;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\t}\n\n\n\n\tfunction idf_escape($idf) {\n\t\treturn '\"' . str_replace('\"', '\"\"', $idf) . '\"';\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn array();\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT $limit\" . ($offset ? \" OFFSET $offset\" : \"\") : \"\");\n\t}\n\n\tfunction limit1($table, $query, $where, $separator = \"\\n\") {\n\t\treturn (preg_match('~^INTO~', $query) || get_val(\"SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')\")\n\t\t\t? limit($query, $where, 1, 0, $separator)\n\t\t\t: \" $query WHERE rowid = (SELECT rowid FROM \" . table($table) . $where . $separator . \"LIMIT 1)\" //! use primary key in tables with WITHOUT rowid\n\t\t);\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t\treturn get_val(\"PRAGMA encoding\"); // there is no database list so $db == DB\n\t}\n\n\tfunction logged_user() {\n\t\treturn get_current_user(); // should return effective user\n\t}\n\n\tfunction tables_list() {\n\t\treturn get_key_vals(\"SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name\");\n\t}\n\n\tfunction count_tables($databases) {\n\t\treturn array();\n\t}\n\n\tfunction table_status($name = \"\") {\n\t\t$return = array();\n\t\tforeach (get_rows(\"SELECT name AS Name, type AS Engine, 'rowid' AS Oid, '' AS Auto_increment FROM sqlite_master WHERE type IN ('table', 'view') \" . ($name != \"\" ? \"AND name = \" . q($name) : \"ORDER BY name\")) as $row) {\n\t\t\t$row[\"Rows\"] = get_val(\"SELECT COUNT(*) FROM \" . idf_escape($row[\"Name\"]));\n\t\t\t$return[$row[\"Name\"]] = $row;\n\t\t}\n\t\tforeach (get_rows(\"SELECT * FROM sqlite_sequence\" . ($name != \"\" ? \" WHERE name = \" . q($name) : \"\"), null, \"\") as $row) {\n\t\t\t$return[$row[\"name\"]][\"Auto_increment\"] = $row[\"seq\"];\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn $table_status[\"Engine\"] == \"view\";\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn !get_val(\"SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')\");\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\t$primary = \"\";\n\t\tforeach (get_rows(\"PRAGMA table_\" . (min_version(3.31) ? \"x\" : \"\") . \"info(\" . table($table) . \")\") as $row) {\n\t\t\t$name = $row[\"name\"];\n\t\t\t$type = strtolower($row[\"type\"]);\n\t\t\t$default = $row[\"dflt_value\"];\n\t\t\t$return[$name] = array(\n\t\t\t\t\"field\" => $name,\n\t\t\t\t\"type\" => (preg_match('~int~i', $type) ? \"integer\" : (preg_match('~char|clob|text~i', $type) ? \"text\" : (preg_match('~blob~i', $type) ? \"blob\" : (preg_match('~real|floa|doub~i', $type) ? \"real\" : \"numeric\")))),\n\t\t\t\t\"full_type\" => $type,\n\t\t\t\t\"default\" => (preg_match(\"~^'(.*)'$~\", $default, $match) ? str_replace(\"''\", \"'\", $match[1]) : ($default == \"NULL\" ? null : $default)),\n\t\t\t\t\"null\" => !$row[\"notnull\"],\n\t\t\t\t\"privileges\" => array(\"select\" => 1, \"insert\" => 1, \"update\" => 1, \"where\" => 1, \"order\" => 1),\n\t\t\t\t\"primary\" => $row[\"pk\"],\n\t\t\t);\n\t\t\tif ($row[\"pk\"]) {\n\t\t\t\tif ($primary != \"\") {\n\t\t\t\t\t$return[$primary][\"auto_increment\"] = false;\n\t\t\t\t} elseif (preg_match('~^integer$~i', $type)) {\n\t\t\t\t\t$return[$name][\"auto_increment\"] = true;\n\t\t\t\t}\n\t\t\t\t$primary = $name;\n\t\t\t}\n\t\t}\n\t\t$sql = get_val(\"SELECT sql FROM sqlite_master WHERE type = 'table' AND name = \" . q($table));\n\t\t$idf = '((\"[^\"]*+\")+|[a-z0-9_]+)';\n\t\tpreg_match_all('~' . $idf . '\\s+text\\s+COLLATE\\s+(\\'[^\\']+\\'|\\S+)~i', $sql, $matches, PREG_SET_ORDER);\n\t\tforeach ($matches as $match) {\n\t\t\t$name = str_replace('\"\"', '\"', preg_replace('~^\"|\"$~', '', $match[1]));\n\t\t\tif ($return[$name]) {\n\t\t\t\t$return[$name][\"collation\"] = trim($match[3], \"'\");\n\t\t\t}\n\t\t}\n\t\tpreg_match_all('~' . $idf . '\\s.*GENERATED ALWAYS AS \\((.+)\\) (STORED|VIRTUAL)~i', $sql, $matches, PREG_SET_ORDER);\n\t\tforeach ($matches as $match) {\n\t\t\t$name = str_replace('\"\"', '\"', preg_replace('~^\"|\"$~', '', $match[1]));\n\t\t\t$return[$name][\"default\"] = $match[3];\n\t\t\t$return[$name][\"generated\"] = strtoupper($match[4]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\t$connection2 = connection($connection2);\n\t\t$return = array();\n\t\t$sql = get_val(\"SELECT sql FROM sqlite_master WHERE type = 'table' AND name = \" . q($table), 0, $connection2);\n\t\tif (preg_match('~\\bPRIMARY\\s+KEY\\s*\\((([^)\"]+|\"[^\"]*\"|`[^`]*`)++)~i', $sql, $match)) {\n\t\t\t$return[\"\"] = array(\"type\" => \"PRIMARY\", \"columns\" => array(), \"lengths\" => array(), \"descs\" => array());\n\t\t\tpreg_match_all('~(((\"[^\"]*+\")+|(?:`[^`]*+`)+)|(\\S+))(\\s+(ASC|DESC))?(,\\s*|$)~i', $match[1], $matches, PREG_SET_ORDER);\n\t\t\tforeach ($matches as $match) {\n\t\t\t\t$return[\"\"][\"columns\"][] = idf_unescape($match[2]) . $match[4];\n\t\t\t\t$return[\"\"][\"descs\"][] = (preg_match('~DESC~i', $match[5]) ? '1' : null);\n\t\t\t}\n\t\t}\n\t\tif (!$return) {\n\t\t\tforeach (fields($table) as $name => $field) {\n\t\t\t\tif ($field[\"primary\"]) {\n\t\t\t\t\t$return[\"\"] = array(\"type\" => \"PRIMARY\", \"columns\" => array($name), \"lengths\" => array(), \"descs\" => array(null));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t$sqls = get_key_vals(\"SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = \" . q($table), $connection2);\n\t\tforeach (get_rows(\"PRAGMA index_list(\" . table($table) . \")\", $connection2) as $row) {\n\t\t\t$name = $row[\"name\"];\n\t\t\t$index = array(\"type\" => ($row[\"unique\"] ? \"UNIQUE\" : \"INDEX\"));\n\t\t\t$index[\"lengths\"] = array();\n\t\t\t$index[\"descs\"] = array();\n\t\t\tforeach (get_rows(\"PRAGMA index_info(\" . idf_escape($name) . \")\", $connection2) as $row1) {\n\t\t\t\t$index[\"columns\"][] = $row1[\"name\"];\n\t\t\t\t$index[\"descs\"][] = null;\n\t\t\t}\n\t\t\tif (preg_match('~^CREATE( UNIQUE)? INDEX ' . preg_quote(idf_escape($name) . ' ON ' . idf_escape($table), '~') . ' \\((.*)\\)$~i', $sqls[$name], $regs)) {\n\t\t\t\tpreg_match_all('/(\"[^\"]*+\")+( DESC)?/', $regs[2], $matches);\n\t\t\t\tforeach ($matches[2] as $key => $val) {\n\t\t\t\t\tif ($val) {\n\t\t\t\t\t\t$index[\"descs\"][$key] = '1';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!$return[\"\"] || $index[\"type\"] != \"UNIQUE\" || $index[\"columns\"] != $return[\"\"][\"columns\"] || $index[\"descs\"] != $return[\"\"][\"descs\"] || !preg_match(\"~^sqlite_~\", $name)) {\n\t\t\t\t$return[$name] = $index;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction foreign_keys($table) {\n\t\t$return = array();\n\t\tforeach (get_rows(\"PRAGMA foreign_key_list(\" . table($table) . \")\") as $row) {\n\t\t\t$foreign_key = &$return[$row[\"id\"]];\n\t\t\tif (!$foreign_key) {\n\t\t\t\t$foreign_key = $row;\n\t\t\t}\n\t\t\t$foreign_key[\"source\"][] = $row[\"from\"];\n\t\t\t$foreign_key[\"target\"][] = $row[\"to\"];\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction view($name) {\n\t\treturn array(\"select\" => preg_replace('~^(?:[^`\"[]+|`[^`]*`|\"[^\"]*\")* AS\\s+~iU', '', get_val(\"SELECT sql FROM sqlite_master WHERE type = 'view' AND name = \" . q($name)))); //! identifiers may be inside []\n\t}\n\n\tfunction collations() {\n\t\treturn (isset($_GET[\"create\"]) ? get_vals(\"PRAGMA collation_list\", 1) : array());\n\t}\n\n\tfunction information_schema($db) {\n\t\treturn false;\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction check_sqlite_name($name) {\n\t\t// avoid creating PHP files on unsecured servers\n\t\t$extensions = \"db|sdb|sqlite\";\n\t\tif (!preg_match(\"~^[^\\\\0]*\\\\.($extensions)\\$~\", $name)) {\n\t\t\tconnection()->error = lang('Please use one of the extensions %s.', str_replace(\"|\", \", \", $extensions));\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction create_database($db, $collation) {\n\t\tif (file_exists($db)) {\n\t\t\tconnection()->error = lang('File exists.');\n\t\t\treturn false;\n\t\t}\n\t\tif (!check_sqlite_name($db)) {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\t$link = new Db();\n\t\t\t$link->attach($db, '', '');\n\t\t} catch (\\Exception $ex) {\n\t\t\tconnection()->error = $ex->getMessage();\n\t\t\treturn false;\n\t\t}\n\t\t$link->query('PRAGMA encoding = \"UTF-8\"');\n\t\t$link->query('CREATE TABLE adminer (i)'); // otherwise creates empty file\n\t\t$link->query('DROP TABLE adminer');\n\t\treturn true;\n\t}\n\n\tfunction drop_databases($databases) {\n\t\tconnection()->attach(\":memory:\", '', ''); // to unlock file, doesn't work in PDO on Windows\n\t\tforeach ($databases as $db) {\n\t\t\tif (!@unlink($db)) {\n\t\t\t\tconnection()->error = lang('File exists.');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction rename_database($name, $collation) {\n\t\tif (!check_sqlite_name($name)) {\n\t\t\treturn false;\n\t\t}\n\t\tconnection()->attach(\":memory:\", '', '');\n\t\tconnection()->error = lang('File exists.');\n\t\treturn @rename(DB, $name);\n\t}\n\n\tfunction auto_increment() {\n\t\treturn \" PRIMARY KEY AUTOINCREMENT\";\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\t$use_all_fields = ($table == \"\" || $foreign);\n\t\tforeach ($fields as $field) {\n\t\t\tif ($field[0] != \"\" || !$field[1] || $field[2]) {\n\t\t\t\t$use_all_fields = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t$alter = array();\n\t\t$originals = array();\n\t\tforeach ($fields as $field) {\n\t\t\tif ($field[1]) {\n\t\t\t\t$alter[] = ($use_all_fields ? $field[1] : \"ADD \" . implode($field[1]));\n\t\t\t\tif ($field[0] != \"\") {\n\t\t\t\t\t$originals[$field[0]] = $field[1][0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!$use_all_fields) {\n\t\t\tforeach ($alter as $val) {\n\t\t\t\tif (!queries(\"ALTER TABLE \" . table($table) . \" $val\")) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($table != $name && !queries(\"ALTER TABLE \" . table($table) . \" RENAME TO \" . table($name))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} elseif (!recreate_table($table, $name, $alter, $originals, $foreign, $auto_increment)) {\n\t\t\treturn false;\n\t\t}\n\t\tif ($auto_increment) {\n\t\t\tqueries(\"BEGIN\");\n\t\t\tqueries(\"UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = \" . q($name)); // ignores error\n\t\t\tif (!connection()->affected_rows) {\n\t\t\t\tqueries(\"INSERT INTO sqlite_sequence (name, seq) VALUES (\" . q($name) . \", $auto_increment)\");\n\t\t\t}\n\t\t\tqueries(\"COMMIT\");\n\t\t}\n\t\treturn true;\n\t}\n\n\t/** Recreate table\n\t* @param string $table original name\n\t* @param string $name new name\n\t* @param list<list<string>> $fields [process_field()], empty to preserve\n\t* @param string[] $originals [$original => idf_escape($new_column)], empty to preserve\n\t* @param string[] $foreign [format_foreign_key()], empty to preserve\n\t* @param numeric-string|'' $auto_increment set auto_increment to this value, \"\" to preserve\n\t* @param list<array{string, string, list<string>|'DROP'}> $indexes [[$type, $name, $columns]], empty to preserve\n\t* @param string $drop_check CHECK constraint to drop\n\t* @param string $add_check CHECK constraint to add\n\t*/\n\tfunction recreate_table(string $table, string $name, array $fields, array $originals, array $foreign, string $auto_increment = \"\", $indexes = array(), string $drop_check = \"\", string $add_check = \"\"): bool {\n\t\tif ($table != \"\") {\n\t\t\tif (!$fields) {\n\t\t\t\tforeach (fields($table) as $key => $field) {\n\t\t\t\t\tif ($indexes) {\n\t\t\t\t\t\t$field[\"auto_increment\"] = 0;\n\t\t\t\t\t}\n\t\t\t\t\t$fields[] = process_field($field, $field);\n\t\t\t\t\t$originals[$key] = idf_escape($key);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$primary_key = false;\n\t\t\tforeach ($fields as $field) {\n\t\t\t\tif ($field[6]) {\n\t\t\t\t\t$primary_key = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$drop_indexes = array();\n\t\t\tforeach ($indexes as $key => $val) {\n\t\t\t\tif ($val[2] == \"DROP\") {\n\t\t\t\t\t$drop_indexes[$val[1]] = true;\n\t\t\t\t\tunset($indexes[$key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tforeach (indexes($table) as $key_name => $index) {\n\t\t\t\t$columns = array();\n\t\t\t\tforeach ($index[\"columns\"] as $key => $column) {\n\t\t\t\t\tif (!$originals[$column]) {\n\t\t\t\t\t\tcontinue 2;\n\t\t\t\t\t}\n\t\t\t\t\t$columns[] = $originals[$column] . ($index[\"descs\"][$key] ? \" DESC\" : \"\");\n\t\t\t\t}\n\t\t\t\tif (!$drop_indexes[$key_name]) {\n\t\t\t\t\tif ($index[\"type\"] != \"PRIMARY\" || !$primary_key) {\n\t\t\t\t\t\t$indexes[] = array($index[\"type\"], $key_name, $columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tforeach ($indexes as $key => $val) {\n\t\t\t\tif ($val[0] == \"PRIMARY\") {\n\t\t\t\t\tunset($indexes[$key]);\n\t\t\t\t\t$foreign[] = \"  PRIMARY KEY (\" . implode(\", \", $val[2]) . \")\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tforeach (foreign_keys($table) as $key_name => $foreign_key) {\n\t\t\t\tforeach ($foreign_key[\"source\"] as $key => $column) {\n\t\t\t\t\tif (!$originals[$column]) {\n\t\t\t\t\t\tcontinue 2;\n\t\t\t\t\t}\n\t\t\t\t\t$foreign_key[\"source\"][$key] = idf_unescape($originals[$column]);\n\t\t\t\t}\n\t\t\t\tif (!isset($foreign[\" $key_name\"])) {\n\t\t\t\t\t$foreign[] = \" \" . format_foreign_key($foreign_key);\n\t\t\t\t}\n\t\t\t}\n\t\t\tqueries(\"BEGIN\");\n\t\t}\n\t\t$changes = array();\n\t\tforeach ($fields as $field) {\n\t\t\tif (preg_match('~GENERATED~', $field[3])) {\n\t\t\t\tunset($originals[array_search($field[0], $originals)]);\n\t\t\t}\n\t\t\t$changes[] = \"  \" . implode($field);\n\t\t}\n\t\t$changes = array_merge($changes, array_filter($foreign));\n\t\tforeach (driver()->checkConstraints($table) as $check) {\n\t\t\tif ($check != $drop_check) {\n\t\t\t\t$changes[] = \"  CHECK ($check)\";\n\t\t\t}\n\t\t}\n\t\tif ($add_check) {\n\t\t\t$changes[] = \"  CHECK ($add_check)\";\n\t\t}\n\t\t$temp_name = ($table == $name ? \"adminer_$name\" : $name);\n\t\tif (!queries(\"CREATE TABLE \" . table($temp_name) . \" (\\n\" . implode(\",\\n\", $changes) . \"\\n)\")) {\n\t\t\t// implicit ROLLBACK to not overwrite connection()->error\n\t\t\treturn false;\n\t\t}\n\t\tif ($table != \"\") {\n\t\t\tif ($originals && !queries(\"INSERT INTO \" . table($temp_name) . \" (\" . implode(\", \", $originals) . \") SELECT \" . implode(\", \", array_map('Adminer\\idf_escape', array_keys($originals))) . \" FROM \" . table($table))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$triggers = array();\n\t\t\tforeach (triggers($table) as $trigger_name => $timing_event) {\n\t\t\t\t$trigger = trigger($trigger_name, $table);\n\t\t\t\t$triggers[] = \"CREATE TRIGGER \" . idf_escape($trigger_name) . \" \" . implode(\" \", $timing_event) . \" ON \" . table($name) . \"\\n$trigger[Statement]\";\n\t\t\t}\n\t\t\t$auto_increment = $auto_increment ? \"\" : get_val(\"SELECT seq FROM sqlite_sequence WHERE name = \" . q($table)); // if $auto_increment is set then it will be updated later\n\t\t\tif (\n\t\t\t\t!queries(\"DROP TABLE \" . table($table)) // drop before creating indexes and triggers to allow using old names\n\t\t\t\t|| ($table == $name && !queries(\"ALTER TABLE \" . table($temp_name) . \" RENAME TO \" . table($name)))\n\t\t\t\t|| !alter_indexes($name, $indexes)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif ($auto_increment) {\n\t\t\t\tqueries(\"UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = \" . q($name)); // ignores error\n\t\t\t}\n\t\t\tforeach ($triggers as $trigger) {\n\t\t\t\tif (!queries($trigger)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tqueries(\"COMMIT\");\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction index_sql($table, $type, $name, $columns) {\n\t\treturn \"CREATE $type \" . ($type != \"INDEX\" ? \"INDEX \" : \"\")\n\t\t\t. idf_escape($name != \"\" ? $name : uniqid($table . \"_\"))\n\t\t\t. \" ON \" . table($table)\n\t\t\t. \" $columns\"\n\t\t;\n\t}\n\n\tfunction alter_indexes($table, $alter) {\n\t\tforeach ($alter as $primary) {\n\t\t\tif ($primary[0] == \"PRIMARY\") {\n\t\t\t\treturn recreate_table($table, $table, array(), array(), array(), \"\", $alter);\n\t\t\t}\n\t\t}\n\t\tforeach (array_reverse($alter) as $val) {\n\t\t\tif (\n\t\t\t\t!queries($val[2] == \"DROP\"\n\t\t\t\t? \"DROP INDEX \" . idf_escape($val[1])\n\t\t\t\t: index_sql($table, $val[0], $val[1], \"(\" . implode(\", \", $val[2]) . \")\"))\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\treturn apply_queries(\"DELETE FROM\", $tables);\n\t}\n\n\tfunction drop_views($views) {\n\t\treturn apply_queries(\"DROP VIEW\", $views);\n\t}\n\n\tfunction drop_tables($tables) {\n\t\treturn apply_queries(\"DROP TABLE\", $tables);\n\t}\n\n\tfunction move_tables($tables, $views, $target) {\n\t\treturn false;\n\t}\n\n\tfunction trigger($name, $table) {\n\t\tif ($name == \"\") {\n\t\t\treturn array(\"Statement\" => \"BEGIN\\n\\t;\\nEND\");\n\t\t}\n\t\t$idf = '(?:[^`\"\\s]+|`[^`]*`|\"[^\"]*\")+';\n\t\t$trigger_options = trigger_options();\n\t\tpreg_match(\n\t\t\t\"~^CREATE\\\\s+TRIGGER\\\\s*$idf\\\\s*(\" . implode(\"|\", $trigger_options[\"Timing\"]) . \")\\\\s+([a-z]+)(?:\\\\s+OF\\\\s+($idf))?\\\\s+ON\\\\s*$idf\\\\s*(?:FOR\\\\s+EACH\\\\s+ROW\\\\s)?(.*)~is\",\n\t\t\tget_val(\"SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = \" . q($name)),\n\t\t\t$match\n\t\t);\n\t\t$of = $match[3];\n\t\treturn array(\n\t\t\t\"Timing\" => strtoupper($match[1]),\n\t\t\t\"Event\" => strtoupper($match[2]) . ($of ? \" OF\" : \"\"),\n\t\t\t\"Of\" => idf_unescape($of),\n\t\t\t\"Trigger\" => $name,\n\t\t\t\"Statement\" => $match[4],\n\t\t);\n\t}\n\n\tfunction triggers($table) {\n\t\t$return = array();\n\t\t$trigger_options = trigger_options();\n\t\tforeach (get_rows(\"SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = \" . q($table)) as $row) {\n\t\t\tpreg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`\"\\s]+|`[^`]*`|\"[^\"]*\")+\\s*(' . implode(\"|\", $trigger_options[\"Timing\"]) . ')\\s*(.*?)\\s+ON\\b~i', $row[\"sql\"], $match);\n\t\t\t$return[$row[\"name\"]] = array($match[1], $match[2]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction trigger_options() {\n\t\treturn array(\n\t\t\t\"Timing\" => array(\"BEFORE\", \"AFTER\", \"INSTEAD OF\"),\n\t\t\t\"Event\" => array(\"INSERT\", \"UPDATE\", \"UPDATE OF\", \"DELETE\"),\n\t\t\t\"Type\" => array(\"FOR EACH ROW\"),\n\t\t);\n\t}\n\n\tfunction begin() {\n\t\treturn queries(\"BEGIN\");\n\t}\n\n\tfunction last_id($result) {\n\t\treturn get_val(\"SELECT LAST_INSERT_ROWID()\");\n\t}\n\n\tfunction explain($connection, $query) {\n\t\treturn $connection->query(\"EXPLAIN QUERY PLAN $query\");\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t}\n\n\tfunction types(): array {\n\t\treturn array();\n\t}\n\n\tfunction create_sql($table, $auto_increment, $style) {\n\t\t$return = get_val(\"SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = \" . q($table));\n\t\tforeach (indexes($table) as $name => $index) {\n\t\t\tif ($name == '') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t$return .= \";\\n\\n\" . index_sql($table, $index['type'], $name, \"(\" . implode(\", \", array_map('Adminer\\idf_escape', $index['columns'])) . \")\");\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction truncate_sql($table) {\n\t\treturn \"DELETE FROM \" . table($table);\n\t}\n\n\tfunction use_sql($database, $style = \"\") {\n\t}\n\n\tfunction trigger_sql($table) {\n\t\treturn implode(get_vals(\"SELECT sql || ';;\\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = \" . q($table)));\n\t}\n\n\tfunction show_variables() {\n\t\t$return = array();\n\t\tforeach (get_rows(\"PRAGMA pragma_list\") as $row) {\n\t\t\t$name = $row[\"name\"];\n\t\t\tif ($name != \"pragma_list\" && $name != \"compile_options\") {\n\t\t\t\t$return[$name] = array($name, '');\n\t\t\t\tforeach (get_rows(\"PRAGMA $name\") as $row) {\n\t\t\t\t\t$return[$name][1] .= implode(\", \", $row) . \"\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction show_status() {\n\t\t$return = array();\n\t\tforeach (get_vals(\"PRAGMA compile_options\") as $option) {\n\t\t\t$return[] = explode(\"=\", $option, 2) + array('', '');\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match('~^(check|columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);\n\t}\n}\n"
  },
  {
    "path": "adminer/dump.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"dump\"];\n\nif ($_POST && !$error) {\n\t$default = array(\"auto_increment\" => '');\n\tforeach (array(\"type\", \"routine\", \"event\", \"trigger\") as $support) {\n\t\tif (support($support)) {\n\t\t\t$default[$support . \"s\"] = '';\n\t\t}\n\t}\n\tsave_settings(\n\t\tarray_intersect_key($_POST + $default, array_flip(array(\"output\", \"format\", \"db_style\", \"table_style\", \"data_style\")) + $default),\n\t\t\"adminer_export\"\n\t);\n\t$tables = array_flip((array) $_POST[\"tables\"]) + array_flip((array) $_POST[\"data\"]);\n\t$ext = dump_headers(\n\t\t(count($tables) == 1 ? key($tables) : DB),\n\t\t(DB == \"\" || count($tables) > 1)\n\t);\n\t$is_sql = preg_match('~sql~', $_POST[\"format\"]);\n\n\tif ($is_sql) {\n\t\techo \"-- Adminer \" . VERSION . \" \" . get_driver(DRIVER) . \" \" . str_replace(\"\\n\", \" \", connection()->server_info) . \" dump\\n\\n\";\n\t\tif (JUSH == \"sql\") {\n\t\t\techo \"SET NAMES utf8;\nSET time_zone = '+00:00';\nSET foreign_key_checks = 0;\n\" . ($_POST[\"data_style\"] ? \"SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';\n\" : \"\") . \"\n\";\n\t\t\tconnection()->query(\"SET time_zone = '+00:00'\");\n\t\t\tconnection()->query(\"SET sql_mode = ''\");\n\t\t}\n\t}\n\n\t$style = $_POST[\"db_style\"];\n\t$databases = array(DB);\n\tif (DB == \"\") {\n\t\t$databases = $_POST[\"databases\"];\n\t\tif (is_string($databases)) {\n\t\t\t$databases = explode(\"\\n\", rtrim(str_replace(\"\\r\", \"\", $databases), \"\\n\"));\n\t\t}\n\t}\n\n\tforeach ((array) $databases as $db) {\n\t\tadminer()->dumpDatabase($db);\n\t\tif (connection()->select_db($db)) {\n\t\t\tif ($is_sql) {\n\t\t\t\tif ($style) {\n\t\t\t\t\techo use_sql($db, $style) . \";\\n\\n\";\n\t\t\t\t}\n\t\t\t\t$out = \"\";\n\n\t\t\t\tif ($_POST[\"types\"]) {\n\t\t\t\t\tforeach (types() as $id => $type) {\n\t\t\t\t\t\t$enums = type_values($id);\n\t\t\t\t\t\tif ($enums) {\n\t\t\t\t\t\t\t$out .= ($style != 'DROP+CREATE' ? \"DROP TYPE IF EXISTS \" . idf_escape($type) . \";;\\n\" : \"\") . \"CREATE TYPE \" . idf_escape($type) . \" AS ENUM ($enums);\\n\\n\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//! https://github.com/postgres/postgres/blob/REL_17_4/src/bin/pg_dump/pg_dump.c#L10846\n\t\t\t\t\t\t\t$out .= \"-- Could not export type $type\\n\\n\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ($_POST[\"routines\"]) {\n\t\t\t\t\tforeach (routines() as $row) {\n\t\t\t\t\t\t$name = $row[\"ROUTINE_NAME\"];\n\t\t\t\t\t\t$routine = $row[\"ROUTINE_TYPE\"];\n\t\t\t\t\t\t$create = create_routine($routine, array(\"name\" => $name) + routine($row[\"SPECIFIC_NAME\"], $routine));\n\t\t\t\t\t\tset_utf8mb4($create);\n\t\t\t\t\t\t$out .= ($style != 'DROP+CREATE' ? \"DROP $routine IF EXISTS \" . idf_escape($name) . \";;\\n\" : \"\") . \"$create;\\n\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ($_POST[\"events\"]) {\n\t\t\t\t\tforeach (get_rows(\"SHOW EVENTS\", null, \"-- \") as $row) {\n\t\t\t\t\t\t$create = remove_definer(get_val(\"SHOW CREATE EVENT \" . idf_escape($row[\"Name\"]), 3));\n\t\t\t\t\t\tset_utf8mb4($create);\n\t\t\t\t\t\t$out .= ($style != 'DROP+CREATE' ? \"DROP EVENT IF EXISTS \" . idf_escape($row[\"Name\"]) . \";;\\n\" : \"\") . \"$create;;\\n\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\techo ($out && JUSH == 'sql' ? \"DELIMITER ;;\\n\\n$out\" . \"DELIMITER ;\\n\\n\" : $out);\n\t\t\t}\n\n\t\t\tif ($_POST[\"table_style\"] || $_POST[\"data_style\"]) {\n\t\t\t\t$views = array();\n\t\t\t\tforeach (table_status('', true) as $name => $table_status) {\n\t\t\t\t\t$table = (DB == \"\" || in_array($name, (array) $_POST[\"tables\"]));\n\t\t\t\t\t$data = (DB == \"\" || in_array($name, (array) $_POST[\"data\"]));\n\t\t\t\t\tif ($table || $data) {\n\t\t\t\t\t\t$tmp_file = null;\n\t\t\t\t\t\tif ($ext == \"tar\") {\n\t\t\t\t\t\t\t$tmp_file = new TmpFile;\n\t\t\t\t\t\t\tob_start(array($tmp_file, 'write'), 1e5);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tadminer()->dumpTable($name, ($table ? $_POST[\"table_style\"] : \"\"), (is_view($table_status) ? 2 : 0));\n\t\t\t\t\t\tif (is_view($table_status)) {\n\t\t\t\t\t\t\t$views[] = $name;\n\t\t\t\t\t\t} elseif ($data) {\n\t\t\t\t\t\t\t$fields = fields($name);\n\t\t\t\t\t\t\tadminer()->dumpData($name, $_POST[\"data_style\"], \"SELECT *\" . convert_fields($fields, $fields) . \" FROM \" . table($name));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($is_sql && $_POST[\"triggers\"] && $table && ($triggers = trigger_sql($name))) {\n\t\t\t\t\t\t\techo \"\\nDELIMITER ;;\\n$triggers\\nDELIMITER ;\\n\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ($ext == \"tar\") {\n\t\t\t\t\t\t\tob_end_flush();\n\t\t\t\t\t\t\ttar_file((DB != \"\" ? \"\" : \"$db/\") . \"$name.csv\", $tmp_file);\n\t\t\t\t\t\t} elseif ($is_sql) {\n\t\t\t\t\t\t\techo \"\\n\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// add FKs after creating tables (except in MySQL which uses SET FOREIGN_KEY_CHECKS=0)\n\t\t\t\tif (function_exists('Adminer\\foreign_keys_sql')) {\n\t\t\t\t\tforeach (table_status('', true) as $name => $table_status) {\n\t\t\t\t\t\t$table = (DB == \"\" || in_array($name, (array) $_POST[\"tables\"]));\n\t\t\t\t\t\tif ($table && !is_view($table_status)) {\n\t\t\t\t\t\t\techo foreign_keys_sql($name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tforeach ($views as $view) {\n\t\t\t\t\tadminer()->dumpTable($view, $_POST[\"table_style\"], 1);\n\t\t\t\t}\n\n\t\t\t\tif ($ext == \"tar\") {\n\t\t\t\t\techo pack(\"x512\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tadminer()->dumpFooter();\n\texit;\n}\n\npage_header(lang('Export'), $error, ($_GET[\"export\"] != \"\" ? array(\"table\" => $_GET[\"export\"]) : array()), h(DB));\n?>\n\n<form action=\"\" method=\"post\">\n<table class=\"layout\">\n<?php\n$db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');\n$table_style = array('', 'DROP+CREATE', 'CREATE');\n$data_style = array('', 'TRUNCATE+INSERT', 'INSERT');\nif (JUSH == \"sql\") { //! use insertUpdate() in all drivers\n\t$data_style[] = 'INSERT+UPDATE';\n}\n$row = get_settings(\"adminer_export\");\nif (!$row) {\n\t$row = array(\"output\" => \"text\", \"format\" => \"sql\", \"db_style\" => (DB != \"\" ? \"\" : \"CREATE\"), \"table_style\" => \"DROP+CREATE\", \"data_style\" => \"INSERT\");\n}\n\necho \"<tr><th>\" . lang('Output') . \"<td>\" . html_radios(\"output\", adminer()->dumpOutput(), $row[\"output\"]) . \"\\n\";\n\necho \"<tr><th>\" . lang('Format') . \"<td>\" . html_radios(\"format\", adminer()->dumpFormat(), $row[\"format\"]) . \"\\n\";\n\necho (JUSH == \"sqlite\" ? \"\" : \"<tr><th>\" . lang('Database') . \"<td>\" . html_select('db_style', $db_style, $row[\"db_style\"])\n\t. (support(\"type\") ? checkbox(\"types\", 1, $row[\"types\"], lang('User types')) : \"\")\n\t. (support(\"routine\") ? checkbox(\"routines\", 1, $row[\"routines\"], lang('Routines')) : \"\")\n\t. (support(\"event\") ? checkbox(\"events\", 1, $row[\"events\"], lang('Events')) : \"\")\n);\n\necho \"<tr><th>\" . lang('Tables') . \"<td>\" . html_select('table_style', $table_style, $row[\"table_style\"])\n\t. checkbox(\"auto_increment\", 1, $row[\"auto_increment\"], lang('Auto Increment'))\n\t. (support(\"trigger\") ? checkbox(\"triggers\", 1, $row[\"triggers\"], lang('Triggers')) : \"\")\n;\n\necho \"<tr><th>\" . lang('Data') . \"<td>\" . html_select('data_style', $data_style, $row[\"data_style\"]);\n?>\n</table>\n<p><input type=\"submit\" value=\"<?php echo lang('Export'); ?>\">\n<?php echo input_token(); ?>\n\n<table>\n<?php\necho script(\"qsl('table').onclick = dumpClick;\");\n$prefixes = array();\nif (DB != \"\") {\n\t$checked = ($TABLE != \"\" ? \"\" : \" checked\");\n\techo \"<thead><tr>\";\n\techo \"<th style='text-align: left;'><label class='block'><input type='checkbox' id='check-tables'$checked>\" . lang('Tables') . \"</label>\" . script(\"qs('#check-tables').onclick = partial(formCheck, /^tables\\\\[/);\", \"\");\n\techo \"<th style='text-align: right;'><label class='block'>\" . lang('Data') . \"<input type='checkbox' id='check-data'$checked></label>\" . script(\"qs('#check-data').onclick = partial(formCheck, /^data\\\\[/);\", \"\");\n\techo \"</thead>\\n\";\n\n\t$views = \"\";\n\t$tables_list = tables_list();\n\tforeach ($tables_list as $name => $type) {\n\t\t$prefix = preg_replace('~_.*~', '', $name);\n\t\t$checked = ($TABLE == \"\" || $TABLE == (substr($TABLE, -1) == \"%\" ? \"$prefix%\" : $name)); //! % may be part of table name\n\t\t$print = \"<tr><td>\" . checkbox(\"tables[]\", $name, $checked, $name, \"\", \"block\");\n\t\tif ($type !== null && !preg_match('~table~i', $type)) {\n\t\t\t$views .= \"$print\\n\";\n\t\t} else {\n\t\t\techo \"$print<td align='right'><label class='block'><span id='Rows-\" . h($name) . \"'></span>\" . checkbox(\"data[]\", $name, $checked) . \"</label>\\n\";\n\t\t}\n\t\t$prefixes[$prefix]++;\n\t}\n\techo $views;\n\n\tif ($tables_list) {\n\t\techo script(\"ajaxSetHtml('\" . js_escape(ME) . \"script=db');\");\n\t}\n\n} else {\n\techo \"<thead><tr><th style='text-align: left;'>\";\n\techo \"<label class='block'><input type='checkbox' id='check-databases'\" . ($TABLE == \"\" ? \" checked\" : \"\") . \">\" . lang('Database') . \"</label>\";\n\techo script(\"qs('#check-databases').onclick = partial(formCheck, /^databases\\\\[/);\", \"\");\n\techo \"</thead>\\n\";\n\t$databases = adminer()->databases();\n\tif ($databases) {\n\t\tforeach ($databases as $db) {\n\t\t\tif (!information_schema($db)) {\n\t\t\t\t$prefix = preg_replace('~_.*~', '', $db);\n\t\t\t\techo \"<tr><td>\" . checkbox(\"databases[]\", $db, $TABLE == \"\" || $TABLE == \"$prefix%\", $db, \"\", \"block\") . \"\\n\";\n\t\t\t\t$prefixes[$prefix]++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\techo \"<tr><td><textarea name='databases' rows='10' cols='20'></textarea>\";\n\t}\n}\n?>\n</table>\n</form>\n<?php\n$first = true;\nforeach ($prefixes as $key => $val) {\n\tif ($key != \"\" && $val > 1) {\n\t\techo ($first ? \"<p>\" : \" \") . \"<a href='\" . h(ME) . \"dump=\" . urlencode(\"$key%\") . \"'>\" . h($key) . \"</a>\";\n\t\t$first = false;\n\t}\n}\n"
  },
  {
    "path": "adminer/edit.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"edit\"];\n$fields = fields($TABLE);\n$where = (isset($_GET[\"select\"])\n\t? ($_POST[\"check\"] && count($_POST[\"check\"]) == 1 ? where_check($_POST[\"check\"][0], $fields) : \"\")\n\t: where($_GET, $fields)\n);\n$update = (isset($_GET[\"select\"]) ? $_POST[\"edit\"] : $where);\nforeach ($fields as $name => $field) {\n\tif ((!$update && !isset($field[\"privileges\"][\"insert\"])) || adminer()->fieldName($field) == \"\") {\n\t\tunset($fields[$name]);\n\t}\n}\n\nif ($_POST && !$error && !isset($_GET[\"select\"])) {\n\t$location = $_POST[\"referer\"];\n\tif ($_POST[\"insert\"]) { // continue edit or insert\n\t\t$location = ($update ? null : $_SERVER[\"REQUEST_URI\"]);\n\t} elseif (!preg_match('~^.+&select=.+$~', $location)) {\n\t\t$location = ME . \"select=\" . urlencode($TABLE);\n\t}\n\n\t$indexes = indexes($TABLE);\n\t$unique_array = unique_array($_GET[\"where\"], $indexes);\n\t$query_where = \"\\nWHERE $where\";\n\n\tif (isset($_POST[\"delete\"])) {\n\t\tqueries_redirect(\n\t\t\t$location,\n\t\t\tlang('Item has been deleted.'),\n\t\t\tdriver()->delete($TABLE, $query_where, $unique_array ? 0 : 1)\n\t\t);\n\n\t} else {\n\t\t$set = array();\n\t\tforeach ($fields as $name => $field) {\n\t\t\t$val = process_input($field);\n\t\t\tif ($val !== false && $val !== null) {\n\t\t\t\t$set[idf_escape($name)] = $val;\n\t\t\t}\n\t\t}\n\n\t\tif ($update) {\n\t\t\tif (!$set) {\n\t\t\t\tredirect($location);\n\t\t\t}\n\t\t\tqueries_redirect(\n\t\t\t\t$location,\n\t\t\t\tlang('Item has been updated.'),\n\t\t\t\tdriver()->update($TABLE, $set, $query_where, $unique_array ? 0 : 1)\n\t\t\t);\n\t\t\tif (is_ajax()) {\n\t\t\t\tpage_headers();\n\t\t\t\tpage_messages($error);\n\t\t\t\texit;\n\t\t\t}\n\t\t} else {\n\t\t\t$result = driver()->insert($TABLE, $set);\n\t\t\t$last_id = ($result ? last_id($result) : 0);\n\t\t\tqueries_redirect($location, lang('Item%s has been inserted.', ($last_id ? \" $last_id\" : \"\")), $result); //! link\n\t\t}\n\t}\n}\n\n$row = null;\nif ($where) {\n\t$select = array();\n\tforeach ($fields as $name => $field) {\n\t\tif (isset($field[\"privileges\"][\"select\"])) {\n\t\t\t$as = ($_POST[\"clone\"] && $field[\"auto_increment\"] ? \"''\" : convert_field($field));\n\t\t\t$select[] = ($as ? \"$as AS \" : \"\") . idf_escape($name);\n\t\t}\n\t}\n\t$row = array();\n\tif (!support(\"table\")) {\n\t\t$select = array(\"*\");\n\t}\n\tif ($select) {\n\t\t$result = driver()->select($TABLE, $select, array($where), $select, array(), (isset($_GET[\"select\"]) ? 2 : 1));\n\t\tif (!$result) {\n\t\t\t$error = error();\n\t\t} else {\n\t\t\t$row = $result->fetch_assoc();\n\t\t\tif (!$row) { // MySQLi returns null\n\t\t\t\t$row = false;\n\t\t\t}\n\t\t}\n\t\tif (isset($_GET[\"select\"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers\n\t\t\t$row = null;\n\t\t}\n\t}\n}\n\nif (!support(\"table\") && !$fields) { // used by Mongo and SimpleDB\n\tif (!$where) { // insert\n\t\t$result = driver()->select($TABLE, array(\"*\"), array(), array(\"*\"));\n\t\t$row = ($result ? $result->fetch_assoc() : false);\n\t\tif (!$row) {\n\t\t\t$row = array(driver()->primary => \"\");\n\t\t}\n\t}\n\tif ($row) {\n\t\tforeach ($row as $key => $val) {\n\t\t\tif (!$where) {\n\t\t\t\t$row[$key] = null;\n\t\t\t}\n\t\t\t$fields[$key] = array(\"field\" => $key, \"null\" => ($key != driver()->primary), \"auto_increment\" => ($key == driver()->primary));\n\t\t}\n\t}\n}\n\nif ($_POST[\"save\"]) {\n\t$row = (array) $_POST[\"fields\"] + ($row ? $row : array());\n}\n\nedit_form($TABLE, $fields, $row, $update, $error);\n"
  },
  {
    "path": "adminer/elastic.php",
    "content": "<?php\n// To create Adminer just for Elasticsearch, run `../compile.php elastic`.\n\nfunction adminer_object() {\n\tinclude_once \"../plugins/login-password-less.php\";\n\tinclude_once \"../plugins/drivers/elastic.php\";\n\treturn new Adminer\\Plugins(array(\n\t\t\t// TODO: inline the result of password_hash() so that the password is not visible in source codes\n\t\t\tnew AdminerLoginPasswordLess(password_hash(\"YOUR_PASSWORD_HERE\", PASSWORD_DEFAULT)),\n\t));\n}\n\ninclude \"./index.php\";\n"
  },
  {
    "path": "adminer/event.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$EVENT = $_GET[\"event\"];\n$intervals = array(\"YEAR\", \"QUARTER\", \"MONTH\", \"DAY\", \"HOUR\", \"MINUTE\", \"WEEK\", \"SECOND\", \"YEAR_MONTH\", \"DAY_HOUR\", \"DAY_MINUTE\", \"DAY_SECOND\", \"HOUR_MINUTE\", \"HOUR_SECOND\", \"MINUTE_SECOND\");\n$statuses = array(\"ENABLED\" => \"ENABLE\", \"DISABLED\" => \"DISABLE\", \"SLAVESIDE_DISABLED\" => \"DISABLE ON SLAVE\");\n$row = $_POST;\n\nif ($_POST && !$error) {\n\tif ($_POST[\"drop\"]) {\n\t\tquery_redirect(\"DROP EVENT \" . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.'));\n\t} elseif (in_array($row[\"INTERVAL_FIELD\"], $intervals) && isset($statuses[$row[\"STATUS\"]])) {\n\t\t$schedule = \"\\nON SCHEDULE \" . ($row[\"INTERVAL_VALUE\"]\n\t\t\t? \"EVERY \" . q($row[\"INTERVAL_VALUE\"]) . \" $row[INTERVAL_FIELD]\"\n\t\t\t. ($row[\"STARTS\"] ? \" STARTS \" . q($row[\"STARTS\"]) : \"\")\n\t\t\t. ($row[\"ENDS\"] ? \" ENDS \" . q($row[\"ENDS\"]) : \"\") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173\n\t\t\t: \"AT \" . q($row[\"STARTS\"])\n\t\t\t) . \" ON COMPLETION\" . ($row[\"ON_COMPLETION\"] ? \"\" : \" NOT\") . \" PRESERVE\"\n\t\t;\n\n\t\tqueries_redirect(\n\t\t\tsubstr(ME, 0, -1),\n\t\t\t($EVENT != \"\" ? lang('Event has been altered.') : lang('Event has been created.')),\n\t\t\tqueries(\n\t\t\t\t($EVENT != \"\"\n\t\t\t\t? \"ALTER EVENT \" . idf_escape($EVENT) . $schedule . ($EVENT != $row[\"EVENT_NAME\"] ? \"\\nRENAME TO \" . idf_escape($row[\"EVENT_NAME\"]) : \"\")\n\t\t\t\t: \"CREATE EVENT \" . idf_escape($row[\"EVENT_NAME\"]) . $schedule\n\t\t\t\t) . \"\\n\" . $statuses[$row[\"STATUS\"]] . \" COMMENT \" . q($row[\"EVENT_COMMENT\"])\n\t\t\t\t. rtrim(\" DO\\n$row[EVENT_DEFINITION]\", \";\") . \";\"\n\t\t\t)\n\t\t);\n\t}\n}\n\npage_header(($EVENT != \"\" ? lang('Alter event') . \": \" . h($EVENT) : lang('Create event')), $error);\n\nif (!$row && $EVENT != \"\") {\n\t$rows = get_rows(\"SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = \" . q(DB) . \" AND EVENT_NAME = \" . q($EVENT));\n\t$row = reset($rows);\n}\n?>\n\n<form action=\"\" method=\"post\">\n<table class=\"layout\">\n<tr><th><?php echo lang('Name'); ?><td><input name=\"EVENT_NAME\" value=\"<?php echo h($row[\"EVENT_NAME\"]); ?>\" data-maxlength=\"64\" autocapitalize=\"off\">\n<tr><th title=\"datetime\"><?php echo lang('Start'); ?><td><input name=\"STARTS\" value=\"<?php echo h(\"$row[EXECUTE_AT]$row[STARTS]\"); ?>\">\n<tr><th title=\"datetime\"><?php echo lang('End'); ?><td><input name=\"ENDS\" value=\"<?php echo h($row[\"ENDS\"]); ?>\">\n<tr><th><?php echo lang('Every'); ?><td><input type=\"number\" name=\"INTERVAL_VALUE\" value=\"<?php echo h($row[\"INTERVAL_VALUE\"]); ?>\" class=\"size\"> <?php echo html_select(\"INTERVAL_FIELD\", $intervals, $row[\"INTERVAL_FIELD\"]); ?>\n<tr><th><?php echo lang('Status'); ?><td><?php echo html_select(\"STATUS\", $statuses, $row[\"STATUS\"]); ?>\n<tr><th><?php echo lang('Comment'); ?><td><input name=\"EVENT_COMMENT\" value=\"<?php echo h($row[\"EVENT_COMMENT\"]); ?>\" data-maxlength=\"64\">\n<tr><th><td><?php echo checkbox(\"ON_COMPLETION\", \"PRESERVE\", $row[\"ON_COMPLETION\"] == \"PRESERVE\", lang('On completion preserve')); ?>\n</table>\n<p><?php textarea(\"EVENT_DEFINITION\", $row[\"EVENT_DEFINITION\"]); ?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php if ($EVENT != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $EVENT)); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/file.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nif (substr(VERSION, -4) != '-dev') {\n\tif ($_SERVER[\"HTTP_IF_MODIFIED_SINCE\"]) {\n\t\theader(\"HTTP/1.1 304 Not Modified\");\n\t\texit;\n\t}\n\theader(\"Expires: \" . gmdate(\"D, d M Y H:i:s\", time() + 365*24*60*60) . \" GMT\");\n\theader(\"Last-Modified: \" . gmdate(\"D, d M Y H:i:s\") . \" GMT\");\n\theader(\"Cache-Control: immutable\");\n}\n\n@ini_set(\"zlib.output_compression\", '1'); // @ - may be disabled\n\nif ($_GET[\"file\"] == \"default.css\") {\n\theader(\"Content-Type: text/css; charset=utf-8\");\n\techo lzw_decompress(compile_file('../adminer/static/default.css;../externals/jush/jush.css', 'minify_css'));\n} elseif ($_GET[\"file\"] == \"dark.css\") {\n\theader(\"Content-Type: text/css; charset=utf-8\");\n\techo lzw_decompress(compile_file('../adminer/static/dark.css;../externals/jush/jush-dark.css', 'minify_css'));\n} elseif ($_GET[\"file\"] == \"functions.js\") {\n\theader(\"Content-Type: text/javascript; charset=utf-8\");\n\techo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));\n} elseif ($_GET[\"file\"] == \"jush.js\") {\n\theader(\"Content-Type: text/javascript; charset=utf-8\");\n\techo lzw_decompress(compile_file('../externals/jush/modules/jush.js;\n../externals/jush/modules/jush-autocomplete-sql.js;\n../externals/jush/modules/jush-textarea.js;\n../externals/jush/modules/jush-txt.js;\n../externals/jush/modules/jush-js.js;\n../externals/jush/modules/jush-sql.js;\n../externals/jush/modules/jush-pgsql.js;\n../externals/jush/modules/jush-sqlite.js;\n../externals/jush/modules/jush-mssql.js;\n../externals/jush/modules/jush-oracle.js;\n../externals/jush/modules/jush-simpledb.js;\n../externals/jush/modules/jush-igdb.js', 'minify_js'));\n} elseif ($_GET[\"file\"] == \"logo.png\") {\n\theader(\"Content-Type: image/png\");\n\techo compile_file('../adminer/static/logo.png');\n}\nexit;\n"
  },
  {
    "path": "adminer/foreign.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"foreign\"];\n$name = $_GET[\"name\"];\n$row = $_POST;\n\nif ($_POST && !$error && !$_POST[\"add\"] && !$_POST[\"change\"] && !$_POST[\"change-js\"]) {\n\tif (!$_POST[\"drop\"]) {\n\t\t$row[\"source\"] = array_filter($row[\"source\"], 'strlen');\n\t\tksort($row[\"source\"]); // enforce input order\n\t\t$target = array();\n\t\tforeach ($row[\"source\"] as $key => $val) {\n\t\t\t$target[$key] = $row[\"target\"][$key];\n\t\t}\n\t\t$row[\"target\"] = $target;\n\t}\n\n\tif (JUSH == \"sqlite\") {\n\t\t$result = recreate_table($TABLE, $TABLE, array(), array(), array(\" $name\" => ($row[\"drop\"] ? \"\" : \" \" . format_foreign_key($row))));\n\t} else {\n\t\t$alter = \"ALTER TABLE \" . table($TABLE);\n\t\t$result = ($name == \"\" || queries(\"$alter DROP \" . (JUSH == \"sql\" ? \"FOREIGN KEY \" : \"CONSTRAINT \") . idf_escape($name)));\n\t\tif (!$row[\"drop\"]) {\n\t\t\t$result = queries(\"$alter ADD\" . format_foreign_key($row));\n\t\t}\n\t}\n\tqueries_redirect(\n\t\tME . \"table=\" . urlencode($TABLE),\n\t\t($row[\"drop\"] ? lang('Foreign key has been dropped.') : ($name != \"\" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.'))),\n\t\t$result\n\t);\n\tif (!$row[\"drop\"]) {\n\t\t$error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.'); //! no partitioning\n\t}\n}\n\npage_header(lang('Foreign key'), $error, array(\"table\" => $TABLE), h($TABLE));\n\nif ($_POST) {\n\tksort($row[\"source\"]);\n\tif ($_POST[\"change\"] || $_POST[\"change-js\"]) {\n\t\t$row[\"target\"] = array();\n\t} else {\n\t\t$row[\"source\"][] = \"\";\n\t}\n} elseif ($name != \"\") {\n\t$foreign_keys = foreign_keys($TABLE);\n\t$row = $foreign_keys[$name];\n\t$row[\"source\"][] = \"\";\n} else {\n\t$row[\"table\"] = $TABLE;\n\t$row[\"source\"] = array(\"\");\n}\n?>\n\n<form action=\"\" method=\"post\">\n<?php\n$source = array_keys(fields($TABLE)); //! no text and blob\nif ($row[\"db\"] != \"\") {\n\tconnection()->select_db($row[\"db\"]);\n}\nif ($row[\"ns\"] != \"\") {\n\t$orig_schema = get_schema();\n\tset_schema($row[\"ns\"]);\n}\n$referencable = array_keys(array_filter(table_status('', true), 'Adminer\\fk_support'));\n$target = array_keys(fields(in_array($row[\"table\"], $referencable) ? $row[\"table\"] : reset($referencable)));\n$onchange = \"this.form['change-js'].value = '1'; this.form.submit();\";\necho \"<p><label>\" . lang('Target table') . \": \" . html_select(\"table\", $referencable, $row[\"table\"], $onchange) . \"</label>\\n\";\nif (support(\"scheme\")) {\n\t$schemas = array_filter(adminer()->schemas(), function ($schema) {\n\t\treturn !preg_match('~^information_schema$~i', $schema);\n\t});\n\techo \"<label>\" . lang('Schema') . \": \" . html_select(\"ns\", $schemas, $row[\"ns\"] != \"\" ? $row[\"ns\"] : $_GET[\"ns\"], $onchange) . \"</label>\";\n\tif ($row[\"ns\"] != \"\") {\n\t\tset_schema($orig_schema);\n\t}\n} elseif (JUSH != \"sqlite\") {\n\t$dbs = array();\n\tforeach (adminer()->databases() as $db) {\n\t\tif (!information_schema($db)) {\n\t\t\t$dbs[] = $db;\n\t\t}\n\t}\n\techo \"<label>\" . lang('DB') . \": \" . html_select(\"db\", $dbs, $row[\"db\"] != \"\" ? $row[\"db\"] : $_GET[\"db\"], $onchange) . \"</label>\";\n}\necho input_hidden(\"change-js\");\n?>\n<noscript><p><input type=\"submit\" name=\"change\" value=\"<?php echo lang('Change'); ?>\"></noscript>\n<table>\n<thead><tr><th id=\"label-source\"><?php echo lang('Source'); ?><th id=\"label-target\"><?php echo lang('Target'); ?></thead>\n<?php\n$j = 0;\nforeach ($row[\"source\"] as $key => $val) {\n\techo \"<tr>\";\n\techo \"<td>\" . html_select(\"source[\" . (+$key) . \"]\", array(-1 => \"\") + $source, $val, ($j == count($row[\"source\"]) - 1 ? \"foreignAddRow.call(this);\" : \"\"), \"label-source\");\n\techo \"<td>\" . html_select(\"target[\" . (+$key) . \"]\", $target, idx($row[\"target\"], $key), \"\", \"label-target\");\n\t$j++;\n}\n?>\n</table>\n<p>\n<label><?php echo lang('ON DELETE'); ?>: <?php echo html_select(\"on_delete\", array(-1 => \"\") + explode(\"|\", driver()->onActions), $row[\"on_delete\"]); ?></label>\n<label><?php echo lang('ON UPDATE'); ?>: <?php echo html_select(\"on_update\", array(-1 => \"\") + explode(\"|\", driver()->onActions), $row[\"on_update\"]); ?></label>\n<?php echo (DRIVER === 'pgsql' ? html_select(\"deferrable\", array('NOT DEFERRABLE', 'DEFERRABLE', 'DEFERRABLE INITIALLY DEFERRED'), $row[\"deferrable\"]) . ' ' : ''); ?>\n<?php echo doc_link(array(\n\t'sql' => \"innodb-foreign-key-constraints.html\",\n\t'mariadb' => \"foreign-keys/\",\n\t'pgsql' => \"sql-createtable.html#SQL-CREATETABLE-PARMS-REFERENCES\",\n\t'mssql' => \"t-sql/statements/create-table-transact-sql\",\n\t'oracle' => \"SQLRF01111\",\n)); ?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<noscript><p><input type=\"submit\" name=\"add\" value=\"<?php echo lang('Add column'); ?>\"></noscript>\n<?php if ($name != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $name)); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/include/adminer.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// any method change in this file should be transferred to editor/include/adminer.inc.php\n\n/** Default Adminer plugin; it should call methods via adminer()->f() instead of $this->f() to give chance to other plugins */\nclass Adminer {\n\t/** @var Adminer|Plugins */ static $instance;\n\t/** @visibility protected(set) */ public string $error = ''; // HTML\n\n\t/** Name in title and navigation\n\t* @return string HTML code\n\t*/\n\tfunction name(): string {\n\t\treturn \"<a href='https://www.adminer.org/'\" . target_blank() . \" id='h1'><img src='../adminer/static/logo.png' width='24' height='24' alt='' id='logo'>Adminer</a>\";\n\t}\n\n\t/** Connection parameters\n\t* @return array{string, string, string}\n\t*/\n\tfunction credentials(): array {\n\t\treturn array(SERVER, $_GET[\"username\"], get_password());\n\t}\n\n\t/** Get SSL connection options\n\t* @return string[]|void\n\t*/\n\tfunction connectSsl() {\n\t}\n\n\t/** Get key used for permanent login\n\t* @return string cryptic string which gets combined with password or '' in case of an error\n\t*/\n\tfunction permanentLogin(bool $create = false): string {\n\t\treturn password_file($create);\n\t}\n\n\t/** Return key used to group brute force attacks; behind a reverse proxy, you want to return the last part of X-Forwarded-For */\n\tfunction bruteForceKey(): string {\n\t\treturn $_SERVER[\"REMOTE_ADDR\"];\n\t}\n\n\t/** Get server name displayed in breadcrumbs\n\t* @return string HTML code or null\n\t*/\n\tfunction serverName(?string $server): string {\n\t\treturn h($server);\n\t}\n\n\t/** Identifier of selected database */\n\tfunction database(): ?string {\n\t\t// should be used everywhere instead of DB\n\t\treturn DB;\n\t}\n\n\t/** Get cached list of databases\n\t* @return list<string>\n\t*/\n\tfunction databases(bool $flush = true): array {\n\t\treturn get_databases($flush);\n\t}\n\n\t/** Print links after list of plugins */\n\tfunction pluginsLinks(): void {\n\t}\n\n\t/** Operators used in select\n\t* @return list<string> operators\n\t*/\n\tfunction operators(): array {\n\t\treturn driver()->operators;\n\t}\n\n\t/** Get list of schemas\n\t* @return list<string>\n\t*/\n\tfunction schemas(): array {\n\t\treturn schemas();\n\t}\n\n\t/** Specify limit for waiting on some slow queries like DB list\n\t* @return float number of seconds\n\t*/\n\tfunction queryTimeout(): float {\n\t\treturn 2;\n\t}\n\n\t/** Called after connecting and selecting a database */\n\tfunction afterConnect(): void {\n\t}\n\n\t/** Headers to send before HTML output */\n\tfunction headers(): void {\n\t}\n\n\t/** Get Content Security Policy headers\n\t* @param list<string[]> $csp of arrays with directive name in key, allowed sources in value\n\t* @return list<string[]> same as $csp\n\t*/\n\tfunction csp(array $csp): array {\n\t\treturn $csp;\n\t}\n\n\t/** Print HTML code inside <head>\n\t* @param bool $dark dark CSS: false to disable, true to force, null to base on user preferences\n\t* @return bool true to link favicon.ico\n\t*/\n\tfunction head(?bool $dark = null): bool {\n\t\t// this is matched by compile.php\n\t\techo \"<link rel='stylesheet' href='../externals/jush/jush.css'>\\n\";\n\t\techo ($dark !== false ? \"<link rel='stylesheet'\" . ($dark ? \"\" : \" media='(prefers-color-scheme: dark)'\") . \" href='../externals/jush/jush-dark.css'>\\n\" : \"\");\n\t\treturn true;\n\t}\n\n\t/** Print extra classes in <body class>; must start with a space */\n\tfunction bodyClass(): void {\n\t\techo \" adminer\";\n\t}\n\n\t/** Get URLs of the CSS files\n\t* @return string[] key is URL, value is either 'light' (supports only light color scheme), 'dark' or '' (both)\n\t*/\n\tfunction css(): array {\n\t\t$return = array();\n\t\tforeach (array(\"\", \"-dark\") as $mode) {\n\t\t\t$filename = \"adminer$mode.css\";\n\t\t\tif (file_exists($filename)) {\n\t\t\t\t$file = file_get_contents($filename);\n\t\t\t\t$return[\"$filename?v=\" . crc32($file)] = ($mode\n\t\t\t\t\t? \"dark\"\n\t\t\t\t\t: (preg_match('~prefers-color-scheme:\\s*dark~', $file) ? '' : 'light')\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Print login form */\n\tfunction loginForm(): void {\n\t\techo \"<table class='layout'>\\n\";\n\t\t// this is matched by compile.php\n\t\techo adminer()->loginFormField('driver', '<tr><th>' . lang('System') . '<td>', html_select(\"auth[driver]\", SqlDriver::$drivers, DRIVER, \"loginDriver(this);\"));\n\t\techo adminer()->loginFormField('server', '<tr><th>' . lang('Server') . '<td>', '<input name=\"auth[server]\" value=\"' . h(SERVER) . '\" title=\"' . lang('hostname[:port] or :socket') . '\" placeholder=\"localhost\" autocapitalize=\"off\">');\n\t\t// this is matched by compile.php\n\t\techo adminer()->loginFormField('username', '<tr><th>' . lang('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();\"));\n\t\techo adminer()->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type=\"password\" name=\"auth[password]\" autocomplete=\"current-password\">');\n\t\techo adminer()->loginFormField('db', '<tr><th>' . lang('Database') . '<td>', '<input name=\"auth[db]\" value=\"' . h($_GET[\"db\"]) . '\" autocapitalize=\"off\">');\n\t\techo \"</table>\\n\";\n\t\techo \"<p><input type='submit' value='\" . lang('Login') . \"'>\\n\";\n\t\techo checkbox(\"auth[permanent]\", 1, $_COOKIE[\"adminer_permanent\"], lang('Permanent login')) . \"\\n\";\n\t}\n\n\t/** Get login form field\n\t* @param string $heading HTML\n\t* @param string $value HTML\n\t*/\n\tfunction loginFormField(string $name, string $heading, string $value): string {\n\t\treturn $heading . $value . \"\\n\";\n\t}\n\n\t/** Authorize the user\n\t* @return mixed true for success, string for error message, false for unknown error\n\t*/\n\tfunction login(string $login, string $password) {\n\t\tif ($password == \"\") {\n\t\t\treturn lang('Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.', target_blank());\n\t\t}\n\t\treturn true;\n\t}\n\n\t/** Table caption used in navigation and headings\n\t* @param TableStatus $tableStatus\n\t* @return string HTML code, \"\" to ignore table\n\t*/\n\tfunction tableName(array $tableStatus): string {\n\t\treturn h($tableStatus[\"Name\"]);\n\t}\n\n\t/** Field caption used in select and edit\n\t* @param Field|RoutineField $field\n\t* @param int $order order of column in select\n\t* @return string HTML code, \"\" to ignore field\n\t*/\n\tfunction fieldName(array $field, int $order = 0): string {\n\t\t$type = $field[\"full_type\"] . ($field[\"null\"] ? \" NULL\" : \"\");\n\t\t$comment = $field[\"comment\"];\n\t\treturn '<span title=\"' . h($type . ($comment != \"\" ? ($type ? \": \" : \"\") . $comment : '')) . '\">' . h($field[\"field\"]) . '</span>';\n\t}\n\n\t/** Print links after select heading\n\t* @param TableStatus $tableStatus\n\t* @param ?string $set new item options, NULL for no new item\n\t*/\n\tfunction selectLinks(array $tableStatus, ?string $set = \"\"): void {\n\t\t$name = $tableStatus[\"Name\"];\n\t\techo '<p class=\"links\">';\n\t\t$links = array(\"select\" => lang('Select data'));\n\t\tif (support(\"table\") || support(\"indexes\")) {\n\t\t\t$links[\"table\"] = lang('Show structure');\n\t\t}\n\t\t$is_view = false;\n\t\tif (support(\"table\")) {\n\t\t\t$is_view = is_view($tableStatus);\n\t\t\tif ($is_view) {\n\t\t\t\tif (support(\"view\")) {\n\t\t\t\t\t$links[\"view\"] = lang('Alter view');\n\t\t\t\t}\n\t\t\t} elseif (function_exists('Adminer\\alter_table')) {\n\t\t\t\t$links[\"create\"] = lang('Alter table');\n\t\t\t}\n\t\t}\n\t\tif ($set !== null) {\n\t\t\t$links[\"edit\"] = lang('New item');\n\t\t}\n\t\tforeach ($links as $key => $val) {\n\t\t\techo \" <a href='\" . h(ME) . \"$key=\" . urlencode($name) . ($key == \"edit\" ? $set : \"\") . \"'\" . bold(isset($_GET[$key])) . \">$val</a>\";\n\t\t}\n\t\techo doc_link(array(JUSH => driver()->tableHelp($name, $is_view)), \"?\");\n\t\techo \"\\n\";\n\t}\n\n\t/** Get foreign keys for table\n\t* @return ForeignKey[] same format as foreign_keys()\n\t*/\n\tfunction foreignKeys(string $table): array {\n\t\treturn foreign_keys($table);\n\t}\n\n\t/** Find backward keys for table\n\t* @return BackwardKey[]\n\t*/\n\tfunction backwardKeys(string $table, string $tableName): array {\n\t\treturn array();\n\t}\n\n\t/** Print backward keys for row\n\t* @param BackwardKey[] $backwardKeys\n\t* @param string[] $row\n\t*/\n\tfunction backwardKeysPrint(array $backwardKeys, array $row): void {\n\t}\n\n\t/** Query printed in select before execution\n\t* @param string $query query to be executed\n\t* @param float $start start time of the query\n\t*/\n\tfunction selectQuery(string $query, float $start, bool $failed = false): string {\n\t\t$return = \"</p>\\n\"; // required for IE9 inline edit\n\t\tif (!$failed && ($warnings = driver()->warnings())) {\n\t\t\t$id = \"warnings\";\n\t\t\t$return = \", <a href='#$id'>\" . lang('Warnings') . \"</a>\" . script(\"qsl('a').onclick = partial(toggle, '$id');\", \"\")\n\t\t\t\t. \"$return<div id='$id' class='hidden'>\\n$warnings</div>\\n\"\n\t\t\t;\n\t\t}\n\t\treturn \"<p><code class='jush-\" . JUSH . \"'>\" . h(str_replace(\"\\n\", \" \", $query)) . \"</code> <span class='time'>(\" . format_time($start) . \")</span>\"\n\t\t\t. (support(\"sql\") ? \" <a href='\" . h(ME) . \"sql=\" . urlencode($query) . \"'>\" . lang('Edit') . \"</a>\" : \"\")\n\t\t\t. $return\n\t\t;\n\t}\n\n\t/** Query printed in SQL command before execution\n\t* @param string $query query to be executed\n\t* @return string escaped query to be printed\n\t*/\n\tfunction sqlCommandQuery(string $query): string {\n\t\treturn shorten_utf8(trim($query), 1000);\n\t}\n\n\t/** Print HTML code just before the Execute button in SQL command */\n\tfunction sqlPrintAfter(): void {\n\t}\n\n\t/** Description of a row in a table\n\t* @return string SQL expression, empty string for no description\n\t*/\n\tfunction rowDescription(string $table): string {\n\t\treturn \"\";\n\t}\n\n\t/** Get descriptions of selected data\n\t* @param list<string[]> $rows all data to print\n\t* @param list<ForeignKey>[] $foreignKeys\n\t* @return list<string[]>\n\t*/\n\tfunction rowDescriptions(array $rows, array $foreignKeys): array {\n\t\treturn $rows;\n\t}\n\n\t/** Get a link to use in select table\n\t* @param string $val raw value of the field\n\t* @param array{type: string} $field\n\t* @return string|void null to create the default link\n\t*/\n\tfunction selectLink(?string $val, array $field) {\n\t}\n\n\t/** Value printed in select table\n\t* @param ?string $val HTML-escaped value to print\n\t* @param ?string $link link to foreign key\n\t* @param array{type: string} $field\n\t* @param string $original original value before applying editVal() and escaping\n\t*/\n\tfunction selectVal(?string $val, ?string $link, array $field, ?string $original): string {\n\t\t$return = ($val === null ? \"<i>NULL</i>\"\n\t\t\t: (preg_match(\"~char|binary|boolean~\", $field[\"type\"]) && !preg_match(\"~var~\", $field[\"type\"]) ? \"<code>$val</code>\"\n\t\t\t: (preg_match('~json~', $field[\"type\"]) ? \"<code class='jush-js'>$val</code>\"\n\t\t\t: $val)\n\t\t));\n\t\tif (is_blob($field) && !is_utf8($val)) {\n\t\t\t$return = \"<i>\" . lang('%d byte(s)', strlen($original)) . \"</i>\";\n\t\t}\n\t\treturn ($link ? \"<a href='\" . h($link) . \"'\" . (is_url($link) ? target_blank() : \"\") . \">$return</a>\" : $return);\n\t}\n\n\t/** Value conversion used in select and edit\n\t* @param array{type: string} $field\n\t*/\n\tfunction editVal(?string $val, array $field): ?string {\n\t\treturn $val;\n\t}\n\n\t/** Get configuration options for AdminerConfig\n\t* @return string[] key is config description, value is HTML\n\t*/\n\tfunction config(): array {\n\t\treturn array();\n\t}\n\n\t/** Print table structure in tabular format\n\t* @param Field[] $fields\n\t* @param TableStatus $tableStatus\n\t*/\n\tfunction tableStructurePrint(array $fields, ?array $tableStatus = null): void {\n\t\techo \"<div class='scrollable'>\\n\";\n\t\techo \"<table class='nowrap odds'>\\n\";\n\t\techo \"<thead><tr><th>\" . lang('Column') . \"<td>\" . lang('Type') . (support(\"comment\") ? \"<td>\" . lang('Comment') : \"\") . \"</thead>\\n\";\n\t\t$structured_types = driver()->structuredTypes();\n\t\tforeach ($fields as $field) {\n\t\t\techo \"<tr><th>\" . h($field[\"field\"]);\n\t\t\t$type = h($field[\"full_type\"]);\n\t\t\t$collation = h($field[\"collation\"]);\n\t\t\techo \"<td><span title='$collation'>\"\n\t\t\t\t. (in_array($type, (array) $structured_types[lang('User types')])\n\t\t\t\t\t? \"<a href='\" . h(ME . 'type=' . urlencode($type)) . \"'>$type</a>\"\n\t\t\t\t\t: $type . ($collation && isset($tableStatus[\"Collation\"]) && $collation != $tableStatus[\"Collation\"] ? \" $collation\" : \"\"))\n\t\t\t\t. \"</span>\"\n\t\t\t;\n\t\t\techo ($field[\"null\"] ? \" <i>NULL</i>\" : \"\");\n\t\t\techo ($field[\"auto_increment\"] ? \" <i>\" . lang('Auto Increment') . \"</i>\" : \"\");\n\t\t\t$default = h($field[\"default\"]);\n\t\t\techo (isset($field[\"default\"]) ? \" <span title='\" . lang('Default value') . \"'>[<b>\" . ($field[\"generated\"] ? \"<code class='jush-\" . JUSH . \"'>$default</code>\" : $default) . \"</b>]</span>\" : \"\");\n\t\t\techo (support(\"comment\") ? \"<td>\" . h($field[\"comment\"]) : \"\");\n\t\t\techo \"\\n\";\n\t\t}\n\t\techo \"</table>\\n\";\n\t\techo \"</div>\\n\";\n\t}\n\n\t/** Print list of indexes on table in tabular format\n\t* @param Index[] $indexes\n\t* @param TableStatus $tableStatus\n\t*/\n\tfunction tableIndexesPrint(array $indexes, array $tableStatus): void {\n\t\t$partial = false;\n\t\tforeach ($indexes as $name => $index) {\n\t\t\t$partial |= !!$index[\"partial\"];\n\t\t}\n\t\techo \"<table>\\n\";\n\t\t$default_algorithm = first(driver()->indexAlgorithms($tableStatus));\n\t\tforeach ($indexes as $name => $index) {\n\t\t\tksort($index[\"columns\"]); // enforce correct columns order\n\t\t\t$print = array();\n\t\t\tforeach ($index[\"columns\"] as $key => $val) {\n\t\t\t\t$print[] = \"<i>\" . h($val) . \"</i>\"\n\t\t\t\t\t. ($index[\"lengths\"][$key] ? \"(\" . $index[\"lengths\"][$key] . \")\" : \"\")\n\t\t\t\t\t. ($index[\"descs\"][$key] ? \" DESC\" : \"\")\n\t\t\t\t;\n\t\t\t}\n\n\t\t\techo \"<tr title='\" . h($name) . \"'>\";\n\t\t\techo \"<th>$index[type]\" . ($default_algorithm && $index['algorithm'] != $default_algorithm ? \" ($index[algorithm])\" : \"\");\n\t\t\techo \"<td>\" . implode(\", \", $print);\n\t\t\tif ($partial) {\n\t\t\t\techo \"<td>\" . ($index['partial'] ? \"<code class='jush-\" . JUSH . \"'>WHERE \" . h($index['partial']) : \"\");\n\t\t\t}\n\t\t\techo \"\\n\";\n\t\t}\n\t\techo \"</table>\\n\";\n\t}\n\n\t/** Print columns box in select\n\t* @param list<string> $select result of selectColumnsProcess()[0]\n\t* @param string[] $columns selectable columns\n\t*/\n\tfunction selectColumnsPrint(array $select, array $columns): void {\n\t\tprint_fieldset(\"select\", lang('Select'), $select);\n\t\t$i = 0;\n\t\t$select[\"\"] = array();\n\t\tforeach ($select as $key => $val) {\n\t\t\t$val = idx($_GET[\"columns\"], $key, array());\n\t\t\t$column = select_input(\n\t\t\t\t\" name='columns[$i][col]'\",\n\t\t\t\t$columns,\n\t\t\t\t$val[\"col\"],\n\t\t\t\t($key !== \"\" ? \"selectFieldChange\" : \"selectAddRow\")\n\t\t\t);\n\t\t\techo \"<div>\" . (driver()->functions || driver()->grouping ? html_select(\"columns[$i][fun]\", array(-1 => \"\") + array_filter(array(lang('Functions') => driver()->functions, lang('Aggregation') => driver()->grouping)), $val[\"fun\"])\n\t\t\t\t. on_help(\"event.target.value && event.target.value.replace(/ |\\$/, '(') + ')'\", 1)\n\t\t\t\t. script(\"qsl('select').onchange = function () { helpClose();\" . ($key !== \"\" ? \"\" : \" qsl('select, input', this.parentNode).onchange();\") . \" };\", \"\")\n\t\t\t\t. \"($column)\" : $column) . \"</div>\\n\";\n\t\t\t$i++;\n\t\t}\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\t/** Print search box in select\n\t* @param list<string> $where result of selectSearchProcess()\n\t* @param string[] $columns selectable columns\n\t* @param Index[] $indexes\n\t*/\n\tfunction selectSearchPrint(array $where, array $columns, array $indexes): void {\n\t\tprint_fieldset(\"search\", lang('Search'), $where);\n\t\tforeach ($indexes as $i => $index) {\n\t\t\tif ($index[\"type\"] == \"FULLTEXT\") {\n\t\t\t\techo \"<div>(<i>\" . implode(\"</i>, <i>\", array_map('Adminer\\h', $index[\"columns\"])) . \"</i>) AGAINST\";\n\t\t\t\techo \" <input type='search' name='fulltext[$i]' value='\" . h(idx($_GET[\"fulltext\"], $i)) . \"'>\";\n\t\t\t\techo script(\"qsl('input').oninput = selectFieldChange;\", \"\");\n\t\t\t\techo (JUSH == 'sql' ? checkbox(\"boolean[$i]\", 1, isset($_GET[\"boolean\"][$i]), \"BOOL\") : '');\n\t\t\t\techo \"</div>\\n\";\n\t\t\t}\n\t\t}\n\t\t$change_next = \"this.parentNode.firstChild.onchange();\";\n\t\tforeach (array_merge((array) $_GET[\"where\"], array(array())) as $i => $val) {\n\t\t\tif (!$val || (\"$val[col]$val[val]\" != \"\" && in_array($val[\"op\"], adminer()->operators()))) {\n\t\t\t\techo \"<div>\" . select_input(\n\t\t\t\t\t\" name='where[$i][col]'\",\n\t\t\t\t\t$columns,\n\t\t\t\t\t$val[\"col\"],\n\t\t\t\t\t($val ? \"selectFieldChange\" : \"selectAddRow\"),\n\t\t\t\t\t\"(\" . lang('anywhere') . \")\"\n\t\t\t\t);\n\t\t\t\techo html_select(\"where[$i][op]\", adminer()->operators(), $val[\"op\"], $change_next);\n\t\t\t\techo \"<input type='search' name='where[$i][val]' value='\" . h($val[\"val\"]) . \"'>\";\n\t\t\t\techo script(\"mixin(qsl('input'), {oninput: function () { $change_next }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});\", \"\");\n\t\t\t\techo \"</div>\\n\";\n\t\t\t}\n\t\t}\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\t/** Print order box in select\n\t* @param list<string> $order result of selectOrderProcess()\n\t* @param string[] $columns selectable columns\n\t* @param Index[] $indexes\n\t*/\n\tfunction selectOrderPrint(array $order, array $columns, array $indexes): void {\n\t\tprint_fieldset(\"sort\", lang('Sort'), $order);\n\t\t$i = 0;\n\t\tforeach ((array) $_GET[\"order\"] as $key => $val) {\n\t\t\tif ($val != \"\") {\n\t\t\t\techo \"<div>\" . select_input(\" name='order[$i]'\", $columns, $val, \"selectFieldChange\");\n\t\t\t\techo checkbox(\"desc[$i]\", 1, isset($_GET[\"desc\"][$key]), lang('descending')) . \"</div>\\n\";\n\t\t\t\t$i++;\n\t\t\t}\n\t\t}\n\t\techo \"<div>\" . select_input(\" name='order[$i]'\", $columns, \"\", \"selectAddRow\");\n\t\techo checkbox(\"desc[$i]\", 1, false, lang('descending')) . \"</div>\\n\";\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\t/** Print limit box in select */\n\tfunction selectLimitPrint(int $limit): void {\n\t\techo \"<fieldset><legend>\" . lang('Limit') . \"</legend><div>\"; // <div> for easy styling\n\t\techo \"<input type='number' name='limit' class='size' value='\" . intval($limit) . \"'>\";\n\t\techo script(\"qsl('input').oninput = selectFieldChange;\", \"\");\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\t/** Print text length box in select\n\t* @param numeric-string $text_length result of selectLengthProcess()\n\t*/\n\tfunction selectLengthPrint(string $text_length): void {\n\t\tif ($text_length !== null) {\n\t\t\techo \"<fieldset><legend>\" . lang('Text length') . \"</legend><div>\";\n\t\t\techo \"<input type='number' name='text_length' class='size' value='\" . h($text_length) . \"'>\";\n\t\t\techo \"</div></fieldset>\\n\";\n\t\t}\n\t}\n\n\t/** Print action box in select\n\t* @param Index[] $indexes\n\t*/\n\tfunction selectActionPrint(array $indexes): void {\n\t\techo \"<fieldset><legend>\" . lang('Action') . \"</legend><div>\";\n\t\techo \"<input type='submit' value='\" . lang('Select') . \"'>\";\n\t\techo \" <span id='noindex' title='\" . lang('Full table scan') . \"'></span>\";\n\t\techo \"<script\" . nonce() . \">\\n\";\n\t\techo \"const indexColumns = \";\n\t\t$columns = array();\n\t\tforeach ($indexes as $index) {\n\t\t\t$current_key = reset($index[\"columns\"]);\n\t\t\tif ($index[\"type\"] != \"FULLTEXT\" && $current_key) {\n\t\t\t\t$columns[$current_key] = 1;\n\t\t\t}\n\t\t}\n\t\t$columns[\"\"] = 1;\n\t\tforeach ($columns as $key => $val) {\n\t\t\tjson_row($key);\n\t\t}\n\t\techo \";\\n\";\n\t\techo \"selectFieldChange.call(qs('#form')['select']);\\n\";\n\t\techo \"</script>\\n\";\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\t/** Print command box in select\n\t* @return bool whether to print default commands\n\t*/\n\tfunction selectCommandPrint(): bool {\n\t\treturn !information_schema(DB);\n\t}\n\n\t/** Print import box in select\n\t* @return bool whether to print default import\n\t*/\n\tfunction selectImportPrint(): bool {\n\t\treturn !information_schema(DB);\n\t}\n\n\t/** Print extra text in the end of a select form\n\t* @param string[] $emailFields fields holding e-mails\n\t* @param string[] $columns selectable columns\n\t*/\n\tfunction selectEmailPrint(array $emailFields, array $columns): void {\n\t}\n\n\t/** Process columns box in select\n\t* @param string[] $columns selectable columns\n\t* @param Index[] $indexes\n\t* @return list<list<string>> [[select_expressions], [group_expressions]]\n\t*/\n\tfunction selectColumnsProcess(array $columns, array $indexes): array {\n\t\t$select = array(); // select expressions, empty for *\n\t\t$group = array(); // expressions without aggregation - will be used for GROUP BY if an aggregation function is used\n\t\tforeach ((array) $_GET[\"columns\"] as $key => $val) {\n\t\t\tif ($val[\"fun\"] == \"count\" || ($val[\"col\"] != \"\" && (!$val[\"fun\"] || in_array($val[\"fun\"], driver()->functions) || in_array($val[\"fun\"], driver()->grouping)))) {\n\t\t\t\t$select[$key] = apply_sql_function($val[\"fun\"], ($val[\"col\"] != \"\" ? idf_escape($val[\"col\"]) : \"*\"));\n\t\t\t\tif (!in_array($val[\"fun\"], driver()->grouping)) {\n\t\t\t\t\t$group[] = $select[$key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn array($select, $group);\n\t}\n\n\t/** Process search box in select\n\t* @param Field[] $fields\n\t* @param Index[] $indexes\n\t* @return list<string> expressions to join by AND\n\t*/\n\tfunction selectSearchProcess(array $fields, array $indexes): array {\n\t\t$return = array();\n\t\tforeach ($indexes as $i => $index) {\n\t\t\tif ($index[\"type\"] == \"FULLTEXT\" && idx($_GET[\"fulltext\"], $i) != \"\") {\n\t\t\t\t$return[] = \"MATCH (\" . implode(\", \", array_map('Adminer\\idf_escape', $index[\"columns\"])) . \") AGAINST (\" . q($_GET[\"fulltext\"][$i]) . (isset($_GET[\"boolean\"][$i]) ? \" IN BOOLEAN MODE\" : \"\") . \")\";\n\t\t\t}\n\t\t}\n\t\tforeach ((array) $_GET[\"where\"] as $key => $val) {\n\t\t\t$col = $val[\"col\"];\n\t\t\tif (\"$col$val[val]\" != \"\" && in_array($val[\"op\"], adminer()->operators())) {\n\t\t\t\t$conds = array();\n\t\t\t\tforeach (($col != \"\" ? array($col => $fields[$col]) : $fields) as $name => $field) {\n\t\t\t\t\t$prefix = \"\";\n\t\t\t\t\t$cond = \" $val[op]\";\n\t\t\t\t\tif (preg_match('~IN$~', $val[\"op\"])) {\n\t\t\t\t\t\t$in = process_length($val[\"val\"]);\n\t\t\t\t\t\t$cond .= \" \" . ($in != \"\" ? $in : \"(NULL)\");\n\t\t\t\t\t} elseif ($val[\"op\"] == \"SQL\") {\n\t\t\t\t\t\t$cond = \" $val[val]\"; // SQL injection\n\t\t\t\t\t} elseif (preg_match('~^(I?LIKE) %%$~', $val[\"op\"], $match)) {\n\t\t\t\t\t\t$cond = \" $match[1] \" . adminer()->processInput($field, \"%$val[val]%\");\n\t\t\t\t\t} elseif ($val[\"op\"] == \"FIND_IN_SET\") {\n\t\t\t\t\t\t$prefix = \"$val[op](\" . q($val[\"val\"]) . \", \";\n\t\t\t\t\t\t$cond = \")\";\n\t\t\t\t\t} elseif (!preg_match('~NULL$~', $val[\"op\"])) {\n\t\t\t\t\t\t$cond .= \" \" . adminer()->processInput($field, $val[\"val\"]);\n\t\t\t\t\t}\n\t\t\t\t\tif ($col != \"\" || ( // find anywhere\n\t\t\t\t\t\tisset($field[\"privileges\"][\"where\"])\n\t\t\t\t\t\t&& (preg_match('~^[-\\d.' . (preg_match('~IN$~', $val[\"op\"]) ? ',' : '') . ']+$~', $val[\"val\"]) || !preg_match('~' . number_type() . '|bit~', $field[\"type\"]))\n\t\t\t\t\t\t&& (!preg_match(\"~[\\x80-\\xFF]~\", $val[\"val\"]) || preg_match('~char|text|enum|set~', $field[\"type\"]))\n\t\t\t\t\t\t&& (!preg_match('~date|timestamp~', $field[\"type\"]) || preg_match('~^\\d+-\\d+-\\d+~', $val[\"val\"]))\n\t\t\t\t\t)) {\n\t\t\t\t\t\t$conds[] = $prefix . driver()->convertSearch(idf_escape($name), $val, $field) . $cond;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$return[] =\n\t\t\t\t\t(count($conds) == 1 ? $conds[0] :\n\t\t\t\t\t($conds ? \"(\" . implode(\" OR \", $conds) . \")\" :\n\t\t\t\t\t\"1 = 0\"\n\t\t\t\t));\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Process order box in select\n\t* @param Field[] $fields\n\t* @param Index[] $indexes\n\t* @return list<string> expressions to join by comma\n\t*/\n\tfunction selectOrderProcess(array $fields, array $indexes): array {\n\t\t$return = array();\n\t\tforeach ((array) $_GET[\"order\"] as $key => $val) {\n\t\t\tif ($val != \"\") {\n\t\t\t\t$return[] = (preg_match('~^((COUNT\\(DISTINCT |[A-Z0-9_]+\\()(`(?:[^`]|``)+`|\"(?:[^\"]|\"\")+\")\\)|COUNT\\(\\*\\))$~', $val) ? $val : idf_escape($val)) //! MS SQL uses []\n\t\t\t\t\t. (isset($_GET[\"desc\"][$key]) ? \" DESC\" . (JUSH == 'pgsql' && idx($fields[$val], \"null\") ? \" NULLS LAST\" : \"\") : \"\")\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Process limit box in select */\n\tfunction selectLimitProcess(): int {\n\t\treturn (isset($_GET[\"limit\"]) ? intval($_GET[\"limit\"]) : 50);\n\t}\n\n\t/** Process length box in select\n\t* @return numeric-string number of characters to shorten texts, will be escaped, empty string means unlimited\n\t*/\n\tfunction selectLengthProcess(): string {\n\t\treturn (isset($_GET[\"text_length\"]) ? \"$_GET[text_length]\" : \"100\");\n\t}\n\n\t/** Process extras in select form\n\t* @param string[] $where AND conditions\n\t* @param list<ForeignKey>[] $foreignKeys\n\t* @return bool true if processed, false to process other parts of form\n\t*/\n\tfunction selectEmailProcess(array $where, array $foreignKeys): bool {\n\t\treturn false;\n\t}\n\n\t/** Build SQL query used in select\n\t* @param list<string> $select result of selectColumnsProcess()[0]\n\t* @param list<string> $where result of selectSearchProcess()\n\t* @param list<string> $group result of selectColumnsProcess()[1]\n\t* @param list<string> $order result of selectOrderProcess()\n\t* @param int $limit result of selectLimitProcess()\n\t* @param int $page index of page starting at zero\n\t* @return string empty string to use default query\n\t*/\n\tfunction selectQueryBuild(array $select, array $where, array $group, array $order, int $limit, ?int $page): string {\n\t\treturn \"\";\n\t}\n\n\t/** Query printed after execution in the message\n\t* @param string $query executed query\n\t* @param string $time elapsed time\n\t*/\n\tfunction messageQuery(string $query, string $time, bool $failed = false): string {\n\t\trestart_session();\n\t\t$history = &get_session(\"queries\");\n\t\tif (!idx($history, $_GET[\"db\"])) {\n\t\t\t$history[$_GET[\"db\"]] = array();\n\t\t}\n\t\tif (strlen($query) > 1e6) {\n\t\t\t$query = preg_replace('~[\\x80-\\xFF]+$~', '', substr($query, 0, 1e6)) . \"\\n…\"; // [\\x80-\\xFF] - valid UTF-8, \\n - can end by one-line comment\n\t\t}\n\t\t$history[$_GET[\"db\"]][] = array($query, time(), $time); // not DB - $_GET[\"db\"] is changed in database.inc.php //! respect $_GET[\"ns\"]\n\t\t$sql_id = \"sql-\" . count($history[$_GET[\"db\"]]);\n\t\t$return = \"<a href='#$sql_id' class='toggle'>\" . lang('SQL command') . \"</a> <a href='' class='jsonly copy'>🗐</a>\\n\";\n\t\tif (!$failed && ($warnings = driver()->warnings())) {\n\t\t\t$id = \"warnings-\" . count($history[$_GET[\"db\"]]);\n\t\t\t$return = \"<a href='#$id' class='toggle'>\" . lang('Warnings') . \"</a>, $return<div id='$id' class='hidden'>\\n$warnings</div>\\n\";\n\t\t}\n\t\treturn \" <span class='time'>\" . @date(\"H:i:s\") . \"</span>\" // @ - time zone may be not set\n\t\t\t. \" $return<div id='$sql_id' class='hidden'><pre><code class='jush-\" . JUSH . \"'>\" . shorten_utf8($query, 1e4) . \"</code></pre>\"\n\t\t\t. ($time ? \" <span class='time'>($time)</span>\" : '')\n\t\t\t. (support(\"sql\") ? '<p><a href=\"' . h(str_replace(\"db=\" . urlencode(DB), \"db=\" . urlencode($_GET[\"db\"]), ME) . 'sql=&history=' . (count($history[$_GET[\"db\"]]) - 1)) . '\">' . lang('Edit') . '</a>' : '')\n\t\t\t. '</div>'\n\t\t;\n\t}\n\n\t/** Print before edit form\n\t* @param Field[] $fields\n\t* @param mixed $row\n\t*/\n\tfunction editRowPrint(string $table, array $fields, $row, ?bool $update): void {\n\t}\n\n\t/** Functions displayed in edit form\n\t* @param Field|array{null:bool} $field\n\t* @return string[]\n\t*/\n\tfunction editFunctions(array $field): array {\n\t\t$return = ($field[\"null\"] ? \"NULL/\" : \"\");\n\t\t$update = isset($_GET[\"select\"]) || where($_GET);\n\t\tforeach (array(driver()->insertFunctions, driver()->editFunctions) as $key => $functions) {\n\t\t\tif (!$key || (!isset($_GET[\"call\"]) && $update)) { // relative functions\n\t\t\t\tforeach ($functions as $pattern => $val) {\n\t\t\t\t\tif (!$pattern || preg_match(\"~$pattern~\", $field[\"type\"])) {\n\t\t\t\t\t\t$return .= \"/$val\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($key && $functions && !preg_match('~set|bool~', $field[\"type\"]) && !is_blob($field)) {\n\t\t\t\t$return .= \"/SQL\";\n\t\t\t}\n\t\t}\n\t\tif ($field[\"auto_increment\"] && !$update) {\n\t\t\t$return = lang('Auto Increment');\n\t\t}\n\t\treturn explode(\"/\", $return);\n\t}\n\n\t/** Get options to display edit field\n\t* @param ?string $table null in call.inc.php\n\t* @param Field $field\n\t* @param string $attrs attributes to use inside the tag\n\t* @param string|string[]|false|null $value false means original value\n\t* @return string custom input field or empty string for default\n\t*/\n\tfunction editInput(?string $table, array $field, string $attrs, $value): string {\n\t\tif ($field[\"type\"] == \"enum\") {\n\t\t\treturn (isset($_GET[\"select\"]) ? \"<label><input type='radio'$attrs value='orig' checked><i>\" . lang('original') . \"</i></label> \" : \"\")\n\t\t\t\t. enum_input(\"radio\", $attrs, $field, $value, \"NULL\")\n\t\t\t;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t/** Get hint for edit field\n\t* @param ?string $table null in call.inc.php\n\t* @param Field $field\n\t*/\n\tfunction editHint(?string $table, array $field, ?string $value): string {\n\t\treturn \"\";\n\t}\n\n\t/** Process sent input\n\t* @param Field $field\n\t* @return string expression to use in a query\n\t*/\n\tfunction processInput(array $field, string $value, ?string $function = \"\"): string {\n\t\tif ($function == \"SQL\") {\n\t\t\treturn $value; // SQL injection\n\t\t}\n\t\t$name = $field[\"field\"];\n\t\t$return = q($value);\n\t\tif (preg_match('~^(now|getdate|uuid)$~', $function)) {\n\t\t\t$return = \"$function()\";\n\t\t} elseif (preg_match('~^current_(date|timestamp)$~', $function)) {\n\t\t\t$return = $function;\n\t\t} elseif (preg_match('~^([+-]|\\|\\|)$~', $function)) {\n\t\t\t$return = idf_escape($name) . \" $function $return\";\n\t\t} elseif (preg_match('~^[+-] interval$~', $function)) {\n\t\t\t$return = idf_escape($name) . \" $function \" . (preg_match(\"~^(\\\\d+|'[0-9.: -]') [A-Z_]+\\$~i\", $value) && JUSH != \"pgsql\" ? $value : $return);\n\t\t} elseif (preg_match('~^(addtime|subtime|concat)$~', $function)) {\n\t\t\t$return = \"$function(\" . idf_escape($name) . \", $return)\";\n\t\t} elseif (preg_match('~^(md5|sha1|password|encrypt)$~', $function)) {\n\t\t\t$return = \"$function($return)\";\n\t\t}\n\t\treturn unconvert_field($field, $return);\n\t}\n\n\t/** Return export output options\n\t* @return string[]\n\t*/\n\tfunction dumpOutput(): array {\n\t\t$return = array('text' => lang('open'), 'file' => lang('save'));\n\t\tif (function_exists('gzencode')) {\n\t\t\t$return['gz'] = 'gzip';\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Return export format options\n\t* @return string[] empty to disable export\n\t*/\n\tfunction dumpFormat(): array {\n\t\treturn (support(\"dump\") ? array('sql' => 'SQL') : array()) + array('csv' => 'CSV,', 'csv;' => 'CSV;', 'tsv' => 'TSV');\n\t}\n\n\t/** Export database structure\n\t* @return void prints data\n\t*/\n\tfunction dumpDatabase(string $db): void {\n\t}\n\n\t/** Export table structure\n\t* @param int $is_view 0 table, 1 view, 2 temporary view table\n\t* @return void prints data\n\t*/\n\tfunction dumpTable(string $table, string $style, int $is_view = 0): void {\n\t\tif ($_POST[\"format\"] != \"sql\") {\n\t\t\techo \"\\xef\\xbb\\xbf\"; // UTF-8 byte order mark\n\t\t\tif ($style) {\n\t\t\t\tdump_csv(array_keys(fields($table)));\n\t\t\t}\n\t\t} else {\n\t\t\tif ($is_view == 2) {\n\t\t\t\t$fields = array();\n\t\t\t\tforeach (fields($table) as $name => $field) {\n\t\t\t\t\t$fields[] = idf_escape($name) . \" $field[full_type]\";\n\t\t\t\t}\n\t\t\t\t$create = \"CREATE TABLE \" . table($table) . \" (\" . implode(\", \", $fields) . \")\";\n\t\t\t} else {\n\t\t\t\t$create = create_sql($table, $_POST[\"auto_increment\"], $style);\n\t\t\t}\n\t\t\tset_utf8mb4($create);\n\t\t\tif ($style && $create) {\n\t\t\t\tif ($style == \"DROP+CREATE\" || $is_view == 1) {\n\t\t\t\t\techo \"DROP \" . ($is_view == 2 ? \"VIEW\" : \"TABLE\") . \" IF EXISTS \" . table($table) . \";\\n\";\n\t\t\t\t}\n\t\t\t\tif ($is_view == 1) {\n\t\t\t\t\t$create = remove_definer($create);\n\t\t\t\t}\n\t\t\t\techo \"$create;\\n\\n\";\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Export table data\n\t* @return void prints data\n\t*/\n\tfunction dumpData(string $table, string $style, string $query): void {\n\t\tif ($style) {\n\t\t\t$max_packet = (JUSH == \"sqlite\" ? 0 : 1048576); // default, minimum is 1024\n\t\t\t$fields = array();\n\t\t\t$identity_insert = false;\n\t\t\tif ($_POST[\"format\"] == \"sql\") {\n\t\t\t\tif ($style == \"TRUNCATE+INSERT\") {\n\t\t\t\t\techo truncate_sql($table) . \";\\n\";\n\t\t\t\t}\n\t\t\t\t$fields = fields($table);\n\t\t\t\tif (JUSH == \"mssql\") {\n\t\t\t\t\tforeach ($fields as $field) {\n\t\t\t\t\t\tif ($field[\"auto_increment\"]) {\n\t\t\t\t\t\t\techo \"SET IDENTITY_INSERT \" . table($table) . \" ON;\\n\";\n\t\t\t\t\t\t\t$identity_insert = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$result = connection()->query($query, 1); // 1 - MYSQLI_USE_RESULT\n\t\t\tif ($result) {\n\t\t\t\t$insert = \"\";\n\t\t\t\t$buffer = \"\";\n\t\t\t\t$keys = array();\n\t\t\t\t$generated = array();\n\t\t\t\t$suffix = \"\";\n\t\t\t\t$fetch_function = ($table != '' ? 'fetch_assoc' : 'fetch_row');\n\t\t\t\t$count = 0;\n\t\t\t\twhile ($row = $result->$fetch_function()) {\n\t\t\t\t\tif (!$keys) {\n\t\t\t\t\t\t$values = array();\n\t\t\t\t\t\tforeach ($row as $val) {\n\t\t\t\t\t\t\t$field = $result->fetch_field();\n\t\t\t\t\t\t\tif (idx($fields[$field->name], 'generated')) {\n\t\t\t\t\t\t\t\t$generated[$field->name] = true;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$keys[] = $field->name;\n\t\t\t\t\t\t\t$key = idf_escape($field->name);\n\t\t\t\t\t\t\t$values[] = \"$key = VALUES($key)\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$suffix = ($style == \"INSERT+UPDATE\" ? \"\\nON DUPLICATE KEY UPDATE \" . implode(\", \", $values) : \"\") . \";\\n\";\n\t\t\t\t\t}\n\t\t\t\t\tif ($_POST[\"format\"] != \"sql\") {\n\t\t\t\t\t\tif ($style == \"table\") {\n\t\t\t\t\t\t\tdump_csv($keys);\n\t\t\t\t\t\t\t$style = \"INSERT\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdump_csv($row);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!$insert) {\n\t\t\t\t\t\t\t$insert = \"INSERT INTO \" . table($table) . \" (\" . implode(\", \", array_map('Adminer\\idf_escape', $keys)) . \") VALUES\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\t\tif ($generated[$key]) {\n\t\t\t\t\t\t\t\tunset($row[$key]);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$field = $fields[$key];\n\t\t\t\t\t\t\t$row[$key] = ($val !== null\n\t\t\t\t\t\t\t\t? unconvert_field($field, preg_match(number_type(), $field[\"type\"]) && !preg_match('~\\[~', $field[\"full_type\"]) && is_numeric($val) ? $val : q(($val === false ? 0 : $val)))\n\t\t\t\t\t\t\t\t: \"NULL\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$s = ($max_packet ? \"\\n\" : \" \") . \"(\" . implode(\",\\t\", $row) . \")\";\n\t\t\t\t\t\tif (!$buffer) {\n\t\t\t\t\t\t\t$buffer = $insert . $s;\n\t\t\t\t\t\t} elseif (JUSH == 'mssql'\n\t\t\t\t\t\t\t? $count % 1000 != 0 // https://learn.microsoft.com/en-us/sql/t-sql/queries/table-value-constructor-transact-sql#limitations-and-restrictions\n\t\t\t\t\t\t\t: strlen($buffer) + 4 + strlen($s) + strlen($suffix) < $max_packet // 4 - length specification\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t$buffer .= \",$s\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\techo $buffer . $suffix;\n\t\t\t\t\t\t\t$buffer = $insert . $s;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$count++;\n\t\t\t\t}\n\t\t\t\tif ($buffer) {\n\t\t\t\t\techo $buffer . $suffix;\n\t\t\t\t}\n\t\t\t} elseif ($_POST[\"format\"] == \"sql\") {\n\t\t\t\techo \"-- \" . str_replace(\"\\n\", \" \", connection()->error) . \"\\n\";\n\t\t\t}\n\t\t\tif ($identity_insert) {\n\t\t\t\techo \"SET IDENTITY_INSERT \" . table($table) . \" OFF;\\n\";\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Set export filename\n\t* @return string filename without extension\n\t*/\n\tfunction dumpFilename(string $identifier): string {\n\t\treturn friendly_url($identifier != \"\" ? $identifier : (SERVER ?: \"localhost\"));\n\t}\n\n\t/** Send headers for export\n\t* @return string extension\n\t*/\n\tfunction dumpHeaders(string $identifier, bool $multi_table = false): string {\n\t\t$output = $_POST[\"output\"];\n\t\t$ext = (preg_match('~sql~', $_POST[\"format\"]) ? \"sql\" : ($multi_table ? \"tar\" : \"csv\")); // multiple CSV packed to TAR\n\t\theader(\"Content-Type: \" .\n\t\t\t($output == \"gz\" ? \"application/x-gzip\" :\n\t\t\t($ext == \"tar\" ? \"application/x-tar\" :\n\t\t\t($ext == \"sql\" || $output != \"file\" ? \"text/plain\" : \"text/csv\") . \"; charset=utf-8\"\n\t\t)));\n\t\tif ($output == \"gz\") {\n\t\t\tob_start(function ($string) {\n\t\t\t\t// ob_start() callback receives an optional parameter $phase but gzencode() accepts optional parameter $level\n\t\t\t\treturn gzencode($string);\n\t\t\t}, 1e6);\n\t\t}\n\t\treturn $ext;\n\t}\n\n\t/** Print text after export\n\t* @return void prints data\n\t*/\n\tfunction dumpFooter(): void {\n\t\tif ($_POST[\"format\"] == \"sql\") {\n\t\t\techo \"-- \" . gmdate(\"Y-m-d H:i:s e\") . \"\\n\";\n\t\t}\n\t}\n\n\t/** Set the path of the file for webserver load\n\t* @return string path of the sql dump file\n\t*/\n\tfunction importServerPath(): string {\n\t\treturn \"adminer.sql\";\n\t}\n\n\t/** Print homepage\n\t* @return bool whether to print default homepage\n\t*/\n\tfunction homepage(): bool {\n\t\techo '<p class=\"links\">' . ($_GET[\"ns\"] == \"\" && support(\"database\") ? '<a href=\"' . h(ME) . 'database=\">' . lang('Alter database') . \"</a>\\n\" : \"\");\n\t\techo (support(\"scheme\") ? \"<a href='\" . h(ME) . \"scheme='>\" . ($_GET[\"ns\"] != \"\" ? lang('Alter schema') : lang('Create schema')) . \"</a>\\n\" : \"\");\n\t\techo ($_GET[\"ns\"] !== \"\" ? '<a href=\"' . h(ME) . 'schema=\">' . lang('Database schema') . \"</a>\\n\" : \"\");\n\t\techo (support(\"privileges\") ? \"<a href='\" . h(ME) . \"privileges='>\" . lang('Privileges') . \"</a>\\n\" : \"\");\n\t\tif ($_GET[\"ns\"] !== \"\") {\n\t\t\techo (support(\"routine\") ? \"<a href='#routines'>\" . lang('Routines') . \"</a>\\n\" : \"\");\n\t\t\techo (support(\"sequence\") ? \"<a href='#sequences'>\" . lang('Sequences') . \"</a>\\n\" : \"\");\n\t\t\techo (support(\"type\") ? \"<a href='#user-types'>\" . lang('User types') . \"</a>\\n\" : \"\");\n\t\t\techo (support(\"event\") ? \"<a href='#events'>\" . lang('Events') . \"</a>\\n\" : \"\");\n\t\t}\n\t\treturn true;\n\t}\n\n\t/** Print navigation after Adminer title\n\t* @param string $missing can be \"auth\" if there is no database connection, \"db\" if there is no database selected, \"ns\" with invalid schema\n\t*/\n\tfunction navigation(string $missing): void {\n\t\techo \"<h1>\" . adminer()->name() . \" <span class='version'>\" . VERSION;\n\t\t$new_version = $_COOKIE[\"adminer_version\"];\n\t\techo \" <a href='https://www.adminer.org/#download'\" . target_blank() . \" id='version'>\" . (version_compare(VERSION, $new_version) < 0 ? h($new_version) : \"\") . \"</a>\";\n\t\techo \"</span></h1>\\n\";\n\t\t// this is matched by compile.php\n\t\tswitch_lang();\n\t\tif ($missing == \"auth\") {\n\t\t\t$output = \"\";\n\t\t\tforeach ((array) $_SESSION[\"pwds\"] as $vendor => $servers) {\n\t\t\t\tforeach ($servers as $server => $usernames) {\n\t\t\t\t\t$name = h(get_setting(\"vendor-$vendor-$server\") ?: get_driver($vendor));\n\t\t\t\t\tforeach ($usernames as $username => $password) {\n\t\t\t\t\t\tif ($password !== null) {\n\t\t\t\t\t\t\t$dbs = $_SESSION[\"db\"][$vendor][$server][$username];\n\t\t\t\t\t\t\tforeach (($dbs ? array_keys($dbs) : array(\"\")) as $db) {\n\t\t\t\t\t\t\t\t$output .= \"<li><a href='\" . h(auth_url($vendor, $server, $username, $db)) . \"'>($name) \" . h(\"$username@\" . ($server != \"\" ? adminer()->serverName($server) : \"\") . ($db != \"\" ? \" - $db\" : \"\")) . \"</a>\\n\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($output) {\n\t\t\t\techo \"<ul id='logins'>\\n$output</ul>\\n\" . script(\"mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});\");\n\t\t\t}\n\t\t} else {\n\t\t\t$tables = array();\n\t\t\tif ($_GET[\"ns\"] !== \"\" && !$missing && DB != \"\") {\n\t\t\t\tconnection()->select_db(DB);\n\t\t\t\t$tables = table_status('', true);\n\t\t\t}\n\t\t\tadminer()->syntaxHighlighting($tables);\n\t\t\tadminer()->databasesPrint($missing);\n\t\t\t$actions = array();\n\t\t\tif (DB == \"\" || !$missing) {\n\t\t\t\tif (support(\"sql\")) {\n\t\t\t\t\t$actions[] = \"<a href='\" . h(ME) . \"sql='\" . bold(isset($_GET[\"sql\"]) && !isset($_GET[\"import\"])) . \">\" . lang('SQL command') . \"</a>\";\n\t\t\t\t\t$actions[] = \"<a href='\" . h(ME) . \"import='\" . bold(isset($_GET[\"import\"])) . \">\" . lang('Import') . \"</a>\";\n\t\t\t\t}\n\t\t\t\t$actions[] = \"<a href='\" . h(ME) . \"dump=\" . urlencode(isset($_GET[\"table\"]) ? $_GET[\"table\"] : $_GET[\"select\"]) . \"' id='dump'\" . bold(isset($_GET[\"dump\"])) . \">\" . lang('Export') . \"</a>\";\n\t\t\t}\n\t\t\t$in_db = $_GET[\"ns\"] !== \"\" && !$missing && DB != \"\";\n\t\t\tif ($in_db && function_exists('Adminer\\alter_table')) {\n\t\t\t\t$actions[] = '<a href=\"' . h(ME) . 'create=\"' . bold($_GET[\"create\"] === \"\") . \">\" . lang('Create table') . \"</a>\";\n\t\t\t}\n\t\t\techo ($actions ? \"<p class='links'>\\n\" . implode(\"\\n\", $actions) . \"\\n\" : \"\");\n\t\t\tif ($in_db) {\n\t\t\t\tif ($tables) {\n\t\t\t\t\tadminer()->tablesPrint($tables);\n\t\t\t\t} else {\n\t\t\t\t\techo \"<p class='message'>\" . lang('No tables.') . \"</p>\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Set up syntax highlight for code and <textarea>\n\t* @param TableStatus[] $tables\n\t*/\n\tfunction syntaxHighlighting(array $tables): void {\n\t\t// this is matched by compile.php\n\t\techo script_src(\"../externals/jush/modules/jush.js\", true);\n\t\techo script_src(\"../externals/jush/modules/jush-autocomplete-sql.js\", true);\n\t\techo script_src(\"../externals/jush/modules/jush-textarea.js\", true);\n\t\techo script_src(\"../externals/jush/modules/jush-txt.js\", true);\n\t\techo script_src(\"../externals/jush/modules/jush-js.js\", true);\n\t\tif (support(\"sql\")) {\n\t\t\techo script_src(\"../externals/jush/modules/jush-\" . JUSH . \".js\", true);\n\t\t\techo \"<script\" . nonce() . \">\\n\";\n\t\t\tif ($tables) {\n\t\t\t\t$links = array();\n\t\t\t\tforeach ($tables as $table => $type) {\n\t\t\t\t\t$links[] = preg_quote($table, '/');\n\t\t\t\t}\n\t\t\t\techo \"var jushLinks = { \" . JUSH . \":\";\n\t\t\t\tjson_row(js_escape(ME) . (support(\"table\") ? \"table\" : \"select\") . '=$&', '/\\b(' . implode('|', $links) . ')\\b/g', false);\n\t\t\t\tif (support('routine')) {\n\t\t\t\t\tforeach (routines() as $row) {\n\t\t\t\t\t\tjson_row(js_escape(ME) . 'function=' . urlencode($row[\"SPECIFIC_NAME\"]) . '&name=$&', '/\\b' . preg_quote($row[\"ROUTINE_NAME\"], '/') . '(?=[\"`]?\\()/g', false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tjson_row('');\n\t\t\t\techo \"};\\n\";\n\t\t\t\tforeach (array(\"bac\", \"bra\", \"sqlite_quo\", \"mssql_bra\") as $val) {\n\t\t\t\t\techo \"jushLinks.$val = jushLinks.\" . JUSH . \";\\n\";\n\t\t\t\t}\n\t\t\t\tif (isset($_GET[\"sql\"]) || isset($_GET[\"trigger\"]) || isset($_GET[\"check\"])) {\n\t\t\t\t\t$tablesColumns = array_fill_keys(array_keys($tables), array());\n\t\t\t\t\tforeach (driver()->allFields() as $table => $fields) {\n\t\t\t\t\t\tforeach ($fields as $field) {\n\t\t\t\t\t\t\t$tablesColumns[$table][] = $field[\"field\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\techo \"addEventListener('DOMContentLoaded', () => { autocompleter = jush.autocompleteSql('\" . idf_escape(\"\") . \"', \" . json_encode($tablesColumns) . \"); });\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t\techo \"</script>\\n\";\n\t\t}\n\t\techo script(\"syntaxHighlighting('\" . preg_replace('~^(\\d\\.?\\d).*~s', '\\1', connection()->server_info) . \"', '\" . connection()->flavor . \"');\");\n\t}\n\n\t/** Print databases list in menu */\n\tfunction databasesPrint(string $missing): void {\n\t\t$databases = adminer()->databases();\n\t\tif (DB && $databases && !in_array(DB, $databases)) {\n\t\t\tarray_unshift($databases, DB);\n\t\t}\n\t\techo \"<form action=''>\\n<p id='dbs'>\\n\";\n\t\thidden_fields_get();\n\t\t$db_events = script(\"mixin(qsl('select'), {onmousedown: dbMouseDown, onchange: dbChange});\");\n\t\techo \"<label title='\" . lang('Database') . \"'>\" . lang('DB') . \": \" . ($databases\n\t\t\t? html_select(\"db\", array(\"\" => \"\") + $databases, DB) . $db_events\n\t\t\t: \"<input name='db' value='\" . h(DB) . \"' autocapitalize='off' size='19'>\\n\"\n\t\t) . \"</label>\";\n\t\techo \"<input type='submit' value='\" . lang('Use') . \"'\" . ($databases ? \" class='hidden'\" : \"\") . \">\\n\";\n\t\tif (support(\"scheme\")) {\n\t\t\tif ($missing != \"db\" && DB != \"\" && connection()->select_db(DB)) {\n\t\t\t\techo \"<br><label>\" . lang('Schema') . \": \" . html_select(\"ns\", array(\"\" => \"\") + adminer()->schemas(), $_GET[\"ns\"]) . \"$db_events</label>\";\n\t\t\t\tif ($_GET[\"ns\"] != \"\") {\n\t\t\t\t\tset_schema($_GET[\"ns\"]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tforeach (array(\"import\", \"sql\", \"schema\", \"dump\", \"privileges\") as $val) {\n\t\t\tif (isset($_GET[$val])) {\n\t\t\t\techo input_hidden($val);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\techo \"</p></form>\\n\";\n\t}\n\n\t/** Print table list in menu\n\t* @param TableStatus[] $tables\n\t*/\n\tfunction tablesPrint(array $tables): void {\n\t\techo \"<ul id='tables'>\" . script(\"mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});\");\n\t\tforeach ($tables as $table => $status) {\n\t\t\t$table = \"$table\"; // do not highlight \"0\" as active everywhere\n\t\t\t$name = adminer()->tableName($status);\n\t\t\tif ($name != \"\" && !$status[\"partition\"]) {\n\t\t\t\techo '<li><a href=\"' . h(ME) . 'select=' . urlencode($table) . '\"'\n\t\t\t\t\t. bold($_GET[\"select\"] == $table || $_GET[\"edit\"] == $table, \"select\")\n\t\t\t\t\t. \" title='\" . lang('Select data') . \"'>\" . lang('select') . \"</a> \"\n\t\t\t\t;\n\t\t\t\techo (support(\"table\") || support(\"indexes\")\n\t\t\t\t\t? '<a href=\"' . h(ME) . 'table=' . urlencode($table) . '\"'\n\t\t\t\t\t\t. bold(in_array($table, array($_GET[\"table\"], $_GET[\"create\"], $_GET[\"indexes\"], $_GET[\"foreign\"], $_GET[\"trigger\"], $_GET[\"check\"], $_GET[\"view\"])), (is_view($status) ? \"view\" : \"structure\"))\n\t\t\t\t\t\t. \" title='\" . lang('Show structure') . \"'>$name</a>\"\n\t\t\t\t\t: \"<span>$name</span>\"\n\t\t\t\t) . \"\\n\";\n\t\t\t}\n\t\t}\n\t\techo \"</ul>\\n\";\n\t}\n\n\t/** Get server variables\n\t* @return list<string[]> [[$name, $value]]\n\t*/\n\tfunction showVariables(): array {\n\t\treturn show_variables();\n\t}\n\n\t/** Get status variables\n\t* @return list<string[]> [[$name, $value]]\n\t*/\n\tfunction showStatus(): array {\n\t\treturn show_status();\n\t}\n\n\t/** Get process list\n\t* @return list<string[]> [$row]\n\t*/\n\tfunction processList(): array {\n\t\treturn process_list();\n\t}\n\n\t/** Kill a process\n\t* @param numeric-string $id\n\t* @return Result|bool\n\t*/\n\tfunction killProcess(string $id) {\n\t\treturn kill_process($id);\n\t}\n}\n"
  },
  {
    "path": "adminer/include/auth.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$permanent = array();\nif ($_COOKIE[\"adminer_permanent\"]) {\n\tforeach (explode(\" \", $_COOKIE[\"adminer_permanent\"]) as $val) {\n\t\tlist($key) = explode(\":\", $val);\n\t\t$permanent[$key] = $val;\n\t}\n}\n\nfunction add_invalid_login(): void {\n\t$base = get_temp_dir() . \"/adminer.invalid\";\n\t// adminer.invalid may not be writable by us, try the files with random suffixes\n\tforeach (glob(\"$base*\") ?: array($base) as $filename) {\n\t\t$fp = file_open_lock($filename);\n\t\tif ($fp) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!$fp) {\n\t\t$fp = file_open_lock(\"$base-\" . rand_string());\n\t}\n\tif (!$fp) {\n\t\treturn;\n\t}\n\t$invalids = unserialize(stream_get_contents($fp));\n\t$time = time();\n\tif ($invalids) {\n\t\tforeach ($invalids as $ip => $val) {\n\t\t\tif ($val[0] < $time) {\n\t\t\t\tunset($invalids[$ip]);\n\t\t\t}\n\t\t}\n\t}\n\t$invalid = &$invalids[adminer()->bruteForceKey()];\n\tif (!$invalid) {\n\t\t$invalid = array($time + 30*60, 0); // active for 30 minutes\n\t}\n\t$invalid[1]++;\n\tfile_write_unlock($fp, serialize($invalids));\n}\n\n/** @param string[] $permanent */\nfunction check_invalid_login(array &$permanent): void {\n\t$invalids = array();\n\tforeach (glob(get_temp_dir() . \"/adminer.invalid*\") as $filename) {\n\t\t$fp = file_open_lock($filename);\n\t\tif ($fp) {\n\t\t\t$invalids = unserialize(stream_get_contents($fp));\n\t\t\tfile_unlock($fp);\n\t\t\tbreak;\n\t\t}\n\t}\n\t/** @var array{int, int} */\n\t$invalid = idx($invalids, adminer()->bruteForceKey(), array());\n\t$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts\n\tif ($next_attempt > 0) { //! do the same with permanent login\n\t\tauth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)), $permanent);\n\t}\n}\n\n$auth = $_POST[\"auth\"];\nif ($auth) {\n\tsession_regenerate_id(); // defense against session fixation\n\t$vendor = $auth[\"driver\"];\n\t$server = $auth[\"server\"];\n\t$username = $auth[\"username\"];\n\t$password = (string) $auth[\"password\"];\n\t$db = $auth[\"db\"];\n\tset_password($vendor, $server, $username, $password);\n\t$_SESSION[\"db\"][$vendor][$server][$username][$db] = true;\n\tif ($auth[\"permanent\"]) {\n\t\t$key = implode(\"-\", array_map('base64_encode', array($vendor, $server, $username, $db)));\n\t\t$private = adminer()->permanentLogin(true);\n\t\t$permanent[$key] = \"$key:\" . base64_encode($private ? encrypt_string($password, $private) : \"\");\n\t\tcookie(\"adminer_permanent\", implode(\" \", $permanent));\n\t}\n\tif (\n\t\tcount($_POST) == 1 // 1 - auth\n\t\t|| DRIVER != $vendor\n\t\t|| SERVER != $server\n\t\t|| $_GET[\"username\"] !== $username // \"0\" == \"00\"\n\t\t|| DB != $db\n\t) {\n\t\tredirect(auth_url($vendor, $server, $username, $db));\n\t}\n\n} elseif ($_POST[\"logout\"] && (!$_SESSION[\"token\"] || verify_token())) {\n\tforeach (array(\"pwds\", \"db\", \"dbs\", \"queries\") as $key) {\n\t\tset_session($key, null);\n\t}\n\tunset_permanent($permanent);\n\tredirect(substr(preg_replace('~\\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.'));\n\n} elseif ($permanent && !$_SESSION[\"pwds\"]) {\n\tsession_regenerate_id();\n\t$private = adminer()->permanentLogin();\n\tforeach ($permanent as $key => $val) {\n\t\tlist(, $cipher) = explode(\":\", $val);\n\t\tlist($vendor, $server, $username, $db) = array_map('base64_decode', explode(\"-\", $key));\n\t\tset_password($vendor, $server, $username, decrypt_string(base64_decode($cipher), $private));\n\t\t$_SESSION[\"db\"][$vendor][$server][$username][$db] = true;\n\t}\n}\n\n/** Remove credentials from permanent login\n* @param string[] $permanent\n*/\nfunction unset_permanent(array &$permanent): void {\n\tforeach ($permanent as $key => $val) {\n\t\tlist($vendor, $server, $username, $db) = array_map('base64_decode', explode(\"-\", $key));\n\t\tif ($vendor == DRIVER && $server == SERVER && $username == $_GET[\"username\"] && $db == DB) {\n\t\t\tunset($permanent[$key]);\n\t\t}\n\t}\n\tcookie(\"adminer_permanent\", implode(\" \", $permanent));\n}\n\n/** Render an error message and a login form\n* @param string $error plain text\n* @param string[] $permanent\n* @return never\n*/\nfunction auth_error(string $error, array &$permanent) {\n\t$session_name = session_name();\n\tif (isset($_GET[\"username\"])) {\n\t\theader(\"HTTP/1.1 403 Forbidden\"); // 401 requires sending WWW-Authenticate header\n\t\tif (($_COOKIE[$session_name] || $_GET[$session_name]) && !$_SESSION[\"token\"]) {\n\t\t\t$error = lang('Session expired, please login again.');\n\t\t} else {\n\t\t\trestart_session();\n\t\t\tadd_invalid_login();\n\t\t\t$password = get_password();\n\t\t\tif ($password !== null) {\n\t\t\t\tif ($password === false) {\n\t\t\t\t\t$error .= ($error ? '<br>' : '') . lang('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>');\n\t\t\t\t}\n\t\t\t\tset_password(DRIVER, SERVER, $_GET[\"username\"], null);\n\t\t\t}\n\t\t\tunset_permanent($permanent);\n\t\t}\n\t}\n\tif (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool(\"session.use_only_cookies\")) {\n\t\t$error = lang('Session support must be enabled.');\n\t}\n\t$params = session_get_cookie_params();\n\tcookie(\"adminer_key\", ($_COOKIE[\"adminer_key\"] ?: rand_string()), $params[\"lifetime\"]);\n\tif (!$_SESSION[\"token\"]) {\n\t\t$_SESSION[\"token\"] = rand(1, 1e6); // this is for next attempt\n\t}\n\tpage_header(lang('Login'), $error, null);\n\techo \"<form action='' method='post'>\\n\";\n\techo \"<div>\";\n\tif (hidden_fields($_POST, array(\"auth\"))) { // expired session\n\t\techo \"<p class='message'>\" . lang('The action will be performed after successful login with the same credentials.') . \"\\n\";\n\t}\n\techo \"</div>\\n\";\n\tadminer()->loginForm();\n\techo \"</form>\\n\";\n\tpage_footer(\"auth\");\n\texit;\n}\n\nif (isset($_GET[\"username\"]) && !class_exists('Adminer\\Db')) {\n\tunset($_SESSION[\"pwds\"][DRIVER]);\n\tunset_permanent($permanent);\n\tpage_header(lang('No extension'), lang('None of the supported PHP extensions (%s) are available.', implode(\", \", Driver::$extensions)), false);\n\tpage_footer(\"auth\");\n\texit;\n}\n\n$connection = '';\nif (isset($_GET[\"username\"]) && is_string(get_password())) {\n\tlist(, $port) = host_port(SERVER);\n\tif (preg_match('~^\\s*([-+]?\\d+)~', $port, $match) && ($match[1] < 1024 || $match[1] > 65535)) { // is_numeric('80#') would still connect to port 80\n\t\tauth_error(lang('Connecting to privileged ports is not allowed.'), $permanent);\n\t}\n\tcheck_invalid_login($permanent);\n\t$credentials = adminer()->credentials();\n\t$connection = Driver::connect($credentials[0], $credentials[1], $credentials[2]);\n\tif (is_object($connection)) {\n\t\tDb::$instance = $connection;\n\t\tDriver::$instance = new Driver($connection);\n\t\tif ($connection->flavor) {\n\t\t\tsave_settings(array(\"vendor-\" . DRIVER . \"-\" . SERVER => get_driver(DRIVER)));\n\t\t}\n\t}\n}\n\n$login = null;\nif (!is_object($connection) || ($login = adminer()->login($_GET[\"username\"], get_password())) !== true) {\n\t$error = (is_string($connection) ? nl_br(h($connection)) : (is_string($login) ? $login : lang('Invalid credentials.')))\n\t\t. (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : '');\n\tauth_error($error, $permanent);\n}\n\nif ($_POST[\"logout\"] && $_SESSION[\"token\"] && !verify_token()) {\n\tpage_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));\n\tpage_footer(\"db\");\n\texit;\n}\n\nif (!$_SESSION[\"token\"]) {\n\t$_SESSION[\"token\"] = rand(1, 1e6); // defense against cross-site request forgery\n}\nstop_session(true);\nif ($auth && $_POST[\"token\"]) {\n\t$_POST[\"token\"] = get_token(); // reset token after explicit login\n}\n\n$error = ''; ///< @var string\nif ($_POST) {\n\tif (!verify_token()) {\n\t\t$ini = \"max_input_vars\";\n\t\t$max_vars = ini_get($ini);\n\t\tif (extension_loaded(\"suhosin\")) {\n\t\t\tforeach (array(\"suhosin.request.max_vars\", \"suhosin.post.max_vars\") as $key) {\n\t\t\t\t$val = ini_get($key);\n\t\t\t\tif ($val && (!$max_vars || $val < $max_vars)) {\n\t\t\t\t\t$ini = $key;\n\t\t\t\t\t$max_vars = $val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t$error = (!$_POST[\"token\"] && $max_vars\n\t\t\t? lang('Maximum number of allowed fields exceeded. Please increase %s.', \"'$ini'\")\n\t\t\t: lang('Invalid CSRF token. Send the form again.') . ' ' . lang('If you did not send this request from Adminer then close this page.')\n\t\t);\n\t}\n\n} elseif ($_SERVER[\"REQUEST_METHOD\"] == \"POST\") {\n\t// posted form with no data means that post_max_size exceeded because Adminer always sends token at least\n\t$error = lang('Too big POST data. Reduce the data or increase the %s configuration directive.', \"'post_max_size'\");\n\tif (isset($_GET[\"sql\"])) {\n\t\t$error .= ' ' . lang('You can upload a big SQL file via FTP and import it from server.');\n\t}\n}\n"
  },
  {
    "path": "adminer/include/bootstrap.inc.php",
    "content": "<?php\nnamespace Adminer;\n\ninclude \"../adminer/include/version.inc.php\";\ninclude \"../adminer/include/errors.inc.php\";\n// this is matched by compile.php\ninclude \"../adminer/include/coverage.inc.php\";\n\n// disable filter.default\n$filter = !preg_match('~^(unsafe_raw)?$~', ini_get(\"filter.default\"));\nif ($filter || ini_get(\"filter.default_flags\")) {\n\tforeach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $val) {\n\t\t$unsafe = filter_input_array(constant(\"INPUT$val\"), FILTER_UNSAFE_RAW);\n\t\tif ($unsafe) {\n\t\t\t$$val = $unsafe;\n\t\t}\n\t}\n}\n\nif (function_exists(\"mb_internal_encoding\")) {\n\tmb_internal_encoding(\"8bit\");\n}\n\ninclude \"../adminer/include/functions.inc.php\";\ninclude \"../adminer/include/html.inc.php\";\n\n// used only in compiled file\nif (isset($_GET[\"file\"])) {\n\tinclude \"../adminer/file.inc.php\";\n}\n\n// Adminer doesn't use any global variables; they used to be declared here\n\nif (!$_SERVER[\"REQUEST_URI\"]) { // IIS 5 compatibility\n\t$_SERVER[\"REQUEST_URI\"] = $_SERVER[\"ORIG_PATH_INFO\"];\n}\nif (!strpos($_SERVER[\"REQUEST_URI\"], '?') && $_SERVER[\"QUERY_STRING\"] != \"\") { // IIS 7 compatibility\n\t$_SERVER[\"REQUEST_URI\"] .= \"?$_SERVER[QUERY_STRING]\";\n}\nif ($_SERVER[\"HTTP_X_FORWARDED_PREFIX\"]) {\n\t$_SERVER[\"REQUEST_URI\"] = $_SERVER[\"HTTP_X_FORWARDED_PREFIX\"] . $_SERVER[\"REQUEST_URI\"];\n}\ndefine('Adminer\\HTTPS', ($_SERVER[\"HTTPS\"] && strcasecmp($_SERVER[\"HTTPS\"], \"off\")) || ini_bool(\"session.cookie_secure\")); // session.cookie_secure could be set on HTTP if we are behind a reverse proxy\n\n@ini_set(\"session.use_trans_sid\", '0'); // protect links in export, @ - may be disabled\nif (!defined(\"SID\")) {\n\tsession_cache_limiter(\"\"); // to allow restarting session\n\tsession_name(\"adminer_sid\"); // use specific session name to get own namespace\n\tsession_set_cookie_params(0, preg_replace('~\\?.*~', '', $_SERVER[\"REQUEST_URI\"]), \"\", HTTPS, true); // ini_set() may be disabled\n\tsession_start();\n}\n\n// disable magic quotes to be able to use database escaping function\nif (function_exists(\"get_magic_quotes_gpc\") && get_magic_quotes_gpc()) {\n\t$_GET = remove_slashes($_GET, $filter);\n\t$_POST = remove_slashes($_POST, $filter);\n\t$_COOKIE = remove_slashes($_COOKIE, $filter);\n}\nif (function_exists(\"get_magic_quotes_runtime\") && get_magic_quotes_runtime()) {\n\tset_magic_quotes_runtime(false);\n}\n@set_time_limit(0); // @ - can be disabled\n@ini_set(\"precision\", '15'); // @ - can be disabled, 15 - internal PHP precision\n\ninclude \"../adminer/include/lang.inc.php\";\ninclude \"../adminer/lang/\" . LANG . \".inc.php\";\ninclude \"../adminer/include/db.inc.php\";\ninclude \"../adminer/include/pdo.inc.php\";\ninclude \"../adminer/include/driver.inc.php\";\ninclude \"../adminer/drivers/sqlite.inc.php\";\ninclude \"../adminer/drivers/pgsql.inc.php\";\ninclude \"../adminer/drivers/oracle.inc.php\";\ninclude \"../adminer/drivers/mssql.inc.php\";\ninclude \"./include/adminer.inc.php\";\ninclude \"../adminer/include/plugins.inc.php\";\ninclude \"../adminer/include/plugin.inc.php\";\n\nAdminer::$instance =\n\t(function_exists('adminer_object') ? adminer_object() :\n\t(is_dir(\"adminer-plugins\") || file_exists(\"adminer-plugins.php\") ? new Plugins(null) :\n\tnew Adminer\n));\n\n// this is matched by compile.php\ninclude \"../adminer/drivers/mysql.inc.php\"; // must be included as last driver\n\ndefine('Adminer\\JUSH', Driver::$jush);\ndefine('Adminer\\SERVER', \"\" . $_GET[DRIVER]); // read from pgsql=localhost, '' means default server\ndefine('Adminer\\DB', \"$_GET[db]\"); // for the sake of speed and size\ndefine(\n\t'Adminer\\ME',\n\tpreg_replace('~\\?.*~', '', relative_uri()) . '?'\n\t\t. (sid() ? SID . '&' : '')\n\t\t. (SERVER !== null ? DRIVER . \"=\" . urlencode(SERVER) . '&' : '')\n\t\t. ($_GET[\"ext\"] ? \"ext=\" . urlencode($_GET[\"ext\"]) . '&' : '')\n\t\t. (isset($_GET[\"username\"]) ? \"username=\" . urlencode($_GET[\"username\"]) . '&' : '')\n\t\t. (DB != \"\" ? 'db=' . urlencode(DB) . '&' . (isset($_GET[\"ns\"]) ? \"ns=\" . urlencode($_GET[\"ns\"]) . \"&\" : \"\") : '')\n);\n\ninclude \"../adminer/include/design.inc.php\";\ninclude \"../adminer/include/xxtea.inc.php\";\ninclude \"../adminer/include/auth.inc.php\";\ninclude \"./include/editing.inc.php\";\ninclude \"./include/connect.inc.php\";\n\nadminer()->afterConnect();\n"
  },
  {
    "path": "adminer/include/connect.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nif (isset($_GET[\"status\"])) {\n\t$_GET[\"variables\"] = $_GET[\"status\"];\n}\nif (isset($_GET[\"import\"])) {\n\t$_GET[\"sql\"] = $_GET[\"import\"];\n}\n\nif (\n\t!(DB != \"\"\n\t\t? connection()->select_db(DB)\n\t\t: isset($_GET[\"sql\"]) || isset($_GET[\"dump\"]) || isset($_GET[\"database\"]) || isset($_GET[\"processlist\"]) || isset($_GET[\"privileges\"]) || isset($_GET[\"user\"]) || isset($_GET[\"variables\"])\n\t\t\t|| $_GET[\"script\"] == \"connect\" || $_GET[\"script\"] == \"kill\"\n\t)\n) {\n\tif (DB != \"\" || $_GET[\"refresh\"]) {\n\t\trestart_session();\n\t\tset_session(\"dbs\", null);\n\t}\n\tif (DB != \"\") {\n\t\theader(\"HTTP/1.1 404 Not Found\");\n\t\tpage_header(lang('Database') . \": \" . h(DB), lang('Invalid database.'), true);\n\t} else {\n\t\tif ($_POST[\"db\"] && !$error) {\n\t\t\tqueries_redirect(substr(ME, 0, -1), lang('Databases have been dropped.'), drop_databases($_POST[\"db\"]));\n\t\t}\n\n\t\tpage_header(lang('Select database'), $error, false);\n\t\techo \"<p class='links'>\\n\";\n\t\tforeach (\n\t\t\tarray(\n\t\t\t\t'database' => lang('Create database'),\n\t\t\t\t'privileges' => lang('Privileges'),\n\t\t\t\t'processlist' => lang('Process list'),\n\t\t\t\t'variables' => lang('Variables'),\n\t\t\t\t'status' => lang('Status'),\n\t\t\t) as $key => $val\n\t\t) {\n\t\t\tif (support($key)) {\n\t\t\t\techo \"<a href='\" . h(ME) . \"$key='>$val</a>\\n\";\n\t\t\t}\n\t\t}\n\t\techo \"<p>\" . lang('%s version: %s through PHP extension %s', get_driver(DRIVER), \"<b>\" . h(connection()->server_info) . \"</b>\", \"<b>\" . connection()->extension . \"</b>\") . \"\\n\";\n\t\techo \"<p>\" . lang('Logged as: %s', \"<b>\" . h(logged_user()) . \"</b>\") . \"\\n\";\n\n\t\t$databases = adminer()->databases();\n\t\tif ($databases) {\n\t\t\t$scheme = support(\"scheme\");\n\t\t\t$collations = collations();\n\t\t\techo \"<form action='' method='post'>\\n\";\n\t\t\techo \"<table class='checkable odds'>\\n\";\n\t\t\techo script(\"mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});\");\n\t\t\techo \"<thead><tr>\"\n\t\t\t\t. (support(\"database\") ? \"<td>\" : \"\")\n\t\t\t\t. \"<th>\" . lang('Database') . (get_session(\"dbs\") !== null ? \" - <a href='\" . h(ME) . \"refresh=1'>\" . lang('Refresh') . \"</a>\" : \"\")\n\t\t\t\t. \"<td>\" . lang('Collation')\n\t\t\t\t. \"<td>\" . lang('Tables')\n\t\t\t\t. \"<td>\" . lang('Size') . \" - <a href='\" . h(ME) . \"dbsize=1'>\" . lang('Compute') . \"</a>\" . script(\"qsl('a').onclick = partial(ajaxSetHtml, '\" . js_escape(ME) . \"script=connect');\", \"\")\n\t\t\t\t. \"</thead>\\n\"\n\t\t\t;\n\n\t\t\t$databases = ($_GET[\"dbsize\"] ? count_tables($databases) : array_flip($databases));\n\t\t\tforeach ($databases as $db => $tables) {\n\t\t\t\t$root = h(ME) . \"db=\" . urlencode($db);\n\t\t\t\t$id = h(\"Db-\" . $db);\n\t\t\t\techo \"<tr>\" . (support(\"database\") ? \"<td>\" . checkbox(\"db[]\", $db, in_array($db, (array) $_POST[\"db\"]), \"\", \"\", \"\", $id) : \"\");\n\t\t\t\techo \"<th><a href='$root' id='$id'>\" . h($db) . \"</a>\";\n\t\t\t\t$collation = h(db_collation($db, $collations));\n\t\t\t\techo \"<td>\" . (support(\"database\") ? \"<a href='$root\" . ($scheme ? \"&amp;ns=\" : \"\") . \"&amp;database=' title='\" . lang('Alter database') . \"'>$collation</a>\" : $collation);\n\t\t\t\techo \"<td align='right'><a href='$root&amp;schema=' id='tables-\" . h($db) . \"' title='\" . lang('Database schema') . \"'>\" . ($_GET[\"dbsize\"] ? $tables : \"?\") . \"</a>\";\n\t\t\t\techo \"<td align='right' id='size-\" . h($db) . \"'>\" . ($_GET[\"dbsize\"] ? db_size($db) : \"?\");\n\t\t\t\techo \"\\n\";\n\t\t\t}\n\n\t\t\techo \"</table>\\n\";\n\t\t\techo (support(\"database\")\n\t\t\t\t? \"<div class='footer'><div>\\n\"\n\t\t\t\t\t. \"<fieldset><legend>\" . lang('Selected') . \" <span id='selected'></span></legend><div>\\n\"\n\t\t\t\t\t. input_hidden(\"all\") . script(\"qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^db/)); };\") // used by trCheck()\n\t\t\t\t\t. \"<input type='submit' name='drop' value='\" . lang('Drop') . \"'>\" . confirm() . \"\\n\"\n\t\t\t\t\t. \"</div></fieldset>\\n\"\n\t\t\t\t\t. \"</div></div>\\n\"\n\t\t\t\t: \"\"\n\t\t\t);\n\t\t\techo input_token();\n\t\t\techo \"</form>\\n\";\n\t\t\techo script(\"tableCheck();\");\n\t\t}\n\n\t\tif (!empty(adminer()->plugins)) {\n\t\t\techo \"<div class='plugins'>\\n\";\n\t\t\techo \"<h3>\" . lang('Loaded plugins') . \"</h3>\\n<ul>\\n\";\n\t\t\tforeach (adminer()->plugins as $plugin) {\n\t\t\t\t$description = (method_exists($plugin, 'description') ? $plugin->description() : \"\");\n\t\t\t\tif (!$description) {\n\t\t\t\t\t$reflection = new \\ReflectionObject($plugin);\n\t\t\t\t\tif (preg_match('~^/[\\s*]+(.+)~', $reflection->getDocComment(), $match)) {\n\t\t\t\t\t\t$description = $match[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$screenshot = (method_exists($plugin, 'screenshot') ? $plugin->screenshot() : \"\");\n\t\t\t\techo \"<li><b>\" . get_class($plugin) . \"</b>\"\n\t\t\t\t\t. h($description ? \": $description\" : \"\")\n\t\t\t\t\t. ($screenshot ? \" (<a href='\" . h($screenshot) . \"'\" . target_blank() . \">\" . lang('screenshot') . \"</a>)\" : \"\")\n\t\t\t\t\t. \"\\n\"\n\t\t\t\t;\n\t\t\t}\n\t\t\techo \"</ul>\\n\";\n\t\t\tadminer()->pluginsLinks();\n\t\t\techo \"</div>\\n\";\n\t\t}\n\t}\n\n\tpage_footer(\"db\");\n\texit;\n}\n\nif (support(\"scheme\")) {\n\tif (DB != \"\" && $_GET[\"ns\"] !== \"\") {\n\t\tif (!isset($_GET[\"ns\"])) {\n\t\t\tredirect(preg_replace('~ns=[^&]*&~', '', ME) . \"ns=\" . get_schema());\n\t\t}\n\t\tif (!set_schema($_GET[\"ns\"])) {\n\t\t\theader(\"HTTP/1.1 404 Not Found\");\n\t\t\tpage_header(lang('Schema') . \": \" . h($_GET[\"ns\"]), lang('Invalid schema.'), true);\n\t\t\tpage_footer(\"ns\");\n\t\t\texit;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "adminer/include/coverage.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// coverage is used in tests and removed in compilation\nif (extension_loaded(\"xdebug\") && file_exists(sys_get_temp_dir() . \"/adminer.coverage\")) {\n\tfunction save_coverage(): void {\n\t\t$coverage_filename = sys_get_temp_dir() . \"/adminer.coverage\";\n\t\t$coverage = unserialize(file_get_contents($coverage_filename));\n\t\tforeach (xdebug_get_code_coverage() as $filename => $lines) {\n\t\t\tforeach ($lines as $l => $val) {\n\t\t\t\tif (!idx($coverage[$filename], $l) || $val > 0) {\n\t\t\t\t\t$coverage[$filename][$l] = $val;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfile_put_contents($coverage_filename, serialize($coverage));\n\t\t}\n\t}\n\txdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);\n\tregister_shutdown_function('Adminer\\save_coverage');\n}\n"
  },
  {
    "path": "adminer/include/db.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// this could be interface when \"Db extends \\mysqli\" can have compatible type declarations (PHP 7)\n// interfaces can include properties only since PHP 8.4\nabstract class SqlDb {\n\t/** @var Db */ static $instance;\n\n\t/** @var string */ public $extension; // extension name\n\t/** @var string */ public $flavor = ''; // different vendor with the same API, e.g. MariaDB; usually stays empty\n\t/** @var string */ public $server_info; // server version\n\t/** @var int */ public $affected_rows = 0; // number of affected rows\n\t/** @var string */ public $info = ''; // see https://php.net/mysql_info\n\t/** @var int */ public $errno = 0; // last error code\n\t/** @var string */ public $error = ''; // last error message\n\t/** @var Result|bool */ protected $multi; // used for multiquery\n\n\t/** Connect to server\n\t* @return string error message\n\t*/\n\tabstract function attach(string $server, string $username, string $password): string;\n\n\t/** Quote string to use in SQL\n\t* @return string escaped string enclosed in '\n\t*/\n\tabstract function quote(string $string): string;\n\n\t/** Select database\n\t* @return bool boolish\n\t*/\n\tabstract function select_db(string $database);\n\n\t/** Send query\n\t* @return Result|bool\n\t*/\n\tabstract function query(string $query, bool $unbuffered = false);\n\n\t/** Send query with more resultsets\n\t* @return Result|bool\n\t*/\n\tfunction multi_query(string $query) {\n\t\treturn $this->multi = $this->query($query);\n\t}\n\n\t/** Get current resultset\n\t* @return Result|bool\n\t*/\n\tfunction store_result() {\n\t\treturn $this->multi;\n\t}\n\n\t/** Fetch next resultset */\n\tfunction next_result(): bool {\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "adminer/include/design.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n/** Print HTML header\n* @param string $title used in title, breadcrumb and heading, should be HTML escaped\n* @param mixed $breadcrumb [\"key\" => \"link\", \"key2\" => [\"link\", \"desc\"]], null for nothing, false for driver only, true for driver and server\n* @param string $title2 used after colon in title and heading, should be HTML escaped\n*/\nfunction page_header(string $title, string $error = \"\", $breadcrumb = array(), string $title2 = \"\"): void {\n\tpage_headers();\n\tif (is_ajax() && $error) {\n\t\tpage_messages($error);\n\t\texit;\n\t}\n\tif (!ob_get_level()) {\n\t\tob_start('ob_gzhandler', 4096);\n\t}\n\t$title_all = $title . ($title2 != \"\" ? \": $title2\" : \"\");\n\t$title_page = strip_tags($title_all . (SERVER != \"\" && SERVER != \"localhost\" ? h(\" - \" . SERVER) : \"\") . \" - \" . adminer()->name());\n\t// initial-scale=1 is the default but Chrome 134 on iOS is not able to zoom out without it\n\t?>\n<!DOCTYPE html>\n<html lang=\"<?php echo LANG; ?>\" dir=\"<?php echo lang('ltr'); ?>\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<meta name=\"robots\" content=\"noindex\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title><?php echo $title_page; ?></title>\n<link rel=\"stylesheet\" href=\"../adminer/static/default.css\">\n<?php\n\n\t$css = adminer()->css();\n\tif (is_int(key($css))) { // legacy return value\n\t\t$css = array_fill_keys($css, 'light');\n\t}\n\t$has_light = in_array('light', $css) || in_array('', $css);\n\t$has_dark = in_array('dark', $css) || in_array('', $css);\n\t$dark = ($has_light\n\t\t? ($has_dark ? null : false) // both styles - autoswitching, only adminer.css - light\n\t\t: ($has_dark ?: null) // only adminer-dark.css - dark, neither - autoswitching\n\t);\n\t$media = \" media='(prefers-color-scheme: dark)'\";\n\tif ($dark !== false) {\n\t\techo \"<link rel='stylesheet'\" . ($dark ? \"\" : $media) . \" href='../adminer/static/dark.css'>\\n\";\n\t}\n\techo \"<meta name='color-scheme' content='\" . ($dark === null ? \"light dark\" : ($dark ? \"dark\" : \"light\")) . \"'>\\n\";\n\n\t// this is matched by compile.php\n\techo script_src(\"../adminer/static/functions.js\");\n\techo script_src(\"static/editing.js\");\n\tif (adminer()->head($dark)) {\n\t\techo \"<link rel='icon' href='data:image/gif;base64,R0lGODlhEAAQAJEAAAQCBPz+/PwCBAROZCH5BAEAAAAALAAAAAAQABAAAAI2hI+pGO1rmghihiUdvUBnZ3XBQA7f05mOak1RWXrNq5nQWHMKvuoJ37BhVEEfYxQzHjWQ5qIAADs='>\\n\";\n\t\techo \"<link rel='apple-touch-icon' href='../adminer/static/logo.png'>\\n\";\n\t}\n\tforeach ($css as $url => $mode) {\n\t\t$attrs = ($mode == 'dark' && !$dark\n\t\t\t? $media\n\t\t\t: ($mode == 'light' && $has_dark ? \" media='(prefers-color-scheme: light)'\" : \"\")\n\t\t);\n\t\techo \"<link rel='stylesheet'$attrs href='\" . h($url) . \"'>\\n\";\n\t}\n\techo \"\\n<body class='\" . lang('ltr') . \" nojs\";\n\tadminer()->bodyClass();\n\techo \"'>\\n\";\n\t$filename = get_temp_dir() . \"/adminer.version\";\n\techo script(\"mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick\"\n\t\t. (isset($_COOKIE[\"adminer_version\"]) ? \"\" : \", onload: partial(verifyVersion, '\" . VERSION . \"')\")\n\t\t. \"});\ndocument.body.classList.replace('nojs', 'js');\nconst offlineMessage = '\" . js_escape(lang('You are offline.')) . \"';\nconst thousandsSeparator = '\" . js_escape(lang(',')) . \"';\")\n\t;\n\techo \"<div id='help' class='jush-\" . JUSH . \" jsonly hidden'></div>\\n\";\n\techo script(\"mixin(qs('#help'), {onmouseover: () => { helpOpen = 1; }, onmouseout: helpMouseout});\");\n\techo \"<div id='content'>\\n\";\n\techo \"<span id='menuopen' class='jsonly'>\" . icon(\"move\", \"\", \"menu\", \"\") . \"</span>\" . script(\"qs('#menuopen').onclick = event => { qs('#foot').classList.toggle('foot'); event.stopPropagation(); }\");\n\tif ($breadcrumb !== null) {\n\t\t$link = substr(preg_replace('~\\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);\n\t\techo '<p id=\"breadcrumb\"><a href=\"' . h($link ?: \".\") . '\">' . get_driver(DRIVER) . '</a> » ';\n\t\t$link = substr(preg_replace('~\\b(db|ns)=[^&]*&~', '', ME), 0, -1);\n\t\t$server = adminer()->serverName(SERVER);\n\t\t$server = ($server != \"\" ? $server : lang('Server'));\n\t\tif ($breadcrumb === false) {\n\t\t\techo \"$server\\n\";\n\t\t} else {\n\t\t\techo \"<a href='\" . h($link) . \"' accesskey='1' title='Alt+Shift+1'>$server</a> » \";\n\t\t\tif ($_GET[\"ns\"] != \"\" || (DB != \"\" && is_array($breadcrumb))) {\n\t\t\t\techo '<a href=\"' . h($link . \"&db=\" . urlencode(DB) . (support(\"scheme\") ? \"&ns=\" : \"\")) . '\">' . h(DB) . '</a> » ';\n\t\t\t}\n\t\t\tif (is_array($breadcrumb)) {\n\t\t\t\tif ($_GET[\"ns\"] != \"\") {\n\t\t\t\t\techo '<a href=\"' . h(substr(ME, 0, -1)) . '\">' . h($_GET[\"ns\"]) . '</a> » ';\n\t\t\t\t}\n\t\t\t\tforeach ($breadcrumb as $key => $val) {\n\t\t\t\t\t$desc = (is_array($val) ? $val[1] : h($val));\n\t\t\t\t\tif ($desc != \"\") {\n\t\t\t\t\t\techo \"<a href='\" . h(ME . \"$key=\") . urlencode(is_array($val) ? $val[0] : $val) . \"'>$desc</a> » \";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\techo \"$title\\n\";\n\t\t}\n\t}\n\techo \"<h2>$title_all</h2>\\n\";\n\techo \"<div id='ajaxstatus' class='jsonly hidden'></div>\\n\";\n\trestart_session();\n\tpage_messages($error);\n\t$databases = &get_session(\"dbs\");\n\tif (DB != \"\" && $databases && !in_array(DB, $databases, true)) {\n\t\t$databases = null;\n\t}\n\tstop_session();\n\tdefine('Adminer\\PAGE_HEADER', 1);\n}\n\n/** Send HTTP headers */\nfunction page_headers(): void {\n\theader(\"Content-Type: text/html; charset=utf-8\");\n\theader(\"Cache-Control: no-cache\");\n\theader(\"X-Frame-Options: deny\"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9\n\theader(\"X-XSS-Protection: 0\"); // prevents introducing XSS in IE8 by removing safe parts of the page\n\theader(\"X-Content-Type-Options: nosniff\");\n\theader(\"Referrer-Policy: origin-when-cross-origin\");\n\tforeach (adminer()->csp(csp()) as $csp) {\n\t\t$header = array();\n\t\tforeach ($csp as $key => $val) {\n\t\t\t$header[] = \"$key $val\";\n\t\t}\n\t\theader(\"Content-Security-Policy: \" . implode(\"; \", $header));\n\t}\n\tadminer()->headers();\n}\n\n/** Get Content Security Policy headers\n* @return list<string[]> of arrays with directive name in key, allowed sources in value\n*/\nfunction csp(): array {\n\treturn array(\n\t\tarray(\n\t\t\t\"script-src\" => \"'self' 'unsafe-inline' 'nonce-\" . get_nonce() . \"' 'strict-dynamic'\", // 'self' is a fallback for browsers not supporting 'strict-dynamic', 'unsafe-inline' is a fallback for browsers not supporting 'nonce-'\n\t\t\t\"connect-src\" => \"'self' https://www.adminer.org\",\n\t\t\t\"frame-src\" => \"'none'\",\n\t\t\t\"object-src\" => \"'none'\",\n\t\t\t\"base-uri\" => \"'none'\",\n\t\t\t\"form-action\" => \"'self'\",\n\t\t),\n\t);\n}\n\n/** Get a CSP nonce\n* @return string Base64 value\n*/\nfunction get_nonce(): string {\n\tstatic $nonce;\n\tif (!$nonce) {\n\t\t$nonce = base64_encode(rand_string());\n\t}\n\treturn $nonce;\n}\n\n/** Print flash and error messages */\nfunction page_messages(string $error): void {\n\t$uri = preg_replace('~^[^?]*~', '', $_SERVER[\"REQUEST_URI\"]);\n\t$messages = idx($_SESSION[\"messages\"], $uri);\n\tif ($messages) {\n\t\techo \"<div class='message'>\" . implode(\"</div>\\n<div class='message'>\", $messages) . \"</div>\" . script(\"messagesPrint();\");\n\t\tunset($_SESSION[\"messages\"][$uri]);\n\t}\n\tif ($error) {\n\t\techo \"<div class='error'>$error</div>\\n\";\n\t}\n\tif (adminer()->error) { // separate <div>\n\t\techo \"<div class='error'>\" . adminer()->error . \"</div>\\n\";\n\t}\n}\n\n/** Print HTML footer\n* @param ''|'auth'|'db'|'ns' $missing\n*/\nfunction page_footer(string $missing = \"\"): void {\n\techo \"</div>\\n\\n<div id='foot' class='foot'>\\n<div id='menu'>\\n\";\n\tadminer()->navigation($missing);\n\techo \"</div>\\n\";\n\tif ($missing != \"auth\") {\n\t\t?>\n<form action=\"\" method=\"post\">\n<p class=\"logout\">\n<span><?php echo h($_GET[\"username\"]) . \"\\n\"; ?></span>\n<input type=\"submit\" name=\"logout\" value=\"<?php echo lang('Logout'); ?>\" id=\"logout\">\n<?php echo input_token(); ?>\n</form>\n<?php\n\t}\n\techo \"</div>\\n\\n\";\n\techo script(\"setupSubmitHighlight(document);\");\n}\n"
  },
  {
    "path": "adminer/include/driver.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n/** Add or overwrite a driver */\nfunction add_driver(string $id, string $name): void {\n\tSqlDriver::$drivers[$id] = $name;\n}\n\n/** Get driver name */\nfunction get_driver(string $id): ?string {\n\treturn SqlDriver::$drivers[$id];\n}\n\nabstract class SqlDriver {\n\t/** @var Driver */ static $instance;\n\t/** @var string[] */ static $drivers = array(); // all available drivers\n\t/** @var list<string> */ static $extensions = array(); // possible extensions in the current driver\n\t/** @var string */ static $jush; // JUSH identifier\n\n\t/** @var Db */ protected $conn;\n\t/** @var int[][] */ protected $types = array(); // [$group => [$type => $maximum_unsigned_length, ...], ...]\n\t/** @var string */ public $delimiter = \";\";\n\t/** @var string[] */ public $insertFunctions = array(); // [\"$type|$type2\" => \"$function/$function2\"] functions used in edit and insert\n\t/** @var string[] */ public $editFunctions = array(); // [\"$type|$type2\" => \"$function/$function2\"] functions used in edit only\n\t/** @var list<string> */ public $unsigned = array(); // number variants\n\t/** @var list<string> */ public $operators = array(); // operators used in select\n\t/** @var list<string> */ public $functions = array(); // functions used in select\n\t/** @var list<string> */ public $grouping = array(); // grouping functions used in select\n\t/** @var string */ public $onActions = \"RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT\"; // used in foreign_keys()\n\t/** @var list<string> */ public $partitionBy = array(); // supported partitioning types\n\t/** @var string */ public $inout = \"IN|OUT|INOUT\"; // used in routines\n\t/** @var string */ public $enumLength = \"'(?:''|[^'\\\\\\\\]|\\\\\\\\.)*'\"; // regular expression for parsing enum lengths\n\t/** @var list<string> */ public $generated = array(); // allowed types of generated columns\n\n\t/** Connect to the database\n\t* @return Db|string string for error\n\t*/\n\tstatic function connect(string $server, string $username, string $password) {\n\t\t$connection = new Db;\n\t\treturn ($connection->attach($server, $username, $password) ?: $connection);\n\t}\n\n\t/** Create object for performing database operations */\n\tfunction __construct(Db $connection) {\n\t\t$this->conn = $connection;\n\t}\n\n\t/** Get all types\n\t* @return int[] [$type => $maximum_unsigned_length, ...]\n\t*/\n\tfunction types(): array {\n\t\treturn call_user_func_array('array_merge', array_values($this->types));\n\t}\n\n\t/** Get structured types\n\t* @return list<string>[]|list<string> [$description => [$type, ...], ...]\n\t*/\n\tfunction structuredTypes(): array {\n\t\treturn array_map('array_keys', $this->types);\n\t}\n\n\t/** Get enum values\n\t* @param Field $field\n\t* @return string|void\n\t*/\n\tfunction enumLength(array $field) {\n\t}\n\n\t/** Function used to convert the value inputted by user\n\t* @param Field $field\n\t* @return string|void\n\t*/\n\tfunction unconvertFunction(array $field) {\n\t}\n\n\t/** Select data from table\n\t* @param list<string> $select result of adminer()->selectColumnsProcess()[0]\n\t* @param list<string> $where result of adminer()->selectSearchProcess()\n\t* @param list<string> $group result of adminer()->selectColumnsProcess()[1]\n\t* @param list<string> $order result of adminer()->selectOrderProcess()\n\t* @param int $limit result of adminer()->selectLimitProcess()\n\t* @param int $page index of page starting at zero\n\t* @param bool $print whether to print the query\n\t* @return Result|false\n\t*/\n\tfunction select(string $table, array $select, array $where, array $group, array $order = array(), int $limit = 1, ?int $page = 0, bool $print = false) {\n\t\t$is_group = (count($group) < count($select));\n\t\t$query = adminer()->selectQueryBuild($select, $where, $group, $order, $limit, $page);\n\t\tif (!$query) {\n\t\t\t$query = \"SELECT\" . limit(\n\t\t\t\t($_GET[\"page\"] != \"last\" && $limit && $group && $is_group && JUSH == \"sql\" ? \"SQL_CALC_FOUND_ROWS \" : \"\") . implode(\", \", $select) . \"\\nFROM \" . table($table),\n\t\t\t\t($where ? \"\\nWHERE \" . implode(\" AND \", $where) : \"\") . ($group && $is_group ? \"\\nGROUP BY \" . implode(\", \", $group) : \"\") . ($order ? \"\\nORDER BY \" . implode(\", \", $order) : \"\"),\n\t\t\t\t$limit,\n\t\t\t\t($page ? $limit * $page : 0),\n\t\t\t\t\"\\n\"\n\t\t\t);\n\t\t}\n\t\t$start = microtime(true);\n\t\t$return = $this->conn->query($query);\n\t\tif ($print) {\n\t\t\techo adminer()->selectQuery($query, $start, !$return);\n\t\t}\n\t\treturn $return;\n\t}\n\n\t/** Delete data from table\n\t* @param string $queryWhere \" WHERE ...\"\n\t* @param int $limit 0 or 1\n\t* @return Result|bool\n\t*/\n\tfunction delete(string $table, string $queryWhere, int $limit = 0) {\n\t\t$query = \"FROM \" . table($table);\n\t\treturn queries(\"DELETE\" . ($limit ? limit1($table, $query, $queryWhere) : \" $query$queryWhere\"));\n\t}\n\n\t/** Update data in table\n\t* @param string[] $set escaped columns in keys, quoted data in values\n\t* @param string $queryWhere \" WHERE ...\"\n\t* @param int $limit 0 or 1\n\t* @return Result|bool\n\t*/\n\tfunction update(string $table, array $set, string $queryWhere, int $limit = 0, string $separator = \"\\n\") {\n\t\t$values = array();\n\t\tforeach ($set as $key => $val) {\n\t\t\t$values[] = \"$key = $val\";\n\t\t}\n\t\t$query = table($table) . \" SET$separator\" . implode(\",$separator\", $values);\n\t\treturn queries(\"UPDATE\" . ($limit ? limit1($table, $query, $queryWhere, $separator) : \" $query$queryWhere\"));\n\t}\n\n\t/** Insert data into table\n\t* @param string[] $set escaped columns in keys, quoted data in values\n\t* @return Result|bool\n\t*/\n\tfunction insert(string $table, array $set) {\n\t\treturn queries(\"INSERT INTO \" . table($table) . ($set\n\t\t\t? \" (\" . implode(\", \", array_keys($set)) . \")\\nVALUES (\" . implode(\", \", $set) . \")\"\n\t\t\t: \" DEFAULT VALUES\"\n\t\t) . $this->insertReturning($table));\n\t}\n\n\t/** Get RETURNING clause for INSERT queries (PostgreSQL specific) */\n\tfunction insertReturning(string $table): string {\n\t\treturn \"\";\n\t}\n\n\t/** Insert or update data in table\n\t* @param list<string[]> $rows of arrays with escaped columns in keys and quoted data in values\n\t* @param int[] $primary column names in keys\n\t* @return Result|bool\n\t*/\n\tfunction insertUpdate(string $table, array $rows, array $primary) {\n\t\treturn false;\n\t}\n\n\t/** Begin transaction\n\t* @return Result|bool\n\t*/\n\tfunction begin() {\n\t\treturn queries(\"BEGIN\");\n\t}\n\n\t/** Commit transaction\n\t* @return Result|bool\n\t*/\n\tfunction commit() {\n\t\treturn queries(\"COMMIT\");\n\t}\n\n\t/** Rollback transaction\n\t* @return Result|bool\n\t*/\n\tfunction rollback() {\n\t\treturn queries(\"ROLLBACK\");\n\t}\n\n\t/** Return query with a timeout\n\t* @param int $timeout seconds\n\t* @return string|void null if the driver doesn't support query timeouts\n\t*/\n\tfunction slowQuery(string $query, int $timeout) {\n\t}\n\n\t/** Convert column to be searchable\n\t* @param string $idf escaped column name\n\t* @param array{op:string, val:string} $val\n\t* @param Field $field\n\t*/\n\tfunction convertSearch(string $idf, array $val, array $field): string {\n\t\treturn $idf;\n\t}\n\n\t/** Convert value returned by database to actual value\n\t* @param array{type: string} $field\n\t*/\n\tfunction value(?string $val, array $field): ?string {\n\t\treturn (method_exists($this->conn, 'value') ? $this->conn->value($val, $field) : $val);\n\t}\n\n\t/** Quote binary string */\n\tfunction quoteBinary(string $s): string {\n\t\treturn q($s);\n\t}\n\n\t/** Get warnings about the last command\n\t* @return string|void HTML\n\t*/\n\tfunction warnings() {\n\t}\n\n\t/** Get help link for table\n\t* @return string|void relative URL\n\t*/\n\tfunction tableHelp(string $name, bool $is_view = false) {\n\t}\n\n\t/** Get tables this table inherits from\n\t* @return list<array{table: string, ns: string}>\n\t*/\n\tfunction inheritsFrom(string $table): array {\n\t\treturn array();\n\t}\n\n\t/** Get inherited tables\n\t* @return list<array{table: string, ns: string}>\n\t*/\n\tfunction inheritedTables(string $table): array {\n\t\treturn array();\n\t}\n\n\t/** Get partitions info\n\t* @return Partitions\n\t*/\n\tfunction partitionsInfo(string $table): array {\n\t\treturn array();\n\t}\n\n\t/** Check if C-style escapes are supported */\n\tfunction hasCStyleEscapes(): bool {\n\t\treturn false;\n\t}\n\n\t/** Get supported engines\n\t* @return list<string>\n\t*/\n\tfunction engines(): array {\n\t\treturn array();\n\t}\n\n\t/** Check whether table supports indexes\n\t* @param TableStatus $table_status\n\t*/\n\tfunction supportsIndex(array $table_status): bool {\n\t\treturn !is_view($table_status);\n\t}\n\n\t/** Return list of supported index algorithms, first one is default\n\t * @param TableStatus $tableStatus\n\t * @return list<string>\n\t */\n\tfunction indexAlgorithms(array $tableStatus): array {\n\t\treturn array();\n\t}\n\n\t/** Get defined check constraints\n\t* @return string[] [$name => $clause]\n\t*/\n\tfunction checkConstraints(string $table): array {\n\t\t// MariaDB contains CHECK_CONSTRAINTS.TABLE_NAME, MySQL and PostrgreSQL not\n\t\treturn get_key_vals(\"SELECT c.CONSTRAINT_NAME, CHECK_CLAUSE\nFROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS c\nJOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS t ON c.CONSTRAINT_SCHEMA = t.CONSTRAINT_SCHEMA AND c.CONSTRAINT_NAME = t.CONSTRAINT_NAME\" . ($this->conn->flavor == 'maria' ? \" AND c.TABLE_NAME = t.TABLE_NAME\" : \"\") . \"\nWHERE c.CONSTRAINT_SCHEMA = \" . q($_GET[\"ns\"] != \"\" ? $_GET[\"ns\"] : DB) . \"\nAND t.TABLE_NAME = \" . q($table) . (JUSH == \"pgsql\" ? \"\nAND CHECK_CLAUSE NOT LIKE '% IS NOT NULL'\" : \"\"), $this->conn); // ignore default IS NOT NULL checks in PostrgreSQL\n\t}\n\n\t/** Get all fields in the current schema\n\t* @return array<list<array{field:string, null:bool, type:string, length:?numeric-string}>> optionally also 'primary'\n\t*/\n\tfunction allFields(): array {\n\t\t$return = array();\n\t\tif (DB != \"\") {\n\t\t\tforeach (\n\t\t\t\tget_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`\" : \"\") . \"\nFROM INFORMATION_SCHEMA.COLUMNS\nWHERE TABLE_SCHEMA = \" . q($_GET[\"ns\"] != \"\" ? $_GET[\"ns\"] : DB) . \"\nORDER BY TABLE_NAME, ORDINAL_POSITION\", $this->conn) as $row\n\t\t\t) {\n\t\t\t\t$row[\"null\"] = ($row[\"nullable\"] == \"YES\");\n\t\t\t\t$return[$row[\"tab\"]][] = $row;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n}\n"
  },
  {
    "path": "adminer/include/editing.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// This file is not used in Adminer Editor.\n\n/** Print select result\n* @param Result $result\n* @param string[] $orgtables\n* @param int|numeric-string $limit\n* @return string[] $orgtables\n*/\nfunction print_select_result($result, ?Db $connection2 = null, array $orgtables = array(), $limit = 0): array {\n\t$links = array(); // colno => orgtable - create links from these columns\n\t$indexes = array(); // orgtable => array(column => colno) - primary keys\n\t$columns = array(); // orgtable => array(column => ) - not selected columns in primary key\n\t$blobs = array(); // colno => bool - display bytes for blobs\n\t$types = array(); // colno => type - display char in <code>\n\t$return = array(); // table => orgtable - mapping to use in EXPLAIN\n\tfor ($i=0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) {\n\t\tif (!$i) {\n\t\t\techo \"<div class='scrollable'>\\n\";\n\t\t\techo \"<table class='nowrap odds'>\\n\";\n\t\t\techo \"<thead><tr>\";\n\t\t\tfor ($j=0; $j < count($row); $j++) {\n\t\t\t\t$field = $result->fetch_field();\n\t\t\t\t$name = $field->name;\n\t\t\t\t$orgtable = (isset($field->orgtable) ? $field->orgtable : \"\");\n\t\t\t\t$orgname = (isset($field->orgname) ? $field->orgname : $name);\n\t\t\t\tif ($orgtables && JUSH == \"sql\") { // MySQL EXPLAIN\n\t\t\t\t\t$links[$j] = ($name == \"table\" ? \"table=\" : ($name == \"possible_keys\" ? \"indexes=\" : null));\n\t\t\t\t} elseif ($orgtable != \"\") {\n\t\t\t\t\tif (isset($field->table)) {\n\t\t\t\t\t\t$return[$field->table] = $orgtable;\n\t\t\t\t\t}\n\t\t\t\t\tif (!isset($indexes[$orgtable])) {\n\t\t\t\t\t\t// find primary key in each table\n\t\t\t\t\t\t$indexes[$orgtable] = array();\n\t\t\t\t\t\tforeach (indexes($orgtable, $connection2) as $index) {\n\t\t\t\t\t\t\tif ($index[\"type\"] == \"PRIMARY\") {\n\t\t\t\t\t\t\t\t$indexes[$orgtable] = array_flip($index[\"columns\"]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$columns[$orgtable] = $indexes[$orgtable];\n\t\t\t\t\t}\n\t\t\t\t\tif (isset($columns[$orgtable][$orgname])) {\n\t\t\t\t\t\tunset($columns[$orgtable][$orgname]);\n\t\t\t\t\t\t$indexes[$orgtable][$orgname] = $j;\n\t\t\t\t\t\t$links[$j] = $orgtable;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($field->charsetnr == 63) { // 63 - binary\n\t\t\t\t\t$blobs[$j] = true;\n\t\t\t\t}\n\t\t\t\t$types[$j] = $field->type;\n\t\t\t\techo \"<th\" . ($orgtable != \"\" || $field->name != $orgname ? \" title='\" . h(($orgtable != \"\" ? \"$orgtable.\" : \"\") . $orgname) . \"'\" : \"\") . \">\" . h($name)\n\t\t\t\t\t. ($orgtables ? doc_link(array(\n\t\t\t\t\t\t'sql' => \"explain-output.html#explain_\" . strtolower($name),\n\t\t\t\t\t\t'mariadb' => \"explain/#the-columns-in-explain-select\",\n\t\t\t\t\t)) : \"\")\n\t\t\t\t;\n\t\t\t}\n\t\t\techo \"</thead>\\n\";\n\t\t}\n\t\techo \"<tr>\";\n\t\tforeach ($row as $key => $val) {\n\t\t\t$link = \"\";\n\t\t\tif (isset($links[$key]) && !$columns[$links[$key]]) {\n\t\t\t\tif ($orgtables && JUSH == \"sql\") { // MySQL EXPLAIN\n\t\t\t\t\t$table = $row[array_search(\"table=\", $links)];\n\t\t\t\t\t$link = ME . $links[$key] . urlencode($orgtables[$table] != \"\" ? $orgtables[$table] : $table);\n\t\t\t\t} else {\n\t\t\t\t\t$link = ME . \"edit=\" . urlencode($links[$key]);\n\t\t\t\t\tforeach ($indexes[$links[$key]] as $col => $j) {\n\t\t\t\t\t\tif ($row[$j] === null) {\n\t\t\t\t\t\t\t$link = \"\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$link .= \"&where\" . urlencode(\"[\" . bracket_escape($col) . \"]\") . \"=\" . urlencode($row[$j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$field = array(\n\t\t\t\t'type' => ($blobs[$key] ? 'blob' : ($types[$key] == 254 ? 'char' : '')),\n\t\t\t);\n\t\t\t$val = select_value($val, $link, $field, null);\n\t\t\t// https://dev.mysql.com/doc/dev/mysql-server/latest/field__types_8h.html\n\t\t\techo \"<td\" . ($types[$key] <= 9 || $types[$key] == 246 ? \" class='number'\" : \"\") . \">$val\";\n\t\t}\n\t}\n\techo ($i ? \"</table>\\n</div>\" : \"<p class='message'>\" . lang('No rows.')) . \"\\n\";\n\treturn $return;\n}\n\n/** Get referencable tables with single column primary key except self\n* @return array<string, Field> [$table_name => $field]\n*/\nfunction referencable_primary(string $self): array {\n\t$return = array(); // table_name => field\n\tforeach (table_status('', true) as $table_name => $table) {\n\t\tif ($table_name != $self && fk_support($table)) {\n\t\t\tforeach (fields($table_name) as $field) {\n\t\t\t\tif ($field[\"primary\"]) {\n\t\t\t\t\tif ($return[$table_name]) { // multi column primary key\n\t\t\t\t\t\tunset($return[$table_name]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$return[$table_name] = $field;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Print SQL <textarea> tag\n* @param string|list<array{string}> $value\n*/\nfunction textarea(string $name, $value, int $rows = 10, int $cols = 80): void {\n\techo \"<textarea name='\" . h($name) . \"' rows='$rows' cols='$cols' class='sqlarea jush-\" . JUSH . \"' spellcheck='false' wrap='off'>\";\n\tif (is_array($value)) {\n\t\tforeach ($value as $val) { // not implode() to save memory\n\t\t\techo h($val[0]) . \"\\n\\n\\n\"; // $val == array($query, $time, $elapsed)\n\t\t}\n\t} else {\n\t\techo h($value);\n\t}\n\techo \"</textarea>\";\n}\n\n/** Generate HTML <select> or <input> if $options are empty\n* @param string[] $options\n*/\nfunction select_input(string $attrs, array $options, ?string $value = \"\", string $onchange = \"\", string $placeholder = \"\"): string {\n\t$tag = ($options ? \"select\" : \"input\");\n\treturn \"<$tag$attrs\" . ($options\n\t\t? \"><option value=''>$placeholder\" . optionlist($options, $value, true) . \"</select>\"\n\t\t: \" size='10' value='\" . h($value) . \"' placeholder='$placeholder'>\"\n\t) . ($onchange ? script(\"qsl('$tag').onchange = $onchange;\", \"\") : \"\"); //! use oninput for input\n}\n\n/** Print one row in JSON object\n* @param string $key or \"\" to close the object\n* @param string|int $val\n*/\nfunction json_row(string $key, $val = null, bool $escape = true): void {\n\tstatic $first = true;\n\tif ($first) {\n\t\techo \"{\";\n\t}\n\tif ($key != \"\") {\n\t\techo ($first ? \"\" : \",\") . \"\\n\\t\\\"\" . addcslashes($key, \"\\r\\n\\t\\\"\\\\/\") . '\": ' . ($val !== null ? ($escape ? '\"' . addcslashes($val, \"\\r\\n\\\"\\\\/\") . '\"' : $val) : 'null');\n\t\t$first = false;\n\t} else {\n\t\techo \"\\n}\\n\";\n\t\t$first = true;\n\t}\n}\n\n/** Print table columns for type edit\n* @param Field $field\n* @param list<string> $collations\n* @param string[] $foreign_keys\n* @param list<string> $extra_types extra types to prepend\n*/\nfunction edit_type(string $key, array $field, array $collations, array $foreign_keys = array(), array $extra_types = array()): void {\n\t$type = $field[\"type\"];\n\techo \"<td><select name='\" . h($key) . \"[type]' class='type' aria-labelledby='label-type'>\";\n\tif ($type && !array_key_exists($type, driver()->types()) && !isset($foreign_keys[$type]) && !in_array($type, $extra_types)) {\n\t\t$extra_types[] = $type;\n\t}\n\t$structured_types = driver()->structuredTypes();\n\tif ($foreign_keys) {\n\t\t$structured_types[lang('Foreign keys')] = $foreign_keys;\n\t}\n\techo optionlist(array_merge($extra_types, $structured_types), $type);\n\techo \"</select><td>\";\n\techo \"<input name='\" . h($key) . \"[length]' value='\" . h($field[\"length\"]) . \"' size='3'\"\n\t\t. (!$field[\"length\"] && preg_match('~var(char|binary)$~', $type) ? \" class='required'\" : \"\") //! type=\"number\" with enabled JavaScript\n\t\t. \" aria-labelledby='label-length'>\";\n\techo \"<td class='options'>\";\n\techo ($collations\n\t\t? \"<input list='collations' name='\" . h($key) . \"[collation]'\" . (preg_match('~(char|text|enum|set)$~', $type) ? \"\" : \" class='hidden'\") . \" value='\" . h($field[\"collation\"]) . \"' placeholder='(\" . lang('collation') . \")'>\"\n\t\t: ''\n\t);\n\techo (driver()->unsigned ? \"<select name='\" . h($key) . \"[unsigned]'\" . (!$type || preg_match(number_type(), $type) ? \"\" : \" class='hidden'\") . '><option>' . optionlist(driver()->unsigned, $field[\"unsigned\"]) . '</select>' : '');\n\techo (isset($field['on_update']) ? \"<select name='\" . h($key) . \"[on_update]'\" . (preg_match('~timestamp|datetime~', $type) ? \"\" : \" class='hidden'\") . '>'\n\t\t. optionlist(array(\"\" => \"(\" . lang('ON UPDATE') . \")\", \"CURRENT_TIMESTAMP\"), (preg_match('~^CURRENT_TIMESTAMP~i', $field[\"on_update\"]) ? \"CURRENT_TIMESTAMP\" : $field[\"on_update\"]))\n\t\t. '</select>' : ''\n\t);\n\techo ($foreign_keys\n\t\t? \"<select name='\" . h($key) . \"[on_delete]'\" . (preg_match(\"~`~\", $type) ? \"\" : \" class='hidden'\") . \"><option value=''>(\" . lang('ON DELETE') . \")\" . optionlist(explode(\"|\", driver()->onActions), $field[\"on_delete\"]) . \"</select> \"\n\t\t: \" \" // space for IE\n\t);\n}\n\n/** Filter length value including enums */\nfunction process_length(?string $length): string {\n\t$enum_length = driver()->enumLength;\n\treturn (preg_match(\"~^\\\\s*\\\\(?\\\\s*$enum_length(?:\\\\s*,\\\\s*$enum_length)*+\\\\s*\\\\)?\\\\s*\\$~\", $length) && preg_match_all(\"~$enum_length~\", $length, $matches)\n\t\t? \"(\" . implode(\",\", $matches[0]) . \")\"\n\t\t: preg_replace('~^[0-9].*~', '(\\0)', preg_replace('~[^-0-9,+()[\\]]~', '', $length))\n\t);\n}\n\n/** Create SQL string from field type\n* @param FieldType $field\n*/\nfunction process_type(array $field, string $collate = \"COLLATE\"): string {\n\treturn \" $field[type]\"\n\t\t. process_length($field[\"length\"])\n\t\t. (preg_match(number_type(), $field[\"type\"]) && in_array($field[\"unsigned\"], driver()->unsigned) ? \" $field[unsigned]\" : \"\")\n\t\t. (preg_match('~char|text|enum|set~', $field[\"type\"]) && $field[\"collation\"] ? \" $collate \" . (JUSH == \"mssql\" ? $field[\"collation\"] : q($field[\"collation\"])) : \"\")\n\t;\n}\n\n/** Create SQL string from field\n* @param Field $field basic field information\n* @param Field $type_field information about field type\n* @return list<string> [\"field\", \"type\", \"NULL\", \"DEFAULT\", \"ON UPDATE\", \"COMMENT\", \"AUTO_INCREMENT\"]\n*/\nfunction process_field(array $field, array $type_field): array {\n\t// MariaDB exports CURRENT_TIMESTAMP as a function.\n\tif ($field[\"on_update\"]) {\n\t\t$field[\"on_update\"] = str_ireplace(\"current_timestamp()\", \"CURRENT_TIMESTAMP\", $field[\"on_update\"]);\n\t}\n\treturn array(\n\t\tidf_escape(trim($field[\"field\"])),\n\t\tprocess_type($type_field),\n\t\t($field[\"null\"] ? \" NULL\" : \" NOT NULL\"), // NULL for timestamp\n\t\tdefault_value($field),\n\t\t(preg_match('~timestamp|datetime~', $field[\"type\"]) && $field[\"on_update\"] ? \" ON UPDATE $field[on_update]\" : \"\"),\n\t\t(support(\"comment\") && $field[\"comment\"] != \"\" ? \" COMMENT \" . q($field[\"comment\"]) : \"\"),\n\t\t($field[\"auto_increment\"] ? auto_increment() : null),\n\t);\n}\n\n/** Get default value clause\n* @param Field $field\n*/\nfunction default_value(array $field): string {\n\tif ($field[\"default\"] === null) {\n\t\treturn \"\";\n\t}\n\t$default = str_replace(\"\\r\", \"\", $field[\"default\"]);\n\t$generated = $field[\"generated\"];\n\treturn (in_array($generated, driver()->generated)\n\t\t? (JUSH == \"mssql\" ? \" AS ($default)\" . ($generated == \"VIRTUAL\" ? \"\" : \" $generated\") : \" GENERATED ALWAYS AS ($default) $generated\")\n\t\t: \" DEFAULT \" . (!preg_match('~^GENERATED ~i', $default) && (preg_match('~char|binary|text|json|enum|set~', $field[\"type\"]) || preg_match('~^(?![a-z])~i', $default))\n\t\t\t? (JUSH == \"sql\" && preg_match('~text|json~', $field[\"type\"]) ? \"(\" . q($default) . \")\" : q($default)) // MySQL requires () around default value of text column\n\t\t\t: str_ireplace(\"current_timestamp()\", \"CURRENT_TIMESTAMP\", (JUSH == \"sqlite\" ? \"($default)\" : $default))\n\t\t)\n\t);\n}\n\n/** Get type class to use in CSS\n* @return string|void class=''\n*/\nfunction type_class(string $type) {\n\tforeach (\n\t\tarray(\n\t\t\t'char' => 'text',\n\t\t\t'date' => 'time|year',\n\t\t\t'binary' => 'blob',\n\t\t\t'enum' => 'set',\n\t\t) as $key => $val\n\t) {\n\t\tif (preg_match(\"~$key|$val~\", $type)) {\n\t\t\treturn \" class='$key'\";\n\t\t}\n\t}\n}\n\n/** Print table interior for fields editing\n* @param (Field|RoutineField)[] $fields\n* @param list<string> $collations\n* @param 'TABLE'|'PROCEDURE' $type\n* @param string[] $foreign_keys\n*/\nfunction edit_fields(array $fields, array $collations, $type = \"TABLE\", array $foreign_keys = array()): void {\n\t$fields = array_values($fields);\n\t$default_class = (($_POST ? $_POST[\"defaults\"] : get_setting(\"defaults\")) ? \"\" : \" class='hidden'\");\n\t$comment_class = (($_POST ? $_POST[\"comments\"] : get_setting(\"comments\")) ? \"\" : \" class='hidden'\");\n\techo \"<thead><tr>\\n\";\n\techo ($type == \"PROCEDURE\" ? \"<td>\" : \"\");\n\techo \"<th id='label-name'>\" . ($type == \"TABLE\" ? lang('Column name') : lang('Parameter name'));\n\techo \"<td id='label-type'>\" . lang('Type') . \"<textarea id='enum-edit' rows='4' cols='12' wrap='off' style='display: none;'></textarea>\" . script(\"qs('#enum-edit').onblur = editingLengthBlur;\");\n\techo \"<td id='label-length'>\" . lang('Length');\n\techo \"<td>\" . lang('Options'); // no label required, options have their own label\n\tif ($type == \"TABLE\") {\n\t\techo \"<td id='label-null'>NULL\\n\";\n\t\techo \"<td><input type='radio' name='auto_increment_col' value=''><abbr id='label-ai' title='\" . lang('Auto Increment') . \"'>AI</abbr>\";\n\t\techo doc_link(array(\n\t\t\t'sql' => \"example-auto-increment.html\",\n\t\t\t'mariadb' => \"auto_increment/\",\n\t\t\t'sqlite' => \"autoinc.html\",\n\t\t\t'pgsql' => \"datatype-numeric.html#DATATYPE-SERIAL\",\n\t\t\t'mssql' => \"t-sql/statements/create-table-transact-sql-identity-property\",\n\t\t));\n\t\techo \"<td id='label-default'$default_class>\" . lang('Default value');\n\t\techo (support(\"comment\") ? \"<td id='label-comment'$comment_class>\" . lang('Comment') : \"\");\n\t}\n\techo \"<td>\" . icon(\"plus\", \"add[\" . (support(\"move_col\") ? 0 : count($fields)) . \"]\", \"+\", lang('Add next'));\n\techo \"</thead>\\n<tbody>\\n\";\n\techo script(\"mixin(qsl('tbody'), {onclick: editingClick, onkeydown: editingKeydown, oninput: editingInput});\");\n\tforeach ($fields as $i => $field) {\n\t\t$i++;\n\t\t$orig = $field[($_POST ? \"orig\" : \"field\")];\n\t\t$display = (isset($_POST[\"add\"][$i-1]) || (isset($field[\"field\"]) && !idx($_POST[\"drop_col\"], $i))) && (support(\"drop_col\") || $orig == \"\");\n\t\techo \"<tr\" . ($display ? \"\" : \" style='display: none;'\") . \">\\n\";\n\t\techo ($type == \"PROCEDURE\" ? \"<td>\" . html_select(\"fields[$i][inout]\", explode(\"|\", driver()->inout), $field[\"inout\"]) : \"\") . \"<th>\";\n\t\tif ($display) {\n\t\t\techo \"<input name='fields[$i][field]' value='\" . h($field[\"field\"]) . \"' data-maxlength='64' autocapitalize='off' aria-labelledby='label-name'\" . (isset($_POST[\"add\"][$i-1]) ? \" autofocus\" : \"\") . \">\";\n\t\t}\n\t\techo input_hidden(\"fields[$i][orig]\", $orig);\n\t\tedit_type(\"fields[$i]\", $field, $collations, $foreign_keys);\n\t\tif ($type == \"TABLE\") {\n\t\t\techo \"<td>\" . checkbox(\"fields[$i][null]\", 1, $field[\"null\"], \"\", \"\", \"block\", \"label-null\");\n\t\t\techo \"<td><label class='block'><input type='radio' name='auto_increment_col' value='$i'\" . ($field[\"auto_increment\"] ? \" checked\" : \"\") . \" aria-labelledby='label-ai'></label>\";\n\t\t\techo \"<td$default_class>\" . (driver()->generated\n\t\t\t\t? html_select(\"fields[$i][generated]\", array_merge(array(\"\", \"DEFAULT\"), driver()->generated), $field[\"generated\"]) . \" \"\n\t\t\t\t: checkbox(\"fields[$i][generated]\", 1, $field[\"generated\"], \"\", \"\", \"\", \"label-default\")\n\t\t\t);\n\t\t\t$attrs = \" name='fields[$i][default]' aria-labelledby='label-default'\";\n\t\t\t$value = h($field[\"default\"]);\n\t\t\techo (preg_match('~\\n~', $field[\"default\"]) ? \"<textarea$attrs rows='2' cols='30' style='vertical-align: bottom;'>\\n$value</textarea>\" : \"<input$attrs value='$value'>\"); // \\n to preserve the leading newline\n\t\t\techo (support(\"comment\") ? \"<td$comment_class><input name='fields[$i][comment]' value='\" . h($field[\"comment\"]) . \"' data-maxlength='\" . (min_version(5.5) ? 1024 : 255) . \"' aria-labelledby='label-comment'>\" : \"\");\n\t\t}\n\t\techo \"<td>\";\n\t\techo (support(\"move_col\") ?\n\t\t\ticon(\"plus\", \"add[$i]\", \"+\", lang('Add next')) . \" \"\n\t\t\t. icon(\"up\", \"up[$i]\", \"↑\", lang('Move up')) . \" \"\n\t\t\t. icon(\"down\", \"down[$i]\", \"↓\", lang('Move down')) . \" \"\n\t\t: \"\");\n\t\techo ($orig == \"\" || support(\"drop_col\") ? icon(\"cross\", \"drop_col[$i]\", \"x\", lang('Remove')) : \"\");\n\t}\n}\n\n/** Move fields up and down or add field\n* @param Field[] $fields\n*/\nfunction process_fields(array &$fields): bool {\n\t$offset = 0;\n\tif ($_POST[\"up\"]) {\n\t\t$last = 0;\n\t\tforeach ($fields as $key => $field) {\n\t\t\tif (key($_POST[\"up\"]) == $key) {\n\t\t\t\tunset($fields[$key]);\n\t\t\t\tarray_splice($fields, $last, 0, array($field));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (isset($field[\"field\"])) {\n\t\t\t\t$last = $offset;\n\t\t\t}\n\t\t\t$offset++;\n\t\t}\n\t} elseif ($_POST[\"down\"]) {\n\t\t$found = false;\n\t\tforeach ($fields as $key => $field) {\n\t\t\tif (isset($field[\"field\"]) && $found) {\n\t\t\t\tunset($fields[key($_POST[\"down\"])]);\n\t\t\t\tarray_splice($fields, $offset, 0, array($found));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (key($_POST[\"down\"]) == $key) {\n\t\t\t\t$found = $field;\n\t\t\t}\n\t\t\t$offset++;\n\t\t}\n\t} elseif ($_POST[\"add\"]) {\n\t\t$fields = array_values($fields);\n\t\tarray_splice($fields, key($_POST[\"add\"]), 0, array(array()));\n\t} elseif (!$_POST[\"drop_col\"]) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/** Callback used in routine()\n* @param list<string> $match\n*/\nfunction normalize_enum(array $match): string {\n\t$val = $match[0];\n\treturn \"'\" . str_replace(\"'\", \"''\", addcslashes(stripcslashes(str_replace($val[0] . $val[0], $val[0], substr($val, 1, -1))), '\\\\')) . \"'\";\n}\n\n/** Issue grant or revoke commands\n* @param 'GRANT'|'REVOKE' $grant\n* @param list<string> $privileges\n* @return Result|bool\n*/\nfunction grant(string $grant, array $privileges, ?string $columns, string $on) {\n\tif (!$privileges) {\n\t\treturn true;\n\t}\n\tif ($privileges == array(\"ALL PRIVILEGES\", \"GRANT OPTION\")) {\n\t\t// can't be granted or revoked together\n\t\treturn ($grant == \"GRANT\"\n\t\t\t? queries(\"$grant ALL PRIVILEGES$on WITH GRANT OPTION\")\n\t\t\t: queries(\"$grant ALL PRIVILEGES$on\") && queries(\"$grant GRANT OPTION$on\")\n\t\t);\n\t}\n\treturn queries(\"$grant \" . preg_replace('~(GRANT OPTION)\\([^)]*\\)~', '\\1', implode(\"$columns, \", $privileges) . $columns) . $on);\n}\n\n/** Drop old object and create a new one\n* @param string $drop drop old object query\n* @param string $create create new object query\n* @param string $drop_created drop new object query\n* @param string $test create test object query\n* @param string $drop_test drop test object query\n* @return void redirect on success\n*/\nfunction drop_create(string $drop, string $create, string $drop_created, string $test, string $drop_test, string $location, string $message_drop, string $message_alter, string $message_create, string $old_name, string $new_name): void {\n\tif ($_POST[\"drop\"]) {\n\t\tquery_redirect($drop, $location, $message_drop);\n\t} elseif ($old_name == \"\") {\n\t\tquery_redirect($create, $location, $message_create);\n\t} elseif ($old_name != $new_name) {\n\t\t$created = queries($create);\n\t\tqueries_redirect($location, $message_alter, $created && queries($drop));\n\t\tif ($created) {\n\t\t\tqueries($drop_created);\n\t\t}\n\t} else {\n\t\tqueries_redirect(\n\t\t\t$location,\n\t\t\t$message_alter,\n\t\t\tqueries($test) && queries($drop_test) && queries($drop) && queries($create)\n\t\t);\n\t}\n}\n\n/** Generate SQL query for creating trigger\n* @param Trigger $row\n*/\nfunction create_trigger(string $on, array $row): string {\n\t$timing_event = \" $row[Timing] $row[Event]\" . (preg_match('~ OF~', $row[\"Event\"]) ? \" $row[Of]\" : \"\"); // SQL injection\n\treturn \"CREATE TRIGGER \"\n\t\t. idf_escape($row[\"Trigger\"])\n\t\t. (JUSH == \"mssql\" ? $on . $timing_event : $timing_event . $on)\n\t\t. rtrim(\" $row[Type]\\n$row[Statement]\", \";\")\n\t\t. \";\"\n\t;\n}\n\n/** Generate SQL query for creating routine\n* @param 'PROCEDURE'|'FUNCTION' $routine\n* @param Routine $row\n*/\nfunction create_routine($routine, array $row): string {\n\t$set = array();\n\t$fields = (array) $row[\"fields\"];\n\tksort($fields); // enforce fields order\n\tforeach ($fields as $field) {\n\t\tif ($field[\"field\"] != \"\") {\n\t\t\t$set[] = (preg_match(\"~^(\" . driver()->inout . \")\\$~\", $field[\"inout\"]) ? \"$field[inout] \" : \"\") . idf_escape($field[\"field\"]) . process_type($field, \"CHARACTER SET\");\n\t\t}\n\t}\n\t$definition = rtrim($row[\"definition\"], \";\");\n\treturn \"CREATE $routine \"\n\t\t. idf_escape(trim($row[\"name\"]))\n\t\t. \" (\" . implode(\", \", $set) . \")\"\n\t\t. ($routine == \"FUNCTION\" ? \" RETURNS\" . process_type($row[\"returns\"], \"CHARACTER SET\") : \"\")\n\t\t. ($row[\"language\"] ? \" LANGUAGE $row[language]\" : \"\")\n\t\t. (JUSH == \"pgsql\" ? \" AS \" . q($definition) : \"\\n$definition;\")\n\t;\n}\n\n/** Remove current user definer from SQL command */\nfunction remove_definer(string $query): string {\n\treturn preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user\n}\n\n/** Format foreign key to use in SQL query\n* @param ForeignKey $foreign_key\n*/\nfunction format_foreign_key(array $foreign_key): string {\n\t$db = $foreign_key[\"db\"];\n\t$ns = $foreign_key[\"ns\"];\n\treturn \" FOREIGN KEY (\" . implode(\", \", array_map('Adminer\\idf_escape', $foreign_key[\"source\"])) . \") REFERENCES \"\n\t\t. ($db != \"\" && $db != $_GET[\"db\"] ? idf_escape($db) . \".\" : \"\")\n\t\t. ($ns != \"\" && $ns != $_GET[\"ns\"] ? idf_escape($ns) . \".\" : \"\")\n\t\t. idf_escape($foreign_key[\"table\"])\n\t\t. \" (\" . implode(\", \", array_map('Adminer\\idf_escape', $foreign_key[\"target\"])) . \")\" //! reuse $name - check in older MySQL versions\n\t\t. (preg_match(\"~^(\" . driver()->onActions . \")\\$~\", $foreign_key[\"on_delete\"]) ? \" ON DELETE $foreign_key[on_delete]\" : \"\")\n\t\t. (preg_match(\"~^(\" . driver()->onActions . \")\\$~\", $foreign_key[\"on_update\"]) ? \" ON UPDATE $foreign_key[on_update]\" : \"\")\n\t\t. ($foreign_key[\"deferrable\"] ? \" $foreign_key[deferrable]\" : \"\")\n\t;\n}\n\n/** Add a file to TAR\n* @param TmpFile $tmp_file\n* @return void prints the output\n*/\nfunction tar_file(string $filename, $tmp_file): void {\n\t$return = pack(\"a100a8a8a8a12a12\", $filename, 644, 0, 0, decoct($tmp_file->size), decoct(time()));\n\t$checksum = 8*32; // space for checksum itself\n\tfor ($i=0; $i < strlen($return); $i++) {\n\t\t$checksum += ord($return[$i]);\n\t}\n\t$return .= sprintf(\"%06o\", $checksum) . \"\\0 \";\n\techo $return;\n\techo str_repeat(\"\\0\", 512 - strlen($return));\n\t$tmp_file->send();\n\techo str_repeat(\"\\0\", 511 - ($tmp_file->size + 511) % 512);\n}\n\n/** Create link to database documentation\n* @param string[] $paths JUSH => $path\n* @param string $text HTML code\n* @return string HTML code\n*/\nfunction doc_link(array $paths, string $text = \"<sup>?</sup>\"): string {\n\t$server_info = connection()->server_info;\n\t$version = preg_replace('~^(\\d\\.?\\d).*~s', '\\1', $server_info); // two most significant digits\n\t$urls = array(\n\t\t'sql' => \"https://dev.mysql.com/doc/refman/$version/en/\",\n\t\t'sqlite' => \"https://www.sqlite.org/\",\n\t\t'pgsql' => \"https://www.postgresql.org/docs/\" . (connection()->flavor == 'cockroach' ? \"current\" : $version) . \"/\",\n\t\t'mssql' => \"https://learn.microsoft.com/en-us/sql/\",\n\t\t'oracle' => \"https://www.oracle.com/pls/topic/lookup?ctx=db\" . preg_replace('~^.* (\\d+)\\.(\\d+)\\.\\d+\\.\\d+\\.\\d+.*~s', '\\1\\2', $server_info) . \"&id=\",\n\t);\n\tif (connection()->flavor == 'maria') {\n\t\t$urls['sql'] = \"https://mariadb.com/kb/en/\";\n\t\t$paths['sql'] = (isset($paths['mariadb']) ? $paths['mariadb'] : str_replace(\".html\", \"/\", $paths['sql']));\n\t}\n\treturn ($paths[JUSH] ? \"<a href='\" . h($urls[JUSH] . $paths[JUSH] . (JUSH == 'mssql' ? \"?view=sql-server-ver$version\" : \"\")) . \"'\" . target_blank() . \">$text</a>\" : \"\");\n}\n\n/** Compute size of database\n* @return string formatted\n*/\nfunction db_size(string $db): string {\n\tif (!connection()->select_db($db)) {\n\t\treturn \"?\";\n\t}\n\t$return = 0;\n\tforeach (table_status() as $table_status) {\n\t\t$return += $table_status[\"Data_length\"] + $table_status[\"Index_length\"];\n\t}\n\treturn format_number($return);\n}\n\n/** Print SET NAMES if utf8mb4 might be needed */\nfunction set_utf8mb4(string $create): void {\n\tstatic $set = false;\n\tif (!$set && preg_match('~\\butf8mb4~i', $create)) { // possible false positive\n\t\t$set = true;\n\t\techo \"SET NAMES \" . charset(connection()) . \";\\n\\n\";\n\t}\n}\n"
  },
  {
    "path": "adminer/include/errors.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nerror_reporting(24575); // all but E_DEPRECATED (overriding mysqli methods without types is deprecated)\nset_error_handler(function ($errno, $errstr) {\n\t// \"Undefined array key\" mutes $_GET[\"q\"] if there's no ?q=\n\t// \"Undefined offset\" and \"Undefined index\" are older messages for the same thing\n\treturn !!preg_match('~^Undefined (array key|offset|index)~', $errstr);\n}, E_WARNING | E_NOTICE); // warning since PHP 8.0\n"
  },
  {
    "path": "adminer/include/functions.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// This file is used both in Adminer and Adminer Editor.\n\n/** Get database connection\n* @param ?Db $connection2 custom connection to use instead of the default\n* @return Db\n*/\nfunction connection(?Db $connection2 = null) {\n\t// can be used in customization, Db::$instance is minified\n\treturn ($connection2 ?: Db::$instance);\n}\n\n/** Get Adminer object\n* @return Adminer|Plugins\n*/\nfunction adminer() {\n\treturn Adminer::$instance;\n}\n\n/** Get Driver object */\nfunction driver(): Driver {\n\treturn Driver::$instance;\n}\n\n/** Connect to the database */\nfunction connect(): ?Db {\n\t$credentials = adminer()->credentials();\n\t$return = Driver::connect($credentials[0], $credentials[1], $credentials[2]);\n\treturn (is_object($return) ? $return : null);\n}\n\n/** Unescape database identifier\n* @param string $idf text inside ``\n*/\nfunction idf_unescape(string $idf): string {\n\tif (!preg_match('~^[`\\'\"[]~', $idf)) {\n\t\treturn $idf;\n\t}\n\t$last = substr($idf, -1);\n\treturn str_replace($last . $last, $last, substr($idf, 1, -1));\n}\n\n/** Shortcut for connection()->quote($string) */\nfunction q(string $string): string {\n\treturn connection()->quote($string);\n}\n\n/** Escape string to use inside '' */\nfunction escape_string(string $val): string {\n\treturn substr(q($val), 1, -1);\n}\n\n/** Get a possibly missing item from a possibly missing array\n* idx($row, $key) is better than $row[$key] ?? null because PHP will report error for undefined $row\n* @param ?mixed[] $array\n* @param array-key $key\n* @param mixed $default\n* @return mixed\n*/\nfunction idx(?array $array, $key, $default = null) {\n\treturn ($array && array_key_exists($key, $array) ? $array[$key] : $default);\n}\n\n/** Remove non-digits from a string; used instead of intval() to not corrupt big numbers\n* @return numeric-string\n*/\nfunction number(string $val): string {\n\treturn preg_replace('~[^0-9]+~', '', $val);\n}\n\n/** Get regular expression to match numeric types */\nfunction number_type(): string {\n\treturn '((?<!o)int(?!er)|numeric|real|float|double|decimal|money)'; // not point, not interval\n}\n\n/** Disable magic_quotes_gpc\n* @param mixed[] $values\n* @param bool $filter whether to leave values as is\n* @return mixed[]\n*/\nfunction remove_slashes(array $values, bool $filter = false): array {\n\t$return = array();\n\tforeach ($values as $key => $val) {\n\t\t$return[stripslashes($key)] = (is_array($val)\n\t\t\t? remove_slashes($val, $filter)\n\t\t\t: ($filter ? $val : stripslashes($val))\n\t\t);\n\t}\n\treturn $return;\n}\n\n/** Escape or unescape string to use inside form [] */\nfunction bracket_escape(string $idf, bool $back = false): string {\n\t// escape brackets inside name=\"x[]\"\n\tstatic $trans = array(':' => ':1', ']' => ':2', '[' => ':3', '\"' => ':4');\n\treturn strtr($idf, ($back ? array_flip($trans) : $trans));\n}\n\n/** Check if connection has at least the given version\n* @param string|float $version required version\n* @param string|float $maria_db required MariaDB version\n*/\nfunction min_version($version, $maria_db = \"\", ?Db $connection2 = null): bool {\n\t$connection2 = connection($connection2);\n\t$server_info = $connection2->server_info;\n\tif ($maria_db && preg_match('~([\\d.]+)-MariaDB~', $server_info, $match)) {\n\t\t$server_info = $match[1];\n\t\t$version = $maria_db;\n\t}\n\treturn $version && version_compare($server_info, $version) >= 0;\n}\n\n/** Get connection charset */\nfunction charset(Db $connection): string {\n\treturn (min_version(\"5.5.3\", 0, $connection) ? \"utf8mb4\" : \"utf8\"); // SHOW CHARSET would require an extra query\n}\n\n/** Get INI boolean value */\nfunction ini_bool(string $ini): bool {\n\t$val = ini_get($ini);\n\treturn (preg_match('~^(on|true|yes)$~i', $val) || (int) $val); // boolean values set by php_value are strings\n}\n\n/** Get INI bytes value */\nfunction ini_bytes(string $ini): int {\n\t$val = ini_get($ini);\n\tswitch (strtolower(substr($val, -1))) {\n\t\tcase 'g':\n\t\t\t$val = (int) $val * 1024; // no break\n\t\tcase 'm':\n\t\t\t$val = (int) $val * 1024; // no break\n\t\tcase 'k':\n\t\t\t$val = (int) $val * 1024;\n\t}\n\treturn $val;\n}\n\n/** Check if SID is necessary */\nfunction sid(): bool {\n\tstatic $return;\n\tif ($return === null) { // restart_session() defines SID\n\t\t$return = (SID && !($_COOKIE && ini_bool(\"session.use_cookies\"))); // $_COOKIE - don't pass SID with permanent login\n\t}\n\treturn $return;\n}\n\n/** Set password to session */\nfunction set_password(string $vendor, ?string $server, string $username, ?string $password): void {\n\t$_SESSION[\"pwds\"][$vendor][$server][$username] = ($_COOKIE[\"adminer_key\"] && is_string($password)\n\t\t? array(encrypt_string($password, $_COOKIE[\"adminer_key\"]))\n\t\t: $password\n\t);\n}\n\n/** Get password from session\n* @return string|false|null null for missing password, false for expired password\n*/\nfunction get_password() {\n\t$return = get_session(\"pwds\");\n\tif (is_array($return)) {\n\t\t$return = ($_COOKIE[\"adminer_key\"]\n\t\t\t? decrypt_string($return[0], $_COOKIE[\"adminer_key\"])\n\t\t\t: false\n\t\t);\n\t}\n\treturn $return;\n}\n\n/** Get single value from database\n* @return string|false false if error\n*/\nfunction get_val(string $query, int $field = 0, ?Db $conn = null) {\n\t$conn = connection($conn);\n\t$result = $conn->query($query);\n\tif (!is_object($result)) {\n\t\treturn false;\n\t}\n\t$row = $result->fetch_row();\n\treturn ($row ? $row[$field] : false);\n}\n\n/** Get list of values from database\n* @param array-key $column\n* @return list<string>\n*/\nfunction get_vals(string $query, $column = 0): array {\n\t$return = array();\n\t$result = connection()->query($query);\n\tif (is_object($result)) {\n\t\twhile ($row = $result->fetch_row()) {\n\t\t\t$return[] = $row[$column];\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Get keys from first column and values from second\n* @return string[]\n*/\nfunction get_key_vals(string $query, ?Db $connection2 = null, bool $set_keys = true): array {\n\t$connection2 = connection($connection2);\n\t$return = array();\n\t$result = $connection2->query($query);\n\tif (is_object($result)) {\n\t\twhile ($row = $result->fetch_row()) {\n\t\t\tif ($set_keys) {\n\t\t\t\t$return[$row[0]] = $row[1];\n\t\t\t} else {\n\t\t\t\t$return[] = $row[0];\n\t\t\t}\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Get all rows of result\n* @return list<string[]> of associative arrays\n*/\nfunction get_rows(string $query, ?Db $connection2 = null, string $error = \"<p class='error'>\"): array {\n\t$conn = connection($connection2);\n\t$return = array();\n\t$result = $conn->query($query);\n\tif (is_object($result)) { // can return true\n\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t$return[] = $row;\n\t\t}\n\t} elseif (!$result && !$connection2 && $error && (defined('Adminer\\PAGE_HEADER') || $error == \"-- \")) {\n\t\techo $error . error() . \"\\n\";\n\t}\n\treturn $return;\n}\n\n/** Find unique identifier of a row\n* @param string[] $row\n* @param Index[] $indexes\n* @return string[]|void null if there is no unique identifier\n*/\nfunction unique_array(?array $row, array $indexes) {\n\tforeach ($indexes as $index) {\n\t\tif (preg_match(\"~PRIMARY|UNIQUE~\", $index[\"type\"]) && !$index[\"partial\"]) {\n\t\t\t$return = array();\n\t\t\tforeach ($index[\"columns\"] as $key) {\n\t\t\t\tif (!isset($row[$key])) { // NULL is ambiguous\n\t\t\t\t\tcontinue 2;\n\t\t\t\t}\n\t\t\t\t$return[$key] = $row[$key];\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\t}\n}\n\n/** Escape column key used in where() */\nfunction escape_key(string $key): string {\n\tif (preg_match('(^([\\w(]+)(' . str_replace(\"_\", \".*\", preg_quote(idf_escape(\"_\"))) . ')([ \\w)]+)$)', $key, $match)) { //! columns looking like functions\n\t\treturn $match[1] . idf_escape(idf_unescape($match[2])) . $match[3]; //! SQL injection\n\t}\n\treturn idf_escape($key);\n}\n\n/** Create SQL condition from parsed query string\n* @param array{where:string[], null:list<string>} $where parsed query string\n* @param Field[] $fields\n*/\nfunction where(array $where, array $fields = array()): string {\n\t$return = array();\n\tforeach ((array) $where[\"where\"] as $key => $val) {\n\t\t$key = bracket_escape($key, true); // true - back\n\t\t$column = escape_key($key);\n\t\t$field = idx($fields, $key, array());\n\t\t$field_type = $field[\"type\"];\n\t\t$return[] = $column\n\t\t\t. (JUSH == \"sql\" && $field_type == \"json\" ? \" = CAST(\" . q($val) . \" AS JSON)\"\n\t\t\t\t: (JUSH == \"pgsql\" && preg_match('~^json~', $field_type) ? \"::jsonb = \" . q($val) . \"::jsonb\"\n\t\t\t\t: (JUSH == \"sql\" && is_numeric($val) && preg_match('~\\.~', $val) ? \" LIKE \" . q($val) // LIKE because of floats but slow with ints\n\t\t\t\t: (JUSH == \"mssql\" && strpos($field_type, \"datetime\") === false ? \" LIKE \" . q(preg_replace('~[_%[]~', '[\\0]', $val)) // LIKE because of text but it does not work with datetime\n\t\t\t\t: \" = \" . unconvert_field($field, q($val))))))\n\t\t; //! enum and set\n\t\tif (JUSH == \"sql\" && preg_match('~char|text~', $field_type) && preg_match(\"~[^ -@]~\", $val)) { // not just [a-z] to catch non-ASCII characters\n\t\t\t$return[] = \"$column = \" . q($val) . \" COLLATE \" . charset(connection()) . \"_bin\";\n\t\t}\n\t}\n\tforeach ((array) $where[\"null\"] as $key) {\n\t\t$return[] = escape_key($key) . \" IS NULL\";\n\t}\n\treturn implode(\" AND \", $return);\n}\n\n/** Create SQL condition from query string\n* @param Field[] $fields\n*/\nfunction where_check(string $val, array $fields = array()): string {\n\tparse_str($val, $check);\n\tremove_slashes(array(&$check));\n\treturn where($check, $fields);\n}\n\n/** Create query string where condition from value\n* @param int $i condition order\n* @param string $column column identifier\n*/\nfunction where_link(int $i, string $column, ?string $value, string $operator = \"=\"): string {\n\treturn \"&where%5B$i%5D%5Bcol%5D=\" . urlencode($column) . \"&where%5B$i%5D%5Bop%5D=\" . urlencode(($value !== null ? $operator : \"IS NULL\")) . \"&where%5B$i%5D%5Bval%5D=\" . urlencode($value);\n}\n\n/** Get select clause for convertible fields\n* @param mixed[] $columns only keys are used\n* @param Field[] $fields\n* @param list<string> $select\n*/\nfunction convert_fields(array $columns, array $fields, array $select = array()): string {\n\t$return = \"\";\n\tforeach ($columns as $key => $val) {\n\t\tif ($select && !in_array(idf_escape($key), $select)) {\n\t\t\tcontinue;\n\t\t}\n\t\t$as = convert_field($fields[$key]);\n\t\tif ($as) {\n\t\t\t$return .= \", $as AS \" . idf_escape($key);\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Set cookie valid on current path\n* @param int $lifetime number of seconds, 0 for session cookie, 2592000 - 30 days\n*/\nfunction cookie(string $name, ?string $value, int $lifetime = 2592000): void {\n\theader(\n\t\t\"Set-Cookie: $name=\" . rawurlencode($value)\n\t\t\t. ($lifetime ? \"; expires=\" . gmdate(\"D, d M Y H:i:s\", time() + $lifetime) . \" GMT\" : \"\")\n\t\t\t. \"; path=\" . preg_replace('~\\?.*~', '', $_SERVER[\"REQUEST_URI\"])\n\t\t\t. (HTTPS ? \"; secure\" : \"\")\n\t\t\t. \"; HttpOnly; SameSite=lax\",\n\t\tfalse\n\t);\n}\n\n/** Get settings stored in a cookie\n* @return mixed[]\n*/\nfunction get_settings(string $cookie): array {\n\tparse_str($_COOKIE[$cookie], $settings);\n\treturn $settings;\n}\n\n/** Get setting stored in a cookie\n* @param mixed $default\n* @return mixed\n*/\nfunction get_setting(string $key, string $cookie = \"adminer_settings\", $default = null) {\n\treturn idx(get_settings($cookie), $key, $default);\n}\n\n/** Store settings to a cookie\n* @param mixed[] $settings\n*/\nfunction save_settings(array $settings, string $cookie = \"adminer_settings\"): void {\n\t$value = http_build_query($settings + get_settings($cookie));\n\tcookie($cookie, $value);\n\t$_COOKIE[$cookie] = $value;\n}\n\n/** Restart stopped session */\nfunction restart_session(): void {\n\tif (!ini_bool(\"session.use_cookies\") && (!function_exists('session_status') || session_status() == 1)) { // 1 - PHP_SESSION_NONE, session_status() available since PHP 5.4\n\t\tsession_start();\n\t}\n}\n\n/** Stop session if possible */\nfunction stop_session(bool $force = false): void {\n\t$use_cookies = ini_bool(\"session.use_cookies\");\n\tif (!$use_cookies || $force) {\n\t\tsession_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later\n\t\tif ($use_cookies && @ini_set(\"session.use_cookies\", '0') === false) { // @ - may be disabled\n\t\t\tsession_start();\n\t\t}\n\t}\n}\n\n/** Get session variable for current server\n* @return mixed\n*/\nfunction &get_session(string $key) {\n\treturn $_SESSION[$key][DRIVER][SERVER][$_GET[\"username\"]];\n}\n\n/** Set session variable for current server\n* @param mixed $val\n* @return mixed\n*/\nfunction set_session(string $key, $val) {\n\t$_SESSION[$key][DRIVER][SERVER][$_GET[\"username\"]] = $val; // used also in auth.inc.php\n}\n\n/** Get authenticated URL */\nfunction auth_url(string $vendor, ?string $server, string $username, ?string $db = null): string {\n\t$uri = remove_from_uri(implode(\"|\", array_keys(SqlDriver::$drivers))\n\t\t. \"|username|ext|\"\n\t\t. ($db !== null ? \"db|\" : \"\")\n\t\t. ($vendor == 'mssql' || $vendor == 'pgsql' ? \"\" : \"ns|\") // we don't have access to support() here\n\t\t. session_name())\n\t;\n\tpreg_match('~([^?]*)\\??(.*)~', $uri, $match);\n\treturn \"$match[1]?\"\n\t\t. (sid() ? SID . \"&\" : \"\")\n\t\t. ($vendor != \"server\" || $server != \"\" ? urlencode($vendor) . \"=\" . urlencode($server) . \"&\" : \"\")\n\t\t. ($_GET[\"ext\"] ? \"ext=\" . urlencode($_GET[\"ext\"]) . \"&\" : \"\")\n\t\t. \"username=\" . urlencode($username)\n\t\t. ($db != \"\" ? \"&db=\" . urlencode($db) : \"\")\n\t\t. ($match[2] ? \"&$match[2]\" : \"\")\n\t;\n}\n\n/** Find whether it is an AJAX request */\nfunction is_ajax(): bool {\n\treturn ($_SERVER[\"HTTP_X_REQUESTED_WITH\"] == \"XMLHttpRequest\");\n}\n\n/** Send Location header and exit\n* @param ?string $location null to only set a message\n*/\nfunction redirect(?string $location, ?string $message = null): void {\n\tif ($message !== null) {\n\t\trestart_session();\n\t\t$_SESSION[\"messages\"][preg_replace('~^[^?]*~', '', ($location !== null ? $location : $_SERVER[\"REQUEST_URI\"]))][] = $message;\n\t}\n\tif ($location !== null) {\n\t\tif ($location == \"\") {\n\t\t\t$location = \".\";\n\t\t}\n\t\theader(\"Location: $location\");\n\t\texit;\n\t}\n}\n\n/** Execute query and redirect if successful\n* @param bool $redirect\n*/\nfunction query_redirect(string $query, ?string $location, string $message, $redirect = true, bool $execute = true, bool $failed = false, string $time = \"\"): bool {\n\tif ($execute) {\n\t\t$start = microtime(true);\n\t\t$failed = !connection()->query($query);\n\t\t$time = format_time($start);\n\t}\n\t$sql = ($query ? adminer()->messageQuery($query, $time, $failed) : \"\");\n\tif ($failed) {\n\t\tadminer()->error .= error() . $sql . script(\"messagesPrint();\") . \"<br>\";\n\t\treturn false;\n\t}\n\tif ($redirect) {\n\t\tredirect($location, $message . $sql);\n\t}\n\treturn true;\n}\n\nclass Queries {\n\t/** @var string[] */ static array $queries = array();\n\tstatic float $start = 0;\n}\n\n/** Execute and remember query\n* @param string $query end with ';' to use DELIMITER\n* @return Result|bool\n*/\nfunction queries(string $query) {\n\tif (!Queries::$start) {\n\t\tQueries::$start = microtime(true);\n\t}\n\tQueries::$queries[] = (driver()->delimiter != ';' ? $query : (preg_match('~;$~', $query) ? \"DELIMITER ;;\\n$query;\\nDELIMITER \" : $query) . \";\");\n\treturn connection()->query($query);\n}\n\n/** Apply command to all array items\n* @param list<string> $tables\n* @param callable(string):string $escape\n*/\nfunction apply_queries(string $query, array $tables, $escape = 'Adminer\\table'): bool {\n\tforeach ($tables as $table) {\n\t\tif (!queries(\"$query \" . $escape($table))) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/** Redirect by remembered queries\n* @param bool $redirect\n*/\nfunction queries_redirect(?string $location, string $message, $redirect): bool {\n\t$queries = implode(\"\\n\", Queries::$queries);\n\t$time = format_time(Queries::$start);\n\treturn query_redirect($queries, $location, $message, $redirect, false, !$redirect, $time);\n}\n\n/** Format elapsed time\n* @param float $start output of microtime(true)\n* @return string HTML code\n*/\nfunction format_time(float $start): string {\n\treturn lang('%.3f s', max(0, microtime(true) - $start));\n}\n\n/** Get relative REQUEST_URI */\nfunction relative_uri(): string {\n\treturn str_replace(\":\", \"%3a\", preg_replace('~^[^?]*/([^?]*)~', '\\1', $_SERVER[\"REQUEST_URI\"]));\n}\n\n/** Remove parameter from query string */\nfunction remove_from_uri(string $param = \"\"): string {\n\treturn substr(preg_replace(\"~(?<=[?&])($param\" . (SID ? \"\" : \"|\" . session_name()) . \")=[^&]*&~\", '', relative_uri() . \"&\"), 0, -1);\n}\n\n/** Get file contents from $_FILES\n* @return mixed int for error, string otherwise\n*/\nfunction get_file(string $key, bool $decompress = false, string $delimiter = \"\") {\n\t$file = $_FILES[$key];\n\tif (!$file) {\n\t\treturn null;\n\t}\n\tforeach ($file as $key => $val) {\n\t\t$file[$key] = (array) $val;\n\t}\n\t$return = '';\n\tforeach ($file[\"error\"] as $key => $error) {\n\t\tif ($error) {\n\t\t\treturn $error;\n\t\t}\n\t\t$name = $file[\"name\"][$key];\n\t\t$tmp_name = $file[\"tmp_name\"][$key];\n\t\t$content = file_get_contents(\n\t\t\t$decompress && preg_match('~\\.gz$~', $name)\n\t\t\t? \"compress.zlib://$tmp_name\"\n\t\t\t: $tmp_name\n\t\t); //! may not be reachable because of open_basedir\n\t\tif ($decompress) {\n\t\t\t$start = substr($content, 0, 3);\n\t\t\tif (function_exists(\"iconv\") && preg_match(\"~^\\xFE\\xFF|^\\xFF\\xFE~\", $start)) { // not ternary operator to save memory\n\t\t\t\t$content = iconv(\"utf-16\", \"utf-8\", $content);\n\t\t\t} elseif ($start == \"\\xEF\\xBB\\xBF\") { // UTF-8 BOM\n\t\t\t\t$content = substr($content, 3);\n\t\t\t}\n\t\t}\n\t\t$return .= $content;\n\t\tif ($delimiter) {\n\t\t\t$return .= (preg_match(\"($delimiter\\\\s*\\$)\", $content) ? \"\" : $delimiter) . \"\\n\\n\";\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Determine upload error */\nfunction upload_error(int $error): string {\n\t$max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get(\"upload_max_filesize\") : 0); // post_max_size is checked in index.php\n\treturn ($error ? lang('Unable to upload a file.') . ($max_size ? \" \" . lang('Maximum allowed file size is %sB.', $max_size) : \"\") : lang('File does not exist.'));\n}\n\n/** Create repeat pattern for preg */\nfunction repeat_pattern(string $pattern, int $length): string {\n\t// fix for Compilation failed: number too big in {} quantifier\n\treturn str_repeat(\"$pattern{0,65535}\", $length / 65535) . \"$pattern{0,\" . ($length % 65535) . \"}\"; // can create {0,0} which is OK\n}\n\n/** Check whether the string is in UTF-8 */\nfunction is_utf8(?string $val): bool {\n\t// don't print control chars except \\t\\r\\n\n\treturn (preg_match('~~u', $val) && !preg_match('~[\\0-\\x8\\xB\\xC\\xE-\\x1F]~', $val));\n}\n\n/** Format decimal number\n* @param float|numeric-string $val\n*/\nfunction format_number($val): string {\n\treturn strtr(number_format($val, 0, \".\", lang(',')), preg_split('~~u', lang('0123456789'), -1, PREG_SPLIT_NO_EMPTY));\n}\n\n/** Generate friendly URL */\nfunction friendly_url(string $val): string {\n\t// used for blobs and export\n\treturn preg_replace('~\\W~i', '-', $val);\n}\n\n/** Get status of a single table and fall back to name on error\n* @return TableStatus one element from table_status()\n*/\nfunction table_status1(string $table, bool $fast = false): array {\n\t$return = table_status($table, $fast);\n\treturn ($return ? reset($return) : array(\"Name\" => $table));\n}\n\n/** Find out foreign keys for each column\n* @return list<ForeignKey>[] [$col => []]\n*/\nfunction column_foreign_keys(string $table): array {\n\t$return = array();\n\tforeach (adminer()->foreignKeys($table) as $foreign_key) {\n\t\tforeach ($foreign_key[\"source\"] as $val) {\n\t\t\t$return[$val][] = $foreign_key;\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Compute fields() from $_POST edit data; used by Mongo and SimpleDB\n* @return Field[] same as fields()\n*/\nfunction fields_from_edit(): array {\n\t$return = array();\n\tforeach ((array) $_POST[\"field_keys\"] as $key => $val) {\n\t\tif ($val != \"\") {\n\t\t\t$val = bracket_escape($val);\n\t\t\t$_POST[\"function\"][$val] = $_POST[\"field_funs\"][$key];\n\t\t\t$_POST[\"fields\"][$val] = $_POST[\"field_vals\"][$key];\n\t\t}\n\t}\n\tforeach ((array) $_POST[\"fields\"] as $key => $val) {\n\t\t$name = bracket_escape($key, true); // true - back\n\t\t$return[$name] = array(\n\t\t\t\"field\" => $name,\n\t\t\t\"privileges\" => array(\"insert\" => 1, \"update\" => 1, \"where\" => 1, \"order\" => 1),\n\t\t\t\"null\" => 1,\n\t\t\t\"auto_increment\" => ($key == driver()->primary),\n\t\t);\n\t}\n\treturn $return;\n}\n\n/** Send headers for export\n* @return string extension\n*/\nfunction dump_headers(string $identifier, bool $multi_table = false): string {\n\t$return = adminer()->dumpHeaders($identifier, $multi_table);\n\t$output = $_POST[\"output\"];\n\tif ($output != \"text\") {\n\t\theader(\"Content-Disposition: attachment; filename=\" . adminer()->dumpFilename($identifier) . \".$return\" . ($output != \"file\" && preg_match('~^[0-9a-z]+$~', $output) ? \".$output\" : \"\"));\n\t}\n\tsession_write_close();\n\tif (!ob_get_level()) {\n\t\tob_start(null, 4096);\n\t}\n\tob_flush();\n\tflush();\n\treturn $return;\n}\n\n/** Print CSV row\n* @param string[] $row\n*/\nfunction dump_csv(array $row): void {\n\t$tsv = $_POST[\"format\"] == \"tsv\";\n\tforeach ($row as $key => $val) {\n\t\tif (preg_match('~[\"\\n]|^0[^.]|\\.\\d*0$|' . ($tsv ? '\\t' : '[,;]|^$') . '~', $val)) {\n\t\t\t$row[$key] = '\"' . str_replace('\"', '\"\"', $val) . '\"';\n\t\t}\n\t}\n\techo implode(($_POST[\"format\"] == \"csv\" ? \",\" : ($tsv ? \"\\t\" : \";\")), $row) . \"\\r\\n\";\n}\n\n/** Apply SQL function\n* @param string $column escaped column identifier\n*/\nfunction apply_sql_function(?string $function, string $column): string {\n\treturn ($function ? ($function == \"unixepoch\" ? \"DATETIME($column, '$function')\" : ($function == \"count distinct\" ? \"COUNT(DISTINCT \" : strtoupper(\"$function(\")) . \"$column)\") : $column);\n}\n\n/** Get path of the temporary directory */\nfunction get_temp_dir(): string {\n\t$return = ini_get(\"upload_tmp_dir\"); // session_save_path() may contain other storage path\n\tif (!$return) {\n\t\tif (function_exists('sys_get_temp_dir')) {\n\t\t\t$return = sys_get_temp_dir();\n\t\t} else {\n\t\t\t$filename = @tempnam(\"\", \"\"); // @ - temp directory can be disabled by open_basedir\n\t\t\tif (!$filename) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\t$return = dirname($filename);\n\t\t\tunlink($filename);\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Open and exclusively lock a file\n* @return resource|void null for error\n*/\nfunction file_open_lock(string $filename) {\n\tif (is_link($filename)) {\n\t\treturn; // https://cwe.mitre.org/data/definitions/61.html\n\t}\n\t$fp = @fopen($filename, \"c+\"); // @ - may not be writable\n\tif (!$fp) {\n\t\treturn;\n\t}\n\t@chmod($filename, 0660); // @ - may not be permitted\n\tif (!flock($fp, LOCK_EX)) {\n\t\tfclose($fp);\n\t\treturn;\n\t}\n\treturn $fp;\n}\n\n/** Write and unlock a file\n* @param resource $fp\n*/\nfunction file_write_unlock($fp, string $data): void {\n\trewind($fp);\n\tfwrite($fp, $data);\n\tftruncate($fp, strlen($data));\n\tfile_unlock($fp);\n}\n\n/** Unlock and close a file\n* @param resource $fp\n*/\nfunction file_unlock($fp): void {\n\tflock($fp, LOCK_UN);\n\tfclose($fp);\n}\n\n/** Get first element of an array\n* @param mixed[] $array\n* @return mixed if not found\n*/\nfunction first(array $array) {\n\t// reset(f()) triggers a notice\n\treturn reset($array);\n}\n\n/** Read password from file adminer.key in temporary directory or create one\n* @return string '' if the file can not be created\n*/\nfunction password_file(bool $create): string {\n\t$filename = get_temp_dir() . \"/adminer.key\";\n\tif (!$create && !file_exists($filename)) {\n\t\treturn '';\n\t}\n\t$fp = file_open_lock($filename);\n\tif (!$fp) {\n\t\treturn '';\n\t}\n\t$return = stream_get_contents($fp);\n\tif (!$return) {\n\t\t$return = rand_string();\n\t\tfile_write_unlock($fp, $return);\n\t} else {\n\t\tfile_unlock($fp);\n\t}\n\treturn $return;\n}\n\n/** Get a random string\n* @return string 32 hexadecimal characters\n*/\nfunction rand_string(): string {\n\treturn md5(uniqid(strval(mt_rand()), true));\n}\n\n/** Format value to use in select\n* @param string|string[]|list<string[]> $val\n* @param array{type: string} $field\n* @param ?numeric-string $text_length\n* @return string HTML\n*/\nfunction select_value($val, string $link, array $field, ?string $text_length): string {\n\tif (is_array($val)) {\n\t\t$return = \"\";\n\t\tif (array_filter($val, 'is_array') == array_values($val)) { // list of arrays\n\t\t\t$keys = array();\n\t\t\tforeach ($val as $v) {\n\t\t\t\t$keys += array_fill_keys(array_keys($v), null);\n\t\t\t}\n\t\t\tforeach (array_keys($keys) as $k) {\n\t\t\t\t$return .= \"<th>\" . h($k);\n\t\t\t}\n\t\t\tforeach ($val as $v) {\n\t\t\t\t$return .= \"<tr>\";\n\t\t\t\tforeach (array_merge($keys, $v) as $v2) {\n\t\t\t\t\t$return .= \"<td>\" . select_value($v2, $link, $field, $text_length);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tforeach ($val as $k => $v) {\n\t\t\t\t$return .= \"<tr>\"\n\t\t\t\t\t. ($val != array_values($val) ? \"<th>\" . h($k) : \"\")\n\t\t\t\t\t. \"<td>\" . select_value($v, $link, $field, $text_length)\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t\treturn \"<table>$return</table>\";\n\t}\n\tif (!$link) {\n\t\t$link = adminer()->selectLink($val, $field);\n\t}\n\tif ($link === null) {\n\t\tif (is_mail($val)) {\n\t\t\t$link = \"mailto:$val\";\n\t\t}\n\t\tif (is_url($val)) {\n\t\t\t$link = $val; // IE 11 and all modern browsers hide referrer\n\t\t}\n\t}\n\t$return = adminer()->editVal(driver()->value($val, $field), $field);\n\tif ($return !== null) {\n\t\tif (!is_utf8($return)) {\n\t\t\t$return = \"\\0\"; // htmlspecialchars of binary data returns an empty string\n\t\t} elseif ($text_length != \"\" && is_shortable($field)) {\n\t\t\t$return = shorten_utf8($return, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network\n\t\t} else {\n\t\t\t$return = h($return);\n\t\t}\n\t}\n\treturn adminer()->selectVal($return, $link, $field, $val);\n}\n\n/** Check whether the field type is blob or equivalent\n* @param array{type: string} $field\n*/\nfunction is_blob(array $field): bool {\n\treturn preg_match('~blob|bytea|raw|file~', $field[\"type\"]) && !in_array($field[\"type\"], idx(driver()->structuredTypes(), lang('User types'), array()));\n}\n\n/** Check whether the string is e-mail address */\nfunction is_mail(?string $email): bool {\n\t$atom = '[-a-z0-9!#$%&\\'*+/=?^_`{|}~]'; // characters of local-name\n\t$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component\n\t$pattern = \"$atom+(\\\\.$atom+)*@($domain?\\\\.)+$domain\";\n\treturn is_string($email) && preg_match(\"(^$pattern(,\\\\s*$pattern)*\\$)i\", $email);\n}\n\n/** Check whether the string is URL address */\nfunction is_url(?string $string): bool {\n\t$domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component //! IDN\n\treturn preg_match(\"~^((https?):)?//($domain?\\\\.)+$domain(:\\\\d+)?(/.*)?(\\\\?.*)?(#.*)?\\$~i\", $string); //! restrict path, query and fragment characters\n}\n\n/** Check if field should be shortened\n* @param array{type: string} $field\n*/\nfunction is_shortable(array $field): bool {\n\treturn !preg_match('~' . number_type() . '|date|time|year~', $field[\"type\"]);\n}\n\n/** Split server into host and (port or socket)\n* @return array{0: string, 1: string}\n*/\nfunction host_port(string $server) {\n\treturn (preg_match('~^(\\[(.+)]|([^:]+)):([^:]+)$~', $server, $match) // [a:b] - IPv6\n\t\t? array($match[2] . $match[3], $match[4])\n\t\t: array($server, '')\n\t);\n}\n\n/** Get query to compute number of found rows\n* @param list<string> $where\n* @param list<string> $group\n*/\nfunction count_rows(string $table, array $where, bool $is_group, array $group): string {\n\t$query = \" FROM \" . table($table) . ($where ? \" WHERE \" . implode(\" AND \", $where) : \"\");\n\treturn ($is_group && (JUSH == \"sql\" || count($group) == 1)\n\t\t? \"SELECT COUNT(DISTINCT \" . implode(\", \", $group) . \")$query\"\n\t\t: \"SELECT COUNT(*)\" . ($is_group ? \" FROM (SELECT 1$query GROUP BY \" . implode(\", \", $group) . \") x\" : $query)\n\t);\n}\n\n/** Run query which can be killed by AJAX call after timing out\n* @return string[]\n*/\nfunction slow_query(string $query): array {\n\t$db = adminer()->database();\n\t$timeout = adminer()->queryTimeout();\n\t$slow_query = driver()->slowQuery($query, $timeout);\n\t$connection2 = null;\n\tif (!$slow_query && support(\"kill\")) {\n\t\t$connection2 = connect();\n\t\tif ($connection2 && ($db == \"\" || $connection2->select_db($db))) {\n\t\t\t$kill = get_val(connection_id(), 0, $connection2); // MySQL and MySQLi can use thread_id but it's not in PDO_MySQL\n\t\t\techo script(\"const timeout = setTimeout(() => { ajax('\" . js_escape(ME) . \"script=kill', function () {}, 'kill=$kill&token=\" . get_token() . \"'); }, 1000 * $timeout);\");\n\t\t}\n\t}\n\tob_flush();\n\tflush();\n\t$return = @get_key_vals(($slow_query ?: $query), $connection2, false); // @ - may be killed\n\tif ($connection2) {\n\t\techo script(\"clearTimeout(timeout);\");\n\t\tob_flush();\n\t\tflush();\n\t}\n\treturn $return;\n}\n\n/** Generate BREACH resistant CSRF token */\nfunction get_token(): string {\n\t$rand = rand(1, 1e6);\n\treturn ($rand ^ $_SESSION[\"token\"]) . \":$rand\";\n}\n\n/** Verify if supplied CSRF token is valid */\nfunction verify_token(): bool {\n\tlist($token, $rand) = explode(\":\", $_POST[\"token\"]);\n\treturn ($rand ^ $_SESSION[\"token\"]) == $token;\n}\n\n// used in compiled version\nfunction lzw_decompress(string $binary): string {\n\t// convert binary string to codes\n\t$dictionary_count = 256;\n\t$bits = 8; // ceil(log($dictionary_count, 2))\n\t$codes = array();\n\t$rest = 0;\n\t$rest_length = 0;\n\tfor ($i=0; $i < strlen($binary); $i++) {\n\t\t$rest = ($rest << 8) + ord($binary[$i]);\n\t\t$rest_length += 8;\n\t\tif ($rest_length >= $bits) {\n\t\t\t$rest_length -= $bits;\n\t\t\t$codes[] = $rest >> $rest_length;\n\t\t\t$rest &= (1 << $rest_length) - 1;\n\t\t\t$dictionary_count++;\n\t\t\tif ($dictionary_count >> $bits) {\n\t\t\t\t$bits++;\n\t\t\t}\n\t\t}\n\t}\n\t// decompression\n\t/** @var list<?string> */\n\t$dictionary = range(\"\\0\", \"\\xFF\");\n\t$return = \"\";\n\t$word = \"\";\n\tforeach ($codes as $i => $code) {\n\t\t$element = $dictionary[$code];\n\t\tif (!isset($element)) {\n\t\t\t$element = $word . $word[0];\n\t\t}\n\t\t$return .= $element;\n\t\tif ($i) {\n\t\t\t$dictionary[] = $word . $element[0];\n\t\t}\n\t\t$word = $element;\n\t}\n\treturn $return;\n}\n"
  },
  {
    "path": "adminer/include/html.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n/** Return <script> element */\nfunction script(string $source, string $trailing = \"\\n\"): string {\n\treturn \"<script\" . nonce() . \">$source</script>$trailing\";\n}\n\n/** Return <script src> element */\nfunction script_src(string $url, bool $defer = false): string {\n\treturn \"<script src='\" . h($url) . \"'\" . nonce() . ($defer ? \" defer\" : \"\") . \"></script>\\n\";\n}\n\n/** Get a nonce=\"\" attribute with CSP nonce */\nfunction nonce(): string {\n\treturn ' nonce=\"' . get_nonce() . '\"';\n}\n\n/** Get <input type=\"hidden\">\n* @param string|int $value\n* @return string HTML\n*/\nfunction input_hidden(string $name, $value = \"\"): string {\n\treturn \"<input type='hidden' name='\" . h($name) . \"' value='\" . h($value) . \"'>\\n\";\n}\n\n/** Get CSRF <input type=\"hidden\" name=\"token\">\n* @return string HTML\n*/\nfunction input_token(): string {\n\treturn input_hidden(\"token\", get_token());\n}\n\n/** Get a target=\"_blank\" attribute */\nfunction target_blank(): string {\n\treturn ' target=\"_blank\" rel=\"noreferrer noopener\"';\n}\n\n/** Escape for HTML */\nfunction h(?string $string): string {\n\treturn str_replace(\"\\0\", \"&#0;\", htmlspecialchars($string, ENT_QUOTES, 'utf-8'));\n}\n\n/** Convert \\n to <br> */\nfunction nl_br(string $string): string {\n\treturn str_replace(\"\\n\", \"<br>\", $string); // nl2br() uses XHTML before PHP 5.3\n}\n\n/** Generate HTML checkbox\n* @param string|int $value\n*/\nfunction checkbox(string $name, $value, ?bool $checked, string $label = \"\", string $onclick = \"\", string $class = \"\", string $labelled_by = \"\"): string {\n\t$return = \"<input type='checkbox' name='$name' value='\" . h($value) . \"'\"\n\t\t. ($checked ? \" checked\" : \"\")\n\t\t. ($labelled_by ? \" aria-labelledby='$labelled_by'\" : \"\")\n\t\t. \">\"\n\t\t. ($onclick ? script(\"qsl('input').onclick = function () { $onclick };\", \"\") : \"\")\n\t;\n\treturn ($label != \"\" || $class ? \"<label\" . ($class ? \" class='$class'\" : \"\") . \">$return\" . h($label) . \"</label>\" : $return);\n}\n\n/** Generate list of HTML options\n* @param string[]|string[][] $options array of strings or arrays (creates optgroup)\n* @param mixed $selected\n* @param bool $use_keys always use array keys for value=\"\", otherwise only string keys are used\n*/\nfunction optionlist($options, $selected = null, bool $use_keys = false): string {\n\t$return = \"\";\n\tforeach ($options as $k => $v) {\n\t\t$opts = array($k => $v);\n\t\tif (is_array($v)) {\n\t\t\t$return .= '<optgroup label=\"' . h($k) . '\">';\n\t\t\t$opts = $v;\n\t\t}\n\t\tforeach ($opts as $key => $val) {\n\t\t\t$return .= '<option'\n\t\t\t\t. ($use_keys || is_string($key) ? ' value=\"' . h($key) . '\"' : '')\n\t\t\t\t. ($selected !== null && ($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '')\n\t\t\t\t. '>' . h($val)\n\t\t\t;\n\t\t}\n\t\tif (is_array($v)) {\n\t\t\t$return .= '</optgroup>';\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Generate HTML <select>\n* @param string[] $options\n*/\nfunction html_select(string $name, array $options, ?string $value = \"\", string $onchange = \"\", string $labelled_by = \"\"): string {\n\tstatic $label = 0;\n\t$label_option = \"\";\n\tif (!$labelled_by && substr($options[\"\"], 0, 1) == \"(\") {\n\t\t$label++;\n\t\t$labelled_by = \"label-$label\";\n\t\t$label_option = \"<option value='' id='$labelled_by'>\" . h($options[\"\"]);\n\t\tunset($options[\"\"]);\n\t}\n\treturn \"<select name='\" . h($name) . \"'\"\n\t\t. ($labelled_by ? \" aria-labelledby='$labelled_by'\" : \"\")\n\t\t. \">\" . $label_option . optionlist($options, $value) . \"</select>\"\n\t\t. ($onchange ? script(\"qsl('select').onchange = function () { $onchange };\", \"\") : \"\")\n\t;\n}\n\n/** Generate HTML radio list\n* @param string[] $options\n*/\nfunction html_radios(string $name, array $options, ?string $value = \"\", string $separator = \"\"): string {\n\t$return = \"\";\n\tforeach ($options as $key => $val) {\n\t\t$return .= \"<label><input type='radio' name='\" . h($name) . \"' value='\" . h($key) . \"'\" . ($key == $value ? \" checked\" : \"\") . \">\" . h($val) . \"</label>$separator\";\n\t}\n\treturn $return;\n}\n\n/** Get onclick confirmation */\nfunction confirm(string $message = \"\", string $selector = \"qsl('input')\"): string {\n\treturn script(\"$selector.onclick = () => confirm('\" . ($message ? js_escape($message) : lang('Are you sure?')) . \"');\", \"\");\n}\n\n/** Print header for hidden fieldset (close by </div></fieldset>)\n* @param bool $visible\n*/\nfunction print_fieldset(string $id, string $legend, $visible = false): void {\n\techo \"<fieldset><legend>\";\n\techo \"<a href='#fieldset-$id'>$legend</a>\";\n\techo script(\"qsl('a').onclick = partial(toggle, 'fieldset-$id');\", \"\");\n\techo \"</legend>\";\n\techo \"<div id='fieldset-$id'\" . ($visible ? \"\" : \" class='hidden'\") . \">\\n\";\n}\n\n/** Return class='active' if $bold is true */\nfunction bold(bool $bold, string $class = \"\"): string {\n\treturn ($bold ? \" class='active $class'\" : ($class ? \" class='$class'\" : \"\"));\n}\n\n/** Escape string for JavaScript apostrophes */\nfunction js_escape(string $string): string {\n\treturn addcslashes($string, \"\\r\\n'\\\\/\"); // slash for <script>\n}\n\n/** Generate page number for pagination */\nfunction pagination(int $page, ?int $current): string {\n\treturn \" \" . ($page == $current\n\t\t? $page + 1\n\t\t: '<a href=\"' . h(remove_from_uri(\"page\") . ($page ? \"&page=$page\" . ($_GET[\"next\"] ? \"&next=\" . urlencode($_GET[\"next\"]) : \"\") : \"\")) . '\">' . ($page + 1) . \"</a>\"\n\t);\n}\n\n/** Print hidden fields\n* @param mixed[] $process\n* @param list<string> $ignore\n*/\nfunction hidden_fields(array $process, array $ignore = array(), string $prefix = ''): bool {\n\t$return = false;\n\tforeach ($process as $key => $val) {\n\t\tif (!in_array($key, $ignore)) {\n\t\t\tif (is_array($val)) {\n\t\t\t\thidden_fields($val, array(), $key);\n\t\t\t} else {\n\t\t\t\t$return = true;\n\t\t\t\techo input_hidden(($prefix ? $prefix . \"[$key]\" : $key), $val);\n\t\t\t}\n\t\t}\n\t}\n\treturn $return;\n}\n\n/** Print hidden fields for GET forms */\nfunction hidden_fields_get(): void {\n\techo (sid() ? input_hidden(session_name(), session_id()) : '');\n\techo (SERVER !== null ? input_hidden(DRIVER, SERVER) : \"\");\n\techo input_hidden(\"username\", $_GET[\"username\"]);\n}\n\n/** Get <input type='file'> */\nfunction file_input(string $input): string {\n\t$max_file_uploads = \"max_file_uploads\";\n\t$max_file_uploads_value = ini_get($max_file_uploads);\n\t$upload_max_filesize = \"upload_max_filesize\";\n\t$upload_max_filesize_value = ini_get($upload_max_filesize);\n\treturn (ini_bool(\"file_uploads\")\n\t\t? $input . script(\"qsl('input[type=\\\"file\\\"]').onchange = partialArg(fileChange, \"\n\t\t\t\t. \"$max_file_uploads_value, '\" . lang('Increase %s.', \"$max_file_uploads = $max_file_uploads_value\") . \"', \" // ignore post_max_size because it is for all form fields together and bytes computing would be necessary\n\t\t\t\t. ini_bytes(\"upload_max_filesize\") . \", '\" . lang('Increase %s.', \"$upload_max_filesize = $upload_max_filesize_value\") . \"')\")\n\t\t: lang('File uploads are disabled.')\n\t);\n}\n\n/** Print enum or set input field\n* @param 'radio'|'checkbox' $type\n* @param Field $field\n* @param string|string[]|false|null $value false means original value\n*/\nfunction enum_input(string $type, string $attrs, array $field, $value, string $empty = \"\"): string {\n\tpreg_match_all(\"~'((?:[^']|'')*)'~\", $field[\"length\"], $matches);\n\t$prefix = ($field[\"type\"] == \"enum\" ? \"val-\" : \"\");\n\t$checked = (is_array($value) ? in_array(\"null\", $value) : $value === null);\n\t$return = ($field[\"null\"] && $prefix ? \"<label><input type='$type'$attrs value='null'\" . ($checked ? \" checked\" : \"\") . \"><i>$empty</i></label>\" : \"\");\n\tforeach ($matches[1] as $val) {\n\t\t$val = stripcslashes(str_replace(\"''\", \"'\", $val));\n\t\t$checked = (is_array($value) ? in_array($prefix . $val, $value) : $value === $val);\n\t\t$return .= \" <label><input type='$type'$attrs value='\" . h($prefix . $val) . \"'\" . ($checked ? ' checked' : '') . '>' . h(adminer()->editVal($val, $field)) . '</label>';\n\t}\n\treturn $return;\n}\n\n/** Print edit input field\n* @param Field|RoutineField $field\n* @param mixed $value\n*/\nfunction input(array $field, $value, ?string $function, ?bool $autofocus = false): void {\n\t$name = h(bracket_escape($field[\"field\"]));\n\techo \"<td class='function'>\";\n\tif (is_array($value) && !$function) {\n\t\t$function = \"json\";\n\t}\n\t$json = ($function == \"json\" || preg_match('~^jsonb?$~', $field[\"type\"]));\n\tif ($json && $value != '' && (JUSH != \"pgsql\" || $field[\"type\"] != \"json\")) {\n\t\t$value = json_encode(is_array($value) ? $value : json_decode($value), 128 | 64 | 256); // 128 - JSON_PRETTY_PRINT, 64 - JSON_UNESCAPED_SLASHES, 256 - JSON_UNESCAPED_UNICODE available since PHP 5.4\n\t}\n\t$reset = (JUSH == \"mssql\" && $field[\"auto_increment\"]);\n\tif ($reset && !$_POST[\"save\"]) {\n\t\t$function = null;\n\t}\n\t$functions = (isset($_GET[\"select\"]) || $reset ? array(\"orig\" => lang('original')) : array()) + adminer()->editFunctions($field);\n\t$enums = driver()->enumLength($field);\n\tif ($enums) {\n\t\t$field[\"type\"] = \"enum\";\n\t\t$field[\"length\"] = $enums;\n\t}\n\t$attrs = \" name='fields[$name]\" . ($field[\"type\"] == \"enum\" || $field[\"type\"] == \"set\" ? \"[]\" : \"\") . \"'\" . ($autofocus ? \" autofocus\" : \"\");\n\techo driver()->unconvertFunction($field) . \" \";\n\t$table = $_GET[\"edit\"] ?: $_GET[\"select\"];\n\tif ($field[\"type\"] == \"enum\") {\n\t\techo h($functions[\"\"]) . \"<td>\" . adminer()->editInput($table, $field, $attrs, $value);\n\t} else {\n\t\t$has_function = (in_array($function, $functions) || isset($functions[$function]));\n\t\techo (count($functions) > 1\n\t\t\t? \"<select name='function[$name]'>\" . optionlist($functions, $function === null || $has_function ? $function : \"\") . \"</select>\"\n\t\t\t\t. on_help(\"event.target.value.replace(/^SQL\\$/, '')\", 1)\n\t\t\t\t. script(\"qsl('select').onchange = functionChange;\", \"\")\n\t\t\t: h(reset($functions))\n\t\t) . '<td>';\n\t\t$input = adminer()->editInput($table, $field, $attrs, $value); // usage in call is without a table\n\t\tif ($input != \"\") {\n\t\t\techo $input;\n\t\t} elseif (preg_match('~bool~', $field[\"type\"])) {\n\t\t\techo \"<input type='hidden'$attrs value='0'>\"\n\t\t\t\t. \"<input type='checkbox'\" . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? \" checked='checked'\" : \"\") . \"$attrs value='1'>\";\n\t\t} elseif ($field[\"type\"] == \"set\") {\n\t\t\techo enum_input(\"checkbox\", $attrs, $field, (is_string($value) ? explode(\",\", $value) : $value));\n\t\t} elseif (is_blob($field) && ini_bool(\"file_uploads\")) {\n\t\t\techo \"<input type='file' name='fields-$name'>\";\n\t\t} elseif ($json) {\n\t\t\techo \"<textarea$attrs cols='50' rows='12' class='jush-js'>\" . h($value) . '</textarea>';\n\t\t} elseif (($text = preg_match('~text|lob|memo~i', $field[\"type\"])) || preg_match(\"~\\n~\", $value)) {\n\t\t\tif ($text && JUSH != \"sqlite\") {\n\t\t\t\t$attrs .= \" cols='50' rows='12'\";\n\t\t\t} else {\n\t\t\t\t$rows = min(12, substr_count($value, \"\\n\") + 1);\n\t\t\t\t$attrs .= \" cols='30' rows='$rows'\";\n\t\t\t}\n\t\t\techo \"<textarea$attrs>\" . h($value) . '</textarea>';\n\t\t} else {\n\t\t\t// int(3) is only a display hint\n\t\t\t$types = driver()->types();\n\t\t\t$maxlength = (!preg_match('~int~', $field[\"type\"]) && preg_match('~^(\\d+)(,(\\d+))?$~', $field[\"length\"], $match)\n\t\t\t\t? ((preg_match(\"~binary~\", $field[\"type\"]) ? 2 : 1) * $match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field[\"unsigned\"] ? 1 : 0))\n\t\t\t\t: ($types[$field[\"type\"]] ? $types[$field[\"type\"]] + ($field[\"unsigned\"] ? 0 : 1) : 0)\n\t\t\t);\n\t\t\tif (JUSH == 'sql' && min_version(5.6) && preg_match('~time~', $field[\"type\"])) {\n\t\t\t\t$maxlength += 7; // microtime\n\t\t\t}\n\t\t\t// type='date' and type='time' display localized value which may be confusing, type='datetime' uses 'T' as date and time separator\n\t\t\techo \"<input\"\n\t\t\t\t. ((!$has_function || $function === \"\") && preg_match('~(?<!o)int(?!er)~', $field[\"type\"]) && !preg_match('~\\[\\]~', $field[\"full_type\"]) ? \" type='number'\" : \"\")\n\t\t\t\t. \" value='\" . h($value) . \"'\" . ($maxlength ? \" data-maxlength='$maxlength'\" : \"\")\n\t\t\t\t. (preg_match('~char|binary~', $field[\"type\"]) && $maxlength > 20 ? \" size='\" . ($maxlength > 99 ? 60 : 40) . \"'\" : \"\")\n\t\t\t\t. \"$attrs>\"\n\t\t\t;\n\t\t}\n\t\techo adminer()->editHint($table, $field, $value);\n\t\t// skip 'original'\n\t\t$first = 0;\n\t\tforeach ($functions as $key => $val) {\n\t\t\tif ($key === \"\" || !$val) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t$first++;\n\t\t}\n\t\tif ($first && count($functions) > 1) {\n\t\t\techo script(\"qsl('td').oninput = partial(skipOriginal, $first);\");\n\t\t}\n\t}\n}\n\n/** Process edit input field\n* @param Field|RoutineField $field\n* @return mixed false to leave the original value\n*/\nfunction process_input(array $field) {\n\t$idf = bracket_escape($field[\"field\"]);\n\t$function = idx($_POST[\"function\"], $idf);\n\t$value = idx($_POST[\"fields\"], $idf);\n\tif ($value === null) {\n\t\treturn false;\n\t}\n\tif ($field[\"type\"] == \"enum\" || driver()->enumLength($field)) {\n\t\t$value = idx($value, 0);\n\t\tif ($value == \"orig\" || !$value) {\n\t\t\treturn false;\n\t\t}\n\t\tif ($value == \"null\") {\n\t\t\treturn \"NULL\";\n\t\t}\n\t\t$value = substr($value, 4); // 4 - strlen(\"val-\")\n\t}\n\tif ($field[\"auto_increment\"] && $value == \"\") {\n\t\treturn null;\n\t}\n\tif ($function == \"orig\") {\n\t\treturn (preg_match('~^CURRENT_TIMESTAMP~i', $field[\"on_update\"]) ? idf_escape($field[\"field\"]) : false);\n\t}\n\tif ($function == \"NULL\") {\n\t\treturn \"NULL\";\n\t}\n\tif ($field[\"type\"] == \"set\") {\n\t\t$value = implode(\",\", (array) $value);\n\t}\n\tif ($function == \"json\") {\n\t\t$function = \"\";\n\t\t$value = json_decode($value, true);\n\t\tif (!is_array($value)) {\n\t\t\treturn false; //! report errors\n\t\t}\n\t\treturn $value;\n\t}\n\tif (is_blob($field) && ini_bool(\"file_uploads\")) {\n\t\t$file = get_file(\"fields-$idf\");\n\t\tif (!is_string($file)) {\n\t\t\treturn false; //! report errors\n\t\t}\n\t\treturn driver()->quoteBinary($file);\n\t}\n\treturn adminer()->processInput($field, $value, $function);\n}\n\n/** Print results of search in all tables\n* @uses $_GET[\"where\"][0]\n* @uses $_POST[\"tables\"]\n*/\nfunction search_tables(): void {\n\t$_GET[\"where\"][0][\"val\"] = $_POST[\"query\"];\n\t$sep = \"<ul>\\n\";\n\tforeach (table_status('', true) as $table => $table_status) {\n\t\t$name = adminer()->tableName($table_status);\n\t\tif (isset($table_status[\"Engine\"]) && $name != \"\" && (!$_POST[\"tables\"] || in_array($table, $_POST[\"tables\"]))) {\n\t\t\t$result = connection()->query(\"SELECT\" . limit(\"1 FROM \" . table($table), \" WHERE \" . implode(\" AND \", adminer()->selectSearchProcess(fields($table), array())), 1));\n\t\t\tif (!$result || $result->fetch_row()) {\n\t\t\t\t$print = \"<a href='\" . h(ME . \"select=\" . urlencode($table) . \"&where[0][op]=\" . urlencode($_GET[\"where\"][0][\"op\"]) . \"&where[0][val]=\" . urlencode($_GET[\"where\"][0][\"val\"])) . \"'>$name</a>\";\n\t\t\t\techo \"$sep<li>\" . ($result ? $print : \"<p class='error'>$print: \" . error()) . \"\\n\";\n\t\t\t\t$sep = \"\";\n\t\t\t}\n\t\t}\n\t}\n\techo ($sep ? \"<p class='message'>\" . lang('No tables.') : \"</ul>\") . \"\\n\";\n}\n\n/** Return events to display help on mouse over\n* @param string $command JS expression\n* @param int $side 0 top, 1 left\n*/\nfunction on_help(string $command, int $side = 0): string {\n\treturn script(\"mixin(qsl('select, input'), {onmouseover: function (event) { helpMouseover.call(this, event, $command, $side) }, onmouseout: helpMouseout});\", \"\");\n}\n\n/** Print edit data form\n* @param Field[] $fields\n* @param mixed $row\n*/\nfunction edit_form(string $table, array $fields, $row, ?bool $update, string $error = ''): void {\n\t$table_name = adminer()->tableName(table_status1($table, true));\n\tpage_header(\n\t\t($update ? lang('Edit') : lang('Insert')),\n\t\t$error,\n\t\tarray(\"select\" => array($table, $table_name)),\n\t\t$table_name\n\t);\n\tadminer()->editRowPrint($table, $fields, $row, $update);\n\tif ($row === false) {\n\t\techo \"<p class='error'>\" . lang('No rows.') . \"\\n\";\n\t\treturn;\n\t}\n\techo \"<form action='' method='post' enctype='multipart/form-data' id='form'>\\n\";\n\t$editable = false;\n\tif (!$fields) {\n\t\techo \"<p class='error'>\" . lang('You have no privileges to update this table.') . \"\\n\";\n\t} else {\n\t\techo \"<table class='layout'>\" . script(\"qsl('table').onkeydown = editingKeydown;\");\n\t\t$autofocus = !$_POST;\n\t\tforeach ($fields as $name => $field) {\n\t\t\techo \"<tr><th>\" . adminer()->fieldName($field);\n\t\t\t$default = idx($_GET[\"set\"], bracket_escape($name));\n\t\t\tif ($default === null) {\n\t\t\t\t$default = $field[\"default\"];\n\t\t\t\tif ($field[\"type\"] == \"bit\" && preg_match(\"~^b'([01]*)'\\$~\", $default, $regs)) {\n\t\t\t\t\t$default = $regs[1];\n\t\t\t\t}\n\t\t\t\tif (JUSH == \"sql\" && preg_match('~binary~', $field[\"type\"])) {\n\t\t\t\t\t$default = bin2hex($default); // same as UNHEX\n\t\t\t\t}\n\t\t\t}\n\t\t\t$value = ($row !== null\n\t\t\t\t? ($row[$name] != \"\" && JUSH == \"sql\" && preg_match(\"~enum|set~\", $field[\"type\"]) && is_array($row[$name])\n\t\t\t\t\t? implode(\",\", $row[$name])\n\t\t\t\t\t: (is_bool($row[$name]) ? +$row[$name] : $row[$name])\n\t\t\t\t)\n\t\t\t\t: (!$update && $field[\"auto_increment\"]\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: (isset($_GET[\"select\"]) ? false : $default)\n\t\t\t\t)\n\t\t\t);\n\t\t\tif (!$_POST[\"save\"] && is_string($value)) {\n\t\t\t\t$value = adminer()->editVal($value, $field);\n\t\t\t}\n\t\t\tif (($update && !isset($field[\"privileges\"][\"update\"])) || $field[\"generated\"]) {\n\t\t\t\techo \"<td class='function'><td>\" . select_value($value, '', $field, null);\n\t\t\t} else {\n\t\t\t\t$editable = true;\n\t\t\t\t$function = ($_POST[\"save\"]\n\t\t\t\t\t? idx($_POST[\"function\"], $name, \"\")\n\t\t\t\t\t: ($update && preg_match('~^CURRENT_TIMESTAMP~i', $field[\"on_update\"])\n\t\t\t\t\t\t? \"now\"\n\t\t\t\t\t\t: ($value === false ? null : ($value !== null ? '' : 'NULL'))\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t\tif (!$_POST && !$update && $value == $field[\"default\"] && preg_match('~^[\\w.]+\\(~', $value)) {\n\t\t\t\t\t$function = \"SQL\";\n\t\t\t\t}\n\t\t\t\tif (preg_match(\"~time~\", $field[\"type\"]) && preg_match('~^CURRENT_TIMESTAMP~i', $value)) {\n\t\t\t\t\t$value = \"\";\n\t\t\t\t\t$function = \"now\";\n\t\t\t\t}\n\t\t\t\tif ($field[\"type\"] == \"uuid\" && $value == \"uuid()\") {\n\t\t\t\t\t$value = \"\";\n\t\t\t\t\t$function = \"uuid\";\n\t\t\t\t}\n\t\t\t\tif ($autofocus !== false) {\n\t\t\t\t\t$autofocus = ($field[\"auto_increment\"] || $function == \"now\" || $function == \"uuid\" ? null : true); // null - don't autofocus this input but check the next one\n\t\t\t\t}\n\t\t\t\tinput($field, $value, $function, $autofocus);\n\t\t\t\tif ($autofocus) {\n\t\t\t\t\t$autofocus = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\techo \"\\n\";\n\t\t}\n\t\tif (!support(\"table\") && !fields($table)) {\n\t\t\techo \"<tr>\"\n\t\t\t\t. \"<th><input name='field_keys[]'>\"\n\t\t\t\t. script(\"qsl('input').oninput = fieldChange;\")\n\t\t\t\t. \"<td class='function'>\" . html_select(\"field_funs[]\", adminer()->editFunctions(array(\"null\" => isset($_GET[\"select\"]))))\n\t\t\t\t. \"<td><input name='field_vals[]'>\"\n\t\t\t\t. \"\\n\"\n\t\t\t;\n\t\t}\n\t\techo \"</table>\\n\";\n\t}\n\techo \"<p>\\n\";\n\tif ($editable) {\n\t\techo \"<input type='submit' value='\" . lang('Save') . \"'>\\n\";\n\t\tif (!isset($_GET[\"select\"])) {\n\t\t\techo \"<input type='submit' name='insert' value='\" . ($update\n\t\t\t\t? lang('Save and continue edit')\n\t\t\t\t: lang('Save and insert next')\n\t\t\t) . \"' title='Ctrl+Shift+Enter'>\\n\";\n\t\t\techo ($update ? script(\"qsl('input').onclick = function () { return !ajaxForm(this.form, '\" . lang('Saving') . \"…', this); };\") : \"\");\n\t\t}\n\t}\n\techo ($update ? \"<input type='submit' name='delete' value='\" . lang('Delete') . \"'>\" . confirm() . \"\\n\" : \"\");\n\tif (isset($_GET[\"select\"])) {\n\t\thidden_fields(array(\"check\" => (array) $_POST[\"check\"], \"clone\" => $_POST[\"clone\"], \"all\" => $_POST[\"all\"]));\n\t}\n\techo input_hidden(\"referer\", (isset($_POST[\"referer\"]) ? $_POST[\"referer\"] : $_SERVER[\"HTTP_REFERER\"]));\n\techo input_hidden(\"save\", 1);\n\techo input_token();\n\techo \"</form>\\n\";\n}\n\n/** Shorten UTF-8 string\n* @return string escaped string with appended ...\n*/\nfunction shorten_utf8(string $string, int $length = 80, string $suffix = \"\"): string {\n\tif (!preg_match(\"(^(\" . repeat_pattern(\"[\\t\\r\\n -\\x{10FFFF}]\", $length) . \")($)?)u\", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\\n) is slow\n\t\tpreg_match(\"(^(\" . repeat_pattern(\"[\\t\\r\\n -~]\", $length) . \")($)?)\", $string, $match);\n\t}\n\treturn h($match[1]) . $suffix . (isset($match[2]) ? \"\" : \"<i>…</i>\");\n}\n\n/** Get button with icon */\nfunction icon(string $icon, string $name, string $html, string $title): string {\n\treturn \"<button type='submit' name='$name' title='\" . h($title) . \"' class='icon icon-$icon'><span>$html</span></button>\";\n}\n"
  },
  {
    "path": "adminer/include/lang.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n/** Translate string\n* @param literal-string $idf\n* @param float|string $number\n*/\nfunction lang(string $idf, $number = null): string {\n\t$args = func_get_args();\n\t// this is matched by compile.php\n\t$args[0] = Lang::$translations[$idf] ?: $idf;\n\treturn call_user_func_array('Adminer\\lang_format', $args);\n}\n\n/** Format translation, usable also by plugins\n* @param string|list<string> $translation\n* @param float|string $number\n*/\nfunction lang_format($translation, $number = null): string {\n\tif (is_array($translation)) {\n\t\t// this is matched by compile.php\n\t\t$pos = ($number == 1 ? 0\n\t\t\t: (LANG == 'cs' || LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other\n\t\t\t: (LANG == 'fr' ? (!$number ? 0 : 1) // different forms for 0-1, other\n\t\t\t: (LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4 except 12-14, other\n\t\t\t: (LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other\n\t\t\t: (LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other\n\t\t\t: (LANG == 'lv' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number ? 1 : 2)) // different forms for 1 except 11, other, 0\n\t\t\t: (in_array(LANG, array('bs', 'hr', 'ru', 'sr', 'uk')) ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other\n\t\t\t: 1)))))))) // different forms for 1, other\n\t\t; // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html\n\t\t$translation = $translation[$pos];\n\t}\n\t$translation = str_replace(\"'\", '’', $translation); // translations can contain HTML or be used in optionlist (we couldn't escape them here) but they can also be used e.g. in title='' //! escape plaintext translations\n\t$args = func_get_args();\n\tarray_shift($args);\n\t$format = str_replace(\"%d\", \"%s\", $translation);\n\tif ($format != $translation) {\n\t\t$args[0] = format_number($number);\n\t}\n\treturn vsprintf($format, $args);\n}\n\n// this is matched by compile.php\n// not used in a single language version from here\n\n/** Get available languages\n* @return string[]\n*/\nfunction langs(): array {\n\treturn array(\n\t\t'en' => 'English', // Jakub Vrána - https://www.vrana.cz\n\t\t'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr\n\t\t'bg' => 'Български', // Deyan Delchev\n\t\t'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com, Hossain Ahmed Saiman - hossain.ahmed@altscope.com\n\t\t'bs' => 'Bosanski', // Emir Kurtovic\n\t\t'ca' => 'Català', // Joan Llosas\n\t\t'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz\n\t\t'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk\n\t\t'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com\n\t\t'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr\n\t\t'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com\n\t\t'et' => 'Eesti', // Priit Kallas\n\t\t'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com\n\t\t'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/\n\t\t'fr' => 'Français', // Francis Gagné, Aurélien Royer\n\t\t'gl' => 'Galego', // Eduardo Penabad Ramos\n\t\t'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/\n\t\t'hi' => 'हिन्दी', // Joshi yogesh\n\t\t'hr' => 'Hrvatski', // Nikola Paradžik\n\t\t'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu\n\t\t'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org\n\t\t'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti\n\t\t'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/\n\t\t'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org\n\t\t'ko' => '한국어', // dalli - skcha67@gmail.com\n\t\t'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt\n\t\t'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com\n\t\t'ms' => 'Bahasa Melayu', // Pisyek\n\t\t'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be\n\t\t'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com\n\t\t'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/\n\t\t'pt' => 'Português', // André Dias\n\t\t'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br\n\t\t'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com\n\t\t'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/\n\t\t'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz\n\t\t'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com\n\t\t'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com\n\t\t'sv' => 'Svenska', // rasmusolle - https://github.com/rasmusolle\n\t\t'ta' => 'த‌மிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com\n\t\t'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/\n\t\t'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com\n\t\t'uk' => 'Українська', // Valerii Kryzhov\n\t\t'uz' => 'Oʻzbekcha', // Junaydullaev Inoyatullokhon - https://av.uz/\n\t\t'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail\n\t\t'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com\n\t\t'zh-tw' => '繁體中文', // http://tzangms.com\n\t);\n}\n\nfunction switch_lang(): void {\n\techo \"<form action='' method='post'>\\n<div id='lang'>\";\n\techo \"<label>\" . lang('Language') . \": \" . html_select(\"lang\", langs(), LANG, \"this.form.submit();\") . \"</label>\";\n\techo \" <input type='submit' value='\" . lang('Use') . \"' class='hidden'>\\n\";\n\techo input_token();\n\techo \"</div>\\n</form>\\n\";\n}\n\nif (isset($_POST[\"lang\"]) && verify_token()) { // $error not yet available\n\tcookie(\"adminer_lang\", $_POST[\"lang\"]);\n\t$_SESSION[\"lang\"] = $_POST[\"lang\"]; // cookies may be disabled\n\tredirect(remove_from_uri());\n}\n\n$LANG = \"en\";\nif (idx(langs(), $_COOKIE[\"adminer_lang\"])) {\n\tcookie(\"adminer_lang\", $_COOKIE[\"adminer_lang\"]);\n\t$LANG = $_COOKIE[\"adminer_lang\"];\n} elseif (idx(langs(), $_SESSION[\"lang\"])) {\n\t$LANG = $_SESSION[\"lang\"];\n} else {\n\t$accept_language = array();\n\tpreg_match_all('~([-a-z]+)(;q=([0-9.]+))?~', str_replace(\"_\", \"-\", strtolower($_SERVER[\"HTTP_ACCEPT_LANGUAGE\"])), $matches, PREG_SET_ORDER);\n\tforeach ($matches as $match) {\n\t\t$accept_language[$match[1]] = (isset($match[3]) ? $match[3] : 1);\n\t}\n\tarsort($accept_language);\n\tforeach ($accept_language as $key => $q) {\n\t\tif (idx(langs(), $key)) {\n\t\t\t$LANG = $key;\n\t\t\tbreak;\n\t\t}\n\t\t$key = preg_replace('~-.*~', '', $key);\n\t\tif (!isset($accept_language[$key]) && idx(langs(), $key)) {\n\t\t\t$LANG = $key;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\ndefine('Adminer\\LANG', $LANG);\n\nclass Lang {\n\t/** @var array<literal-string, string|list<string>> */ static array $translations;\n}\n"
  },
  {
    "path": "adminer/include/pdo.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// PDO can be used in several database drivers\nif (extension_loaded('pdo')) {\n\tabstract class PdoDb extends SqlDb {\n\t\tprotected \\PDO $pdo;\n\n\t\t/** Connect to server using DSN\n\t\t* @param mixed[] $options\n\t\t* @return string error message\n\t\t*/\n\t\tfunction dsn(string $dsn, string $username, string $password, array $options = array()): string {\n\t\t\t$options[\\PDO::ATTR_ERRMODE] = \\PDO::ERRMODE_SILENT;\n\t\t\t$options[\\PDO::ATTR_STATEMENT_CLASS] = array('Adminer\\PdoResult');\n\t\t\ttry {\n\t\t\t\t$this->pdo = new \\PDO($dsn, $username, $password, $options);\n\t\t\t} catch (\\Exception $ex) {\n\t\t\t\treturn $ex->getMessage();\n\t\t\t}\n\t\t\t$this->server_info = @$this->pdo->getAttribute(\\PDO::ATTR_SERVER_VERSION);\n\t\t\treturn '';\n\t\t}\n\n\t\tfunction quote(string $string): string {\n\t\t\treturn $this->pdo->quote($string);\n\t\t}\n\n\t\tfunction query(string $query, bool $unbuffered = false) {\n\t\t\t/** @var Result|bool */\n\t\t\t$result = $this->pdo->query($query);\n\t\t\t$this->error = \"\";\n\t\t\tif (!$result) {\n\t\t\t\tlist(, $this->errno, $this->error) = $this->pdo->errorInfo();\n\t\t\t\tif (!$this->error) {\n\t\t\t\t\t$this->error = lang('Unknown error.');\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$this->store_result($result);\n\t\t\treturn $result;\n\t\t}\n\n\t\tfunction store_result($result = null) {\n\t\t\tif (!$result) {\n\t\t\t\t$result = $this->multi;\n\t\t\t\tif (!$result) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($result->columnCount()) {\n\t\t\t\t$result->num_rows = $result->rowCount(); // is not guaranteed to work with all drivers\n\t\t\t\treturn $result;\n\t\t\t}\n\t\t\t$this->affected_rows = $result->rowCount();\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction next_result(): bool {\n\t\t\t/** @var PdoResult|bool */\n\t\t\t$result = $this->multi;\n\t\t\tif (!is_object($result)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$result->_offset = 0;\n\t\t\treturn @$result->nextRowset(); // @ - PDO_PgSQL doesn't support it\n\t\t}\n\t}\n\n\tclass PdoResult extends \\PDOStatement {\n\t\tpublic $_offset = 0, $num_rows;\n\n\t\tfunction fetch_assoc() {\n\t\t\treturn $this->fetch_array(\\PDO::FETCH_ASSOC);\n\t\t}\n\n\t\tfunction fetch_row() {\n\t\t\treturn $this->fetch_array(\\PDO::FETCH_NUM);\n\t\t}\n\n\t\tprivate function fetch_array(int $mode) {\n\t\t\t$return = $this->fetch($mode);\n\t\t\treturn ($return ? array_map(array($this, 'unresource'), $return) : $return);\n\t\t}\n\n\t\tprivate function unresource($val) {\n\t\t\treturn (is_resource($val) ? stream_get_contents($val) : $val);\n\t\t}\n\n\t\tfunction fetch_field(): \\stdClass {\n\t\t\t$row = (object) $this->getColumnMeta($this->_offset++);\n\t\t\t$type = $row->pdo_type;\n\t\t\t$row->type = ($type == \\PDO::PARAM_INT ? 0 : 15);\n\t\t\t$row->charsetnr = ($type == \\PDO::PARAM_LOB || (isset($row->flags) && in_array(\"blob\", (array) $row->flags)) ? 63 : 0);\n\t\t\treturn $row;\n\t\t}\n\n\t\tfunction seek($offset) {\n\t\t\tfor ($i=0; $i < $offset; $i++) {\n\t\t\t\t$this->fetch();\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "adminer/include/plugin.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n// the overridable methods don't use return type declarations so that plugins can be compatible with PHP 5\nabstract class Plugin {\n\t/** @var array<literal-string, string|list<string>>[] */ protected $translations = array(); // key is language code\n\n\t/** Get plain text plugin description; empty string means to use the first line of class doc-comment\n\t* @return string\n\t*/\n\tfunction description() {\n\t\treturn $this->lang('');\n\t}\n\n\t/** Get URL of plugin screenshot\n\t* @return string\n\t*/\n\tfunction screenshot() {\n\t\treturn \"\";\n\t}\n\n\t/** Translate a string from $this->translations; Adminer\\lang() doesn't work for single language versions\n\t* @param literal-string $idf\n\t* @param float|string $number\n\t*/\n\tprotected function lang(string $idf, $number = null): string {\n\t\t$args = func_get_args();\n\t\t$args[0] = idx($this->translations[LANG], $idf) ?: $idf;\n\t\treturn call_user_func_array('Adminer\\lang_format', $args);\n\t}\n}\n"
  },
  {
    "path": "adminer/include/plugins.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nclass Plugins {\n\t/** @var true[] */ private static array $append = array('dumpFormat' => true, 'dumpOutput' => true, 'editRowPrint' => true, 'editFunctions' => true, 'config' => true); // these hooks expect the value to be appended to the result\n\n\t/** @var list<object> @visibility protected(set) */ public array $plugins;\n\t/** @visibility protected(set) */ public string $error = ''; // HTML\n\t/** @var list<object>[] */ private array $hooks = array();\n\n\t/** Register plugins\n\t* @param ?list<object> $plugins object instances or null to autoload plugins from adminer-plugins/\n\t*/\n\tfunction __construct(?array $plugins) {\n\t\tif ($plugins === null) {\n\t\t\t$plugins = array();\n\t\t\t$basename = \"adminer-plugins\";\n\t\t\tif (is_dir($basename)) {\n\t\t\t\tforeach (glob(\"$basename/*.php\") as $filename) {\n\t\t\t\t\t$this->includeOnce($filename);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$help = \" href='https://www.adminer.org/plugins/#use'\" . target_blank();\n\t\t\tif (file_exists(\"$basename.php\")) {\n\t\t\t\t$include = $this->includeOnce(\"$basename.php\"); // example: return array(new AdminerLoginOtp($secret));\n\t\t\t\tif (is_array($include)) {\n\t\t\t\t\tforeach ($include as $plugin) {\n\t\t\t\t\t\t$plugins[get_class($plugin)] = $plugin;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$this->error .= lang('%s must <a%s>return an array</a>.', \"<b>$basename.php</b>\", $help) . \"<br>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tforeach (get_declared_classes() as $class) {\n\t\t\t\tif (!$plugins[$class] && (preg_match('~^Adminer\\w~i', $class) || is_subclass_of($class, 'Adminer\\Plugin'))) {\n\t\t\t\t\t// we need to use reflection because PHP 7.1 throws ArgumentCountError for missing arguments but older versions issue a warning\n\t\t\t\t\t$reflection = new \\ReflectionClass($class);\n\t\t\t\t\t$constructor = $reflection->getConstructor();\n\t\t\t\t\tif ($constructor && $constructor->getNumberOfRequiredParameters()) {\n\t\t\t\t\t\t$this->error .= lang('<a%s>Configure</a> %s in %s.', $help, \"<b>$class</b>\", \"<b>$basename.php</b>\") . \"<br>\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$plugins[$class] = new $class;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t$this->plugins = $plugins;\n\n\t\t$adminer = new Adminer;\n\t\t$plugins[] = $adminer;\n\t\t$reflection = new \\ReflectionObject($adminer);\n\t\tforeach ($reflection->getMethods() as $method) {\n\t\t\tforeach ($plugins as $plugin) {\n\t\t\t\t$name = $method->getName();\n\t\t\t\tif (method_exists($plugin, $name)) {\n\t\t\t\t\t$this->hooks[$name][] = $plugin;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Separate function to not overwrite local variables\n\t* @return array<object>|true\n\t*/\n\tfunction includeOnce(string $filename) {\n\t\treturn include_once \"./$filename\";\n\t}\n\n\t/**\n\t* @param literal-string $name\n\t* @param mixed[] $params\n\t* @return mixed\n\t*/\n\tfunction __call(string $name, array $params) {\n\t\t$args = array();\n\t\tforeach ($params as $key => $val) {\n\t\t\t// some plugins accept params by reference - we don't need to propagate it outside, just to the other plugins\n\t\t\t$args[] = &$params[$key];\n\t\t}\n\t\t$return = null;\n\t\tforeach ($this->hooks[$name] as $plugin) {\n\t\t\t$value = call_user_func_array(array($plugin, $name), $args);\n\t\t\tif ($value !== null) {\n\t\t\t\tif (!self::$append[$name]) { // non-null value from non-appending method short-circuits the other plugins\n\t\t\t\t\treturn $value;\n\t\t\t\t}\n\t\t\t\t$return = $value + (array) $return;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n}\n"
  },
  {
    "path": "adminer/include/tmpfile.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nclass TmpFile {\n\t/** @var resource */ private $handler;\n\t/** @visibility protected(set) */ public int $size;\n\n\tfunction __construct() {\n\t\t$this->handler = tmpfile();\n\t}\n\n\tfunction write(string $contents): void {\n\t\t$this->size += strlen($contents);\n\t\tfwrite($this->handler, $contents);\n\t}\n\n\tfunction send(): void {\n\t\tfseek($this->handler, 0);\n\t\tfpassthru($this->handler);\n\t\tfclose($this->handler);\n\t}\n}\n"
  },
  {
    "path": "adminer/include/version.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nconst VERSION = \"5.4.3-dev\";\n"
  },
  {
    "path": "adminer/include/xxtea.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n/** PHP implementation of XXTEA encryption algorithm\n* @author Ma Bingyao <andot@ujn.edu.cn>\n* @link http://www.coolcode.cn/?action=show&id=128\n*/\n\nfunction int32(int $n): int {\n\twhile ($n >= 2147483648) {\n\t\t$n -= 4294967296;\n\t}\n\twhile ($n <= -2147483649) {\n\t\t$n += 4294967296;\n\t}\n\treturn (int) $n;\n}\n\n/**\n* @param int[] $v\n*/\nfunction long2str(array $v, bool $w): string {\n\t$s = '';\n\tforeach ($v as $val) {\n\t\t$s .= pack('V', $val);\n\t}\n\tif ($w) {\n\t\treturn substr($s, 0, end($v));\n\t}\n\treturn $s;\n}\n\n/**\n* @return int[]\n*/\nfunction str2long(string $s, bool $w): array {\n\t$v = array_values(unpack('V*', str_pad($s, 4 * ceil(strlen($s) / 4), \"\\0\")));\n\tif ($w) {\n\t\t$v[] = strlen($s);\n\t}\n\treturn $v;\n}\n\nfunction xxtea_mx(int $z, int $y, int $sum, int $k): int {\n\treturn int32((($z >> 5 & 0x7FFFFFF) ^ $y << 2) + (($y >> 3 & 0x1FFFFFFF) ^ $z << 4)) ^ int32(($sum ^ $y) + ($k ^ $z));\n}\n\n/** Cipher\n* @param string $str plain-text password\n* @return string binary cipher\n*/\nfunction encrypt_string(string $str, string $key): string {\n\tif ($str == \"\") {\n\t\treturn \"\";\n\t}\n\t$key = array_values(unpack(\"V*\", pack(\"H*\", md5($key))));\n\t$v = str2long($str, true);\n\t$n = count($v) - 1;\n\t$z = $v[$n];\n\t$y = $v[0];\n\t$q = floor(6 + 52 / ($n + 1));\n\t$sum = 0;\n\twhile ($q-- > 0) {\n\t\t$sum = int32($sum + 0x9E3779B9);\n\t\t$e = $sum >> 2 & 3;\n\t\tfor ($p=0; $p < $n; $p++) {\n\t\t\t$y = $v[$p + 1];\n\t\t\t$mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]);\n\t\t\t$z = int32($v[$p] + $mx);\n\t\t\t$v[$p] = $z;\n\t\t}\n\t\t$y = $v[0];\n\t\t$mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]);\n\t\t$z = int32($v[$n] + $mx);\n\t\t$v[$n] = $z;\n\t}\n\treturn long2str($v, false);\n}\n\n/** Decipher\n* @param string $str binary cipher\n* @return string|false plain-text password\n*/\nfunction decrypt_string(string $str, string $key) {\n\tif ($str == \"\") {\n\t\treturn \"\";\n\t}\n\tif (!$key) {\n\t\treturn false;\n\t}\n\t$key = array_values(unpack(\"V*\", pack(\"H*\", md5($key))));\n\t$v = str2long($str, false);\n\t$n = count($v) - 1;\n\t$z = $v[$n];\n\t$y = $v[0];\n\t$q = floor(6 + 52 / ($n + 1));\n\t$sum = int32($q * 0x9E3779B9);\n\twhile ($sum) {\n\t\t$e = $sum >> 2 & 3;\n\t\tfor ($p=$n; $p > 0; $p--) {\n\t\t\t$z = $v[$p - 1];\n\t\t\t$mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]);\n\t\t\t$y = int32($v[$p] - $mx);\n\t\t\t$v[$p] = $y;\n\t\t}\n\t\t$z = $v[$n];\n\t\t$mx = xxtea_mx($z, $y, $sum, $key[$p & 3 ^ $e]);\n\t\t$y = int32($v[0] - $mx);\n\t\t$v[0] = $y;\n\t\t$sum = int32($sum - 0x9E3779B9);\n\t}\n\treturn long2str($v, true);\n}\n"
  },
  {
    "path": "adminer/index.php",
    "content": "<?php\n/** Adminer - Compact database management\n* @link https://www.adminer.org/\n* @author Jakub Vrana, https://www.vrana.cz/\n* @copyright 2007 Jakub Vrana\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\n// this is matched by compile.php\n\nnamespace Adminer;\n\ninclude \"./include/bootstrap.inc.php\";\ninclude \"./include/tmpfile.inc.php\";\n\nif (isset($_GET[\"select\"]) && ($_POST[\"edit\"] || $_POST[\"clone\"]) && !$_POST[\"save\"]) {\n\t$_GET[\"edit\"] = $_GET[\"select\"];\n}\n// this is matched by compile.php\nif (isset($_GET[\"callf\"])) {\n\t$_GET[\"call\"] = $_GET[\"callf\"];\n}\nif (isset($_GET[\"function\"])) {\n\t$_GET[\"procedure\"] = $_GET[\"function\"];\n}\n\nif (isset($_GET[\"download\"])) {\n\tinclude \"./download.inc.php\";\n} elseif (isset($_GET[\"table\"])) {\n\tinclude \"./table.inc.php\";\n} elseif (isset($_GET[\"schema\"])) {\n\tinclude \"./schema.inc.php\";\n} elseif (isset($_GET[\"dump\"])) {\n\tinclude \"./dump.inc.php\";\n} elseif (isset($_GET[\"privileges\"])) {\n\tinclude \"./privileges.inc.php\";\n} elseif (isset($_GET[\"sql\"])) {\n\tinclude \"./sql.inc.php\";\n} elseif (isset($_GET[\"edit\"])) {\n\tinclude \"./edit.inc.php\";\n} elseif (isset($_GET[\"create\"])) {\n\tinclude \"./create.inc.php\";\n} elseif (isset($_GET[\"indexes\"])) {\n\tinclude \"./indexes.inc.php\";\n} elseif (isset($_GET[\"database\"])) {\n\tinclude \"./database.inc.php\";\n} elseif (isset($_GET[\"scheme\"])) {\n\tinclude \"./scheme.inc.php\";\n} elseif (isset($_GET[\"call\"])) {\n\tinclude \"./call.inc.php\";\n} elseif (isset($_GET[\"foreign\"])) {\n\tinclude \"./foreign.inc.php\";\n} elseif (isset($_GET[\"view\"])) {\n\tinclude \"./view.inc.php\";\n} elseif (isset($_GET[\"event\"])) {\n\tinclude \"./event.inc.php\";\n} elseif (isset($_GET[\"procedure\"])) {\n\tinclude \"./procedure.inc.php\";\n} elseif (isset($_GET[\"sequence\"])) {\n\tinclude \"./sequence.inc.php\";\n} elseif (isset($_GET[\"type\"])) {\n\tinclude \"./type.inc.php\";\n} elseif (isset($_GET[\"check\"])) {\n\tinclude \"./check.inc.php\";\n} elseif (isset($_GET[\"trigger\"])) {\n\tinclude \"./trigger.inc.php\";\n} elseif (isset($_GET[\"user\"])) {\n\tinclude \"./user.inc.php\";\n} elseif (isset($_GET[\"processlist\"])) {\n\tinclude \"./processlist.inc.php\";\n} elseif (isset($_GET[\"select\"])) {\n\tinclude \"./select.inc.php\";\n} elseif (isset($_GET[\"variables\"])) {\n\tinclude \"./variables.inc.php\";\n} elseif (isset($_GET[\"script\"])) {\n\tinclude \"./script.inc.php\";\n} else {\n\tinclude \"./db.inc.php\";\n}\n\n// each page calls its own page_header(), if the footer should not be called then the page exits\npage_footer();\n"
  },
  {
    "path": "adminer/indexes.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"indexes\"];\n$index_types = array(\"PRIMARY\", \"UNIQUE\", \"INDEX\");\n$table_status = table_status1($TABLE, true);\n$index_algorithms = driver()->indexAlgorithms($table_status);\nif (preg_match('~MyISAM|M?aria' . (min_version(5.6, '10.0.5') ? '|InnoDB' : '') . '~i', $table_status[\"Engine\"])) {\n\t$index_types[] = \"FULLTEXT\";\n}\nif (preg_match('~MyISAM|M?aria' . (min_version(5.7, '10.2.2') ? '|InnoDB' : '') . '~i', $table_status[\"Engine\"])) {\n\t$index_types[] = \"SPATIAL\";\n}\n$indexes = indexes($TABLE);\n$fields = fields($TABLE);\n$primary = array();\nif (JUSH == \"mongo\") { // doesn't support primary key\n\t$primary = $indexes[\"_id_\"];\n\tunset($index_types[0]);\n\tunset($indexes[\"_id_\"]);\n}\n$row = $_POST;\nif ($row) {\n\tsave_settings(array(\"index_options\" => $row[\"options\"]));\n}\nif ($_POST && !$error && !$_POST[\"add\"] && !$_POST[\"drop_col\"]) {\n\t$alter = array();\n\tforeach ($row[\"indexes\"] as $index) {\n\t\t$name = $index[\"name\"];\n\t\tif (in_array($index[\"type\"], $index_types)) {\n\t\t\t$columns = array();\n\t\t\t$lengths = array();\n\t\t\t$descs = array();\n\t\t\t$index_condition = (support(\"partial_indexes\") ? $index[\"partial\"] : \"\");\n\t\t\t$index_algorithm = (in_array($index[\"algorithm\"], $index_algorithms) ? $index[\"algorithm\"] : \"\");\n\t\t\t$set = array();\n\t\t\tksort($index[\"columns\"]);\n\t\t\tforeach ($index[\"columns\"] as $key => $column) {\n\t\t\t\tif ($column != \"\") {\n\t\t\t\t\t$length = idx($index[\"lengths\"], $key);\n\t\t\t\t\t$desc = idx($index[\"descs\"], $key);\n\t\t\t\t\t$set[] = ($fields[$column] ? idf_escape($column) : $column) . ($length ? \"(\" . (+$length) . \")\" : \"\") . ($desc ? \" DESC\" : \"\");\n\t\t\t\t\t$columns[] = $column;\n\t\t\t\t\t$lengths[] = ($length ?: null);\n\t\t\t\t\t$descs[] = $desc;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$existing = $indexes[$name];\n\t\t\tif ($existing) {\n\t\t\t\tksort($existing[\"columns\"]);\n\t\t\t\tksort($existing[\"lengths\"]);\n\t\t\t\tksort($existing[\"descs\"]);\n\t\t\t\tif (\n\t\t\t\t\t$index[\"type\"] == $existing[\"type\"]\n\t\t\t\t\t&& array_values($existing[\"columns\"]) === $columns\n\t\t\t\t\t&& (!$existing[\"lengths\"] || array_values($existing[\"lengths\"]) === $lengths)\n\t\t\t\t\t&& array_values($existing[\"descs\"]) === $descs\n\t\t\t\t\t&& $existing[\"partial\"] == $index_condition\n\t\t\t\t\t&& (!$index_algorithms || $existing[\"algorithm\"] == $index_algorithm)\n\t\t\t\t) {\n\t\t\t\t\t// skip existing index\n\t\t\t\t\tunset($indexes[$name]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($columns) {\n\t\t\t\t$alter[] = array($index[\"type\"], $name, $set, $index_algorithm, $index_condition);\n\t\t\t}\n\t\t}\n\t}\n\n\t// drop removed indexes\n\tforeach ($indexes as $name => $existing) {\n\t\t$alter[] = array($existing[\"type\"], $name, \"DROP\");\n\t}\n\tif (!$alter) {\n\t\tredirect(ME . \"table=\" . urlencode($TABLE));\n\t}\n\tqueries_redirect(ME . \"table=\" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter));\n}\n\npage_header(lang('Indexes'), $error, array(\"table\" => $TABLE), h($TABLE));\n\n$fields_keys = array_keys($fields);\nif ($_POST[\"add\"]) {\n\tforeach ($row[\"indexes\"] as $key => $index) {\n\t\tif ($index[\"columns\"][count($index[\"columns\"])] != \"\") {\n\t\t\t$row[\"indexes\"][$key][\"columns\"][] = \"\";\n\t\t}\n\t}\n\t$index = end($row[\"indexes\"]);\n\tif ($index[\"type\"] || array_filter($index[\"columns\"], 'strlen')) {\n\t\t$row[\"indexes\"][] = array(\"columns\" => array(1 => \"\"));\n\t}\n}\nif (!$row) {\n\tforeach ($indexes as $key => $index) {\n\t\t$indexes[$key][\"name\"] = $key;\n\t\t$indexes[$key][\"columns\"][] = \"\";\n\t}\n\t$indexes[] = array(\"columns\" => array(1 => \"\"));\n\t$row[\"indexes\"] = $indexes;\n}\n$lengths = (JUSH == \"sql\" || JUSH == \"mssql\");\n$show_options = ($_POST ? $_POST[\"options\"] : get_setting(\"index_options\"));\n?>\n\n<form action=\"\" method=\"post\">\n<div class=\"scrollable\">\n<table class=\"nowrap\">\n<thead><tr>\n<th id=\"label-type\"><?php echo lang('Index Type'); ?>\n<?php\n$idxopts = \" class='idxopts\" . ($show_options ? \"\" : \" hidden\") . \"'\";\nif ($index_algorithms) {\n\techo \"<th id='label-algorithm'$idxopts>\" . lang('Algorithm') . doc_link(array(\n\t\t'sql' => 'create-index.html#create-index-storage-engine-index-types',\n\t\t'mariadb' => 'storage-engine-index-types/',\n\t\t'pgsql' => 'indexes-types.html',\n\t));\n}\n?>\n<th><input type=\"submit\" class=\"wayoff\"><?php\necho lang('Columns') . ($lengths ? \"<span$idxopts> (\" . lang('length') . \")</span>\" : \"\");\nif ($lengths || support(\"descidx\")) {\n\techo checkbox(\"options\", 1, $show_options, lang('Options'), \"indexOptionsShow(this.checked)\", \"jsonly\") . \"\\n\";\n}\n?>\n<th id=\"label-name\"><?php echo lang('Name'); ?>\n<?php\nif (support(\"partial_indexes\")) {\n\techo \"<th id='label-condition'$idxopts>\" . lang('Condition');\n}\n?>\n<th><noscript><?php echo icon(\"plus\", \"add[0]\", \"+\", lang('Add next')); ?></noscript>\n</thead>\n<?php\nif ($primary) {\n\techo \"<tr><td>PRIMARY<td>\";\n\tforeach ($primary[\"columns\"] as $key => $column) {\n\t\techo select_input(\" disabled\", $fields_keys, $column);\n\t\techo \"<label><input disabled type='checkbox'>\" . lang('descending') . \"</label> \";\n\t}\n\techo \"<td><td>\\n\";\n}\n$j = 1;\nforeach ($row[\"indexes\"] as $index) {\n\tif (!$_POST[\"drop_col\"] || $j != key($_POST[\"drop_col\"])) {\n\t\techo \"<tr><td>\" . html_select(\"indexes[$j][type]\", array(-1 => \"\") + $index_types, $index[\"type\"], ($j == count($row[\"indexes\"]) ? \"indexesAddRow.call(this);\" : \"\"), \"label-type\");\n\n\t\tif ($index_algorithms) {\n\t\t\techo \"<td$idxopts>\" . html_select(\"indexes[$j][algorithm]\", array_merge(array(\"\"), $index_algorithms), $index['algorithm'], \"label-algorithm\");\n\t\t}\n\n\t\techo \"<td>\";\n\t\tksort($index[\"columns\"]);\n\t\t$i = 1;\n\t\tforeach ($index[\"columns\"] as $key => $column) {\n\t\t\techo \"<span>\" . select_input(\n\t\t\t\t\" name='indexes[$j][columns][$i]' title='\" . lang('Column') . \"'\",\n\t\t\t\t($fields && ($column == \"\" || $fields[$column]) ? array_combine($fields_keys, $fields_keys) : array()),\n\t\t\t\t$column,\n\t\t\t\t\"partial(\" . ($i == count($index[\"columns\"]) ? \"indexesAddColumn\" : \"indexesChangeColumn\") . \", '\" . js_escape(JUSH == \"sql\" ? \"\" : $_GET[\"indexes\"] . \"_\") . \"')\"\n\t\t\t);\n\t\t\techo \"<span$idxopts>\";\n\t\t\techo ($lengths ? \"<input type='number' name='indexes[$j][lengths][$i]' class='size' value='\" . h(idx($index[\"lengths\"], $key)) . \"' title='\" . lang('Length') . \"'>\" : \"\");\n\t\t\techo (support(\"descidx\") ? checkbox(\"indexes[$j][descs][$i]\", 1, idx($index[\"descs\"], $key), lang('descending')) : \"\");\n\t\t\techo \"</span> </span>\";\n\t\t\t$i++;\n\t\t}\n\n\t\techo \"<td><input name='indexes[$j][name]' value='\" . h($index[\"name\"]) . \"' autocapitalize='off' aria-labelledby='label-name'>\\n\";\n\t\tif (support(\"partial_indexes\")) {\n\t\t\techo \"<td$idxopts><input name='indexes[$j][partial]' value='\" . h($index[\"partial\"]) . \"' autocapitalize='off' aria-labelledby='label-condition'>\\n\";\n\t\t}\n\t\techo \"<td>\" . icon(\"cross\", \"drop_col[$j]\", \"x\", lang('Remove')) . script(\"qsl('button').onclick = partial(editingRemoveRow, 'indexes\\$1[type]');\");\n\t}\n\t$j++;\n}\n?>\n</table>\n</div>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/lang/ar.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'تسجيل الدخول',\n\t'Logout successful.' => 'تم تسجيل الخروج بنجاح.',\n\t'Invalid credentials.' => 'بيانات الدخول غير صالحة.',\n\t'Server' => 'الخادم',\n\t'Username' => 'اسم المستخدم',\n\t'Password' => 'كلمة المرور',\n\t'Select database' => 'اختر قاعدة البيانات',\n\t'Invalid database.' => 'قاعدة البيانات غير صالحة.',\n\t'Table has been dropped.' => 'تم حذف الجدول.',\n\t'Table has been altered.' => 'تم تعديل الجدول.',\n\t'Table has been created.' => 'تم إنشاء الجدول.',\n\t'Alter table' => 'تعديل الجدول',\n\t'Create table' => 'إنشاء جدول',\n\t'Table name' => 'اسم الجدول',\n\t'engine' => 'المحرك',\n\t'collation' => 'الترتيب',\n\t'Column name' => 'اسم العمود',\n\t'Type' => 'النوع',\n\t'Length' => 'الطول',\n\t'Auto Increment' => 'تزايد تلقائي',\n\t'Options' => 'خيارات',\n\t'Save' => 'حفظ',\n\t'Drop' => 'حذف',\n\t'Database has been created.' => 'تم إنشاء قاعدة البيانات.',\n\t'Database has been renamed.' => 'تمت إعادة تسمية فاعدة البيانات.',\n\t'Database has been altered.' => 'تم تعديل قاعدة البيانات.',\n\t'Alter database' => 'تعديل قاعدة البيانات',\n\t'Create database' => 'إنشاء قاعدة بيانات',\n\t'SQL command' => 'استعلام SQL',\n\t'Logout' => 'تسجيل الخروج',\n\t'Use' => 'استعمال',\n\t'No tables.' => 'لا توجد جداول.',\n\t'select' => 'تحديد',\n\t'Item has been deleted.' => 'تم حذف العنصر.',\n\t'Item has been updated.' => 'تم تعديل العنصر.',\n\t'Edit' => 'تعديل',\n\t'Insert' => 'إنشاء',\n\t'Save and insert next' => 'جفظ و إنشاء التالي',\n\t'Delete' => 'مسح',\n\t'Database' => 'قاعدة بيانات',\n\t'Routines' => 'الروتينات',\n\t'Indexes have been altered.' => 'تم تعديل المؤشر.',\n\t'Indexes' => 'المؤشرات',\n\t'Alter indexes' => 'تعديل المؤشرات',\n\t'Add next' => 'إضافة التالي',\n\t'Language' => 'اللغة',\n\t'Select' => 'اختيار',\n\t'New item' => 'عنصر جديد',\n\t'Search' => 'بحث',\n\t'Sort' => 'ترتيب',\n\t'descending' => 'تنازلي',\n\t'Limit' => 'حد',\n\t'No rows.' => 'لا توجد نتائج.',\n\t'Action' => 'الإجراء',\n\t'edit' => 'تعديل',\n\t'Page' => 'صفحة',\n\t'Query executed OK, %d row(s) affected.' => 'تم تنفسذ الاستعلام, %d عدد الأسطر المعدلة.',\n\t'Error in query' => 'هناك خطأ في الاستعلام',\n\t'Execute' => 'تنفيذ',\n\t'Table' => 'جدول',\n\t'Foreign keys' => 'مفاتيح أجنبية',\n\t'Triggers' => 'الزنادات',\n\t'View' => 'عرض',\n\t'Unable to select the table' => 'يتعذر اختيار الجدول',\n\t'Invalid CSRF token. Send the form again.' => 'رمز CSRF غير صالح. المرجو إرسال الاستمارة مرة أخرى.',\n\t'Comment' => 'تعليق',\n\t'Default values' => 'القيم الافتراضية',\n\t'%d byte(s)' => '%d بايت',\n\t'No commands to execute.' => 'لا توجد أوامر للتنفيذ.',\n\t'Unable to upload a file.' => 'يتعذر رفع ملف ما.',\n\t'File upload' => 'رفع ملف',\n\t'File uploads are disabled.' => 'رفع الملفات غير مشغل.',\n\t'Routine has been called, %d row(s) affected.' => 'تم استدعاء الروتين, عدد الأسطر المعدلة %d.',\n\t'Call' => 'استدعاء',\n\t'No extension' => 'امتداد غير موجود',\n\t'None of the supported PHP extensions (%s) are available.' => 'إمتدادات php (%s) المدعومة غير موجودة.',\n\t'Session support must be enabled.' => 'عليك تفعيل نظام الجلسات.',\n\t'Session expired, please login again.' => 'إنتهت الجلسة، من فضلك أعد تسجيل الدخول.',\n\t'Text length' => 'طول النص',\n\t'Foreign key has been dropped.' => 'تم مسح المفتاح الأجنبي.',\n\t'Foreign key has been altered.' => 'تم تعديل المفتاح الأجنبي.',\n\t'Foreign key has been created.' => 'تم إنشاء المفتاح الأجنبي.',\n\t'Foreign key' => 'مفتاح أجنبي',\n\t'Target table' => 'الجدول المستهدف',\n\t'Change' => 'تعديل',\n\t'Source' => 'المصدر',\n\t'Target' => 'الهدف',\n\t'Add column' => 'إضافة عمودا',\n\t'Alter' => 'تعديل',\n\t'Add foreign key' => 'إضافة مفتاح أجنبي',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'نوع المؤشر',\n\t'length' => 'الطول',\n\t'View has been dropped.' => 'تم مسح العرض.',\n\t'View has been altered.' => 'تم تعديل العرض.',\n\t'View has been created.' => 'تم إنشاء العرض.',\n\t'Alter view' => 'تعديل عرض',\n\t'Create view' => 'إنشاء عرض',\n\t'Name' => 'الاسم',\n\t'Process list' => 'قائمة الإجراءات',\n\t'%d process(es) have been killed.' => 'عدد الإجراءات التي تم إيقافها %d.',\n\t'Kill' => 'إيقاف',\n\t'Parameter name' => 'اسم المتغير',\n\t'Database schema' => 'مخطط فاعدة البيانات',\n\t'Create procedure' => 'إنشاء إجراء',\n\t'Create function' => 'إنشاء دالة',\n\t'Routine has been dropped.' => 'تم حذف الروتين.',\n\t'Routine has been altered.' => 'تم تعديل الروتين.',\n\t'Routine has been created.' => 'تم إنشاء الروتين.',\n\t'Alter function' => 'تعديل الدالة',\n\t'Alter procedure' => 'تعديل الإجراء',\n\t'Return type' => 'نوع العودة',\n\t'Add trigger' => 'إضافة زناد',\n\t'Trigger has been dropped.' => 'تم حذف الزناد.',\n\t'Trigger has been altered.' => 'تم تعديل الزناد.',\n\t'Trigger has been created.' => 'تم إنشاء الزناد.',\n\t'Alter trigger' => 'تعديل زناد',\n\t'Create trigger' => 'إنشاء زناد',\n\t'Time' => 'الوقت',\n\t'Event' => 'الحدث',\n\t'%d row(s)' => '%d أسطر',\n\t'Remove' => 'مسح',\n\t'Are you sure?' => 'هل أنت متأكد؟',\n\t'Privileges' => 'الإمتيازات',\n\t'Create user' => 'إنشاء مستخدم',\n\t'User has been dropped.' => 'تم حذف المستخدم.',\n\t'User has been altered.' => 'تم تعديل المستخدم.',\n\t'User has been created.' => 'تم إنشاء المستخدم.',\n\t'Hashed' => 'تلبيد',\n\t'Column' => 'عمود',\n\t'Routine' => 'روتين',\n\t'Grant' => 'موافق',\n\t'Revoke' => 'إلغاء',\n\t'%s version: %s through PHP extension %s' => 'النسخة %s : %s عن طريق إمتداد ال PHP %s',\n\t'Logged as: %s' => 'تم تسجيل الدخول باسم %s',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'معلومات POST كبيرة جدا. قم بتقليص حجم المعلومات أو قم بزيادة قيمة %s في خيارات ال PHP.',\n\t'Move up' => 'نقل للأعلى',\n\t'Move down' => 'نقل للأسفل',\n\t'Export' => 'تصدير',\n\t'Tables' => 'جداول',\n\t'Data' => 'معلومات',\n\t'Output' => 'إخراج',\n\t'open' => 'فتح',\n\t'save' => 'حفظ',\n\t'Format' => 'الصيغة',\n\t'Functions' => 'الدوال',\n\t'Aggregation' => 'تجميع',\n\t'Event has been dropped.' => 'تم مسح الحدث.',\n\t'Event has been altered.' => 'تم تعديل الحدث.',\n\t'Event has been created.' => 'تم إنشاء الحدث.',\n\t'Alter event' => 'تعديل حدث',\n\t'Create event' => 'إنشاء حدث',\n\t'Start' => 'إبدأ',\n\t'End' => 'إنهاء',\n\t'Every' => 'كل',\n\t'Status' => 'حالة',\n\t'On completion preserve' => 'حفظ عند الإنتهاء',\n\t'Events' => 'الأحداث',\n\t'Schedule' => 'مواعيد',\n\t'At given time' => 'في وقت محدد',\n\t'Save and continue edit' => 'إحفظ و واصل التعديل',\n\t'original' => 'الأصلي',\n\t'Tables have been truncated.' => 'تم قطع الجداول.',\n\t'Tables have been moved.' => 'تم نقل الجداول.',\n\t'Tables have been dropped.' => 'تم حذف الجداول.',\n\t'Tables and views' => 'الجداول و العروض',\n\t'Engine' => 'المحرك',\n\t'Collation' => 'ترتيب',\n\t'Data Length' => 'طول المعطيات',\n\t'Index Length' => 'طول المؤشر',\n\t'Data Free' => 'المساحة الحرة',\n\t'Rows' => 'الأسطر',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'تحليل',\n\t'Optimize' => 'تحسين',\n\t'Check' => 'فحص',\n\t'Repair' => 'إصلاح',\n\t'Truncate' => 'قطع',\n\t'Move to other database' => 'نقل إلى قاعدة بيانات أخرى',\n\t'Move' => 'نقل',\n\t'%d item(s) have been affected.' => 'عدد العناصر المعدلة هو %d.',\n\t'Whole result' => 'نتيجة كاملة',\n\t'Clone' => 'نسخ',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'لقد تجاوزت العدد الأقصى للحقول. يرجى الرفع من %s.',\n\t'Partition by' => 'مقسم بواسطة',\n\t'Partitions' => 'التقسيمات',\n\t'Partition name' => 'اسم التقسيم',\n\t'Values' => 'القيم',\n\t'%d row(s) have been imported.' => 'تم استيراد %d سطرا.',\n\t'anywhere' => 'في اي مكان',\n\t'Import' => 'استيراد',\n\t'Stop on error' => 'أوقف في حالة حدوث خطأ',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'jj/mm/[aaaa]',\n\t'History' => 'تاريخ',\n\t'Variables' => 'متغيرات',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'أعمدة المصدر و الهدف يجب أن تكون بنفس النوع, يجب أن يكون هناك مؤشر في أعمدة الهدف و البيانات المرجعية يجب ان تكون موجودة.',\n\t'Relations' => 'علاقات',\n\t'Run file' => 'نفذ الملف',\n\t'Clear' => 'مسح',\n\t'Maximum allowed file size is %sB.' => 'حجم الملف الأقصى هو %sB.',\n\t'Numbers' => 'أعداد',\n\t'Date and time' => 'التاريخ و الوقت',\n\t'Strings' => 'سلاسل',\n\t'Binary' => 'ثنائية',\n\t'Lists' => 'قوائم',\n\t'Editor' => 'المحرر',\n\t'Webserver file %s' => 'ملف %s من خادم الويب',\n\t'File does not exist.' => 'الملف غير موجود.',\n\t'%d in total' => '%d في المجموع',\n\t'Permanent login' => 'تسجيل دخول دائم',\n\t'Databases have been dropped.' => 'تم حذف قواعد البيانات.',\n\t'Database has been dropped.' => 'تم حذف قاعدة البيانات.',\n\t'Search data in tables' => 'بحث في الجداول',\n\t'Schema' => 'المخطط',\n\t'Alter schema' => 'تعديل المخطط',\n\t'Create schema' => 'إنشاء مخطط',\n\t'Schema has been dropped.' => 'تم حذف المخطط.',\n\t'Schema has been created.' => 'تم إنشاء المخطط.',\n\t'Schema has been altered.' => 'تم تعديل المخطط.',\n\t'Sequences' => 'السلاسل',\n\t'Create sequence' => 'إنشاء سلسلة',\n\t'Alter sequence' => 'تعديل سلسلة',\n\t'Sequence has been dropped.' => 'تم حذف السلسلة.',\n\t'Sequence has been created.' => 'تم إنشاء السلسلة.',\n\t'Sequence has been altered.' => 'تم تعديل السلسلة.',\n\t'User types' => 'نوع المستخدم',\n\t'Create type' => 'إنشاء نوع',\n\t'Alter type' => 'تعديل نوع',\n\t'Type has been dropped.' => 'تم حذف النوع.',\n\t'Type has been created.' => 'تم إنشاء النوع.',\n\t'Use edit link to modify this value.' => 'استعمل الرابط \"تعديل\" لتعديل هذه القيمة.',\n\t'last' => 'الأخيرة',\n\t'From server' => 'من الخادم',\n\t'System' => 'النظام',\n\t'Select data' => 'عرض البيانات',\n\t'Show structure' => 'عرض التركيبة',\n\t'empty' => 'فارغ',\n\t'Network' => 'شبكة',\n\t'Geometry' => 'هندسة',\n\t'File exists.' => 'الملف موجود.',\n\t'Item%s has been inserted.' => '%sتم إدراج العنصر.',\n\t'now' => 'الآن',\n\t'%d query(s) executed OK.' => array('تم تنفيذ الاستعلام %d بنجاح.', 'تم تنفيذ الاستعلامات %d بنجاح.'),\n\t'Show only errors' => 'إظهار الأخطاء فقط',\n\t'Refresh' => 'تحديث',\n\t'Invalid schema.' => 'مخطط غير صالح.',\n\t'Please use one of the extensions %s.' => 'المرجو استخدام إحدى الامتدادات %s.',\n\t'ltr' => 'rtl',\n\t'Tables have been copied.' => 'تم نسخ الجداول.',\n\t'Copy' => 'نسخ',\n\t'Permanent link' => 'رابط دائم',\n\t'Edit all' => 'تعديل الكل',\n\t'HH:MM:SS' => 'HH:MM:SS',\n);\n\n// run `php ../../lang.php ar` to update this file\n"
  },
  {
    "path": "adminer/lang/bg.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Система',\n\t'Server' => 'Сървър',\n\t'Username' => 'Потребител',\n\t'Password' => 'Парола',\n\t'Permanent login' => 'Запаметяване',\n\t'Login' => 'Вход',\n\t'Logout' => 'Изход',\n\t'Logged as: %s' => 'Текущ потребител: %s',\n\t'Logout successful.' => 'Излизането е успешно.',\n\t'Invalid credentials.' => 'Невалидни потребителски данни.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Прекалено много неуспешни опити за вход, опитайте пак след %d минута.', 'Прекалено много неуспешни опити за вход, опитайте пак след %d минути.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Главната парола вече е невалидна. <a href=\"https://www.adminer.org/en/extension/\"%s>Изберете</a> %s метод, за да я направите постоянна.',\n\t'Language' => 'Език',\n\t'Invalid CSRF token. Send the form again.' => 'Невалиден шифроващ ключ. Попълнете и изпратете формуляра отново.',\n\t'If you did not send this request from Adminer then close this page.' => 'Ако не сте изпратили тази заявка през Adminer, затворете тази страница.',\n\t'No extension' => 'Няма разширение',\n\t'None of the supported PHP extensions (%s) are available.' => 'Никое от поддържаните PHP разширения (%s) не е налично.',\n\t'Session support must be enabled.' => 'Поддръжката на сесии трябва да е разрешена.',\n\t'Session expired, please login again.' => 'Сесията е изтекла; моля, влезте отново.',\n\t'%s version: %s through PHP extension %s' => '%s версия: %s през PHP разширение %s',\n\t'Refresh' => 'Обновяване',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Права',\n\t'Create user' => 'Създаване на потребител',\n\t'User has been dropped.' => 'Потребителя беше премахнат.',\n\t'User has been altered.' => 'Потребителя беше променен.',\n\t'User has been created.' => 'Потребителя беше създаден.',\n\t'Hashed' => 'Хеширан',\n\t'Column' => 'Колона',\n\t'Routine' => 'Процедура',\n\t'Grant' => 'Осигуряване',\n\t'Revoke' => 'Отнемане',\n\n\t'Process list' => 'Списък с процеси',\n\t'%d process(es) have been killed.' => array('%d процес беше прекъснат.', '%d процеса бяха прекъснати.'),\n\t'Kill' => 'Прекъсване',\n\n\t'Variables' => 'Променливи',\n\t'Status' => 'Състояние',\n\n\t'SQL command' => 'SQL команда',\n\t'%d query(s) executed OK.' => array('%d заявка е изпълнена.', '%d заявки са изпълнени.'),\n\t'Query executed OK, %d row(s) affected.' => array('Заявката е изпълнена, %d ред е засегнат.', 'Заявката е изпълнена, %d редове са засегнати.'),\n\t'No commands to execute.' => 'Няма команди за изпълнение.',\n\t'Error in query' => 'Грешка в заявката',\n\t'Execute' => 'Изпълнение',\n\t'Stop on error' => 'Спиране при грешка',\n\t'Show only errors' => 'Показване само на грешките',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Хронология',\n\t'Clear' => 'Изчистване',\n\t'Edit all' => 'Редактиране на всички',\n\n\t'File upload' => 'Прикачване на файл',\n\t'From server' => 'От сървър',\n\t'Webserver file %s' => 'Сървърен файл %s',\n\t'Run file' => 'Изпълнение на файл',\n\t'File does not exist.' => 'Файлът не съществува.',\n\t'File uploads are disabled.' => 'Прикачването на файлове е забранено.',\n\t'Unable to upload a file.' => 'Неуспешно прикачване на файл.',\n\t'Maximum allowed file size is %sB.' => 'Максимално разрешената големина на файл е %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Изпратени са прекалено много данни. Намалете обема на данните или увеличете %s управляващата директива.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Можете да прикачите голям SQL файл чрез FTP и да го импортирате от сървъра.',\n\t'You are offline.' => 'Вие сте офлайн.',\n\n\t'Export' => 'Експорт',\n\t'Output' => 'Резултат',\n\t'open' => 'показване',\n\t'save' => 'запис',\n\t'Format' => 'Формат',\n\t'Data' => 'Данни',\n\n\t'Database' => 'База данни',\n\t'Use' => 'Избор',\n\t'Select database' => 'Избор на база данни',\n\t'Invalid database.' => 'Невалидна база данни.',\n\t'Database has been dropped.' => 'Базата данни беше премахната.',\n\t'Databases have been dropped.' => 'Базите данни бяха премехнати.',\n\t'Database has been created.' => 'Базата данни беше създадена.',\n\t'Database has been renamed.' => 'Базата данни беше преименувана.',\n\t'Database has been altered.' => 'Базата данни беше променена.',\n\t'Alter database' => 'Промяна на база данни',\n\t'Create database' => 'Създаване на база данни',\n\t'Database schema' => 'Схема на базата данни',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Постоянна препратка',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Система',\n\t'Collation' => 'Кодировка',\n\t'Data Length' => 'Големина на данните',\n\t'Index Length' => 'Големина на индекса',\n\t'Data Free' => 'Свободно място',\n\t'Rows' => 'Редове',\n\t'%d in total' => '%d всичко',\n\t'Analyze' => 'Анализиране',\n\t'Optimize' => 'Оптимизиране',\n\t'Vacuum' => 'Консолидиране',\n\t'Check' => 'Проверка',\n\t'Repair' => 'Поправка',\n\t'Truncate' => 'Изрязване',\n\t'Tables have been truncated.' => 'Таблиците бяха изрязани.',\n\t'Move to other database' => 'Преместване в друга база данни',\n\t'Move' => 'Преместване',\n\t'Tables have been moved.' => 'Таблиците бяха преместени.',\n\t'Copy' => 'Копиране',\n\t'Tables have been copied.' => 'Таблиците бяха копирани.',\n\n\t'Routines' => 'Процедури',\n\t'Routine has been called, %d row(s) affected.' => array('Беше приложена процедура, %d ред е засегнат.', 'Беше приложена процедура, %d редове са засегнати.'),\n\t'Call' => 'Прилагане',\n\t'Parameter name' => 'Име на параметъра',\n\t'Create procedure' => 'Създаване на процедура',\n\t'Create function' => 'Създаване на функция',\n\t'Routine has been dropped.' => 'Процедурата беше премахната.',\n\t'Routine has been altered.' => 'Процедурата беше променена.',\n\t'Routine has been created.' => 'Процедурата беше създадена.',\n\t'Alter function' => 'Промяна на функция',\n\t'Alter procedure' => 'Промяна на процедура',\n\t'Return type' => 'Резултат',\n\n\t'Events' => 'Събития',\n\t'Event has been dropped.' => 'Събитието беше премахнато.',\n\t'Event has been altered.' => 'Събитието беше променено.',\n\t'Event has been created.' => 'Събитието беше създадено.',\n\t'Alter event' => 'Промяна на събитие',\n\t'Create event' => 'Създаване на събитие',\n\t'At given time' => 'В зададено време',\n\t'Every' => 'Всеки',\n\t'Schedule' => 'Насрочване',\n\t'Start' => 'Начало',\n\t'End' => 'Край',\n\t'On completion preserve' => 'Запазване след завършване',\n\n\t'Tables' => 'Таблици',\n\t'Tables and views' => 'Таблици и изгледи',\n\t'Table' => 'Таблица',\n\t'No tables.' => 'Няма таблици.',\n\t'Alter table' => 'Промяна на таблица',\n\t'Create table' => 'Създаване на таблица',\n\t'Table has been dropped.' => 'Таблицата беше премахната.',\n\t'Tables have been dropped.' => 'Таблиците бяха премахнати.',\n\t'Tables have been optimized.' => 'Таблиците бяха оптимизирани.',\n\t'Table has been altered.' => 'Таблицата беше променена.',\n\t'Table has been created.' => 'Таблицата беше създадена.',\n\t'Table name' => 'Име на таблица',\n\t'Show structure' => 'Структура',\n\t'engine' => 'система',\n\t'collation' => 'кодировка',\n\t'Column name' => 'Име на колоната',\n\t'Type' => 'Вид',\n\t'Length' => 'Големина',\n\t'Auto Increment' => 'Автоматично увеличаване',\n\t'Options' => 'Опции',\n\t'Comment' => 'Коментар',\n\t'Default value' => 'Стойност по подразбиране',\n\t'Default values' => 'Стойности по подразбиране',\n\t'Drop' => 'Премахване',\n\t'Are you sure?' => 'Сигурни ли сте?',\n\t'Size' => 'Големина',\n\t'Compute' => 'Изчисляване',\n\t'Move up' => 'Преместване нагоре',\n\t'Move down' => 'Преместване надолу',\n\t'Remove' => 'Премахване',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Максималния брой полета е превишен. Моля, увеличете %s.',\n\n\t'Partition by' => 'Разделяне на',\n\t'Partitions' => 'Раздели',\n\t'Partition name' => 'Име на раздела',\n\t'Values' => 'Стойности',\n\n\t'View' => 'Изглед',\n\t'Materialized view' => 'Запаметен изглед',\n\t'View has been dropped.' => 'Изгледа беше премахнат.',\n\t'View has been altered.' => 'Изгледа беше променен.',\n\t'View has been created.' => 'Изгледа беше създаден.',\n\t'Alter view' => 'Промяна на изглед',\n\t'Create view' => 'Създаване на изглед',\n\n\t'Indexes' => 'Индекси',\n\t'Indexes have been altered.' => 'Индексите бяха променени.',\n\t'Alter indexes' => 'Промяна на индекси',\n\t'Add next' => 'Добавяне на следващ',\n\t'Index Type' => 'Вид на индекса',\n\t'length' => 'дължина',\n\n\t'Foreign keys' => 'Препратки',\n\t'Foreign key' => 'Препратка',\n\t'Foreign key has been dropped.' => 'Препратката беше премахната.',\n\t'Foreign key has been altered.' => 'Препратката беше променена.',\n\t'Foreign key has been created.' => 'Препратката беше създадена.',\n\t'Target table' => 'Таблица приемник',\n\t'Change' => 'Промяна',\n\t'Source' => 'Източник',\n\t'Target' => 'Цел',\n\t'Add column' => 'Добавяне на колона',\n\t'Alter' => 'Промяна',\n\t'Add foreign key' => 'Добавяне на препратка',\n\t'ON DELETE' => 'При изтриване',\n\t'ON UPDATE' => 'При промяна',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Колоните източник и цел трябва да са от еднакъв вид, трябва да има индекс на колоните приемник и да има въведени данни.',\n\n\t'Triggers' => 'Тригери',\n\t'Add trigger' => 'Добавяне на тригер',\n\t'Trigger has been dropped.' => 'Тригера беше премахнат.',\n\t'Trigger has been altered.' => 'Тригера беше променен.',\n\t'Trigger has been created.' => 'Тригера беше създаден.',\n\t'Alter trigger' => 'Промяна на тригер',\n\t'Create trigger' => 'Създаване на тригер',\n\t'Time' => 'Време',\n\t'Event' => 'Събитие',\n\t'Name' => 'Име',\n\n\t'select' => 'показване',\n\t'Select' => 'Показване',\n\t'Select data' => 'Показване на данни',\n\t'Functions' => 'Функции',\n\t'Aggregation' => 'Съвкупност',\n\t'Search' => 'Търсене',\n\t'anywhere' => 'навсякъде',\n\t'Search data in tables' => 'Търсене на данни в таблиците',\n\t'Sort' => 'Сортиране',\n\t'descending' => 'низходящо',\n\t'Limit' => 'Редове',\n\t'Limit rows' => 'Лимит на редовете',\n\t'Text length' => 'Текст',\n\t'Action' => 'Действие',\n\t'Full table scan' => 'Пълно сканиране на таблицата',\n\t'Unable to select the table' => 'Неуспешно показване на таблицата',\n\t'No rows.' => 'Няма редове.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d ред', '%d реда'),\n\t'Page' => 'Страница',\n\t'last' => 'последен',\n\t'Load more data' => 'Зареждане на повече данни',\n\t'Loading' => 'Зареждане',\n\t'Whole result' => 'Пълен резултат',\n\t'%d byte(s)' => array('%d байт', '%d байта'),\n\n\t'Import' => 'Импорт',\n\t'%d row(s) have been imported.' => array('%d ред беше импортиран.', '%d реда бяха импортирани.'),\n\t'File must be in UTF-8 encoding.' => 'Файла трябва да е с UTF-8 кодировка.',\n\n\t// in-place editing in select\n\t'Modify' => 'Промяна',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+щракване в стойността, за да я промените.',\n\t'Use edit link to modify this value.' => 'Използвайте \\'редакция\\' за промяна на данните.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Елементи%s бяха вмъкнати.',\n\t'Item has been deleted.' => 'Елемента беше изтрит.',\n\t'Item has been updated.' => 'Елемента беше обновен.',\n\t'%d item(s) have been affected.' => array('%d елемент беше засегнат.', '%d елемента бяха засегнати.'),\n\t'New item' => 'Нов елемент',\n\t'original' => 'оригинал',\n\t// label for value '' in enum data type\n\t'empty' => 'празно',\n\t'edit' => 'редакция',\n\t'Edit' => 'Редактиране',\n\t'Insert' => 'Вмъкване',\n\t'Save' => 'Запис',\n\t'Saving' => 'Записване',\n\t'Save and continue edit' => 'Запис и редакция',\n\t'Save and insert next' => 'Запис и нов',\n\t'Selected' => 'Избран',\n\t'Clone' => 'Клониране',\n\t'Delete' => 'Изтриване',\n\t'You have no privileges to update this table.' => 'Нямате праве за обновяване на таблицата.',\n\n\t// data type descriptions\n\t'Numbers' => 'Числа',\n\t'Date and time' => 'Дата и час',\n\t'Strings' => 'Низове',\n\t'Binary' => 'Двоични',\n\t'Lists' => 'Списъци',\n\t'Network' => 'Мрежа',\n\t'Geometry' => 'Геометрия',\n\t'Relations' => 'Зависимости',\n\n\t'Editor' => 'Редактор',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[гггг]-мм-дд',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'ЧЧ:ММ:СС',\n\t'now' => 'сега',\n\t'yes' => 'да',\n\t'no' => 'не',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Файла вече съществува.',\n\t'Please use one of the extensions %s.' => 'Моля, използвайте някое от разширенията %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Промяна на схемата',\n\t'Create schema' => 'Създаване на схема',\n\t'Schema has been dropped.' => 'Схемата беше премахната.',\n\t'Schema has been created.' => 'Схемата беше създадена.',\n\t'Schema has been altered.' => 'Схемата беше променена.',\n\t'Schema' => 'Схема',\n\t'Invalid schema.' => 'Невалидна схема.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Последователности',\n\t'Create sequence' => 'Създаване на последователност',\n\t'Sequence has been dropped.' => 'Последователността беше премахната.',\n\t'Sequence has been created.' => 'Последователността беше създадена.',\n\t'Sequence has been altered.' => 'Последователността беше променена.',\n\t'Alter sequence' => 'Промяна на последователност',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Видове потребители',\n\t'Create type' => 'Създаване на вид',\n\t'Type has been dropped.' => 'Вида беше пермахнат.',\n\t'Type has been created.' => 'Вида беше създаден.',\n\t'Alter type' => 'Промяна на вид',\n);\n\n// run `php ../../lang.php bg` to update this file\n"
  },
  {
    "path": "adminer/lang/bn.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'লগইন',\n\t'Logout successful.' => 'সফলভাবে লগআউট হয়েছে।',\n\t'Invalid credentials.' => 'ভুল পাসওয়ার্ড।',\n\t'Server' => 'সার্ভার',\n\t'Username' => 'ইউজারের নাম',\n\t'Password' => 'পাসওয়ার্ড',\n\t'Select database' => 'ডাটাবেজ নির্বাচন করুন',\n\t'Invalid database.' => 'অকার্যকর ডাটাবেজ।',\n\t'Table has been dropped.' => 'টেবিল মুছে ফেলা হয়েছে।',\n\t'Table has been altered.' => 'টেবিল পরিবর্তন করা হয়েছে।',\n\t'Table has been created.' => 'টেবিল তৈরী করা হয়েছে।',\n\t'Alter table' => 'টেবিল পরিবর্তন করুন',\n\t'Create table' => 'টেবিল তৈরী করুন',\n\t'Table name' => 'টেবিলের নাম',\n\t'engine' => 'ইন্জিন',\n\t'collation' => 'সমষ্টি',\n\t'Column name' => 'কলামের নাম',\n\t'Type' => 'ধরণ',\n\t'Length' => 'দৈর্ঘ্য',\n\t'Auto Increment' => 'স্বয়ংক্রিয় বৃদ্ধি',\n\t'Options' => 'বিকল্পসমূহ',\n\t'Save' => 'সংরক্ষণ করুন',\n\t'Drop' => 'মুছে ফেলো',\n\t'Database has been dropped.' => 'ডাটাবেজ মুছে ফেলা হয়েছে।',\n\t'Database has been created.' => 'ডাটাবেজ তৈরী করা হয়েছে।',\n\t'Database has been renamed.' => 'ডাটাবেজের নতুন নামকরণ করা হয়েছে।',\n\t'Database has been altered.' => 'ডাটাবেজ পরিবর্তন করা হয়েছে।',\n\t'Alter database' => 'ডাটাবেজ পরিবর্তন করুন',\n\t'Create database' => 'ডাটাবেজ তৈরী করুন',\n\t'SQL command' => 'SQL-কমান্ড',\n\t'Logout' => 'লগআউট',\n\t'Use' => 'ব্যবহার',\n\t'No tables.' => 'কোন টেবিল নাই।',\n\t'select' => 'নির্বাচন',\n\t'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',\n\t'Item has been updated.' => 'বিষয়বস্তু হালনাগাদ করা হয়েছে।',\n\t'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ%s সংযোজন করা হয়েছে।',\n\t'Edit' => 'সম্পাদনা',\n\t'Insert' => 'সংযোজন',\n\t'Save and insert next' => 'সংরক্ষন ও পরবর্তী সংযোজন করুন',\n\t'Delete' => 'মুছে ফেলুন',\n\t'Database' => 'ডাটাবেজ',\n\t'Routines' => 'রুটিনসমূহ',\n\t'Indexes have been altered.' => 'সূচীসমূহ সম্পাদনা করা হয়েছে।',\n\t'Indexes' => 'সূচীসমূহ',\n\t'Alter indexes' => 'সূচীসমূহ পরিবর্তন করুন',\n\t'Add next' => 'পরবর্তী সংযোজন করুন',\n\t'Language' => 'ভাষা',\n\t'Select' => 'নির্বাচন',\n\t'New item' => 'নতুন বিষয়বস্তু',\n\t'Search' => 'খোঁজ',\n\t'Sort' => 'সাজানো',\n\t'descending' => 'ক্রমহ্রাস',\n\t'Limit' => 'সীমা',\n\t'No rows.' => 'কোন সারি নাই।',\n\t'Action' => 'ক্রিয়া',\n\t'edit' => 'সম্পাদনা',\n\t'Page' => 'পৃষ্ঠা',\n\t'Query executed OK, %d row(s) affected.' => array('কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।', 'কোয়্যারী সম্পাদন হয়েছে, %d সারি প্রভাবিত হয়েছে।'),\n\t'Error in query' => 'অনুসন্ধানে ভুল আছে',\n\t'Execute' => 'সম্পাদন করো',\n\t'Table' => 'টেবিল',\n\t'Foreign keys' => 'ফরেন কী',\n\t'Triggers' => 'ট্রিগার',\n\t'View' => 'ভিউ',\n\t'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',\n\t'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্মটি আবার পাঠান।',\n\t'Comment' => 'মন্তব্য',\n\t'Default values' => 'ডিফল্ট মান',\n\t'%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),\n\t'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নেই।',\n\t'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',\n\t'File upload' => 'ফাইল আপলোড',\n\t'File uploads are disabled.' => 'ফাইল আপলোড নিষ্ক্রিয় করা আছে।',\n\t'Routine has been called, %d row(s) affected.' => array('রুটিন কল করা হয়েছে, %d টি সারি(সমূহ) প্রভাবিত হয়েছে।', 'রুটিন কল করা হয়েছে, %d টি সারি(সমূহ) প্রভাবিত হয়েছে।'),\n\t'Call' => 'কল',\n\t'No extension' => 'কোন এক্সটেনশান নাই',\n\t'None of the supported PHP extensions (%s) are available.' => 'কোন PHP সমর্থিত এক্সটেনশন (%s) পাওয়া যায় নাই।',\n\t'Session support must be enabled.' => 'সেশন সমর্থন সক্রিয় করা আবশ্যক।',\n\t'Session expired, please login again.' => 'সেশনের মেয়াদ শেষ হয়েছে, আবার লগইন করুন।',\n\t'Text length' => 'টেক্সট দৈর্ঘ্য',\n\t'Foreign key has been dropped.' => 'ফরেন কী মুছে ফেলা হয়েছে।',\n\t'Foreign key has been altered.' => 'ফরেন কী পরিবর্তন করা হয়েছে।',\n\t'Foreign key has been created.' => 'ফরেন কী তৈরী করা হয়েছে।',\n\t'Foreign key' => 'ফরেন কী ',\n\t'Target table' => 'টার্গেট টেবিল',\n\t'Change' => 'পরিবর্তন',\n\t'Source' => 'উৎস',\n\t'Target' => 'লক্ষ্য',\n\t'Add column' => 'কলাম সংযোজন করুন',\n\t'Alter' => 'পরিবর্তন',\n\t'Add foreign key' => 'ফরেন কী সংযোজন করুন',\n\t'ON DELETE' => 'অন ডিলিট',\n\t'ON UPDATE' => 'অন আপডেট',\n\t'Index Type' => 'সূচী-ধরণ',\n\t'length' => 'দৈর্ঘ্য',\n\t'View has been dropped.' => 'ভিউ মুছে ফেলা হয়েছে।',\n\t'View has been altered.' => 'ভিউ পরিবর্তন করা হয়েছে।',\n\t'View has been created.' => 'ভিউ তৈরী করা হয়েছে।',\n\t'Alter view' => 'ভিউ পরিবর্তন করুন',\n\t'Create view' => 'ভিউ তৈরী করুন',\n\t'Name' => 'নাম',\n\t'Process list' => 'প্রসেস তালিকা',\n\t'%d process(es) have been killed.' => array('%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।', '%d টি প্রসেস(সমূহ) বিনষ্ট করা হয়েছে।'),\n\t'Kill' => 'বিনষ্ট করো',\n\t'Parameter name' => 'প্যারামিটারের নাম',\n\t'Database schema' => 'ডাটাবেজ স্কিমা',\n\t'Create procedure' => 'কার্যপ্রণালী তৈরী করুন',\n\t'Create function' => 'ফাংশন তৈরী করুন',\n\t'Routine has been dropped.' => 'রুটিন মুছে ফেলা হয়েছে।',\n\t'Routine has been altered.' => 'রুটিন পরিবর্তন করা হয়েছে।',\n\t'Routine has been created.' => 'রুটিন তৈরী করা হয়েছে।',\n\t'Alter function' => 'ফাংশন পরিবর্তন করুন',\n\t'Alter procedure' => 'কার্যপ্রণালী পরিবর্তন করুন',\n\t'Return type' => 'রিটার্ন টাইপ',\n\t'Add trigger' => 'ট্রিগার সংযোজন করুন',\n\t'Trigger has been dropped.' => 'ট্রিগার মুছে ফেলা হয়েছে।',\n\t'Trigger has been altered.' => 'ট্রিগার পরিবর্তন করা হয়েছে।',\n\t'Trigger has been created.' => 'ট্রিগার তৈরী করা হয়েছে।',\n\t'Alter trigger' => 'ট্রিগার পরিবর্তন করুন',\n\t'Create trigger' => 'ট্রিগার তৈরী করুন',\n\t'Time' => 'সময়',\n\t'Event' => 'ইভেন্ট',\n\t'%s version: %s through PHP extension %s' => 'ভার্সন %s: %s, %s PHP এক্সটেনশনের মধ্য দিয়ে',\n\t'%d row(s)' => array('%d সারি', '%d সারি সমূহ'),\n\t'Remove' => 'মুছে ফেলুন',\n\t'Are you sure?' => 'আপনি কি নিশ্চিত?',\n\t'Privileges' => 'প্রিভিলেজেস',\n\t'Create user' => 'ব্যবহারকারি তৈরী করুন',\n\t'User has been dropped.' => 'ব্যবহারকারি মুছে ফেলা হয়েছে।',\n\t'User has been altered.' => 'ব্যবহারকারি সম্পাদনা করা হয়েছে।',\n\t'User has been created.' => 'ব্যবহারকারি তৈরী করা হয়েছে।',\n\t'Hashed' => 'হ্যাশড',\n\t'Column' => 'কলাম',\n\t'Routine' => 'রুটিন',\n\t'Grant' => 'অনুমতি',\n\t'Revoke' => 'প্রত্যাহার',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'খুব বড় POST ডাটা। ডাটা সংক্ষিপ্ত করো অথবা %s কনফিগারেশন নির্দেশ বৃদ্ধি করো।',\n\t'Logged as: %s' => '%s হিসাবে লগড',\n\t'Move up' => 'উপরে স্থানান্তর',\n\t'Move down' => 'নীচে স্থানান্তর',\n\t'Functions' => 'ফাংশন সমূহ',\n\t'Aggregation' => 'সমষ্টি',\n\t'Export' => 'এক্সপোর্ট',\n\t'Output' => 'আউটপুট',\n\t'open' => 'খোলা',\n\t'save' => 'সংরক্ষণ',\n\t'Format' => 'বিন্যাস',\n\t'Tables' => 'টেবিলসমূহ',\n\t'Data' => 'ডাটা',\n\t'Event has been dropped.' => 'ইভেন্ট মুছে ফেলা হয়েছে।',\n\t'Event has been altered.' => 'ইভেন্ট সম্পাদনা করা হয়েছে।',\n\t'Event has been created.' => 'ইভেন্ট তৈরী করা হয়েছে।',\n\t'Alter event' => 'ইভেন্ট সম্পাদনা করো',\n\t'Create event' => 'ইভেন্ট তৈরী করো',\n\t'At given time' => 'প্রদত্ত সময়ে',\n\t'Every' => 'প্রত্যেক',\n\t'Events' => 'ইভেন্টসমূহ',\n\t'Schedule' => 'সময়সূচি',\n\t'Start' => 'শুরু',\n\t'End' => 'সমাপ্তি',\n\t'Status' => 'অবস্থা',\n\t'On completion preserve' => 'সমাপ্ত হওয়ার পর সংরক্ষন করুন',\n\t'Tables and views' => 'টেবিল এবং ভিউ সমূহ',\n\t'Data Length' => 'ডাটার দৈর্ঘ্য',\n\t'Index Length' => 'ইনডেক্স এর দৈর্ঘ্য',\n\t'Data Free' => 'তথ্য মুক্ত',\n\t'Collation' => 'কলোকেশন',\n\t'Analyze' => 'বিশ্লেষণ',\n\t'Optimize' => 'অপটিমাইজ',\n\t'Check' => 'পরীক্ষা',\n\t'Repair' => 'মেরামত',\n\t'Truncate' => 'ছাঁটাই',\n\t'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে।',\n\t'Rows' => 'সারিসমূহ',\n\t',' => ',',\n\t'0123456789' => '০১২৩৪৫৬৭৮৯',\n\t'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',\n\t'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করুন',\n\t'Move' => 'স্থানান্তর করুন',\n\t'Engine' => 'ইঞ্জিন',\n\t'Save and continue edit' => 'সংরক্ষণ করুন এবং সম্পাদনা চালিয়ে যান',\n\t'original' => 'প্রকৃত',\n\t'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',\n\t'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে।',\n\t'Whole result' => 'সম্পূর্ণ ফলাফল',\n\t'Clone' => 'ক্লোন',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'অনুমোদিত ফিল্ড এর সর্বাধিক সংখ্যা অতিক্রম করে গেছে। অনুগ্রহপূর্বক %s বৃদ্ধি করুন।',\n\t'Partition by' => 'পার্টিশন যার মাধ্যমে',\n\t'Partitions' => 'পার্টিশন',\n\t'Partition name' => 'পার্টিশনের নাম',\n\t'Values' => 'মানসমূহ',\n\t'%d row(s) have been imported.' => array('%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।', '%d টি সারি(সমূহ) ইমপোর্ট করা হয়েছে।'),\n\t'anywhere' => 'যে কোন স্থানে',\n\t'Import' => 'ইমপোর্ট',\n\t'Stop on error' => 'ত্রুটি পেলে থেমে যান',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$6.$4.$1',\n\t'[yyyy]-mm-dd' => 't.m.[jjjj]',\n\t'History' => 'ইতিহাস',\n\t'Variables' => 'চলকসমূহ',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'সোর্স এবং টার্গেট কলামে একই ডাটা টাইপ থাকতে হবে, টার্গেট কলামসমূহে একটি সূচী এবং রেফারেন্সড ডেটার উপস্থিতি থাকা আবশ্যক।',\n\t'Relations' => 'সম্পর্ক',\n\t'Run file' => 'ফাইল চালাও',\n\t'Clear' => 'সাফ করো',\n\t'Maximum allowed file size is %sB.' => 'সর্বাধিক অনুমোদিত ফাইল সাইজ %sB।',\n\t'Numbers' => 'সংখ্যা',\n\t'Date and time' => 'তারিখ এবং সময়',\n\t'Strings' => 'স্ট্রিং',\n\t'Binary' => 'বাইনারি',\n\t'Lists' => 'তালিকা',\n\t'Editor' => 'সম্পাদক',\n\t'Webserver file %s' => 'ওয়েবসার্ভার ফাইল %s',\n\t'File does not exist.' => 'ফাইলটির কোন অস্তিত্ব নেই।',\n\t'%d in total' => 'সর্বমোটঃ %d টি',\n\t'Permanent login' => 'স্থায়ী লগইন',\n\t'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',\n\t'Search data in tables' => 'টেবিলে তথ্য খুঁজুন',\n\t'Schema' => 'স্কিমা',\n\t'Alter schema' => 'স্কিমা পরিবর্তন করো',\n\t'Create schema' => 'স্কিমা তৈরী করো',\n\t'Schema has been dropped.' => 'স্কিমা মুছে ফেলা হয়েছে।',\n\t'Schema has been created.' => 'স্কিমা তৈরি করা হয়েছে।',\n\t'Schema has been altered.' => 'স্কিমা সম্পাদনা করা হয়েছে।',\n\t'Sequences' => 'অনুক্রম',\n\t'Create sequence' => 'অনুক্রম তৈরি করো',\n\t'Alter sequence' => 'অনুক্রম সম্পাদনা করো',\n\t'Sequence has been dropped.' => 'অনুক্রম মুছে ফেলা হয়েছে।',\n\t'Sequence has been created.' => 'অনুক্রম তৈরি করা হয়েছে।',\n\t'Sequence has been altered.' => 'অনুক্রম সম্পাদনা করা হয়েছে।',\n\t'User types' => 'ব্যবহারকারির ধরণ',\n\t'Create type' => 'ধরণ তৈরী করুন',\n\t'Alter type' => 'ধরণ পরিবর্তন করুন',\n\t'Type has been dropped.' => 'ধরণ মুছে ফেলা হয়েছে।',\n\t'Type has been created.' => 'ধরণ তৈরি করা হয়েছে।',\n\t'Use edit link to modify this value.' => 'এই মানটি পরিবর্তনের জন্য সম্পাদনা লিঙ্ক ব্যবহার করুন।',\n\t'last' => 'সর্বশেষ',\n\t'From server' => 'সার্ভার থেকে',\n\t'System' => 'সিস্টেম',\n\t'Select data' => 'তথ্য নির্বাচন করো',\n\t'Show structure' => 'গঠন দেখান',\n\t'empty' => 'খালি',\n\t'Network' => 'নেটওয়ার্ক',\n\t'Geometry' => 'জ্যামিতি',\n\t'File exists.' => 'ফাইল রয়েছে।',\n\t'%d query(s) executed OK.' => array('SQL-অনুসন্ধান সফলভাবে সম্পন্ন হয়েছে।', '%d SQL-অনুসন্ধানসমূহ সফলভাবে সম্পন্ন হয়েছে।'),\n\t'Show only errors' => 'শুধুমাত্র ত্রুটিগুলো দেখান',\n\t'Refresh' => 'রিফ্রেশ',\n\t'Invalid schema.' => 'অবৈধ স্কিমা।',\n\t'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করুন।',\n\t'now' => 'এখন',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'টেবিলগুলো কপি করা হয়েছে।',\n\t'Copy' => 'কপি',\n\t'Permanent link' => 'স্থায়ী লিংক',\n\t'Edit all' => 'সবগুলো সম্পাদনা করুন',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Check has been dropped.' => 'চেক ড্রপ করা হয়েছে।',\n\t'Check has been altered.' => 'চেক পরিবর্তন করা হয়েছে।',\n\t'Check has been created.' => 'চেক তৈরি করা হয়েছে।',\n\t'Alter check' => 'চেক পরিবর্তন করুন',\n\t'Create check' => 'চেক তৈরি করুন',\n\t'Drop %s?' => '%s ড্রপ করবেন?',\n\t'Tables have been optimized.' => 'টেবিলগুলি অপ্টিমাইজ করা হয়েছে।',\n\t'Materialized view' => 'মেটেরিয়ালাইজড ভিউ',\n\t'Vacuum' => 'ভ্যাকুয়াম',\n\t'Selected' => 'নির্বাচিত',\n\t'overwrite' => 'ওভাররাইট',\n\t'DB' => 'ডিবি',\n\t'Algorithm' => 'অ্যালগরিদম',\n\t'Columns' => 'কলাম',\n\t'Ctrl+click on a value to modify it.' => 'একটি মান পরিবর্তন করতে Ctrl+ক্লিক করুন।',\n\t'File must be in UTF-8 encoding.' => 'ফাইলটি UTF-8 এনকোডিংয়ে হতে হবে।',\n\t'Modify' => 'পরিবর্তন করুন',\n\t'Load more data' => 'আরও ডেটা লোড করুন',\n\t'Loading' => 'লোড হচ্ছে',\n\t'ATTACH queries are not supported.' => 'ATTACH কোয়েরি সমর্থিত নয়।',\n\t'Warnings' => 'সতর্কতা',\n\t'%d / ' => array('%d / '),\n\t'Limit rows' => 'সারি সীমিত করুন',\n\t'Inherits from' => 'থেকে উত্তরাধিকারসূত্রে প্রাপ্ত',\n\t'Checks' => 'চেকস',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer পাসওয়ার্ড ছাড়া ডাটাবেস অ্যাক্সেস সমর্থন করে না, <a href=\"https://www.adminer.org/en/password/\"%s>আরও তথ্য</a>।',\n\t'Default value' => 'ডিফল্ট মান',\n\t'Full table scan' => 'সম্পূর্ণ টেবিল স্ক্যান',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('অনেকগুলি ব্যর্থ লগইন প্রচেষ্টা, %d মিনিট পরে আবার চেষ্টা করুন।'),\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Adminer ব্যবহার করার জন্য ধন্যবাদ, <a href=\"https://www.adminer.org/en/donation/\">দান করার</a> কথা বিবেচনা করুন।',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'মাস্টার পাসওয়ার্ডের মেয়াদ শেষ হয়েছে। এটিকে স্থায়ী করতে <a href=\"https://www.adminer.org/en/extension/\"%s>ইমপ্লিমেন্ট</a> %s মেথড।',\n\t'The action will be performed after successful login with the same credentials.' => 'একই ক্রেডেনশিয়ালস দিয়ে সফলভাবে লগইন করার পরে এই কর্মটি সম্পাদন করা হবে।',\n\t'Connecting to privileged ports is not allowed.' => 'প্রিভিলেজড পোর্টে সংযোগ করা অনুমোদিত নয়।',\n\t'There is a space in the input password which might be the cause.' => 'ইনপুট পাসওয়ার্ডে একটি স্পেস রয়েছে যা এর কারণ হতে পারে।',\n\t'If you did not send this request from Adminer then close this page.' => 'আপনি যদি Adminer থেকে এই অনুরোধ না করে থাকেন তবে এই পৃষ্ঠাটি বন্ধ করুন।',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'আপনি FTP এর মাধ্যমে একটি বড় SQL ফাইল আপলোড করতে পারেন এবং সার্ভার থেকে এটি ইম্পোর্ট করতে পারেন।',\n\t'Size' => 'আকার',\n\t'Compute' => 'কম্পিউট',\n\t'Loaded plugins' => 'লোড করা প্লাগইনগুলি',\n\t'screenshot' => 'স্ক্রিনশট',\n\t'You are offline.' => 'আপনি অফলাইনে আছেন।',\n\t'You have no privileges to update this table.' => 'এই টেবিল আপডেট করার জন্য আপনার কোন অনুমতি নেই।',\n\t'Saving' => 'সংরক্ষণ করা হচ্ছে',\n\t'Unknown error.' => 'অজানা ত্রুটি।',\n\t'%s must <a%s>return an array</a>.' => '%s অবশ্যই <a%s>একটি অ্যারে রিটার্ন করতে হবে</a>।',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>কনফিগার করুন</a> %s এ %s।',\n\t'Disable %s or enable %s or %s extensions.' => '%s নিষ্ক্রিয় করুন অথবা %s বা %s এক্সটেনশন সক্রিয় করুন।',\n\t'Database does not support password.' => 'ডাটাবেস পাসওয়ার্ড সমর্থন করে না।',\n\t'yes' => 'হ্যাঁ',\n\t'no' => 'না',\n);\n\n// run `php ../../lang.php bn` to update this file\n"
  },
  {
    "path": "adminer/lang/bs.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sistem',\n\t'Server' => 'Server',\n\t'Username' => 'Korisničko ime',\n\t'Password' => 'Lozinka',\n\t'Permanent login' => 'Trajna prijava',\n\t'Login' => 'Prijava',\n\t'Logout' => 'Odjava',\n\t'Logged as: %s' => 'Prijavi se kao: %s',\n\t'Logout successful.' => 'Uspešna odjava.',\n\t'Invalid credentials.' => 'Nevažeće dozvole.',\n\t'Language' => 'Jezik',\n\t'Invalid CSRF token. Send the form again.' => 'Nevažeći CSRF kod. Proslijedite ponovo formu.',\n\t'No extension' => 'Bez dodataka',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nijedan od podržanih PHP dodataka (%s) nije dostupan.',\n\t'Session support must be enabled.' => 'Morate omogućiti podršku za sesije.',\n\t'Session expired, please login again.' => 'Vaša sesija je istekla, prijavite se ponovo.',\n\t'%s version: %s through PHP extension %s' => '%s verzija: %s pomoću PHP dodatka je %s',\n\t'Refresh' => 'Osveži',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Dozvole',\n\t'Create user' => 'Novi korisnik',\n\t'User has been dropped.' => 'Korisnik je izbrisan.',\n\t'User has been altered.' => 'Korisnik je izmijenjen.',\n\t'User has been created.' => 'korisnik je spašen.',\n\t'Hashed' => 'Heširano',\n\t'Column' => 'kolumna',\n\t'Routine' => 'Rutina',\n\t'Grant' => 'Dozvoli',\n\t'Revoke' => 'Opozovi',\n\n\t'Process list' => 'Spisak procesa',\n\t'%d process(es) have been killed.' => array('%d proces je ukinut.', '%d procesa su ukinuta.', '%d procesa je ukinuto.'),\n\t'Kill' => 'Ubij',\n\n\t'Variables' => 'Promijenljive',\n\t'Status' => 'Status',\n\n\t'SQL command' => 'SQL komanda',\n\t'%d query(s) executed OK.' => array('%d upit je uspiješno izvršen.', '%d upita su uspiješno izvršena.', '%d upita je uspiješno izvršeno.'),\n\t'Query executed OK, %d row(s) affected.' => array('Upit je uspiješno izvršen, %d red je ažuriran.', 'Upit je uspiješno izvršen, %d reda su ažurirana.', 'Upit je uspiješno izvršen, %d redova je ažurirano.'),\n\t'No commands to execute.' => 'Bez komandi za izvršavanje.',\n\t'Error in query' => 'Greška u upitu',\n\t'Execute' => 'Izvrši',\n\t'Stop on error' => 'Zaustavi prilikom greške',\n\t'Show only errors' => 'Prikazuj samo greške',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historijat',\n\t'Clear' => 'Očisti',\n\t'Edit all' => 'Izmijeni sve',\n\n\t'File upload' => 'Slanje datoteka',\n\t'From server' => 'Sa servera',\n\t'Webserver file %s' => 'Datoteka %s sa veb servera',\n\t'Run file' => 'Pokreni datoteku',\n\t'File does not exist.' => 'Datoteka ne postoji.',\n\t'File uploads are disabled.' => 'Onemogućeno je slanje datoteka.',\n\t'Unable to upload a file.' => 'Slanje datoteke nije uspelo.',\n\t'Maximum allowed file size is %sB.' => 'Najveća dozvoljena veličina datoteke je %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliki POST podatak. Morate da smanjite podatak ili povećajte vrijednost konfiguracione direktive %s.',\n\n\t'Export' => 'Izvoz',\n\t'Output' => 'Ispis',\n\t'open' => 'otvori',\n\t'save' => 'spasi',\n\t'Format' => 'Format',\n\t'Data' => 'Podaci',\n\n\t'Database' => 'Baza podataka',\n\t'Use' => 'Koristi',\n\t'Select database' => 'Izaberite bazu',\n\t'Invalid database.' => 'Neispravna baza podataka.',\n\t'Database has been dropped.' => 'Baza podataka je izbrisana.',\n\t'Databases have been dropped.' => 'Baze podataka su izbrisane.',\n\t'Database has been created.' => 'Baza podataka je spašena.',\n\t'Database has been renamed.' => 'Baza podataka je preimenovana.',\n\t'Database has been altered.' => 'Baza podataka je izmijenjena.',\n\t'Alter database' => 'Ažuriraj bazu podataka',\n\t'Create database' => 'Formiraj bazu podataka',\n\t'Database schema' => 'Šema baze podataka',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Trajna veza',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Stroj',\n\t'Collation' => 'Sravnjivanje',\n\t'Data Length' => 'Dužina podataka',\n\t'Index Length' => 'Dužina indeksa',\n\t'Data Free' => 'Slobodno podataka',\n\t'Rows' => 'Redova',\n\t'%d in total' => 'ukupno %d',\n\t'Analyze' => 'Analiziraj',\n\t'Optimize' => 'Optimizuj',\n\t'Check' => 'Provjeri',\n\t'Repair' => 'Popravi',\n\t'Truncate' => 'Isprazni',\n\t'Tables have been truncated.' => 'Tabele su ispražnjene.',\n\t'Move to other database' => 'Premijesti u drugu bazu podataka',\n\t'Move' => 'Premijesti',\n\t'Tables have been moved.' => 'Tabele su premješćene.',\n\t'Copy' => 'Umnoži',\n\t'Tables have been copied.' => 'Tabele su umnožene.',\n\n\t'Routines' => 'Rutine',\n\t'Routine has been called, %d row(s) affected.' => array('Pozvana je rutina, %d red je ažuriran.', 'Pozvana je rutina, %d reda su ažurirani.', 'Pozvana je rutina, %d redova je ažurirano.'),\n\t'Call' => 'Pozovi',\n\t'Parameter name' => 'Naziv parametra',\n\t'Create procedure' => 'Formiraj proceduru',\n\t'Create function' => 'Formiraj funkciju',\n\t'Routine has been dropped.' => 'Rutina je izbrisana.',\n\t'Routine has been altered.' => 'Rutina je izmijenjena.',\n\t'Routine has been created.' => 'Rutina je spašena.',\n\t'Alter function' => 'Ažuriraj funkciju',\n\t'Alter procedure' => 'Ažuriraj proceduru',\n\t'Return type' => 'Povratni tip',\n\n\t'Events' => 'Događaji',\n\t'Event has been dropped.' => 'Događaj je izbrisan.',\n\t'Event has been altered.' => 'Događaj je izmijenjen.',\n\t'Event has been created.' => 'Događaj je spašen.',\n\t'Alter event' => 'Ažuriraj događaj',\n\t'Create event' => 'Napravi događaj',\n\t'At given time' => 'U zadato vrijeme',\n\t'Every' => 'Svaki',\n\t'Schedule' => 'Raspored',\n\t'Start' => 'Početak',\n\t'End' => 'Kraj',\n\t'On completion preserve' => 'Zadrži po završetku',\n\n\t'Tables' => 'Tabele',\n\t'Tables and views' => 'Tabele i pogledi',\n\t'Table' => 'Tabela',\n\t'No tables.' => 'Bez tabela.',\n\t'Alter table' => 'Ažuriraj tabelu',\n\t'Create table' => 'Napravi tabelu',\n\t'Table has been dropped.' => 'Tabela je izbrisana.',\n\t'Tables have been dropped.' => 'Tabele su izbrisane.',\n\t'Tables have been optimized.' => 'Tabele su optimizovane.',\n\t'Table has been altered.' => 'Tabela je izmijenjena.',\n\t'Table has been created.' => 'Tabela je spašena.',\n\t'Table name' => 'Naziv tabele',\n\t'Show structure' => 'Prikaži strukturu',\n\t'engine' => 'stroj',\n\t'collation' => 'Sravnjivanje',\n\t'Column name' => 'Naziv kolumne',\n\t'Type' => 'Tip',\n\t'Length' => 'Dužina',\n\t'Auto Increment' => 'Auto-priraštaj',\n\t'Options' => 'Opcije',\n\t'Comment' => 'Komentar',\n\t'Default values' => 'Podrazumijevane vrijednosti',\n\t'Drop' => 'Izbriši',\n\t'Are you sure?' => 'Da li ste sigurni?',\n\t'Move up' => 'Pomijeri na gore',\n\t'Move down' => 'Pomijeri na dole',\n\t'Remove' => 'Ukloni',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Premašen je maksimalni broj dozvoljenih polja. Molim uvećajte %s.',\n\n\t'Partition by' => 'Podijeli po',\n\t'Partitions' => 'Podijele',\n\t'Partition name' => 'Ime podijele',\n\t'Values' => 'Vrijednosti',\n\n\t'View' => 'Pogled',\n\t'View has been dropped.' => 'Pogled je izbrisan.',\n\t'View has been altered.' => 'Pogled je izmijenjen.',\n\t'View has been created.' => 'Pogled je spašen.',\n\t'Alter view' => 'Ažuriraj pogled',\n\t'Create view' => 'Napravi pogled',\n\n\t'Indexes' => 'Indeksi',\n\t'Indexes have been altered.' => 'Indeksi su izmijenjeni.',\n\t'Alter indexes' => 'Ažuriraj indekse',\n\t'Add next' => 'Dodaj slijedeći',\n\t'Index Type' => 'Tip indeksa',\n\t'length' => 'dužina',\n\n\t'Foreign keys' => 'Strani ključevi',\n\t'Foreign key' => 'Strani ključ',\n\t'Foreign key has been dropped.' => 'Strani ključ je izbrisan.',\n\t'Foreign key has been altered.' => 'Strani ključ je izmijenjen.',\n\t'Foreign key has been created.' => 'Strani ključ je spašen.',\n\t'Target table' => 'Ciljna tabela',\n\t'Change' => 'izmijeni',\n\t'Source' => 'Izvor',\n\t'Target' => 'Cilj',\n\t'Add column' => 'Dodaj kolumnu',\n\t'Alter' => 'Ažuriraj',\n\t'Add foreign key' => 'Dodaj strani ključ',\n\t'ON DELETE' => 'ON DELETE (prilikom brisanja)',\n\t'ON UPDATE' => 'ON UPDATE (prilikom osvežavanja)',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Izvorne i ciljne kolumne moraju biti istog tipa, ciljna kolumna mora biti indeksirana i izvorna tabela mora sadržati podatke iz ciljne.',\n\n\t'Triggers' => 'Okidači',\n\t'Add trigger' => 'Dodaj okidač',\n\t'Trigger has been dropped.' => 'Okidač je izbrisan.',\n\t'Trigger has been altered.' => 'Okidač je izmijenjen.',\n\t'Trigger has been created.' => 'Okidač je spašen.',\n\t'Alter trigger' => 'Ažuriraj okidač',\n\t'Create trigger' => 'Formiraj okidač',\n\t'Time' => 'Vrijeme',\n\t'Event' => 'Događaj',\n\t'Name' => 'Ime',\n\n\t'select' => 'izaberi',\n\t'Select' => 'Izaberi',\n\t'Selected' => 'Izabrano',\n\t'Select data' => 'Izaberi podatke',\n\t'Functions' => 'Funkcije',\n\t'Aggregation' => 'Sakupljanje',\n\t'Search' => 'Pretraga',\n\t'anywhere' => 'bilo gdje',\n\t'Search data in tables' => 'Pretraži podatke u tabelama',\n\t'Sort' => 'Poređaj',\n\t'descending' => 'opadajuće',\n\t'Limit' => 'Granica',\n\t'Text length' => 'Dužina teksta',\n\t'Action' => 'Akcija',\n\t'Full table scan' => 'Skreniranje kompletne tabele',\n\t'Unable to select the table' => 'Ne mogu da izaberem tabelu',\n\t'No rows.' => 'Bez redova.',\n\t'%d row(s)' => array('%d red', '%d reda', '%d redova'),\n\t'Page' => 'Strana',\n\t'last' => 'poslijednja',\n\t'Loading' => 'Učitavam',\n\t'Load more data' => 'Učitavam još podataka',\n\t'Whole result' => 'Ceo rezultat',\n\t'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajtova'),\n\n\t'Import' => 'Uvoz',\n\t'%d row(s) have been imported.' => array('%d red je uvežen.', '%d reda su uvežena.', '%d redova je uveženo.'),\n\n\t// in-place editing in select\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klik na vrijednost za izmijenu.',\n\t'Use edit link to modify this value.' => 'Koristi vezu za izmijenu ove vrijednosti.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Stavka %s je spašena.',\n\t'Item has been deleted.' => 'Stavka je izbrisana.',\n\t'Item has been updated.' => 'Stavka je izmijenjena.',\n\t'%d item(s) have been affected.' => array('%d stavka je ažurirana.', '%d stavke su ažurirane.', '%d stavki je ažurirano.'),\n\t'New item' => 'Nova stavka',\n\t'original' => 'original',\n\t// label for value '' in enum data type\n\t'empty' => 'prazno',\n\t'edit' => 'izmijeni',\n\t'Edit' => 'Izmijeni',\n\t'Insert' => 'Umetni',\n\t'Save' => 'Sačuvaj',\n\t'Save and continue edit' => 'Sačuvaj i nastavi uređenje',\n\t'Save and insert next' => 'Sačuvaj i umijetni slijedeće',\n\t'Clone' => 'Dupliraj',\n\t'Delete' => 'Izbriši',\n\t'Modify' => 'Izmjene',\n\n\t// data type descriptions\n\t'Numbers' => 'Broj',\n\t'Date and time' => 'Datum i vrijeme',\n\t'Strings' => 'Tekst',\n\t'Binary' => 'Binarno',\n\t'Lists' => 'Liste',\n\t'Network' => 'Mreža',\n\t'Geometry' => 'Geometrija',\n\t'Relations' => 'Odnosi',\n\n\t'Editor' => 'Uređivač',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5.$3.$1.',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'dd.mm.[yyyy].',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'sad',\n\t'yes' => 'da',\n\t'no' => 'ne',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Datoteka već postoji.',\n\t'Please use one of the extensions %s.' => 'Molim koristite jedan od nastavaka %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Ažuriraj šemu',\n\t'Create schema' => 'Formiraj šemu',\n\t'Schema has been dropped.' => 'Šema je izbrisana.',\n\t'Schema has been created.' => 'Šema je spašena.',\n\t'Schema has been altered.' => 'Šema je izmijenjena.',\n\t'Schema' => 'Šema',\n\t'Invalid schema.' => 'Šema nije ispravna.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Nizovi',\n\t'Create sequence' => 'Napravi niz',\n\t'Sequence has been dropped.' => 'Niz je izbrisan.',\n\t'Sequence has been created.' => 'Niz je formiran.',\n\t'Sequence has been altered.' => 'Niz je izmijenjen.',\n\t'Alter sequence' => 'Ažuriraj niz',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Korisnički tipovi',\n\t'Create type' => 'Definiši tip',\n\t'Type has been dropped.' => 'Tip je izbrisan.',\n\t'Type has been created.' => 'tip je spašen.',\n\t'Alter type' => 'Ažuriraj tip',\n);\n\n// run `php ../../lang.php bs` to update this file\n"
  },
  {
    "path": "adminer/lang/ca.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Inicia la sessió',\n\t'Logout successful.' => 'Desconnexió correcta.',\n\t'Invalid credentials.' => 'Credencials invàlides.',\n\t'Server' => 'Servidor',\n\t'Username' => 'Nom d\\'usuari',\n\t'Password' => 'Contrasenya',\n\t'Select database' => 'Selecciona base de dades',\n\t'Invalid database.' => 'Base de dades invàlida.',\n\t'Table has been dropped.' => 'S\\'ha suprimit la taula.',\n\t'Table has been altered.' => 'S\\'ha modificat la taula.',\n\t'Table has been created.' => 'S\\'ha creat la taula.',\n\t'Alter table' => 'Modifica la taula',\n\t'Create table' => 'Crea una taula',\n\t'Table name' => 'Nom de la taula',\n\t'engine' => 'motor',\n\t'collation' => 'compaginació',\n\t'Column name' => 'Nom de la columna',\n\t'Type' => 'Tipus',\n\t'Length' => 'Llargada',\n\t'Auto Increment' => 'Increment automàtic',\n\t'Options' => 'Opcions',\n\t'Save' => 'Desa',\n\t'Drop' => 'Suprimeix',\n\t'Database has been dropped.' => 'S\\'ha suprimit la base de dades.',\n\t'Database has been created.' => 'S\\'ha creat la base de dades.',\n\t'Database has been renamed.' => 'S\\'ha canviat el nom de la base de dades.',\n\t'Database has been altered.' => 'S\\'ha modificat la base de dades.',\n\t'Alter database' => 'Modifica la base de dades',\n\t'Create database' => 'Crea una base de dades',\n\t'SQL command' => 'Ordre SQL',\n\t'Logout' => 'Desconnecta',\n\t'Use' => 'Utilitza',\n\t'No tables.' => 'No hi ha cap taula.',\n\t'select' => 'registres',\n\t'Item has been deleted.' => 'S\\'ha suprimit l\\'element.',\n\t'Item has been updated.' => 'S\\'ha actualitzat l\\'element.',\n\t'Item%s has been inserted.' => 'S\\'ha insertat l\\'element%s.',\n\t'Edit' => 'Edita',\n\t'Insert' => 'Insereix',\n\t'Save and insert next' => 'Desa i insereix el següent',\n\t'Delete' => 'Suprimeix',\n\t'Database' => 'Base de dades',\n\t'Routines' => 'Rutines',\n\t'Indexes have been altered.' => 'S\\'han modificat els índex.',\n\t'Indexes' => 'Índexs',\n\t'Alter indexes' => 'Modifica els índex',\n\t'Add next' => 'Afegeix el següent',\n\t'Language' => 'Idioma',\n\t'Select' => 'Selecciona',\n\t'New item' => 'Nou element',\n\t'Search' => 'Cerca',\n\t'Sort' => 'Ordena',\n\t'descending' => 'descendent',\n\t'Limit' => 'Límit',\n\t'No rows.' => 'No hi ha cap registre.',\n\t'Action' => 'Acció',\n\t'edit' => 'edita',\n\t'Page' => 'Plana',\n\t'Query executed OK, %d row(s) affected.' => array('Consulta executada correctament, %d registre modificat.', 'Consulta executada correctament, %d registres modificats.'),\n\t'Error in query' => 'Error en la consulta',\n\t'Execute' => 'Executa',\n\t'Table' => 'Taula',\n\t'Foreign keys' => 'Claus foranes',\n\t'Triggers' => 'Activadors',\n\t'View' => 'Vista',\n\t'Unable to select the table' => 'Impossible seleccionar la taula',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF invàlid. Torna a enviar el formulari.',\n\t'Comment' => 'Comentari',\n\t'Default values' => 'Valors per defecte',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Cap comanda per executar.',\n\t'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',\n\t'File upload' => 'Adjunta un fitxer',\n\t'File uploads are disabled.' => 'La pujada de fitxers està desactivada.',\n\t'Routine has been called, %d row(s) affected.' => array('S\\'ha cridat la rutina, %d registre modificat.', 'S\\'ha cridat la rutina, %d registres modificats.'),\n\t'Call' => 'Crida',\n\t'No extension' => 'Cap extensió',\n\t'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP suportades (%s) disponible.',\n\t'Session support must be enabled.' => 'Cal que estigui permès l\\'us de sessions.',\n\t'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',\n\t'Text length' => 'Longitud del text',\n\t'Foreign key has been dropped.' => 'S\\'ha suprimit la clau forana.',\n\t'Foreign key has been altered.' => 'S\\'ha modificat la clau forana.',\n\t'Foreign key has been created.' => 'S\\'ha creat la clau forana.',\n\t'Foreign key' => 'Clau forana',\n\t'Target table' => 'Taula de destinació',\n\t'Change' => 'Canvi',\n\t'Source' => 'Font',\n\t'Target' => 'Destí',\n\t'Add column' => 'Afegeix una columna',\n\t'Alter' => 'Modifica',\n\t'Add foreign key' => 'Afegeix una clau forana',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Tipus d\\'índex',\n\t'length' => 'longitud',\n\t'View has been dropped.' => 'S\\'ha suprimit la vista.',\n\t'View has been altered.' => 'S\\'ha modificat la vista.',\n\t'View has been created.' => 'S\\'ha creat la vista.',\n\t'Alter view' => 'Modifica la vista',\n\t'Create view' => 'Crea una vista',\n\t'Name' => 'Nom',\n\t'Process list' => 'Llista de processos',\n\t'%d process(es) have been killed.' => array('S\\'ha aturat %d procés.', 'S\\'han aturat %d processos.'),\n\t'Kill' => 'Atura',\n\t'Parameter name' => 'Nom del paràmetre',\n\t'Database schema' => 'Esquema de la base de dades',\n\t'Create procedure' => 'Crea un procediment',\n\t'Create function' => 'Crea una funció',\n\t'Routine has been dropped.' => 'S\\'ha suprimit la rutina.',\n\t'Routine has been altered.' => 'S\\'ha modificat la rutina.',\n\t'Routine has been created.' => 'S\\'ha creat la rutina.',\n\t'Alter function' => 'Modifica la funció',\n\t'Alter procedure' => 'Modifica el procediment',\n\t'Return type' => 'Tipus retornat',\n\t'Add trigger' => 'Afegeix un activador',\n\t'Trigger has been dropped.' => 'S\\'ha suprimit l\\'activador.',\n\t'Trigger has been altered.' => 'S\\'ha modificat l\\'activador.',\n\t'Trigger has been created.' => 'S\\'ha creat l\\'activador.',\n\t'Alter trigger' => 'Modifica l\\'activador',\n\t'Create trigger' => 'Crea un activador',\n\t'Time' => 'Temps',\n\t'Event' => 'Event',\n\t'%s version: %s through PHP extension %s' => 'Versió %s: %s amb l\\'extensió de PHP %s',\n\t'%d row(s)' => array('%d registre', '%d registres'),\n\t'Remove' => 'Suprimeix',\n\t'Are you sure?' => 'Estàs segur?',\n\t'Privileges' => 'Privilegis',\n\t'Create user' => 'Crea un usuari',\n\t'User has been dropped.' => 'S\\'ha suprimit l\\'usuari.',\n\t'User has been altered.' => 'S\\'ha modificat l\\'usuari.',\n\t'User has been created.' => 'S\\'ha creat l\\'usuari.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Columna',\n\t'Routine' => 'Rutina',\n\t'Grant' => 'Grant',\n\t'Revoke' => 'Revoke',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',\n\t'Logged as: %s' => 'Connectat com a: %s',\n\t'Move up' => 'Mou a dalt',\n\t'Move down' => 'Mou a baix',\n\t'Functions' => 'Funcions',\n\t'Aggregation' => 'Agregació',\n\t'Export' => 'Exporta',\n\t'Output' => 'Sortida',\n\t'open' => 'obre',\n\t'save' => 'desa',\n\t'Format' => 'Format',\n\t'Tables' => 'Taules',\n\t'Data' => 'Dades',\n\t'Event has been dropped.' => 'S\\'ha suprimit l\\'event.',\n\t'Event has been altered.' => 'S\\'ha modificat l\\'event.',\n\t'Event has been created.' => 'S\\'ha creat l\\'event.',\n\t'Alter event' => 'Modifica l\\'event',\n\t'Create event' => 'Crea un event',\n\t'At given time' => 'A un moment donat',\n\t'Every' => 'Cada',\n\t'Events' => 'Events',\n\t'Schedule' => 'Horari',\n\t'Start' => 'Comença',\n\t'End' => 'Acaba',\n\t'Status' => 'Estat',\n\t'On completion preserve' => 'Conservar en completar',\n\t'Tables and views' => 'Taules i vistes',\n\t'Data Length' => 'Longitud de les dades',\n\t'Index Length' => 'Longitud de l\\'índex',\n\t'Data Free' => 'Espai lliure',\n\t'Collation' => 'Compaginació',\n\t'Analyze' => 'Analitza',\n\t'Optimize' => 'Optimitza',\n\t'Check' => 'Verifica',\n\t'Repair' => 'Repara',\n\t'Truncate' => 'Escapça',\n\t'Tables have been truncated.' => 'S\\'han escapçat les taules.',\n\t'Rows' => 'Files',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'S\\'han desplaçat les taules.',\n\t'Move to other database' => 'Desplaça a una altra base de dades',\n\t'Move' => 'Desplaça',\n\t'Engine' => 'Motor',\n\t'Save and continue edit' => 'Desa i segueix editant',\n\t'original' => 'original',\n\t'%d item(s) have been affected.' => array('S\\'ha modificat %d element.', 'S\\'han modificat %d elements.'),\n\t'Whole result' => 'Tots els resultats',\n\t'Tables have been dropped.' => 'S\\'han suprimit les taules.',\n\t'Clone' => 'Clona',\n\t'Partition by' => 'Fes particions segons',\n\t'Partitions' => 'Particions',\n\t'Partition name' => 'Nom de la partició',\n\t'Values' => 'Valors',\n\t'%d row(s) have been imported.' => array('S\\'ha importat %d registre.', 'S\\'han importat %d registres.'),\n\t'Import' => 'Importa',\n\t'Show structure' => 'Mostra l\\'estructura',\n\t'Select data' => 'Selecciona dades',\n\t'Stop on error' => 'Atura en trobar un error',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'S\\'ha assolit el nombre màxim de camps. Incrementa %s.',\n\t'anywhere' => 'a qualsevol lloc',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',\n\t'History' => 'Història',\n\t'Variables' => 'Variables',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes d\\'origen i de destinació han de ser del mateix tipus, la columna de destinació ha d\\'estar indexada i les dades referenciades han d\\'existir.',\n\t'Run file' => 'Executa el fitxer',\n\t'Numbers' => 'Nombres',\n\t'Date and time' => 'Data i hora',\n\t'Strings' => 'Cadenes',\n\t'Binary' => 'Binari',\n\t'Lists' => 'Llistes',\n\t'Relations' => 'Relacions',\n\t'Maximum allowed file size is %sB.' => 'La mida màxima permesa del fitxer és de %sB.',\n\t'Clear' => 'Suprimeix',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Fitxer %s del servidor web',\n\t'File does not exist.' => 'El fitxer no existeix.',\n\t'Permanent login' => 'Sessió permanent',\n\t'%d in total' => '%d en total',\n\t'System' => 'Sistema',\n\t'last' => 'darrera',\n\t'Network' => 'Xarxa',\n\t'Geometry' => 'Geometria',\n\t'Databases have been dropped.' => 'S\\'han suprimit les bases de dades.',\n\t'File exists.' => 'El fitxer ja existeix.',\n\t'Ctrl+click on a value to modify it.' => 'Fes un Ctrl+clic a un valor per modificar-lo.',\n\t'Use edit link to modify this value.' => 'Utilitza l\\'enllaç d\\'edició per modificar aquest valor.',\n\t'Alter schema' => 'Modifica l\\'esquema',\n\t'Create schema' => 'Crea un esquema',\n\t'Schema has been dropped.' => 'S\\'ha suprimit l\\'esquema.',\n\t'Schema has been created.' => 'S\\'ha creat l\\'esquema.',\n\t'Schema has been altered.' => 'S\\'ha modificat l\\'esquema.',\n\t'Schema' => 'Esquema',\n\t'Sequences' => 'Seqüències',\n\t'Create sequence' => 'Crea una seqüència',\n\t'Sequence has been dropped.' => 'S\\'ha suprimit la seqüència.',\n\t'Sequence has been created.' => 'S\\'ha creat la seqüència.',\n\t'Sequence has been altered.' => 'S\\'ha modificat la seqüència.',\n\t'Alter sequence' => 'Modifica la seqüència',\n\t'User types' => 'Tipus de l\\'usuari',\n\t'Create type' => 'Crea un tipus',\n\t'Type has been dropped.' => 'S\\'ha suprimit el tipus.',\n\t'Type has been created.' => 'S\\'ha creat el tipus.',\n\t'Alter type' => 'Modifica el tipus',\n\t'Search data in tables' => 'Cerca dades en les taules',\n\t'From server' => 'En el servidor',\n\t'empty' => 'buit',\n\t'now' => 'ara',\n\t'%d query(s) executed OK.' => array('%d consulta executada correctament.', '%d consultes executades correctament.'),\n\t'Show only errors' => 'Mostra només els errors',\n\t'Refresh' => 'Refresca',\n\t'Invalid schema.' => 'Esquema invàlid.',\n\t'Please use one of the extensions %s.' => 'Si us plau, utilitza una de les extensions %s.',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'S\\'han copiat les taules.',\n\t'Copy' => 'Còpia',\n\t'Permanent link' => 'Enllaç permanent',\n\t'Edit all' => 'Edita-ho tot',\n\t'HH:MM:SS' => 'HH:MM:SS',\n);\n\n// run `php ../../lang.php ca` to update this file\n"
  },
  {
    "path": "adminer/lang/cs.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Systém',\n\t'Server' => 'Server',\n\t'Username' => 'Uživatel',\n\t'Password' => 'Heslo',\n\t'Permanent login' => 'Trvalé přihlášení',\n\t'Login' => 'Přihlásit se',\n\t'Logout' => 'Odhlásit',\n\t'Logged as: %s' => 'Přihlášen jako: %s',\n\t'Logout successful.' => 'Odhlášení proběhlo v pořádku.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Díky za použití Admineru, <a href=\"https://www.adminer.org/cs/donation/\">přispějte</a> na vývoj.',\n\t'hostname[:port] or :socket' => 'hostname[:port] nebo :socket',\n\t'Invalid credentials.' => 'Neplatné přihlašovací údaje.',\n\t'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href=\"https://www.adminer.org/cs/password/\"%s>více informací</a>.',\n\t'Database does not support password.' => 'Databáze nepodporuje heslo.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minutu.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minuty.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minut.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href=\"https://www.adminer.org/cs/extension/\"%s>Implementujte</a> metodu %s, aby platilo stále.',\n\t'Language' => 'Jazyk',\n\t'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',\n\t'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.',\n\t'No extension' => 'Žádné rozšíření',\n\t'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',\n\t'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',\n\t'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte rozšíření %s nebo %s.',\n\t'Session support must be enabled.' => 'Session proměnné musí být povolené.',\n\t'Session expired, please login again.' => 'Session vypršela, přihlaste se prosím znovu.',\n\t'The action will be performed after successful login with the same credentials.' => 'Akce bude provedena po úspěšném přihlášení se stejnými přihlašovacími údaji.',\n\t'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',\n\t'Refresh' => 'Obnovit',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Oprávnění',\n\t'Create user' => 'Vytvořit uživatele',\n\t'User has been dropped.' => 'Uživatel byl odstraněn.',\n\t'User has been altered.' => 'Uživatel byl změněn.',\n\t'User has been created.' => 'Uživatel byl vytvořen.',\n\t'Hashed' => 'Zahašované',\n\t'Column' => 'Sloupec',\n\t'Columns' => 'Sloupce',\n\t'Routine' => 'Procedura',\n\t'Grant' => 'Povolit',\n\t'Revoke' => 'Zakázat',\n\n\t'Process list' => 'Seznam procesů',\n\t'%d process(es) have been killed.' => array('Byl ukončen %d proces.', 'Byly ukončeny %d procesy.', 'Bylo ukončeno %d procesů.'),\n\t'Kill' => 'Ukončit',\n\n\t'Variables' => 'Proměnné',\n\t'Status' => 'Stav',\n\n\t'SQL command' => 'SQL příkaz',\n\t'%d query(s) executed OK.' => array('%d příkaz proběhl v pořádku.', '%d příkazy proběhly v pořádku.', '%d příkazů proběhlo v pořádku.'),\n\t'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),\n\t'No commands to execute.' => 'Žádné příkazy k vykonání.',\n\t'Error in query' => 'Chyba v dotazu',\n\t'Unknown error.' => 'Neznámá chyba.',\n\t'Warnings' => 'Varování',\n\t'ATTACH queries are not supported.' => 'Dotazy ATTACH nejsou podporované.',\n\t'Execute' => 'Provést',\n\t'Stop on error' => 'Zastavit při chybě',\n\t'Show only errors' => 'Zobrazit pouze chyby',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historie',\n\t'Clear' => 'Vyčistit',\n\t'Edit all' => 'Upravit vše',\n\n\t'File upload' => 'Nahrání souboru',\n\t'From server' => 'Ze serveru',\n\t'Webserver file %s' => 'Soubor %s na webovém serveru',\n\t'Run file' => 'Spustit soubor',\n\t'File does not exist.' => 'Soubor neexistuje.',\n\t'Increase %s.' => 'Zvyšte %s.',\n\t'File uploads are disabled.' => 'Nahrávání souborů není povoleno.',\n\t'Unable to upload a file.' => 'Nepodařilo se nahrát soubor.',\n\t'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Příliš velká POST data. Zmenšete data nebo zvyšte hodnotu konfigurační direktivy %s.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Velký SQL soubor můžete nahrát pomocí FTP a importovat ho ze serveru.',\n\t'You are offline.' => 'Jste offline.',\n\n\t'Export' => 'Export',\n\t'Output' => 'Výstup',\n\t'open' => 'otevřít',\n\t'save' => 'uložit',\n\t'Format' => 'Formát',\n\t'Data' => 'Data',\n\n\t'Database' => 'Databáze',\n\t'DB' => 'DB',\n\t'Use' => 'Vybrat',\n\t'Select database' => 'Vybrat databázi',\n\t'Invalid database.' => 'Nesprávná databáze.',\n\t'Database has been dropped.' => 'Databáze byla odstraněna.',\n\t'Databases have been dropped.' => 'Databáze byly odstraněny.',\n\t'Database has been created.' => 'Databáze byla vytvořena.',\n\t'Database has been renamed.' => 'Databáze byla přejmenována.',\n\t'Database has been altered.' => 'Databáze byla změněna.',\n\t'Alter database' => 'Pozměnit databázi',\n\t'Create database' => 'Vytvořit databázi',\n\t'Database schema' => 'Schéma databáze',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Trvalý odkaz',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Úložiště',\n\t'Collation' => 'Porovnávání',\n\t'Data Length' => 'Velikost dat',\n\t'Index Length' => 'Velikost indexů',\n\t'Data Free' => 'Volné místo',\n\t'Rows' => 'Řádků',\n\t'%d in total' => '%d celkem',\n\t'Analyze' => 'Analyzovat',\n\t'Optimize' => 'Optimalizovat',\n\t'Vacuum' => 'Vyčistit',\n\t'Check' => 'Zkontrolovat',\n\t'Repair' => 'Opravit',\n\t'Truncate' => 'Vyprázdnit',\n\t'Tables have been truncated.' => 'Tabulky byly vyprázdněny.',\n\t'Move to other database' => 'Přesunout do jiné databáze',\n\t'Move' => 'Přesunout',\n\t'Tables have been moved.' => 'Tabulky byly přesunuty.',\n\t'Copy' => 'Zkopírovat',\n\t'Tables have been copied.' => 'Tabulky byly zkopírovány.',\n\t'overwrite' => 'přepsat',\n\n\t'Routines' => 'Procedury a funkce',\n\t'Routine has been called, %d row(s) affected.' => array('Procedura byla zavolána, byl změněn %d záznam.', 'Procedura byla zavolána, byly změněny %d záznamy.', 'Procedura byla zavolána, bylo změněno %d záznamů.'),\n\t'Call' => 'Zavolat',\n\t'Parameter name' => 'Název parametru',\n\t'Create procedure' => 'Vytvořit proceduru',\n\t'Create function' => 'Vytvořit funkci',\n\t'Routine has been dropped.' => 'Procedura byla odstraněna.',\n\t'Routine has been altered.' => 'Procedura byla změněna.',\n\t'Routine has been created.' => 'Procedura byla vytvořena.',\n\t'Alter function' => 'Změnit funkci',\n\t'Alter procedure' => 'Změnit proceduru',\n\t'Return type' => 'Návratový typ',\n\n\t'Events' => 'Události',\n\t'Event has been dropped.' => 'Událost byla odstraněna.',\n\t'Event has been altered.' => 'Událost byla změněna.',\n\t'Event has been created.' => 'Událost byla vytvořena.',\n\t'Alter event' => 'Pozměnit událost',\n\t'Create event' => 'Vytvořit událost',\n\t'At given time' => 'V daný čas',\n\t'Every' => 'Každých',\n\t'Schedule' => 'Plán',\n\t'Start' => 'Začátek',\n\t'End' => 'Konec',\n\t'On completion preserve' => 'Po dokončení zachovat',\n\n\t'Tables' => 'Tabulky',\n\t'Tables and views' => 'Tabulky a pohledy',\n\t'Table' => 'Tabulka',\n\t'No tables.' => 'Žádné tabulky.',\n\t'Alter table' => 'Pozměnit tabulku',\n\t'Create table' => 'Vytvořit tabulku',\n\t'Table has been dropped.' => 'Tabulka byla odstraněna.',\n\t'Tables have been dropped.' => 'Tabulky byly odstraněny.',\n\t'Tables have been optimized.' => 'Tabulky byly optimalizovány.',\n\t'Table has been altered.' => 'Tabulka byla změněna.',\n\t'Table has been created.' => 'Tabulka byla vytvořena.',\n\t'Table name' => 'Název tabulky',\n\t'Show structure' => 'Zobrazit strukturu',\n\t'engine' => 'úložiště',\n\t'collation' => 'porovnávání',\n\t'Column name' => 'Název sloupce',\n\t'Type' => 'Typ',\n\t'Length' => 'Délka',\n\t'Auto Increment' => 'Auto Increment',\n\t'Options' => 'Volby',\n\t'Comment' => 'Komentář',\n\t'Default value' => 'Výchozí hodnota',\n\t'Default values' => 'Výchozí hodnoty',\n\t'Drop' => 'Odstranit',\n\t'Drop %s?' => 'Odstranit %s?',\n\t'Are you sure?' => 'Opravdu?',\n\t'Size' => 'Velikost',\n\t'Compute' => 'Spočítat',\n\t'Move up' => 'Přesunout nahoru',\n\t'Move down' => 'Přesunout dolů',\n\t'Remove' => 'Odebrat',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s.',\n\n\t'Partition by' => 'Rozdělit podle',\n\t'Partitions' => 'Oddíly',\n\t'Partition name' => 'Název oddílu',\n\t'Values' => 'Hodnoty',\n\t'Inherits from' => 'Zděděná z',\n\t'Inherited by' => 'Zděděné',\n\n\t'View' => 'Pohled',\n\t'Materialized view' => 'Materializovaný pohled',\n\t'View has been dropped.' => 'Pohled byl odstraněn.',\n\t'View has been altered.' => 'Pohled byl změněn.',\n\t'View has been created.' => 'Pohled byl vytvořen.',\n\t'Alter view' => 'Pozměnit pohled',\n\t'Create view' => 'Vytvořit pohled',\n\n\t'Indexes' => 'Indexy',\n\t'Indexes have been altered.' => 'Indexy byly změněny.',\n\t'Alter indexes' => 'Pozměnit indexy',\n\t'Add next' => 'Přidat další',\n\t'Index Type' => 'Typ indexu',\n\t'length' => 'délka',\n\t'Algorithm' => 'Algoritmus',\n\t'Condition' => 'Podmínka',\n\n\t'Foreign keys' => 'Cizí klíče',\n\t'Foreign key' => 'Cizí klíč',\n\t'Foreign key has been dropped.' => 'Cizí klíč byl odstraněn.',\n\t'Foreign key has been altered.' => 'Cizí klíč byl změněn.',\n\t'Foreign key has been created.' => 'Cizí klíč byl vytvořen.',\n\t'Target table' => 'Cílová tabulka',\n\t'Change' => 'Změnit',\n\t'Source' => 'Zdroj',\n\t'Target' => 'Cíl',\n\t'Add column' => 'Přidat sloupec',\n\t'Alter' => 'Změnit',\n\t'Add foreign key' => 'Přidat cizí klíč',\n\t'ON DELETE' => 'Při smazání',\n\t'ON UPDATE' => 'Při změně',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cílové sloupce musí mít stejný datový typ, nad cílovými sloupci musí být definován index a odkazovaná data musí existovat.',\n\n\t'Triggers' => 'Triggery',\n\t'Add trigger' => 'Přidat trigger',\n\t'Trigger has been dropped.' => 'Trigger byl odstraněn.',\n\t'Trigger has been altered.' => 'Trigger byl změněn.',\n\t'Trigger has been created.' => 'Trigger byl vytvořen.',\n\t'Alter trigger' => 'Změnit trigger',\n\t'Create trigger' => 'Vytvořit trigger',\n\t'Time' => 'Čas',\n\t'Event' => 'Událost',\n\t'Name' => 'Název',\n\n\t'select' => 'vypsat',\n\t'Select' => 'Vypsat',\n\t'Select data' => 'Vypsat data',\n\t'Functions' => 'Funkce',\n\t'Aggregation' => 'Agregace',\n\t'Search' => 'Vyhledat',\n\t'anywhere' => 'kdekoliv',\n\t'Search data in tables' => 'Vyhledat data v tabulkách',\n\t'Sort' => 'Seřadit',\n\t'descending' => 'sestupně',\n\t'Limit' => 'Limit',\n\t'Limit rows' => 'Limit řádek',\n\t'Text length' => 'Délka textů',\n\t'Action' => 'Akce',\n\t'Full table scan' => 'Průchod celé tabulky',\n\t'Unable to select the table' => 'Nepodařilo se vypsat tabulku',\n\t'No rows.' => 'Žádné řádky.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),\n\t'Page' => 'Stránka',\n\t'last' => 'poslední',\n\t'Load more data' => 'Načíst další data',\n\t'Loading' => 'Načítá se',\n\t'Whole result' => 'Celý výsledek',\n\t'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),\n\n\t'Import' => 'Import',\n\t'%d row(s) have been imported.' => array('Byl importován %d záznam.', 'Byly importovány %d záznamy.', 'Bylo importováno %d záznamů.'),\n\t'File must be in UTF-8 encoding.' => 'Soubor musí být v kódování UTF-8.',\n\n\t// in-place editing in select\n\t'Modify' => 'Změnit',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.',\n\t'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Položka%s byla vložena.',\n\t'Item has been deleted.' => 'Položka byla smazána.',\n\t'Item has been updated.' => 'Položka byla aktualizována.',\n\t'%d item(s) have been affected.' => array('Byl ovlivněn %d záznam.', 'Byly ovlivněny %d záznamy.', 'Bylo ovlivněno %d záznamů.'),\n\t'New item' => 'Nová položka',\n\t'original' => 'původní',\n\t// label for value '' in enum data type\n\t'empty' => 'prázdné',\n\t'edit' => 'upravit',\n\t'Edit' => 'Upravit',\n\t'Insert' => 'Vložit',\n\t'Save' => 'Uložit',\n\t'Saving' => 'Ukládá se',\n\t'Save and continue edit' => 'Uložit a pokračovat v editaci',\n\t'Save and insert next' => 'Uložit a vložit další',\n\t'Selected' => 'Označené',\n\t'Clone' => 'Klonovat',\n\t'Delete' => 'Smazat',\n\t'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.',\n\n\t// data type descriptions\n\t'Numbers' => 'Čísla',\n\t'Date and time' => 'Datum a čas',\n\t'Strings' => 'Řetězce',\n\t'Binary' => 'Binární',\n\t'Lists' => 'Seznamy',\n\t'Network' => 'Síť',\n\t'Geometry' => 'Geometrie',\n\t'Relations' => 'Vztahy',\n\n\t'Editor' => 'Editor',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$6.$4.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'd.m.[rrrr]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'teď',\n\t'yes' => 'ano',\n\t'no' => 'ne',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Soubor existuje.',\n\t'Please use one of the extensions %s.' => 'Prosím použijte jednu z koncovek %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Pozměnit schéma',\n\t'Create schema' => 'Vytvořit schéma',\n\t'Schema has been dropped.' => 'Schéma bylo odstraněno.',\n\t'Schema has been created.' => 'Schéma bylo vytvořeno.',\n\t'Schema has been altered.' => 'Schéma bylo změněno.',\n\t'Schema' => 'Schéma',\n\t'Invalid schema.' => 'Nesprávné schéma.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Sekvence',\n\t'Create sequence' => 'Vytvořit sekvenci',\n\t'Sequence has been dropped.' => 'Sekvence byla odstraněna.',\n\t'Sequence has been created.' => 'Sekvence byla vytvořena.',\n\t'Sequence has been altered.' => 'Sekvence byla změněna.',\n\t'Alter sequence' => 'Pozměnit sekvenci',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Uživatelské typy',\n\t'Create type' => 'Vytvořit typ',\n\t'Type has been dropped.' => 'Typ byl odstraněn.',\n\t'Type has been created.' => 'Typ byl vytvořen.',\n\t'Alter type' => 'Pozměnit typ',\n\n\t// Table check constraints\n\t'Checks' => 'Kontroly',\n\t'Create check' => 'Vytvořit kontrolu',\n\t'Alter check' => 'Změnit kontrolu',\n\t'Check has been created.' => 'Kontrola byla vytvořena.',\n\t'Check has been altered.' => 'Kontrola byla změněna.',\n\t'Check has been dropped.' => 'Kontrola byla odstraněna.',\n\n\t'Loaded plugins' => 'Nahrané pluginy',\n\t'%s must <a%s>return an array</a>.' => '%s musí <a%s>vracet pole</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Nakonfigurujte</a> %s v %s.',\n\t'screenshot' => 'obrázek',\n);\n\n// run `php ../../lang.php cs` to update this file\n"
  },
  {
    "path": "adminer/lang/da.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'System' => 'System',\n\t'Server' => 'Server',\n\t'Username' => 'Brugernavn',\n\t'Password' => 'Kodeord',\n\t'Permanent login' => 'Permanent login',\n\t'Login' => 'Log ind',\n\t'Logout' => 'Log ud',\n\t'Logged as: %s' => 'Logget ind som: %s',\n\t'Logout successful.' => 'Log af vellykket.',\n\t'Invalid credentials.' => 'Ugyldige log ind oplysninger.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Master-kodeordet er udløbet. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementer</a> en metode for %s for at gøre det permanent.',\n\t'Language' => 'Sprog',\n\t'Invalid CSRF token. Send the form again.' => 'Ugyldigt CSRF-token - Genindsend formen.',\n\t'No extension' => 'Ingen udvidelse',\n\t'None of the supported PHP extensions (%s) are available.' => 'Ingen af de understøttede PHP-udvidelser (%s) er tilgængelige.',\n\t'Session support must be enabled.' => 'Session support skal være slået til.',\n\t'Session expired, please login again.' => 'Sessionen er udløbet - Log venligst ind igen.',\n\t'%s version: %s through PHP extension %s' => '%s version: %s via PHP-udvidelse %s',\n\t'Refresh' => 'Genindlæs',\n\t'ltr' => 'ltr',\n\t'Privileges' => 'Privilegier',\n\t'Create user' => 'Opret bruger',\n\t'User has been dropped.' => 'Brugeren slettet.',\n\t'User has been altered.' => 'Brugeren ændret.',\n\t'User has been created.' => 'Brugeren oprettet.',\n\t'Hashed' => 'Hashet',\n\t'Column' => 'Kolonne',\n\t'Routine' => 'Rutine',\n\t'Grant' => 'Giv privilegier',\n\t'Revoke' => 'Træk tilbage',\n\t'Process list' => 'Procesliste',\n\t'%d process(es) have been killed.' => array('%d proces afsluttet.', '%d processer afsluttet.'),\n\t'Kill' => 'Afslut',\n\t'Variables' => 'Variabler',\n\t'Status' => 'Status',\n\t'SQL command' => 'SQL-kommando',\n\t'%d query(s) executed OK.' => array('%d kald udført OK.', '%d kald udført OK.'),\n\t'Query executed OK, %d row(s) affected.' => array('Kald udført OK, %d række påvirket.', 'Kald udført OK, %d rækker påvirket.'),\n\t'No commands to execute.' => 'Ingen kommandoer at udføre.',\n\t'Error in query' => 'Fejl i forespørgelse',\n\t'Execute' => 'Kør',\n\t'Stop on error' => 'Stop ved fejl',\n\t'Show only errors' => 'Vis kun fejl',\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historik',\n\t'Clear' => 'Tøm',\n\t'Edit all' => 'Rediger alle',\n\t'File upload' => 'Fil upload',\n\t'From server' => 'Fra server',\n\t'Webserver file %s' => 'Webserver-fil %s',\n\t'Run file' => 'Kør fil',\n\t'File does not exist.' => 'Filen eksisterer ikke.',\n\t'File uploads are disabled.' => 'Fil upload er slået fra.',\n\t'Unable to upload a file.' => 'Kunne ikke uploade fil.',\n\t'Maximum allowed file size is %sB.' => 'Maksimum tilladte filstørrelse er %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Maks POST data er overskredet. Reducer mængden af data eller øg størrelsen i %s-konfigurationen.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Du kan uploade en stor SQL-fil via FTP og importere den fra serveren.',\n\t'Export' => 'Eksport',\n\t'Output' => 'Resultat',\n\t'open' => 'Åben',\n\t'save' => 'Gem',\n\t'Format' => 'Format',\n\t'Data' => 'Data',\n\t'Database' => 'Database',\n\t'Use' => 'Brug',\n\t'Select database' => 'Vælg database',\n\t'Invalid database.' => 'Ugyldig database.',\n\t'Database has been dropped.' => 'Databasen er blevet slettet.',\n\t'Databases have been dropped.' => 'Databasene er blevet slettet.',\n\t'Database has been created.' => 'Databasen er oprettet.',\n\t'Database has been renamed.' => 'Databasen har fået nyt navn.',\n\t'Database has been altered.' => 'Databasen er ændret.',\n\t'Alter database' => 'Ændre database',\n\t'Create database' => 'Opret database',\n\t'Database schema' => 'Databaseskema',\n\t'Permanent link' => 'Permanent link',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Motor',\n\t'Collation' => 'Tekstsortering',\n\t'Data Length' => 'Datalængde',\n\t'Index Length' => 'Indekslængde',\n\t'Data Free' => 'Fri data',\n\t'Rows' => 'Rader',\n\t'%d in total' => '%d total',\n\t'Analyze' => 'Analyser',\n\t'Optimize' => 'Optimaliser',\n\t'Vacuum' => 'Støvsug',\n\t'Check' => 'Tjek',\n\t'Repair' => 'Reparer',\n\t'Truncate' => 'Afkort',\n\t'Tables have been truncated.' => 'Tabellerne er blevet afkortet.',\n\t'Move to other database' => 'Flyt til anden database',\n\t'Move' => 'Flyt',\n\t'Tables have been moved.' => 'Tabellerne er blevet flyttet.',\n\t'Copy' => 'Kopier',\n\t'Tables have been copied.' => 'Tabellerne er blevet kopiert.',\n\t'Routines' => 'Rutiner',\n\t'Routine has been called, %d row(s) affected.' => array('Rutinen er udført, %d række påvirket.', 'Rutinen er udført, %d rækker påvirket.'),\n\t'Call' => 'Kald',\n\t'Parameter name' => 'Parameternavn',\n\t'Create procedure' => 'Opret procedure',\n\t'Create function' => 'Opret funktion',\n\t'Routine has been dropped.' => 'Rutinen er slettet.',\n\t'Routine has been altered.' => 'Rutinen er ændret.',\n\t'Routine has been created.' => 'Rutinen er oprettet.',\n\t'Alter function' => 'Ændre funktion',\n\t'Alter procedure' => 'Ændre procedure',\n\t'Return type' => 'Returtype',\n\t'Events' => 'Hændelser',\n\t'Event has been dropped.' => 'Hændelsen er slettet.',\n\t'Event has been altered.' => 'Hændelsen er ændret.',\n\t'Event has been created.' => 'Hændelsen er oprettet.',\n\t'Alter event' => 'Ændre hændelse',\n\t'Create event' => 'Opret hændelse',\n\t'At given time' => 'På givne tid',\n\t'Every' => 'Hver',\n\t'Schedule' => 'Tidsplan',\n\t'Start' => 'Start',\n\t'End' => 'Slut',\n\t'On completion preserve' => 'Ved fuldførelse bevar',\n\t'Tables' => 'Tabeller',\n\t'Tables and views' => 'Tabeller og views',\n\t'Table' => 'Tabel',\n\t'No tables.' => 'Ingen tabeller.',\n\t'Alter table' => 'Ændre tabel',\n\t'Create table' => 'Opret tabel',\n\t'Table has been dropped.' => 'Tabellen er slettet.',\n\t'Tables have been dropped.' => 'Tabellerne er slettet.',\n\t'Tables have been optimized.' => 'Tabellerne er blevet optimaliseret.',\n\t'Table has been altered.' => 'Tabellen er ændret.',\n\t'Table has been created.' => 'Tabellen er oprettet.',\n\t'Table name' => 'Tabelnavn',\n\t'Show structure' => 'Vis struktur',\n\t'engine' => 'motor',\n\t'collation' => 'sortering',\n\t'Column name' => 'Kolonnenavn',\n\t'Type' => 'Type',\n\t'Length' => 'Længde',\n\t'Auto Increment' => 'Auto Increment',\n\t'Options' => 'Valg',\n\t'Comment' => 'Kommentarer',\n\t'Default values' => 'Standardværdier',\n\t'Drop' => 'Drop',\n\t'Are you sure?' => 'Er du sikker?',\n\t'Move up' => 'Flyt op',\n\t'Move down' => 'Flyt ned',\n\t'Remove' => 'Fjern',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimum antal feltnavne overskredet - øg venligst %s.',\n\t'Partition by' => 'Partition ved',\n\t'Partitions' => 'Partitioner',\n\t'Partition name' => 'Partitionsnavn',\n\t'Values' => 'Værdier',\n\t'View' => 'View',\n\t'View has been dropped.' => 'Viewet er slettet.',\n\t'View has been altered.' => 'Viewet er ændret.',\n\t'View has been created.' => 'Viewet er oprettet.',\n\t'Alter view' => 'Ændre view',\n\t'Create view' => 'Nyt view',\n\t'Indexes' => 'Indekser',\n\t'Indexes have been altered.' => 'Indekserne er ændret.',\n\t'Alter indexes' => 'Ændre indekser',\n\t'Add next' => 'Læg til næste',\n\t'Index Type' => 'Indekstype',\n\t'length' => 'længde',\n\t'Foreign keys' => 'Fremmednøgler',\n\t'Foreign key' => 'Fremmednøgle',\n\t'Foreign key has been dropped.' => 'Fremmednøglen er slettet.',\n\t'Foreign key has been altered.' => 'Fremmednøglen er ændret.',\n\t'Foreign key has been created.' => 'Fremmednøglen er oprettet.',\n\t'Target table' => 'Måltabel',\n\t'Change' => 'Ændre',\n\t'Source' => 'Kilde',\n\t'Target' => 'Mål',\n\t'Add column' => 'Tilføj kolonne',\n\t'Alter' => 'Ændre',\n\t'Add foreign key' => 'Tilføj fremmednøgle',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kilde- og målkolonner skal have samme datatype, der skal være en indeks på mål-kolonnen, og data som refereres til skal eksistere.',\n\t'Triggers' => 'Triggere',\n\t'Add trigger' => 'Tilføj trigger',\n\t'Trigger has been dropped.' => 'Triggeren er slettet.',\n\t'Trigger has been altered.' => 'Triggeren er ændret.',\n\t'Trigger has been created.' => 'Triggeren er oprettet.',\n\t'Alter trigger' => 'Ændre trigger',\n\t'Create trigger' => 'Opret trigger',\n\t'Time' => 'Tid',\n\t'Event' => 'Hændelse',\n\t'Name' => 'Navn',\n\t'select' => 'Vis',\n\t'Select' => 'Vælg',\n\t'Select data' => 'Vælg data',\n\t'Functions' => 'Funktioner',\n\t'Aggregation' => 'Sammenfatning',\n\t'Search' => 'Søg',\n\t'anywhere' => 'hvorsomhelst',\n\t'Search data in tables' => 'Søg data i tabeller',\n\t'Sort' => 'Sorter',\n\t'descending' => 'faldende',\n\t'Limit' => 'Limit',\n\t'Text length' => 'Tekstlængde',\n\t'Action' => 'Handling',\n\t'Full table scan' => 'Fuld tabel-scan',\n\t'Unable to select the table' => 'Kan ikke vælge tabellen',\n\t'No rows.' => 'Ingen rækker.',\n\t'%d row(s)' => array('%d række', '%d rækker'),\n\t'Page' => 'Side',\n\t'last' => 'sidste',\n\t'Load more data' => 'Indlæs mere data',\n\t'Loading' => 'Indlæser',\n\t'Whole result' => 'Hele resultatet',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'Import' => 'Importer',\n\t'%d row(s) have been imported.' => array('%d række er importeret.', '%d rækker er importeret.'),\n\t'File must be in UTF-8 encoding.' => 'Filen skal være i UTF8-tegnkoding.',\n\t'Modify' => 'Ændre',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klik på en værdi for at ændre den.',\n\t'Use edit link to modify this value.' => 'Brug rediger-link for at ændre dennne værdi.',\n\t'Item%s has been inserted.' => 'Emne%s er sat ind.',\n\t'Item has been deleted.' => 'Emnet er slettet.',\n\t'Item has been updated.' => 'Emnet er opdateret.',\n\t'%d item(s) have been affected.' => array('%d emne påvirket.', '%d emner påvirket.'),\n\t'New item' => 'Nyt emne',\n\t'original' => 'original',\n\t'empty' => 'tom',\n\t'edit' => 'rediger',\n\t'Edit' => 'Rediger',\n\t'Insert' => 'Indsæt',\n\t'Save' => 'Gem',\n\t'Save and continue edit' => 'Gem og fortsæt redigering',\n\t'Save and insert next' => 'Gem og indsæt næste',\n\t'Selected' => 'Valgt',\n\t'Clone' => 'Klon',\n\t'Delete' => 'Slet',\n\t'You have no privileges to update this table.' => 'Du mangler rettigheder til at ændre denne tabellen.',\n\t'Numbers' => 'Nummer',\n\t'Date and time' => 'Dato og tid',\n\t'Strings' => 'Strenge',\n\t'Binary' => 'Binær',\n\t'Lists' => 'Lister',\n\t'Network' => 'Netværk',\n\t'Geometry' => 'Geometri',\n\t'Relations' => 'Relationer',\n\t'Editor' => 'Redigering',\n\t'$1-$3-$5' => '$6/$4 $1',\n\t'[yyyy]-mm-dd' => 'd/m [åååå]',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'nu',\n\t'yes' => 'ja',\n\t'no' => 'nej',\n\t'File exists.' => 'Filen findes.',\n\t'Please use one of the extensions %s.' => 'Brug venligst en af filendelserne %s.',\n\t'Alter schema' => 'Ændre skema',\n\t'Create schema' => 'Opret skema',\n\t'Schema has been dropped.' => 'Skemaet er slettet.',\n\t'Schema has been created.' => 'Skemaet er oprettet.',\n\t'Schema has been altered.' => 'Skemaet er ændret.',\n\t'Schema' => 'Skema',\n\t'Invalid schema.' => 'Ugyldigt skema.',\n\t'Sequences' => 'Sekvenser',\n\t'Create sequence' => 'Opret sekvens',\n\t'Sequence has been dropped.' => 'Sekvensen er slettet.',\n\t'Sequence has been created.' => 'Sekvensen er oprettet.',\n\t'Sequence has been altered.' => 'Sekvensen er ændret.',\n\t'Alter sequence' => 'Ændre sekvens',\n\t'User types' => 'Brugertyper',\n\t'Create type' => 'Opret type',\n\t'Type has been dropped.' => 'Typen er slettet.',\n\t'Type has been created.' => 'Typen er oprettet.',\n\t'Alter type' => 'Ændre type',\n\t'Saving' => 'Gemmer',\n);\n\n// run `php ../../lang.php da` to update this file\n"
  },
  {
    "path": "adminer/lang/de.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Login',\n\t'Logout successful.' => 'Abmeldung erfolgreich.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Danke, dass Sie Adminer genutzt haben. <a href=\"https://www.adminer.org/de/donation/\">Spenden willkommen!</a>.',\n\t'Invalid credentials.' => 'Ungültige Anmelde-Informationen.',\n\t'Server' => 'Server',\n\t'Username' => 'Benutzer',\n\t'Password' => 'Passwort',\n\t'Select database' => 'Datenbank auswählen',\n\t'Invalid database.' => 'Datenbank ungültig.',\n\t'Table has been dropped.' => 'Tabelle wurde entfernt.',\n\t'Table has been altered.' => 'Tabelle wurde geändert.',\n\t'Table has been created.' => 'Tabelle wurde erstellt.',\n\t'Alter table' => 'Tabelle ändern',\n\t'Create table' => 'Tabelle erstellen',\n\t'Table name' => 'Name der Tabelle',\n\t'engine' => 'Speicher-Engine',\n\t'collation' => 'Kollation',\n\t'Column name' => 'Spaltenname',\n\t'Type' => 'Typ',\n\t'Length' => 'Länge',\n\t'Auto Increment' => 'Auto-Inkrement',\n\t'Options' => 'Optionen',\n\t'Save' => 'Speichern',\n\t'Drop' => 'Entfernen',\n\t'Database has been dropped.' => 'Datenbank wurde entfernt.',\n\t'Database has been created.' => 'Datenbank wurde erstellt.',\n\t'Database has been renamed.' => 'Datenbank wurde umbenannt.',\n\t'Database has been altered.' => 'Datenbank wurde geändert.',\n\t'Alter database' => 'Datenbank ändern',\n\t'Create database' => 'Datenbank erstellen',\n\t'SQL command' => 'SQL-Kommando',\n\t'Logout' => 'Abmelden',\n\t'Use' => 'Auswählen',\n\t'No tables.' => 'Keine Tabellen.',\n\t'select' => 'zeigen',\n\t'Item has been deleted.' => 'Datensatz wurde gelöscht.',\n\t'Item has been updated.' => 'Datensatz wurde geändert.',\n\t'Item%s has been inserted.' => 'Datensatz%s wurde eingefügt.',\n\t'Edit' => 'Bearbeiten',\n\t'Insert' => 'Einfügen',\n\t'Save and insert next' => 'Speichern und nächsten einfügen',\n\t'Delete' => 'Entfernen',\n\t'Database' => 'Datenbank',\n\t'Routines' => 'Routinen',\n\t'Indexes have been altered.' => 'Indizes geändert.',\n\t'Indexes' => 'Indizes',\n\t'Alter indexes' => 'Indizes ändern',\n\t'Add next' => 'Hinzufügen',\n\t'Language' => 'Sprache',\n\t'Select' => 'Daten zeigen von',\n\t'New item' => 'Neuer Datensatz',\n\t'Search' => 'Suchen',\n\t'Sort' => 'Ordnen',\n\t'descending' => 'absteigend',\n\t'Limit' => 'Begrenzung',\n\t'No rows.' => 'Keine Datensätze.',\n\t'Action' => 'Aktion',\n\t'edit' => 'bearbeiten',\n\t'Page' => 'Seite',\n\t'Query executed OK, %d row(s) affected.' => array('Abfrage ausgeführt, %d Datensatz betroffen.', 'Abfrage ausgeführt, %d Datensätze betroffen.'),\n\t'Error in query' => 'Fehler in der SQL-Abfrage',\n\t'Execute' => 'Ausführen',\n\t'Table' => 'Tabelle',\n\t'Foreign keys' => 'Fremdschlüssel',\n\t'Triggers' => 'Trigger',\n\t'View' => 'View',\n\t'Unable to select the table' => 'Auswahl der Tabelle fehlgeschlagen',\n\t'Invalid CSRF token. Send the form again.' => 'CSRF Token ungültig. Bitte die Formulardaten erneut abschicken.',\n\t'Comment' => 'Kommentar',\n\t'Default values' => 'Vorgabewerte festlegen',\n\t'%d byte(s)' => array('%d Byte', '%d Bytes'),\n\t'No commands to execute.' => 'Kein Kommando vorhanden.',\n\t'Unable to upload a file.' => 'Hochladen von Datei fehlgeschlagen.',\n\t'File upload' => 'Datei importieren',\n\t'File uploads are disabled.' => 'Importieren von Dateien abgeschaltet.',\n\t'Routine has been called, %d row(s) affected.' => array('Routine wurde ausgeführt, %d Datensatz betroffen.', 'Routine wurde ausgeführt, %d Datensätze betroffen.'),\n\t'Call' => 'Aufrufen',\n\t'No extension' => 'Keine Erweiterungen installiert',\n\t'None of the supported PHP extensions (%s) are available.' => 'Keine der unterstützten PHP-Erweiterungen (%s) ist vorhanden.',\n\t'Session support must be enabled.' => 'Unterstüzung für PHP-Sessions muss aktiviert sein.',\n\t'Session expired, please login again.' => 'Sitzungsdauer abgelaufen, bitte erneut anmelden.',\n\t'Text length' => 'Textlänge',\n\t'Foreign key has been dropped.' => 'Fremdschlüssel wurde entfernt.',\n\t'Foreign key has been altered.' => 'Fremdschlüssel wurde geändert.',\n\t'Foreign key has been created.' => 'Fremdschlüssel wurde erstellt.',\n\t'Foreign key' => 'Fremdschlüssel',\n\t'Target table' => 'Zieltabelle',\n\t'Change' => 'Ändern',\n\t'Source' => 'Ursprung',\n\t'Target' => 'Ziel',\n\t'Add column' => 'Spalte hinzufügen',\n\t'Alter' => 'Ändern',\n\t'Add foreign key' => 'Fremdschlüssel hinzufügen',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Index-Typ',\n\t'length' => 'Länge',\n\t'View has been dropped.' => 'View wurde entfernt.',\n\t'View has been altered.' => 'View wurde geändert.',\n\t'View has been created.' => 'View wurde erstellt.',\n\t'Alter view' => 'View ändern',\n\t'Create view' => 'View erstellen',\n\t'Name' => 'Name',\n\t'Process list' => 'Prozessliste',\n\t'%d process(es) have been killed.' => array('%d Prozess gestoppt.', '%d Prozesse gestoppt.'),\n\t'Kill' => 'Anhalten',\n\t'Parameter name' => 'Name des Parameters',\n\t'Database schema' => 'Datenbankschema',\n\t'Create procedure' => 'Prozedur erstellen',\n\t'Create function' => 'Funktion erstellen',\n\t'Routine has been dropped.' => 'Routine wurde entfernt.',\n\t'Routine has been altered.' => 'Routine wurde geändert.',\n\t'Routine has been created.' => 'Routine wurde erstellt.',\n\t'Alter function' => 'Funktion ändern',\n\t'Alter procedure' => 'Prozedur ändern',\n\t'Return type' => 'Typ des Rückgabewertes',\n\t'Add trigger' => 'Trigger hinzufügen',\n\t'Trigger has been dropped.' => 'Trigger wurde entfernt.',\n\t'Trigger has been altered.' => 'Trigger wurde geändert.',\n\t'Trigger has been created.' => 'Trigger wurde erstellt.',\n\t'Alter trigger' => 'Trigger ändern',\n\t'Create trigger' => 'Trigger erstellen',\n\t'Time' => 'Zeitpunkt',\n\t'Event' => 'Ereignis',\n\t'%s version: %s through PHP extension %s' => 'Version %s: %s mit PHP-Erweiterung %s',\n\t'%d row(s)' => array('%d Datensatz', '%d Datensätze'),\n\t'Remove' => 'Entfernen',\n\t'Are you sure?' => 'Sind Sie sicher?',\n\t'Privileges' => 'Rechte',\n\t'Create user' => 'Benutzer erstellen',\n\t'User has been dropped.' => 'Benutzer wurde entfernt.',\n\t'User has been altered.' => 'Benutzer wurde geändert.',\n\t'User has been created.' => 'Benutzer wurde erstellt.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Spalte',\n\t'Columns' => 'Spalten',\n\t'Routine' => 'Routine',\n\t'Grant' => 'Erlauben',\n\t'Revoke' => 'Widerrufen',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST-Daten sind zu groß. Reduzieren Sie die Größe oder vergrößern Sie den Wert %s in der Konfiguration.',\n\t'Logged as: %s' => 'Angemeldet als: %s',\n\t'Move up' => 'Nach oben',\n\t'Move down' => 'Nach unten',\n\t'Functions' => 'Funktionen',\n\t'Aggregation' => 'Aggregationen',\n\t'Export' => 'Exportieren',\n\t'Output' => 'Ergebnis',\n\t'open' => 'anzeigen',\n\t'save' => 'Datei',\n\t'Format' => 'Format',\n\t'Tables' => 'Tabellen',\n\t'Data' => 'Daten',\n\t'Event has been dropped.' => 'Ereignis wurde entfernt.',\n\t'Event has been altered.' => 'Ereignis wurde geändert.',\n\t'Event has been created.' => 'Ereignis wurde erstellt.',\n\t'Alter event' => 'Ereignis ändern',\n\t'Create event' => 'Ereignis erstellen',\n\t'At given time' => 'Zur angegebenen Zeit',\n\t'Every' => 'Jede',\n\t'Events' => 'Ereignisse',\n\t'Schedule' => 'Zeitplan',\n\t'Start' => 'Start',\n\t'End' => 'Ende',\n\t'Status' => 'Status',\n\t'On completion preserve' => 'Nach der Ausführung erhalten',\n\t'Tables and views' => 'Tabellen und Views',\n\t'Data Length' => 'Datengröße',\n\t'Index Length' => 'Indexgröße',\n\t'Data Free' => 'Freier Bereich',\n\t'Collation' => 'Kollation',\n\t'Analyze' => 'Analysieren',\n\t'Optimize' => 'Optimieren',\n\t'Check' => 'Prüfen',\n\t'Repair' => 'Reparieren',\n\t'Truncate' => 'Leeren (truncate)',\n\t'Tables have been truncated.' => 'Tabellen wurden geleert (truncate).',\n\t'Rows' => 'Datensätze',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Tabellen verschoben.',\n\t'Move to other database' => 'In andere Datenbank verschieben',\n\t'Move' => 'Verschieben',\n\t'Engine' => 'Speicher-Engine',\n\t'Save and continue edit' => 'Speichern und weiter bearbeiten',\n\t'original' => 'Original',\n\t'Tables have been dropped.' => 'Tabellen wurden entfernt (drop).',\n\t'%d item(s) have been affected.' => '%d Artikel betroffen.',\n\t'Whole result' => 'Gesamtergebnis',\n\t'Clone' => 'Klonen',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s erhöhen.',\n\t'Partition by' => 'Partitionieren um',\n\t'Partitions' => 'Partitionen',\n\t'Partition name' => 'Name der Partition',\n\t'Values' => 'Werte',\n\t'%d row(s) have been imported.' => array('%d Datensatz wurde importiert.', '%d Datensätze wurden importiert.'),\n\t'anywhere' => 'beliebig',\n\t'Import' => 'Importieren',\n\t'Stop on error' => 'Bei Fehler anhalten',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$6.$4.$1',\n\t'[yyyy]-mm-dd' => 't.m.[jjjj]',\n\t'History' => 'History',\n\t'Variables' => 'Variablen',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Quell- und Zielspalten müssen vom gleichen Datentyp sein, es muss unter den Zielspalten ein Index existieren und die referenzierten Daten müssen existieren.',\n\t'Relations' => 'Relationen',\n\t'Run file' => 'Datei ausführen',\n\t'Clear' => 'Löschen',\n\t'Maximum allowed file size is %sB.' => 'Maximal erlaubte Dateigröße ist %sB.',\n\t'Numbers' => 'Zahlen',\n\t'Date and time' => 'Datum und Zeit',\n\t'Strings' => 'Zeichenketten',\n\t'Binary' => 'Binär',\n\t'Lists' => 'Listen',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Webserver Datei %s',\n\t'File does not exist.' => 'Datei existiert nicht.',\n\t'%d in total' => '%d insgesamt',\n\t'Permanent login' => 'Passwort speichern',\n\t'Databases have been dropped.' => 'Datenbanken wurden entfernt.',\n\t'Search data in tables' => 'Suche in Tabellen',\n\t'Schema' => 'Schema',\n\t'Alter schema' => 'Schema ändern',\n\t'Create schema' => 'Schema erstellen',\n\t'Schema has been dropped.' => 'Schema wurde gelöscht.',\n\t'Schema has been created.' => 'Schema wurde erstellt.',\n\t'Schema has been altered.' => 'Schema wurde geändert.',\n\t'Sequences' => 'Sequenzen',\n\t'Create sequence' => 'Sequenz erstellen',\n\t'Alter sequence' => 'Sequenz ändern',\n\t'Sequence has been dropped.' => 'Sequenz wurde gelöscht.',\n\t'Sequence has been created.' => 'Sequenz wurde erstellt.',\n\t'Sequence has been altered.' => 'Sequenz wurde geändert.',\n\t'User types' => 'Benutzerdefinierte Typen',\n\t'Create type' => 'Typ erstellen',\n\t'Alter type' => 'Typ ändern',\n\t'Type has been dropped.' => 'Typ wurde gelöscht.',\n\t'Type has been created.' => 'Typ wurde erstellt.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+Klick zum Bearbeiten des Wertes.',\n\t'Use edit link to modify this value.' => 'Benutzen Sie den Link zum Bearbeiten dieses Wertes.',\n\t'last' => 'letzte',\n\t'From server' => 'Vom Server',\n\t'System' => 'Datenbank System',\n\t'Select data' => 'Daten auswählen',\n\t'Show structure' => 'Struktur anzeigen',\n\t'empty' => 'leer',\n\t'Network' => 'Netzwerk',\n\t'Geometry' => 'Geometrie',\n\t'File exists.' => 'Datei existiert schon.',\n\t'%d query(s) executed OK.' => array('SQL-Abfrage erfolgreich ausgeführt.', '%d SQL-Abfragen erfolgreich ausgeführt.'),\n\t'Show only errors' => 'Nur Fehler anzeigen',\n\t'Refresh' => 'Aktualisieren',\n\t'Invalid schema.' => 'Schema nicht gültig.',\n\t'Please use one of the extensions %s.' => 'Bitte einen der Dateitypen %s benutzen.',\n\t'now' => 'jetzt',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Tabellen wurden kopiert.',\n\t'Copy' => 'Kopieren',\n\t'Permanent link' => 'Dauerhafter Link',\n\t'Edit all' => 'Alle bearbeiten',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Compute' => 'kalkulieren',\n\t'Size' => 'Größe',\n\t'Modify' => 'Ändern',\n\t'Selected' => 'Ausgewählte',\n\t'Default value' => 'Vorgabewert festlegen',\n\t'Limit rows' => 'Datensätze begrenzen',\n\t'Tables have been optimized.' => 'Tabellen wurden optimiert.',\n\t'File must be in UTF-8 encoding.' => 'Die Datei muss UTF-8 kodiert sein.',\n\t'Loading' => 'Lade',\n\t'Load more data' => 'Mehr Daten laden',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Zu viele erfolglose Login-Versuche. Bitte probieren Sie es in %d Minute noch einmal.', 'Zu viele erfolglose Login-Versuche. Bitte probieren Sie es in %d Minuten noch einmal.'),\n\t'If you did not send this request from Adminer then close this page.' => 'Wenn Sie diese Anfrage nicht von Adminer gesendet haben, schließen Sie diese Seite.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Sie können eine große SQL-Datei per FTP hochladen und dann vom Server importieren.',\n\t'You are offline.' => 'Sie sind offline.',\n\t'You have no privileges to update this table.' => 'Sie haben keine Rechte, diese Tabelle zu aktualisieren.',\n\t'Saving' => 'Speichere',\n\t'yes' => 'ja',\n\t'no' => 'nein',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href=\"https://www.adminer.org/de/extension/\"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',\n\t'%d / ' => '%d / ',\n\t'Drop %s?' => '%s entfernen?',\n\t'Materialized view' => 'Strukturierte Ansicht',\n\t'Vacuum' => 'Vacuum',\n\t'overwrite' => 'überschreiben',\n\t'DB' => 'DB',\n\t'ATTACH queries are not supported.' => 'ATTACH Abfragen werden nicht unterstützt.',\n\t'Warnings' => 'Warnungen',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer unterstützt den Zugriff auf eine Datenbank ohne Passwort nicht, <a href=\"https://www.adminer.org/de/password/\"%s>mehr Informationen</a>.',\n\t'Full table scan' => 'Vollständige Überprüfung der Tabelle',\n\t'The action will be performed after successful login with the same credentials.' => 'Die Aktion wird nach erfolgreicher Anmeldung mit denselben Anmeldedaten ausgeführt.',\n\t'Connecting to privileged ports is not allowed.' => 'Die Verbindung zu privilegierten Ports ist nicht erlaubt.',\n\t'There is a space in the input password which might be the cause.' => 'Es gibt ein Leerzeichen im Eingabepasswort, das die Ursache sein könnte.',\n\t'Unknown error.' => 'Unbekannter Fehler.',\n\t'Database does not support password.' => 'Die Datenbank unterstützt kein Passwort.',\n\t'Disable %s or enable %s or %s extensions.' => 'Deaktivieren Sie %s oder aktivieren Sie die Erweiterungen %s oder %s.',\n\t'Check has been dropped.' => 'Check wurde abgebrochen.',\n\t'Check has been altered.' => 'Check wurde geändert.',\n\t'Check has been created.' => 'Check wurde erstellt.',\n\t'Alter check' => 'Check ändern',\n\t'Create check' => 'Check erstellen',\n\t'Checks' => 'Checks',\n\t'Loaded plugins' => 'Geladene Plugins',\n\t'%s must <a%s>return an array</a>.' => '%s muss <a%s>ein Array zurückgeben</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Konfigure</a> %s mit %s.',\n\t'screenshot' => 'Screenshot',\n);\n\n// run `php ../../lang.php de` to update this file\n"
  },
  {
    "path": "adminer/lang/el.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Σύστημα',\n\t'Server' => 'Διακομιστής',\n\t'Username' => 'Όνομα Χρήστη',\n\t'Password' => 'Κωδικός',\n\t'Permanent login' => 'Μόνιμη Σύνδεση',\n\t'Login' => 'Σύνδεση',\n\t'Logout' => 'Αποσύνδεση',\n\t'Logged as: %s' => 'Συνδεθήκατε ως %s',\n\t'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',\n\t'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Έληξε ο Κύριος Κωδικός. <a href=\"https://www.adminer.org/en/extension/\"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',\n\t'Language' => 'Γλώσσα',\n\t'Invalid CSRF token. Send the form again.' => 'Άκυρο κουπόνι CSRF. Στείλτε τη φόρμα ξανά.',\n\t'If you did not send this request from Adminer then close this page.' => 'Αν δε στείλατε αυτό το αίτημα από το Adminer, τότε κλείστε αυτή τη σελίδα.',\n\t'No extension' => 'Καμία Επέκταση',\n\t'None of the supported PHP extensions (%s) are available.' => 'Καμία από τις υποστηριζόμενες επεκτάσεις PHP (%s) δεν είναι διαθέσιμη.',\n\t'Session support must be enabled.' => 'Πρέπει να είναι ενεργοποιημένη η υποστήριξη συνεδριών.',\n\t'Session expired, please login again.' => 'Η συνεδρία έληξε, παρακαλώ συνδεθείτε ξανά.',\n\t'%s version: %s through PHP extension %s' => '%s έκδοση: %s μέσω επέκτασης PHP %s',\n\t'Refresh' => 'Ανανέωση',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Δικαιώματα',\n\t'Create user' => 'Δημιουργία Χρήστη',\n\t'User has been dropped.' => 'Ο Χρήστης διαγράφηκε.',\n\t'User has been altered.' => 'Ο Χρήστης τροποποιήθηκε.',\n\t'User has been created.' => 'Ο Χρήστης δημιουργήθηκε.',\n\t'Hashed' => 'Κωδικοποιήθηκε',\n\t'Column' => 'Στήλη',\n\t'Routine' => 'Ρουτίνα',\n\t'Grant' => 'Παραχώρηση',\n\t'Revoke' => 'Ανάκληση',\n\n\t'Process list' => 'Λίστα διεργασιών',\n\t'%d process(es) have been killed.' => array('Τερματίστηκε %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),\n\t'Kill' => 'Τερματισμός',\n\n\t'Variables' => 'Μεταβλητές',\n\t'Status' => 'Κατάσταση',\n\n\t'SQL command' => 'Εντολή SQL',\n\t'%d query(s) executed OK.' => array('Το ερώτημα %d εκτελέστηκε ΟΚ.', 'Τα ερώτηματα %d εκτελέστηκαν ΟΚ.'),\n\t'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκαν %d σειρές.'),\n\t'No commands to execute.' => 'Δεν υπάρχουν εντολές να εκτελεστούν.',\n\t'Error in query' => 'Σφάλμα στο ερώτημα',\n\t'Execute' => 'Εκτέλεση',\n\t'Stop on error' => 'Διακοπή όταν υπάρχει σφάλμα',\n\t'Show only errors' => 'Να εμφανίζονται μόνο τα σφάλματα',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Ιστορικό',\n\t'Clear' => 'Καθαρισμός',\n\t'Edit all' => 'Επεξεργασία όλων',\n\n\t'File upload' => 'Μεταφόρτωση αρχείου',\n\t'From server' => 'Από διακομιστή',\n\t'Webserver file %s' => 'Αρχείο %s από διακομιστή web',\n\t'Run file' => 'Εκτέλεση αρχείου',\n\t'File does not exist.' => 'Το αρχείο δεν υπάρχει.',\n\t'File uploads are disabled.' => 'Έχει απενεργοποιηθεί η μεταφόρτωση αρχείων.',\n\t'Unable to upload a file.' => 'Αδυναμία μεταφόρτωσης αρχείου.',\n\t'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Πολλά δεδομένα POST. Μείωστε τα περιεχόμενα ή αυξήστε την σχετική ρύθμιση %s.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να μεταφορτώσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',\n\t'You are offline.' => 'Βρίσκεστε εκτός σύνδεσης.',\n\n\t'Export' => 'Εξαγωγή',\n\t'Output' => 'Αποτέλεσμα',\n\t'open' => 'άνοιγμα',\n\t'save' => 'αποθήκευση',\n\t'Saving' => 'Γίνεται Αποθήκευση',\n\t'Format' => 'Μορφή',\n\t'Data' => 'Δεδομένα',\n\n\t'Database' => 'Β. Δεδομένων',\n\t'Use' => 'χρήση',\n\t'Select database' => 'Επιλέξτε Β.Δ.',\n\t'Invalid database.' => 'Λανθασμένη Β.Δ.',\n\t'Database has been dropped.' => 'Η Β.Δ. διαγράφηκε.',\n\t'Databases have been dropped.' => 'Οι Β.Δ. διαγράφηκαν.',\n\t'Database has been created.' => 'Η Β.Δ. δημιουργήθηκε.',\n\t'Database has been renamed.' => 'Η. Β.Δ. μετονομάστηκε.',\n\t'Database has been altered.' => 'Η Β.Δ. τροποποιήθηκε.',\n\t'Alter database' => 'Τροποποίηση Β.Δ.',\n\t'Create database' => 'Δημιουργία Β.Δ.',\n\t'Database schema' => 'Σχήμα Β.Δ.',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Μόνιμος Σύνδεσμος',\n\n\t// thousands separator - must contain single byte\n\t',' => '.',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Μηχανή',\n\t'Collation' => 'Collation',\n\t'Data Length' => 'Μήκος Δεδομένων',\n\t'Index Length' => 'Μήκος Δείκτη',\n\t'Data Free' => 'Δεδομένα Ελεύθερα',\n\t'Rows' => 'Σειρές',\n\t'%d in total' => '%d συνολικά',\n\t'Analyze' => 'Ανάλυση',\n\t'Optimize' => 'Βελτιστοποίηση',\n\t'Vacuum' => 'Καθαρισμός',\n\t'Check' => 'Έλεγχος',\n\t'Repair' => 'Επιδιόρθωση',\n\t'Truncate' => 'Περικοπή',\n\t'Tables have been truncated.' => 'Οι πίνακες περικόπηκαν.',\n\t'Move to other database' => 'Μεταφορά σε άλλη Β.Δ.',\n\t'Move' => 'Μεταφορά',\n\t'Tables have been moved.' => 'Οι πίνακες μεταφέρθηκαν.',\n\t'Copy' => 'Αντιγραφή',\n\t'Tables have been copied.' => 'Οι πίνακες αντιγράφηκαν.',\n\n\t'Routines' => 'Ρουτίνες',\n\t'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επηρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επηρεάστηκαν %d σειρές.'),\n\t'Call' => 'Εκτέλεση',\n\t'Parameter name' => 'Όνομα παραμέτρου',\n\t'Create procedure' => 'Δημιουργία διαδικασίας',\n\t'Create function' => 'Δημιουργία Συνάρτησης',\n\t'Routine has been dropped.' => 'Η ρουτίνα διαγράφηκε.',\n\t'Routine has been altered.' => 'Η ρουτίνα τροποποιήθηκε.',\n\t'Routine has been created.' => 'Η ρουτίνα δημιουργήθηκε.',\n\t'Alter function' => 'Τροποποίηση λειτουργίας',\n\t'Alter procedure' => 'Τροποποίηση διαδικασίας',\n\t'Return type' => 'Επιστρεφόμενος τύπος',\n\n\t'Events' => 'Γεγονός',\n\t'Event has been dropped.' => 'Το γεγονός διαγράφηκε.',\n\t'Event has been altered.' => 'Το γεγονός τροποποιήθηκε.',\n\t'Event has been created.' => 'Το γεγονός δημιουργήθηκε.',\n\t'Alter event' => 'Τροποποίηση γεγονότος',\n\t'Create event' => 'Δημιουργία γεγονότος',\n\t'At given time' => 'Σε προκαθορισμένο χρόνο',\n\t'Every' => 'Κάθε',\n\t'Schedule' => 'Προγραμματισμός',\n\t'Start' => 'Έναρξη',\n\t'End' => 'Λήξη',\n\t'On completion preserve' => 'Κατά την ολοκλήρωση διατήρησε',\n\n\t'Tables' => 'Πίνακες',\n\t'Tables and views' => 'Πίνακες και Προβολές',\n\t'Table' => 'Πίνακας',\n\t'No tables.' => 'Χωρίς πίνακες.',\n\t'Alter table' => 'Τροποποίηση πίνακα',\n\t'Create table' => 'Δημιουργία πίνακα',\n\t'Table has been dropped.' => 'Ο πίνακας διαγράφηκε.',\n\t'Tables have been dropped.' => 'Οι πίνακες διαγράφηκαν.',\n\t'Tables have been optimized.' => 'Οι πίνακες βελτιστοποιήθηκαν.',\n\t'Table has been altered.' => 'Ο πίνακας τροποποιήθηκε.',\n\t'Table has been created.' => 'Ο πίνακας δημιουργήθηκε.',\n\t'Table name' => 'Όνομα πίνακα',\n\t'Show structure' => 'Προβολή δομής',\n\t'engine' => 'μηχανή',\n\t'collation' => 'collation',\n\t'Column name' => 'Όνομα στήλης',\n\t'Type' => 'Τύπος',\n\t'Length' => 'Μήκος',\n\t'Auto Increment' => 'Αυτόματη αρίθμηση',\n\t'Options' => 'Επιλογές',\n\t'Comment' => 'Σχόλιο',\n\t'Default value' => 'Προεπιλεγμένη τιμή',\n\t'Default values' => 'Προεπιλεγμένες τιμές',\n\t'Drop' => 'Διαγραφή',\n\t'Are you sure?' => 'Είστε σίγουρος;',\n\t'Size' => 'Μέγεθος',\n\t'Compute' => 'Υπολογισμός',\n\t'Move up' => 'Μετακίνηση προς τα επάνω',\n\t'Move down' => 'Μετακίνηση προς τα κάτω',\n\t'Remove' => 'Αφαίρεση',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Υπέρβαση μέγιστου επιτρεπόμενου αριθμού πεδίων. Παρακαλώ αυξήστε %s.',\n\n\t'Partition by' => 'Τμηματοποίηση ανά',\n\t'Partitions' => 'Τμήματα',\n\t'Partition name' => 'Όνομα Τμήματος',\n\t'Values' => 'Τιμές',\n\n\t'View' => 'Προβολή',\n\t'Materialized view' => 'Υλοποιημένη προβολή',\n\t'View has been dropped.' => 'Η προβολή διαγράφηκε.',\n\t'View has been altered.' => 'Η προβολή τροποποιήθηκε.',\n\t'View has been created.' => 'Η προβολή δημιουργήθηκε.',\n\t'Alter view' => 'Τροποποίηση προβολής',\n\t'Create view' => 'Δημιουργία προβολής',\n\n\t'Indexes' => 'Δείκτες',\n\t'Indexes have been altered.' => 'Οι δείκτες τροποποιήθηκαν.',\n\t'Alter indexes' => 'Τροποποίηση δεικτών',\n\t'Add next' => 'Προσθήκη επόμενου',\n\t'Index Type' => 'Τύπος δείκτη',\n\t'length' => 'μήκος',\n\n\t'Foreign keys' => 'Εξαρτημένα κλειδιά',\n\t'Foreign key' => 'Εξαρτημένο κλειδί',\n\t'Foreign key has been dropped.' => 'Το εξαρτημένο κλειδί διαγράφηκε.',\n\t'Foreign key has been altered.' => 'Το εξαρτημένο κλειδί τροποποιήθηκε.',\n\t'Foreign key has been created.' => 'Το εξαρτημένο κλειδί δημιουργήθηκε.',\n\t'Target table' => 'Πίνακας Στόχος',\n\t'Change' => 'Αλλαγή',\n\t'Source' => 'Πηγή',\n\t'Target' => 'Στόχος',\n\t'Add column' => 'Προσθήκη στήλης',\n\t'Alter' => 'Τροποποίηση',\n\t'Add foreign key' => 'Προσθήκη εξαρτημένου κλειδιού',\n\t'ON DELETE' => 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ',\n\t'ON UPDATE' => 'ΚΑΤΑ ΤΗΝ ΑΛΛΑΓΗ',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Οι στήλες στην πηγή και το στόχο πρέπει να έχουν τον ίδιο τύπο, πρέπει να υπάρχει δείκτης στη στήλη στόχο και να υπάρχουν εξαρτημένα δεδομένα.',\n\n\t'Triggers' => 'Εναύσματα',\n\t'Add trigger' => 'Προσθήκη εναύσματος',\n\t'Trigger has been dropped.' => 'Το έναυσμα διαγράφηκε.',\n\t'Trigger has been altered.' => 'Το έναυσμα τροποποιήθηκε.',\n\t'Trigger has been created.' => 'Το έναυσμα δημιουργήθηκε.',\n\t'Alter trigger' => 'Τροποποίηση εναύσματος',\n\t'Create trigger' => 'Δημιουργία εναύσματος',\n\t'Time' => 'Ώρα',\n\t'Event' => 'Γεγονός',\n\t'Name' => 'Όνομα',\n\n\t'select' => 'επιλογή',\n\t'Select' => 'Επιλογή',\n\t'Select data' => 'Επιλέξτε δεδομένα',\n\t'Functions' => 'Λειτουργίες',\n\t'Aggregation' => 'Άθροισμα',\n\t'Search' => 'Αναζήτηση',\n\t'anywhere' => 'παντού',\n\t'Search data in tables' => 'Αναζήτηση δεδομένων στους πίνακες',\n\t'Sort' => 'Ταξινόμηση',\n\t'descending' => 'Φθίνουσα',\n\t'Limit' => 'Όριο',\n\t'Limit rows' => 'Περιορισμός σειρών',\n\t'Text length' => 'Μήκος κειμένου',\n\t'Action' => 'Ενέργεια',\n\t'Full table scan' => 'Πλήρης σάρωση πινάκων',\n\t'Unable to select the table' => 'Δεν είναι δυνατή η επιλογή πίνακα',\n\t'No rows.' => 'Χωρίς σειρές.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d σειρά', '%d σειρές'),\n\t'Page' => 'Σελίδα',\n\t'last' => 'τελευταία',\n\t'Load more data' => 'Φόρτωση κι άλλων δεδομένων',\n\t'Loading' => 'Φορτώνει',\n\t'Whole result' => 'Όλο το αποτέλεσμα',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\n\t'Import' => 'Εισαγωγή',\n\t'%d row(s) have been imported.' => array('$d σειρά εισήχθη.', '%d σειρές εισήχθησαν.'),\n\t'File must be in UTF-8 encoding.' => 'Το αρχείο πρέπει να έχει κωδικοποίηση UTF-8.',\n\n\t// in-place editing in select\n\t'Modify' => 'Τροποποίηση',\n\t'Ctrl+click on a value to modify it.' => 'Πιέστε Ctrl+click σε μια τιμή για να την τροποποιήσετε.',\n\t'Use edit link to modify this value.' => 'Χρησιμοποιήστε το σύνδεσμο επεξεργασία για να τροποποιήσετε την τιμή.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Η εγγραφή%s εισήχθη.',\n\t'Item has been deleted.' => 'Η εγγραφή διαγράφηκε.',\n\t'Item has been updated.' => 'Η εγγραφή ενημερώθηκε.',\n\t'%d item(s) have been affected.' => array('Επηρεάστηκε %d εγγραφή.', 'Επηρεάστηκαν %d εγγραφές.'),\n\t'New item' => 'Νέα εγγραφή',\n\t'original' => 'πρωτότυπο',\n\t// label for value '' in enum data type\n\t'empty' => 'κενό',\n\t'edit' => 'επεξεργασία',\n\t'Edit' => 'Επεξεργασία',\n\t'Insert' => 'Εισαγωγή',\n\t'Save' => 'Αποθήκευση',\n\t'Save and continue edit' => 'Αποθήκευση και συνέχεια επεξεργασίας',\n\t'Save and insert next' => 'Αποθήκευση και εισαγωγή επόμενου',\n\t'Selected' => 'Επιλεγμένα',\n\t'Clone' => 'Κλωνοποίηση',\n\t'Delete' => 'Διαγραφή',\n\t'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.',\n\n\t// data type descriptions\n\t'Numbers' => 'Αριθμοί',\n\t'Date and time' => 'Ημερομηνία και ώρα',\n\t'Strings' => 'Κείμενο',\n\t'Binary' => 'Δυαδικό',\n\t'Lists' => 'Λίστες',\n\t'Network' => 'Δίκτυο',\n\t'Geometry' => 'Γεωμετρία',\n\t'Relations' => 'Συσχετήσεις',\n\n\t'Editor' => 'Επεξεργαστής',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5/$3/$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'ηη/μμ/[εεεε]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'ΩΩ:ΛΛ:ΔΔ',\n\t'now' => 'τώρα',\n\t'yes' => 'ναι',\n\t'no' => 'όχι',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Το αρχείο υπάρχει.',\n\t'Please use one of the extensions %s.' => 'Παρακαλώ χρησιμοποιείστε μια από τις επεκτάσεις %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Τροποποίηση σχήματος',\n\t'Create schema' => 'Δημιουργία σχήματος',\n\t'Schema has been dropped.' => 'Το σχήμα διαγράφηκε.',\n\t'Schema has been created.' => 'Το σχήμα δημιουργήθηκε.',\n\t'Schema has been altered.' => 'Το σχήμα τροποποιήθηκε.',\n\t'Schema' => 'Σχήμα',\n\t'Invalid schema.' => 'Άκυρο σχήμα.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Αλληλουχία',\n\t'Create sequence' => 'Δημιουργία αλληλουχίας',\n\t'Sequence has been dropped.' => 'Η αλληλουχία διαγράφηκε.',\n\t'Sequence has been created.' => 'Η αλληλουχία δημιουργήθηκε.',\n\t'Sequence has been altered.' => 'Η αλληλουχία τροποποιήθηκε.',\n\t'Alter sequence' => 'Τροποποίηση αλληλουχίας',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Τύποι χρήστη',\n\t'Create type' => 'Δημιουργία τύπου',\n\t'Type has been dropped.' => 'Ο τύπος διαγράφηκε.',\n\t'Type has been created.' => 'Ο τύπος δημιουργήθηκε.',\n\t'Alter type' => 'Τροποποίηση τύπου',\n);\n\n// run `php ../../lang.php el` to update this file\n"
  },
  {
    "path": "adminer/lang/en.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Too many unsuccessful logins, try again in %d minute.', 'Too many unsuccessful logins, try again in %d minutes.'),\n\t'Query executed OK, %d row(s) affected.' => array('Query executed OK, %d row affected.', 'Query executed OK, %d rows affected.'),\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'Routine has been called, %d row(s) affected.' => array('Routine has been called, %d row affected.', 'Routine has been called, %d rows affected.'),\n\t'%d process(es) have been killed.' => array('%d process has been killed.', '%d processes have been killed.'),\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d row', '%d rows'),\n\t'%d item(s) have been affected.' => array('%d item has been affected.', '%d items have been affected.'),\n\t'%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'),\n\t'%d in total' => '%d in total',\n\t'%d query(s) executed OK.' => array('%d query executed OK.', '%d queries executed OK.'),\n);\n\n// run `php ../../lang.php en` to update this file\n"
  },
  {
    "path": "adminer/lang/es.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Login',\n\t'Logout successful.' => 'Sesión finalizada con éxito.',\n\t'Invalid credentials.' => 'Usuario y/o clave de acceso incorrecta.',\n\t'Server' => 'Servidor',\n\t'Username' => 'Usuario',\n\t'Password' => 'Contraseña',\n\t'Select database' => 'Seleccionar Base de datos',\n\t'Invalid database.' => 'Base de datos incorrecta.',\n\t'Table has been dropped.' => 'Tabla eliminada.',\n\t'Table has been altered.' => 'Tabla modificada.',\n\t'Table has been created.' => 'Tabla creada.',\n\t'Alter table' => 'Modificar tabla',\n\t'Create table' => 'Crear tabla',\n\t'Table name' => 'Nombre de la tabla',\n\t'engine' => 'motor',\n\t'collation' => 'colación',\n\t'Column name' => 'Nombre de columna',\n\t'Type' => 'Tipo',\n\t'Length' => 'Longitud',\n\t'Auto Increment' => 'Incremento automático',\n\t'Options' => 'Opciones',\n\t'Save' => 'Guardar',\n\t'Drop' => 'Eliminar',\n\t'Database has been dropped.' => 'Base de datos eliminada.',\n\t'Database has been created.' => 'Base de datos creada.',\n\t'Database has been renamed.' => 'Base de datos renombrada.',\n\t'Database has been altered.' => 'Base de datos modificada.',\n\t'Alter database' => 'Modificar Base de datos',\n\t'Create database' => 'Crear Base de datos',\n\t'SQL command' => 'Comando SQL',\n\t'Logout' => 'Cerrar sesión',\n\t'Use' => 'Usar',\n\t'No tables.' => 'No existen tablas.',\n\t'select' => 'registros',\n\t'Item has been deleted.' => 'Registro eliminado.',\n\t'Item has been updated.' => 'Registro modificado.',\n\t'Item%s has been inserted.' => 'Registro%s insertado.',\n\t'Edit' => 'Modificar',\n\t'Insert' => 'Agregar',\n\t'Save and insert next' => 'Guardar e insertar siguiente',\n\t'Delete' => 'Eliminar',\n\t'Database' => 'Base de datos',\n\t'DB' => 'BD',\n\t'Routines' => 'Procedimientos',\n\t'Indexes have been altered.' => 'Índices actualizados.',\n\t'Indexes' => 'Índices',\n\t'Alter indexes' => 'Modificar índices',\n\t'Add next' => 'Agregar',\n\t'Language' => 'Idioma',\n\t'Select' => 'Mostrar',\n\t'New item' => 'Nuevo Registro',\n\t'Search' => 'Condición',\n\t'Sort' => 'Ordenar',\n\t'descending' => 'descendiente',\n\t'Limit' => 'Limite',\n\t'No rows.' => 'No existen registros.',\n\t'Action' => 'Acción',\n\t'edit' => 'modificar',\n\t'Page' => 'Página',\n\t'Query executed OK, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),\n\t'Error in query' => 'Error al ejecutar consulta',\n\t'Unknown error.' => 'Error desconocido.',\n\t'Warnings' => 'Advertencias',\n\t'ATTACH queries are not supported.' => 'Consultas tipo ATTACH no soportadas.',\n\t'Execute' => 'Ejecutar',\n\t'Table' => 'Tabla',\n\t'Foreign keys' => 'Claves externas',\n\t'Triggers' => 'Disparadores',\n\t'View' => 'Vista',\n\t'Materialized view' => 'Vista materializada',\n\t'Unable to select the table' => 'No es posible seleccionar la tabla',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.',\n\t'Comment' => 'Comentario',\n\t'Default values' => 'Valores predeterminados',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Ningún comando para ejecutar.',\n\t'Unable to upload a file.' => 'No es posible cargar el archivo.',\n\t'File upload' => 'Importar archivo',\n\t'File uploads are disabled.' => 'Importación de archivos deshablilitada.',\n\t'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),\n\t'Call' => 'Llamar',\n\t'No extension' => 'No hay extensión',\n\t'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',\n\t'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',\n\t'Session expired, please login again.' => 'Sesión caducada, por favor escriba su clave de nuevo.',\n\t'Text length' => 'Longitud de texto',\n\t'Foreign key has been dropped.' => 'Clave foranea eliminada.',\n\t'Foreign key has been altered.' => 'Clave foranea modificada.',\n\t'Foreign key has been created.' => 'Clave foranea creada.',\n\t'Foreign key' => 'Clave externa',\n\t'Target table' => 'Tabla de destino',\n\t'Change' => 'Modificar',\n\t'Source' => 'Origen',\n\t'Target' => 'Destino',\n\t'Add column' => 'Agregar columna',\n\t'Alter' => 'Modificar',\n\t'Add foreign key' => 'Agregar clave externa',\n\t'ON DELETE' => 'AL BORRAR',\n\t'ON UPDATE' => 'AL ACTUALIZAR',\n\t'Index Type' => 'Tipo de índice',\n\t'length' => 'longitud',\n\t'View has been dropped.' => 'Vista eliminada.',\n\t'View has been altered.' => 'Vista modificada.',\n\t'View has been created.' => 'Vista creada.',\n\t'Alter view' => 'Modificar vista',\n\t'Create view' => 'Crear vista',\n\t'Name' => 'Nombre',\n\t'Process list' => 'Lista de procesos',\n\t'%d process(es) have been killed.' => array('%d proceso detenido.', '%d procesos detenidos.'),\n\t'Kill' => 'Detener',\n\t'Parameter name' => 'Nombre de Parámetro',\n\t'Database schema' => 'Esquema de base de datos',\n\t'Create procedure' => 'Crear procedimiento',\n\t'Create function' => 'Crear función',\n\t'Routine has been dropped.' => 'Procedimiento eliminado.',\n\t'Routine has been altered.' => 'Procedimiento modificado.',\n\t'Routine has been created.' => 'Procedimiento creado.',\n\t'Alter function' => 'Modificar función',\n\t'Alter procedure' => 'Modificar procedimiento',\n\t'Return type' => 'Tipo de valor de vuelta',\n\t'Add trigger' => 'Agregar disparador',\n\t'Trigger has been dropped.' => 'Disparador eliminado.',\n\t'Trigger has been altered.' => 'Disparador modificado.',\n\t'Trigger has been created.' => 'Disparador creado.',\n\t'Alter trigger' => 'Modificar Disparador',\n\t'Create trigger' => 'Agregar Disparador',\n\t'Time' => 'Tiempo',\n\t'Event' => 'Evento',\n\t'%s version: %s through PHP extension %s' => 'Versión %s: %s a través de la extensión de PHP %s',\n\t'%d row(s)' => array('%d registro', '%d registros'),\n\t'Remove' => 'Eliminar',\n\t'Are you sure?' => '¿Está seguro?',\n\t'Privileges' => 'Privilegios',\n\t'Create user' => 'Crear Usuario',\n\t'User has been dropped.' => 'Usuario eliminado.',\n\t'User has been altered.' => 'Usuario modificado.',\n\t'User has been created.' => 'Usuario creado.',\n\t'Hashed' => 'Hash',\n\t'Column' => 'Columna',\n\t'Routine' => 'Rutina',\n\t'Grant' => 'Conceder',\n\t'Revoke' => 'Impedir',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduzca el tamaño o aumente la directiva de configuración %s.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Usted puede cargar un SQL grande mediante FTP e importarlo desde el servidor.',\n\t'You are offline.' => 'Usted no esta en linea.',\n\t'Logged as: %s' => 'Logueado como: %s',\n\t'Move up' => 'Mover arriba',\n\t'Move down' => 'Mover abajo',\n\t'Functions' => 'Funciones',\n\t'Aggregation' => 'Agregados',\n\t'Export' => 'Exportar',\n\t'Output' => 'Salida',\n\t'open' => 'abrir',\n\t'save' => 'guardar',\n\t'Format' => 'Formato',\n\t'Tables' => 'Tablas',\n\t'Data' => 'Datos',\n\t'Event has been dropped.' => 'Evento eliminado.',\n\t'Event has been altered.' => 'Evento modificado.',\n\t'Event has been created.' => 'Evento creado.',\n\t'Alter event' => 'Modificar Evento',\n\t'Create event' => 'Crear Evento',\n\t'At given time' => 'En el momento indicado',\n\t'Every' => 'Cada',\n\t'Events' => 'Eventos',\n\t'Schedule' => 'Agenda',\n\t'Start' => 'Inicio',\n\t'End' => 'Fin',\n\t'Status' => 'Estado',\n\t'On completion preserve' => 'Al completar mantener',\n\t'Tables and views' => 'Tablas y vistas',\n\t'Data Length' => 'Longitud de datos',\n\t'Index Length' => 'Longitud de índice',\n\t'Data Free' => 'Espacio libre',\n\t'Collation' => 'Colación',\n\t'Analyze' => 'Analizar',\n\t'Optimize' => 'Optimizar',\n\t'Check' => 'Comprobar',\n\t'Repair' => 'Reparar',\n\t'Truncate' => 'Vaciar',\n\t'Tables have been truncated.' => 'Las tablas han sido vaciadas.',\n\t'Rows' => 'Registros',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Se movieron las tablas.',\n\t'Move to other database' => 'Mover a otra base de datos',\n\t'Move' => 'Mover',\n\t'Engine' => 'Motor',\n\t'Save and continue edit' => 'Guardar y continuar editando',\n\t'original' => 'original',\n\t'Tables have been dropped.' => 'Tablas eliminadas.',\n\t'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),\n\t'Whole result' => 'Resultado completo',\n\t'Clone' => 'Clonar',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida la cantidad máxima de campos permitidos. Por favor aumente %s.',\n\t'Partition by' => 'Particionar por',\n\t'Partitions' => 'Particiones',\n\t'Partition name' => 'Nombre de partición',\n\t'Values' => 'Valores',\n\t'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),\n\t'File must be in UTF-8 encoding.' => 'El archivo tiene que ser codificacion UTF-8.',\n\t'anywhere' => 'donde sea',\n\t'Import' => 'Importar',\n\t'Stop on error' => 'Parar en caso de error',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',\n\t'History' => 'Histórico',\n\t'Variables' => 'Variables',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Las columnas de origen y destino deben ser del mismo tipo, debe existir un índice entre las columnas del destino y el registro referenciado debe existir también.',\n\t'Relations' => 'Relaciones',\n\t'Run file' => 'Ejecutar Archivo',\n\t'Clear' => 'Vaciar',\n\t'Maximum allowed file size is %sB.' => 'El tamaño máximo de archivo es %sB.',\n\t'Numbers' => 'Números',\n\t'Date and time' => 'Fecha y hora',\n\t'Strings' => 'Cadena',\n\t'Binary' => 'Binario',\n\t'Lists' => 'Listas',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Archivo de servidor web %s',\n\t'File does not exist.' => 'Ese archivo no existe.',\n\t'%d in total' => '%d en total',\n\t'Permanent login' => 'Guardar contraseña',\n\t'Databases have been dropped.' => 'Bases de datos eliminadas.',\n\t'Search data in tables' => 'Buscar datos en tablas',\n\t'Schema' => 'Esquema',\n\t'Alter schema' => 'Modificar esquema',\n\t'Create schema' => 'Crear esquema',\n\t'Schema has been dropped.' => 'Esquema eliminado.',\n\t'Schema has been created.' => 'Esquema creado.',\n\t'Schema has been altered.' => 'Esquema modificado.',\n\t'Sequences' => 'Secuencias',\n\t'Create sequence' => 'Crear secuencias',\n\t'Alter sequence' => 'Modificar secuencia',\n\t'Sequence has been dropped.' => 'Secuencia eliminada.',\n\t'Sequence has been created.' => 'Secuencia creada.',\n\t'Sequence has been altered.' => 'Secuencia modificada.',\n\t'User types' => 'Tipos definidos por el usuario',\n\t'Create type' => 'Crear tipo',\n\t'Alter type' => 'Modificar tipo',\n\t'Type has been dropped.' => 'Tipo eliminado.',\n\t'Type has been created.' => 'Tipo creado.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre el valor para editarlo.',\n\t'Use edit link to modify this value.' => 'Utilice el enlace de edición para realizar cambios.',\n\t'last' => 'último',\n\t'From server' => 'Desde servidor',\n\t'System' => 'Motor de base de datos',\n\t'Select data' => 'Visualizar contenido',\n\t'Show structure' => 'Mostrar estructura',\n\t'empty' => 'ninguno',\n\t'Network' => 'Red',\n\t'Geometry' => 'Geometría',\n\t'File exists.' => 'Ese archivo ya existe.',\n\t'%d query(s) executed OK.' => array('%d sentencia SQL ejecutada correctamente.', '%d sentencias SQL ejecutadas correctamente.'),\n\t'Show only errors' => 'Mostrar solamente errores',\n\t'Refresh' => 'Actualizar',\n\t'Invalid schema.' => 'Esquema inválido.',\n\t'Please use one of the extensions %s.' => 'Por favor, use una de las extensiones %s.',\n\t'now' => 'ahora',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Tablas copiadas.',\n\t'Copy' => 'Copiar',\n\t'Permanent link' => 'Enlace permanente',\n\t'Edit all' => 'Editar todos',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\n\t'Loaded plugins' => 'Plugins cargados',\n\t'%s must <a%s>return an array</a>.' => '%s tiene que <a%s>retornar un arreglo</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Configurar</a> %s en %s.',\n\t'There is a space in the input password which might be the cause.' => 'Hay un espacio en el password, lo cual puede ser la causa.',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer no soporta accesar una base de datos sin clave, <a href=\"https://www.adminer.org/en/password/\"%s>Ver detalles</a>.',\n\t'Database does not support password.' => 'La base de datos no soporta password.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Muchos intentos de acceso Intente en %d minutos.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Password maestro expirado. <a href=\"https://www.adminer.org/en/extension/\"%s>Implemente</a> %s metodo para hacerlo permanente.',\n\t'If you did not send this request from Adminer then close this page.' => 'Si no puede enviar la solicitud por Adminer entonces cierre esta pagina.',\n\t'Connecting to privileged ports is not allowed.' => 'Conexiones a puertos privilegiados no son permitidas.',\n\t'Disable %s or enable %s or %s extensions.' => 'Desactivar %s o activar %s o %s extensiones.',\n\t'The action will be performed after successful login with the same credentials.' => 'La operacion sera ejecutada despues de ingresar nuevamente con las mismas credenciales.',\n\t'You have no privileges to update this table.' => 'Usted no tiene privilegios para actualizar esta tabla.',\n\n\t// Table check constraints\n\t'Checks' => 'Chequeos',\n\t'Create check' => 'Crear chequeo',\n\t'Alter check' => 'Cambiar chequeo',\n\t'Check has been created.' => 'Chequeo creado.',\n\t'Check has been altered.' => 'Chequeo cambiado.',\n\t'Check has been dropped.' => 'Chequeo eliminado.',\n);\n\n// run `php ../../lang.php es` to update this file\n"
  },
  {
    "path": "adminer/lang/et.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Logi sisse',\n\t'Logout successful.' => 'Väljalogimine õnnestus.',\n\t'Invalid credentials.' => 'Ebakorrektsed andmed.',\n\t'Server' => 'Server',\n\t'Username' => 'Kasutajanimi',\n\t'Password' => 'Parool',\n\t'Select database' => 'Vali andmebaas',\n\t'Invalid database.' => 'Tundmatu andmebaas.',\n\t'Table has been dropped.' => 'Tabel on edukalt kustutatud.',\n\t'Table has been altered.' => 'Tabeli andmed on edukalt muudetud.',\n\t'Table has been created.' => 'Tabel on edukalt loodud.',\n\t'Alter table' => 'Muuda tabeli struktuuri',\n\t'Create table' => 'Loo uus tabel',\n\t'Table name' => 'Tabeli nimi',\n\t'engine' => 'andmebaasimootor',\n\t'collation' => 'tähetabel',\n\t'Column name' => 'Veeru nimi',\n\t'Type' => 'Tüüp',\n\t'Length' => 'Pikkus',\n\t'Auto Increment' => 'Automaatselt suurenev',\n\t'Options' => 'Valikud',\n\t'Save' => 'Salvesta',\n\t'Drop' => 'Kustuta',\n\t'Database has been dropped.' => 'Andmebaas on edukalt kustutatud.',\n\t'Database has been created.' => 'Andmebaas on edukalt loodud.',\n\t'Database has been renamed.' => 'Andmebaas on edukalt ümber nimetatud.',\n\t'Database has been altered.' => 'Andmebaasi struktuuri uuendamine õnnestus.',\n\t'Alter database' => 'Muuda andmebaasi',\n\t'Create database' => 'Loo uus andmebaas',\n\t'SQL command' => 'SQL-Päring',\n\t'Logout' => 'Logi välja',\n\t'Use' => 'Kasuta',\n\t'No tables.' => 'Tabeleid ei leitud.',\n\t'select' => 'kuva',\n\t'Item has been deleted.' => 'Kustutamine õnnestus.',\n\t'Item has been updated.' => 'Uuendamine õnnestus.',\n\t'Item%s has been inserted.' => 'Kirje%s on edukalt lisatud.',\n\t'Edit' => 'Muuda',\n\t'Insert' => 'Sisesta',\n\t'Save and insert next' => 'Salvesta ja lisa järgmine',\n\t'Delete' => 'Kustuta',\n\t'Database' => 'Andmebaas',\n\t'Routines' => 'Protseduurid',\n\t'Indexes have been altered.' => 'Indeksite andmed on edukalt uuendatud.',\n\t'Indexes' => 'Indeksid',\n\t'Alter indexes' => 'Muuda indekseid',\n\t'Add next' => 'Lisa järgmine',\n\t'Language' => 'Keel',\n\t'Select' => 'Kuva',\n\t'New item' => 'Lisa kirje',\n\t'Search' => 'Otsi',\n\t'Sort' => 'Sorteeri',\n\t'descending' => 'kahanevalt',\n\t'Limit' => 'Piira',\n\t'No rows.' => 'Sissekanded puuduvad.',\n\t'Action' => 'Tegevus',\n\t'edit' => 'muuda',\n\t'Page' => 'Lehekülg',\n\t'Query executed OK, %d row(s) affected.' => 'Päring õnnestus, mõjutatatud ridu: %d.',\n\t'Error in query' => 'Päringus esines viga',\n\t'Execute' => 'Käivita',\n\t'Table' => 'Tabel',\n\t'Foreign keys' => 'Võõrvõtmed (foreign key)',\n\t'Triggers' => 'Päästikud (trigger)',\n\t'View' => 'Vaata',\n\t'Unable to select the table' => 'Tabeli valimine ebaõnnestus',\n\t'Invalid CSRF token. Send the form again.' => 'Sobimatu CSRF, palun postitage vorm uuesti.',\n\t'Comment' => 'Kommentaar',\n\t'Default values' => 'Vaikimisi väärtused',\n\t'%d byte(s)' => array('%d bait', '%d baiti'),\n\t'No commands to execute.' => 'Käsk puudub.',\n\t'Unable to upload a file.' => 'Faili üleslaadimine pole võimalik.',\n\t'File upload' => 'Faili üleslaadimine',\n\t'File uploads are disabled.' => 'Failide üleslaadimine on keelatud.',\n\t'Routine has been called, %d row(s) affected.' => 'Protseduur täideti edukalt, mõjutatud ridu: %d.',\n\t'Call' => 'Käivita',\n\t'No extension' => 'Ei leitud laiendust',\n\t'None of the supported PHP extensions (%s) are available.' => 'Serveris pole ühtegi toetatud PHP laiendustest (%s).',\n\t'Session support must be enabled.' => 'Sessioonid peavad olema lubatud.',\n\t'Session expired, please login again.' => 'Sessioon on aegunud, palun logige uuesti sisse.',\n\t'Text length' => 'Teksti pikkus',\n\t'Foreign key has been dropped.' => 'Võõrvõti on edukalt kustutatud.',\n\t'Foreign key has been altered.' => 'Võõrvõtme andmed on edukalt muudetud.',\n\t'Foreign key has been created.' => 'Võõrvõri on edukalt loodud.',\n\t'Foreign key' => 'Võõrvõti',\n\t'Target table' => 'Siht-tabel',\n\t'Change' => 'Muuda',\n\t'Source' => 'Allikas',\n\t'Target' => 'Sihtkoht',\n\t'Add column' => 'Lisa veerg',\n\t'Alter' => 'Muuda',\n\t'Add foreign key' => 'Lisa võõrvõti',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Indeksi tüüp',\n\t'length' => 'pikkus',\n\t'View has been dropped.' => 'Vaade (VIEW) on edukalt kustutatud.',\n\t'View has been altered.' => 'Vaade (VIEW) on edukalt muudetud.',\n\t'View has been created.' => 'Vaade (VIEW) on edukalt loodud.',\n\t'Alter view' => 'Muuda vaadet (VIEW)',\n\t'Create view' => 'Loo uus vaade (VIEW)',\n\t'Name' => 'Nimi',\n\t'Process list' => 'Protsesside nimekiri',\n\t'%d process(es) have been killed.' => array('Protsess on edukalt peatatud (%d).', 'Valitud protsessid (%d) on edukalt peatatud.'),\n\t'Kill' => 'Peata',\n\t'Parameter name' => 'Parameetri nimi',\n\t'Database schema' => 'Andmebaasi skeem',\n\t'Create procedure' => 'Loo uus protseduur',\n\t'Create function' => 'Loo uus funktsioon',\n\t'Routine has been dropped.' => 'Protseduur on edukalt kustutatud.',\n\t'Routine has been altered.' => 'Protseduuri andmed on edukalt muudetud.',\n\t'Routine has been created.' => 'Protseduur on edukalt loodud.',\n\t'Alter function' => 'Muuda funktsiooni',\n\t'Alter procedure' => 'Muuda protseduuri',\n\t'Return type' => 'Tagastustüüp',\n\t'Add trigger' => 'Lisa päästik (TRIGGER)',\n\t'Trigger has been dropped.' => 'Päästik on edukalt kustutatud.',\n\t'Trigger has been altered.' => 'Päästiku andmed on edukalt uuendatud.',\n\t'Trigger has been created.' => 'Uus päästik on edukalt loodud.',\n\t'Alter trigger' => 'Muuda päästiku andmeid',\n\t'Create trigger' => 'Loo uus päästik (TRIGGER)',\n\t'Time' => 'Aeg',\n\t'Event' => 'Sündmus',\n\t'%d row(s)' => '%d rida',\n\t'Remove' => 'Eemalda',\n\t'Are you sure?' => 'Kas oled kindel?',\n\t'Privileges' => 'Õigused',\n\t'Create user' => 'Loo uus kasutaja',\n\t'User has been dropped.' => 'Kasutaja on edukalt kustutatud.',\n\t'User has been altered.' => 'Kasutaja andmed on edukalt muudetud.',\n\t'User has been created.' => 'Kasutaja on edukalt lisatud.',\n\t'Hashed' => 'Häshitud (Hashed)',\n\t'Column' => 'Veerg',\n\t'Routine' => 'Protseduur',\n\t'Grant' => 'Anna',\n\t'Revoke' => 'Eemalda',\n\t'%s version: %s through PHP extension %s' => '%s versioon: %s, kasutatud PHP moodul: %s',\n\t'Logged as: %s' => 'Sisse logitud: %s',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST-andmete maht on liialt suur. Palun vähendage andmeid või suurendage %s php-seadet.',\n\t'Move up' => 'Liiguta ülespoole',\n\t'Move down' => 'Liiguta allapoole',\n\t'Export' => 'Ekspordi',\n\t'Tables' => 'Tabelid',\n\t'Data' => 'Andmed',\n\t'Output' => 'Väljund',\n\t'open' => 'näita brauseris',\n\t'save' => 'salvesta failina',\n\t'Format' => 'Formaat',\n\t'Functions' => 'Funktsioonid',\n\t'Aggregation' => 'Liitmine',\n\t'Event has been dropped.' => 'Sündmus on edukalt kustutatud.',\n\t'Event has been altered.' => 'Sündmuse andmed on edukalt uuendatud.',\n\t'Event has been created.' => 'Sündmus on edukalt loodud.',\n\t'Alter event' => 'Muuda sündmuse andmeid',\n\t'Create event' => 'Loo uus sündmus (EVENT)',\n\t'Start' => 'Alusta',\n\t'End' => 'Lõpeta',\n\t'Every' => 'Iga',\n\t'Status' => 'Staatus',\n\t'On completion preserve' => 'Lõpetamisel jäta sündmus alles',\n\t'Events' => 'Sündmused (EVENTS)',\n\t'Schedule' => 'Ajakava',\n\t'At given time' => 'Antud ajahetkel',\n\t'Save and continue edit' => 'Salvesta ja jätka muutmist',\n\t'original' => 'originaal',\n\t'Tables have been truncated.' => 'Validud tabelid on edukalt tühjendatud.',\n\t'Tables have been moved.' => 'Valitud tabelid on edukalt liigutatud.',\n\t'Tables have been dropped.' => 'Valitud tabelid on edukalt kustutatud.',\n\t'Tables and views' => 'Tabelid ja vaated',\n\t'Engine' => 'Implementatsioon',\n\t'Collation' => 'Tähetabel',\n\t'Data Length' => 'Andmete pikkus',\n\t'Index Length' => 'Indeksi pikkus',\n\t'Data Free' => 'Vaba ruumi',\n\t'Rows' => 'Ridu',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'Analüüsi',\n\t'Optimize' => 'Optimeeri',\n\t'Check' => 'Kontrolli',\n\t'Repair' => 'Paranda',\n\t'Truncate' => 'Tühjenda',\n\t'Move to other database' => 'Liiguta teise andmebaasi',\n\t'Move' => 'Liiguta',\n\t'%d item(s) have been affected.' => 'Mõjutatud kirjeid: %d.',\n\t'Whole result' => 'Täielikud tulemused',\n\t'Clone' => 'Kloon',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s.',\n\t'Partition by' => 'Partitsiooni',\n\t'Partitions' => 'Partitsioonid',\n\t'Partition name' => 'Partitsiooni nimi',\n\t'Values' => 'Väärtused',\n\t'%d row(s) have been imported.' => 'Imporditi %d rida.',\n\t'anywhere' => 'vahet pole',\n\t'Import' => 'Impordi',\n\t'Stop on error' => 'Peatuda vea esinemisel',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$6.$4.$1',\n\t'[yyyy]-mm-dd' => 'd.m.[yyyy]',\n\t'History' => 'Ajalugu',\n\t'Variables' => 'Muutujad',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lähte- ja sihtveerud peavad eksisteerima ja omama sama andmetüüpi, sihtveergudel peab olema määratud indeks ning viidatud andmed peavad eksisteerima.',\n\t'Relations' => 'Seosed',\n\t'Run file' => 'Käivita fail',\n\t'Clear' => 'Puhasta',\n\t'Maximum allowed file size is %sB.' => 'Maksimaalne failisuurus %sB.',\n\t'Numbers' => 'Numbrilised',\n\t'Date and time' => 'Kuupäev ja kellaaeg',\n\t'Strings' => 'Tekstid',\n\t'Binary' => 'Binaar',\n\t'Lists' => 'Listid',\n\t'Editor' => 'Redaktor',\n\t'Webserver file %s' => 'Fail serveris: %s',\n\t'File does not exist.' => 'Faili ei leitud.',\n\t'%d in total' => 'Kokku: %d',\n\t'Permanent login' => 'Jäta mind meelde',\n\t'Databases have been dropped.' => 'Andmebaasid on edukalt kustutatud.',\n\t'Search data in tables' => 'Otsi kogu andmebaasist',\n\t'Schema' => 'Struktuur',\n\t'Alter schema' => 'Muuda struktuuri',\n\t'Create schema' => 'Loo struktuur',\n\t'Schema has been dropped.' => 'Struktuur on edukalt kustutatud.',\n\t'Schema has been created.' => 'Struktuur on edukalt loodud.',\n\t'Schema has been altered.' => 'Struktuur on edukalt muudetud.',\n\t'Sequences' => 'Jadad (sequences)',\n\t'Create sequence' => 'Loo jada',\n\t'Alter sequence' => 'Muuda jada',\n\t'Sequence has been dropped.' => 'Jada on edukalt kustutatud.',\n\t'Sequence has been created.' => 'Jada on edukalt loodud.',\n\t'Sequence has been altered.' => 'Jada on edukalt muudetud.',\n\t'User types' => 'Kasutajatüübid',\n\t'Create type' => 'Loo tüüp',\n\t'Alter type' => 'Muuda tüüpi',\n\t'Type has been dropped.' => 'Tüüp on edukalt kustutatud.',\n\t'Type has been created.' => 'Tüüp on edukalt loodud.',\n\t'Ctrl+click on a value to modify it.' => 'Väärtuse muutmiseks Ctrl+kliki sellel.',\n\t'Use edit link to modify this value.' => 'Väärtuse muutmiseks kasuta muutmislinki.',\n\t'last' => 'viimane',\n\t'From server' => 'Serverist',\n\t'System' => 'Andmebaasimootor',\n\t'Select data' => 'Vaata andmeid',\n\t'Show structure' => 'Näita struktuuri',\n\t'empty' => 'tühi',\n\t'Network' => 'Võrk (network)',\n\t'Geometry' => 'Geomeetria',\n\t'File exists.' => 'Fail juba eksisteerib.',\n\t'%d query(s) executed OK.' => array('%d päring edukalt käivitatud.', '%d päringut edukalt käivitatud.'),\n\t'Show only errors' => 'Kuva vaid veateateid',\n\t'Refresh' => 'Uuenda',\n\t'Invalid schema.' => 'Sobimatu skeema.',\n\t'Please use one of the extensions %s.' => 'Palun kasuta üht laiendustest %s.',\n\t'now' => 'nüüd',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Tabelid on edukalt kopeeritud.',\n\t'Copy' => 'Kopeeri',\n\t'Permanent link' => 'Püsilink',\n\t'Edit all' => 'Muuda kõiki',\n\t'HH:MM:SS' => 'HH:MM:SS',\n);\n\n// run `php ../../lang.php et` to update this file\n"
  },
  {
    "path": "adminer/lang/fa.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'سیستم',\n\t'Server' => 'سرور',\n\t'Username' => 'نام کاربری',\n\t'Password' => 'کلمه عبور',\n\t'Permanent login' => 'ورود دائم',\n\t'Login' => 'ورود',\n\t'Logout' => 'خروج',\n\t'Logged as: %s' => 'ورود به عنوان: %s',\n\t'Logout successful.' => 'با موفقیت خارج شدید.',\n\t'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.', 'ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href=\"https://www.adminer.org/en/extension/\"%s>پیاده سازی</a> کرده تا آن را دائمی سازید.',\n\t'Language' => 'زبان',\n\t'Invalid CSRF token. Send the form again.' => 'CSRF token نامعتبر است. دوباره سعی کنید.',\n\t'No extension' => 'پسوند نامعتبر',\n\t'None of the supported PHP extensions (%s) are available.' => 'هیچ کدام از افزونه های PHP پشتیبانی شده (%s) موجود نمی باشند.',\n\t'Session support must be enabled.' => 'پشتیبانی از نشست بایستی فعال گردد.',\n\t'Session expired, please login again.' => 'نشست پایان یافته، لطفا دوباره وارد شوید.',\n\t'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',\n\t'Refresh' => 'بازیابی',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'rtl',\n\n\t'Privileges' => 'امتیازات',\n\t'Create user' => 'ایجاد کاربر',\n\t'User has been dropped.' => 'کاربر حذف شد.',\n\t'User has been altered.' => 'کاربر ویرایش گردید.',\n\t'User has been created.' => 'کاربر ایجاد شد.',\n\t'Hashed' => 'به هم ریخته',\n\t'Column' => 'ستون',\n\t'Routine' => 'روتین',\n\t'Grant' => 'اعطا',\n\t'Revoke' => 'لغو کردن',\n\n\t'Process list' => 'لیست فرآیند',\n\t'%d process(es) have been killed.' => '%d فرآیند متوقف شد.',\n\t'Kill' => 'حذف فرآیند',\n\n\t'Variables' => 'متغیرها',\n\t'Status' => 'وضعیت',\n\n\t'SQL command' => 'دستور SQL',\n\t'%d query(s) executed OK.' => '%d کوئری اجرا شد.',\n\t'Query executed OK, %d row(s) affected.' => 'کوئری اجرا شد. %d سطر تغیر کرد.',\n\t'No commands to execute.' => 'دستوری برای اجرا وجود ندارد.',\n\t'Error in query' => 'خطا در کوئری',\n\t'Execute' => 'اجرا',\n\t'Stop on error' => 'توقف بر روی خطا',\n\t'Show only errors' => 'فقط نمایش خطاها',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'تاریخ',\n\t'Clear' => 'پاک کردن',\n\t'Edit all' => 'ویرایش همه',\n\n\t'File upload' => 'بارگذاری فایل',\n\t'From server' => 'از سرور',\n\t'Webserver file %s' => '%s فایل وب سرور',\n\t'Run file' => 'اجرای فایل',\n\t'File does not exist.' => 'فایل وجود ندارد.',\n\t'File uploads are disabled.' => 'بارگذاری غیر فعال است.',\n\t'Unable to upload a file.' => 'قادر به بارگذاری فایل نیستید.',\n\t'Maximum allowed file size is %sB.' => ' %sB حداکثر اندازه فایل.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالی برزگ است. حجم داده کاهش دهید و یا مقدار %s را در پیکربندی افزایش دهید.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'شما می توانید فایل SQL حجیم را از طریق FTP بارگزاری و از روی سرور وارد نمایید.',\n\t'You are offline.' => 'شما آفلاین می باشید.',\n\n\t'Export' => 'استخراج',\n\t'Output' => 'خروجی',\n\t'open' => 'بازکردن',\n\t'save' => 'ذخیره',\n\t'Format' => 'حذف',\n\t'Data' => 'داده',\n\n\t'Database' => 'پایگاه داده',\n\t'Use' => 'استفاده',\n\t'Select database' => 'انتخاب پایگاه داده',\n\t'Invalid database.' => 'پایگاه داده نامعتبر.',\n\t'Database has been dropped.' => 'پایگاه داده حذف شد.',\n\t'Databases have been dropped.' => 'پایگاه های داده حذف شدند.',\n\t'Database has been created.' => 'پایگاه داده ایجاد شد.',\n\t'Database has been renamed.' => 'نام پایگاه داده تغیر کرد.',\n\t'Database has been altered.' => 'پایگاه داده ویرایش شد.',\n\t'Alter database' => 'ویرایش پایگاه داده',\n\t'Create database' => 'ایجاد پایگاه داده',\n\t'Database schema' => 'ساختار پایگاه داده',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'ارتباط دائم',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '۰۱۲۳۴۵۶۷۸۹',\n\t'Engine' => 'موتور',\n\t'Collation' => 'تطبیق',\n\t'Data Length' => 'طول داده',\n\t'Index Length' => 'طول ایندکس',\n\t'Data Free' => 'داده اختیاری',\n\t'Rows' => 'سطرها',\n\t'%d in total' => ' به طور کل %d ',\n\t'Analyze' => 'تحلیل',\n\t'Optimize' => 'بهینه سازی',\n\t'Vacuum' => 'پاک سازی',\n\t'Check' => 'بررسی',\n\t'Repair' => 'تعمیر',\n\t'Truncate' => 'کوتاه کردن',\n\t'Tables have been truncated.' => 'جدولها بریده شدند.',\n\t'Move to other database' => 'انتقال به یک پایگاه داده دیگر',\n\t'Move' => 'انتقال',\n\t'Tables have been moved.' => 'جدولها انتقال داده شدند.',\n\t'Copy' => 'کپی کردن',\n\t'Tables have been copied.' => 'جدولها کپی شدند.',\n\n\t'Routines' => 'روالها',\n\t'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد.', 'روال فراخوانی شد %d سطر متاثر شد.'),\n\t'Call' => 'صدا زدن',\n\t'Parameter name' => 'نام پارامتر',\n\t'Create procedure' => 'ایجاد زیربرنامه',\n\t'Create function' => 'ایجاد تابع',\n\t'Routine has been dropped.' => 'روال حذف شد.',\n\t'Routine has been altered.' => 'روال ویرایش شد.',\n\t'Routine has been created.' => 'روال ایجاد شد.',\n\t'Alter function' => 'ویرایش تابع',\n\t'Alter procedure' => 'ویرایش زیربرنامه',\n\t'Return type' => 'برگرداندن نوع',\n\n\t'Events' => 'رویدادها',\n\t'Event has been dropped.' => 'رویداد حذف شد.',\n\t'Event has been altered.' => 'رویداد ویرایش شد.',\n\t'Event has been created.' => 'رویداد ایجاد شد.',\n\t'Alter event' => 'ویرایش رویداد',\n\t'Create event' => 'ایجاد رویداد',\n\t'At given time' => 'زمان معین',\n\t'Every' => 'همه',\n\t'Schedule' => 'زمانبندی',\n\t'Start' => 'آغاز',\n\t'End' => 'پایان',\n\t'On completion preserve' => 'تکمیل حفاظت فعال است',\n\n\t'Tables' => 'جدولها',\n\t'Tables and views' => 'جدولها و نمایه ها',\n\t'Table' => 'جدول',\n\t'No tables.' => 'جدولی وجود ندارد.',\n\t'Alter table' => 'ویرایش جدول',\n\t'Create table' => 'ایجاد جدول',\n\t'Table has been dropped.' => 'جدول حذف شد.',\n\t'Tables have been dropped.' => 'جدولها حذف شدند.',\n\t'Tables have been optimized.' => 'جدولها بهینه شدند.',\n\t'Table has been altered.' => 'جدول ویرایش شد.',\n\t'Table has been created.' => 'جدول ایجاد شد.',\n\t'Table name' => 'نام جدول',\n\t'Show structure' => 'نمایش ساختار',\n\t'engine' => 'موتور',\n\t'collation' => 'تطبیق',\n\t'Column name' => 'نام ستون',\n\t'Type' => 'نوع',\n\t'Length' => 'طول',\n\t'Auto Increment' => 'افزایش خودکار',\n\t'Options' => 'اختیارات',\n\t'Comment' => 'توضیح',\n\t'Default value' => 'مقدار پیش فرض',\n\t'Default values' => 'مقادیر پیش فرض',\n\t'Drop' => 'حذف',\n\t'Are you sure?' => 'مطمئن هستید؟',\n\t'Size' => 'حجم',\n\t'Compute' => 'محاسبه',\n\t'Move up' => 'انتقال به بالا',\n\t'Move down' => 'انتقال به پایین',\n\t'Remove' => 'حذف',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'حداکثر تعداد فیلدهای مجاز اشباع شد. لطفا %s را افزایش دهید.',\n\n\t'Partition by' => 'بخشبندی توسط',\n\t'Partitions' => 'بخشبندیها',\n\t'Partition name' => 'نام بخش',\n\t'Values' => 'مقادیر',\n\n\t'View' => 'نمایش',\n\t'Materialized view' => 'نمایه مادی',\n\t'View has been dropped.' => 'نمایش حذف شد.',\n\t'View has been altered.' => 'نمایش ویرایش شد.',\n\t'View has been created.' => 'نمایش ایجاد شد.',\n\t'Alter view' => 'حذف نمایش',\n\t'Create view' => 'ایجاد نمایش',\n\n\t'Indexes' => 'ایندکسها',\n\t'Indexes have been altered.' => 'ایندکسها ویرایش شدند.',\n\t'Alter indexes' => 'ویرایش ایندکسها',\n\t'Add next' => 'افرودن بعدی',\n\t'Index Type' => 'نوع ایندکس',\n\t'length' => 'طول',\n\n\t'Foreign keys' => 'کلیدهای خارجی',\n\t'Foreign key' => 'کلید خارجی',\n\t'Foreign key has been dropped.' => 'کلید خارجی حذف شد.',\n\t'Foreign key has been altered.' => 'کلید خارجی ویرایش شد.',\n\t'Foreign key has been created.' => 'کلید خارجی ایجاد شد.',\n\t'Target table' => 'جدول هدف',\n\t'Change' => 'تغییر',\n\t'Source' => 'منبع',\n\t'Target' => 'هدف',\n\t'Add column' => 'افزودن ستون',\n\t'Alter' => 'ویرایش',\n\t'Add foreign key' => 'افزودن کلید خارجی',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند.',\n\n\t'Triggers' => 'تریگرها',\n\t'Add trigger' => 'افزودن تریگر',\n\t'Trigger has been dropped.' => 'تریگر حذف شد.',\n\t'Trigger has been altered.' => 'تریگر ویرایش شد.',\n\t'Trigger has been created.' => 'تریگر ایجاد شد.',\n\t'Alter trigger' => 'ویرایش تریگر',\n\t'Create trigger' => 'ایجاد تریگر',\n\t'Time' => 'زمان',\n\t'Event' => 'رویداد',\n\t'Name' => 'نام',\n\n\t'select' => 'انتخاب',\n\t'Select' => 'انتخاب',\n\t'Select data' => 'انتخاب داده',\n\t'Functions' => 'توابع',\n\t'Aggregation' => 'تجمع',\n\t'Search' => 'جستجو',\n\t'anywhere' => 'هرکجا',\n\t'Search data in tables' => 'جستجوی داده در جدول',\n\t'Sort' => 'مرتب کردن',\n\t'descending' => 'نزولی',\n\t'Limit' => 'محدودیت',\n\t'Limit rows' => 'محدودیت سطرها',\n\t'Text length' => 'طول متن',\n\t'Action' => 'عملیات',\n\t'Full table scan' => 'اسکن کامل جدول',\n\t'Unable to select the table' => 'قادر به انتخاب جدول نیستید',\n\t'No rows.' => 'سطری وجود ندارد.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d سطر', '%d سطر'),\n\t'Page' => 'صفحه',\n\t'last' => 'آخری',\n\t'Load more data' => 'بارگزاری اطلاعات بیشتر',\n\t'Loading' => 'در حال بارگزاری',\n\t'Whole result' => 'همه نتایج',\n\t'%d byte(s)' => array('%d بایت', '%d بایت'),\n\n\t'Import' => 'وارد کردن',\n\t'%d row(s) have been imported.' => array('%d سطر وارد شد.', '%d سطر وارد شد.'),\n\t'File must be in UTF-8 encoding.' => 'فرمت فایل باید UTF-8 باشید.',\n\n\t// in-place editing in select\n\t'Modify' => 'ویرایش',\n\t'Ctrl+click on a value to modify it.' => 'برای ویرایش بر روی مقدار ctrl+click کنید.',\n\t'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => '%s آیتم درج شد.',\n\t'Item has been deleted.' => 'آیتم حذف شد.',\n\t'Item has been updated.' => 'آیتم بروز رسانی شد.',\n\t'%d item(s) have been affected.' => array('%d آیتم متاثر شد.', '%d آیتم متاثر شد.'),\n\t'New item' => 'آیتم جدید',\n\t'original' => 'اصلی',\n\t// label for value '' in enum data type\n\t'empty' => 'خالی',\n\t'edit' => 'ویرایش',\n\t'Edit' => 'ویرایش',\n\t'Insert' => 'درج',\n\t'Save' => 'ذخیره',\n\t'Save and continue edit' => 'ذخیره و ادامه ویرایش',\n\t'Save and insert next' => 'ذخیره و درج بعدی',\n\t'Selected' => 'انتخاب شده',\n\t'Clone' => 'تکثیر',\n\t'Delete' => 'حذف',\n\t'You have no privileges to update this table.' => 'شما اختیار ویرایش این جدول را ندارید.',\n\n\t// data type descriptions\n\t'Numbers' => 'اعداد',\n\t'Date and time' => 'تاریخ و زمان',\n\t'Strings' => 'رشته ها',\n\t'Binary' => 'دودویی',\n\t'Lists' => 'لیستها',\n\t'Network' => 'شبکه',\n\t'Geometry' => 'هندسه',\n\t'Relations' => 'رابطه ها',\n\n\t'Editor' => 'ویرایشگر',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'اکنون',\n\t'yes' => 'بله',\n\t'no' => 'خیر',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'فایل موجود است.',\n\t'Please use one of the extensions %s.' => 'لطفا یکی از پسوندها را انتخاب نمائید %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'ویرایش ساختار',\n\t'Create schema' => 'ایجاد ساختار',\n\t'Schema has been dropped.' => 'ساختار حذف شد.',\n\t'Schema has been created.' => 'ساختار ایجاد شد.',\n\t'Schema has been altered.' => 'ساختار ویرایش شد.',\n\t'Schema' => 'ساختار',\n\t'Invalid schema.' => 'ساختار نامعتبر.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'صف ها',\n\t'Create sequence' => 'ایجاد صف',\n\t'Sequence has been dropped.' => 'صف حذف شد.',\n\t'Sequence has been created.' => 'صف ایجاد شد.',\n\t'Sequence has been altered.' => 'صف ویرایش شد.',\n\t'Alter sequence' => 'ویرایش صف',\n\n\t// PostgreSQL user types support\n\t'User types' => 'انواع کاربر',\n\t'Create type' => 'ایجاد نوع',\n\t'Type has been dropped.' => 'نوع حذف شد.',\n\t'Type has been created.' => 'نوع ایجاد شد.',\n\t'Alter type' => 'ویرایش نوع',\n);\n\n// run `php ../../lang.php fa` to update this file\n"
  },
  {
    "path": "adminer/lang/fi.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Järjestelmä',\n\t'Server' => 'Palvelin',\n\t'Username' => 'Käyttäjänimi',\n\t'Password' => 'Salasana',\n\t'Permanent login' => 'Haluan pysyä kirjautuneena',\n\t'Login' => 'Kirjaudu',\n\t'Logout' => 'Kirjaudu ulos',\n\t'Logged as: %s' => 'Olet kirjautunut käyttäjänä: %s',\n\t'Logout successful.' => 'Uloskirjautuminen onnistui.',\n\t'Invalid credentials.' => 'Virheelliset kirjautumistiedot.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.', 'Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Master-salasana ei ole enää voimassa. <a href=\"https://www.adminer.org/en/extension/\"%s>Toteuta</a> %s-metodi sen tekemiseksi pysyväksi.',\n\t'Language' => 'Kieli',\n\t'Invalid CSRF token. Send the form again.' => 'Virheellinen CSRF-vastamerkki. Lähetä lomake uudelleen.',\n\t'If you did not send this request from Adminer then close this page.' => 'Jollet lähettänyt tämä pyyntö Adminerista, sulje tämä sivu.',\n\t'No extension' => 'Ei laajennusta',\n\t'None of the supported PHP extensions (%s) are available.' => 'Mitään tuetuista PHP-laajennuksista (%s) ei ole käytettävissä.',\n\t'Session support must be enabled.' => 'Istuntotuki on oltava päällä.',\n\t'Session expired, please login again.' => 'Istunto vanhentunut, kirjaudu uudelleen.',\n\t'%s version: %s through PHP extension %s' => '%s versio: %s PHP-laajennuksella %s',\n\t'Refresh' => 'Virkistä',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Oikeudet',\n\t'Create user' => 'Luo käyttäjä',\n\t'User has been dropped.' => 'Käyttäjä poistettiin.',\n\t'User has been altered.' => 'Käyttäjää muutettiin.',\n\t'User has been created.' => 'Käyttäjä luotiin.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Sarake',\n\t'Routine' => 'Rutiini',\n\t'Grant' => 'Myönnä',\n\t'Revoke' => 'Kiellä',\n\n\t'Process list' => 'Prosessilista',\n\t'%d process(es) have been killed.' => array('%d prosessi lopetettu.', '%d prosessia lopetettu..'),\n\t'Kill' => 'Lopeta',\n\n\t'Variables' => 'Muuttujat',\n\t'Status' => 'Tila',\n\n\t'SQL command' => 'SQL-komento',\n\t'%d query(s) executed OK.' => array('%d kysely onnistui.', '%d kyselyä onnistui.'),\n\t'Query executed OK, %d row(s) affected.' => array('Kysely onnistui, kohdistui %d riviin.', 'Kysely onnistui, kohdistui %d riviin.'),\n\t'No commands to execute.' => 'Ei komentoja suoritettavana.',\n\t'Error in query' => 'Virhe kyselyssä',\n\t'Execute' => 'Suorita',\n\t'Stop on error' => 'Pysähdy virheeseen',\n\t'Show only errors' => 'Näytä vain virheet',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historia',\n\t'Clear' => 'Tyhjennä',\n\t'Edit all' => 'Muokkaa kaikkia',\n\n\t'File upload' => 'Tiedoston lataus palvelimelle',\n\t'From server' => 'Verkkopalvelimella Adminer-kansiossa oleva tiedosto',\n\t'Webserver file %s' => 'Verkkopalvelintiedosto %s',\n\t'Run file' => 'Suorita tämä',\n\t'File does not exist.' => 'Tiedostoa ei ole.',\n\t'File uploads are disabled.' => 'Tiedostojen lataaminen palvelimelle on estetty.',\n\t'Unable to upload a file.' => 'Tiedostoa ei voida ladata palvelimelle.',\n\t'Maximum allowed file size is %sB.' => 'Suurin sallittu tiedostokoko on %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Liian suuri POST-datamäärä. Pienennä dataa tai kasvata arvoa %s konfigurointitiedostossa.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Voit ladata suuren SQL-tiedoston FTP:n kautta ja tuoda sen sitten palvelimelta.',\n\t'You are offline.' => 'Olet offline-tilassa.',\n\n\t'Export' => 'Vienti',\n\t'Output' => 'Tulos',\n\t'open' => 'avaa',\n\t'save' => 'tallenna',\n\t'Saving' => 'Tallennetaan',\n\t'Format' => 'Muoto',\n\t'Data' => 'Data',\n\n\t'Database' => 'Tietokanta',\n\t'Use' => 'Käytä',\n\t'Select database' => 'Valitse tietokanta',\n\t'Invalid database.' => 'Tietokanta ei kelpaa.',\n\t'Database has been dropped.' => 'Tietokanta on poistettu.',\n\t'Databases have been dropped.' => 'Tietokannat on poistettu.',\n\t'Database has been created.' => 'Tietokanta on luotu.',\n\t'Database has been renamed.' => 'Tietokanta on nimetty uudelleen.',\n\t'Database has been altered.' => 'Tietokantaa on muutettu.',\n\t'Alter database' => 'Muuta tietokantaa',\n\t'Create database' => 'Luo tietokanta',\n\t'Database schema' => 'Tietokantakaava',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Pysyvä linkki',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Moottori',\n\t'Collation' => 'Kollaatio',\n\t'Data Length' => 'Datan pituus',\n\t'Index Length' => 'Indeksin pituus',\n\t'Data Free' => 'Vapaa tila',\n\t'Rows' => 'Riviä',\n\t'%d in total' => '%d kaikkiaan',\n\t'Analyze' => 'Analysoi',\n\t'Optimize' => 'Optimoi',\n\t'Vacuum' => 'Siivoa',\n\t'Check' => 'Tarkista',\n\t'Repair' => 'Korjaa',\n\t'Truncate' => 'Tyhjennä',\n\t'Tables have been truncated.' => 'Taulujen sisältö on tyhjennetty.',\n\t'Move to other database' => 'Siirrä toiseen tietokantaan',\n\t'Move' => 'Siirrä',\n\t'Tables have been moved.' => 'Taulut on siirretty.',\n\t'Copy' => 'Kopioi',\n\t'Tables have been copied.' => 'Taulut on kopioitu.',\n\n\t'Routines' => 'Rutiinit',\n\t'Routine has been called, %d row(s) affected.' => array('Rutiini kutsuttu, kohdistui %d riviin.', 'Rutiini kutsuttu, kohdistui %d riviin.'),\n\t'Call' => 'Kutsua',\n\t'Parameter name' => 'Parametrin nimi',\n\t'Create procedure' => 'Luo proseduuri',\n\t'Create function' => 'Luo funktio',\n\t'Routine has been dropped.' => 'Rutiini on poistettu.',\n\t'Routine has been altered.' => 'Rutiinia on muutettu.',\n\t'Routine has been created.' => 'Rutiini on luotu.',\n\t'Alter function' => 'Muuta funktiota',\n\t'Alter procedure' => 'Muuta proseduuria',\n\t'Return type' => 'Palautustyyppi',\n\n\t'Events' => 'Tapahtumat',\n\t'Event has been dropped.' => 'Tapahtuma on poistettu.',\n\t'Event has been altered.' => 'Tapahtumaa on muutettu.',\n\t'Event has been created.' => 'Tapahtuma on luotu.',\n\t'Alter event' => 'Muuta tapahtumaa',\n\t'Create event' => 'Luo tapahtuma',\n\t'At given time' => 'Tiettynä aikana',\n\t'Every' => 'Joka',\n\t'Schedule' => 'Aikataulu',\n\t'Start' => 'Aloitus',\n\t'End' => 'Lopetus',\n\t'On completion preserve' => 'Säilytä, kun valmis',\n\n\t'Tables' => 'Taulut',\n\t'Tables and views' => 'Taulut ja näkymät',\n\t'Table' => 'Taulu',\n\t'No tables.' => 'Ei tauluja.',\n\t'Alter table' => 'Muuta taulua',\n\t'Create table' => 'Luo taulu',\n\t'Table has been dropped.' => 'Taulu on poistettu.',\n\t'Tables have been dropped.' => 'Tauluja on poistettu.',\n\t'Tables have been optimized.' => 'Taulut on optimoitu.',\n\t'Table has been altered.' => 'Taulua on muutettu.',\n\t'Table has been created.' => 'Taulu on luotu.',\n\t'Table name' => 'Taulun nimi',\n\t'Show structure' => 'Näytä rakenne',\n\t'engine' => 'moottori',\n\t'collation' => 'kollaatio',\n\t'Column name' => 'Sarakkeen nimi',\n\t'Type' => 'Tyyppi',\n\t'Length' => 'Pituus',\n\t'Auto Increment' => 'Automaattinen lisäys',\n\t'Options' => 'Asetukset',\n\t'Comment' => 'Kommentit',\n\t'Default value' => 'Oletusarvo',\n\t'Default values' => 'Oletusarvot',\n\t'Drop' => 'Poista',\n\t'Are you sure?' => 'Oletko varma?',\n\t'Size' => 'Koko',\n\t'Compute' => 'Laske',\n\t'Move up' => 'Siirrä ylös',\n\t'Move down' => 'Siirrä alas',\n\t'Remove' => 'Poista',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Kenttien sallittu enimmäismäärä ylitetty. Kasvata arvoa %s.',\n\n\t'Partition by' => 'Osioi arvolla',\n\t'Partitions' => 'Osiot',\n\t'Partition name' => 'Osion nimi',\n\t'Values' => 'Arvot',\n\n\t'View' => 'Näkymä',\n\t'Materialized view' => 'Materialisoitunut näkymä',\n\t'View has been dropped.' => 'Näkymä on poistettu.',\n\t'View has been altered.' => 'Näkymää on muutettu.',\n\t'View has been created.' => 'Näkymä on luotu.',\n\t'Alter view' => 'Muuta näkymää',\n\t'Create view' => 'Luo näkymä',\n\n\t'Indexes' => 'Indeksit',\n\t'Indexes have been altered.' => 'Indeksejä on muutettu.',\n\t'Alter indexes' => 'Muuta indeksejä',\n\t'Add next' => 'Lisää seuraava',\n\t'Index Type' => 'Indeksityyppi',\n\t'length' => 'pituus',\n\n\t'Foreign keys' => 'Vieraat avaimet',\n\t'Foreign key' => 'Vieras avain',\n\t'Foreign key has been dropped.' => 'Vieras avain on poistettu.',\n\t'Foreign key has been altered.' => 'Vierasta avainta on muutettu.',\n\t'Foreign key has been created.' => 'Vieras avain on luotu.',\n\t'Target table' => 'Kohdetaulu',\n\t'Change' => 'Muuta',\n\t'Source' => 'Lähde',\n\t'Target' => 'Kohde',\n\t'Add column' => 'Lisää sarake',\n\t'Alter' => 'Muuta',\n\t'Add foreign key' => 'Lisää vieras avain',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lähde- ja kohdesarakkeiden tulee olla samaa tietotyyppiä, kohdesarakkeisiin tulee olla indeksi ja dataa, johon viitataan, täytyy olla.',\n\n\t'Triggers' => 'Liipaisimet',\n\t'Add trigger' => 'Lisää liipaisin',\n\t'Trigger has been dropped.' => 'Liipaisin on poistettu.',\n\t'Trigger has been altered.' => 'Liipaisinta on muutettu.',\n\t'Trigger has been created.' => 'Liipaisin on luotu.',\n\t'Alter trigger' => 'Muuta liipaisinta',\n\t'Create trigger' => 'Luo liipaisin',\n\t'Time' => 'Aika',\n\t'Event' => 'Tapahtuma',\n\t'Name' => 'Nimi',\n\n\t'select' => 'valitse',\n\t'Select' => 'Valitse',\n\t'Select data' => 'Valitse data',\n\t'Functions' => 'Funktiot',\n\t'Aggregation' => 'Aggregaatiot',\n\t'Search' => 'Hae',\n\t'anywhere' => 'kaikkialta',\n\t'Search data in tables' => 'Hae dataa tauluista',\n\t'Sort' => 'Lajittele',\n\t'descending' => 'alenevasti',\n\t'Limit' => 'Raja',\n\t'Limit rows' => 'Rajoita rivimäärää',\n\t'Text length' => 'Tekstin pituus',\n\t'Action' => 'Toimenpide',\n\t'Full table scan' => 'Koko taulun läpikäynti',\n\t'Unable to select the table' => 'Taulua ei voitu valita',\n\t'No rows.' => 'Ei rivejä.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d rivi', '%d riviä'),\n\t'Page' => 'Sivu',\n\t'last' => 'viimeinen',\n\t'Load more data' => 'Lataa lisää dataa',\n\t'Loading' => 'Ladataan',\n\t'Whole result' => 'Koko tulos',\n\t'%d byte(s)' => array('%d tavu', '%d tavua'),\n\n\t'Import' => 'Tuonti',\n\t'%d row(s) have been imported.' => array('%d rivi tuotiin.', '%d riviä tuotiin.'),\n\t'File must be in UTF-8 encoding.' => 'Tiedoston täytyy olla UTF-8-muodossa.',\n\n\t// in-place editing in select\n\t'Modify' => 'Muuta',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+napsauta arvoa muuttaaksesi.',\n\t'Use edit link to modify this value.' => 'Käytä muokkaa-linkkiä muuttaaksesi tätä arvoa.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Tietue%s lisättiin.',\n\t'Item has been deleted.' => 'Tietue poistettiin.',\n\t'Item has been updated.' => 'Tietue päivitettiin.',\n\t'%d item(s) have been affected.' => array('Kohdistui %d tietueeseen.', 'Kohdistui %d tietueeseen.'),\n\t'New item' => 'Uusi tietue',\n\t'original' => 'alkuperäinen',\n\t// label for value '' in enum data type\n\t'empty' => 'tyhjä',\n\t'edit' => 'muokkaa',\n\t'Edit' => 'Muokkaa',\n\t'Insert' => 'Lisää',\n\t'Save' => 'Tallenna',\n\t'Save and continue edit' => 'Tallenna ja jatka muokkaamista',\n\t'Save and insert next' => 'Tallenna ja lisää seuraava',\n\t'Selected' => 'Valitut',\n\t'Clone' => 'Kloonaa',\n\t'Delete' => 'Poista',\n\t'You have no privileges to update this table.' => 'Sinulla ei ole oikeutta päivittää tätä taulua.',\n\n\t// data type descriptions\n\t'Numbers' => 'Numerot',\n\t'Date and time' => 'Päiväys ja aika',\n\t'Strings' => 'Merkkijonot',\n\t'Binary' => 'Binäärinen',\n\t'Lists' => 'Luettelot',\n\t'Network' => 'Verkko',\n\t'Geometry' => 'Geometria',\n\t'Relations' => 'Suhteet',\n\n\t'Editor' => 'Editori',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5.$3.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'pp.kk.[vvvv]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'nyt',\n\t'yes' => 'kyllä',\n\t'no' => 'ei',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Tiedosto on olemassa.',\n\t'Please use one of the extensions %s.' => 'Käytä jotain %s-laajennuksista.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Muuta kaavaa',\n\t'Create schema' => 'Luo kaava',\n\t'Schema has been dropped.' => 'Kaava poistettiin.',\n\t'Schema has been created.' => 'Kaava luotiin.',\n\t'Schema has been altered.' => 'Kaavaa muutettiin.',\n\t'Schema' => 'Kaava',\n\t'Invalid schema.' => 'Kaava ei kelpaa.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Sekvenssit',\n\t'Create sequence' => 'Luo sekvenssi',\n\t'Sequence has been dropped.' => 'Sekvenssi on poistettu.',\n\t'Sequence has been created.' => 'Sekvenssi on luotu.',\n\t'Sequence has been altered.' => 'Sekvenssiä on muutettu.',\n\t'Alter sequence' => 'Muuta sekvenssiä',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Käyttäjän tyypit',\n\t'Create type' => 'Luo tyyppi',\n\t'Type has been dropped.' => 'Tyyppi poistettiin.',\n\t'Type has been created.' => 'Tyyppi luotiin.',\n\t'Alter type' => 'Muuta tyyppiä',\n\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Kiitos, kun käytät Admineriä, voit <a href=\"https://www.adminer.org/en/donation/\">tehdä lahjoituksen tästä</a>.',\n\t'Drop %s?' => 'Poistetaanko %s?',\n\t'overwrite' => 'kirjoittaen päälle',\n\t'DB' => 'TK',\n\t'ATTACH queries are not supported.' => 'ATTACH-komennolla tehtyjä kyselyjä ei tueta.',\n\t'Warnings' => 'Varoitukset',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer ei tue pääsyä tietokantaan ilman salasanaa, katso tarkemmin <a href=\"https://www.adminer.org/en/password/\"%s>täältä</a>.',\n\t'The action will be performed after successful login with the same credentials.' => 'Toiminto suoritetaan sen jälkeen, kun on onnistuttu kirjautumaan samoilla käyttäjätunnuksilla uudestaan.',\n\t'Connecting to privileged ports is not allowed.' => 'Yhteydet etuoikeutettuihin portteihin eivät ole sallittuja.',\n\t'There is a space in the input password which might be the cause.' => 'Syynä voi olla syötetyssä salasanassa oleva välilyönti.',\n\t'Unknown error.' => 'Tuntematon virhe.',\n\t'Database does not support password.' => 'Tietokanta ei tue salasanaa.',\n\t'Disable %s or enable %s or %s extensions.' => 'Poista käytöstä %s tai ota käyttöön laajennus %s tai %s.',\n);\n\n// run `php ../../lang.php fi` to update this file\n"
  },
  {
    "path": "adminer/lang/fr.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Authentification',\n\t'Logout successful.' => 'Au revoir !',\n\t'Invalid credentials.' => 'Authentification échouée.',\n\t'Server' => 'Serveur',\n\t'Username' => 'Utilisateur',\n\t'Password' => 'Mot de passe',\n\t'Select database' => 'Sélectionner la base de données',\n\t'Invalid database.' => 'Base de données invalide.',\n\t'Table has been dropped.' => 'La table a été effacée.',\n\t'Table has been altered.' => 'La table a été modifiée.',\n\t'Table has been created.' => 'La table a été créée.',\n\t'Alter table' => 'Modifier la table',\n\t'Create table' => 'Créer une table',\n\t'Table name' => 'Nom de la table',\n\t'engine' => 'moteur',\n\t'collation' => 'interclassement',\n\t'Column name' => 'Nom de la colonne',\n\t'Type' => 'Type',\n\t'Length' => 'Longueur',\n\t'Auto Increment' => 'Incrément automatique',\n\t'Options' => 'Options',\n\t'Save' => 'Enregistrer',\n\t'Drop' => 'Supprimer',\n\t'Database has been created.' => 'La base de données a été créée.',\n\t'Database has been renamed.' => 'La base de données a été renommée.',\n\t'Database has been altered.' => 'La base de données a été modifiée.',\n\t'Alter database' => 'Modifier la base de données',\n\t'Create database' => 'Créer une base de données',\n\t'SQL command' => 'Requête SQL',\n\t'Logout' => 'Déconnexion',\n\t'Use' => 'Utiliser',\n\t'No tables.' => 'Aucune table.',\n\t'select' => 'select',\n\t'Item has been deleted.' => 'L\\'élément a été supprimé.',\n\t'Item has been updated.' => 'L\\'élément a été modifié.',\n\t'Edit' => 'Modifier',\n\t'Insert' => 'Insérer',\n\t'Save and insert next' => 'Enr. et insérer prochain',\n\t'Delete' => 'Effacer',\n\t'Database' => 'Base de données',\n\t'Routines' => 'Routines',\n\t'Indexes have been altered.' => 'Index modifiés.',\n\t'Indexes' => 'Index',\n\t'Alter indexes' => 'Modifier les index',\n\t'Add next' => 'Ajouter le prochain',\n\t'Language' => 'Langue',\n\t'Select' => 'Sélectionner',\n\t'New item' => 'Nouvel élément',\n\t'Search' => 'Rechercher',\n\t'Sort' => 'Trier',\n\t'descending' => 'décroissant',\n\t'Limit' => 'Limite',\n\t'No rows.' => 'Aucun résultat.',\n\t'Action' => 'Action',\n\t'edit' => 'modifier',\n\t'Page' => 'Page',\n\t'Query executed OK, %d row(s) affected.' => array('Requête exécutée avec succès, %d ligne modifiée.', 'Requête exécutée avec succès, %d lignes modifiées.'),\n\t'Error in query' => 'Erreur dans la requête',\n\t'Execute' => 'Exécuter',\n\t'Table' => 'Table',\n\t'Foreign keys' => 'Clés étrangères',\n\t'Triggers' => 'Déclencheurs',\n\t'View' => 'Vue',\n\t'Unable to select the table' => 'Impossible de sélectionner la table',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez renvoyer le formulaire.',\n\t'Comment' => 'Commentaire',\n\t'Default values' => 'Valeurs par défaut',\n\t'%d byte(s)' => array('%d octet', '%d octets'),\n\t'No commands to execute.' => 'Aucune commande à exécuter.',\n\t'Unable to upload a file.' => 'Impossible d\\'importer le fichier.',\n\t'File upload' => 'Importer un fichier',\n\t'File uploads are disabled.' => 'L\\'importation de fichier est désactivée.',\n\t'Routine has been called, %d row(s) affected.' => array('La routine a été exécutée, %d ligne modifiée.', 'La routine a été exécutée, %d lignes modifiées.'),\n\t'Call' => 'Appeler',\n\t'No extension' => 'Extension introuvable',\n\t'None of the supported PHP extensions (%s) are available.' => 'Aucune des extensions PHP supportées (%s) n\\'est disponible.',\n\t'Session support must be enabled.' => 'Veuillez activer les sessions.',\n\t'Session expired, please login again.' => 'Session expirée, veuillez vous authentifier à nouveau.',\n\t'Text length' => 'Longueur du texte',\n\t'Foreign key has been dropped.' => 'La clé étrangère a été effacée.',\n\t'Foreign key has been altered.' => 'La clé étrangère a été modifiée.',\n\t'Foreign key has been created.' => 'La clé étrangère a été créée.',\n\t'Foreign key' => 'Clé étrangère',\n\t'Target table' => 'Table visée',\n\t'Change' => 'Modifier',\n\t'Source' => 'Source',\n\t'Target' => 'Cible',\n\t'Add column' => 'Ajouter une colonne',\n\t'Alter' => 'Modifier',\n\t'Add foreign key' => 'Ajouter une clé étrangère',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Type d\\'index',\n\t'length' => 'longueur',\n\t'View has been dropped.' => 'La vue a été effacée.',\n\t'View has been altered.' => 'La vue a été modifiée.',\n\t'View has been created.' => 'La vue a été créée.',\n\t'Alter view' => 'Modifier une vue',\n\t'Create view' => 'Créer une vue',\n\t'Name' => 'Nom',\n\t'Process list' => 'Liste des processus',\n\t'%d process(es) have been killed.' => array('%d processus a été arrêté.', '%d processus ont été arrêtés.'),\n\t'Kill' => 'Arrêter',\n\t'Parameter name' => 'Nom du paramètre',\n\t'Database schema' => 'Schéma de la base de données',\n\t'Create procedure' => 'Créer une procédure',\n\t'Create function' => 'Créer une fonction',\n\t'Routine has been dropped.' => 'La routine a été supprimée.',\n\t'Routine has been altered.' => 'La routine a été modifiée.',\n\t'Routine has been created.' => 'La routine a été créée.',\n\t'Alter function' => 'Modifier la fonction',\n\t'Alter procedure' => 'Modifier la procédure',\n\t'Return type' => 'Type de retour',\n\t'Add trigger' => 'Ajouter un déclencheur',\n\t'Trigger has been dropped.' => 'Le déclencheur a été supprimé.',\n\t'Trigger has been altered.' => 'Le déclencheur a été modifié.',\n\t'Trigger has been created.' => 'Le déclencheur a été créé.',\n\t'Alter trigger' => 'Modifier un déclencheur',\n\t'Create trigger' => 'Ajouter un déclencheur',\n\t'Time' => 'Temps',\n\t'Event' => 'Évènement',\n\t'%d row(s)' => array('%d ligne', '%d lignes'),\n\t'Remove' => 'Effacer',\n\t'Are you sure?' => 'Êtes-vous certain(e) ?',\n\t'Privileges' => 'Privilèges',\n\t'Create user' => 'Créer un utilisateur',\n\t'User has been dropped.' => 'L\\'utilisateur a été effacé.',\n\t'User has been altered.' => 'L\\'utilisateur a été modifié.',\n\t'User has been created.' => 'L\\'utilisateur a été créé.',\n\t'Hashed' => 'Haché',\n\t'Column' => 'Colonne',\n\t'Routine' => 'Routine',\n\t'Grant' => 'Grant',\n\t'Revoke' => 'Revoke',\n\t'%s version: %s through PHP extension %s' => 'Version de %s : %s via l\\'extension PHP %s',\n\t'Logged as: %s' => 'Authentifié en tant que : %s',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Données POST trop grandes. Réduisez la taille des données ou augmentez la valeur de %s dans la configuration de PHP.',\n\t'Move up' => 'Déplacer vers le haut',\n\t'Move down' => 'Déplacer vers le bas',\n\t'Export' => 'Exporter',\n\t'Tables' => 'Tables',\n\t'Data' => 'Données',\n\t'Output' => 'Sortie',\n\t'open' => 'ouvrir',\n\t'save' => 'enregistrer',\n\t'Format' => 'Format',\n\t'Functions' => 'Fonctions',\n\t'Aggregation' => 'Agrégation',\n\t'Event has been dropped.' => 'L\\'évènement a été supprimé.',\n\t'Event has been altered.' => 'L\\'évènement a été modifié.',\n\t'Event has been created.' => 'L\\'évènement a été créé.',\n\t'Alter event' => 'Modifier un évènement',\n\t'Create event' => 'Créer un évènement',\n\t'Start' => 'Démarrer',\n\t'End' => 'Terminer',\n\t'Every' => 'Chaque',\n\t'Status' => 'Statut',\n\t'On completion preserve' => 'Conserver quand complété',\n\t'Events' => 'Évènements',\n\t'Schedule' => 'Horaire',\n\t'At given time' => 'À un moment précis',\n\t'Save and continue edit' => 'Enr. et continuer édition',\n\t'original' => 'original',\n\t'Tables have been truncated.' => 'Les tables ont été tronquées.',\n\t'Tables have been moved.' => 'Les tables ont été déplacées.',\n\t'Tables have been dropped.' => 'Les tables ont été effacées.',\n\t'Tables and views' => 'Tables et vues',\n\t'Engine' => 'Moteur',\n\t'Collation' => 'Interclassement',\n\t'Data Length' => 'Longueur des données',\n\t'Index Length' => 'Longueur de l\\'index',\n\t'Data Free' => 'Espace inutilisé',\n\t'Rows' => 'Lignes',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'Analyser',\n\t'Optimize' => 'Optimiser',\n\t'Check' => 'Vérifier',\n\t'Repair' => 'Réparer',\n\t'Truncate' => 'Tronquer',\n\t'Move to other database' => 'Déplacer vers une autre base de données',\n\t'Move' => 'Déplacer',\n\t'%d item(s) have been affected.' => array('%d élément a été modifié.', '%d éléments ont été modifiés.'),\n\t'Whole result' => 'Résultat entier',\n\t'Clone' => 'Cloner',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Le nombre maximum de champs est dépassé. Veuillez augmenter %s.',\n\t'Partition by' => 'Partitionner par',\n\t'Partitions' => 'Partitions',\n\t'Partition name' => 'Nom de la partition',\n\t'Values' => 'Valeurs',\n\t'%d row(s) have been imported.' => array('%d ligne a été importée.', '%d lignes ont été importées.'),\n\t'anywhere' => 'n\\'importe où',\n\t'Import' => 'Importer',\n\t'Stop on error' => 'Arrêter en cas d\\'erreur',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'jj/mm/[aaaa]',\n\t'History' => 'Historique',\n\t'Variables' => 'Variables',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les colonnes de source et de destination doivent être du même type, il doit y avoir un index sur les colonnes de destination et les données référencées doivent exister.',\n\t'Relations' => 'Relations',\n\t'Run file' => 'Exécuter le fichier',\n\t'Clear' => 'Effacer',\n\t'Maximum allowed file size is %sB.' => 'La taille maximale des fichiers est de %sB.',\n\t'Numbers' => 'Nombres',\n\t'Date and time' => 'Date et heure',\n\t'Strings' => 'Chaînes',\n\t'Binary' => 'Binaires',\n\t'Lists' => 'Listes',\n\t'Editor' => 'Éditeur',\n\t'Webserver file %s' => 'Fichier %s du serveur Web',\n\t'File does not exist.' => 'Le fichier est introuvable.',\n\t'%d in total' => '%d au total',\n\t'Permanent login' => 'Authentification permanente',\n\t'Databases have been dropped.' => 'Les bases de données ont été supprimées.',\n\t'Database has been dropped.' => 'La base de données a été supprimée.',\n\t'Search data in tables' => 'Rechercher dans les tables',\n\t'Schema' => 'Schéma',\n\t'Alter schema' => 'Modifier le schéma',\n\t'Create schema' => 'Créer un schéma',\n\t'Schema has been dropped.' => 'Le schéma a été supprimé.',\n\t'Schema has been created.' => 'Le schéma a été créé.',\n\t'Schema has been altered.' => 'Le schéma a été modifié.',\n\t'Sequences' => 'Séquences',\n\t'Create sequence' => 'Créer une séquence',\n\t'Alter sequence' => 'Modifier la séquence',\n\t'Sequence has been dropped.' => 'La séquence a été supprimée.',\n\t'Sequence has been created.' => 'La séquence a été créée.',\n\t'Sequence has been altered.' => 'La séquence a été modifiée.',\n\t'User types' => 'Types utilisateur',\n\t'Create type' => 'Créer un type',\n\t'Alter type' => 'Modifier le type',\n\t'Type has been dropped.' => 'Le type a été supprimé.',\n\t'Type has been created.' => 'Le type a été créé.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+cliquez sur une valeur pour la modifier.',\n\t'Use edit link to modify this value.' => 'Utilisez le lien \\'modifier\\' pour modifier cette valeur.',\n\t'last' => 'dernière',\n\t'From server' => 'Depuis le serveur',\n\t'System' => 'Système',\n\t'Select data' => 'Afficher les données',\n\t'Show structure' => 'Afficher la structure',\n\t'empty' => 'vide',\n\t'Network' => 'Réseau',\n\t'Geometry' => 'Géométrie',\n\t'File exists.' => 'Le fichier existe.',\n\t'Item%s has been inserted.' => 'L\\'élément%s a été inséré.',\n\t'now' => 'maintenant',\n\t'%d query(s) executed OK.' => array('%d requête exécutée avec succès.', '%d requêtes exécutées avec succès.'),\n\t'Show only errors' => 'Montrer seulement les erreurs',\n\t'Refresh' => 'Rafraîchir',\n\t'Invalid schema.' => 'Schéma invalide.',\n\t'Please use one of the extensions %s.' => 'Veuillez utiliser l\\'une des extensions %s.',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Les tables ont été copiées.',\n\t'Copy' => 'Copier',\n\t'Permanent link' => 'Lien permanent',\n\t'Edit all' => 'Tout modifier',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Selected' => 'Sélectionnée(s)',\n\t'Modify' => 'Modification',\n\t'Load more data' => 'Charger plus de données',\n\t'Loading' => 'Chargement',\n\t'Tables have been optimized.' => 'Les tables ont bien été optimisées.',\n\t'Vacuum' => 'Vide',\n\t'File must be in UTF-8 encoding.' => 'Les fichiers doivent être encodés en UTF-8.',\n\t'Full table scan' => 'Scan de toute la table',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Trop de connexions échouées, essayez à nouveau dans %d minute.', 'Trop de connexions échouées, essayez à nouveau dans %d minutes.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Le mot de passe a expiré. <a href=\"https://www.adminer.org/en/extension/\"%s>Implémentez</a> la méthode %s afin de le rendre permanent.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Vous pouvez uploader un gros fichier SQL par FTP et ensuite l\\'importer depuis le serveur.',\n\t'Size' => 'Taille',\n\t'Compute' => 'Calcul',\n\t'You have no privileges to update this table.' => 'Vous n\\'avez pas les droits pour mettre à jour cette table.',\n\t'Saving' => 'Enregistrement',\n\t'yes' => 'oui',\n\t'no' => 'non',\n\t'Materialized view' => 'Vue matérialisée',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Limiter les lignes',\n\t'Default value' => 'Valeur par défaut',\n\t'If you did not send this request from Adminer then close this page.' => 'Si vous n\\'avez pas envoyé cette requête depuis Adminer, alors fermez cette page.',\n\t'You are offline.' => 'Vous êtes hors ligne.',\n\t'Drop %s?' => 'Supprimer %s?',\n\t'overwrite' => 'écraser',\n\t'DB' => 'BD',\n\t'ATTACH queries are not supported.' => 'Requêtes ATTACH ne sont pas supportées.',\n\t'Warnings' => 'Avertissements',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer ne supporte pas l\\'accès aux bases de données sans mot de passe, <a href=\"https://www.adminer.org/en/password/\"%s>plus d\\'information</a>.',\n\t'The action will be performed after successful login with the same credentials.' => 'Cette action sera exécutée après s\\'être connecté avec les mêmes données de connexion.',\n\t'Connecting to privileged ports is not allowed.' => 'La connexion aux ports privilégiés n\\'est pas autorisée.',\n\t'There is a space in the input password which might be the cause.' => 'Il y a un espace dans le mot de passe entré qui pourrait en être la cause.',\n\t'Unknown error.' => 'Erreur inconnue.',\n\t'Database does not support password.' => 'La base de données ne support pas les mots de passe.',\n\t'Disable %s or enable %s or %s extensions.' => 'Désactiver %s ou activer %s or %s extensions.',\n);\n\n// run `php ../../lang.php fr` to update this file\n"
  },
  {
    "path": "adminer/lang/gl.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Conectar',\n\t'Logout successful.' => 'Pechouse a sesión con éxito.',\n\t'Invalid credentials.' => 'Credenciais (usuario e/ou contrasinal) inválidos.',\n\t'Server' => 'Servidor',\n\t'Username' => 'Usuario',\n\t'Password' => 'Contrasinal',\n\t'Select database' => 'Seleccionar Base de datos',\n\t'Invalid database.' => 'Base de datos incorrecta.',\n\t'Table has been dropped.' => 'Eliminouse a táboa.',\n\t'Table has been altered.' => 'Modificouse a táboa.',\n\t'Table has been created.' => 'Creouse a táboa.',\n\t'Alter table' => 'Modificar táboa',\n\t'Create table' => 'Crear táboa',\n\t'Table name' => 'Nome da táboa',\n\t'engine' => 'motor',\n\t'collation' => 'xogo de caracteres (collation)',\n\t'Column name' => 'Nome da columna',\n\t'Type' => 'Tipo',\n\t'Length' => 'Lonxitude',\n\t'Auto Increment' => 'Incremento automático',\n\t'Options' => 'Opcións',\n\t'Save' => 'Gardar',\n\t'Drop' => 'Eliminar',\n\t'Database has been dropped.' => 'Eliminouse a base de datos.',\n\t'Database has been created.' => 'Creouse a base de datos.',\n\t'Database has been renamed.' => 'Renomeouse a base de datos.',\n\t'Database has been altered.' => 'Modificouse a base de datos.',\n\t'Alter database' => 'Modificar Base de datos',\n\t'Create database' => 'Crear Base de datos',\n\t'SQL command' => 'Comando SQL',\n\t'Logout' => 'Pechar sesión',\n\t'Use' => 'Usar',\n\t'No tables.' => 'Nengunha táboa.',\n\t'select' => 'selecciona',\n\t'Item has been deleted.' => 'Eliminouse o elemento.',\n\t'Item has been updated.' => 'Modificouse o elemento.',\n\t'Item%s has been inserted.' => 'Inseríuse o elemento%s.',\n\t'Edit' => 'Editar',\n\t'Insert' => 'Inserir',\n\t'Save and insert next' => 'Guardar e inserir seguinte',\n\t'Delete' => 'Borrar',\n\t'Database' => 'Base de datos',\n\t'Routines' => 'Rutinas',\n\t'Indexes have been altered.' => 'Alteráronse os índices.',\n\t'Indexes' => 'Índices',\n\t'Alter indexes' => 'Modificar índices',\n\t'Add next' => 'Engadir seguinte',\n\t'Language' => 'Lingua',\n\t'Select' => 'Seleccionar',\n\t'New item' => 'Novo elemento',\n\t'Search' => 'Buscar',\n\t'Sort' => 'Ordenar',\n\t'descending' => 'descendente',\n\t'Limit' => 'Límite',\n\t'No rows.' => 'Nengún resultado.',\n\t'Action' => 'Acción',\n\t'edit' => 'editar',\n\t'Page' => 'Páxina',\n\t'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d fila afectada.', 'Consulta executada, %d filas afectadas.'),\n\t'Error in query' => 'Erro na consulta',\n\t'Execute' => 'Executar',\n\t'Table' => 'Táboa',\n\t'Foreign keys' => 'Chaves externas',\n\t'Triggers' => 'Disparadores',\n\t'View' => 'Vista',\n\t'Unable to select the table' => 'No é posible seleccionar a táboa',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Envíe de novo os datos do formulario.',\n\t'Comment' => 'Comentario',\n\t'Default values' => 'Valores predeterminados',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Non hai comandos para executar.',\n\t'Unable to upload a file.' => 'Non é posible importar o ficheiro.',\n\t'File upload' => 'Importar ficheiro',\n\t'File uploads are disabled.' => 'Importación de ficheiros deshablilitada.',\n\t'Routine has been called, %d row(s) affected.' => array('Chamouse á rutina, %d fila afectada.', 'Chamouse á rutina, %d filas afectadas.'),\n\t'Call' => 'Chamar',\n\t'No extension' => 'Non ten extensión',\n\t'None of the supported PHP extensions (%s) are available.' => 'Ningunha das extensións PHP soportadas (%s) está dispoñible.',\n\t'Session support must be enabled.' => 'As sesións deben estar habilitadas.',\n\t'Session expired, please login again.' => 'Caducou a sesión, por favor acceda de novo.',\n\t'Text length' => 'Lonxitud do texto',\n\t'Foreign key has been dropped.' => 'Eliminouse a chave externa.',\n\t'Foreign key has been altered.' => 'Modificouse a chave externa.',\n\t'Foreign key has been created.' => 'Creouse a chave externa.',\n\t'Foreign key' => 'Chave externa',\n\t'Target table' => 'táboa de destino',\n\t'Change' => 'Cambiar',\n\t'Source' => 'Orixe',\n\t'Target' => 'Destino',\n\t'Add column' => 'Engadir columna',\n\t'Alter' => 'Modificar',\n\t'Add foreign key' => 'Engadir chave externa',\n\t'ON DELETE' => 'AO BORRAR (ON DELETE)',\n\t'ON UPDATE' => 'AO ACTUALIZAR (ON UPDATE)',\n\t'Index Type' => 'Tipo de índice',\n\t'length' => 'lonxitude',\n\t'View has been dropped.' => 'Eliminouse a vista.',\n\t'View has been altered.' => 'Modificouse a vista.',\n\t'View has been created.' => 'Creouse a vista.',\n\t'Alter view' => 'Modificar vista',\n\t'Create view' => 'Crear vista',\n\t'Name' => 'Nome',\n\t'Process list' => 'Lista de procesos',\n\t'%d process(es) have been killed.' => array('%d proceso foi detido.', '%d procesos foron detidos.'),\n\t'Kill' => 'Deter',\n\t'Parameter name' => 'Nome de Parámetro',\n\t'Database schema' => 'Esquema de base de datos',\n\t'Create procedure' => 'Crear procedemento',\n\t'Create function' => 'Crear función',\n\t'Routine has been dropped.' => 'Eliminouse o procedemento.',\n\t'Routine has been altered.' => 'Alterouse o procedemento.',\n\t'Routine has been created.' => 'Creouse o procedemento.',\n\t'Alter function' => 'Modificar Función',\n\t'Alter procedure' => 'Modificar procedemento',\n\t'Return type' => 'Tipo de valor devolto',\n\t'Add trigger' => 'Engadir disparador',\n\t'Trigger has been dropped.' => 'Eliminouse o disparador.',\n\t'Trigger has been altered.' => 'Modificouse o disparador.',\n\t'Trigger has been created.' => 'Creouse o disparador.',\n\t'Alter trigger' => 'Modificar Disparador',\n\t'Create trigger' => 'Crear Disparador',\n\t'Time' => 'Tempo',\n\t'Event' => 'Evento',\n\t'%s version: %s through PHP extension %s' => 'Versión %s: %s a través da extensión de PHP %s',\n\t'%d row(s)' => array('%d fila', '%d filas'),\n\t'Remove' => 'Eliminar',\n\t'Are you sure?' => 'Está seguro?',\n\t'Privileges' => 'Privilexios',\n\t'Create user' => 'Crear Usuario',\n\t'User has been dropped.' => 'Eliminouse o usuario.',\n\t'User has been altered.' => 'Modificouse o usuario.',\n\t'User has been created.' => 'Creouse o usuario.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Columna',\n\t'Routine' => 'Rutina',\n\t'Grant' => 'Conceder',\n\t'Revoke' => 'Revocar',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Datos POST demasiado grandes. Reduza os datos ou aumente a directiva de configuración %s.',\n\t'Logged as: %s' => 'Conectado como: %s',\n\t'Move up' => 'Mover arriba',\n\t'Move down' => 'Mover abaixo',\n\t'Functions' => 'Funcións',\n\t'Aggregation' => 'Agregados',\n\t'Export' => 'Exportar',\n\t'Output' => 'Salida',\n\t'open' => 'abrir',\n\t'save' => 'gardar',\n\t'Format' => 'Formato',\n\t'Tables' => 'Táboas',\n\t'Data' => 'Datos',\n\t'Event has been dropped.' => 'Eliminouse o evento.',\n\t'Event has been altered.' => 'Modificouse o evento.',\n\t'Event has been created.' => 'Creouse o evento.',\n\t'Alter event' => 'Modificar Evento',\n\t'Create event' => 'Crear Evento',\n\t'At given time' => 'No tempo indicado',\n\t'Every' => 'Cada',\n\t'Events' => 'Eventos',\n\t'Schedule' => 'Axenda',\n\t'Start' => 'Inicio',\n\t'End' => 'Fin',\n\t'Status' => 'Estado',\n\t'On completion preserve' => 'Ao completar manter',\n\t'Tables and views' => 'táboas e vistas',\n\t'Data Length' => 'Lonxitude de datos',\n\t'Index Length' => 'Lonxitude de índice',\n\t'Data Free' => 'Espazo dispoñible',\n\t'Collation' => 'Xogo de caracteres (collation)',\n\t'Analyze' => 'Analizar',\n\t'Optimize' => 'Optimizar',\n\t'Check' => 'Comprobar',\n\t'Repair' => 'Reparar',\n\t'Truncate' => 'Baleirar',\n\t'Tables have been truncated.' => 'Baleiráronse as táboas.',\n\t'Rows' => 'Filas',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Movéronse as táboas.',\n\t'Move to other database' => 'Mover a outra base de datos',\n\t'Move' => 'Mover',\n\t'Engine' => 'Motor',\n\t'Save and continue edit' => 'Gardar se seguir editando',\n\t'original' => 'orixinal',\n\t'Tables have been dropped.' => 'Elimináronse as táboas.',\n\t'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),\n\t'Whole result' => 'Resultado completo',\n\t'Clone' => 'Clonar',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida o número máximo de campos permitidos. Por favor aumente %s.',\n\t'Partition by' => 'Particionar por',\n\t'Partitions' => 'Particións',\n\t'Partition name' => 'Nome da Partición',\n\t'Values' => 'Valores',\n\t'%d row(s) have been imported.' => array('%d fila importada.', '%d filas importadas.'),\n\t'anywhere' => 'onde sexa',\n\t'Import' => 'Importar',\n\t'Stop on error' => 'Parar en caso de erro',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',\n\t'History' => 'Histórico',\n\t'Variables' => 'Variables',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As columnas de orixe e destino deben ser do mesmo tipo, debe existir un índice nas columnas de destino e os datos referenciados deben existir.',\n\t'Relations' => 'Relacins',\n\t'Run file' => 'Executar ficheiro',\n\t'Clear' => 'Baleirar',\n\t'Maximum allowed file size is %sB.' => 'O tamaño máximo de ficheiro permitido é de %sB.',\n\t'Numbers' => 'Números',\n\t'Date and time' => 'Data e hora',\n\t'Strings' => 'Cadea',\n\t'Binary' => 'Binario',\n\t'Lists' => 'Listas',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Ficheiro de servidor web %s',\n\t'File does not exist.' => 'O ficheiro non existe.',\n\t'%d in total' => '%d en total',\n\t'Permanent login' => 'Permanecer conectado',\n\t'Databases have been dropped.' => 'Elimináronse as bases de datos.',\n\t'Search data in tables' => 'Buscar datos en táboas',\n\t'Schema' => 'Esquema',\n\t'Alter schema' => 'Modificar esquema',\n\t'Create schema' => 'Crear esquema',\n\t'Schema has been dropped.' => 'Eliminouse o esquema.',\n\t'Schema has been created.' => 'Creouse o esquema.',\n\t'Schema has been altered.' => 'Modificouse o esquema.',\n\t'Sequences' => 'Secuencias',\n\t'Create sequence' => 'Crear secuencias',\n\t'Alter sequence' => 'Modificar secuencia',\n\t'Sequence has been dropped.' => 'Eliminouse a secuencia.',\n\t'Sequence has been created.' => 'Creouse a secuencia.',\n\t'Sequence has been altered.' => 'Modificaouse a secuencia.',\n\t'User types' => 'Tipos definidos polo usuario',\n\t'Create type' => 'Crear tipo',\n\t'Alter type' => 'Modificar tipo',\n\t'Type has been dropped.' => 'Eliminouse o tipo.',\n\t'Type has been created.' => 'Creouse o tipo.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre o valor para editalo.',\n\t'Use edit link to modify this value.' => 'Use a ligazón de edición para modificar este valor.',\n\t'last' => 'último',\n\t'From server' => 'Desde o servidor',\n\t'System' => 'Sistema',\n\t'Select data' => 'Seleccionar datos',\n\t'Show structure' => 'Amosar estructura',\n\t'empty' => 'baleiro',\n\t'Network' => 'Rede',\n\t'Geometry' => 'Xeometría',\n\t'File exists.' => 'O ficheiro xa existe.',\n\t'%d query(s) executed OK.' => array('%d consulta executada correctamente.', '%d consultas executadas correctamente.'),\n\t'Show only errors' => 'Amosar só erros',\n\t'Refresh' => 'Refrescar',\n\t'Invalid schema.' => 'Esquema inválido.',\n\t'Please use one of the extensions %s.' => 'Por favor use unha das extensións %s.',\n\t'now' => 'agora',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Copiáronse as táboas.',\n\t'Copy' => 'Copiar',\n\t'Permanent link' => 'Ligazón permanente',\n\t'Edit all' => 'Editar todo',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Tables have been optimized.' => 'Optimizáronse as táboas.',\n\t'Materialized view' => 'Vista materializada',\n\t'Vacuum' => 'Baleirar',\n\t'Selected' => 'Selección',\n\t'File must be in UTF-8 encoding.' => 'O ficheiro ten que estar codificado con UTF-8.',\n\t'Modify' => 'Modificar',\n\t'Loading' => 'Cargando',\n\t'Load more data' => 'Cargar máis datos',\n\t'%d / ' => array('%d / ','%d / '),\n\t'Limit rows' => 'Limitar filas',\n\t'Default value' => 'Valor por defecto',\n\t'Full table scan' => 'Escaneo completo da táboa',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Demasiados intentos de conexión, intentao de novo en %d minuto.', 'Demasiados intentos de conexión, intentao de novo en %d minutos.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'O contrasinal principal caducou. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementa</a> o método %s para facelo permanente.',\n\t'If you did not send this request from Adminer then close this page.' => 'Se non enviaches esta petición dende o Adminer entón pecha esta páxina.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Podes subir un ficheiro SQL de gran tamaño vía FTP e importalo dende o servidor.',\n\t'Size' => 'Tamaño',\n\t'Compute' => 'Calcular',\n\t'You are offline.' => 'Non tes conexión.',\n\t'You have no privileges to update this table.' => 'Non tes privilexios para actualizar esta táboa.',\n\t'Saving' => 'Gardando',\n\t'yes' => 'si',\n\t'no' => 'non',\n);\n\n// run `php ../../lang.php gl` to update this file\n"
  },
  {
    "path": "adminer/lang/he.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'התחברות',\n\t'Logout successful.' => 'ההתחברות הצליחה',\n\t'Invalid credentials.' => 'פרטי התחברות שגויים',\n\t'Server' => 'שרת',\n\t'Username' => 'שם משתמש',\n\t'Password' => 'סיסמה',\n\t'Select database' => 'בחר מסד נתונים',\n\t'Invalid database.' => 'מסד נתונים שגוי',\n\t'Table has been dropped.' => 'הטבלה הושלכה',\n\t'Table has been altered.' => 'הטבלה שונתה',\n\t'Table has been created.' => 'הטבלה נוצרה',\n\t'Alter table' => 'שנה טבלה',\n\t'Create table' => 'צור טבלה',\n\t'Table name' => 'שם הטבלה',\n\t'engine' => 'מנוע',\n\t'collation' => 'קולקציה',\n\t'Column name' => 'שם עמודה',\n\t'Type' => 'סוג',\n\t'Length' => 'אורך',\n\t'Auto Increment' => 'הגדלה אוטומטית',\n\t'Options' => 'אפשרויות',\n\t'Save' => 'שמור',\n\t'Drop' => 'השלך',\n\t'Database has been created.' => 'מסד הנתונים נוצר',\n\t'Database has been renamed.' => 'שם מסד הנתונים שונה',\n\t'Database has been altered.' => 'מסד הנתונים שונה',\n\t'Alter database' => 'שנה מסד נתונים',\n\t'Create database' => 'צור מסד נתונים',\n\t'SQL command' => 'שאילתת SQL',\n\t'Logout' => 'התנתק',\n\t'Use' => 'השתמש',\n\t'No tables.' => 'אין טבלאות',\n\t'select' => 'בחר',\n\t'Item has been deleted.' => 'הפריט נמחק',\n\t'Item has been updated.' => 'הפריט עודכן',\n\t'Edit' => 'ערוך',\n\t'Insert' => 'הכנס',\n\t'Save and insert next' => 'שמור והמשך להכניס',\n\t'Delete' => 'מחק',\n\t'Database' => 'מסד נתונים',\n\t'Routines' => 'רוטינות',\n\t'Indexes have been altered.' => 'האינדקסים שונו',\n\t'Indexes' => 'אינדקסים',\n\t'Alter indexes' => 'שנה אינדקסים',\n\t'Add next' => 'הוסף הבא',\n\t'Language' => 'שפה',\n\t'Select' => 'בחר',\n\t'New item' => 'פריט חדש',\n\t'Search' => 'חפש',\n\t'Sort' => 'מיין',\n\t'descending' => 'סדר הפוך',\n\t'Limit' => 'הגבל',\n\t'No rows.' => 'אין שורות',\n\t'Action' => 'פעולות',\n\t'edit' => 'ערוך',\n\t'Page' => 'עמוד',\n\t'Query executed OK, %d row(s) affected.' => 'השאילתה בוצעה כהלכה, %d שורות הושפעו',\n\t'Error in query' => 'שגיאה בשאילתה',\n\t'Execute' => 'הרץ',\n\t'Table' => 'טבלה',\n\t'Foreign keys' => 'מפתחות זרים',\n\t'Triggers' => 'מפעילים',\n\t'View' => 'הצג',\n\t'Unable to select the table' => 'בחירת הטבלה נכשלה',\n\t'Invalid CSRF token. Send the form again.' => 'כשל באבטחת נתונים, שלח טופס שוב',\n\t'Comment' => 'הערה',\n\t'Default values' => 'ערכי ברירת מחדל',\n\t'%d byte(s)' => '%d בתים',\n\t'No commands to execute.' => 'לא נמצאו פקודות להרצה',\n\t'Unable to upload a file.' => 'העלאת הקובץ נכשלה',\n\t'File upload' => 'העלה קובץ',\n\t'File uploads are disabled.' => 'העלאת קבצים מבוטלת',\n\t'Routine has been called, %d row(s) affected.' => 'הרוטינה נקראה, %d שורות הושפעו',\n\t'Call' => 'קרא',\n\t'No extension' => 'אין תוסף',\n\t'None of the supported PHP extensions (%s) are available.' => 'שום תוסף PHP (%s) זמין',\n\t'Session support must be enabled.' => 'חובה להפעיל תמיכה בסשן',\n\t'Session expired, please login again.' => 'תם זמן ההפעלה, אנא התחבר שוב',\n\t'Text length' => 'אורך הטקסט',\n\t'Foreign key has been dropped.' => 'המפתח הזר הושלך',\n\t'Foreign key has been altered.' => 'המפתח הזר שונה',\n\t'Foreign key has been created.' => 'המפתח הזר נוצר',\n\t'Foreign key' => 'מפתח זר',\n\t'Target table' => 'טבלת יעד',\n\t'Change' => 'שנה',\n\t'Source' => 'מקור',\n\t'Target' => 'יעד',\n\t'Add column' => 'הוסף עמודה',\n\t'Alter' => 'שנה',\n\t'Add foreign key' => 'הוסף מפתח זר',\n\t'ON DELETE' => 'בעת מחיקה',\n\t'ON UPDATE' => 'בעת עידכון',\n\t'Index Type' => 'סוג אינדקס',\n\t'length' => 'אורך',\n\t'View has been dropped.' => 'התצוגה הושלכה',\n\t'View has been altered.' => 'התצוגה שונתה',\n\t'View has been created.' => 'התצוגה נוצרה',\n\t'Alter view' => 'שנה תצוגה',\n\t'Create view' => 'צור תצוגה',\n\t'Name' => 'שם',\n\t'Process list' => 'רשימת תהליכים',\n\t'%d process(es) have been killed.' => '%d תהליכים חוסלו',\n\t'Kill' => 'חסל',\n\t'Parameter name' => 'שם הפרמטר',\n\t'Database schema' => 'סכמת מסד נתונים',\n\t'Create procedure' => 'צור פרוצדורה',\n\t'Create function' => 'צור פונקציה',\n\t'Routine has been dropped.' => 'הרוטינה הושלכה',\n\t'Routine has been altered.' => 'הרוטינה שונתה',\n\t'Routine has been created.' => 'הרוטינה נוצרה',\n\t'Alter function' => 'שנה פונקציה',\n\t'Alter procedure' => 'שנה פרוצדורה',\n\t'Return type' => 'סוג ערך מוחזר',\n\t'Add trigger' => 'הוסף טריגר',\n\t'Trigger has been dropped.' => 'הטריגר הושלך',\n\t'Trigger has been altered.' => 'הטריגר שונה',\n\t'Trigger has been created.' => 'הטריגר נוצר',\n\t'Alter trigger' => 'שנה טריגר',\n\t'Create trigger' => 'צור טריגר',\n\t'Time' => 'זמן',\n\t'Event' => 'אירוע',\n\t'%d row(s)' => '%d שורות',\n\t'Remove' => 'הסר',\n\t'Are you sure?' => 'האם אתה בטוח?',\n\t'Privileges' => 'פריווילגיות',\n\t'Create user' => 'צור משתמש',\n\t'User has been dropped.' => 'המשתמש הושלך',\n\t'User has been altered.' => 'המשתמש שונה',\n\t'User has been created.' => 'המשתמש נוצר',\n\t'Hashed' => 'הצפנה',\n\t'Column' => 'עמודה',\n\t'Routine' => 'רוטינה',\n\t'Grant' => 'הענק',\n\t'Revoke' => 'שלול',\n\t'%s version: %s through PHP extension %s' => '%s גרסה: %s דרך תוסף PHP %s',\n\t'Logged as: %s' => 'מחובר כ: %s',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'מידע גדול מידי נשלח ב-POST. הקטן את את המידע הוא הגדלת את הגדרות ה-%s',\n\t'Move up' => 'הזז למעלה',\n\t'Move down' => 'הזז למטה',\n\t'Export' => 'יצא',\n\t'Tables' => 'טבלאות',\n\t'Data' => 'נתונים',\n\t'Output' => 'פלט',\n\t'open' => 'פתח',\n\t'save' => 'שמור',\n\t'Format' => 'פורמט',\n\t'Functions' => 'פונקציות',\n\t'Aggregation' => 'צבירה',\n\t'Event has been dropped.' => 'האירוע הושלך',\n\t'Event has been altered.' => 'האירוע שונה',\n\t'Event has been created.' => 'האירוע נוצר',\n\t'Alter event' => 'שנה אירוע',\n\t'Create event' => 'צור אירוע',\n\t'Start' => 'התחלה',\n\t'End' => 'סיום',\n\t'Every' => 'כל',\n\t'Status' => 'סטטוס',\n\t'On completion preserve' => 'בעת סיום שמור',\n\t'Events' => 'אירועים',\n\t'Schedule' => 'תזמן',\n\t'At given time' => 'לפי זמן נתון',\n\t'Save and continue edit' => 'שמור והמשך לערוך',\n\t'original' => 'מקורי',\n\t'Tables have been truncated.' => 'הטבלה קוצרה',\n\t'Tables have been moved.' => 'הטבלה הועברה',\n\t'Tables have been dropped.' => 'הטבלה הושלכה',\n\t'Tables and views' => 'טבלאות ותצוגות',\n\t'Engine' => 'מנוע',\n\t'Collation' => 'קולקציה',\n\t'Data Length' => 'אורך נתונים',\n\t'Index Length' => 'אורך אינדקס',\n\t'Data Free' => 'נתונים משוחררים',\n\t'Rows' => 'שורות',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'נתח',\n\t'Optimize' => 'יעל',\n\t'Check' => 'בדוק',\n\t'Repair' => 'תקן',\n\t'Truncate' => 'קצר',\n\t'Move to other database' => 'העבר למסד נתונים אחר',\n\t'Move' => 'העבר',\n\t'%d item(s) have been affected.' => '%d פריטים הושפעו',\n\t'Whole result' => 'כל התוצאות',\n\t'Clone' => 'שכפל',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'הגעת למספר השדות המרבי. בבקשה הגדל את %s',\n\t'Partition by' => 'מחיצות ע\"י',\n\t'Partitions' => 'מחיצות',\n\t'Partition name' => 'שם מחיצה',\n\t'Values' => 'ערכים',\n\t'%d row(s) have been imported.' => '%d שורות יובאו',\n\t'anywhere' => 'בכל מקום',\n\t'Import' => 'יבא',\n\t'Stop on error' => 'עצור בעת שגיאה',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$1-$3-$5',\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t'History' => 'היסטוריה',\n\t'Variables' => 'משתנים',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'על עמודות המקור והיעד להיות מאותו טיפוס נתונים, חובה שיהיה אינדקס בעמודת היעד ושהמידע המתאים יהיה קיים',\n\t'Relations' => 'הקשרים',\n\t'Run file' => 'הרץ קובץ',\n\t'Clear' => 'נקה',\n\t'Maximum allowed file size is %sB.' => 'גודל מקסימלאי להעלאה: %sB',\n\t'Numbers' => 'מספרים',\n\t'Date and time' => 'תאריך ושעה',\n\t'Strings' => 'מחרוזות',\n\t'Binary' => 'בינארי',\n\t'Lists' => 'רשימות',\n\t'Editor' => 'עורך',\n\t'Webserver file %s' => 'קובץ השרת %s',\n\t'File does not exist.' => 'הקובץ אינו קיים',\n\t'%d in total' => '%d בסך הכל',\n\t'Permanent login' => 'התחבר לצמיתות',\n\t'Databases have been dropped.' => 'מסד הנתונים הושלך',\n\t'Database has been dropped.' => 'מסד הנתונים הושלך',\n\t'Search data in tables' => 'חפש מידע בטבלאות',\n\t'Schema' => 'סכמה',\n\t'Alter schema' => 'שנה סכמה',\n\t'Create schema' => 'צור סכמה',\n\t'Schema has been dropped.' => 'הסכמה הושלכה',\n\t'Schema has been created.' => 'הסכמה נוצרה',\n\t'Schema has been altered.' => 'הסכמה שונתה',\n\t'Sequences' => 'סדרות',\n\t'Create sequence' => 'צור סדרה',\n\t'Alter sequence' => 'שנה סדרה',\n\t'Sequence has been dropped.' => 'הסדרה הושלכה',\n\t'Sequence has been created.' => 'הסדרה נוצרה',\n\t'Sequence has been altered.' => 'הסדרה שונתה',\n\t'User types' => 'סוגי משתמשים',\n\t'Create type' => 'צור סוג',\n\t'Alter type' => 'שנה סוג',\n\t'Type has been dropped.' => 'הסוג הושלך',\n\t'Type has been created.' => 'הסוג נוצר',\n\t'Use edit link to modify this value.' => 'השתמש בקישור העריכה בשביל לשנות את הערך',\n\t'last' => 'אחרון',\n\t'From server' => 'משרת',\n\t'System' => 'מערכת',\n\t'Select data' => 'בחר נתונים',\n\t'Show structure' => 'הראה מבנה',\n\t'empty' => 'ריק',\n\t'Network' => 'רשת',\n\t'Geometry' => 'גיאומטריה',\n\t'File exists.' => 'קובץ קיים',\n\t'Item%s has been inserted.' => 'הפריט %s הוזן בהצלחה',\n\t'now' => 'כעת',\n\t'%d query(s) executed OK.' => '%d שאילתות בוצעו בהצלחה',\n\t'Show only errors' => 'הראה שגיאות בלבד',\n\t'Refresh' => 'רענן',\n\t'Invalid schema.' => 'סכמה שגויה',\n\t'Please use one of the extensions %s.' => 'בבקשה השתמש באחד מהתוספים %s',\n\t'ltr' => 'rtl',\n\t'Tables have been copied.' => 'הטבלה הועתקה',\n\t'Copy' => 'העתק',\n\t'Permanent link' => 'קישור סופי',\n\t'Edit all' => 'ערוך הכל',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Tables have been optimized.' => 'הטבלאות עברו אופטימיזציה',\n\t'Materialized view' => 'תצוגת מימוש ',\n\t'Vacuum' => 'וואקום',\n\t'Selected' => 'נבחרים',\n\t'Ctrl+click on a value to modify it.' => 'לחץ ctrl + לחיצת עכבר לערוך ערך זה',\n\t'File must be in UTF-8 encoding.' => 'על הקובץ להיות בקידוד utf-8',\n\t'Modify' => 'ערוך',\n\t'Loading' => 'טוען',\n\t'Load more data' => 'טען נתונים נוספים',\n\t'ATTACH queries are not supported.' => 'שאילתת ATTACH אינה נתמכת',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'הגבל שורות',\n\t'Default value' => 'ערך ברירת מחדל',\n\t'Full table scan' => 'סריקה טבלה מלאה',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href=\"https://www.adminer.org/en/donation/\">לתרום</a>',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href=\"https://www.adminer.org/en/extension/\"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',\n\t'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',\n\t'Size' => 'גודל',\n\t'Compute' => 'חישוב',\n\t'You are offline.' => 'הינך לא מקוון',\n\t'You have no privileges to update this table.' => 'אין לך ההרשאות המתאימות לעדכן טבלה זו',\n\t'Saving' => 'שומר',\n\t'yes' => 'כן',\n\t'no' => 'לא',\n);\n\n// run `php ../../lang.php he` to update this file\n"
  },
  {
    "path": "adminer/lang/hi.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'लॉगिन',\n\t'Logout successful.' => 'सफलतापूर्वक लॉगआउट हो गया।',\n\t'Invalid credentials.' => 'गलत पासवर्ड।',\n\t'Server' => 'सर्वर',\n\t'Username' => 'उपयोगकर्ता नाम',\n\t'Password' => 'पासवर्ड',\n\t'Select database' => 'डेटाबेस चुनें',\n\t'Invalid database.' => 'अमान्य डेटाबेस।',\n\t'Table has been dropped.' => 'टेबल हटा दिया गया है।',\n\t'Table has been altered.' => 'टेबल बदल दिया गया है।',\n\t'Table has been created.' => 'टेबल बनाया गया है।',\n\t'Alter table' => 'टेबल बदलें',\n\t'Create table' => 'टेबल बनाएं',\n\t'Table name' => 'टेबल का नाम',\n\t'engine' => 'इंजन',\n\t'collation' => 'कॉलेशन',\n\t'Column name' => 'कॉलम का नाम',\n\t'Type' => 'प्रकार',\n\t'Length' => 'लंबाई',\n\t'Auto Increment' => 'ऑटो इंक्रीमेंट',\n\t'Options' => 'विकल्प',\n\t'Save' => 'सहेजें',\n\t'Drop' => 'हटाएं',\n\t'Database has been dropped.' => 'डेटाबेस हटा दिया गया है।',\n\t'Database has been created.' => 'डेटाबेस बनाया गया है।',\n\t'Database has been renamed.' => 'डेटाबेस का नाम बदल दिया गया है।',\n\t'Database has been altered.' => 'डेटाबेस बदल दिया गया है।',\n\t'Alter database' => 'डेटाबेस बदलें',\n\t'Create database' => 'डेटाबेस बनाएं',\n\t'SQL command' => 'SQL कमांड',\n\t'Logout' => 'लॉगआउट',\n\t'Use' => 'उपयोग करें',\n\t'No tables.' => 'कोई टेबल नहीं।',\n\t'select' => 'चुनें',\n\t'Item has been deleted.' => 'आइटम हटा दिया गया है।',\n\t'Item has been updated.' => 'आइटम अपडेट किया गया है।',\n\t'Item%s has been inserted.' => 'आइटम%s डाला गया है।',\n\t'Edit' => 'संपादित करें',\n\t'Insert' => 'डालें',\n\t'Save and insert next' => 'सहेजें और अगला डालें',\n\t'Delete' => 'हटाएं',\n\t'Database' => 'डेटाबेस',\n\t'Routines' => 'रूटीन्स',\n\t'Indexes have been altered.' => 'इंडेक्स बदल दिए गए हैं।',\n\t'Indexes' => 'इंडेक्स',\n\t'Alter indexes' => 'इंडेक्स बदलें',\n\t'Add next' => 'अगला जोड़ें',\n\t'Language' => 'भाषा',\n\t'Select' => 'चुनें',\n\t'New item' => 'नया आइटम',\n\t'Search' => 'खोजें',\n\t'Sort' => 'क्रमबद्ध करें',\n\t'descending' => 'अवरोही',\n\t'Limit' => 'सीमा',\n\t'No rows.' => 'कोई पंक्ति नहीं।',\n\t'Action' => 'कार्रवाई',\n\t'edit' => 'संपादित करें',\n\t'Page' => 'पृष्ठ',\n\t'Query executed OK, %d row(s) affected.' => array('क्वेरी सफलतापूर्वक निष्पादित, %d पंक्ति प्रभावित।', 'क्वेरी सफलतापूर्वक निष्पादित, %d पंक्तियां प्रभावित।'),\n\t'Error in query' => 'क्वेरी में त्रुटि',\n\t'Execute' => 'निष्पादित करें',\n\t'Table' => 'टेबल',\n\t'Foreign keys' => 'फॉरेन की',\n\t'Triggers' => 'ट्रिगर्स',\n\t'View' => 'व्यू',\n\t'Unable to select the table' => 'टेबल चुनने में असमर्थ',\n\t'Invalid CSRF token. Send the form again.' => 'अमान्य CSRF टोकन। फॉर्म फिर से भेजें।',\n\t'Comment' => 'टिप्पणी',\n\t'Default values' => 'डिफ़ॉल्ट मान',\n\t'%d byte(s)' => array('%d बाइट', '%d बाइट्स'),\n\t'No commands to execute.' => 'निष्पादित करने के लिए कोई कमांड नहीं।',\n\t'Unable to upload a file.' => 'फाइल अपलोड करने में असमर्थ।',\n\t'File upload' => 'फाइल अपलोड',\n\t'File uploads are disabled.' => 'फाइल अपलोड अक्षम हैं।',\n\t'Routine has been called, %d row(s) affected.' => array('रूटीन कॉल किया गया, %d पंक्ति प्रभावित।', 'रूटीन कॉल किया गया, %d पंक्तियां प्रभावित।'),\n\t'Call' => 'कॉल',\n\t'No extension' => 'कोई एक्सटेंशन नहीं',\n\t'None of the supported PHP extensions (%s) are available.' => 'कोई समर्थित PHP एक्सटेंशन (%s) उपलब्ध नहीं है।',\n\t'Session support must be enabled.' => 'सेशन सपोर्ट सक्षम होना चाहिए।',\n\t'Session expired, please login again.' => 'सेशन समाप्त, कृपया फिर से लॉगिन करें।',\n\t'Text length' => 'टेक्स्ट लंबाई',\n\t'Foreign key has been dropped.' => 'फॉरेन की हटा दी गई है।',\n\t'Foreign key has been altered.' => 'फॉरेन की बदल दी गई है।',\n\t'Foreign key has been created.' => 'फॉरेन की बनाई गई है।',\n\t'Foreign key' => 'फॉरेन की',\n\t'Target table' => 'लक्ष्य टेबल',\n\t'Change' => 'बदलें',\n\t'Source' => 'स्रोत',\n\t'Target' => 'लक्ष्य',\n\t'Add column' => 'कॉलम जोड़ें',\n\t'Alter' => 'बदलें',\n\t'Add foreign key' => 'फॉरेन की जोड़ें',\n\t'ON DELETE' => 'ऑन डिलीट',\n\t'ON UPDATE' => 'ऑन अपडेट',\n\t'Index Type' => 'इंडेक्स प्रकार',\n\t'length' => 'लंबाई',\n\t'View has been dropped.' => 'व्यू हटा दिया गया है।',\n\t'View has been altered.' => 'व्यू बदल दिया गया है।',\n\t'View has been created.' => 'व्यू बनाया गया है।',\n\t'Alter view' => 'व्यू बदलें',\n\t'Create view' => 'व्यू बनाएं',\n\t'Name' => 'नाम',\n\t'Process list' => 'प्रक्रिया सूची',\n\t'%d process(es) have been killed.' => array('%d प्रक्रिया समाप्त की गई है।', '%d प्रक्रियाएं समाप्त की गई हैं।'),\n\t'Kill' => 'समाप्त करें',\n\t'Parameter name' => 'पैरामीटर नाम',\n\t'Database schema' => 'डेटाबेस स्कीमा',\n\t'Create procedure' => 'प्रक्रिया बनाएं',\n\t'Create function' => 'फंक्शन बनाएं',\n\t'Routine has been dropped.' => 'रूटीन हटा दिया गया है।',\n\t'Routine has been altered.' => 'रूटीन बदल दिया गया है।',\n\t'Routine has been created.' => 'रूटीन बनाया गया है।',\n\t'Alter function' => 'फंक्शन बदलें',\n\t'Alter procedure' => 'प्रक्रिया बदलें',\n\t'Return type' => 'वापसी प्रकार',\n\t'Add trigger' => 'ट्रिगर जोड़ें',\n\t'Trigger has been dropped.' => 'ट्रिगर हटा दिया गया है।',\n\t'Trigger has been altered.' => 'ट्रिगर बदल दिया गया है।',\n\t'Trigger has been created.' => 'ट्रिगर बनाया गया है।',\n\t'Alter trigger' => 'ट्रिगर बदलें',\n\t'Create trigger' => 'ट्रिगर बनाएं',\n\t'Time' => 'समय',\n\t'Event' => 'घटना',\n\t'%s version: %s through PHP extension %s' => 'संस्करण %s: %s, PHP एक्सटेंशन %s के माध्यम से',\n\t'%d row(s)' => array('%d पंक्ति', '%d पंक्तियां'),\n\t'Remove' => 'हटाएं',\n\t'Are you sure?' => 'क्या आप सुनिश्चित हैं?',\n\t'Privileges' => 'विशेषाधिकार',\n\t'Create user' => 'उपयोगकर्ता बनाएं',\n\t'User has been dropped.' => 'उपयोगकर्ता हटा दिया गया है।',\n\t'User has been altered.' => 'उपयोगकर्ता बदल दिया गया है।',\n\t'User has been created.' => 'उपयोगकर्ता बनाया गया है।',\n\t'Hashed' => 'हैश्ड',\n\t'Column' => 'कॉलम',\n\t'Routine' => 'रूटीन',\n\t'Grant' => 'अनुदान',\n\t'Revoke' => 'रद्द करें',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'बहुत बड़ा POST डेटा। डेटा कम करें या %s कॉन्फ़िगरेशन निर्देश बढ़ाएं।',\n\t'Logged as: %s' => '%s के रूप में लॉगिन',\n\t'Move up' => 'ऊपर ले जाएं',\n\t'Move down' => 'नीचे ले जाएं',\n\t'Functions' => 'फंक्शन्स',\n\t'Aggregation' => 'एग्रीगेशन',\n\t'Export' => 'निर्यात',\n\t'Output' => 'आउटपुट',\n\t'open' => 'खोलें',\n\t'save' => 'सहेजें',\n\t'Format' => 'प्रारूप',\n\t'Tables' => 'टेबल्स',\n\t'Data' => 'डेटा',\n\t'Event has been dropped.' => 'घटना हटा दी गई है।',\n\t'Event has been altered.' => 'घटना बदल दी गई है।',\n\t'Event has been created.' => 'घटना बनाई गई है।',\n\t'Alter event' => 'घटना बदलें',\n\t'Create event' => 'घटना बनाएं',\n\t'At given time' => 'निर्धारित समय पर',\n\t'Every' => 'हर',\n\t'Events' => 'घटनाएं',\n\t'Schedule' => 'अनुसूची',\n\t'Start' => 'शुरू',\n\t'End' => 'समाप्त',\n\t'Status' => 'स्थिति',\n\t'On completion preserve' => 'पूरा होने पर संरक्षित करें',\n\t'Tables and views' => 'टेबल्स और व्यूज',\n\t'Data Length' => 'डेटा लंबाई',\n\t'Index Length' => 'इंडेक्स लंबाई',\n\t'Data Free' => 'डेटा मुक्त',\n\t'Collation' => 'कॉलेशन',\n\t'Analyze' => 'विश्लेषण',\n\t'Optimize' => 'अनुकूलित',\n\t'Check' => 'जांच',\n\t'Repair' => 'मरम्मत',\n\t'Truncate' => 'ट्रंकेट',\n\t'Tables have been truncated.' => 'टेबल्स ट्रंकेट कर दिए गए हैं।',\n\t'Rows' => 'पंक्तियां',\n\t',' => ',',\n\t'0123456789' => '०१२३४५६७८९',\n\t'Tables have been moved.' => 'टेबल्स स्थानांतरित कर दिए गए हैं।',\n\t'Move to other database' => 'अन्य डेटाबेस में स्थानांतरित करें',\n\t'Move' => 'स्थानांतरित करें',\n\t'Engine' => 'इंजन',\n\t'Save and continue edit' => 'सहेजें और संपादन जारी रखें',\n\t'original' => 'मूल',\n\t'Tables have been dropped.' => 'टेबल्स हटा दिए गए हैं।',\n\t'%d item(s) have been affected.' => '%d आइटम प्रभावित हुए हैं।',\n\t'Whole result' => 'पूरा परिणाम',\n\t'Clone' => 'क्लोन',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'अनुमत फील्ड्स की अधिकतम संख्या पार हो गई। कृपया %s बढ़ाएं।',\n\t'Partition by' => 'द्वारा विभाजन',\n\t'Partitions' => 'पार्टीशन्स',\n\t'Partition name' => 'पार्टीशन नाम',\n\t'Values' => 'मान',\n\t'%d row(s) have been imported.' => array('%d पंक्ति आयात की गई है।', '%d पंक्तियां आयात की गई हैं।'),\n\t'anywhere' => 'कहीं भी',\n\t'Import' => 'आयात',\n\t'Stop on error' => 'त्रुटि पर रुकें',\n\t'%.3f s' => '%.3f सेकंड',\n\t'$1-$3-$5' => '$1-$3-$5',\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t'History' => 'इतिहास',\n\t'Variables' => 'चर',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'स्रोत और लक्ष्य कॉलम्स का डेटा प्रकार समान होना चाहिए, लक्ष्य कॉलम्स पर एक इंडेक्स होना चाहिए और संदर्भित डेटा मौजूद होना चाहिए।',\n\t'Relations' => 'संबंध',\n\t'Run file' => 'फाइल चलाएं',\n\t'Clear' => 'साफ़ करें',\n\t'Maximum allowed file size is %sB.' => 'अधिकतम अनुमत फाइल आकार %sB है।',\n\t'Numbers' => 'संख्याएं',\n\t'Date and time' => 'तिथि और समय',\n\t'Strings' => 'स्ट्रिंग्स',\n\t'Binary' => 'बाइनरी',\n\t'Lists' => 'सूचियां',\n\t'Editor' => 'संपादक',\n\t'Webserver file %s' => 'वेबसर्वर फाइल %s',\n\t'File does not exist.' => 'फाइल मौजूद नहीं है।',\n\t'%d in total' => 'कुल %d',\n\t'Permanent login' => 'स्थायी लॉगिन',\n\t'Databases have been dropped.' => 'डेटाबेस हटा दिए गए हैं।',\n\t'Search data in tables' => 'टेबल्स में डेटा खोजें',\n\t'Schema' => 'स्कीमा',\n\t'Alter schema' => 'स्कीमा बदलें',\n\t'Create schema' => 'स्कीमा बनाएं',\n\t'Schema has been dropped.' => 'स्कीमा हटा दी गई है।',\n\t'Schema has been created.' => 'स्कीमा बनाई गई है।',\n\t'Schema has been altered.' => 'स्कीमा बदल दी गई है।',\n\t'Sequences' => 'अनुक्रम',\n\t'Create sequence' => 'अनुक्रम बनाएं',\n\t'Alter sequence' => 'अनुक्रम बदलें',\n\t'Sequence has been dropped.' => 'अनुक्रम हटा दिया गया है।',\n\t'Sequence has been created.' => 'अनुक्रम बनाया गया है।',\n\t'Sequence has been altered.' => 'अनुक्रम बदल दिया गया है।',\n\t'User types' => 'उपयोगकर्ता प्रकार',\n\t'Create type' => 'प्रकार बनाएं',\n\t'Alter type' => 'प्रकार बदलें',\n\t'Type has been dropped.' => 'प्रकार हटा दिया गया है।',\n\t'Type has been created.' => 'प्रकार बनाया गया है।',\n\t'Use edit link to modify this value.' => 'इस मान को संशोधित करने के लिए संपादन लिंक का उपयोग करें।',\n\t'last' => 'अंतिम',\n\t'From server' => 'सर्वर से',\n\t'System' => 'सिस्टम',\n\t'Select data' => 'डेटा चुनें',\n\t'Show structure' => 'संरचना दिखाएं',\n\t'empty' => 'खाली',\n\t'Network' => 'नेटवर्क',\n\t'Geometry' => 'ज्यामिति',\n\t'File exists.' => 'फाइल मौजूद है।',\n\t'%d query(s) executed OK.' => array('%d क्वेरी सफलतापूर्वक निष्पादित।', '%d क्वेरीज़ सफलतापूर्वक निष्पादित।'),\n\t'Show only errors' => 'केवल त्रुटियां दिखाएं',\n\t'Refresh' => 'ताज़ा करें',\n\t'Invalid schema.' => 'अमान्य स्कीमा।',\n\t'Please use one of the extensions %s.' => 'कृपया %s एक्सटेंशन्स में से एक का उपयोग करें।',\n\t'now' => 'अब',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'टेबल्स कॉपी कर दिए गए हैं।',\n\t'Copy' => 'कॉपी',\n\t'Permanent link' => 'स्थायी लिंक',\n\t'Edit all' => 'सभी संपादित करें',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Check has been dropped.' => 'चेक हटा दिया गया है।',\n\t'Check has been altered.' => 'चेक को बदल दिया गया है।',\n\t'Check has been created.' => 'चेक बनाया गया है।',\n\t'Alter check' => 'चेक बदलें',\n\t'Create check' => 'चेक बनाएँ',\n\t'Drop %s?' => '%s हटाएँ?',\n\t'Tables have been optimized.' => 'टेबल्स को ऑप्टिमाइज़ कर दिया गया है।',\n\t'Materialized view' => 'मटेरियलाइज़्ड व्यू',\n\t'Vacuum' => 'वैक्यूम',\n\t'Selected' => 'चयनित',\n\t'overwrite' => 'ओवरराइट',\n\t'DB' => 'डेटाबेस',\n\t'Algorithm' => 'एल्गोरिदम',\n\t'Columns' => 'कॉलम',\n\t'Ctrl+click on a value to modify it.' => 'किसी मान को संशोधित करने के लिए Ctrl+क्लिक करें।',\n\t'File must be in UTF-8 encoding.' => 'फ़ाइल UTF-8 एन्कोडिंग में होनी चाहिए।',\n\t'Modify' => 'संशोधित करें',\n\t'Load more data' => 'और डेटा लोड करें',\n\t'Loading' => 'लोड हो रहा है',\n\t'ATTACH queries are not supported.' => 'संलग्न क्वेरीज़ समर्थित नहीं हैं।',\n\t'Warnings' => 'चेतावनियाँ',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'पंक्तियाँ सीमित करें',\n\t'Inherits from' => 'इनहेरिट करता है',\n\t'Checks' => 'चेक्स',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'एडमिनर बिना पासवर्ड के डेटाबेस एक्सेस करने का समर्थन नहीं करता, <a href=\"https://www.adminer.org/en/password/\"%s>अधिक जानकारी</a>।',\n\t'Default value' => 'डिफ़ॉल्ट मान',\n\t'Full table scan' => 'पूरी टेबल स्कैन',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => 'बहुत अधिक असफल लॉगिन प्रयास, %d मिनट बाद पुनः प्रयास करें।',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'एडमिनर उपयोग करने के लिए धन्यवाद, <a href=\"https://www.adminer.org/en/donation/\">दान</a> करने पर विचार करें।',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'मास्टर पासवर्ड समाप्त हो गया। इसे स्थायी बनाने के लिए %s मेथड <a href=\"https://www.adminer.org/en/extension/\"%s>इम्प्लीमेंट</a> करें।',\n\t'The action will be performed after successful login with the same credentials.' => 'यह क्रिया उसी क्रेडेंशियल्स से सफल लॉगिन के बाद की जाएगी।',\n\t'Connecting to privileged ports is not allowed.' => 'प्रिविलेज्ड पोर्ट्स से कनेक्ट करने की अनुमति नहीं है।',\n\t'There is a space in the input password which might be the cause.' => 'इनपुट पासवर्ड में एक स्पेस है जो कारण हो सकता है।',\n\t'If you did not send this request from Adminer then close this page.' => 'अगर आपने यह अनुरोध एडमिनर से नहीं भेजा है तो इस पेज को बंद करें।',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'आप एक बड़ी SQL फ़ाइल FTP के माध्यम से अपलोड कर सकते हैं और सर्वर से इम्पोर्ट कर सकते हैं।',\n\t'Size' => 'आकार',\n\t'Compute' => 'कम्प्यूट',\n\t'Loaded plugins' => 'लोडेड प्लगइन्स',\n\t'screenshot' => 'स्क्रीनशॉट',\n\t'You are offline.' => 'आप ऑफ़लाइन हैं।',\n\t'You have no privileges to update this table.' => 'आपके पास इस टेबल को अपडेट करने की अनुमति नहीं है।',\n\t'Saving' => 'सेव हो रहा है',\n\t'Unknown error.' => 'अज्ञात त्रुटि।',\n\t'%s must <a%s>return an array</a>.' => '%s को <a%s>एक ऐरे रिटर्न</a> करना चाहिए।',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>कॉन्फ़िगर</a> %s में %s।',\n\t'Disable %s or enable %s or %s extensions.' => '%s को डिसेबल करें या %s या %s एक्सटेंशन्स को एनेबल करें।',\n\t'Database does not support password.' => 'डेटाबेस पासवर्ड का समर्थन नहीं करता।',\n\t'yes' => 'हाँ',\n\t'no' => 'नहीं',\n);\n\n// run `php ../../lang.php hi` to update this file\n"
  },
  {
    "path": "adminer/lang/hr.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sustav',\n\t'Server' => 'Poslužitelj',\n\t'Username' => 'Korisničko ime',\n\t'Password' => 'Lozinka',\n\t'Permanent login' => 'Trajna prijava',\n\t'Login' => 'Prijava',\n\t'Logout' => 'Odjava',\n\t'Logged as: %s' => 'Prijavljen kao: %s',\n\t'Logout successful.' => 'Uspješna odjava.',\n\t'Invalid credentials.' => 'Neispravni podaci za prijavu.',\n\t'Language' => 'Jezik',\n\t'Invalid CSRF token. Send the form again.' => 'Nevažeći CSRF token. Pošaljite obrazac ponovo.',\n\t'No extension' => 'Nema proširenja',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nijedno od podržanih PHP proširenja (%s) nije dostupno.',\n\t'Session support must be enabled.' => 'Podrška za sesije mora biti uključena.',\n\t'Session expired, please login again.' => 'Sesija je istekla, molimo prijavite se ponovo.',\n\t'%s version: %s through PHP extension %s' => '%s verzija: %s putem PHP proširenja %s',\n\t'Refresh' => 'Osvježi',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Ovlasti',\n\t'Create user' => 'Novi korisnik',\n\t'User has been dropped.' => 'Korisnik je izbrisan.',\n\t'User has been altered.' => 'Korisnik je izmijenjen.',\n\t'User has been created.' => 'Korisnik je kreiran.',\n\t'Hashed' => 'Hashirano',\n\t'Column' => 'Stupac',\n\t'Routine' => 'Rutina',\n\t'Grant' => 'Dodijeli',\n\t'Revoke' => 'Opozovi',\n\n\t'Process list' => 'Popis procesa',\n\t'%d process(es) have been killed.' => array('%d proces je zaustavljen.', '%d procesa su zaustavljena.', '%d procesa je zaustavljeno.'),\n\t'Kill' => 'Zaustavi',\n\n\t'Variables' => 'Varijable',\n\t'Status' => 'Status',\n\n\t'SQL command' => 'SQL naredba',\n\t'%d query(s) executed OK.' => array('%d upit je uspješno izvršen.', '%d upita su uspješno izvršena.', '%d upita je uspješno izvršeno.'),\n\t'Query executed OK, %d row(s) affected.' => array('Upit je uspješno izvršen, %d redak je ažuriran.', 'Upit je uspješno izvršen, %d retka su ažurirana.', 'Upit je uspješno izvršen, %d redaka je ažurirano.'),\n\t'No commands to execute.' => 'Nema naredbi za izvršavanje.',\n\t'Error in query' => 'Greška u upitu',\n\t'Execute' => 'Izvrši',\n\t'Stop on error' => 'Zaustavi pri grešci',\n\t'Show only errors' => 'Prikaži samo greške',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Povijest',\n\t'Clear' => 'Očisti',\n\t'Edit all' => 'Uredi sve',\n\n\t'File upload' => 'Prijenos datoteke',\n\t'From server' => 'S poslužitelja',\n\t'Webserver file %s' => 'Datoteka %s s web poslužitelja',\n\t'Run file' => 'Pokreni datoteku',\n\t'File does not exist.' => 'Datoteka ne postoji.',\n\t'File uploads are disabled.' => 'Prijenos datoteka je onemogućen.',\n\t'Unable to upload a file.' => 'Prijenos datoteke nije uspio.',\n\t'Maximum allowed file size is %sB.' => 'Maksimalna dozvoljena veličina datoteke je %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliki POST podaci. Smanjite podatke ili povećajte vrijednost konfiguracijske direktive %s.',\n\n\t'Export' => 'Izvoz',\n\t'Output' => 'Ispis',\n\t'open' => 'otvori',\n\t'save' => 'spremi',\n\t'Format' => 'Format',\n\t'Data' => 'Podaci',\n\n\t'Database' => 'Baza podataka',\n\t'Use' => 'Koristi',\n\t'Select database' => 'Odaberite bazu',\n\t'Invalid database.' => 'Neispravna baza podataka.',\n\t'Database has been dropped.' => 'Baza podataka je izbrisana.',\n\t'Databases have been dropped.' => 'Baze podataka su izbrisane.',\n\t'Database has been created.' => 'Baza podataka je kreirana.',\n\t'Database has been renamed.' => 'Baza podataka je preimenovana.',\n\t'Database has been altered.' => 'Baza podataka je izmijenjena.',\n\t'Alter database' => 'Izmijeni bazu podataka',\n\t'Create database' => 'Kreiraj bazu podataka',\n\t'Database schema' => 'Shema baze podataka',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Trajna veza',\n\n\t// thousands separator - must contain single byte\n\t',' => '.',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Motor',\n\t'Collation' => 'Uspoređivanje',\n\t'Data Length' => 'Duljina podataka',\n\t'Index Length' => 'Duljina indeksa',\n\t'Data Free' => 'Slobodan prostor',\n\t'Rows' => 'Redaka',\n\t'%d in total' => 'ukupno %d',\n\t'Analyze' => 'Analiziraj',\n\t'Optimize' => 'Optimiziraj',\n\t'Check' => 'Provjeri',\n\t'Repair' => 'Popravi',\n\t'Truncate' => 'Isprazni',\n\t'Tables have been truncated.' => 'Tablice su ispražnjene.',\n\t'Move to other database' => 'Premjesti u drugu bazu podataka',\n\t'Move' => 'Premjesti',\n\t'Tables have been moved.' => 'Tablice su premještene.',\n\t'Copy' => 'Kopiraj',\n\t'Tables have been copied.' => 'Tablice su kopirane.',\n\n\t'Routines' => 'Rutine',\n\t'Routine has been called, %d row(s) affected.' => array('Rutina je pozvana, %d redak je ažuriran.', 'Rutina je pozvana, %d retka su ažurirana.', 'Rutina je pozvana, %d redaka je ažurirano.'),\n\t'Call' => 'Pozovi',\n\t'Parameter name' => 'Naziv parametra',\n\t'Create procedure' => 'Kreiraj proceduru',\n\t'Create function' => 'Kreiraj funkciju',\n\t'Routine has been dropped.' => 'Rutina je izbrisana.',\n\t'Routine has been altered.' => 'Rutina je izmijenjena.',\n\t'Routine has been created.' => 'Rutina je kreirana.',\n\t'Alter function' => 'Izmijeni funkciju',\n\t'Alter procedure' => 'Izmijeni proceduru',\n\t'Return type' => 'Tip povratne vrijednosti',\n\n\t'Events' => 'Događaji',\n\t'Event has been dropped.' => 'Događaj je izbrisan.',\n\t'Event has been altered.' => 'Događaj je izmijenjen.',\n\t'Event has been created.' => 'Događaj je kreiran.',\n\t'Alter event' => 'Izmijeni događaj',\n\t'Create event' => 'Kreiraj događaj',\n\t'At given time' => 'U zadano vrijeme',\n\t'Every' => 'Svako',\n\t'Schedule' => 'Raspored',\n\t'Start' => 'Početak',\n\t'End' => 'Kraj',\n\t'On completion preserve' => 'Zadrži po završetku',\n\n\t'Tables' => 'Tablice',\n\t'Tables and views' => 'Tablice i pogledi',\n\t'Table' => 'Tablica',\n\t'No tables.' => 'Nema tablica.',\n\t'Alter table' => 'Izmijeni tablicu',\n\t'Create table' => 'Kreiraj tablicu',\n\t'Table has been dropped.' => 'Tablica je izbrisana.',\n\t'Tables have been dropped.' => 'Tablice su izbrisane.',\n\t'Tables have been optimized.' => 'Tablice su optimizirane.',\n\t'Table has been altered.' => 'Tablica je izmijenjena.',\n\t'Table has been created.' => 'Tablica je kreirana.',\n\t'Table name' => 'Naziv tablice',\n\t'Show structure' => 'Prikaži strukturu',\n\t'engine' => 'motor',\n\t'collation' => 'uspoređivanje',\n\t'Column name' => 'Naziv stupca',\n\t'Type' => 'Tip',\n\t'Length' => 'Duljina',\n\t'Auto Increment' => 'Auto-inkrement',\n\t'Options' => 'Opcije',\n\t'Comment' => 'Komentar',\n\t'Default values' => 'Zadane vrijednosti',\n\t'Drop' => 'Izbriši',\n\t'Are you sure?' => 'Jeste li sigurni?',\n\t'Move up' => 'Pomakni gore',\n\t'Move down' => 'Pomakni dolje',\n\t'Remove' => 'Ukloni',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Premašen je maksimalni broj dozvoljenih polja. Molimo povećajte %s.',\n\n\t'Partition by' => 'Particioniraj po',\n\t'Partitions' => 'Particije',\n\t'Partition name' => 'Naziv particije',\n\t'Values' => 'Vrijednosti',\n\n\t'View' => 'Pogled',\n\t'View has been dropped.' => 'Pogled je izbrisan.',\n\t'View has been altered.' => 'Pogled je izmijenjen.',\n\t'View has been created.' => 'Pogled je kreiran.',\n\t'Alter view' => 'Izmijeni pogled',\n\t'Create view' => 'Kreiraj pogled',\n\n\t'Indexes' => 'Indeksi',\n\t'Indexes have been altered.' => 'Indeksi su izmijenjeni.',\n\t'Alter indexes' => 'Izmijeni indekse',\n\t'Add next' => 'Dodaj sljedeći',\n\t'Index Type' => 'Tip indeksa',\n\t'length' => 'duljina',\n\n\t'Foreign keys' => 'Strani ključevi',\n\t'Foreign key' => 'Strani ključ',\n\t'Foreign key has been dropped.' => 'Strani ključ je izbrisan.',\n\t'Foreign key has been altered.' => 'Strani ključ je izmijenjen.',\n\t'Foreign key has been created.' => 'Strani ključ je kreiran.',\n\t'Target table' => 'Ciljna tablica',\n\t'Change' => 'Izmijeni',\n\t'Source' => 'Izvor',\n\t'Target' => 'Cilj',\n\t'Add column' => 'Dodaj stupac',\n\t'Alter' => 'Izmijeni',\n\t'Add foreign key' => 'Dodaj strani ključ',\n\t'ON DELETE' => 'ON DELETE (pri brisanju)',\n\t'ON UPDATE' => 'ON UPDATE (pri ažuriranju)',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Izvorni i ciljni stupci moraju biti istog tipa podataka, ciljni stupci moraju biti indeksirani i referencirani podaci moraju postojati.',\n\n\t'Triggers' => 'Okidači',\n\t'Add trigger' => 'Dodaj okidač',\n\t'Trigger has been dropped.' => 'Okidač je izbrisan.',\n\t'Trigger has been altered.' => 'Okidač je izmijenjen.',\n\t'Trigger has been created.' => 'Okidač je kreiran.',\n\t'Alter trigger' => 'Izmijeni okidač',\n\t'Create trigger' => 'Kreiraj okidač',\n\t'Time' => 'Vrijeme',\n\t'Event' => 'Događaj',\n\t'Name' => 'Naziv',\n\n\t'select' => 'odaberi',\n\t'Select' => 'Odaberi',\n\t'Selected' => 'Odabrano',\n\t'Select data' => 'Odaberi podatke',\n\t'Functions' => 'Funkcije',\n\t'Aggregation' => 'Agregacija',\n\t'Search' => 'Pretraži',\n\t'anywhere' => 'bilo gdje',\n\t'Search data in tables' => 'Pretraži podatke u tablicama',\n\t'Sort' => 'Sortiraj',\n\t'descending' => 'silazno',\n\t'Limit' => 'Ograničenje',\n\t'Text length' => 'Duljina teksta',\n\t'Action' => 'Radnja',\n\t'Full table scan' => 'Puno pretraživanje tablice',\n\t'Unable to select the table' => 'Nije moguće odabrati tablicu',\n\t'No rows.' => 'Nema redaka.',\n\t'%d row(s)' => array('%d redak', '%d retka', '%d redaka'),\n\t'Page' => 'Stranica',\n\t'last' => 'posljednja',\n\t'Loading' => 'Učitavanje',\n\t'Load more data' => 'Učitaj više podataka',\n\t'Whole result' => 'Cijeli skup rezultata',\n\t'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajtova'),\n\n\t'Import' => 'Uvoz',\n\t'%d row(s) have been imported.' => array('%d redak je uvezen.', '%d retka su uvezena.', '%d redaka je uvezeno.'),\n\n\t// in-place editing in select\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klik na vrijednost za izmjenu.',\n\t'Use edit link to modify this value.' => 'Koristite vezu za uređivanje ove vrijednosti.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Stavka %s je unesena.',\n\t'Item has been deleted.' => 'Stavka je izbrisana.',\n\t'Item has been updated.' => 'Stavka je ažurirana.',\n\t'%d item(s) have been affected.' => array('%d stavka je zahvaćena.', '%d stavke su zahvaćene.', '%d stavki je zahvaćeno.'),\n\t'New item' => 'Nova stavka',\n\t'original' => 'original',\n\t// label for value '' in enum data type\n\t'empty' => 'prazno',\n\t'edit' => 'uredi',\n\t'Edit' => 'Uredi',\n\t'Insert' => 'Unesi',\n\t'Save' => 'Spremi',\n\t'Save and continue edit' => 'Spremi i nastavi uređivanje',\n\t'Save and insert next' => 'Spremi i unesi sljedeće',\n\t'Clone' => 'Kloniraj',\n\t'Delete' => 'Izbriši',\n\t'Modify' => 'Izmijeni',\n\n\t// data type descriptions\n\t'Numbers' => 'Brojevi',\n\t'Date and time' => 'Datum i vrijeme',\n\t'Strings' => 'Tekst',\n\t'Binary' => 'Binarno',\n\t'Lists' => 'Liste',\n\t'Network' => 'Mreža',\n\t'Geometry' => 'Geometrija',\n\t'Relations' => 'Odnosi',\n\n\t'Editor' => 'Uređivač',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5.$3.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'dd.mm.[yyyy]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'sada',\n\t'yes' => 'da',\n\t'no' => 'ne',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Datoteka već postoji.',\n\t'Please use one of the extensions %s.' => 'Molimo koristite jedan od nastavaka %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Izmijeni shemu',\n\t'Create schema' => 'Kreiraj shemu',\n\t'Schema has been dropped.' => 'Shema je izbrisana.',\n\t'Schema has been created.' => 'Shema je kreirana.',\n\t'Schema has been altered.' => 'Shema je izmijenjena.',\n\t'Schema' => 'Shema',\n\t'Invalid schema.' => 'Neispravna shema.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Nizovi',\n\t'Create sequence' => 'Kreiraj niz',\n\t'Sequence has been dropped.' => 'Niz je izbrisan.',\n\t'Sequence has been created.' => 'Niz je kreiran.',\n\t'Sequence has been altered.' => 'Niz je izmijenjen.',\n\t'Alter sequence' => 'Izmijeni niz',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Korisnički tipovi',\n\t'Create type' => 'Kreiraj tip',\n\t'Type has been dropped.' => 'Tip je izbrisan.',\n\t'Type has been created.' => 'Tip je kreiran.',\n\t'Alter type' => 'Izmijeni tip',\n\n\t// MS SQL login\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Previše neuspješnih pokušaja prijave, pokušajte ponovo za %d minutu.', 'Previše neuspješnih pokušaja prijave, pokušajte ponovo za %d minute.', 'Previše neuspješnih pokušaja prijave, pokušajte ponovo za %d minuta.'),\n\t'Check has been dropped.' => 'Provjera je izbrisana.',\n\t'Check has been altered.' => 'Provjera je izmijenjena.',\n\t'Check has been created.' => 'Provjera je kreirana.',\n\t'Alter check' => 'Izmijeni provjeru',\n\t'Create check' => 'Kreiraj provjeru',\n\t'Drop %s?' => 'Izbrisati %s?',\n\t'Vacuum' => 'Vakuumiranje',\n\t'overwrite' => 'prepiši',\n\t'Disable %s or enable %s or %s extensions.' => 'Onemogućite %s ili omogućite %s ili %s proširenja.',\n\t'Database does not support password.' => 'Baza podataka ne podržava lozinku.',\n\t'DB' => 'BP',\n\t'hostname[:port] or :socket' => 'hostname[:port] ili :socket',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer ne podržava pristup bazi podataka bez lozinke, <a href=\"https://www.adminer.org/en/password/\"%s>više informacija</a>.',\n\t'Warnings' => 'Upozorenja',\n\t'Default value' => 'Zadana vrijednost',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Hvala što koristite Adminer, razmislite o <a href=\"https://www.adminer.org/en/donation/\">donaciji</a>.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Glavna lozinka je istekla. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementirajte</a> metodu %s kako biste je učinili trajnom.',\n\t'The action will be performed after successful login with the same credentials.' => 'Radnja će biti izvršena nakon uspješne prijave s istim podacima.',\n\t'Connecting to privileged ports is not allowed.' => 'Spajanje na privilegirane portove nije dopušteno.',\n\t'There is a space in the input password which might be the cause.' => 'U unesenoj lozinci postoji razmak koji bi mogao biti uzrok problema.',\n\t'If you did not send this request from Adminer then close this page.' => 'Ako ovaj zahtjev niste poslali iz Adminera, zatvorite ovu stranicu.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Veliku SQL datoteku možete prenijeti putem FTP-a i uvesti je s poslužitelja.',\n\t'Size' => 'Veličina',\n\t'Compute' => 'Izračunaj',\n\t'Loaded plugins' => 'Učitani dodaci',\n\t'screenshot' => 'snimka zaslona',\n\t'You are offline.' => 'Niste povezani s mrežom.',\n\t'Increase %s.' => 'Povećajte %s.',\n\t'You have no privileges to update this table.' => 'Nemate ovlasti za ažuriranje ove tablice.',\n\t'Saving' => 'Spremanje',\n\t'Unknown error.' => 'Nepoznata greška.',\n\t'%s must <a%s>return an array</a>.' => '%s mora <a%s>vratiti niz</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Konfigurirajte</a> %s u %s.',\n\t'Algorithm' => 'Algoritam',\n\t'Columns' => 'Stupci',\n\t'Condition' => 'Uvjet',\n\t'File must be in UTF-8 encoding.' => 'Datoteka mora biti u UTF-8 kodiranju.',\n\t'ATTACH queries are not supported.' => 'ATTACH upiti nisu podržani.',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Ograniči retke',\n\t'Materialized view' => 'Materijaliziran pogled',\n\t'Inherits from' => 'Nasljeđuje od',\n\t'Checks' => 'Provjere',\n\t'Inherited by' => 'Nasljeđeno od',\n);\n\n// run `php ../../lang.php hr` to update this file\n"
  },
  {
    "path": "adminer/lang/hu.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Belépés',\n\t'Logout successful.' => 'Sikeres kilépés.',\n\t'Invalid credentials.' => 'Érvénytelen adatok.',\n\t'Server' => 'Szerver',\n\t'Username' => 'Felhasználó',\n\t'Password' => 'Jelszó',\n\t'Select database' => 'Adatbázis kiválasztása',\n\t'Invalid database.' => 'Érvénytelen adatbázis.',\n\t'Table has been dropped.' => 'A tábla eldobva.',\n\t'Table has been altered.' => 'A tábla módosult.',\n\t'Table has been created.' => 'A tábla létrejött.',\n\t'Alter table' => 'Tábla módosítása',\n\t'Create table' => 'Tábla létrehozása',\n\t'Table name' => 'Tábla név',\n\t'engine' => 'motor',\n\t'collation' => 'egybevetés',\n\t'Column name' => 'Oszlop neve',\n\t'Type' => 'Típus',\n\t'Length' => 'Hossz',\n\t'Auto Increment' => 'Automatikus növelés',\n\t'Options' => 'Opciók',\n\t'Save' => 'Mentés',\n\t'Drop' => 'Eldob',\n\t'Database has been dropped.' => 'Az adatbázis eldobva.',\n\t'Database has been created.' => 'Az adatbázis létrejött.',\n\t'Database has been renamed.' => 'Az adadtbázis átnevezve.',\n\t'Database has been altered.' => 'Az adatbázis módosult.',\n\t'Alter database' => 'Adatbázis módosítása',\n\t'Create database' => 'Adatbázis létrehozása',\n\t'SQL command' => 'SQL parancs',\n\t'Logout' => 'Kilépés',\n\t'Use' => 'Használ',\n\t'No tables.' => 'Nincs tábla.',\n\t'select' => 'kiválasztás',\n\t'Item has been deleted.' => 'A tétel törölve.',\n\t'Item has been updated.' => 'A tétel frissítve.',\n\t'Item%s has been inserted.' => '%s tétel beszúrva.',\n\t'Edit' => 'Szerkeszt',\n\t'Insert' => 'Beszúr',\n\t'Save and insert next' => 'Mentés és újat beszúr',\n\t'Delete' => 'Törlés',\n\t'Database' => 'Adatbázis',\n\t'Routines' => 'Rutinok',\n\t'Indexes have been altered.' => 'Az indexek megváltoztak.',\n\t'Indexes' => 'Indexek',\n\t'Alter indexes' => 'Index módosítása',\n\t'Add next' => 'Következő hozzáadása',\n\t'Language' => 'Nyelv',\n\t'Select' => 'Kiválasztás',\n\t'New item' => 'Új tétel',\n\t'Search' => 'Keresés',\n\t'Sort' => 'Sorba rendezés',\n\t'descending' => 'csökkenő',\n\t'Limit' => 'korlát',\n\t'No rows.' => 'Nincs megjeleníthető eredmény.',\n\t'Action' => 'Művelet',\n\t'edit' => 'szerkeszt',\n\t'Page' => 'oldal',\n\t'Query executed OK, %d row(s) affected.' => array('Lekérdezés sikeresen végrehajtva, %d sor érintett.', 'Lekérdezés sikeresen végrehajtva, %d sor érintett.', 'Lekérdezés sikeresen végrehajtva, %d sor érintett.'),\n\t'Error in query' => 'Hiba a lekérdezésben',\n\t'Execute' => 'Végrehajt',\n\t'Table' => 'Tábla',\n\t'Foreign keys' => 'Idegen kulcs',\n\t'Triggers' => 'Trigger',\n\t'View' => 'Nézet',\n\t'Unable to select the table' => 'Nem tudom kiválasztani a táblát',\n\t'Invalid CSRF token. Send the form again.' => 'Érvénytelen CSRF azonosító. Küldd újra az űrlapot.',\n\t'Comment' => 'Megjegyzés',\n\t'Default values' => 'Alapértelmezett értékek',\n\t'%d byte(s)' => array('%d bájt', '%d bájt', '%d bájt'),\n\t'No commands to execute.' => 'Nincs végrehajtható parancs.',\n\t'Unable to upload a file.' => 'Nem tudom feltölteni a fájlt.',\n\t'File upload' => 'Fájl feltöltése',\n\t'File uploads are disabled.' => 'A fájl feltöltés le van tiltva.',\n\t'Routine has been called, %d row(s) affected.' => array('Rutin meghívva, %d sor érintett.', 'Rutin meghívva, %d sor érintett.', 'Rutin meghívva, %d sor érintett.'),\n\t'Call' => 'Meghív',\n\t'No extension' => 'Nincs kiterjesztés',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nincs egy elérhető támogatott PHP kiterjesztés (%s) sem.',\n\t'Session support must be enabled.' => 'A munkameneteknek (session) engedélyezve kell lennie.',\n\t'Session expired, please login again.' => 'Munkamenet lejárt, jelentkezz be újra.',\n\t'Text length' => 'Szöveg hossz',\n\t'Foreign key has been dropped.' => 'Idegen kulcs eldobva.',\n\t'Foreign key has been altered.' => 'Idegen kulcs módosult.',\n\t'Foreign key has been created.' => 'Idegen kulcs létrejött.',\n\t'Foreign key' => 'Idegen kulcs',\n\t'Target table' => 'Cél tábla',\n\t'Change' => 'Változtat',\n\t'Source' => 'Forrás',\n\t'Target' => 'Cél',\n\t'Add column' => 'Oszlop hozzáadása',\n\t'Alter' => 'Módosítás',\n\t'Add foreign key' => 'Idegen kulcs hozzadása',\n\t'ON DELETE' => 'törléskor',\n\t'ON UPDATE' => 'frissítéskor',\n\t'Index Type' => 'Index típusa',\n\t'length' => 'méret',\n\t'View has been dropped.' => 'A nézet eldobva.',\n\t'View has been altered.' => 'A nézet módosult.',\n\t'View has been created.' => 'A nézet létrejött.',\n\t'Alter view' => 'Nézet módosítása',\n\t'Create view' => 'Nézet létrehozása',\n\t'Name' => 'Név',\n\t'Process list' => 'Folyamatok',\n\t'%d process(es) have been killed.' => array('%d folyamat leállítva.', '%d folyamat leállítva.', '%d folyamat leállítva.'),\n\t'Kill' => 'Leállít',\n\t'Parameter name' => 'Paraméter neve',\n\t'Database schema' => 'Adatbázis séma',\n\t'Create procedure' => 'Eljárás létrehozása',\n\t'Create function' => 'Funkció létrehozása',\n\t'Routine has been dropped.' => 'A rutin eldobva.',\n\t'Routine has been altered.' => 'A rutin módosult.',\n\t'Routine has been created.' => 'A rutin létrejött.',\n\t'Alter function' => 'Funkció módosítása',\n\t'Alter procedure' => 'Eljárás módosítása',\n\t'Return type' => 'Visszatérési érték',\n\t'Add trigger' => 'Trigger hozzáadása',\n\t'Trigger has been dropped.' => 'A trigger eldobva.',\n\t'Trigger has been altered.' => 'A trigger módosult.',\n\t'Trigger has been created.' => 'A trigger létrejött.',\n\t'Alter trigger' => 'Trigger módosítása',\n\t'Create trigger' => 'Trigger létrehozása',\n\t'Time' => 'Idő',\n\t'Event' => 'Esemény',\n\t'%s version: %s through PHP extension %s' => '%s verzió: %s, PHP: %s',\n\t'%d row(s)' => array('%d sor', '%d sor', '%d sor'),\n\t'Remove' => 'Eltávolítás',\n\t'Are you sure?' => 'Biztos benne?',\n\t'Privileges' => 'Privilégiumok',\n\t'Create user' => 'Felhasználó hozzáadása',\n\t'User has been dropped.' => 'A felhasználó eldobva.',\n\t'User has been altered.' => 'A felhasználó módosult.',\n\t'User has been created.' => 'A felhasználó létrejött.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Oszlop',\n\t'Routine' => 'Rutin',\n\t'Grant' => 'Engedélyezés',\n\t'Revoke' => 'Visszavonás',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Túl sok a POST adat! Csökkentsd az adat méretét, vagy növeld a %s beállítást.',\n\t'Logged as: %s' => 'Belépve: %s',\n\t'Move up' => 'Felfelé',\n\t'Move down' => 'Lefelé',\n\t'Functions' => 'Funkciók',\n\t'Aggregation' => 'Aggregálás',\n\t'Export' => 'Export',\n\t'Output' => 'Kimenet',\n\t'open' => 'megnyit',\n\t'save' => 'ment',\n\t'Format' => 'Formátum',\n\t'Tables' => 'Táblák',\n\t'Data' => 'Adat',\n\t'Event has been dropped.' => 'Az esemény eldobva.',\n\t'Event has been altered.' => 'Az esemény módosult.',\n\t'Event has been created.' => 'Az esemény létrejött.',\n\t'Alter event' => 'Esemény módosítása',\n\t'Create event' => 'Esemény létrehozása',\n\t'At given time' => 'Megadott időben',\n\t'Every' => 'Minden',\n\t'Events' => 'Esemény',\n\t'Schedule' => 'Ütemzés',\n\t'Start' => 'Kezd',\n\t'End' => 'Vége',\n\t'Status' => 'Állapot',\n\t'On completion preserve' => 'Befejezéskor megőrzi',\n\t'Tables and views' => 'Táblák és nézetek',\n\t'Data Length' => 'Méret',\n\t'Index Length' => 'Index hossz',\n\t'Data Free' => 'Adat szabad',\n\t'Collation' => 'Egybevetés',\n\t'Analyze' => 'Elemzés',\n\t'Optimize' => 'Optimalizál',\n\t'Check' => 'Ellenőrzés',\n\t'Repair' => 'Javít',\n\t'Truncate' => 'Felszabadít',\n\t'Tables have been truncated.' => 'A tábla felszabadítva.',\n\t'Rows' => 'Sorok',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Táblák áthelyezve.',\n\t'Move to other database' => 'Áthelyezés másik adatbázisba',\n\t'Move' => 'Áthelyez',\n\t'Engine' => 'Motor',\n\t'Save and continue edit' => 'Mentés és szerkesztés folytatása',\n\t'original' => 'eredeti',\n\t'%d item(s) have been affected.' => array('%d tétel érintett.', '%d tétel érintett.', '%d tétel érintett.'),\n\t'Whole result' => 'Összes eredményt mutatása',\n\t'Tables have been dropped.' => 'Táblák eldobva.',\n\t'Clone' => 'Klónoz',\n\t'Partition by' => 'Particionálás ezzel',\n\t'Partitions' => 'Particiók',\n\t'Partition name' => 'Partició neve',\n\t'Values' => 'Értékek',\n\t'%d row(s) have been imported.' => array('%d sor importálva.', '%d sor importálva.', '%d sor importálva.'),\n\t'Import' => 'Importálás',\n\t'Show structure' => 'Struktúra',\n\t'Select data' => 'Tartalom',\n\t'Stop on error' => 'Hiba esetén megáll',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'A maximális mezőszámot elérted. Növeld meg ezeket: %s.',\n\t'anywhere' => 'bárhol',\n\t'%.3f s' => '%.3f másodperc',\n\t'$1-$3-$5' => '$6.$4.$1',\n\t'[yyyy]-mm-dd' => '[yyyy].m.d',\n\t'History' => 'Történet',\n\t'Variables' => 'Változók',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'A forrás és cél oszlopoknak azonos típusúak legyenek, a cél oszlopok indexeltek legyenek, és a hivatkozott adatnak léteznie kell.',\n\t'Run file' => 'Fájl futtatása',\n\t'Numbers' => 'Szám',\n\t'Date and time' => 'Dátum és idő',\n\t'Strings' => 'Szöveg',\n\t'Binary' => 'Bináris',\n\t'Lists' => 'Lista',\n\t'Relations' => 'Reláció',\n\t'Maximum allowed file size is %sB.' => 'A maximális fájlméret %s B.',\n\t'Clear' => 'Törlés',\n\t'Editor' => 'Szerkesztő',\n\t'Webserver file %s' => 'Webszerver fájl %s',\n\t'File does not exist.' => 'A fájl nem létezik.',\n\t'Permanent login' => 'Emlékezz rám',\n\t'%d in total' => 'összesen %d',\n\t'System' => 'Adatbázis',\n\t'last' => 'utolsó',\n\t'Network' => 'Hálózat',\n\t'Geometry' => 'Geometria',\n\t'Databases have been dropped.' => 'Adatbázis eldobva.',\n\t'File exists.' => 'A fájl létezik.',\n\t'Use edit link to modify this value.' => 'Használd a szerkesztés hivatkozást ezen érték módosításához.',\n\t'Alter schema' => 'Séma módosítása',\n\t'Create schema' => 'Séma létrehozása',\n\t'Schema has been dropped.' => 'Séma eldobva.',\n\t'Schema has been created.' => 'Séma létrejött.',\n\t'Schema has been altered.' => 'Séma módosult.',\n\t'Schema' => 'Séma',\n\t'Sequences' => 'Sorozatok',\n\t'Create sequence' => 'Sorozat létrehozása',\n\t'Sequence has been dropped.' => 'Sorozat eldobva.',\n\t'Sequence has been created.' => 'Sorozat létrejött.',\n\t'Sequence has been altered.' => 'Sorozat módosult.',\n\t'Alter sequence' => 'Sorozat módosítása',\n\t'User types' => 'Felhasználói típus',\n\t'Create type' => 'Típus létrehozása',\n\t'Type has been dropped.' => 'Típus eldobva.',\n\t'Type has been created.' => 'Típus létrehozva.',\n\t'Alter type' => 'Típus módosítása',\n\t'Search data in tables' => 'Keresés a táblákban',\n\t'From server' => 'Szerverről',\n\t'empty' => 'üres',\n\t'now' => 'most',\n\t'%d query(s) executed OK.' => '%d sikeres lekérdezés.',\n\t'Show only errors' => 'Csak a hibák mutatása',\n\t'Refresh' => 'Frissítés',\n\t'Invalid schema.' => 'Érvénytelen séma.',\n\t'Please use one of the extensions %s.' => 'Használja a(z) %s kiterjesztést.',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Táblák átmásolva.',\n\t'Copy' => 'Másolás',\n\t'Permanent link' => 'Hivatkozás',\n\t'Edit all' => 'Összes szerkesztése',\n\t'HH:MM:SS' => 'óó:pp:mm',\n);\n\n// run `php ../../lang.php hu` to update this file\n"
  },
  {
    "path": "adminer/lang/id.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sistem',\n\t'Server' => 'Server',\n\t'Username' => 'Pengguna',\n\t'Password' => 'Sandi',\n\t'Permanent login' => 'Masuk permanen',\n\t'Login' => 'Masuk',\n\t'Logout' => 'Keluar',\n\t'Logged as: %s' => 'Masuk sebagai: %s',\n\t'Logout successful.' => 'Berhasil keluar.',\n\t'Invalid credentials.' => 'Akses tidak sah.',\n\t'Language' => 'Bahasa',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Kirim ulang formulir.',\n\t'No extension' => 'Ekstensi tidak ada',\n\t'None of the supported PHP extensions (%s) are available.' => 'Ekstensi PHP yang didukung (%s) tidak ada.',\n\t'Session support must be enabled.' => 'Dukungan sesi harus aktif.',\n\t'Session expired, please login again.' => 'Sesi habis, silakan masuk lagi.',\n\t'%s version: %s through PHP extension %s' => 'Versi %s: %s dengan ekstensi PHP %s',\n\t'Refresh' => 'Segarkan',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Privilese',\n\t'Create user' => 'Buat pengguna',\n\t'User has been dropped.' => 'Pengguna berhasil dihapus.',\n\t'User has been altered.' => 'Pengguna berhasil diubah.',\n\t'User has been created.' => 'Pengguna berhasil dibuat.',\n\t'Hashed' => 'Hashed*',\n\t'Column' => 'Kolom',\n\t'Routine' => 'Rutin',\n\t'Grant' => 'Beri',\n\t'Revoke' => 'Tarik',\n\n\t'Process list' => 'Daftar proses',\n\t'%d process(es) have been killed.' => '%d proses berhasil dihentikan.',\n\t'Kill' => 'Hentikan',\n\n\t'Variables' => 'Variabel',\n\t'Status' => 'Status',\n\n\t'SQL command' => 'Perintah SQL',\n\t'%d query(s) executed OK.' => '%d kueri berhasil dijalankan.',\n\t'Query executed OK, %d row(s) affected.' => 'Kueri berhasil, %d baris terpengaruh.',\n\t'No commands to execute.' => 'Tidak ada perintah untuk dijalankan.',\n\t'Error in query' => 'Galat dalam kueri',\n\t'Execute' => 'Jalankan',\n\t'Stop on error' => 'Hentikan jika galat',\n\t'Show only errors' => 'Hanya tampilkan galat',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Riwayat',\n\t'Clear' => 'Bersihkan',\n\n\t'Edit all' => 'Sunting semua',\n\t'File upload' => 'Unggah berkas',\n\t'From server' => 'Dari server',\n\t'Webserver file %s' => 'Berkas server web %s',\n\t'Run file' => 'Jalankan berkas',\n\t'File does not exist.' => 'Berkas tidak ada.',\n\t'File uploads are disabled.' => 'Pengunggahan berkas dimatikan.',\n\t'Unable to upload a file.' => 'Tidak dapat mengunggah berkas.',\n\t'Maximum allowed file size is %sB.' => 'Besar berkas yang diizinkan adalah %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar direktif konfigurasi %s.',\n\n\t'Export' => 'Ekspor',\n\t'Output' => 'Hasil',\n\t'open' => 'buka',\n\t'save' => 'simpan',\n\t'Format' => 'Format',\n\t'Data' => 'Data',\n\n\t'Database' => 'Basis data',\n\t'Use' => 'Gunakan',\n\t'Select database' => 'Pilih basis data',\n\t'Invalid database.' => 'Basis data tidak sah.',\n\t'Database has been dropped.' => 'Basis data berhasil dihapus.',\n\t'Databases have been dropped.' => 'Basis data berhasil dihapus.',\n\t'Database has been created.' => 'Basis data berhasil dibuat.',\n\t'Database has been renamed.' => 'Basis data berhasil diganti namanya.',\n\t'Database has been altered.' => 'Basis data berhasil diubah.',\n\t'Alter database' => 'Ubah basis data',\n\t'Create database' => 'Buat basis data',\n\t'Database schema' => 'Skema basis data',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Pranala permanen',\n\n\t// thousands separator - must contain single byte\n\t',' => '.',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Mesin',\n\t'Collation' => 'Kolasi',\n\t'Data Length' => 'Panjang Data',\n\t'Index Length' => 'Panjang Indeks',\n\t'Data Free' => 'Data Bebas',\n\t'Rows' => 'Baris',\n\t'%d in total' => '%d total',\n\t'Analyze' => 'Analisis',\n\t'Optimize' => 'Optimalkan',\n\t'Check' => 'Periksa',\n\t'Repair' => 'Perbaiki',\n\t'Truncate' => 'Kosongkan',\n\t'Tables have been truncated.' => 'Tabel berhasil dikosongkan.',\n\t'Move to other database' => 'Pindahkan ke basis data lain',\n\t'Move' => 'Pindahkan',\n\t'Tables have been moved.' => 'Tabel berhasil dipindahkan.',\n\t'Copy' => 'Salin',\n\t'Tables have been copied.' => 'Tabel berhasil disalin.',\n\n\t'Routines' => 'Rutin',\n\t'Routine has been called, %d row(s) affected.' => 'Rutin telah dipanggil, %d baris terpengaruh.',\n\t'Call' => 'Panggilan',\n\t'Parameter name' => 'Nama parameter',\n\t'Create procedure' => 'Buat prosedur',\n\t'Create function' => 'Buat fungsi',\n\t'Routine has been dropped.' => 'Rutin berhasil dihapus.',\n\t'Routine has been altered.' => 'Rutin berhasil diubah.',\n\t'Routine has been created.' => 'Rutin berhasil dibuat.',\n\t'Alter function' => 'Ubah fungsi',\n\t'Alter procedure' => 'Ubah prosedur',\n\t'Return type' => 'Jenis pengembalian',\n\n\t'Events' => 'Even',\n\t'Event has been dropped.' => 'Even berhasil dihapus.',\n\t'Event has been altered.' => 'Even berhasil diubah.',\n\t'Event has been created.' => 'Even berhasil dibuat.',\n\t'Alter event' => 'Ubah even',\n\t'Create event' => 'Buat even',\n\t'At given time' => 'Pada waktu tertentu',\n\t'Every' => 'Setiap',\n\t'Schedule' => 'Jadwal',\n\t'Start' => 'Mulai',\n\t'End' => 'Selesai',\n\t'On completion preserve' => 'Pertahankan saat selesai',\n\n\t'Tables' => 'Tabel',\n\t'Tables and views' => 'Tabel dan tampilan',\n\t'Table' => 'Tabel',\n\t'No tables.' => 'Tidak ada tabel.',\n\t'Alter table' => 'Ubah tabel',\n\t'Create table' => 'Buat tabel',\n\t'Table has been dropped.' => 'Tabel berhasil dihapus.',\n\t'Tables have been dropped.' => 'Tabel berhasil dihapus.',\n\t'Tables have been optimized.' => 'Tabel berhasil dioptimalkan.',\n\t'Table has been altered.' => 'Tabel berhasil diubah.',\n\t'Table has been created.' => 'Tabel berhasil dibuat.',\n\t'Table name' => 'Nama tabel',\n\t'Show structure' => 'Lihat struktur',\n\t'engine' => 'mesin',\n\t'collation' => 'kolasi',\n\t'Column name' => 'Nama kolom',\n\t'Type' => 'Jenis',\n\t'Length' => 'Panjang',\n\t'Auto Increment' => 'Inkrementasi Otomatis',\n\t'Options' => 'Opsi',\n\t'Comment' => 'Komentar',\n\t'Default values' => 'Nilai bawaan',\n\t'Drop' => 'Hapus',\n\t'Are you sure?' => 'Anda yakin?',\n\t'Move up' => 'Naik',\n\t'Move down' => 'Turun',\n\t'Remove' => 'Hapus',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Sudah lebih dumlah ruas maksimum yang diizinkan. Harap naikkan %s.',\n\n\t'Partition by' => 'Partisi menurut',\n\t'Partitions' => 'Partisi',\n\t'Partition name' => 'Nama partisi',\n\t'Values' => 'Nilai',\n\n\t'View' => 'Tampilan',\n\t'View has been dropped.' => 'Tampilan berhasil dihapus.',\n\t'View has been altered.' => 'Tampilan berhasil diubah.',\n\t'View has been created.' => 'Tampilan berhasil dibuat.',\n\t'Alter view' => 'Ubah tampilan',\n\t'Create view' => 'Buat tampilan',\n\n\t'Indexes' => 'Indeks',\n\t'Indexes have been altered.' => 'Indeks berhasil diubah.',\n\t'Alter indexes' => 'Ubah indeks',\n\t'Add next' => 'Tambah setelahnya',\n\t'Index Type' => 'Jenis Indeks',\n\t'length' => 'panjang',\n\n\t'Foreign keys' => 'Kunci asing',\n\t'Foreign key' => 'Kunci asing',\n\t'Foreign key has been dropped.' => 'Kunci asing berhasil dihapus.',\n\t'Foreign key has been altered.' => 'Kunci asing berhasil diubah.',\n\t'Foreign key has been created.' => 'Kunci asing berhasil dibuat.',\n\t'Target table' => 'Tabel sasaran',\n\t'Change' => 'Ubah',\n\t'Source' => 'Sumber',\n\t'Target' => 'Sasaran',\n\t'Add column' => 'Tambah kolom',\n\t'Alter' => 'Ubah',\n\t'Add foreign key' => 'Tambah kunci asing',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolom sumber dan sasaran harus memiliki jenis data yang sama. Kolom sasaran harus memiliki indeks dan data rujukan harus ada.',\n\n\t'Triggers' => 'Pemicu',\n\t'Add trigger' => 'Tambah pemicu',\n\t'Trigger has been dropped.' => 'Pemicu berhasil dihapus.',\n\t'Trigger has been altered.' => 'Pemicu berhasil diubah.',\n\t'Trigger has been created.' => 'Pemicu berhasil dibuat.',\n\t'Alter trigger' => 'Ubah pemicu',\n\t'Create trigger' => 'Buat pemicu',\n\t'Time' => 'Waktu',\n\t'Event' => 'Even',\n\t'Name' => 'Nama',\n\n\t'select' => 'pilih',\n\t'Select' => 'Pilih',\n\t'Select data' => 'Pilih data',\n\t'Functions' => 'Fungsi',\n\t'Aggregation' => 'Agregasi',\n\t'Search' => 'Cari',\n\t'anywhere' => 'di mana pun',\n\t'Search data in tables' => 'Cari data dalam tabel',\n\t'Sort' => 'Urutkan',\n\t'descending' => 'menurun',\n\t'Limit' => 'Batas',\n\t'Text length' => 'Panjang teks',\n\t'Action' => 'Tindakan',\n\t'Full table scan' => 'Pindai tabel lengkap',\n\t'Unable to select the table' => 'Gagal memilih tabel',\n\t'No rows.' => 'Tidak ada baris.',\n\t'%d row(s)' => '%d baris',\n\t'Page' => 'Halaman',\n\t'last' => 'terakhir',\n\t'Whole result' => 'Seluruh hasil',\n\t'%d byte(s)' => '%d bita',\n\n\t'Import' => 'Impor',\n\t'%d row(s) have been imported.' => '%d baris berhasil diimpor.',\n\n\t// in-place editing in select\n\t'Use edit link to modify this value.' => 'Gunakan pranala suntingan untuk mengubah nilai ini.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Entri%s berhasil disisipkan.',\n\t'Item has been deleted.' => 'Entri berhasil dihapus.',\n\t'Item has been updated.' => 'Entri berhasil diperbarui.',\n\t'%d item(s) have been affected.' => '%d entri terpengaruh.',\n\t'New item' => 'Entri baru',\n\t'original' => 'asli',\n\t// label for value '' in enum data type\n\t'empty' => 'kosong',\n\t'edit' => 'sunting',\n\t'Edit' => 'Sunting',\n\t'Insert' => 'Sisipkan',\n\t'Save' => 'Simpan',\n\t'Save and continue edit' => 'Simpan dan lanjut menyunting',\n\t'Save and insert next' => 'Simpan dan sisipkan berikutnya',\n\t'Clone' => 'Gandakan',\n\t'Delete' => 'Hapus',\n\n\t// data type descriptions\n\t'Numbers' => 'Angka',\n\t'Date and time' => 'Tanggal dan waktu',\n\t'Strings' => 'String',\n\t'Binary' => 'Binari',\n\t'Lists' => 'Daftar',\n\t'Network' => 'Jaringan',\n\t'Geometry' => 'Geometri',\n\t'Relations' => 'Relasi',\n\n\t'Editor' => 'Editor',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'now',\n\t'yes' => 'yes',\n\t'no' => 'no',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Berkas sudah ada.',\n\t'Please use one of the extensions %s.' => 'Harap gunakan salah satu ekstensi %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Ubah skema',\n\t'Create schema' => 'Buat skema',\n\t'Schema has been dropped.' => 'Skema berhasil dihapus.',\n\t'Schema has been created.' => 'Skema berhasil dibuat.',\n\t'Schema has been altered.' => 'Skema berhasil diubah.',\n\t'Schema' => 'Skema',\n\t'Invalid schema.' => 'Skema tidak sah.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Deret',\n\t'Create sequence' => 'Buat deret',\n\t'Sequence has been dropped.' => 'Deret berhasil dihapus.',\n\t'Sequence has been created.' => 'Deret berhasil dibuat.',\n\t'Sequence has been altered.' => 'Deret berhasil diubah.',\n\t'Alter sequence' => 'Ubah deret',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Jenis pengguna',\n\t'Create type' => 'Buat jenis',\n\t'Type has been dropped.' => 'Jenis berhasil dihapus.',\n\t'Type has been created.' => 'Jenis berhasil dibuat.',\n\t'Alter type' => 'Ubah jenis',\n);\n\n// run `php ../../lang.php id` to update this file\n"
  },
  {
    "path": "adminer/lang/it.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Autenticazione',\n\t'Logout successful.' => 'Uscita effettuata con successo.',\n\t'Invalid credentials.' => 'Credenziali non valide.',\n\t'Server' => 'Server',\n\t'Username' => 'Utente',\n\t'Password' => 'Password',\n\t'Select database' => 'Seleziona database',\n\t'Invalid database.' => 'Database non valido.',\n\t'Table has been dropped.' => 'Tabella eliminata.',\n\t'Table has been altered.' => 'Tabella modificata.',\n\t'Table has been created.' => 'Tabella creata.',\n\t'Alter table' => 'Modifica tabella',\n\t'Create table' => 'Crea tabella',\n\t'Table name' => 'Nome tabella',\n\t'engine' => 'motore',\n\t'collation' => 'collazione',\n\t'Column name' => 'Nome colonna',\n\t'Type' => 'Tipo',\n\t'Length' => 'Lunghezza',\n\t'Auto Increment' => 'Auto incremento',\n\t'Options' => 'Opzioni',\n\t'Save' => 'Salva',\n\t'Drop' => 'Elimina',\n\t'Database has been dropped.' => 'Database eliminato.',\n\t'Database has been created.' => 'Database creato.',\n\t'Database has been renamed.' => 'Database rinominato.',\n\t'Database has been altered.' => 'Database modificato.',\n\t'Alter database' => 'Modifica database',\n\t'Create database' => 'Crea database',\n\t'SQL command' => 'Comando SQL',\n\t'Logout' => 'Esci',\n\t'Use' => 'Usa',\n\t'No tables.' => 'No tabelle.',\n\t'select' => 'seleziona',\n\t'Item has been deleted.' => 'Elemento eliminato.',\n\t'Item has been updated.' => 'Elemento aggiornato.',\n\t'Item%s has been inserted.' => 'Elemento%s inserito.',\n\t'Edit' => 'Modifica',\n\t'Insert' => 'Inserisci',\n\t'Save and insert next' => 'Salva e inserisci un altro',\n\t'Delete' => 'Elimina',\n\t'Database' => 'Database',\n\t'Routines' => 'Routine',\n\t'Indexes have been altered.' => 'Indici modificati.',\n\t'Indexes' => 'Indici',\n\t'Alter indexes' => 'Modifica indici',\n\t'Add next' => 'Aggiungi altro',\n\t'Language' => 'Lingua',\n\t'Select' => 'Seleziona',\n\t'New item' => 'Nuovo elemento',\n\t'Search' => 'Cerca',\n\t'Sort' => 'Ordina',\n\t'descending' => 'discendente',\n\t'Limit' => 'Limite',\n\t'No rows.' => 'Nessuna riga.',\n\t'Action' => 'Azione',\n\t'edit' => 'modifica',\n\t'Page' => 'Pagina',\n\t'Query executed OK, %d row(s) affected.' => array('Esecuzione della query OK, %d riga interessata.', 'Esecuzione della query OK, %d righe interessate.'),\n\t'Error in query' => 'Errore nella query',\n\t'Execute' => 'Esegui',\n\t'Table' => 'Tabella',\n\t'Foreign keys' => 'Chiavi esterne',\n\t'Triggers' => 'Trigger',\n\t'View' => 'Vedi',\n\t'Unable to select the table' => 'Selezione della tabella non riuscita',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF non valido. Reinvia la richiesta.',\n\t'Comment' => 'Commento',\n\t'Default values' => 'Valori predefiniti',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Nessun commando da eseguire.',\n\t'Unable to upload a file.' => 'Caricamento del file non riuscito.',\n\t'File upload' => 'Caricamento file',\n\t'File uploads are disabled.' => 'Caricamento file disabilitato.',\n\t'Routine has been called, %d row(s) affected.' => array('Routine chiamata, %d riga interessata.', 'Routine chiamata, %d righe interessate.'),\n\t'Call' => 'Chiama',\n\t'No extension' => 'Estensioni non presenti',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nessuna delle estensioni PHP supportate (%s) disponibile.',\n\t'Session support must be enabled.' => 'Le sessioni devono essere abilitate.',\n\t'Session expired, please login again.' => 'Sessione scaduta, autenticarsi di nuovo.',\n\t'Text length' => 'Lunghezza testo',\n\t'Foreign key has been dropped.' => 'Foreign key eliminata.',\n\t'Foreign key has been altered.' => 'Foreign key modificata.',\n\t'Foreign key has been created.' => 'Foreign key creata.',\n\t'Foreign key' => 'Foreign key',\n\t'Target table' => 'Tabella obiettivo',\n\t'Change' => 'Cambia',\n\t'Source' => 'Sorgente',\n\t'Target' => 'Obiettivo',\n\t'Add column' => 'Aggiungi colonna',\n\t'Alter' => 'Modifica',\n\t'Add foreign key' => 'Aggiungi foreign key',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Tipo indice',\n\t'length' => 'lunghezza',\n\t'View has been dropped.' => 'Vista eliminata.',\n\t'View has been altered.' => 'Vista modificata.',\n\t'View has been created.' => 'Vista creata.',\n\t'Alter view' => 'Modifica vista',\n\t'Create view' => 'Crea vista',\n\t'Name' => 'Nome',\n\t'Process list' => 'Elenco processi',\n\t'%d process(es) have been killed.' => array('%d processo interrotto.', '%d processi interrotti.'),\n\t'Kill' => 'Interrompi',\n\t'Parameter name' => 'Nome parametro',\n\t'Database schema' => 'Schema database',\n\t'Create procedure' => 'Crea procedura',\n\t'Create function' => 'Crea funzione',\n\t'Routine has been dropped.' => 'Routine eliminata.',\n\t'Routine has been altered.' => 'Routine modificata.',\n\t'Routine has been created.' => 'Routine creata.',\n\t'Alter function' => 'Modifica funzione',\n\t'Alter procedure' => 'Modifica procedura',\n\t'Return type' => 'Return type',\n\t'Add trigger' => 'Aggiungi trigger',\n\t'Trigger has been dropped.' => 'Trigger eliminato.',\n\t'Trigger has been altered.' => 'Trigger modificato.',\n\t'Trigger has been created.' => 'Trigger creato.',\n\t'Alter trigger' => 'Modifica trigger',\n\t'Create trigger' => 'Crea trigger',\n\t'Time' => 'Orario',\n\t'Event' => 'Evento',\n\t'%s version: %s through PHP extension %s' => 'Versione %s: %s via estensione PHP %s',\n\t'%d row(s)' => array('%d riga', '%d righe'),\n\t'Remove' => 'Rimuovi',\n\t'Are you sure?' => 'Sicuro?',\n\t'Privileges' => 'Privilegi',\n\t'Create user' => 'Crea utente',\n\t'User has been dropped.' => 'Utente eliminato.',\n\t'User has been altered.' => 'Utente modificato.',\n\t'User has been created.' => 'Utente creato.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Colonna',\n\t'Routine' => 'Routine',\n\t'Grant' => 'Permetti',\n\t'Revoke' => 'Revoca',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Troppi dati via POST. Ridurre i dati o aumentare la direttiva di configurazione %s.',\n\t'Logged as: %s' => 'Autenticato come: %s',\n\t'Move up' => 'Sposta su',\n\t'Move down' => 'Sposta giu',\n\t'Functions' => 'Funzioni',\n\t'Aggregation' => 'Aggregazione',\n\t'Export' => 'Esporta',\n\t'Output' => 'Risultato',\n\t'open' => 'apri',\n\t'save' => 'salva',\n\t'Format' => 'Formato',\n\t'Tables' => 'Tabelle',\n\t'Data' => 'Dati',\n\t'Event has been dropped.' => 'Evento eliminato.',\n\t'Event has been altered.' => 'Evento modificato.',\n\t'Event has been created.' => 'Evento creato.',\n\t'Alter event' => 'Modifica evento',\n\t'Create event' => 'Crea evento',\n\t'Start' => 'Inizio',\n\t'End' => 'Fine',\n\t'Every' => 'Ogni',\n\t'Status' => 'Stato',\n\t'On completion preserve' => 'Al termine preservare',\n\t'Events' => 'Eventi',\n\t'Schedule' => 'Pianifica',\n\t'At given time' => 'A tempo prestabilito',\n\t'Save and continue edit' => 'Salva e continua',\n\t'original' => 'originale',\n\t'Tables have been truncated.' => 'Le tabelle sono state svuotate.',\n\t'Tables have been moved.' => 'Le tabelle sono state spostate.',\n\t'Tables have been dropped.' => 'Le tabelle sono state eliminate.',\n\t'Tables and views' => 'Tabelle e viste',\n\t'Engine' => 'Motore',\n\t'Collation' => 'Collazione',\n\t'Data Length' => 'Lunghezza dato',\n\t'Index Length' => 'Lunghezza indice',\n\t'Data Free' => 'Dati liberi',\n\t'Rows' => 'Righe',\n\t',' => '.',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'Analizza',\n\t'Optimize' => 'Ottimizza',\n\t'Check' => 'Controlla',\n\t'Repair' => 'Ripara',\n\t'Truncate' => 'Svuota',\n\t'Move to other database' => 'Sposta in altro database',\n\t'Move' => 'Sposta',\n\t'%d item(s) have been affected.' => array('Il risultato consiste in %d elemento.', 'Il risultato consiste in %d elementi.'),\n\t'Whole result' => 'Intero risultato',\n\t'Clone' => 'Clona',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Troppi campi. Per favore aumentare %s.',\n\t'Partition by' => 'Partiziona per',\n\t'Partitions' => 'Partizioni',\n\t'Partition name' => 'Nome partizione',\n\t'Values' => 'Valori',\n\t'%d row(s) have been imported.' => array('%d riga importata.', '%d righe importate.'),\n\t'anywhere' => 'ovunque',\n\t'Import' => 'Importa',\n\t'Stop on error' => 'Stop su errore',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[yyyy]',\n\t'History' => 'Storico',\n\t'Variables' => 'Variabili',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Le colonne sorgente e destinazione devono essere dello stesso tipo e ci deve essere un indice sulla colonna di destinazione e sui dati referenziati.',\n\t'Relations' => 'Relazioni',\n\t'Run file' => 'Esegui file',\n\t'Clear' => 'Pulisci',\n\t'Maximum allowed file size is %sB.' => 'La dimensione massima del file è %sB.',\n\t'Numbers' => 'Numeri',\n\t'Date and time' => 'Data e ora',\n\t'Strings' => 'Stringhe',\n\t'Binary' => 'Binari',\n\t'Lists' => 'Liste',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Webserver file %s',\n\t'File does not exist.' => 'Il file non esiste.',\n\t'%d in total' => '%d in totale',\n\t'Permanent login' => 'Login permanente',\n\t'Databases have been dropped.' => 'Database eliminati.',\n\t'Search data in tables' => 'Cerca nelle tabelle',\n\t'Schema' => 'Schema',\n\t'Alter schema' => 'Modifica schema',\n\t'Create schema' => 'Crea schema',\n\t'Schema has been dropped.' => 'Schema eliminato.',\n\t'Schema has been created.' => 'Schema creato.',\n\t'Schema has been altered.' => 'Schema modificato.',\n\t'Sequences' => 'Sequenza',\n\t'Create sequence' => 'Crea sequenza',\n\t'Alter sequence' => 'Modifica sequenza',\n\t'Sequence has been dropped.' => 'Sequenza eliminata.',\n\t'Sequence has been created.' => 'Sequenza creata.',\n\t'Sequence has been altered.' => 'Sequenza modificata.',\n\t'User types' => 'Tipi definiti dall\\'utente',\n\t'Create type' => 'Crea tipo definito dall\\'utente',\n\t'Alter type' => 'Modifica tipo definito dall\\'utente',\n\t'Type has been dropped.' => 'Tipo definito dall\\'utente eliminato.',\n\t'Type has been created.' => 'Tipo definito dall\\'utente creato.',\n\t'Ctrl+click on a value to modify it.' => 'Fai Ctrl+click su un valore per modificarlo.',\n\t'Use edit link to modify this value.' => 'Usa il link modifica per modificare questo valore.',\n\t'last' => 'ultima',\n\t'From server' => 'Dal server',\n\t'System' => 'Sistema',\n\t'Select data' => 'Visualizza dati',\n\t'Show structure' => 'Visualizza struttura',\n\t'empty' => 'vuoto',\n\t'Network' => 'Rete',\n\t'Geometry' => 'Geometria',\n\t'File exists.' => 'Il file esiste già.',\n\t'%d query(s) executed OK.' => array('%d query eseguita con successo.', '%d query eseguite con successo.'),\n\t'Show only errors' => 'Mostra solo gli errori',\n\t'Refresh' => 'Aggiorna',\n\t'Invalid schema.' => 'Schema non valido.',\n\t'Please use one of the extensions %s.' => 'Usa una delle estensioni %s.',\n\t'now' => 'adesso',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Le tabelle sono state copiate.',\n\t'Copy' => 'Copia',\n\t'Permanent link' => 'Link permanente',\n\t'Edit all' => 'Modifica tutto',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Drop %s?' => 'Scartare %s?',\n\t'Tables have been optimized.' => 'Le tabelle sono state ottimizzate.',\n\t'Materialized view' => 'Vista materializzata',\n\t'Vacuum' => 'Aspira',\n\t'Selected' => 'Selezionato',\n\t'overwrite' => 'sovrascrivi',\n\t'DB' => 'DB',\n\t'File must be in UTF-8 encoding.' => 'Il file deve avere codifica UTF-8.',\n\t'Modify' => 'Modifica',\n\t'Load more data' => 'Carica piú dati',\n\t'Loading' => 'Caricamento',\n\t'ATTACH queries are not supported.' => 'ATTACH queries non sono supportate.',\n\t'Warnings' => 'Attenzione',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Limite righe',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer non supporta accesso a databse senza password, <a href=\"https://www.adminer.org/it/password/\"%s>piú informazioni</a>.',\n\t'Default value' => 'Valore predefinito',\n\t'Full table scan' => 'Analizza intera tabella',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuto.', 'Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuti.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'La password principale é scaduta. <a href=\"https://www.adminer.org/it/extension/\"%s>Implementare</a> %s come metodo per renderla permanente.',\n\t'The action will be performed after successful login with the same credentials.' => 'La azione verrá eseguita dopo un login valido con le stesse credenziali.',\n\t'Connecting to privileged ports is not allowed.' => 'LA connessione a porte privilegiate non é permessa.',\n\t'There is a space in the input password which might be the cause.' => 'Esiste uno spazio nella passoword inserita che potrebbe essere la causa.',\n\t'If you did not send this request from Adminer then close this page.' => 'Se non hai inviato tu la richiesta tramite Adminer puoi chiudere la pagina.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Puoi caricare un grande file SQL tramite FTP ed impirtarlo dal server.',\n\t'Size' => 'Taglia',\n\t'Compute' => 'Elabora',\n\t'You are offline.' => 'Sei disconnesso.',\n\t'You have no privileges to update this table.' => 'Non hai i privilegi per aggiornare questa tabella.',\n\t'Saving' => 'Salvataggio',\n\t'Unknown error.' => 'Errore sconosciuto.',\n\t'Database does not support password.' => 'Il database non supporta password.',\n\t'Disable %s or enable %s or %s extensions.' => 'Disabilita %s o abilita %s oppure %s estensioni.',\n\t'yes' => 'si',\n\t'no' => 'no',\n);\n\n// run `php ../../lang.php it` to update this file\n"
  },
  {
    "path": "adminer/lang/ja.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'ログイン',\n\t'Logout successful.' => 'ログアウトしました。',\n\t'Invalid credentials.' => '不正なログインです。',\n\t'Server' => 'サーバー',\n\t'Username' => 'ユーザー名',\n\t'Password' => 'パスワード',\n\t'Loaded plugins' => '読込済プラグイン',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Adminerのご利用ありがとうございました。(寄付は<a href=\"https://www.adminer.org/en/donation/\">こちら</a>)',\n\t'%s must <a%s>return an array</a>.' => '%s は<a%s>配列を返す</a>必要があります。',\n\t'<a%s>Configure</a> %s in %s.' => '%2$s の %1$s を<a%s>設定</a>してください。',\n\t'There is a space in the input password which might be the cause.' => '入力されたパスワードに空白が含まれているので、それが原因かもしれません。',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer はパスワードのないデータベースへの接続には対応していません。(<a href=\"https://www.adminer.org/en/password/\"%s>詳細</a>)',\n\t'Database does not support password.' => 'データベースがパスワードに対応していません。',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => 'ログインの失敗数が多すぎます。%d分後に再試行してください。',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'マスタパスワードが期限切れになりました。<a href=\"https://www.adminer.org/en/extension/\"%s>(実装例)</a> 無期限にするには %s 関数を用います。',\n\t'Select database' => 'データベースを選択してください',\n\t'Invalid database.' => '不正なデータベースです。',\n\t'Table has been dropped.' => 'テーブルを削除しました。',\n\t'Table has been altered.' => 'テーブルの設定を変更しました。',\n\t'Table has been created.' => 'テーブルを作成しました。',\n\t'Alter table' => 'テーブルの設定を変更',\n\t'Create table' => 'テーブルを作成',\n\t'Table name' => 'テーブル名',\n\t'engine' => 'エンジン',\n\t'collation' => 'コレーション',\n\t'Column name' => 'カラム名',\n\t'Type' => '型',\n\t'Length' => '長さ',\n\t'Auto Increment' => '連番',\n\t'Options' => '設定',\n\t'Save' => '保存',\n\t'Drop' => '削除',\n\t'Drop %s?' => '%s を削除しますか？',\n\t'Database has been dropped.' => 'データベースを削除しました。',\n\t'Database has been created.' => 'データベースを作成しました。',\n\t'Database has been renamed.' => 'データベースの名前を変えました。',\n\t'Database has been altered.' => 'データベースの設定を変更しました。',\n\t'Alter database' => 'データベースの設定を変更',\n\t'Create database' => 'データベースを作成',\n\t'SQL command' => 'SQLコマンド',\n\t'Logout' => 'ログアウト',\n\t'Use' => '使用',\n\t'No tables.' => 'テーブルがありません。',\n\t'select' => '選択',\n\t'Item has been deleted.' => 'レコードを削除しました。',\n\t'Item has been updated.' => 'レコードを更新しました。',\n\t'Edit' => '編集',\n\t'Insert' => '挿入',\n\t'Save and insert next' => '保存／追加',\n\t'Delete' => '削除',\n\t'You have no privileges to update this table.' => 'このテーブルを更新する権限がありません。',\n\t'Database' => 'データベース',\n\t'DB' => 'DB',\n\t'Routines' => 'ルーチン',\n\t'Indexes have been altered.' => 'インデックスを変更しました。',\n\t'Indexes' => 'インデックス',\n\t'Alter indexes' => 'インデックスを変更',\n\t'Add next' => '追加',\n\t'Language' => '言語',\n\t'Select' => '選択',\n\t'New item' => '新規レコードを挿入',\n\t'Search' => '検索',\n\t'Sort' => 'ソート',\n\t'descending' => '降順',\n\t'Limit' => '制約',\n\t'Limit rows' => '表示行数を制限',\n\t'No rows.' => '行がありません。',\n\t'Action' => '動作',\n\t'edit' => '編集',\n\t'Page' => 'ページ',\n\t'Query executed OK, %d row(s) affected.' => 'クエリーを実行しました。%d 行を変更しました。',\n\t'Error in query' => 'クエリーのエラー',\n\t'Unknown error.' => '不明なエラーです。',\n\t'Warnings' => '警告',\n\t'ATTACH queries are not supported.' => 'ATTACH クエリーは対応していません。',\n\t'Execute' => '実行',\n\t'Table' => 'テーブル',\n\t'Foreign keys' => '外部キー',\n\t'Triggers' => 'トリガー',\n\t'View' => 'ビュー',\n\t'Materialized view' => 'マテリアライズドビュー',\n\t'Full table scan' => 'テーブルを全スキャン',\n\t'Unable to select the table' => 'テーブルを選択できません',\n\t'Invalid CSRF token. Send the form again.' => '不正なCSRFトークンです。フォームを再送信してください。',\n\t'If you did not send this request from Adminer then close this page.' => 'Adminerからのリクエストでない場合はこのページを閉じてください。',\n\t'Comment' => 'コメント',\n\t'Default values' => '既定値',\n\t'%d byte(s)' => '%d バイト',\n\t'No commands to execute.' => '実行するコマンドがありません。',\n\t'Unable to upload a file.' => 'ファイルをアップロードできません。',\n\t'File upload' => 'アップロード',\n\t'File uploads are disabled.' => 'ファイルのアップロードが無効です。',\n\t'Routine has been called, %d row(s) affected.' => 'ルーチンを呼びました。%d 行を変更しました。',\n\t'Call' => '呼出し',\n\t'No extension' => '拡張機能がありません',\n\t'None of the supported PHP extensions (%s) are available.' => 'PHPの拡張機能（%s）がセットアップされていません。',\n\t'Connecting to privileged ports is not allowed.' => '特権ポートへの接続は許可されていません。',\n\t'Disable %s or enable %s or %s extensions.' => '%s を無効にするか、拡張機能 %s または %s を有効にしてください。',\n\t'Session support must be enabled.' => 'セッションを有効にしてください。',\n\t'Session expired, please login again.' => 'セッションの期限切れ。ログインし直してください。',\n\t'The action will be performed after successful login with the same credentials.' => '同じアカウントで正しくログインすると作業を実行します。',\n\t'Text length' => '文字数を丸める',\n\t'Foreign key has been dropped.' => '外部キーを削除しました。',\n\t'Foreign key has been altered.' => '外部キーを変更しました。',\n\t'Foreign key has been created.' => '外部キーを作成しました。',\n\t'Foreign key' => '外部キー',\n\t'Target table' => '対象テーブル',\n\t'Change' => '変更',\n\t'Source' => 'ソース',\n\t'Target' => 'ターゲット',\n\t'Add column' => 'カラムを追加',\n\t'Alter' => '変更',\n\t'Add foreign key' => '外部キーを追加',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'インデックスの型',\n\t'length' => '長さ',\n\t'View has been dropped.' => 'ビューを削除しました。',\n\t'View has been altered.' => 'ビューを変更しました。',\n\t'View has been created.' => 'ビューを作成しました。',\n\t'Alter view' => 'ビューを変更',\n\t'Create view' => 'ビューを作成',\n\t'Name' => '名称',\n\t'Process list' => 'プロセス一覧',\n\t'%d process(es) have been killed.' => '%d プロセスを終了しました。',\n\t'Kill' => 'プロセスを終了',\n\t'Parameter name' => 'パラメータ名',\n\t'Database schema' => 'スキーマ',\n\t'Create procedure' => 'プロシージャを作成',\n\t'Create function' => '関数を作成',\n\t'Routine has been dropped.' => 'ルーチンを削除しました。',\n\t'Routine has been altered.' => 'ルーチンを変更しました。',\n\t'Routine has been created.' => 'ルーチンを作成しました。',\n\t'Alter function' => '関数を変更',\n\t'Alter procedure' => 'プロシージャを変更',\n\t'Return type' => '戻り値の型',\n\t'Add trigger' => 'トリガーを追加',\n\t'Trigger has been dropped.' => 'トリガーを削除しました。',\n\t'Trigger has been altered.' => 'トリガーを変更しました。',\n\t'Trigger has been created.' => 'トリガーを追加しました。',\n\t'Alter trigger' => 'トリガーを変更',\n\t'Create trigger' => 'トリガーを作成',\n\t'Time' => 'タイミング',\n\t'Event' => 'イベント',\n\t'%s version: %s through PHP extension %s' => '%sバージョン：%s、 PHP拡張機能 %s',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => '%d 行',\n\t'Remove' => '除外',\n\t'Are you sure?' => '実行しますか？',\n\t'Privileges' => '権限',\n\t'Create user' => 'ユーザを作成',\n\t'User has been dropped.' => 'ユーザを削除しました。',\n\t'User has been altered.' => 'ユーザを変更しました。',\n\t'User has been created.' => 'ユーザを作成しました。',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'カラム',\n\t'Columns' => 'カラム',\n\t'Routine' => 'ルーチン',\n\t'Grant' => '権限を付与',\n\t'Revoke' => '権限を取り消す',\n\t'Logged as: %s' => 'ログ：%s',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POSTデータが大きすぎます。データサイズを小さくするか %s 設定を大きくしてください。',\n\t'You can upload a big SQL file via FTP and import it from server.' => '大きなSQLファイルは、FTP経由でアップロードしてサーバからインポートしてください。',\n\t'You are offline.' => 'オフライン状態です。',\n\t'Move up' => '上',\n\t'Move down' => '下',\n\t'Export' => 'エクスポート',\n\t'Tables' => 'テーブル',\n\t'Data' => 'データ',\n\t'Output' => '出力',\n\t'open' => 'ブラウザに表示',\n\t'save' => '保存',\n\t'Format' => '形式',\n\t'Functions' => '関数',\n\t'Aggregation' => '集約関数',\n\t'Event has been dropped.' => 'イベントを削除しました。',\n\t'Event has been altered.' => 'イベントを変更しました。',\n\t'Event has been created.' => 'イベントを作成しました。',\n\t'Alter event' => 'イベントを変更',\n\t'Create event' => 'イベントを作成',\n\t'Start' => '開始',\n\t'End' => '終了',\n\t'Every' => '毎回',\n\t'Status' => '状態',\n\t'On completion preserve' => '完成後に保存',\n\t'Events' => 'イベント',\n\t'Schedule' => 'スケジュール',\n\t'At given time' => '指定時刻',\n\t'Tables have been truncated.' => 'テーブルを空にしました。',\n\t'Tables have been moved.' => 'テーブルを移動しました。',\n\t'Tables and views' => 'テーブルとビュー',\n\t'Engine' => 'エンジン',\n\t'Collation' => 'コレーション',\n\t'Data Length' => 'データ長',\n\t'Index Length' => 'インデックス長',\n\t'Data Free' => '空き',\n\t'Rows' => '行数',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Analyze' => '分析',\n\t'Optimize' => '最適化',\n\t'Vacuum' => '不要領域を回収(Vacuum)',\n\t'Check' => '検査',\n\t'Repair' => '修復',\n\t'Truncate' => '空にする',\n\t'Move to other database' => '他のデータベースへ移動',\n\t'Move' => '移動',\n\t'Save and continue edit' => '保存して継続',\n\t'original' => '元',\n\t'%d item(s) have been affected.' => '%d レコードを更新しました。',\n\t'Whole result' => '全結果',\n\t'Tables have been dropped.' => 'テーブルを削除しました。',\n\t'Tables have been optimized.' => 'テーブルを最適化しました。',\n\t'Clone' => 'クローン',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => '定義可能な最大フィールド数を越えました。%s を増やしてください。',\n\t'Partition by' => 'パーティション',\n\t'Partitions' => 'パーティション',\n\t'Partition name' => 'パーティション名',\n\t'Values' => '値',\n\t'%d row(s) have been imported.' => '%d 行をインポートしました。',\n\t'File must be in UTF-8 encoding.' => 'ファイルをUTF-8で保存してください。',\n\t'Show structure' => 'スキーマ',\n\t'anywhere' => '任意',\n\t'Import' => 'インポート',\n\t'Stop on error' => 'エラーの場合は停止',\n\t'Select data' => 'データ',\n\t'%.3f s' => '%.3f 秒',\n\t'$1-$3-$5' => '$1/$3/$5',\n\t'[yyyy]-mm-dd' => '[yyyy]/mm/dd',\n\t'History' => '履歴',\n\t'Variables' => '変数',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'ソースとターゲットのカラムは同じデータ型でなければなりません。ターゲットカラムにインデックスがあり、データが存在しなければなりません。',\n\t'Relations' => '関係',\n\t'Run file' => '実行',\n\t'Clear' => '消去',\n\t'Maximum allowed file size is %sB.' => '最大ファイルサイズは %sB です。',\n\t'Numbers' => '数字',\n\t'Date and time' => '日時',\n\t'Strings' => '文字列',\n\t'Binary' => 'バイナリ',\n\t'Lists' => 'リスト',\n\t'Editor' => 'エディタ',\n\t'Webserver file %s' => 'ファイル名 %s',\n\t'File does not exist.' => 'ファイルは存在しません。',\n\t'%d in total' => '合計 %d',\n\t'Permanent login' => '永続的にログイン',\n\t'Databases have been dropped.' => 'データベースを削除しました。',\n\t'Search data in tables' => 'データを検索する',\n\t'Schema' => 'スキーマ',\n\t'Alter schema' => 'スキーマ変更',\n\t'Create schema' => 'スキーマ追加',\n\t'Schema has been dropped.' => 'スキーマを削除しました。',\n\t'Schema has been created.' => 'スキーマを追加しました。',\n\t'Schema has been altered.' => 'スキーマを変更しました。',\n\t'Sequences' => 'シーケンス',\n\t'Create sequence' => 'シーケンス作成',\n\t'Alter sequence' => 'シーケンス変更',\n\t'Sequence has been dropped.' => 'シーケンスを削除しました。',\n\t'Sequence has been created.' => 'シーケンスを追加しました。',\n\t'Sequence has been altered.' => 'シーケンスを変更しました。',\n\t'User types' => 'ユーザー定義型',\n\t'Create type' => 'ユーザー定義型作成',\n\t'Alter type' => 'ユーザー定義型変更',\n\t'Type has been dropped.' => 'ユーザー定義型を削除しました。',\n\t'Type has been created.' => 'ユーザー定義型を追加しました。',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+クリックで値を修正します。',\n\t'Use edit link to modify this value.' => 'この値を修正するにはリンクを使用してください。',\n\t'last' => '最終',\n\t'From server' => 'サーバー上のファイル',\n\t'System' => 'データベース種類',\n\t'empty' => '空',\n\t'Network' => 'ネットワーク型',\n\t'Geometry' => 'ジオメトリ型',\n\t'File exists.' => 'ファイルが既に存在します。',\n\t'Item%s has been inserted.' => '%sレコードを挿入しました。',\n\t'now' => '現在の日時',\n\t'%d query(s) executed OK.' => '%d クエリーを実行しました。',\n\t'Show only errors' => 'エラーのみ表示',\n\t'Refresh' => 'リフレッシュ',\n\t'Invalid schema.' => '無効なスキーマです。',\n\t'Please use one of the extensions %s.' => '%s のいずれかの拡張機能を使ってください。',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'テーブルをコピーしました。',\n\t'Copy' => 'コピー',\n\t'overwrite' => '上書き',\n\t'Permanent link' => '固定リンク',\n\t'Edit all' => '一括編集',\n\t'Selected' => '選択中',\n\t'Modify' => '編集',\n\t'Load more data' => 'さらにデータを表示',\n\t'Compute' => '再計算',\n\t'Saving' => '保存しています...',\n\t'Checks' => 'CHECK制約',\n\t'Create check' => 'CHECK制約を追加',\n\t'Alter check' => 'CHECK制約を編集',\n\t'Check has been created.' => 'CHECK制約を追加しました。',\n\t'Check has been altered.' => 'CHECK制約を編集しました。',\n\t'Check has been dropped.' => 'CHECK制約を削除しました。',\n\n\t'screenshot' => 'スクリーンショット',\n\t'Algorithm' => 'アルゴリズム',\n\t'Condition' => '条件',\n\t'Inherits from' => '継承元',\n\t'HH:MM:SS' => '時:分:秒',\n\t'Loading' => '読み込み中',\n\t'Size' => 'サイズ',\n\t'yes' => 'はい',\n\t'no' => 'いいえ',\n\t'Default value' => '既定値',\n);\n\n// run `php ../../lang.php ja` to update this file\n"
  },
  {
    "path": "adminer/lang/ka.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'შესვლა',\n\t'Logout successful.' => 'გამოხვედით სისტემიდან.',\n\t'Invalid credentials.' => 'არასწორი მომხმარებელი ან პაროლი.',\n\t'Server' => 'სერვერი',\n\t'Username' => 'მომხმარებელი',\n\t'Password' => 'პაროლი',\n\t'Select database' => 'ბაზა',\n\t'Invalid database.' => 'არასწორი ბაზა.',\n\t'Table has been dropped.' => 'ცხრილი წაიშალა.',\n\t'Table has been altered.' => 'ცხრილი შეიცვალა.',\n\t'Table has been created.' => 'ცხრილი შეიქმნა.',\n\t'Alter table' => 'ცხრილის შეცვლა',\n\t'Create table' => 'ცხრილის შექმნა',\n\t'Table name' => 'სახელი',\n\t'engine' => 'სახეობა',\n\t'collation' => 'კოდირება',\n\t'Column name' => 'ველი',\n\t'Type' => 'სახეობა',\n\t'Length' => 'სიგრძე',\n\t'Auto Increment' => 'ავტომატურად გაზრდა',\n\t'Options' => 'მოქმედება',\n\t'Save' => 'შენახვა',\n\t'Drop' => 'წაშლა',\n\t'Database has been dropped.' => 'ბაზა წაიშალა.',\n\t'Database has been created.' => 'ბაზა შეიქმნა.',\n\t'Database has been renamed.' => 'ბაზას გადაერქვა.',\n\t'Database has been altered.' => 'ბაზა შეიცვალა.',\n\t'Alter database' => 'ბაზის შეცვლა',\n\t'Create database' => 'ბაზის შექმნა',\n\t'SQL command' => 'SQL-ბრძანება',\n\t'Logout' => 'გასვლა',\n\t'Use' => 'არჩევა',\n\t'No tables.' => 'ბაზაში ცხრილი არაა.',\n\t'select' => 'არჩევა',\n\t'Item has been deleted.' => 'ჩანაწერი წაიშალა.',\n\t'Item has been updated.' => 'ჩანაწერი განახლდა.',\n\t'Item%s has been inserted.' => 'ჩანაწერი%s ჩაჯდა.',\n\t'Edit' => 'შეცვლა',\n\t'Insert' => 'ჩასმა',\n\t'Save and insert next' => 'შენახვა და სხვის ჩასმა',\n\t'Delete' => 'წაშლა',\n\t'Database' => 'ბაზა',\n\t'Indexes have been altered.' => 'შეიცვალა ინდექსები.',\n\t'Indexes' => 'ინდექსები',\n\t'Alter indexes' => 'ინდექსის შეცვლა',\n\t'Add next' => 'კიდევ დამატება',\n\t'Language' => 'ენა',\n\t'Select' => 'არჩევა',\n\t'New item' => 'ახალი ჩანაწერი',\n\t'Search' => 'ძებნა',\n\t'Sort' => 'დალაგება',\n\t'descending' => 'კლებადობით',\n\t'Limit' => 'ზღვარი',\n\t'No rows.' => 'ჩანაწერი არაა.',\n\t'Action' => 'მოქმედება',\n\t'edit' => 'რედაქტირება',\n\t'Page' => 'გვერდი',\n\t'Query executed OK, %d row(s) affected.' => 'მოთხოვდა შესრულდა, შეიცვალა %d ჩანაწერი.',\n\t'Error in query' => 'შეცდომა მოთხოვნაში',\n\t'Execute' => 'შესრულება',\n\t'Table' => 'ცხრილი',\n\t'Foreign keys' => 'გარე გასაღები',\n\t'Triggers' => 'ტრიგერები',\n\t'View' => 'ნახვა',\n\t'Unable to select the table' => 'ცხრილიდან ინფორმაცია ვერ მოვიპოვე',\n\t'Invalid CSRF token. Send the form again.' => 'უმოქმედო CSRF-ტოკენი. ფორმის კიდევ ერთხელ გაგზავნა.',\n\t'Comment' => 'კომენტარები',\n\t'Default values' => 'სტანდარტული მნიშვნელობა',\n\t'%d byte(s)' => '%d ბაიტი',\n\t'No commands to execute.' => 'შესასრულებელი ბრძანება არაა.',\n\t'Unable to upload a file.' => 'ფაილი არ აიტვირთა სერვერზე.',\n\t'File upload' => 'ფაილის ატვირთვა სერვერზე',\n\t'File uploads are disabled.' => 'ფაილის სერვერზე ატვირთვა გათიშულია.',\n\t'Routine has been called, %d row(s) affected.' => 'გამოძახებულია პროცედურა, შეიცვალა %d ჩანაწერი.',\n\t'Call' => 'გამოძახეება',\n\t'No extension' => 'გაფართოება არაა',\n\t'None of the supported PHP extensions (%s) are available.' => 'არც ერთი მხარდაჭერილი გაფართოება არ მოიძებნა (%s).',\n\t'Session support must be enabled.' => 'ჩართული უნდა იყოს სესია.',\n\t'Session expired, please login again.' => 'სესიის მოქმედების დრო ამოიწურა, გაიარეთ ხელახალი ავტორიზაცია.',\n\t'Text length' => 'ტექსტის სიგრძე',\n\t'Foreign key has been dropped.' => 'გარე გასაღები წაიშალა.',\n\t'Foreign key has been altered.' => 'გარე გასაღები შეიცვალა.',\n\t'Foreign key has been created.' => 'გარე გასაღები შეიქმნა.',\n\t'Foreign key' => 'გარე გასაღები',\n\t'Change' => 'შეცვლა',\n\t'Source' => 'წყარო',\n\t'Target' => 'სამიზნე',\n\t'Add column' => 'ველის დამატება',\n\t'Alter' => 'შეცვლა',\n\t'Add foreign key' => 'გარე გასაღები დამატება',\n\t'ON DELETE' => 'წაშლისას',\n\t'ON UPDATE' => 'განახლებისას',\n\t'Index Type' => 'ინდექსის სახეობა',\n\t'length' => 'სიგრძე',\n\t'View has been dropped.' => 'წარმოდგენა წაიშალა.',\n\t'View has been altered.' => 'წარმოდგენა შეიცვალა.',\n\t'View has been created.' => 'წარმოდგენა შეიქმნა.',\n\t'Alter view' => 'წარმოდგენის შეცვლა',\n\t'Create view' => 'წარმოდგენის შექმნა',\n\t'Name' => 'სახელი',\n\t'Process list' => 'პროცესების სია',\n\t'%d process(es) have been killed.' => 'გაითიშა %d პროცესი.',\n\t'Kill' => 'დასრულება',\n\t'Parameter name' => 'პარამეტრი',\n\t'Database schema' => 'ბაზის სქემა',\n\t'Create procedure' => 'პროცედურის შექმნა',\n\t'Create function' => 'ფუნქციის შექმნა',\n\t'Routine has been dropped.' => 'პროცედურა წაიშალა.',\n\t'Routine has been altered.' => 'პროცედურა შეიცვალა.',\n\t'Routine has been created.' => 'პროცედურა შეიქმნა.',\n\t'Alter function' => 'ფუნქციის შეცვლა',\n\t'Alter procedure' => 'პროცედურის შეცვლა',\n\t'Return type' => 'დაბრუნების სახეობა',\n\t'Add trigger' => 'ტრიგერის დამატება',\n\t'Trigger has been dropped.' => 'ტრიგერი წაიშალა.',\n\t'Trigger has been altered.' => 'ტრიგერი შეიცვალა.',\n\t'Trigger has been created.' => 'ტრიგერი შეიქმნა.',\n\t'Alter trigger' => 'ტრიგერის შეცვლა',\n\t'Create trigger' => 'ტრიგერის შექმნა',\n\t'Time' => 'დრო',\n\t'Event' => 'ღონისძიება',\n\t'%s version: %s through PHP extension %s' => 'ვერსია %s: %s PHP-გაფართოება %s',\n\t'%d row(s)' => '%d რიგი',\n\t'Remove' => 'წაშლა',\n\t'Are you sure?' => 'ნამდვილად?',\n\t'Privileges' => 'უფლებამოსილება',\n\t'Create user' => 'მომხმარებლის შექმან',\n\t'User has been dropped.' => 'მომხმარებელი წაიშალა.',\n\t'User has been altered.' => 'მომხმარებელი შეიცვალა.',\n\t'User has been created.' => 'მომხმარებელი შეიქმნა.',\n\t'Hashed' => 'ჰეშირებული',\n\t'Column' => 'ველი',\n\t'Routine' => 'პროცედურა',\n\t'Grant' => 'დაშვება',\n\t'Revoke' => 'შეზღუდვა',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST ინფორმაცია ძალიან დიდია. შეამცირეთ ზომა ან გაზარდეს POST ინფორმაციის ზომა პარამეტრებიდან %s.',\n\t'Logged as: %s' => 'შესული ხართ როგორც: %s',\n\t'Move up' => 'ზემოთ ატანა',\n\t'Move down' => 'ქვემოთ ჩატანა',\n\t'Functions' => 'ფუნქციები',\n\t'Aggregation' => 'აგრეგაცია',\n\t'Export' => 'ექსპორტი',\n\t'Output' => 'გამომავალი ინფორმაცია',\n\t'open' => 'გახსნა',\n\t'save' => 'შენახვა',\n\t'Format' => 'ფორმატი',\n\t'Tables' => 'ცხრილები',\n\t'Data' => 'ინფორმაცია',\n\t'Event has been dropped.' => 'ღონისძიება წაიშალა.',\n\t'Event has been altered.' => 'ღონისძიება შეიცვალა.',\n\t'Event has been created.' => 'ღონისძიება შეიქმნა.',\n\t'Alter event' => 'ღონისძიების შეცვლა',\n\t'Create event' => 'ღონისძიების შექმნა',\n\t'At given time' => 'მოცემულ დროში',\n\t'Every' => 'ყოველ',\n\t'Events' => 'ღონისძიება',\n\t'Schedule' => 'განრიგი',\n\t'Start' => 'დასაწყისი',\n\t'End' => 'დასასრული',\n\t'Status' => 'მდგომარეობა',\n\t'On completion preserve' => 'შენახვა დასრულებისას',\n\t'Tables and views' => 'ცხრილები და წარმოდგენები',\n\t'Data Length' => 'ინფორმაციის მოცულობა',\n\t'Index Length' => 'ინდექსების მოცულობა',\n\t'Data Free' => 'თავისუფალი სივრცე',\n\t'Collation' => 'კოდირება',\n\t'Analyze' => 'ანალიზი',\n\t'Optimize' => 'ოპტიმიზაცია',\n\t'Check' => 'შემოწმება',\n\t'Repair' => 'გასწორება',\n\t'Truncate' => 'გასუფთავება',\n\t'Tables have been truncated.' => 'ცხრილი გასუფთავდა.',\n\t'Rows' => 'რიგი',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'ცხრილი გადაადგილდა.',\n\t'Move to other database' => 'გადატანა სხვა ბაზაში',\n\t'Move' => 'გადატანა',\n\t'Engine' => 'ძრავი',\n\t'Save and continue edit' => 'შენახვა და ცვლილების გაგრძელება',\n\t'original' => 'საწყისი',\n\t'%d item(s) have been affected.' => 'შეიცვალა %d ჩანაწერი.',\n\t'Whole result' => 'სრული შედეგი',\n\t'Tables have been dropped.' => 'ცხრილები წაიშალა.',\n\t'Clone' => 'კლონირება',\n\t'Partition by' => 'დაყოფა',\n\t'Partitions' => 'დანაყოფები',\n\t'Partition name' => 'დანაყოფის სახელი',\n\t'Values' => 'პარამეტრები',\n\t'%d row(s) have been imported.' => 'დაიმპორტდა %d რიგი.',\n\t'Import' => 'იმპორტი',\n\t'Stop on error' => 'გაჩერება შეცდომისას',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'მიღწეულია დაშვებული ველების მაქსიმალური რაოდენობა, გაზარდეთ %s.',\n\t'anywhere' => 'ნებისმიერ ადგილას',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5.$3.$1',\n\t'[yyyy]-mm-dd' => 'დდ.თთ.[წწწწ]',\n\t'History' => 'ისტორია',\n\t'Variables' => 'ცვლადები',\n\t'Relations' => 'ურთიერთობა',\n\t'Run file' => 'ფაილის გაშვება',\n\t'Clear' => 'გასუფთავება',\n\t'Maximum allowed file size is %sB.' => 'ფაილის მაქსიმალური ზომა - %sB.',\n\t'Numbers' => 'ციფრები',\n\t'Date and time' => 'დრო და თარიღი',\n\t'Binary' => 'ორობითი',\n\t'Lists' => 'სია',\n\t'Editor' => 'რედაქტორი',\n\t'Webserver file %s' => 'ფაილი %s ვებსერვერზე',\n\t'File does not exist.' => 'ასეთი ფაილი არ არსებობს.',\n\t'%d in total' => 'სულ %d',\n\t'Permanent login' => 'სისტემაში დარჩენა',\n\t'Databases have been dropped.' => 'ბაზა წაიშალა.',\n\t'Search data in tables' => 'ცხრილებში ძებნა',\n\t'Schema' => 'სქემა',\n\t'Alter schema' => 'სქემის შეცვლა',\n\t'Create schema' => 'ახალი სქემა',\n\t'Schema has been dropped.' => 'სქემა წაიშალა.',\n\t'Schema has been created.' => 'შეიქმნა ახალი სქემა.',\n\t'Schema has been altered.' => 'სქემა შეიცვალა.',\n\t'Sequences' => 'მიმდევრობა',\n\t'Create sequence' => 'მიმდევრობის შექმნა',\n\t'Alter sequence' => 'მიმდევრობის შეცვლა',\n\t'Sequence has been dropped.' => 'მიმდევრობა წაიშალა.',\n\t'Sequence has been created.' => 'მიმდევრობა შეიქმნა.',\n\t'Sequence has been altered.' => 'მიმდევრობა შეიცვალა.',\n\t'User types' => 'მომხმარებლის სახეობა',\n\t'Create type' => 'სახეობის შექმნა',\n\t'Alter type' => 'სახეობის შეცვლა',\n\t'Type has been dropped.' => 'სახეობა წაიშალა.',\n\t'Type has been created.' => 'სახეობა შეიქმნა.',\n\t'Ctrl+click on a value to modify it.' => 'შესაცვლელად გამოიყენეთ Ctrl+თაგვის ღილაკი.',\n\t'Use edit link to modify this value.' => 'ამ მნიშვნელობის შესაცვლელად გამოიყენეთ ბმული «შეცვლა».',\n\t'last' => 'ბოლო',\n\t'From server' => 'სერვერიდან',\n\t'System' => 'სისტემა',\n\t'Select data' => 'არჩევა',\n\t'Show structure' => 'სტრუქტურის ჩვენება',\n\t'empty' => 'ცარიელი',\n\t'Network' => 'ქსელი',\n\t'Geometry' => 'გეომეტრია',\n\t'File exists.' => 'ფაილი უკვე არსებობს.',\n\t'%d query(s) executed OK.' => '%d მოთხოვნა შესრულდა.',\n\t'Show only errors' => 'მხოლოდ შეცდომები',\n\t'Refresh' => 'განახლება',\n\t'Invalid schema.' => 'არასწორი სქემა.',\n\t'Please use one of the extensions %s.' => 'გამოიყენეთ ერთ-ერთი გაფართოება %s.',\n\t'now' => 'ახლა',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'ცხრილი დაკოპირდა.',\n\t'Copy' => 'კოპირება',\n\t'Permanent link' => 'მუდმივი ბმული',\n\t'Edit all' => 'ყველას შეცვლა',\n\t'HH:MM:SS' => 'სთ:წთ:წმ',\n\t'Tables have been optimized.' => 'ცხრილებს გაუკეთდა ოპტიმიზაცია.',\n\t'Materialized view' => 'მატერიალური ხედი',\n\t'Vacuum' => 'ვაკუუმი',\n\t'Selected' => 'არჩეული',\n\t'File must be in UTF-8 encoding.' => 'ფაილი უნდა იყოს კოდირებაში UTF-8.',\n\t'Modify' => 'შეცვლა',\n\t'Loading' => 'ჩატვირთვა',\n\t'Load more data' => 'მეტი ინფორმაციის ჩატვირთვა',\n\t'ATTACH queries are not supported.' => 'ATTACH-მოთხოვნები არაა მხარდაჭერილი.',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'რიგების შეზღუდვა',\n\t'Default value' => 'სტანდარტული მნიშვნელობა',\n\t'Full table scan' => 'სრული ცხრილის ანალიზი',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => 'ძალიან ბევრჯერ შეგეშალათ მომხმარებელი და პაროლი. სცადეთ %d წუთში.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'ძირითად პაროლს ვადა გაუვიდა. <a href=\"https://www.adminer.org/en/extension/\"%s>გამოიყენეთ</a> მეთოდი %s, რათა ის მუდმივი გახადოთ.',\n\t'If you did not send this request from Adminer then close this page.' => 'ეს მოთხოვნა თქვენ თუ არ გაგიგზავნაით Adminer-იდან, დახურეთ ეს ფანჯარა..',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'დიდი ფაილი უნდა ატვირტოთ FTP-თი და შემდეგ გაუკეთოთ იმპორტი სერვერიდან.',\n\t'Size' => 'ზომა',\n\t'Compute' => 'გამოთვლა',\n\t'You are offline.' => 'არ გაგივლიათ ავტორიზაცია.',\n\t'You have no privileges to update this table.' => 'ამ ცხრილის განახლების უფლება არ გაქვთ.',\n\t'Saving' => 'შენახვა',\n\t'yes' => 'კი',\n\t'no' => 'არა',\n\t'Routines' => 'რუტინები',\n\t'Target table' => 'მიზნობრივი ცხრილი',\n\t'Strings' => 'ველები',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'საწყისი და მიზნობრივი ველები უნდა იყოს ერთიდაიგივე სახეობის, მიზნობრივ ველზე უნდა იყოს ინდექსი და უნდა არსებობდეს შესაბამისი ინფორმაცია.',\n\t'Drop %s?' => 'წაიშალოს %s?',\n\t'Warnings' => 'გაფრთხილება',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'უპაროლო წვდომა ბაზასთან არაა დაშვებული Adminer-ში, მეტი ინფორმაციისთვის ეწვიეთ <a href=\"https://www.adminer.org/en/password/\"%s>ბმულს</a>.',\n\t'DB' => 'ბაზა',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'მადლობას გიხდით Adminer-ით სარგებლობისთვის, გადახედეთ ბმულს <a href=\"https://www.adminer.org/en/donation/\">შემოწირულობა</a>.',\n\t'The action will be performed after successful login with the same credentials.' => 'მოქმედება შესრულდება იგივე მომხმარებლით წარმატებული ავტორიზაციის შემდეგ.',\n\t'Connecting to privileged ports is not allowed.' => 'პრივილეგირებულ პორტთან წვდომა დაუშვებელია.',\n\t'There is a space in the input password which might be the cause.' => 'პაროლში არის გამოტოვება, შეიძლება ეს ქმნის პრობლემას.',\n\t'Unknown error.' => 'უცნობი შეცდომა.',\n\t'Database does not support password.' => 'ბაზაში არაა მხარდაჭერილი პაროლი.',\n\t'Disable %s or enable %s or %s extensions.' => 'გათიშეთ %s ან ჩართეთ %s ან %s გაფართოება.',\n);\n\n// run `php ../../lang.php ka` to update this file\n"
  },
  {
    "path": "adminer/lang/ko.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'$1-$3-$5' => '$1-$3-$5',\n\t'%.3f s' => '%.3f 초',\n\t'%d byte(s)' => '%d 바이트',\n\t'%d in total' => '총 %d개',\n\t'%d item(s) have been affected.' => '%d개 항목을 갱신했습니다.',\n\t'%d process(es) have been killed.' => '%d개 프로세스를 강제 종료하였습니다.',\n\t'%d query(s) executed OK.' => '%d개 쿼리를 잘 실행했습니다.',\n\t'%d row(s) have been imported.' => '%d개 행을 가져 왔습니다.',\n\t'%d row(s)' => '%d개 행',\n\t'%s version: %s through PHP extension %s' => '%s 버전 %s, PHP 확장 %s',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t'Action' => '실행',\n\t'Add column' => '열 추가',\n\t'Add foreign key' => '외부 키를 추가',\n\t'Add next' => '다음 추가',\n\t'Add trigger' => '트리거 추가',\n\t'Aggregation' => '집합',\n\t'Alter database' => '데이터베이스 변경',\n\t'Alter event' => '이벤트 변경',\n\t'Alter function' => '함수 변경',\n\t'Alter indexes' => '색인 변경',\n\t'Alter procedure' => '시저 변경',\n\t'Alter schema' => '스키마 변경',\n\t'Alter sequence' => '순서 변경',\n\t'Alter table' => '테이블 변경',\n\t'Alter trigger' => '트리거 변경',\n\t'Alter type' => '형 변경',\n\t'Alter view' => '보기 변경',\n\t'Alter' => '변경',\n\t'Analyze' => '분석',\n\t'anywhere' => '모든',\n\t'Are you sure?' => '실행 하시겠습니까?',\n\t'At given time' => '지정 시간',\n\t'Auto Increment' => '자동 증가',\n\t'Binary' => '이진',\n\t'Call' => '호출',\n\t'Change' => '변경',\n\t'Check' => '확인',\n\t'Clear' => '삭제',\n\t'Clone' => '복제',\n\t'collation' => '정렬',\n\t'Collation' => '정렬',\n\t'length' => '길이',\n\t'Column name' => '열 이름',\n\t'Column' => '열',\n\t'Comment' => '주석',\n\t'Compute' => '계산하기',\n\t'Copy' => '복사',\n\t'Create database' => '데이터베이스 만들기',\n\t'Create event' => '만들기',\n\t'Create function' => '함수 만들기',\n\t'Create procedure' => '시저 만들기',\n\t'Create schema' => '스키마 추가',\n\t'Create sequence' => '시퀀스 만들기',\n\t'Create table' => '테이블 만들기',\n\t'Create trigger' => '트리거 만들기',\n\t'Create type' => '사용자 정의 형식 만들기',\n\t'Create user' => '사용자 만들기',\n\t'Create view' => '뷰 만들기',\n\t'Data Free' => '데이터 여유',\n\t'Data Length' => '데이터 길이',\n\t'Data' => '데이터',\n\t'Database has been altered.' => '데이터베이스를 변경했습니다.',\n\t'Database has been created.' => '데이터베이스를 만들었습니다.',\n\t'Database has been dropped.' => '데이터베이스를 삭제했습니다.',\n\t'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',\n\t'Database schema' => '데이터베이스 구조',\n\t'Database' => '데이터베이스',\n\t'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',\n\t'Date and time' => '시간',\n\t'Default values' => '기본값',\n\t'Delete' => '삭제',\n\t'descending' => '역순',\n\t'Drop' => '삭제',\n\t'Edit all' => '모두 편집',\n\t'Edit' => '편집',\n\t'edit' => '편집',\n\t'Editor' => '에디터',\n\t'empty' => '비어있음',\n\t'End' => '종료',\n\t'engine' => '엔진',\n\t'Engine' => '엔진',\n\t'Error in query' => '쿼리의 오류',\n\t'Event has been altered.' => '변경했습니다.',\n\t'Event has been created.' => '만들었습니다.',\n\t'Event has been dropped.' => '삭제했습니다.',\n\t'Event' => '이벤트',\n\t'Events' => '이벤트',\n\t'Every' => '매 번',\n\t'Execute' => '실행',\n\t'Export' => '내보내기',\n\t'File does not exist.' => '파일이 존재하지 않습니다.',\n\t'File exists.' => '파일이 이미 있습니다.',\n\t'File upload' => '파일 올리기',\n\t'File uploads are disabled.' => '파일 업로드가 잘못되었습니다.',\n\t'Foreign key has been altered.' => '외부 키를 변경했습니다.',\n\t'Foreign key has been created.' => '외부 키를 만들었습니다.',\n\t'Foreign key has been dropped.' => '외부 키를 제거했습니다.',\n\t'Foreign key' => '외부 키',\n\t'Foreign keys' => '외부 키',\n\t'Format' => '형식',\n\t'From server' => '서버에서 실행',\n\t'Functions' => '함수',\n\t'Geometry' => '기하 형',\n\t'Grant' => '권한 부여',\n\t'Hashed' => 'Hashed',\n\t'HH:MM:SS' => '시:분:초',\n\t'History' => '이력',\n\t'Import' => '가져 오기',\n\t'Index Length' => '색인 길이',\n\t'Index Type' => '색인 형',\n\t'Indexes have been altered.' => '색인을 변경했습니다.',\n\t'Indexes' => '색인',\n\t'Insert' => '삽입',\n\t'Invalid credentials.' => '잘못된 로그인.',\n\t'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰입니다. 다시 보내주십시오.',\n\t'Invalid database.' => '잘못된 데이터베이스입니다.',\n\t'Invalid schema.' => '잘못된 스키마입니다.',\n\t'Item has been deleted.' => '항목을 삭제했습니다.',\n\t'Item has been updated.' => '항목을 갱신했습니다.',\n\t'Item%s has been inserted.' => '%s 항목을 삽입했습니다.',\n\t'Kill' => '강제 종료',\n\t'Language' => '언어',\n\t'last' => '마지막',\n\t'Length' => '길이',\n\t'Limit rows' => '행 제약',\n\t'Limit' => '제약',\n\t'Lists' => '목록',\n\t'Load more data' => '더 많은 데이터 부르기',\n\t'Loading' => '부르는 중',\n\t'Logged as: %s' => '다음으로 로그인했습니다: %s',\n\t'Login' => '로그인',\n\t'Logout successful.' => '로그아웃을 성공했습니다.',\n\t'Logout' => '로그아웃',\n\t'ltr' => 'ltr',\n\t'Maximum allowed file size is %sB.' => '파일의 최대 크기 %sB.',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s(을)를 늘리십시오.',\n\t'Modify' => '수정',\n\t'Move down' => '아래로',\n\t'Move to other database' => '다른 데이터베이스로 이동',\n\t'Move up' => '위로',\n\t'Move' => '이동',\n\t'Name' => '이름',\n\t'Network' => '네트워크 형',\n\t'New item' => '항목 만들기',\n\t'No commands to execute.' => '실행할 수 있는 명령이 없습니다.',\n\t'No extension' => '확장이 없습니다',\n\t'No rows.' => '행이 없습니다.',\n\t'No tables.' => '테이블이 없습니다.',\n\t'None of the supported PHP extensions (%s) are available.' => 'PHP 확장(%s)이 설치되어 있지 않습니다.',\n\t'now' => '현재 시간',\n\t'Numbers' => '숫자',\n\t'On completion preserve' => '완성 후 저장',\n\t'ON DELETE' => '지울 때',\n\t'ON UPDATE' => '업데이트할 때',\n\t'open' => '열',\n\t'Optimize' => '최적화',\n\t'Options' => '설정',\n\t'original' => '원본',\n\t'Output' => '출력',\n\t'overwrite' => '덮어쓰기',\n\t'Page' => '페이지',\n\t'Parameter name' => '매개변수 이름',\n\t'Partition by' => '파티션',\n\t'Partition name' => '파티션 이름',\n\t'Partitions' => '파티션',\n\t'Password' => '비밀번호',\n\t'Permanent link' => '영구적으로 링크',\n\t'Permanent login' => '영구적으로 로그인',\n\t'Please use one of the extensions %s.' => '확장 %s 중 하나를 사용하십시오.',\n\t'Privileges' => '권한',\n\t'Process list' => '프로세스 목록',\n\t'Query executed OK, %d row(s) affected.' => '쿼리를 잘 실행했습니다. %d행을 변경했습니다.',\n\t'Refresh' => '새로 고침',\n\t'Relations' => '관계',\n\t'Remove' => '제거',\n\t'Repair' => '복구',\n\t'Return type' => '반환 형식',\n\t'Revoke' => '권한 취소',\n\t'Routine has been altered.' => '루틴을 변경했습니다.',\n\t'Routine has been called, %d row(s) affected.' => '루틴을 호출했습니다. %d 행을 변경했습니다.',\n\t'Routine has been created.' => '루틴을 추가했습니다.',\n\t'Routine has been dropped.' => '루틴을 제거했습니다.',\n\t'Routine' => '루틴',\n\t'Routines' => '루틴',\n\t'Rows' => '행',\n\t'Run file' => '파일을 실행',\n\t'Save and continue edit' => '저장하고 계속 편집하기',\n\t'Save and insert next' => '저장하고 다음에 추가',\n\t'Save' => '저장',\n\t'save' => '저장',\n\t'Schedule' => '예약',\n\t'Schema has been altered.' => '스키마를 변경했습니다.',\n\t'Schema has been created.' => '스키마를 추가했습니다.',\n\t'Schema has been dropped.' => '스키마를 삭제했습니다.',\n\t'Schema' => '스키마',\n\t'Search data in tables' => '테이블 내 데이터 검색',\n\t'Search' => '검색',\n\t'Select data' => '데이터를 선택하십시오',\n\t'Select database' => '데이터베이스를 선택하십시오',\n\t'Select' => '선택',\n\t'select' => '선택',\n\t'Selected' => '선택됨',\n\t'Sequence has been altered.' => '시퀀스를 변경했습니다.',\n\t'Sequence has been created.' => '시퀀스를 추가했습니다.',\n\t'Sequence has been dropped.' => '시퀀스를 제거했습니다.',\n\t'Sequences' => '시퀀스',\n\t'Server' => '서버',\n\t'Session expired, please login again.' => '세션이 만료되었습니다. 다시 로그인하십시오.',\n\t'Session support must be enabled.' => '세션 지원을 사용해야만 합니다.',\n\t'Show only errors' => '오류 만 표시',\n\t'Show structure' => '구조 표시',\n\t'Size' => '크기',\n\t'Sort' => '정렬',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '원본과 대상 열은 동일한 데이터 형식이어야만 합니다. 목표 열에 색인과 데이터가 존재해야만 합니다.',\n\t'Source' => '소스',\n\t'SQL command' => 'SQL 명령',\n\t'Start' => '시작',\n\t'Status' => '상태',\n\t'Stop on error' => '오류의 경우 중지',\n\t'Strings' => '문자열',\n\t'System' => '데이터베이스 형식',\n\t'Table has been altered.' => '테이블을 변경했습니다.',\n\t'Table has been created.' => '테이블을 만들었습니다.',\n\t'Table has been dropped.' => '테이블을 삭제했습니다.',\n\t'Table name' => '테이블 이름',\n\t'Table' => '테이블',\n\t'Tables and views' => '테이블과 뷰',\n\t'Tables have been copied.' => '테이블을 복사했습니다.',\n\t'Tables have been dropped.' => '테이블을 삭제했습니다.',\n\t'Tables have been moved.' => '테이블을 옮겼습니다.',\n\t'Tables have been truncated.' => '테이블의 데이터 내용만 지웠습니다.',\n\t'Tables' => '테이블',\n\t'Target table' => '테이블',\n\t'Target' => '타겟',\n\t'Text length' => '문자열의 길이',\n\t'Time' => '시간',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 데이터가 너무 큽니다. 데이터 크기를 줄이거나 %s 설정을 늘리십시오.',\n\t'Trigger has been altered.' => '트리거를 변경했습니다.',\n\t'Trigger has been created.' => '트리거를 추가했습니다.',\n\t'Trigger has been dropped.' => '트리거를 제거했습니다.',\n\t'Triggers' => '트리거',\n\t'Truncate' => '데이터 내용만 지우기',\n\t'Type has been created.' => '유형을 추가했습니다.',\n\t'Type has been dropped.' => '유형을 삭제했습니다.',\n\t'Type' => '형',\n\t'Unable to select the table' => '테이블을 선택할 수 없습니다',\n\t'Unable to upload a file.' => '파일을 업로드 할 수 없습니다.',\n\t'Use edit link to modify this value.' => '이 값을 수정하려면 편집 링크를 사용하십시오.',\n\t'Use' => '사용',\n\t'User has been altered.' => '사용자를 변경했습니다.',\n\t'User has been created.' => '사용자를 만들었습니다.',\n\t'User has been dropped.' => '사용자를 제거했습니다.',\n\t'Username' => '사용자이름',\n\t'Vacuum' => '청소',\n\t'Values' => '값',\n\t'Variables' => '변수',\n\t'View has been altered.' => '보기를 변경했습니다.',\n\t'View has been created.' => '보기를 만들었습니다.',\n\t'View has been dropped.' => '보기를 삭제했습니다.',\n\t'View' => '보기',\n\t'Warnings' => '경고',\n\t'Webserver file %s' => '웹서버 파일 %s',\n\t'Whole result' => '모든 결과',\n\t'yes' => '네',\n\t'You are offline.' => '오프라인입니다.',\n\t'You can upload a big SQL file via FTP and import it from server.' => '큰 SQL 파일은 FTP를 통하여 업로드하여 서버에서 가져올 수 있습니다.',\n\t'You have no privileges to update this table.' => '이 테이블을 업데이트할 권한이 없습니다.',\n);\n\n// run `php ../../lang.php ko` to update this file\n"
  },
  {
    "path": "adminer/lang/lt.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sistema',\n\t'Server' => 'Serveris',\n\t'Username' => 'Vartotojas',\n\t'Password' => 'Slaptažodis',\n\t'Permanent login' => 'Pastovus prisijungimas',\n\t'Login' => 'Prisijungti',\n\t'Logout' => 'Atsijungti',\n\t'Logged as: %s' => 'Prisijungęs kaip: %s',\n\t'Logout successful.' => 'Jūs atsijungėte nuo sistemos.',\n\t'Invalid credentials.' => 'Neteisingi prisijungimo duomenys.',\n\t'Language' => 'Kalba',\n\t'Invalid CSRF token. Send the form again.' => 'Neteisingas CSRF tokenas. Bandykite siųsti formos duomenis dar kartą.',\n\t'No extension' => 'Nėra plėtiio',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nėra nei vieno iš palaikomų PHP plėtinių (%s).',\n\t'Session support must be enabled.' => 'Sesijų palaikymas turi būti įjungtas.',\n\t'Session expired, please login again.' => 'Sesijos galiojimas baigėsi. Prisijunkite iš naujo.',\n\t'%s version: %s through PHP extension %s' => '%s versija: %s per PHP plėtinį %s',\n\t'Refresh' => 'Atnaujinti',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Privilegijos',\n\t'Create user' => 'Sukurti vartotoją',\n\t'User has been dropped.' => 'Vartotojas ištrintas.',\n\t'User has been altered.' => 'Vartotojo duomenys pakeisti.',\n\t'User has been created.' => 'Vartotojas sukurtas.',\n\t'Hashed' => 'Šifruotas',\n\t'Column' => 'Stulpelis',\n\t'Routine' => 'Procedūra',\n\t'Grant' => 'Suteikti',\n\t'Revoke' => 'Atšaukti',\n\n\t'Process list' => 'Procesų sąrašas',\n\t'%d process(es) have been killed.' => array('%d procesas nutrauktas.', '%d procesai nutraukti.', '%d procesų nutraukta.'),\n\t'Kill' => 'Nutraukti',\n\n\t'Variables' => 'Kintamieji',\n\t'Status' => 'Būsena',\n\n\t'SQL command' => 'SQL užklausa',\n\t'%d query(s) executed OK.' => array('%d užklausa įvykdyta.', '%d užklausos įvykdytos.', '%d užklausų įvykdyta.'),\n\t'Query executed OK, %d row(s) affected.' => array('Užklausa įvykdyta. Pakeistas %d įrašas.', 'Užklausa įvykdyta. Pakeisti %d įrašai.', 'Užklausa įvykdyta. Pakeista %d įrašų.'),\n\t'No commands to execute.' => 'Nėra vykdomų užklausų.',\n\t'Error in query' => 'Klaida užklausoje',\n\t'Execute' => 'Vykdyti',\n\t'Stop on error' => 'Sustabdyti esant klaidai',\n\t'Show only errors' => 'Rodyti tik klaidas',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Istorija',\n\t'Clear' => 'Išvalyti',\n\t'Edit all' => 'Redaguoti visus',\n\n\t'File upload' => 'Failo įkėlimas',\n\t'From server' => 'Iš serverio',\n\t'Webserver file %s' => 'Failas %s iš serverio',\n\t'Run file' => 'Vykdyti failą',\n\t'File does not exist.' => 'Failas neegzistuoja.',\n\t'File uploads are disabled.' => 'Failų įkėlimas išjungtas.',\n\t'Unable to upload a file.' => 'Nepavyko įkelti failo.',\n\t'Maximum allowed file size is %sB.' => 'Maksimalus failo dydis - %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Per daug POST duomenų. Sumažinkite duomenų kiekį arba padidinkite konfigūracijos nustatymą %s.',\n\n\t'Export' => 'Eksportas',\n\t'Output' => 'Išvestis',\n\t'open' => 'atidaryti',\n\t'save' => 'išsaugoti',\n\t'Format' => 'Formatas',\n\t'Data' => 'Duomenys',\n\n\t'Database' => 'Duomenų bazė',\n\t'Use' => 'Naudoti',\n\t'Select database' => 'Pasirinkti duomenų bazę',\n\t'Invalid database.' => 'Neteisinga duomenų bazė.',\n\t'Database has been dropped.' => 'Duomenų bazė panaikinta.',\n\t'Databases have been dropped.' => 'Duomenų bazės panaikintos.',\n\t'Database has been created.' => 'Duomenų bazė sukurta.',\n\t'Database has been renamed.' => 'Duomenų bazė pervadinta.',\n\t'Database has been altered.' => 'Duomenų bazė pakeista.',\n\t'Alter database' => 'Redaguoti duomenų bazę',\n\t'Create database' => 'Sukurti duomenų bazę',\n\t'Database schema' => 'Duomenų bazės schema',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Pastovi nuoroda',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Variklis',\n\t'Collation' => 'Lyginimas',\n\t'Data Length' => 'Duomenų ilgis',\n\t'Index Length' => 'Indekso ilgis',\n\t'Data Free' => 'Laisvos vietos',\n\t'Rows' => 'Įrašai',\n\t'%d in total' => '%d iš viso',\n\t'Analyze' => 'Analizuoti',\n\t'Optimize' => 'Optimizuoti',\n\t'Check' => 'Patikrinti',\n\t'Repair' => 'Pataisyti',\n\t'Truncate' => 'Tuštinti',\n\t'Tables have been truncated.' => 'Lentelės buvo ištuštintos.',\n\t'Move to other database' => 'Perkelti į kitą duomenų bazę',\n\t'Move' => 'Perkelti',\n\t'Tables have been moved.' => 'Lentelės perkeltos.',\n\t'Copy' => 'Kopijuoti',\n\t'Tables have been copied.' => 'Lentelės nukopijuotos.',\n\n\t'Routines' => 'Procedūros',\n\t'Routine has been called, %d row(s) affected.' => array('Procedūra įvykdyta. %d įrašas pakeistas.', 'Procedūra įvykdyta. %d įrašai pakeisti.', 'Procedūra įvykdyta. %d įrašų pakeista.'),\n\t'Call' => 'Vykdyti',\n\t'Parameter name' => 'Parametro pavadinimas',\n\t'Create procedure' => 'Sukurti procedūrą',\n\t'Create function' => 'Sukurti funkciją',\n\t'Routine has been dropped.' => 'Procedūra pašalinta.',\n\t'Routine has been altered.' => 'Procedūra pakeista.',\n\t'Routine has been created.' => 'Procedūra sukurta.',\n\t'Alter function' => 'Keisti funkciją',\n\t'Alter procedure' => 'Keiskti procedūrą',\n\t'Return type' => 'Grąžinimo tipas',\n\n\t'Events' => 'Įvykiai',\n\t'Event has been dropped.' => 'Įvykis pašalintas.',\n\t'Event has been altered.' => 'Įvykis pakeistas.',\n\t'Event has been created.' => 'Įvykis sukurtas.',\n\t'Alter event' => 'Redaguoti įvykį',\n\t'Create event' => 'Sukurti įvykį',\n\t'At given time' => 'Nurodytu laiku',\n\t'Every' => 'Kas',\n\t'Schedule' => 'Grafikas',\n\t'Start' => 'Pradžia',\n\t'End' => 'Pabaiga',\n\t'On completion preserve' => 'Įvykdžius išsaugoti',\n\n\t'Tables' => 'Lentelės',\n\t'Tables and views' => 'Lentelės ir vaizdai',\n\t'Table' => 'Lentelė',\n\t'No tables.' => 'Nėra lentelių.',\n\t'Alter table' => 'Redaguoti lentelę',\n\t'Create table' => 'Sukurti lentelę',\n\t'Table has been dropped.' => 'Lentelė pašalinta.',\n\t'Tables have been dropped.' => 'Lentelės pašalintos.',\n\t'Table has been altered.' => 'Lentelė pakeista.',\n\t'Table has been created.' => 'Lentelė sukurta.',\n\t'Table name' => 'Lentelės pavadinimas',\n\t'Show structure' => 'Rodyti struktūrą',\n\t'engine' => 'variklis',\n\t'collation' => 'palyginimas',\n\t'Column name' => 'Stulpelio pavadinimas',\n\t'Type' => 'Tipas',\n\t'Length' => 'Ilgis',\n\t'Auto Increment' => 'Auto Increment',\n\t'Options' => 'Nustatymai',\n\t'Comment' => 'Komentaras',\n\t'Default values' => 'Reikšmės pagal nutylėjimą',\n\t'Drop' => 'Pašalinti',\n\t'Are you sure?' => 'Tikrai?',\n\t'Move up' => 'Perkelti į viršų',\n\t'Move down' => 'Perkelti žemyn',\n\t'Remove' => 'Pašalinti',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Viršytas maksimalus leidžiamų stulpelių kiekis. Padidinkite %s.',\n\n\t'Partition by' => 'Skirstyti pagal',\n\t'Partitions' => 'Skirsniai',\n\t'Partition name' => 'Skirsnio pavadinimas',\n\t'Values' => 'Reikšmės',\n\n\t'View' => 'Vaizdas',\n\t'View has been dropped.' => 'Vaizdas pašalintas.',\n\t'View has been altered.' => 'Vaizdas pakeistas.',\n\t'View has been created.' => 'Vaizdas sukurtas.',\n\t'Alter view' => 'Redaguoti vaizdą',\n\t'Create view' => 'Sukurti vaizdą',\n\n\t'Indexes' => 'Indeksai',\n\t'Indexes have been altered.' => 'Indeksai pakeisti.',\n\t'Alter indexes' => 'Redaguoti indeksus',\n\t'Add next' => 'Pridėti kitą',\n\t'Index Type' => 'Indekso tipas',\n\t'length' => 'ilgis',\n\n\t'Foreign keys' => 'Išoriniai raktai',\n\t'Foreign key' => 'Išorinis raktas',\n\t'Foreign key has been dropped.' => 'Išorinis raktas pašalintas.',\n\t'Foreign key has been altered.' => 'Išorinis raktas pakeistas.',\n\t'Foreign key has been created.' => 'Išorinis raktas sukurtas.',\n\t'Target table' => 'Tikslinė lentelė',\n\t'Change' => 'Pakeisti',\n\t'Source' => 'Šaltinis',\n\t'Target' => 'Tikslas',\n\t'Add column' => 'Pridėti stulpelį',\n\t'Alter' => 'Redaguoti',\n\t'Add foreign key' => 'Pridėti išorinį raktą',\n\t'ON DELETE' => 'Ištrinant',\n\t'ON UPDATE' => 'Atnaujinant',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Šaltinio ir tikslinis stulpelis turi būti to paties tipo, tiksliniame stulpelyje turi būti naudojamas indeksas ir duomenys turi egzistuoti.',\n\n\t'Triggers' => 'Trigeriai',\n\t'Add trigger' => 'Pridėti trigerį',\n\t'Trigger has been dropped.' => 'Trigeris pašalintas.',\n\t'Trigger has been altered.' => 'Trigeris pakeistas.',\n\t'Trigger has been created.' => 'Trigeris sukurtas.',\n\t'Alter trigger' => 'Keisti trigerį',\n\t'Create trigger' => 'Sukurti trigerį',\n\t'Time' => 'Laikas',\n\t'Event' => 'Įvykis',\n\t'Name' => 'Pavadinimas',\n\n\t'select' => 'atrinkti',\n\t'Select' => 'Atrinkti',\n\t'Select data' => 'Atrinkti duomenis',\n\t'Functions' => 'Funkcijos',\n\t'Aggregation' => 'Agregacija',\n\t'Search' => 'Ieškoti',\n\t'anywhere' => 'visur',\n\t'Search data in tables' => 'Ieškoti duomenų lentelėse',\n\t'Sort' => 'Rikiuoti',\n\t'descending' => 'mažėjimo tvarka',\n\t'Limit' => 'Limitas',\n\t'Text length' => 'Teksto ilgis',\n\t'Action' => 'Veiksmas',\n\t'Unable to select the table' => 'Neįmanoma atrinkti lentelės',\n\t'No rows.' => 'Nėra įrašų.',\n\t'%d row(s)' => array('%d įrašas', '%d įrašai', '%d įrašų'),\n\t'Page' => 'Puslapis',\n\t'last' => 'paskutinis',\n\t'Whole result' => 'Visas rezultatas',\n\t'%d byte(s)' => array('%d baitas', '%d baigai', '%d baitų'),\n\n\t'Import' => 'Importas',\n\t'%d row(s) have been imported.' => array('%d įrašas įkelta.', '%d įrašai įkelti.', '%d įrašų įkelta.'),\n\n\t// in-place editing in select\n\t'Use edit link to modify this value.' => 'Norėdami redaguoti reikšmę naudokite redagavimo nuorodą.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Įrašas%s sukurtas.',\n\t'Item has been deleted.' => 'Įrašas ištrintas.',\n\t'Item has been updated.' => 'Įrašas pakeistas.',\n\t'%d item(s) have been affected.' => array('Pakeistas %d įrašas.', 'Pakeisti %d įrašai.', 'Pakeistas %d įrašų.'),\n\t'New item' => 'Naujas įrašas',\n\t'original' => 'originalas',\n\t// label for value '' in enum data type\n\t'empty' => 'tuščia',\n\t'edit' => 'redaguoti',\n\t'Edit' => 'Redaguoti',\n\t'Insert' => 'Įrašyti',\n\t'Save' => 'Išsaugoti',\n\t'Save and continue edit' => 'Išsaugoti ir tęsti redagavimą',\n\t'Save and insert next' => 'Išsaugoti ir įrašyti kitą',\n\t'Clone' => 'Klonuoti',\n\t'Delete' => 'Trinti',\n\n\t// data type descriptions\n\t'Numbers' => 'Skaičiai',\n\t'Date and time' => 'Data ir laikas',\n\t'Strings' => 'Tekstas',\n\t'Binary' => 'Dvejetainis',\n\t'Lists' => 'Sąrašai',\n\t'Network' => 'Tinklas',\n\t'Geometry' => 'Geometrija',\n\t'Relations' => 'Ryšiai',\n\n\t'Editor' => 'Redaktorius',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'dabar',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Failas egzistuoja.',\n\t'Please use one of the extensions %s.' => 'Naudokite vieną iš plėtinių %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Keisti schemą',\n\t'Create schema' => 'Sukurti schemą',\n\t'Schema has been dropped.' => 'Schema pašalinta.',\n\t'Schema has been created.' => 'Schema sukurta.',\n\t'Schema has been altered.' => 'Schema pakeista.',\n\t'Schema' => 'Schema',\n\t'Invalid schema.' => 'Neteisinga schema.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Sekos',\n\t'Create sequence' => 'Sukurti seką',\n\t'Sequence has been dropped.' => 'Seka pašalinta.',\n\t'Sequence has been created.' => 'Seka sukurta.',\n\t'Sequence has been altered.' => 'Seka pakeista.',\n\t'Alter sequence' => 'Keisti seką',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Vartotojų tipai',\n\t'Create type' => 'Sukurti tipą',\n\t'Type has been dropped.' => 'Tipas pašalintas.',\n\t'Type has been created.' => 'Tipas sukurtas.',\n\t'Alter type' => 'Keisti tipą',\n);\n\n// run `php ../../lang.php lt` to update this file\n"
  },
  {
    "path": "adminer/lang/lv.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Ieiet',\n\t'Logout successful.' => 'Jūs veiksmīgi izgājāt no sistēmas.',\n\t'Invalid credentials.' => 'Nepareizs lietotāja vārds vai parole.',\n\t'Server' => 'Serveris',\n\t'Username' => 'Lietotājs',\n\t'Password' => 'Parole',\n\t'Select database' => 'Izvēlēties datubāzi',\n\t'Invalid database.' => 'Nederīga datubāze.',\n\t'Table has been dropped.' => 'Tabula dzēsta.',\n\t'Table has been altered.' => 'Tabula mainīta.',\n\t'Table has been created.' => 'Tabula izveidota.',\n\t'Alter table' => 'Mainīt tabulu',\n\t'Create table' => 'Izveidot tabulu',\n\t'Table name' => 'Tabulas nosaukums',\n\t'engine' => 'Tabulas tips',\n\t'collation' => 'Kolācija',\n\t'Column name' => 'Lauka nosaukums',\n\t'Type' => 'Tips',\n\t'Length' => 'Garums',\n\t'Auto Increment' => 'Auto inkrements',\n\t'Options' => 'Opcijas',\n\t'Save' => 'Saglabāt',\n\t'Drop' => 'Dzēst',\n\t'Database has been dropped.' => 'Datubāze tika nodzēsta.',\n\t'Database has been created.' => 'Datubāze tika izveidota.',\n\t'Database has been renamed.' => 'Datubāze tika pārsaukta.',\n\t'Database has been altered.' => 'Datubāze tika mainīta.',\n\t'Alter database' => 'Mainīt datubāzi',\n\t'Create database' => 'Izveidot datubāzi',\n\t'SQL command' => 'SQL pieprasījums',\n\t'Logout' => 'Iziet',\n\t'Use' => 'Lietot',\n\t'No tables.' => 'Datubāzē nav tabulu.',\n\t'select' => 'izvēlēties',\n\t'Item has been deleted.' => 'Ieraksts dzests.',\n\t'Item has been updated.' => 'Ieraksts atjaunots.',\n\t'Item%s has been inserted.' => 'Ieraksti%s tika ievietoti.',\n\t'Edit' => 'Rediģēt',\n\t'Insert' => 'Ievietot',\n\t'Save and insert next' => 'Saglabāt un ievietot nākamo',\n\t'Delete' => 'Dzēst',\n\t'Database' => 'Datubāze',\n\t'Routines' => 'Procedūras un funkcijas',\n\t'Indexes have been altered.' => 'Indeksi mainīti.',\n\t'Indexes' => 'Indeksi',\n\t'Alter indexes' => 'Izmainīt indeksus',\n\t'Add next' => 'Pievienot vēl',\n\t'Language' => 'Valoda',\n\t'Select' => 'Izvēlēties',\n\t'New item' => 'Jauns ieraksts',\n\t'Search' => 'Meklēšana',\n\t'Sort' => 'Kārtošana',\n\t'descending' => 'dilstoši',\n\t'Limit' => 'Limits',\n\t'No rows.' => 'Nav rindu.',\n\t'Action' => 'Darbība',\n\t'edit' => 'rediģēt',\n\t'Page' => 'Lapa',\n\t'Query executed OK, %d row(s) affected.' => array('Pieprasījums pabeigts, izmainīts %d ieraksts.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.', 'Pieprasījums pabeigts, izmainīti %d ieraksti.'),\n\t'Error in query' => 'Kļūda pieprasījumā',\n\t'Execute' => 'Izpidīt',\n\t'Table' => 'Tabula',\n\t'Foreign keys' => 'Ārejā atslēgas',\n\t'Triggers' => 'Trigeri',\n\t'View' => 'Skats',\n\t'Unable to select the table' => 'Tabula nav pieejama',\n\t'Invalid CSRF token. Send the form again.' => 'Nederīgs CSRF žetons. Nosūtiet formu vēl vienu reizi.',\n\t'Comment' => 'Komentārs',\n\t'Default values' => 'Noklusētā vērtība',\n\t'%d byte(s)' => array('%d baits', '%d baiti', '%d baiti'),\n\t'No commands to execute.' => 'Nav izpildāmu komandu.',\n\t'Unable to upload a file.' => 'Neizdevās ielādēt failu uz servera.',\n\t'File upload' => 'Augšupielāde',\n\t'File uploads are disabled.' => 'Augšupielādes aizliegtas.',\n\t'Routine has been called, %d row(s) affected.' => array('Procedūra izsaukta, izmainīts %d ieraksts.', 'Procedūra izsaukta, izmainīti %d ieraksti.', 'Procedūra izsaukta, izmainīti %d ieraksti.'),\n\t'Call' => 'Izsaukt',\n\t'No extension' => 'Nav paplašinājuma',\n\t'None of the supported PHP extensions (%s) are available.' => 'Neviens PHP no atbalstītajiem paplašinājumiem (%s) nav pieejams.',\n\t'Session support must be enabled.' => 'Sesiju atbalstam jābūt ieslēgtam.',\n\t'Session expired, please login again.' => 'Sesijas laiks ir beidzies, piesakies no jauna sistēmā.',\n\t'Text length' => 'Teksta garums',\n\t'Foreign key has been dropped.' => 'Ārejā atslēga dzēsta.',\n\t'Foreign key has been altered.' => 'Ārejā atslēga izmainīta.',\n\t'Foreign key has been created.' => 'Ārejā atslēga izveidota.',\n\t'Foreign key' => 'Ārejā atslēga',\n\t'Target table' => 'Mērķa tabula',\n\t'Change' => 'Mainīt',\n\t'Source' => 'Avots',\n\t'Target' => 'Mērķis',\n\t'Add column' => 'Pievienot lauku',\n\t'Alter' => 'Izmainīt',\n\t'Add foreign key' => 'Pievienot ārējo atslēgu',\n\t'ON DELETE' => 'Pie dzēšanas',\n\t'ON UPDATE' => 'Pie atjaunošanas',\n\t'Index Type' => 'Indeksa tips',\n\t'length' => 'garums',\n\t'View has been dropped.' => 'Skats dzēsts.',\n\t'View has been altered.' => 'Skats izmainīts.',\n\t'View has been created.' => 'Skats izveidots.',\n\t'Alter view' => 'Izmainīt skatu',\n\t'Create view' => 'Izveidot skatu',\n\t'Name' => 'Nosaukums',\n\t'Process list' => 'Procesu saraksts',\n\t'%d process(es) have been killed.' => array('Pabeigts %d process.', 'Pabeigti %d procesi.', 'Pabeigti %d procesi.'),\n\t'Kill' => 'Nobeigt',\n\t'Parameter name' => 'Parametra nosaukums',\n\t'Database schema' => 'Datubāzes shēma',\n\t'Create procedure' => 'Izveidot procedūru',\n\t'Create function' => 'Izveidot funkciju',\n\t'Routine has been dropped.' => 'Procedūru dzēsta.',\n\t'Routine has been altered.' => 'Procedūru izmainīta.',\n\t'Routine has been created.' => 'Procedūru izveidota.',\n\t'Alter function' => 'Mainīt funkciju',\n\t'Alter procedure' => 'Mainīt procedūru',\n\t'Return type' => 'Atgriezt tips',\n\t'Add trigger' => 'Pievienot trigeri',\n\t'Trigger has been dropped.' => 'Trigeris dzēsts.',\n\t'Trigger has been altered.' => 'Trigeris izmainīts.',\n\t'Trigger has been created.' => 'Trigeris izveidots.',\n\t'Alter trigger' => 'Izmainīt trigeri',\n\t'Create trigger' => 'Izveidot trigeri',\n\t'Time' => 'Laiks',\n\t'Event' => 'Notikums',\n\t'%s version: %s through PHP extension %s' => 'Versija %s: %s ar PHP paplašinājumu %s',\n\t'%d row(s)' => array('%d rinda', '%d rindas', '%d rindu'),\n\t'Remove' => 'Noņemt',\n\t'Are you sure?' => 'Vai Tu esi pārliecināts?',\n\t'Privileges' => 'Tiesības',\n\t'Create user' => 'Izveidot lietotāju',\n\t'User has been dropped.' => 'Lietotājs dzests.',\n\t'User has been altered.' => 'Lietotājs izmainīts.',\n\t'User has been created.' => 'Lietotājs izveidots.',\n\t'Hashed' => 'Sajaukts',\n\t'Column' => 'Lauks',\n\t'Routine' => 'Procedūra',\n\t'Grant' => 'Atļaut',\n\t'Revoke' => 'Aizliegt',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST metodes pieprasījums apjoms par lielu. Atsūtiet mazāka apjoma pieprasījumu kā konfigurācijas %s.',\n\t'Logged as: %s' => 'Ielogojies kā: %s',\n\t'Move up' => 'Pārvietot uz augšu',\n\t'Move down' => 'Pārvietot uz leju',\n\t'Functions' => 'Funkcijas',\n\t'Aggregation' => 'Agregācija',\n\t'Export' => 'Eksports',\n\t'Output' => 'Izejas dati',\n\t'open' => 'atvērt',\n\t'save' => 'saglabāt',\n\t'Format' => 'Formāts',\n\t'Tables' => 'Tabulas',\n\t'Data' => 'Dati',\n\t'Event has been dropped.' => 'Notikums dzēsts.',\n\t'Event has been altered.' => 'Notikums izmainīts.',\n\t'Event has been created.' => 'Notikums izveidots.',\n\t'Alter event' => 'Izmainīt notikumu',\n\t'Create event' => 'Izveidot notikumu',\n\t'At given time' => 'Norāditā laikā',\n\t'Every' => 'Katru',\n\t'Events' => 'Notikumi',\n\t'Schedule' => 'Grafiks',\n\t'Start' => 'Sākums',\n\t'End' => 'Beigas',\n\t'Status' => 'Statuss',\n\t'On completion preserve' => 'Beigās saglabāt',\n\t'Tables and views' => 'Tabulas un skati',\n\t'Data Length' => 'Datu apjoms',\n\t'Index Length' => 'Indeksu izmērs',\n\t'Data Free' => 'Brīvā vieta',\n\t'Collation' => 'Kolācija',\n\t'Analyze' => 'Analizēt',\n\t'Optimize' => 'Optimizēt',\n\t'Check' => 'Pārbaudīt',\n\t'Repair' => 'Salabot',\n\t'Truncate' => 'Iztīrīt',\n\t'Tables have been truncated.' => 'Tabulas iztīrītas.',\n\t'Rows' => 'Rindas',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Tabulas pārvietotas.',\n\t'Move to other database' => 'Pārvietot uz citu datubāzi',\n\t'Move' => 'Pārvietot',\n\t'Engine' => 'Dzinējs',\n\t'Save and continue edit' => 'Saglabāt un turpināt rediģēt',\n\t'original' => 'oriģināls',\n\t'%d item(s) have been affected.' => array('Izmainīts %d ieraksts.', 'Izmainīti %d ieraksti.', 'Izmainīti %d ieraksti.'),\n\t'Whole result' => 'Viss rezultāts',\n\t'Tables have been dropped.' => 'Tabulas dzēstas.',\n\t'Clone' => 'Klonēt',\n\t'Partition by' => 'Sadalīt pēc',\n\t'Partitions' => 'Partīcijas',\n\t'Partition name' => 'Partīcijas nosaukums',\n\t'Values' => 'Vērtības',\n\t'%d row(s) have been imported.' => array('Importēta %d rinda.', 'Importētas %d rindas.', 'Importētas %d rindas.'),\n\t'Import' => 'Imports',\n\t'Stop on error' => 'Astāties kļūdas gadījumā',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Sasniegts maksimālais lauku skaita ierobežojums. Palieliniet %s.',\n\t'anywhere' => 'jebkurā vietā',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5.$3.$1',\n\t'[yyyy]-mm-dd' => 'dd.mm.[gggg]',\n\t'History' => 'Vēsture',\n\t'Variables' => 'Mainīgie',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lauku tipiem jābūt vienādiem, rezultējošā laukā jābut indeksa datiem.',\n\t'Relations' => 'Relācijas',\n\t'Run file' => 'Izpildīt failu',\n\t'Clear' => 'Notīrīt',\n\t'Maximum allowed file size is %sB.' => 'Faila maksimālais izmērs — %sB.',\n\t'Numbers' => 'Skaitļi',\n\t'Date and time' => 'Datums un laiks',\n\t'Strings' => 'Virknes',\n\t'Binary' => 'Binārie',\n\t'Lists' => 'Saraksti',\n\t'Editor' => 'Redaktors',\n\t'Webserver file %s' => 'Fails %s uz servera',\n\t'File does not exist.' => 'Fails neeksistē.',\n\t'%d in total' => 'Kopā %d',\n\t'Permanent login' => 'Atcerēties mani',\n\t'Databases have been dropped.' => 'Datubāzes dzēstas.',\n\t'Search data in tables' => 'Meklēt tabulās',\n\t'Schema' => 'Shēma',\n\t'Alter schema' => 'Izmainīt shēmu',\n\t'Create schema' => 'Jauna shēma',\n\t'Schema has been dropped.' => 'Shēma dzēsta.',\n\t'Schema has been created.' => 'Izveidota jauna shēma.',\n\t'Schema has been altered.' => 'Shēma izmainīta.',\n\t'Sequences' => 'Virknes',\n\t'Create sequence' => 'Izveidot virkni',\n\t'Alter sequence' => 'Izmainīt virkni',\n\t'Sequence has been dropped.' => 'Virkne dzēsta.',\n\t'Sequence has been created.' => 'Izveidota virkne.',\n\t'Sequence has been altered.' => 'Virkne izmainīta.',\n\t'User types' => 'Lietotāju tipi',\n\t'Create type' => 'Izveidot tipu',\n\t'Alter type' => 'Izmainīt tipu',\n\t'Type has been dropped.' => 'Tips dzēsts.',\n\t'Type has been created.' => 'Tips izveidots.',\n\t'Ctrl+click on a value to modify it.' => 'Lai izmainītu vērtību, izmanto Ctrl + peles klikšķi.',\n\t'Use edit link to modify this value.' => 'Izmainīt vērtību var tikai ar saiti \\'Izmainīt\\'.',\n\t'last' => 'pēdējā',\n\t'From server' => 'No servera',\n\t'System' => 'Sistēma',\n\t'Select data' => 'Izvēlēties datus',\n\t'Show structure' => 'Parādīt struktūru',\n\t'empty' => 'tukšs',\n\t'Network' => 'Tīkls',\n\t'Geometry' => 'Ģeometrija',\n\t'File exists.' => 'Fails eksistē.',\n\t'%d query(s) executed OK.' => array('%d pieprasījums veiksmīgs.', '%d pieprasījumi veiksmīgi.', '%d pieprasījumi veiksmīgi.'),\n\t'Show only errors' => 'Rādīt tikai kļūdas',\n\t'Refresh' => 'Atjaunot',\n\t'Invalid schema.' => 'Nederīga shēma.',\n\t'Please use one of the extensions %s.' => 'Izmainojiet kādu no paplašinājumiem %s.',\n\t'now' => 'tagad',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Tabulas nokopētas.',\n\t'Copy' => 'kopēt',\n\t'Permanent link' => 'Pastāvīga saite',\n\t'Edit all' => 'Rediģēt visus',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Tables have been optimized.' => 'Tabulas optimizētas.',\n\t'Materialized view' => 'Matrializēts skats',\n\t'Vacuum' => 'Vakums',\n\t'Selected' => 'Izvēlētie',\n\t'File must be in UTF-8 encoding.' => 'Failam jābūt UTF-8 kodējumam.',\n\t'Modify' => 'Izmainīt',\n\t'Loading' => 'Ielāde',\n\t'Load more data' => 'Ielādēt vēl datus',\n\t'ATTACH queries are not supported.' => 'ATTACH-pieprasījumi nav atbalstīti.',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Rindu limits',\n\t'Default value' => 'Noklusētā vērtība',\n\t'Full table scan' => 'Pilna tabulas analīze',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtes.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.', 'Pieteikšanās mēģinājumu skaits par lielu. Mēginiet pēc %d minūtēm.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Master-parole nav derīga. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementējiet</a> metodi %s, lai padarīgu šo par ierastu metodi.',\n\t'If you did not send this request from Adminer then close this page.' => 'Ja nesūtījāt šo pieprasījumu no Adminer, tad aizveriet pārlūka logu.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Varat ielādēt lielu SQL failu uz servera un tad importēt to.',\n\t'Size' => 'Izmērs',\n\t'Compute' => 'Izskaitļot',\n\t'You are offline.' => 'Jūs est bezsasaistē.',\n\t'You have no privileges to update this table.' => 'jums nav pieejas labot šo tabulu.',\n\t'Saving' => 'Saglabāšana',\n\t'yes' => 'Jā',\n\t'no' => 'Nē',\n\t'Drop %s?' => 'Dzēst %s?',\n\t'overwrite' => 'pārrakstīt',\n\t'DB' => 'DB',\n\t'Warnings' => 'Brīdinājumi',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer neatbalsta pieeju bez paroles, <a href=\"https://www.adminer.org/en/password/\"%s>vairāk informācijas šeit</a>.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Paldies, ka izmantoji Adminer, vai vēlies veikt <a href=\"https://www.adminer.org/en/donation/\">ziedojumu</a>.',\n\t'The action will be performed after successful login with the same credentials.' => 'Darbība tiks pabeigta pēc derīgas pieteikšanās sistēmā.',\n\t'Connecting to privileged ports is not allowed.' => 'Pieeja priviliģētiem portiem nav atļauta.',\n\t'There is a space in the input password which might be the cause.' => 'Parole satur atstarpi, kas varētu būt lieka.',\n\t'Unknown error.' => 'Nezināma kļūda.',\n\t'Database does not support password.' => 'Datubāze neatbalsta paroli.',\n);\n\n// run `php ../../lang.php lv` to update this file\n"
  },
  {
    "path": "adminer/lang/ms.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sistem',\n\t'Server' => 'Pelayan',\n\t'Username' => 'Nama pengguna',\n\t'Password' => 'Kata laluan',\n\t'Permanent login' => 'Log masuk kekal',\n\t'Login' => 'Log masuk',\n\t'Logout' => 'Log keluar',\n\t'Logged as: %s' => 'Log masuk sebagai: %s',\n\t'Logout successful.' => 'Log keluar berjaya.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href=\"https://www.adminer.org/en/donation/\">menderma</a>.',\n\t'Invalid credentials.' => 'Akses tidak sah.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href=\"https://www.adminer.org/en/extension/\"%s>Gunakan</a> cara %s untuk mengekalkannya.',\n\t'Language' => 'Bahasa',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Sila hantar borang sekali lagi.',\n\t'If you did not send this request from Adminer then close this page.' => 'Jika anda tidak menghantar permintaan ini dari Adminer sila tutup halaman ini.',\n\t'No extension' => 'Tiada sambungan',\n\t'None of the supported PHP extensions (%s) are available.' => 'Sambungan PHP yang (%s) disokong tidak wujud.',\n\t'Connecting to privileged ports is not allowed.' => 'Penyambungan ke port yang istimewa tidak dibenarkan.',\n\t'Session support must be enabled.' => 'Sokongan sesi perlu diaktifkan.',\n\t'Session expired, please login again.' => 'Sesi telah luput, sila log masuk kembali.',\n\t'%s version: %s through PHP extension %s' => 'Versi %s: %s melalui sambungan PHP %s',\n\t'Refresh' => 'Segar kembali',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Keistimewaan',\n\t'Create user' => 'Bina pengguna',\n\t'User has been dropped.' => 'Pengguna telah dijatuhkan.',\n\t'User has been altered.' => 'Pengguna telah diubah.',\n\t'User has been created.' => 'Pengguna telah dibuat.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Kolum',\n\t'Routine' => 'Rutin',\n\t'Grant' => 'Beri',\n\t'Revoke' => 'Batal',\n\n\t'Process list' => 'Senarai proses',\n\t'%d process(es) have been killed.' => '%d proses telah dihentikan.',\n\t'Kill' => 'Henti',\n\n\t'Variables' => 'Pembolehubah',\n\t'Status' => 'Status',\n\n\t'SQL command' => 'Arahan SQL',\n\t'%d query(s) executed OK.' => '%d query berjaya dilaksanakan.',\n\t'Query executed OK, %d row(s) affected.' => 'Query berjaya dilaksanakan, %d baris terjejas.',\n\t'No commands to execute.' => 'Tiada arahan untuk dilaksanakan.',\n\t'Error in query' => 'Ralat pada query',\n\t'ATTACH queries are not supported.' => 'Query berikut tidak disokong.',\n\t'Execute' => 'Laksana',\n\t'Stop on error' => 'Berhenti jika ralat',\n\t'Show only errors' => 'Paparkan jika ralat',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Sejarah',\n\t'Clear' => 'Bersih',\n\t'Edit all' => 'Ubah semua',\n\n\t'File upload' => 'Muat naik fail',\n\t'From server' => 'Dari pelayan',\n\t'Webserver file %s' => 'Fail pelayan sesawang %s',\n\t'Run file' => 'Jalankan fail',\n\t'File does not exist.' => 'Fail tidak wujud.',\n\t'File uploads are disabled.' => 'Muat naik fail dihalang.',\n\t'Unable to upload a file.' => 'Muat naik fail gagal.',\n\t'Maximum allowed file size is %sB.' => 'Saiz fail maksimum yang dibenarkan adalah %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kecilkan data atau tingkatkan tetapan %s.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Anda boleh muat naik fail SQL yang besar melalui FTP dan import melalui pelayan.',\n\t'You are offline.' => 'Anda sedang offline.',\n\n\t'Export' => 'Eksport',\n\t'Output' => 'Pengeluaran',\n\t'open' => 'buka',\n\t'save' => 'simpan',\n\t'Saving' => 'Menyimpan',\n\t'Format' => 'Format',\n\t'Data' => 'Data',\n\n\t'Database' => 'Pangkalan data',\n\t'Use' => 'Guna',\n\t'Select database' => 'Pilih pangkalan data',\n\t'Invalid database.' => 'Pangkalan data tidak sah.',\n\t'Database has been dropped.' => 'Pangkalan data telah dijatuhkan.',\n\t'Databases have been dropped.' => 'Pangkalan data telah dijatuhkan.',\n\t'Database has been created.' => 'Pangkalan data telah dibuat.',\n\t'Database has been renamed.' => 'Pangkalan data telah ditukar nama.',\n\t'Database has been altered.' => 'Pangkalan data telah diubah.',\n\t'Alter database' => 'Ubah pangkalan data',\n\t'Create database' => 'Bina pangkalan data',\n\t'Database schema' => 'Skema pangkalan data',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Pautan kekal',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Enjin',\n\t'Collation' => 'Collation',\n\t'Data Length' => 'Panjang Data',\n\t'Index Length' => 'Panjang Indeks',\n\t'Data Free' => 'Data Free',\n\t'Rows' => 'Baris',\n\t'%d in total' => '%d secara keseluruhan',\n\t'Analyze' => 'Menganalisis',\n\t'Optimize' => 'Mengoptimum',\n\t'Vacuum' => 'Vacuum',\n\t'Check' => 'Periksa',\n\t'Repair' => 'Baiki',\n\t'Truncate' => 'Memangkas',\n\t'Tables have been truncated.' => 'Jadual telah dimangkaskan.',\n\t'Move to other database' => 'Pindahkan ke pangkalan data yang lain',\n\t'Move' => 'Pindah',\n\t'Tables have been moved.' => 'Jadual telah dipindahkan.',\n\t'Copy' => 'Salin',\n\t'Tables have been copied.' => 'Jadual telah disalin.',\n\n\t'Routines' => 'Rutin',\n\t'Routine has been called, %d row(s) affected.' => 'Rutin telah dipanggil, %d baris terjejas.',\n\t'Call' => 'Panggil',\n\t'Parameter name' => 'Nama pembolehubah',\n\t'Create procedure' => 'Bina prosedur',\n\t'Create function' => 'Bina fungsi',\n\t'Routine has been dropped.' => 'Rutin telah dijatuhkan.',\n\t'Routine has been altered.' => 'Rutin telah diubah.',\n\t'Routine has been created.' => 'Rutin telah dibuat.',\n\t'Alter function' => 'Ubah fungsi',\n\t'Alter procedure' => 'Ubah prosedur',\n\t'Return type' => 'Jenis Return',\n\n\t'Events' => 'Peristiwa',\n\t'Event has been dropped.' => 'Peristiwa telah dijatuhkan.',\n\t'Event has been altered.' => 'Peristiwa telah diubah.',\n\t'Event has been created.' => 'Peristiwa telah dibuat.',\n\t'Alter event' => 'Ubah peristiwa',\n\t'Create event' => 'Bina peristiwa',\n\t'At given time' => 'Pada masa tersebut',\n\t'Every' => 'Setiap',\n\t'Schedule' => 'Jadual',\n\t'Start' => 'Mula',\n\t'End' => 'Habis',\n\t'On completion preserve' => 'Dalam melestarikan penyelesaian',\n\n\t'Tables' => 'Jadual',\n\t'Tables and views' => 'Jadual dan pandangan',\n\t'Table' => 'Jadual',\n\t'No tables.' => 'Tiada jadual.',\n\t'Alter table' => 'Ubah jadual',\n\t'Create table' => 'Bina jadual',\n\t'Table has been dropped.' => 'Jadual telah dijatuhkan.',\n\t'Tables have been dropped.' => 'Jadual telah dijatuhkan.',\n\t'Tables have been optimized.' => 'Jadual telah dioptimumkan.',\n\t'Table has been altered.' => 'Jadual telah diubah.',\n\t'Table has been created.' => 'Jadual telah dibuat.',\n\t'Table name' => 'Nama jadual',\n\t'Show structure' => 'Paparkan struktur',\n\t'engine' => 'enjin',\n\t'collation' => 'collation',\n\t'Column name' => 'Nama kolum',\n\t'Type' => 'Jenis',\n\t'Length' => 'Kepanjangan',\n\t'Auto Increment' => 'Kenaikan Auto',\n\t'Options' => 'Pilihan',\n\t'Comment' => 'Komen',\n\t'Default value' => 'Nilai lalai',\n\t'Default values' => 'Nilai lalai',\n\t'Drop' => 'Jatuh',\n\t'Drop %s?' => 'Jatuhkan %s?',\n\t'Are you sure?' => 'Anda pasti?',\n\t'Size' => 'Saiz',\n\t'Compute' => 'Kira',\n\t'Move up' => 'Gerak ke atas',\n\t'Move down' => 'Gerak ke bawah',\n\t'Remove' => 'Buang',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Bilangan medan telah melebihi had yang dibenarkan. Sila tingkatkan %s.',\n\n\t'Partition by' => 'Partition mengikut',\n\t'Partitions' => 'Partition',\n\t'Partition name' => 'Nama partition',\n\t'Values' => 'Nilai',\n\n\t'View' => 'Papar',\n\t'Materialized view' => 'Paparan yang menjadi kenyataan',\n\t'View has been dropped.' => 'Paparan telah dijatuhkan.',\n\t'View has been altered.' => 'Paparan telah diubah.',\n\t'View has been created.' => 'Paparan telah dibuat.',\n\t'Alter view' => 'Ubah paparan',\n\t'Create view' => 'Bina paparan',\n\n\t'Indexes' => 'Indeks',\n\t'Indexes have been altered.' => 'Indeks telah diubah.',\n\t'Alter indexes' => 'Ubah indeks',\n\t'Add next' => 'Tambah yang seterusnya',\n\t'Index Type' => 'Jenis Indeks',\n\t'length' => 'kepanjangan',\n\n\t'Foreign keys' => 'Kunci asing',\n\t'Foreign key' => 'Kunci asing',\n\t'Foreign key has been dropped.' => 'Kunci asing telah dijatuhkan.',\n\t'Foreign key has been altered.' => 'Kunci asing telah diubah.',\n\t'Foreign key has been created.' => 'Kunci asing telah dibuat.',\n\t'Target table' => 'Jadual sasaran',\n\t'Change' => 'Tukar',\n\t'Source' => 'Sumber',\n\t'Target' => 'Sasaran',\n\t'Add column' => 'Tambah kolum',\n\t'Alter' => 'Ubah',\n\t'Add foreign key' => 'Tambah kunci asing',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolum sumber dan sasaran perlu mempunyai jenis data yang sama, indeks diperlukan pada kolum sasaran dan data yang dirujuk wujud.',\n\n\t'Triggers' => ' Pencetus',\n\t'Add trigger' => 'Tambah pencetus',\n\t'Trigger has been dropped.' => 'Pencetus telah dijatuhkan.',\n\t'Trigger has been altered.' => 'Pencetus telah diubah.',\n\t'Trigger has been created.' => 'Pencetus telah dibuat.',\n\t'Alter trigger' => 'Ubah pencetus',\n\t'Create trigger' => 'Buat pencetus',\n\t'Time' => 'Masa',\n\t'Event' => 'Peristiwa',\n\t'Name' => 'Nama',\n\n\t'select' => 'pilih',\n\t'Select' => 'Pilih',\n\t'Select data' => 'Pilih data',\n\t'Functions' => 'Fungsi',\n\t'Aggregation' => 'Pengagregatan',\n\t'Search' => 'Cari',\n\t'anywhere' => 'di mana-mana',\n\t'Search data in tables' => 'Cari data dalam jadual',\n\t'Sort' => 'Susun',\n\t'descending' => 'menurun',\n\t'Limit' => 'Had',\n\t'Limit rows' => 'Had baris',\n\t'Text length' => 'Kepanjangan teks',\n\t'Action' => 'Aksi',\n\t'Full table scan' => 'Imbasan penuh jadual',\n\t'Unable to select the table' => 'Pemilihan jadual tidak berjaya',\n\t'No rows.' => 'Tiada baris.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => '%d baris',\n\t'Page' => 'Halaman',\n\t'last' => 'akhir',\n\t'Load more data' => 'Load lebih data',\n\t'Loading' => 'Loading',\n\t'Whole result' => 'Keputusan keseluruhan',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\n\t'Import' => 'Import',\n\t'%d row(s) have been imported.' => '%d baris telah diimport.',\n\t'File must be in UTF-8 encoding.' => 'Fail mesti dalam pengekodan UTF-8.',\n\n\t// in-place editing in select\n\t'Modify' => 'Pinda',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+click pada nilai untuk meminda.',\n\t'Use edit link to modify this value.' => 'Guna pautan ubah untuk meminda nilai ini.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Item%s telah dimasukkan.',\n\t'Item has been deleted.' => 'Item telah dipadamkan.',\n\t'Item has been updated.' => 'Item telah dikemaskini.',\n\t'%d item(s) have been affected.' => '%d item telah terjejas.',\n\t'New item' => 'Item baru',\n\t'original' => 'asli',\n\t// label for value '' in enum data type\n\t'empty' => 'kosong',\n\t'edit' => 'ubah',\n\t'Edit' => 'Ubah',\n\t'Insert' => 'Masukkan',\n\t'Save' => 'Simpan',\n\t'Save and continue edit' => 'Simpan dan sambung ubah',\n\t'Save and insert next' => 'Simpan dan masukkan seterusnya',\n\t'Selected' => 'Terpilih',\n\t'Clone' => 'Klon',\n\t'Delete' => 'Padam',\n\t'You have no privileges to update this table.' => 'Anda tidak mempunyai keistimewaan untuk mengemaskini jadual ini.',\n\n\t// data type descriptions\n\t'Numbers' => 'Nombor',\n\t'Date and time' => 'Tarikh dan masa',\n\t'Strings' => 'String',\n\t'Binary' => 'Binari',\n\t'Lists' => 'Senarai',\n\t'Network' => 'Rangkaian',\n\t'Geometry' => 'Geometri',\n\t'Relations' => 'Hubungan',\n\n\t'Editor' => 'Editor',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'sekarang',\n\t'yes' => 'ya',\n\t'no' => 'tidak',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Fail wujud.',\n\t'Please use one of the extensions %s.' => 'Sila guna salah satu sambungan %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Ubah skema',\n\t'Create schema' => 'Buat skema',\n\t'Schema has been dropped.' => 'Skema telah dijatuhkan.',\n\t'Schema has been created.' => 'Skema telah dibuat.',\n\t'Schema has been altered.' => 'Skema telah diubah.',\n\t'Schema' => 'Skema',\n\t'Invalid schema.' => 'Skema tidak sah.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Turutan',\n\t'Create sequence' => 'Buat turutan',\n\t'Sequence has been dropped.' => 'Turutan telah dijatuhkan.',\n\t'Sequence has been created.' => 'Turutan telah dibuat.',\n\t'Sequence has been altered.' => 'Turutan telah diubah.',\n\t'Alter sequence' => 'Ubah turutan',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Jenis pengguna',\n\t'Create type' => 'Buat jenis',\n\t'Type has been dropped.' => 'Jenis telah dijatuhkan.',\n\t'Type has been created.' => 'Jenis telah dibuat.',\n\t'Alter type' => 'Ubah jenis',\n);\n\n// run `php ../../lang.php ms` to update this file\n"
  },
  {
    "path": "adminer/lang/nl.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Aanmelden',\n\t'Logout successful.' => 'Successvol afgemeld.',\n\t'Invalid credentials.' => 'Ongeldige gebruikersgegevens.',\n\t'Server' => 'Server',\n\t'Username' => 'Gebruikersnaam',\n\t'Password' => 'Wachtwoord',\n\t'Select database' => 'Database selecteren',\n\t'Invalid database.' => 'Ongeldige database.',\n\t'Table has been dropped.' => 'Tabel verwijderd.',\n\t'Table has been altered.' => 'Tabel aangepast.',\n\t'Table has been created.' => 'Tabel aangemaakt.',\n\t'Alter table' => 'Tabel aanpassen',\n\t'Create table' => 'Tabel aanmaken',\n\t'Table name' => 'Tabelnaam',\n\t'engine' => 'engine',\n\t'collation' => 'collation',\n\t'Column name' => 'Kolomnaam',\n\t'Type' => 'Type',\n\t'Length' => 'Lengte',\n\t'Auto Increment' => 'Auto nummering',\n\t'Options' => 'Opties',\n\t'Save' => 'Opslaan',\n\t'Drop' => 'Verwijderen',\n\t'Databases have been dropped.' => 'Databases verwijderd.',\n\t'Database has been dropped.' => 'Database verwijderd.',\n\t'Database has been created.' => 'Database aangemaakt.',\n\t'Database has been renamed.' => 'Database hernoemd.',\n\t'Database has been altered.' => 'Database aangepast.',\n\t'Alter database' => 'Database aanpassen',\n\t'Create database' => 'Database aanmaken',\n\t'SQL command' => 'SQL opdracht',\n\t'Logout' => 'Afmelden',\n\t'Use' => 'Gebruik',\n\t'No tables.' => 'Geen tabellen.',\n\t'select' => 'kies',\n\t'Item has been deleted.' => 'Item verwijderd.',\n\t'Item has been updated.' => 'Item aangepast.',\n\t'Item%s has been inserted.' => 'Item%s toegevoegd.',\n\t'Edit' => 'Bewerk',\n\t'Insert' => 'Toevoegen',\n\t'Save and insert next' => 'Opslaan en volgende toevoegen',\n\t'Delete' => 'Verwijderen',\n\t'Database' => 'Database',\n\t'Routines' => 'Procedures',\n\t'Indexes have been altered.' => 'Index aangepast.',\n\t'Indexes' => 'Indexen',\n\t'Alter indexes' => 'Indexen aanpassen',\n\t'Add next' => 'Volgende toevoegen',\n\t'Language' => 'Taal',\n\t'Select' => 'Kies',\n\t'New item' => 'Nieuw item',\n\t'Search' => 'Zoeken',\n\t'Sort' => 'Sorteren',\n\t'descending' => 'Aflopend',\n\t'Limit' => 'Beperk',\n\t'No rows.' => 'Geen rijen.',\n\t'Action' => 'Acties',\n\t'edit' => 'bewerk',\n\t'Page' => 'Pagina',\n\t'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij aangepast.', 'Query uitgevoerd, %d rijen aangepast.'),\n\t'Error in query' => 'Fout in query',\n\t'Execute' => 'Uitvoeren',\n\t'Table' => 'Tabel',\n\t'Foreign keys' => 'Foreign keys',\n\t'Triggers' => 'Triggers',\n\t'View' => 'View',\n\t'Unable to select the table' => 'Onmogelijk tabel te selecteren',\n\t'Invalid CSRF token. Send the form again.' => 'Ongeldig CSRF token. Verstuur het formulier opnieuw.',\n\t'Comment' => 'Commentaar',\n\t'Default values' => 'Standaard waarden',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Geen opdrachten uit te voeren.',\n\t'Unable to upload a file.' => 'Onmogelijk bestand te uploaden.',\n\t'File upload' => 'Bestand uploaden',\n\t'File uploads are disabled.' => 'Bestanden uploaden is uitgeschakeld.',\n\t'Routine has been called, %d row(s) affected.' => array('Procedure uitgevoerd, %d rij geraakt.', 'Procedure uitgevoerd, %d rijen geraakt.'),\n\t'Call' => 'Uitvoeren',\n\t'No extension' => 'Geen extensie',\n\t'None of the supported PHP extensions (%s) are available.' => 'Geen geldige PHP extensies beschikbaar (%s).',\n\t'Session support must be enabled.' => 'Sessies moeten geactiveerd zijn.',\n\t'Session expired, please login again.' => 'Uw sessie is verlopen. Gelieve opnieuw aan te melden.',\n\t'Text length' => 'Tekst lengte',\n\t'Foreign key has been dropped.' => 'Foreign key verwijderd.',\n\t'Foreign key has been altered.' => 'Foreign key aangepast.',\n\t'Foreign key has been created.' => 'Foreign key aangemaakt.',\n\t'Foreign key' => 'Foreign key',\n\t'Target table' => 'Doeltabel',\n\t'Change' => 'Veranderen',\n\t'Source' => 'Bron',\n\t'Target' => 'Doel',\n\t'Add column' => 'Kolom toevoegen',\n\t'Alter' => 'Aanpassen',\n\t'Add foreign key' => 'Foreign key aanmaken',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Index type',\n\t'length' => 'lengte',\n\t'View has been dropped.' => 'View verwijderd.',\n\t'View has been altered.' => 'View aangepast.',\n\t'View has been created.' => 'View aangemaakt.',\n\t'Alter view' => 'View aanpassen',\n\t'Create view' => 'View aanmaken',\n\t'Name' => 'Naam',\n\t'Process list' => 'Proceslijst',\n\t'%d process(es) have been killed.' => array('%d proces gestopt.', '%d processen gestopt.'),\n\t'Kill' => 'Stoppen',\n\t'Parameter name' => 'Parameternaam',\n\t'Database schema' => 'Database schema',\n\t'Create procedure' => 'Procedure aanmaken',\n\t'Create function' => 'Functie aanmaken',\n\t'Routine has been dropped.' => 'Procedure verwijderd.',\n\t'Routine has been altered.' => 'Procedure aangepast.',\n\t'Routine has been created.' => 'Procedure aangemaakt.',\n\t'Alter function' => 'Functie aanpassen',\n\t'Alter procedure' => 'Procedure aanpassen',\n\t'Return type' => 'Return type',\n\t'Add trigger' => 'Trigger aanmaken',\n\t'Trigger has been dropped.' => 'Trigger verwijderd.',\n\t'Trigger has been altered.' => 'Trigger aangepast.',\n\t'Trigger has been created.' => 'Trigger aangemaakt.',\n\t'Alter trigger' => 'Trigger aanpassen',\n\t'Create trigger' => 'Trigger aanmaken',\n\t'Time' => 'Time',\n\t'Event' => 'Event',\n\t'%s version: %s through PHP extension %s' => '%s versie: %s met PHP extensie %s',\n\t'%d row(s)' => array('%d rij', '%d rijen'),\n\t'Remove' => 'Verwijderen',\n\t'Are you sure?' => 'Weet u het zeker?',\n\t'Privileges' => 'Rechten',\n\t'Create user' => 'Gebruiker aanmaken',\n\t'User has been dropped.' => 'Gebruiker verwijderd.',\n\t'User has been altered.' => 'Gebruiker aangepast.',\n\t'User has been created.' => 'Gebruiker aangemaakt.',\n\t'Hashed' => 'Gehashed',\n\t'Column' => 'Kolom',\n\t'Routine' => 'Routine',\n\t'Grant' => 'Toekennen',\n\t'Revoke' => 'Intrekken',\n\t'Logged as: %s' => 'Aangemeld als: %s',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST-data is te groot. Verklein de hoeveelheid data of verhoog de %s configuratie.',\n\t'Move up' => 'Omhoog',\n\t'Move down' => 'Omlaag',\n\t'Export' => 'Exporteren',\n\t'Tables' => 'Tabellen',\n\t'Data' => 'Data',\n\t'Output' => 'Uitvoer',\n\t'open' => 'openen',\n\t'save' => 'opslaan',\n\t'Format' => 'Formaat',\n\t'Functions' => 'Functies',\n\t'Aggregation' => 'Totalen',\n\t'Event has been dropped.' => 'Event werd verwijderd.',\n\t'Event has been altered.' => 'Event werd aangepast.',\n\t'Event has been created.' => 'Event werd aangemaakt.',\n\t'Alter event' => 'Event aanpassen',\n\t'Create event' => 'Event aanmaken',\n\t'Start' => 'Start',\n\t'End' => 'Stop',\n\t'Every' => 'Iedere',\n\t'Status' => 'Status',\n\t'On completion preserve' => 'Bewaren na voltooiing',\n\t'Events' => 'Events',\n\t'Schedule' => 'Schedule',\n\t'At given time' => 'Op aangegeven tijd',\n\t'Save and continue edit' => 'Opslaan en verder bewerken',\n\t'original' => 'origineel',\n\t'Tables have been truncated.' => 'Tabellen werden geleegd.',\n\t'Tables have been moved.' => 'Tabellen werden verplaatst.',\n\t'Tables have been dropped.' => 'Tabellen werden verwijderd.',\n\t'Tables and views' => 'Tabellen en views',\n\t'Engine' => 'Engine',\n\t'Collation' => 'Collatie',\n\t'Data Length' => 'Data lengte',\n\t'Index Length' => 'Index lengte',\n\t'Data Free' => 'Data Vrij',\n\t'Rows' => 'Rijen',\n\t',' => '.',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'Analyseer',\n\t'Optimize' => 'Optimaliseer',\n\t'Check' => 'Controleer',\n\t'Repair' => 'Herstel',\n\t'Truncate' => 'Legen',\n\t'Move to other database' => 'Verplaats naar andere database',\n\t'Move' => 'Verplaats',\n\t'%d item(s) have been affected.' => array('%d item aangepast.', '%d items aangepast.'),\n\t'Whole result' => 'Volledig resultaat',\n\t'Clone' => 'Dupliceer',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maximum aantal velden bereikt. Verhoog %s.',\n\t'Partition by' => 'Partitioneren op',\n\t'Partitions' => 'Partities',\n\t'Partition name' => 'Partitie naam',\n\t'Values' => 'Waarden',\n\t'%d row(s) have been imported.' => array('%d rij werd geïmporteerd.', '%d rijen werden geïmporteerd.'),\n\t'anywhere' => 'overal',\n\t'Import' => 'Importeren',\n\t'Stop on error' => 'Stoppen bij fout',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5-$3-$1',\n\t'[yyyy]-mm-dd' => 'dd-mm-[jjjj]',\n\t'History' => 'Geschiedenis',\n\t'Variables' => 'Variabelen',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Bron- en doelkolommen moeten van hetzelfde data type zijn, er moet een index bestaan op de gekozen kolommen en er moet gerelateerde data bestaan.',\n\t'Relations' => 'Relaties',\n\t'Run file' => 'Bestand uitvoeren',\n\t'Clear' => 'Wissen',\n\t'Maximum allowed file size is %sB.' => 'Maximum toegelaten bestandsgrootte is %sB.',\n\t'Numbers' => 'Getallen',\n\t'Date and time' => 'Datum en tijd',\n\t'Strings' => 'Tekst',\n\t'Binary' => 'Binaire gegevens',\n\t'Lists' => 'Lijsten',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Webserver bestand %s',\n\t'File does not exist.' => 'Bestand niet gevonden.',\n\t'%d in total' => '%d in totaal',\n\t'Permanent login' => 'Blijf aangemeld',\n\t'Search data in tables' => 'Zoeken in database',\n\t'Schema' => 'Schema',\n\t'Alter schema' => 'Schema wijzigen',\n\t'Create schema' => 'Schema maken',\n\t'Schema has been dropped.' => 'Schema verwijderd.',\n\t'Schema has been created.' => 'Schema aangemaakt.',\n\t'Schema has been altered.' => 'Schema gewijzigd.',\n\t'Sequences' => 'Sequences',\n\t'Create sequence' => 'Sequence maken',\n\t'Alter sequence' => 'Sequence wijzigen',\n\t'Sequence has been dropped.' => 'Sequence verwijderd.',\n\t'Sequence has been created.' => 'Sequence aangemaakt.',\n\t'Sequence has been altered.' => 'Sequence gewijzigd.',\n\t'User types' => 'Gebruikersgedefiniëerde types',\n\t'Create type' => 'Type maken',\n\t'Alter type' => 'Type wijzigen',\n\t'Type has been dropped.' => 'Type verwijderd.',\n\t'Type has been created.' => 'Type aangemaakt.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klik op een waarde om deze te bewerken.',\n\t'Use edit link to modify this value.' => 'Gebruik de link \\'bewerk\\' om deze waarde te wijzigen.',\n\t'last' => 'laatste',\n\t'From server' => 'Van server',\n\t'System' => 'Databasesysteem',\n\t'Select data' => 'Gegevens selecteren',\n\t'Show structure' => 'Toon structuur',\n\t'empty' => 'leeg',\n\t'Network' => 'Netwerk',\n\t'Geometry' => 'Geometrie',\n\t'File exists.' => 'Bestand bestaat reeds.',\n\t'%d query(s) executed OK.' => array('%d query succesvol uitgevoerd.', '%d querys succesvol uitgevoerd.'),\n\t'Show only errors' => 'Enkel fouten tonen',\n\t'Refresh' => 'Vernieuwen',\n\t'Invalid schema.' => 'Ongeldig schema.',\n\t'Please use one of the extensions %s.' => 'Gebruik 1 van volgende extensies: %s.',\n\t'now' => 'nu',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'De tabellen zijn gekopieerd.',\n\t'Copy' => 'Kopieren',\n\t'Permanent link' => 'Permanente link',\n\t'Edit all' => 'Alles bewerken',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Drop %s?' => 'Verwijder %s?',\n\t'Tables have been optimized.' => 'Tabellen zijn geoptimaliseerd.',\n\t'Materialized view' => 'Materialized view',\n\t'Vacuum' => 'Vacuum',\n\t'Selected' => 'Geselecteerd',\n\t'overwrite' => 'overschrijven',\n\t'DB' => 'DB',\n\t'File must be in UTF-8 encoding.' => 'Het bestand moet met UTF-8 encodering zijn opgeslagen.',\n\t'Modify' => 'Aanpassen',\n\t'Load more data' => 'Meer data inladen',\n\t'Loading' => 'Aan het laden',\n\t'ATTACH queries are not supported.' => 'ATTACH queries worden niet ondersteund.',\n\t'Warnings' => 'Waarschuwingen',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Rijen beperken',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer ondersteunt geen toegang tot databases zonder wachtwoord, <a href=\"https://www.adminer.org/en/password/\"%s>meer informatie</a>.',\n\t'Default value' => 'Standaardwaarde',\n\t'Full table scan' => 'Full table scan',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuut.', 'Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuten.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Master wachtwoord verlopen. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementeer</a> de %s methode om het permanent te maken.',\n\t'The action will be performed after successful login with the same credentials.' => 'Deze actie zal uitgevoerd worden na het succesvol aanmelden met dezelfde gebruikersgegevens.',\n\t'Connecting to privileged ports is not allowed.' => 'Verbindingen naar geprivilegieerde poorten is niet toegestaan.',\n\t'There is a space in the input password which might be the cause.' => 'Er staat een spatie in het wachtwoord, wat misschien de oorzaak is.',\n\t'If you did not send this request from Adminer then close this page.' => 'Als u deze actie niet via Adminer hebt gedaan, gelieve deze pagina dan te sluiten.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'U kan een groot SQL-bestand uploaden via FTP en het importeren via de server.',\n\t'Size' => 'Grootte',\n\t'Compute' => 'Bereken',\n\t'You are offline.' => 'U bent offline.',\n\t'You have no privileges to update this table.' => 'U bent niet gemachtigd om deze tabel aan te passen.',\n\t'Saving' => 'Opslaan',\n\t'Unknown error.' => 'Onbekende fout.',\n\t'Database does not support password.' => 'Database ondersteunt het wachtwoord niet.',\n\t'Disable %s or enable %s or %s extensions.' => 'Schakel %s uit or schakel extensies %s of %s in.',\n\t'yes' => 'ja',\n\t'no' => 'neen',\n);\n\n// run `php ../../lang.php nl` to update this file\n"
  },
  {
    "path": "adminer/lang/no.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'System' => 'System',\n\t'Server' => 'Server',\n\t'Username' => 'Brukernavn',\n\t'Password' => 'Passord',\n\t'Permanent login' => 'Permanent login',\n\t'Login' => 'Logg inn',\n\t'Logout' => 'Logg ut',\n\t'Logged as: %s' => 'Logget inn som: %s',\n\t'Logout successful.' => 'Utlogging vellykket.',\n\t'Invalid credentials.' => 'Ugylding innloggingsinformasjon.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Master-passord er utløpt. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementer</a> en metode for %s for å gjøre det permanent.',\n\t'Language' => 'Språk',\n\t'Invalid CSRF token. Send the form again.' => 'Ugylding CSRF-token - Send inn skjemaet igjen.',\n\t'No extension' => 'Ingen utvidelse',\n\t'None of the supported PHP extensions (%s) are available.' => 'Ingen av de støttede PHP-utvidelsene (%s) er tilgjengelige.',\n\t'Session support must be enabled.' => 'Økt-støtte må være skrudd på.',\n\t'Session expired, please login again.' => 'Økt utløpt - vennligst logg inn på nytt.',\n\t'%s version: %s through PHP extension %s' => '%s versjon: %s via PHP-utvidelse %s',\n\t'Refresh' => 'Gjenoppfrisk',\n\t'ltr' => 'venstre-til-høyre',\n\t'Privileges' => 'Privilegier',\n\t'Create user' => 'Lag bruker',\n\t'User has been dropped.' => 'Bruker slettet.',\n\t'User has been altered.' => 'Bruker endret.',\n\t'User has been created.' => 'Bruker opprettet.',\n\t'Hashed' => 'Hashet',\n\t'Column' => 'Kolonne',\n\t'Routine' => 'Rutine',\n\t'Grant' => 'Gi privilegier',\n\t'Revoke' => 'Trekk tilbake',\n\t'Process list' => 'Prosessliste',\n\t'%d process(es) have been killed.' => array('%d prosess avsluttet.', '%d prosesser avsluttet.'),\n\t'Kill' => 'Avslutt',\n\t'Variables' => 'Variabler',\n\t'Status' => 'Status',\n\t'SQL command' => 'SQL-kommando',\n\t'%d query(s) executed OK.' => array('%d kall utført OK.', '%d kall utført OK.'),\n\t'Query executed OK, %d row(s) affected.' => array('Kall utført OK, %d rad påvirket.', 'Kall utført OK, %d rader påvirket.'),\n\t'No commands to execute.' => 'Ingen kommandoer å utføre.',\n\t'Error in query' => 'Feil i forespørsel',\n\t'Execute' => 'Kjør',\n\t'Stop on error' => 'Stopp ved feil',\n\t'Show only errors' => 'Vis bare feil',\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historie',\n\t'Clear' => 'Tøm skjema',\n\t'Edit all' => 'Rediger alle',\n\t'File upload' => 'Filopplasting',\n\t'From server' => 'Fra server',\n\t'Webserver file %s' => 'Webserver-fil %s',\n\t'Run file' => 'Kjør fil',\n\t'File does not exist.' => 'Filen eksisterer ikke.',\n\t'File uploads are disabled.' => 'Filopplastinger ikke tillatt.',\n\t'Unable to upload a file.' => 'Kunne ikke laste opp fil.',\n\t'Maximum allowed file size is %sB.' => 'Maksimum tillatte filstørrelse er %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'For stor datamengde i skjemaet. Reduser datamengden, eller øk størrelsen på %s-konfigurasjonsdirektivet.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Du kan laste opp en stor SQL-fil via FTP og importere den fra serveren.',\n\t'Export' => 'Eksport',\n\t'Output' => 'Resultat',\n\t'open' => 'åpne',\n\t'save' => 'lagre',\n\t'Format' => 'Format',\n\t'Data' => 'Data',\n\t'Database' => 'Database',\n\t'Use' => 'Bruk',\n\t'Select database' => 'Velg database',\n\t'Invalid database.' => 'Ugyldig database.',\n\t'Database has been dropped.' => 'Databasen har blitt slettet.',\n\t'Databases have been dropped.' => 'Databasene har blitt slettet.',\n\t'Database has been created.' => 'Databasen er opprettet.',\n\t'Database has been renamed.' => 'Databasen har fått nytt navn.',\n\t'Database has been altered.' => 'Databasen er endret.',\n\t'Alter database' => 'Endre database',\n\t'Create database' => 'Opprett database',\n\t'Database schema' => 'Databaseskjema',\n\t'Permanent link' => 'Permanent lenke',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Motor',\n\t'Collation' => 'Tekstsortering',\n\t'Data Length' => 'Datalengde',\n\t'Index Length' => 'Indekslengde',\n\t'Data Free' => 'Frie data',\n\t'Rows' => 'Rader',\n\t'%d in total' => '%d totalt',\n\t'Analyze' => 'Analyser',\n\t'Optimize' => 'Optimaliser',\n\t'Vacuum' => 'Støvsug',\n\t'Check' => 'Sjekk',\n\t'Repair' => 'Reparer',\n\t'Truncate' => 'Avkort',\n\t'Tables have been truncated.' => 'Tabellene har blitt avkortet.',\n\t'Move to other database' => 'Flytt til annen database',\n\t'Move' => 'Flytt',\n\t'Tables have been moved.' => 'Tabellene har blitt flyttet.',\n\t'Copy' => 'Kopier',\n\t'Tables have been copied.' => 'Tabellene har blitt kopiert.',\n\t'Routines' => 'Rutiner',\n\t'Routine has been called, %d row(s) affected.' => array('Rutinen er utført, %d rad påvirket.', 'Rutinen er utført, %d rader påvirket.'),\n\t'Call' => 'Kall',\n\t'Parameter name' => 'Parameternavn',\n\t'Create procedure' => 'Opprett prosedyre',\n\t'Create function' => 'Opprett funksjon',\n\t'Routine has been dropped.' => 'Rutinen er slettet.',\n\t'Routine has been altered.' => 'Rutinen er endret.',\n\t'Routine has been created.' => 'Rutinen er opprettet.',\n\t'Alter function' => 'Endre funksjon',\n\t'Alter procedure' => 'Endre prosedyre',\n\t'Return type' => 'Returtype',\n\t'Events' => 'Eventer',\n\t'Event has been dropped.' => 'Eventen er slettet.',\n\t'Event has been altered.' => 'Eventen er endret.',\n\t'Event has been created.' => 'Eventen er opprettet.',\n\t'Alter event' => 'Endre event',\n\t'Create event' => 'Opprett event',\n\t'At given time' => 'På gitte tid',\n\t'Every' => 'Hver',\n\t'Schedule' => 'Tidsplan',\n\t'Start' => 'Start',\n\t'End' => 'Slutt',\n\t'On completion preserve' => 'Ved fullførelse bevar',\n\t'Tables' => 'Tabeller',\n\t'Tables and views' => 'Tabeller og views',\n\t'Table' => 'Tabell',\n\t'No tables.' => 'Ingen tabeller.',\n\t'Alter table' => 'Endre tabell',\n\t'Create table' => 'Opprett tabell',\n\t'Table has been dropped.' => 'Tabellen er slettet.',\n\t'Tables have been dropped.' => 'Tabellene er slettet.',\n\t'Tables have been optimized.' => 'Tabellene er blitt optimalisert.',\n\t'Table has been altered.' => 'Tabellen er endret.',\n\t'Table has been created.' => 'Tabellen er opprettet.',\n\t'Table name' => 'Tabellnavn',\n\t'Show structure' => 'Vis struktur',\n\t'engine' => 'mottor',\n\t'collation' => 'sortering',\n\t'Column name' => 'Kolonnenavn',\n\t'Type' => 'Type',\n\t'Length' => 'Lengde',\n\t'Auto Increment' => 'Autoinkrement',\n\t'Options' => 'Valg',\n\t'Comment' => 'Kommentarer',\n\t'Default values' => 'Standardverdier',\n\t'Drop' => 'Dropp',\n\t'Are you sure?' => 'Er du sikker?',\n\t'Move up' => 'Flytt opp',\n\t'Move down' => 'Flytt ned',\n\t'Remove' => 'Fjern',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimum antall feltnavn overskredet - venligst øk %s.',\n\t'Partition by' => 'Partisjoner ved',\n\t'Partitions' => 'Partisjoner',\n\t'Partition name' => 'Partisjonsnavn',\n\t'Values' => 'Verdier',\n\t'View' => 'View',\n\t'View has been dropped.' => 'Viewet er slettet.',\n\t'View has been altered.' => 'Viewet er endret.',\n\t'View has been created.' => 'Viewet er opprettet.',\n\t'Alter view' => 'Endre view',\n\t'Create view' => 'Lag nytt view',\n\t'Indexes' => 'Indekser',\n\t'Indexes have been altered.' => 'Indeksene er endret.',\n\t'Alter indexes' => 'Endre indekser',\n\t'Add next' => 'Legg til neste',\n\t'Index Type' => 'Indekstype',\n\t'length' => 'lengde',\n\t'Foreign keys' => 'Fremmednøkler',\n\t'Foreign key' => 'Fremmednøkkel',\n\t'Foreign key has been dropped.' => 'Fremmednøkkelen er slettet.',\n\t'Foreign key has been altered.' => 'Fremmednøkkelen er endret.',\n\t'Foreign key has been created.' => 'Fremmednøkkelen er opprettet.',\n\t'Target table' => 'Måltabell',\n\t'Change' => 'Endre',\n\t'Source' => 'Kilde',\n\t'Target' => 'Mål',\n\t'Add column' => 'Legg til kolonne',\n\t'Alter' => 'Endre',\n\t'Add foreign key' => 'Legg til fremmednøkkel',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kilde- og mål-kolonner må ha samme datatype, det må være en indeks på mål-kolonnen, og dataene som refereres til må eksistere.',\n\t'Triggers' => 'Triggere',\n\t'Add trigger' => 'Legg til trigger',\n\t'Trigger has been dropped.' => 'Triggeren er slettet.',\n\t'Trigger has been altered.' => 'Triggeren er endret.',\n\t'Trigger has been created.' => 'Triggeren er opprettet.',\n\t'Alter trigger' => 'Endre trigger',\n\t'Create trigger' => 'Opprett trigger',\n\t'Time' => 'Tid',\n\t'Event' => 'Hendelse',\n\t'Name' => 'Navn',\n\t'select' => 'Vis',\n\t'Select' => 'Velg',\n\t'Select data' => 'Velg data',\n\t'Functions' => 'Funksjoner',\n\t'Aggregation' => 'Sammenfatning',\n\t'Search' => 'Søk',\n\t'anywhere' => 'hvorsomhelst',\n\t'Search data in tables' => 'Søk data i tabeller',\n\t'Sort' => 'Sorter',\n\t'descending' => 'minkende',\n\t'Limit' => 'Skranke',\n\t'Text length' => 'Tekstlengde',\n\t'Action' => 'Handling',\n\t'Full table scan' => 'Full tabell-scan',\n\t'Unable to select the table' => 'Kan ikke velge tabellen',\n\t'No rows.' => 'Ingen rader.',\n\t'%d row(s)' => array('%d rad', '%d rader'),\n\t'Page' => 'Side',\n\t'last' => 'siste',\n\t'Load more data' => 'Last mer data',\n\t'Loading' => 'Laster',\n\t'Whole result' => 'Hele resultatet',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'Import' => 'Importer',\n\t'%d row(s) have been imported.' => array('%d rad er importert.', '%d rader er importert.'),\n\t'File must be in UTF-8 encoding.' => 'Filen må være i UTF8-tegnkoding.',\n\t'Modify' => 'Endre',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klikk på en verdi for å endre den.',\n\t'Use edit link to modify this value.' => 'Bruk rediger-lengde for å endre dennne verdien.',\n\t'Item%s has been inserted.' => 'Rad%s er satt inn.',\n\t'Item has been deleted.' => 'Raden er slettet.',\n\t'Item has been updated.' => 'Raden er oppdatert.',\n\t'%d item(s) have been affected.' => array('%d rad påvirket.', '%d rader påvirket.'),\n\t'New item' => 'Ny rad',\n\t'original' => 'original',\n\t'empty' => 'tom',\n\t'edit' => 'rediger',\n\t'Edit' => 'Rediger',\n\t'Insert' => 'Sett inn',\n\t'Save' => 'Lagre',\n\t'Save and continue edit' => 'Lagre og fortsett å redigere',\n\t'Save and insert next' => 'Lagre og sett inn neste',\n\t'Selected' => 'Valgt',\n\t'Clone' => 'Klon',\n\t'Delete' => 'Slett',\n\t'You have no privileges to update this table.' => 'Du mangler rettighetene som trengs for å endre denne tabellen.',\n\t'Numbers' => 'Nummer',\n\t'Date and time' => 'Dato og tid',\n\t'Strings' => 'Strenger',\n\t'Binary' => 'Binære',\n\t'Lists' => 'Lister',\n\t'Network' => 'Nettverk',\n\t'Geometry' => 'Geometri',\n\t'Relations' => 'Relasjoner',\n\t'Editor' => 'Redigering',\n\t'$1-$3-$5' => '$6/$4 $1',\n\t'[yyyy]-mm-dd' => 'd/m [åååå]',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'nå',\n\t'yes' => 'ja',\n\t'no' => 'nei',\n\t'File exists.' => 'Filen finnes.',\n\t'Please use one of the extensions %s.' => 'Vennligst bruk en av filendelsene %s.',\n\t'Alter schema' => 'Endre skjema',\n\t'Create schema' => 'Opprett skjema',\n\t'Schema has been dropped.' => 'Skjemaet er slettet.',\n\t'Schema has been created.' => 'Skjemaet er opprettet.',\n\t'Schema has been altered.' => 'Skjemaet er endret.',\n\t'Schema' => 'Skjema',\n\t'Invalid schema.' => 'Ugylding skjema.',\n\t'Sequences' => 'Sekvenser',\n\t'Create sequence' => 'Opprett sekvens',\n\t'Sequence has been dropped.' => 'Sekvensen er slettet.',\n\t'Sequence has been created.' => 'Sekvensen er opprettet.',\n\t'Sequence has been altered.' => 'Sekvensen er endret.',\n\t'Alter sequence' => 'Endre sekvens',\n\t'User types' => 'Brukertyper',\n\t'Create type' => 'Opprett type',\n\t'Type has been dropped.' => 'Type er slettet.',\n\t'Type has been created.' => 'Type er opprettet.',\n\t'Alter type' => 'Endre type',\n\t'Saving' => 'Lagrer',\n);\n\n// run `php ../../lang.php no` to update this file\n"
  },
  {
    "path": "adminer/lang/pl.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Rodzaj bazy',\n\t'Server' => 'Serwer',\n\t'Username' => 'Użytkownik',\n\t'Password' => 'Hasło',\n\t'Permanent login' => 'Zapamiętaj sesję',\n\t'Login' => 'Zaloguj się',\n\t'Logout' => 'Wyloguj się',\n\t'Logged as: %s' => 'Zalogowany jako: %s',\n\t'Logout successful.' => 'Wylogowano pomyślnie.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ <a href=\"https://www.adminer.org/pl/donation/\">dotację</a>.',\n\t'Invalid credentials.' => 'Nieprawidłowe dane logowania.',\n\t'There is a space in the input password which might be the cause.' => 'W haśle wejściowym znajduje się spacja, która może być przyczyną.',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer nie obsługuje dostępu do bazy danych bez hasła, <a href=\"https://www.adminer.org/pl/password/\"%s>więcej informacji</a>.',\n\t'Database does not support password.' => 'Baza danych nie obsługuje hasła.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href=\"https://www.adminer.org/pl/extension/\"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',\n\t'Language' => 'Język',\n\t'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',\n\t'If you did not send this request from Adminer then close this page.' => 'Jeżeli nie wywołałeś tej strony z Adminera, zamknij to okno.',\n\t'No extension' => 'Brak rozszerzenia',\n\t'None of the supported PHP extensions (%s) are available.' => 'Żadne z rozszerzeń PHP umożliwiających połączenie się z bazą danych (%s) nie jest dostępne.',\n\t'Connecting to privileged ports is not allowed.' => 'Łączenie do portów uprzywilejowanych jest niedozwolone.',\n\t'Disable %s or enable %s or %s extensions.' => 'Wyłącz %s lub włącz rozszerzenia %s lub %s.',\n\t'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.',\n\t'Session expired, please login again.' => 'Sesja wygasła, zaloguj się ponownie.',\n\t'The action will be performed after successful login with the same credentials.' => 'Czynność zostanie wykonana po pomyślnym zalogowaniu przy użyciu tych samych danych logowania.',\n\t'%s version: %s through PHP extension %s' => 'Wersja %s: %s za pomocą %s',\n\t'Refresh' => 'Odśwież',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Uprawnienia użytkowników',\n\t'Create user' => 'Dodaj użytkownika',\n\t'User has been dropped.' => 'Użytkownik został usunięty.',\n\t'User has been altered.' => 'Użytkownik został zmieniony.',\n\t'User has been created.' => 'Użytkownik został dodany.',\n\t'Hashed' => 'Zahashowane',\n\t'Column' => 'Kolumna',\n\t'Columns' => 'Kolumny',\n\t'Routine' => 'Procedura',\n\t'Grant' => 'Uprawnienia',\n\t'Revoke' => 'Usuń uprawnienia',\n\n\t'Process list' => 'Lista procesów',\n\t'%d process(es) have been killed.' => array('Przerwano %d wątek.', 'Przerwano %d wątki.', 'Przerwano %d wątków.'),\n\t'Kill' => 'Przerwij wykonywanie',\n\n\t'Variables' => 'Zmienne',\n\t'Status' => 'Status',\n\n\t'SQL command' => 'Zapytanie SQL',\n\t'%d query(s) executed OK.' => array('Pomyślnie wykonano %d zapytanie.', 'Pomyślnie wykonano %d zapytania.', 'Pomyślnie wykonano %d zapytań.'),\n\t'Query executed OK, %d row(s) affected.' => array('Zapytanie wykonane pomyślnie, zmieniono %d rekord.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordy.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordów.'),\n\t'No commands to execute.' => 'Nic do wykonania.',\n\t'Error in query' => 'Błąd w zapytaniu',\n\t'Unknown error.' => 'Nieznany błąd.',\n\t'Warnings' => 'Ostrzeżenia',\n\t'ATTACH queries are not supported.' => 'Zapytania ATTACH są niewspierane.',\n\t'Execute' => 'Wykonaj',\n\t'Stop on error' => 'Zatrzymaj w przypadku błędu',\n\t'Show only errors' => 'Pokaż tylko błędy',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historia',\n\t'Clear' => 'Wyczyść',\n\t'Edit all' => 'Edytuj wszystkie',\n\n\t'File upload' => 'Wgranie pliku',\n\t'From server' => 'Z serwera',\n\t'Webserver file %s' => 'Plik %s na serwerze',\n\t'Run file' => 'Uruchom z pliku',\n\t'File does not exist.' => 'Plik nie istnieje.',\n\t'Increase %s.' => 'Zwiększ %s.',\n\t'File uploads are disabled.' => 'Wgrywanie plików jest wyłączone.',\n\t'Unable to upload a file.' => 'Wgranie pliku było niemożliwe.',\n\t'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Przesłano zbyt dużo danych. Zmniejsz objętość danych lub zwiększ zmienną konfiguracyjną %s.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Większe pliki SQL możesz wgrać na serwer poprzez FTP przed zaimportowaniem.',\n\t'You are offline.' => 'Jesteś offline.',\n\n\t'Export' => 'Eksportuj',\n\t'Output' => 'Rezultat',\n\t'open' => 'otwórz',\n\t'save' => 'zapisz',\n\t'Saving' => 'Zapisywanie',\n\t'Format' => 'Format',\n\t'Data' => 'Dane',\n\n\t'Database' => 'Baza danych',\n\t'DB' => 'BD',\n\t'Use' => 'Wybierz',\n\t'Select database' => 'Wybierz bazę danych',\n\t'Invalid database.' => 'Nie znaleziono bazy danych.',\n\t'Database has been dropped.' => 'Baza danych została usunięta.',\n\t'Databases have been dropped.' => 'Bazy danych zostały usunięte.',\n\t'Database has been created.' => 'Baza danych została utworzona.',\n\t'Database has been renamed.' => 'Nazwa bazy danych została zmieniona.',\n\t'Database has been altered.' => 'Baza danych została zmieniona.',\n\t'Alter database' => 'Zmień bazę danych',\n\t'Create database' => 'Utwórz bazę danych',\n\t'Database schema' => 'Schemat bazy danych',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Trwały link',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Składowanie',\n\t'Collation' => 'Porównywanie znaków',\n\t'Data Length' => 'Rozmiar danych',\n\t'Index Length' => 'Rozmiar indeksów',\n\t'Data Free' => 'Wolne miejsce',\n\t'Rows' => 'Liczba rekordów',\n\t'%d in total' => '%d w sumie',\n\t'Analyze' => 'Analizuj',\n\t'Optimize' => 'Optymalizuj',\n\t'Vacuum' => 'Wyczyść',\n\t'Check' => 'Sprawdź',\n\t'Repair' => 'Napraw',\n\t'Truncate' => 'Opróżnij',\n\t'Tables have been truncated.' => 'Tabele zostały opróżnione.',\n\t'Move to other database' => 'Przenieś do innej bazy danych',\n\t'Move' => 'Przenieś',\n\t'Tables have been moved.' => 'Tabele zostały przeniesione.',\n\t'Copy' => 'Kopiuj',\n\t'Tables have been copied.' => 'Tabele zostały skopiowane.',\n\t'overwrite' => 'nadpisz',\n\n\t'Routines' => 'Procedury i funkcje',\n\t'Routine has been called, %d row(s) affected.' => array('Procedura została uruchomiona, zmieniono %d rekord.', 'Procedura została uruchomiona, zmieniono %d rekordy.', 'Procedura została uruchomiona, zmieniono %d rekordów.'),\n\t'Call' => 'Uruchom',\n\t'Parameter name' => 'Nazwa parametru',\n\t'Create procedure' => 'Utwórz procedurę',\n\t'Create function' => 'Utwórz funkcję',\n\t'Routine has been dropped.' => 'Procedura została usunięta.',\n\t'Routine has been altered.' => 'Procedura została zmieniona.',\n\t'Routine has been created.' => 'Procedura została utworzona.',\n\t'Alter function' => 'Zmień funkcję',\n\t'Alter procedure' => 'Zmień procedurę',\n\t'Return type' => 'Zwracany typ',\n\n\t'Events' => 'Wydarzenia',\n\t'Event has been dropped.' => 'Wydarzenie zostało usunięte.',\n\t'Event has been altered.' => 'Wydarzenie zostało zmienione.',\n\t'Event has been created.' => 'Wydarzenie zostało utworzone.',\n\t'Alter event' => 'Zmień wydarzenie',\n\t'Create event' => 'Utwórz wydarzenie',\n\t'At given time' => 'O danym czasie',\n\t'Every' => 'Wykonuj co',\n\t'Schedule' => 'Harmonogram',\n\t'Start' => 'Początek',\n\t'End' => 'Koniec',\n\t'On completion preserve' => 'Nie kasuj wydarzenia po przeterminowaniu',\n\n\t'Tables' => 'Tabele',\n\t'Tables and views' => 'Tabele i perspektywy',\n\t'Table' => 'Tabela',\n\t'No tables.' => 'Brak tabel.',\n\t'Alter table' => 'Zmień tabelę',\n\t'Create table' => 'Utwórz tabelę',\n\t'Table has been dropped.' => 'Tabela została usunięta.',\n\t'Tables have been dropped.' => 'Tabele zostały usunięte.',\n\t'Tables have been optimized.' => 'Tabele zostały zoptymalizowane.',\n\t'Table has been altered.' => 'Tabela została zmieniona.',\n\t'Table has been created.' => 'Tabela została utworzona.',\n\t'Table name' => 'Nazwa tabeli',\n\t'Show structure' => 'Struktura tabeli',\n\t'engine' => 'składowanie',\n\t'collation' => 'porównywanie znaków',\n\t'Column name' => 'Nazwa kolumny',\n\t'Type' => 'Typ',\n\t'Length' => 'Długość',\n\t'Auto Increment' => 'Automatyczny przyrost',\n\t'Options' => 'Opcje',\n\t'Comment' => 'Komentarz',\n\t'Default value' => 'Wartość domyślna',\n\t'Default values' => 'Wartości domyślne',\n\t'Drop' => 'Usuń',\n\t'Drop %s?' => 'Usunąć %s?',\n\t'Are you sure?' => 'Czy na pewno?',\n\t'Size' => 'Rozmiar',\n\t'Compute' => 'Oblicz',\n\t'Move up' => 'Przesuń w górę',\n\t'Move down' => 'Przesuń w dół',\n\t'Remove' => 'Usuń',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s.',\n\n\t'Partition by' => 'Partycjonowanie',\n\t'Partitions' => 'Partycje',\n\t'Partition name' => 'Nazwa partycji',\n\t'Values' => 'Wartości',\n\t'Inherits from' => 'Dziedziczy po',\n\t'Inherited by' => 'Odziedziczone przez',\n\n\t'View' => 'Perspektywa',\n\t'Materialized view' => 'Zmaterializowana perspektywa',\n\t'View has been dropped.' => 'Perspektywa została usunięta.',\n\t'View has been altered.' => 'Perspektywa została zmieniona.',\n\t'View has been created.' => 'Perspektywa została utworzona.',\n\t'Alter view' => 'Zmień perspektywę',\n\t'Create view' => 'Utwórz perspektywę',\n\n\t'Indexes' => 'Indeksy',\n\t'Indexes have been altered.' => 'Indeksy zostały zmienione.',\n\t'Alter indexes' => 'Zmień indeksy',\n\t'Add next' => 'Dodaj następny',\n\t'Index Type' => 'Typ indeksu',\n\t'length' => 'długość',\n\t'Algorithm' => 'Algorytm',\n\t'Condition' => 'Warunek',\n\n\t'Foreign keys' => 'Klucze obce',\n\t'Foreign key' => 'Klucz obcy',\n\t'Foreign key has been dropped.' => 'Klucz obcy został usunięty.',\n\t'Foreign key has been altered.' => 'Klucz obcy został zmieniony.',\n\t'Foreign key has been created.' => 'Klucz obcy został utworzony.',\n\t'Target table' => 'Tabela docelowa',\n\t'Change' => 'Zmień',\n\t'Source' => 'Źródło',\n\t'Target' => 'Cel',\n\t'Add column' => 'Dodaj kolumnę',\n\t'Alter' => 'Zmień',\n\t'Add foreign key' => 'Dodaj klucz obcy',\n\t'ON DELETE' => 'W przypadku usunięcia',\n\t'ON UPDATE' => 'W przypadku zmiany',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Źródłowa i docelowa kolumna muszą być tego samego typu, powinien istnieć indeks na docelowej kolumnie oraz muszą istnieć dane referencyjne.',\n\n\t'Triggers' => 'Wyzwalacze',\n\t'Add trigger' => 'Dodaj wyzwalacz',\n\t'Trigger has been dropped.' => 'Wyzwalacz został usunięty.',\n\t'Trigger has been altered.' => 'Wyzwalacz został zmieniony.',\n\t'Trigger has been created.' => 'Wyzwalacz został utworzony.',\n\t'Alter trigger' => 'Zmień wyzwalacz',\n\t'Create trigger' => 'Utwórz wyzwalacz',\n\t'Time' => 'Czas',\n\t'Event' => 'Wydarzenie',\n\t'Name' => 'Nazwa',\n\n\t'select' => 'przeglądaj',\n\t'Select' => 'pokaż',\n\t'Select data' => 'Pokaż dane',\n\t'Functions' => 'Funkcje',\n\t'Aggregation' => 'Agregacje',\n\t'Search' => 'Szukaj',\n\t'anywhere' => 'gdziekolwiek',\n\t'Search data in tables' => 'Wyszukaj we wszystkich tabelach',\n\t'Sort' => 'Sortuj',\n\t'descending' => 'malejąco',\n\t'Limit' => 'Limit',\n\t'Limit rows' => 'Limit rekordów',\n\t'Text length' => 'Długość tekstu',\n\t'Action' => 'Czynność',\n\t'Full table scan' => 'Wymaga pełnego przeskanowania tabeli',\n\t'Unable to select the table' => 'Nie udało się pobrać danych z tabeli',\n\t'No rows.' => 'Brak rekordów.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d rekord', '%d rekordy', '%d rekordów'),\n\t'Page' => 'Strona',\n\t'last' => 'ostatni',\n\t'Load more data' => 'Wczytaj więcej danych',\n\t'Loading' => 'Wczytywanie',\n\t'Whole result' => 'Wybierz wszystkie',\n\t'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),\n\n\t'Import' => 'Importuj',\n\t'%d row(s) have been imported.' => array('%d rekord został zaimportowany.', '%d rekordy zostały zaimportowane.', '%d rekordów zostało zaimportowanych.'),\n\t'File must be in UTF-8 encoding.' => 'Kodowanie pliku musi być ustawione na UTF-8.',\n\n\t// in-place editing in select\n\t'Modify' => 'Zmień',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+kliknij wartość, aby ją edytować.',\n\t'Use edit link to modify this value.' => 'Użyj linku edycji, aby zmienić tę wartość.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Rekord%s został dodany.',\n\t'Item has been deleted.' => 'Rekord został usunięty.',\n\t'Item has been updated.' => 'Rekord został zaktualizowany.',\n\t'%d item(s) have been affected.' => array('Zmieniono %d rekord.', 'Zmieniono %d rekordy.', 'Zmieniono %d rekordów.'),\n\t'New item' => 'Nowy rekord',\n\t'original' => 'bez zmian',\n\t// label for value '' in enum data type\n\t'empty' => 'puste',\n\t'edit' => 'edytuj',\n\t'Edit' => 'Edytuj',\n\t'Insert' => 'Dodaj',\n\t'Save' => 'Zapisz zmiany',\n\t'Save and continue edit' => 'Zapisz i kontynuuj edycję',\n\t'Save and insert next' => 'Zapisz i dodaj następny',\n\t'Selected' => 'Zaznaczone',\n\t'Clone' => 'Duplikuj',\n\t'Delete' => 'Usuń',\n\t'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli.',\n\n\t// data type descriptions\n\t'Numbers' => 'Numeryczne',\n\t'Date and time' => 'Data i czas',\n\t'Strings' => 'Tekstowe',\n\t'Binary' => 'Binarne',\n\t'Lists' => 'Listy',\n\t'Network' => 'Sieć',\n\t'Geometry' => 'Geometria',\n\t'Relations' => 'Relacje',\n\n\t'Editor' => 'Edytor',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$6.$4.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'd.m.[rrrr]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'teraz',\n\t'yes' => 'tak',\n\t'no' => 'nie',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Plik już istnieje.',\n\t'Please use one of the extensions %s.' => 'Proszę użyć jednego z rozszerzeń: %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Zmień schemat',\n\t'Create schema' => 'Utwórz schemat',\n\t'Schema has been dropped.' => 'Schemat został usunięty.',\n\t'Schema has been created.' => 'Schemat został utworzony.',\n\t'Schema has been altered.' => 'Schemat został zmieniony.',\n\t'Schema' => 'Schemat',\n\t'Invalid schema.' => 'Nieprawidłowy schemat.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Sekwencje',\n\t'Create sequence' => 'Utwórz sekwencję',\n\t'Sequence has been dropped.' => 'Sekwencja została usunięta.',\n\t'Sequence has been created.' => 'Sekwencja została utworzona.',\n\t'Sequence has been altered.' => 'Sekwencja została zmieniona.',\n\t'Alter sequence' => 'Zmień sekwencję',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Typy użytkownika',\n\t'Create type' => 'Utwórz typ',\n\t'Type has been dropped.' => 'Typ został usunięty.',\n\t'Type has been created.' => 'Typ został utworzony.',\n\t'Alter type' => 'Zmień typ',\n\n\t// Table check constraints\n\t'Checks' => 'Kontrole',\n\t'Create check' => 'Utwórz kontrolę',\n\t'Alter check' => 'Zmień kontrolę',\n\t'Check has been created.' => 'Kontrola została utworzona.',\n\t'Check has been altered.' => 'Kontrola została zmieniona.',\n\t'Check has been dropped.' => 'Kontrola została usunięta.',\n\n\t'Loaded plugins' => 'Wczytane wtyczki',\n\t'%s must <a%s>return an array</a>.' => '%s musi <a%s>zwrócić tablicę</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Skonfiguruj</a> %s w %s.',\n\t'screenshot' => 'zrzut ekranu',\n);\n\n// run `php ../../lang.php pl` to update this file\n"
  },
  {
    "path": "adminer/lang/pt-br.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Entrar',\n\t'Logout successful.' => 'Saída bem sucedida.',\n\t'Invalid credentials.' => 'Identificação inválida.',\n\t'Server' => 'Servidor',\n\t'Username' => 'Usuário',\n\t'Password' => 'Senha',\n\t'Select database' => 'Selecionar Base de dados',\n\t'Invalid database.' => 'Base de dados inválida.',\n\t'Table has been dropped.' => 'A Tabela foi eliminada.',\n\t'Table has been altered.' => 'A Tabela foi alterada.',\n\t'Table has been created.' => 'A Tabela foi criada.',\n\t'Alter table' => 'Alterar estrutura',\n\t'Create table' => 'Criar tabela',\n\t'Table name' => 'Nome da tabela',\n\t'engine' => 'motor',\n\t'collation' => 'collation',\n\t'Column name' => 'Nome da coluna',\n\t'Type' => 'Tipo',\n\t'Length' => 'Tamanho',\n\t'Auto Increment' => 'Incremento Automático',\n\t'Options' => 'Opções',\n\t'Save' => 'Salvar',\n\t'Drop' => 'Apagar',\n\t'Database has been dropped.' => 'A Base de dados foi apagada.',\n\t'Database has been created.' => 'A Base de dados foi criada.',\n\t'Database has been renamed.' => 'A Base de dados foi renomeada.',\n\t'Database has been altered.' => 'A Base de dados foi alterada.',\n\t'Alter database' => 'Alterar Base de dados',\n\t'Create database' => 'Criar Base de dados',\n\t'SQL command' => 'Comando SQL',\n\t'Logout' => 'Sair',\n\t'Use' => 'Usar',\n\t'No tables.' => 'Não existem tabelas.',\n\t'select' => 'selecionar',\n\t'Item has been deleted.' => 'O Registro foi deletado.',\n\t'Item has been updated.' => 'O Registro foi atualizado.',\n\t'Item%s has been inserted.' => 'O Registro%s foi inserido.',\n\t'Edit' => 'Editar',\n\t'Insert' => 'Inserir',\n\t'Save and insert next' => 'Salvar e inserir outro',\n\t'Delete' => 'Deletar',\n\t'Database' => 'Base de dados',\n\t'Routines' => 'Rotinas',\n\t'Indexes have been altered.' => 'Os Índices foram alterados.',\n\t'Indexes' => 'Índices',\n\t'Alter indexes' => 'Alterar índices',\n\t'Add next' => 'Adicionar próximo',\n\t'Language' => 'Idioma',\n\t'Select' => 'Selecionar',\n\t'New item' => 'Novo Registro',\n\t'Search' => 'Procurar',\n\t'Sort' => 'Ordenar',\n\t'descending' => 'decrescente',\n\t'Limit' => 'Limite',\n\t'No rows.' => 'Não existem registros.',\n\t'Action' => 'Ação',\n\t'edit' => 'editar',\n\t'Page' => 'Página',\n\t'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),\n\t'Error in query' => 'Erro na consulta',\n\t'Execute' => 'Executar',\n\t'Table' => 'Tabela',\n\t'Foreign keys' => 'Chaves estrangeiras',\n\t'Triggers' => 'Triggers',\n\t'View' => 'Visão',\n\t'Unable to select the table' => 'Não é possível selecionar a Tabela',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulário novamente.',\n\t'Comment' => 'Comentário',\n\t'Default values' => 'Valores padrões',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Nenhum comando para executar.',\n\t'Unable to upload a file.' => 'Não é possível enviar o arquivo.',\n\t'File upload' => 'Importar arquivo',\n\t'File uploads are disabled.' => 'Importação de arquivos desabilitada.',\n\t'Routine has been called, %d row(s) affected.' => array('Rotina executada, %d registro afetado.', 'Rotina executada, %d registros afetados.'),\n\t'Call' => 'Chamar',\n\t'No extension' => 'Não há extension',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponível.',\n\t'Session support must be enabled.' => 'Suporte a sessões deve estar habilitado.',\n\t'Session expired, please login again.' => 'Sessão expirada, por favor logue-se novamente.',\n\t'Text length' => 'Tamanho de texto',\n\t'Foreign key has been dropped.' => 'A Chave Estrangeira foi apagada.',\n\t'Foreign key has been altered.' => 'A Chave Estrangeira foi alterada.',\n\t'Foreign key has been created.' => 'A Chave Estrangeira foi criada.',\n\t'Foreign key' => 'Chave Estrangeira',\n\t'Target table' => 'Tabela de destino',\n\t'Change' => 'Modificar',\n\t'Source' => 'Origem',\n\t'Target' => 'Destino',\n\t'Add column' => 'Adicionar coluna',\n\t'Alter' => 'Alterar',\n\t'Add foreign key' => 'Adicionar Chave Estrangeira',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Tipo de índice',\n\t'length' => 'tamanho',\n\t'View has been dropped.' => 'A Visão foi apagada.',\n\t'View has been altered.' => 'A Visão foi alterada.',\n\t'View has been created.' => 'A Visão foi criada.',\n\t'Alter view' => 'Alterar visão',\n\t'Create view' => 'Criar visão',\n\t'Name' => 'Nome',\n\t'Process list' => 'Lista de processos',\n\t'%d process(es) have been killed.' => array('%d processo foi terminado.', '%d processos foram terminados.'),\n\t'Kill' => 'Parar',\n\t'Parameter name' => 'Nome de Parâmetro',\n\t'Database schema' => 'Esquema de Base de dados',\n\t'Create procedure' => 'Criar procedimento',\n\t'Create function' => 'Criar função',\n\t'Routine has been dropped.' => 'A Rotina foi apagada.',\n\t'Routine has been altered.' => 'A Rotina foi alterada.',\n\t'Routine has been created.' => 'A Rotina foi criada.',\n\t'Alter function' => 'Alterar função',\n\t'Alter procedure' => 'Alterar procedimento',\n\t'Return type' => 'Tipo de valor de retorno',\n\t'Add trigger' => 'Adicionar trigger',\n\t'Trigger has been dropped.' => 'O Trigger foi apagado.',\n\t'Trigger has been altered.' => 'O Trigger foi alterado.',\n\t'Trigger has been created.' => 'O Trigger foi criado.',\n\t'Alter trigger' => 'Alterar Trigger',\n\t'Create trigger' => 'Adicionar Trigger',\n\t'Time' => 'Tempo',\n\t'Event' => 'Evento',\n\t'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',\n\t'%d row(s)' => array('%d registro', '%d registros'),\n\t'Remove' => 'Remover',\n\t'Are you sure?' => 'Você tem certeza?',\n\t'Privileges' => 'Privilégios',\n\t'Create user' => 'Criar Usuário',\n\t'User has been dropped.' => 'O Usuário foi apagado.',\n\t'User has been altered.' => 'O Usuário foi alterado.',\n\t'User has been created.' => 'O Usuário foi criado.',\n\t'Hashed' => 'Hash',\n\t'Column' => 'Coluna',\n\t'Routine' => 'Rotina',\n\t'Grant' => 'Conceder',\n\t'Revoke' => 'Impedir',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',\n\t'Logged as: %s' => 'Logado como: %s',\n\t'Move up' => 'Mover acima',\n\t'Move down' => 'Mover abaixo',\n\t'Functions' => 'Funções',\n\t'Aggregation' => 'Adições',\n\t'Export' => 'Exportar',\n\t'Output' => 'Saída',\n\t'open' => 'abrir',\n\t'save' => 'salvar',\n\t'Format' => 'Formato',\n\t'Tables' => 'Tabelas',\n\t'Data' => 'Dados',\n\t'Event has been dropped.' => 'O Evento foi apagado.',\n\t'Event has been altered.' => 'O Evento foi alterado.',\n\t'Event has been created.' => 'O Evento foi criado.',\n\t'Alter event' => 'Modificar Evento',\n\t'Create event' => 'Criar Evento',\n\t'At given time' => 'A hora determinada',\n\t'Every' => 'Cada',\n\t'Events' => 'Eventos',\n\t'Schedule' => 'Agenda',\n\t'Start' => 'Início',\n\t'End' => 'Fim',\n\t'Status' => 'Estado',\n\t'On completion preserve' => 'Ao completar preservar',\n\t'Tables and views' => 'Tabelas e Visões',\n\t'Data Length' => 'Tamanho de dados',\n\t'Index Length' => 'Tamanho de índice',\n\t'Data Free' => 'Espaço Livre',\n\t'Collation' => 'Colação',\n\t'Analyze' => 'Analisar',\n\t'Optimize' => 'Otimizar',\n\t'Check' => 'Verificar',\n\t'Repair' => 'Reparar',\n\t'Truncate' => 'Truncar',\n\t'Tables have been truncated.' => 'As Tabelas foram truncadas.',\n\t'Rows' => 'Registros',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'As Tabelas foram movidas.',\n\t'Move to other database' => 'Mover para outra Base de dados',\n\t'Move' => 'Mover',\n\t'Engine' => 'Motor',\n\t'Save and continue edit' => 'Salvar e continuar editando',\n\t'original' => 'original',\n\t'Tables have been dropped.' => 'As Tabelas foram eliminadas.',\n\t'%d item(s) have been affected.' => array('%d item foi afetado.', '%d itens foram afetados.'),\n\t'Whole result' => 'Resultado completo',\n\t'Clone' => 'Clonar',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',\n\t'Partition by' => 'Particionar por',\n\t'Partitions' => 'Partições',\n\t'Partition name' => 'Nome da Partição',\n\t'Values' => 'Valores',\n\t'%d row(s) have been imported.' => array('%d registro foi importado.', '%d registros foram importados.'),\n\t'anywhere' => 'qualquer local',\n\t'Import' => 'Importar',\n\t'Stop on error' => 'Parar em caso de erro',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',\n\t'History' => 'Histórico',\n\t'Variables' => 'Variáveis',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registro referenciado deve existir.',\n\t'Relations' => 'Relações',\n\t'Run file' => 'Executar Arquivo',\n\t'Clear' => 'Limpar',\n\t'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo permitido é %sB.',\n\t'Numbers' => 'Números',\n\t'Date and time' => 'Data e hora',\n\t'Strings' => 'Strings',\n\t'Binary' => 'Binário',\n\t'Lists' => 'Listas',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Arquivo do servidor web %s',\n\t'File does not exist.' => 'Arquivo não existe.',\n\t'%d in total' => '%d no total',\n\t'Permanent login' => 'Login permanente',\n\t'Databases have been dropped.' => 'A Base de dados foi apagada.',\n\t'Search data in tables' => 'Buscar dados nas Tabelas',\n\t'Schema' => 'Esquema',\n\t'Alter schema' => 'Alterar esquema',\n\t'Create schema' => 'Criar esquema',\n\t'Schema has been dropped.' => 'O Esquema foi apagado.',\n\t'Schema has been created.' => 'O Esquema foi criado.',\n\t'Schema has been altered.' => 'O Esquema foi alterado.',\n\t'Sequences' => 'Sequências',\n\t'Create sequence' => 'Criar sequência',\n\t'Alter sequence' => 'Alterar sequência',\n\t'Sequence has been dropped.' => 'A Sequência foi apagada.',\n\t'Sequence has been created.' => 'A Sequência foi criada.',\n\t'Sequence has been altered.' => 'A Sequência foi alterada.',\n\t'User types' => 'Tipos definidos pelo usuário',\n\t'Create type' => 'Criar tipo',\n\t'Alter type' => 'Alterar tipo',\n\t'Type has been dropped.' => 'O Tipo foi apagado.',\n\t'Type has been created.' => 'O Tipo foi criado.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+clique sobre o valor para edita-lo.',\n\t'Use edit link to modify this value.' => 'Utilize o link editar para modificar este valor.',\n\t'last' => 'último',\n\t'From server' => 'A partir do servidor',\n\t'System' => 'Sistema',\n\t'Select data' => 'Selecionar dados',\n\t'Show structure' => 'Mostrar estrutura',\n\t'empty' => 'vazio',\n\t'Network' => 'Rede',\n\t'Geometry' => 'Geometria',\n\t'File exists.' => 'Arquivo já existe.',\n\t'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),\n\t'Show only errors' => 'Mostrar somente erros',\n\t'Refresh' => 'Atualizar',\n\t'Invalid schema.' => 'Esquema inválido.',\n\t'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',\n\t'now' => 'agora',\n\t'ltr' => 'ltr',\n);\n\n// run `php ../../lang.php pt-br` to update this file\n"
  },
  {
    "path": "adminer/lang/pt.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Entrar',\n\t'Logout successful.' => 'Sessão terminada com sucesso.',\n\t'Invalid credentials.' => 'Identificação inválida.',\n\t'Server' => 'Servidor',\n\t'Username' => 'Nome de utilizador',\n\t'Password' => 'Senha',\n\t'Select database' => 'Selecionar Base de dados',\n\t'Invalid database.' => 'Base de dados inválida.',\n\t'Table has been dropped.' => 'Tabela eliminada.',\n\t'Table has been altered.' => 'Tabela modificada.',\n\t'Table has been created.' => 'Tabela criada.',\n\t'Alter table' => 'Modificar estrutura',\n\t'Create table' => 'Criar tabela',\n\t'Table name' => 'Nome da tabela',\n\t'engine' => 'motor',\n\t'collation' => 'collation',\n\t'Column name' => 'Nome da coluna',\n\t'Type' => 'Tipo',\n\t'Length' => 'Tamanho',\n\t'Auto Increment' => 'Incremento Automático',\n\t'Options' => 'Opções',\n\t'Save' => 'Guardar',\n\t'Drop' => 'Remover',\n\t'Database has been dropped.' => 'Base de dados eliminada.',\n\t'Database has been created.' => 'Base de dados criada.',\n\t'Database has been renamed.' => 'Base de dados renomeada.',\n\t'Database has been altered.' => 'Base de dados modificada.',\n\t'Alter database' => 'Modificar Base de dados',\n\t'Create database' => 'Criar Base de dados',\n\t'SQL command' => 'Comando SQL',\n\t'Logout' => 'Terminar sessão',\n\t'Use' => 'Usar',\n\t'No tables.' => 'Não existem tabelas.',\n\t'select' => 'registos',\n\t'Item has been deleted.' => 'Registo eliminado.',\n\t'Item has been updated.' => 'Registo modificado.',\n\t'Item%s has been inserted.' => 'Registo%s inserido.',\n\t'Edit' => 'Modificar',\n\t'Insert' => 'Inserir',\n\t'Save and insert next' => 'Guardar e inserir outro',\n\t'Delete' => 'Eliminar',\n\t'Database' => 'Base de dados',\n\t'Routines' => 'Procedimentos',\n\t'Indexes have been altered.' => 'Índices modificados.',\n\t'Indexes' => 'Índices',\n\t'Alter indexes' => 'Modificar índices',\n\t'Add next' => 'Adicionar próximo',\n\t'Language' => 'Idioma',\n\t'Select' => 'Selecionar',\n\t'New item' => 'Novo Registo',\n\t'Search' => 'Procurar',\n\t'Sort' => 'Ordenar',\n\t'descending' => 'decrescente',\n\t'Limit' => 'Limite',\n\t'No rows.' => 'Não existem registos.',\n\t'Action' => 'Ação',\n\t'edit' => 'modificar',\n\t'Page' => 'Página',\n\t'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registo afetado.', 'Consulta executada, %d registos afetados.'),\n\t'Error in query' => 'Erro na consulta',\n\t'Execute' => 'Executar',\n\t'Table' => 'Tabela',\n\t'Foreign keys' => 'Chaves estrangeiras',\n\t'Triggers' => 'Triggers',\n\t'View' => 'Visualizar',\n\t'Unable to select the table' => 'Não é possivel selecionar a Tabela',\n\t'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulario novamente.',\n\t'Comment' => 'Comentário',\n\t'Default values' => 'Valores predeterminados',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\t'No commands to execute.' => 'Nenhum comando para executar.',\n\t'Unable to upload a file.' => 'Não é possível enviar o ficheiro.',\n\t'File upload' => 'Importar ficheiro',\n\t'File uploads are disabled.' => 'Importação de ficheiros desativada.',\n\t'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registo afetado.', 'Consulta executada, %d registos afetados.'),\n\t'Call' => 'Chamar',\n\t'No extension' => 'Não há extensão',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',\n\t'Session support must be enabled.' => 'As sessões devem estar ativas.',\n\t'Session expired, please login again.' => 'Sessão expirada, por favor entre de novo.',\n\t'Text length' => 'Tamanho do texto',\n\t'Foreign key has been dropped.' => 'Chave estrangeira eliminada.',\n\t'Foreign key has been altered.' => 'Chave estrangeira modificada.',\n\t'Foreign key has been created.' => 'Chave estrangeira criada.',\n\t'Foreign key' => 'Chave estrangeira',\n\t'Target table' => 'Tabela de destino',\n\t'Change' => 'Modificar',\n\t'Source' => 'Origem',\n\t'Target' => 'Destino',\n\t'Add column' => 'Adicionar coluna',\n\t'Alter' => 'Modificar',\n\t'Add foreign key' => 'Adicionar Chave estrangeira',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'Tipo de índice',\n\t'length' => 'tamanho',\n\t'View has been dropped.' => 'Vista eliminada.',\n\t'View has been altered.' => 'Vista modificada.',\n\t'View has been created.' => 'Vista criada.',\n\t'Alter view' => 'Modificar vista',\n\t'Create view' => 'Criar vista',\n\t'Name' => 'Nome',\n\t'Process list' => 'Lista de processos',\n\t'%d process(es) have been killed.' => array('%d processo terminado.', '%d processos terminados.'),\n\t'Kill' => 'Parar',\n\t'Parameter name' => 'Nome de Parâmetro',\n\t'Database schema' => 'Esquema de Base de dados',\n\t'Create procedure' => 'Criar procedimento',\n\t'Create function' => 'Criar função',\n\t'Routine has been dropped.' => 'Procedimento eliminado.',\n\t'Routine has been altered.' => 'Procedimento modificado.',\n\t'Routine has been created.' => 'Procedimento criado.',\n\t'Alter function' => 'Modificar Função',\n\t'Alter procedure' => 'Modificar procedimento',\n\t'Return type' => 'Tipo de valor de regresso',\n\t'Add trigger' => 'Adicionar trigger',\n\t'Trigger has been dropped.' => 'Trigger eliminado.',\n\t'Trigger has been altered.' => 'Trigger modificado.',\n\t'Trigger has been created.' => 'Trigger criado.',\n\t'Alter trigger' => 'Modificar Trigger',\n\t'Create trigger' => 'Adicionar Trigger',\n\t'Time' => 'Tempo',\n\t'Event' => 'Evento',\n\t'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',\n\t'%d row(s)' => array('%d registo', '%d registos'),\n\t'Remove' => 'Remover',\n\t'Are you sure?' => 'Tem a certeza?',\n\t'Privileges' => 'Privilégios',\n\t'Create user' => 'Criar utilizador',\n\t'User has been dropped.' => 'Utilizador eliminado.',\n\t'User has been altered.' => 'Utilizador modificado.',\n\t'User has been created.' => 'Utilizador criado.',\n\t'Hashed' => 'Hash',\n\t'Column' => 'Coluna',\n\t'Routine' => 'Rotina',\n\t'Grant' => 'Conceder',\n\t'Revoke' => 'Impedir',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',\n\t'Logged as: %s' => 'Ligado como: %s',\n\t'Move up' => 'Mover para cima',\n\t'Move down' => 'Mover para baixo',\n\t'Functions' => 'Funções',\n\t'Aggregation' => 'Adições',\n\t'Export' => 'Exportar',\n\t'Output' => 'Saída',\n\t'open' => 'abrir',\n\t'save' => 'guardar',\n\t'Format' => 'Formato',\n\t'Tables' => 'Tabelas',\n\t'Data' => 'Dados',\n\t'Event has been dropped.' => 'Evento eliminado.',\n\t'Event has been altered.' => 'Evento modificado.',\n\t'Event has been created.' => 'Evento criado.',\n\t'Alter event' => 'Modificar Evento',\n\t'Create event' => 'Criar Evento',\n\t'At given time' => 'À hora determinada',\n\t'Every' => 'Cada',\n\t'Events' => 'Eventos',\n\t'Schedule' => 'Agenda',\n\t'Start' => 'Início',\n\t'End' => 'Fim',\n\t'Status' => 'Estado',\n\t'On completion preserve' => 'Preservar ao completar',\n\t'Tables and views' => 'Tabelas e vistas',\n\t'Data Length' => 'Tamanho de dados',\n\t'Index Length' => 'Tamanho de índice',\n\t'Data Free' => 'Espaço Livre',\n\t'Collation' => 'Colação',\n\t'Analyze' => 'Analizar',\n\t'Optimize' => 'Otimizar',\n\t'Check' => 'Verificar',\n\t'Repair' => 'Reparar',\n\t'Truncate' => 'Truncar',\n\t'Tables have been truncated.' => 'Tabelas truncadas (truncate).',\n\t'Rows' => 'Registos',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'As Tabelas foram movidas.',\n\t'Move to other database' => 'Mover outra Base de dados',\n\t'Move' => 'Mover',\n\t'Engine' => 'Motor',\n\t'Save and continue edit' => 'Guardar e continuar a edição',\n\t'original' => 'original',\n\t'Tables have been dropped.' => 'As tabelas foram eliminadas.',\n\t'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),\n\t'Whole result' => 'Resultado completo',\n\t'Clone' => 'Clonar',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',\n\t'Partition by' => 'Particionar por',\n\t'Partitions' => 'Partições',\n\t'Partition name' => 'Nome da Partição',\n\t'Values' => 'Valores',\n\t'%d row(s) have been imported.' => array('%d registo importado.', '%d registos importados.'),\n\t'anywhere' => 'qualquer local',\n\t'Import' => 'Importar',\n\t'Stop on error' => 'Parar em caso de erro',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',\n\t'History' => 'Histórico',\n\t'Variables' => 'Variáveis',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registo referenciado deve existir.',\n\t'Relations' => 'Relações',\n\t'Run file' => 'Executar ficheiro',\n\t'Clear' => 'Limpar',\n\t'Maximum allowed file size is %sB.' => 'Tamanho máximo do ficheiro é %sB.',\n\t'Numbers' => 'Números',\n\t'Date and time' => 'Data e hora',\n\t'Strings' => 'Cadeia',\n\t'Binary' => 'Binário',\n\t'Lists' => 'Listas',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Ficheiro do servidor web %s',\n\t'File does not exist.' => 'Ficheiro não existe.',\n\t'%d in total' => '%d no total',\n\t'Permanent login' => 'Memorizar a senha',\n\t'Databases have been dropped.' => 'Bases de dados eliminadas.',\n\t'Search data in tables' => 'Pesquisar dados nas Tabelas',\n\t'Schema' => 'Esquema',\n\t'Alter schema' => 'Modificar esquema',\n\t'Create schema' => 'Criar esquema',\n\t'Schema has been dropped.' => 'Esquema eliminado.',\n\t'Schema has been created.' => 'Esquema criado.',\n\t'Schema has been altered.' => 'Esquema modificado.',\n\t'Sequences' => 'Sequências',\n\t'Create sequence' => 'Criar sequências',\n\t'Alter sequence' => 'Modificar sequência',\n\t'Sequence has been dropped.' => 'Sequência eliminada.',\n\t'Sequence has been created.' => 'Sequência criada.',\n\t'Sequence has been altered.' => 'Sequência modificada.',\n\t'User types' => 'Tipos definidos pelo utilizador',\n\t'Create type' => 'Criar tipo',\n\t'Alter type' => 'Modificar tipo',\n\t'Type has been dropped.' => 'Tipo eliminado.',\n\t'Type has been created.' => 'Tipo criado.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+clique vezes sobre o valor para edita-lo.',\n\t'Use edit link to modify this value.' => 'Utilize o link modificar para alterar.',\n\t'last' => 'último',\n\t'From server' => 'Do servidor',\n\t'System' => 'Motor de Base de dados',\n\t'Select data' => 'Selecionar dados',\n\t'Show structure' => 'Mostrar estrutura',\n\t'empty' => 'vazio',\n\t'Network' => 'Rede',\n\t'Geometry' => 'Geometria',\n\t'File exists.' => 'Ficheiro já existe.',\n\t'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),\n\t'Show only errors' => 'Mostrar somente erros',\n\t'Refresh' => 'Atualizar',\n\t'Invalid schema.' => 'Esquema inválido.',\n\t'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',\n\t'now' => 'agora',\n\t'ltr' => 'ltr',\n);\n\n// run `php ../../lang.php pt` to update this file\n"
  },
  {
    "path": "adminer/lang/ro.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Intră',\n\t'Logout successful.' => 'Ați ieșit cu succes.',\n\t'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.',\n\t'Server' => 'Server',\n\t'Username' => 'Nume de utilizator',\n\t'Password' => 'Parola',\n\t'Select database' => 'Alege baza de date',\n\t'Invalid database.' => 'Bază de deate invalidă.',\n\t'Table has been dropped.' => 'Tabelul a fost șters.',\n\t'Table has been altered.' => 'Tabelul a fost modificat.',\n\t'Table has been created.' => 'Tabelul a fost creat.',\n\t'Alter table' => 'Modifică tabelul',\n\t'Create table' => 'Crează tabel',\n\t'Table name' => 'Denumirea tabelului',\n\t'engine' => 'tip',\n\t'collation' => 'colaționarea',\n\t'Column name' => 'Denumirea coloanei',\n\t'Type' => 'Tip',\n\t'Length' => 'Lungime',\n\t'Auto Increment' => 'Creșterea automată',\n\t'Options' => 'Acțiune',\n\t'Save' => 'Salvează',\n\t'Drop' => 'Șterge',\n\t'Database has been dropped.' => 'Baza de date a fost ștearsă.',\n\t'Database has been created.' => 'Baza de date a fost creată.',\n\t'Database has been renamed.' => 'Baza de date a fost redenumită.',\n\t'Database has been altered.' => 'Baza de date a fost modificată.',\n\t'Alter database' => 'Modifică baza de date',\n\t'Create database' => 'Crează baza de date',\n\t'SQL command' => 'SQL query',\n\t'Logout' => 'Ieșire',\n\t'Use' => 'Alege',\n\t'No tables.' => 'În baza de date nu sunt tabele.',\n\t'select' => 'selectează',\n\t'Item has been deleted.' => 'Înregistrare a fost ștearsă.',\n\t'Item has been updated.' => 'Înregistrare a fost înnoită.',\n\t'Item%s has been inserted.' => 'Înregistrarea%s a fost inserată.',\n\t'Edit' => 'Editează',\n\t'Insert' => 'Inserează',\n\t'Save and insert next' => 'Salvează și mai inserează',\n\t'Delete' => 'Șterge',\n\t'Database' => 'Baza de date',\n\t'Routines' => 'Proceduri și funcții salvate',\n\t'Indexes have been altered.' => 'Indexurile au fost modificate.',\n\t'Indexes' => 'Indexuri',\n\t'Alter indexes' => 'Modifică indexuri',\n\t'Add next' => 'Adaugă încă',\n\t'Language' => 'Limba',\n\t'Select' => 'Selectează',\n\t'New item' => 'Înscriere nouă',\n\t'Search' => 'Căutare',\n\t'Sort' => 'Sortare',\n\t'descending' => 'descrescător',\n\t'Limit' => 'Limit',\n\t'No rows.' => 'Nu sunt înscrieri.',\n\t'Action' => 'Acțiune',\n\t'edit' => 'editare',\n\t'Page' => 'Pagina',\n\t'Query executed OK, %d row(s) affected.' => array('Query executat, %d înscriere modificată.', 'Query executat, %d înscrieri modificate.'),\n\t'Error in query' => 'Greșeală în query',\n\t'Execute' => 'Execută',\n\t'Table' => 'Tabel',\n\t'Foreign keys' => 'Chei externe',\n\t'Triggers' => 'Declanșatoare',\n\t'View' => 'Reprezentare',\n\t'Unable to select the table' => 'Nu am putut selecta date din tabel',\n\t'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.',\n\t'Comment' => 'Comentariu',\n\t'Default values' => 'Valoarea inițială',\n\t'%d byte(s)' => array('%d octet', '%d octeți'),\n\t'No commands to execute.' => 'Nu sunt comenzi de executat.',\n\t'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.',\n\t'File upload' => 'Încarcă fișierul',\n\t'File uploads are disabled.' => 'Încărcarea fișierelor este interzisă.',\n\t'Routine has been called, %d row(s) affected.' => array('A fost executată procedura, %d înscriere a fost modificată.', 'A fost executată procedura, %d înscrieri au fost modificate.'),\n\t'Call' => 'Apelează',\n\t'No extension' => 'Nu este extensie',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nu este aviabilă nici o extensie suportată (%s).',\n\t'Session support must be enabled.' => 'Sesiunile trebuie să fie pornite.',\n\t'Session expired, please login again.' => 'Timpul sesiunii a expirat, rog să vă conectați din nou.',\n\t'Text length' => 'Lungimea textului',\n\t'Foreign key has been dropped.' => 'Cheia externă a fost ștearsă.',\n\t'Foreign key has been altered.' => 'Cheia externă a fost modificată.',\n\t'Foreign key has been created.' => 'Cheia externă a fost creată.',\n\t'Foreign key' => 'Cheie externă',\n\t'Target table' => 'Tabela scop',\n\t'Change' => 'Modifică',\n\t'Source' => 'Sursă',\n\t'Target' => 'Scop',\n\t'Add column' => 'Adaugă coloană',\n\t'Alter' => 'Modifică',\n\t'Add foreign key' => 'Adaugă cheie externă',\n\t'ON DELETE' => 'La ștergere',\n\t'ON UPDATE' => 'La modificare',\n\t'Index Type' => 'Tipul indexului',\n\t'length' => 'lungimea',\n\t'View has been dropped.' => 'Reprezentarea a fost ștearsă.',\n\t'View has been altered.' => 'Reprezentarea a fost modificată.',\n\t'View has been created.' => 'Reprezentarea a fost creată.',\n\t'Alter view' => 'Modifică reprezentarea',\n\t'Create view' => 'Crează reprezentare',\n\t'Name' => 'Titlu',\n\t'Process list' => 'Lista proceselor',\n\t'%d process(es) have been killed.' => array('A fost terminat %d proces.', 'Au fost terminate %d procese.'),\n\t'Kill' => 'Termină',\n\t'Parameter name' => 'Numele parametrului',\n\t'Database schema' => 'Schema bazei de date',\n\t'Create procedure' => 'Crează procedură',\n\t'Create function' => 'Crează funcție',\n\t'Routine has been dropped.' => 'Procedura a fost ștearsă.',\n\t'Routine has been altered.' => 'Procedura a fost modificată.',\n\t'Routine has been created.' => 'Procedura a fost creată.',\n\t'Alter function' => 'Modifică funcția',\n\t'Alter procedure' => 'Modifică procedura',\n\t'Return type' => 'Tipul returnării',\n\t'Add trigger' => 'Adaugă trigger (declanșator)',\n\t'Trigger has been dropped.' => 'Triggerul a fost șters.',\n\t'Trigger has been altered.' => 'Triggerul a fost modificat.',\n\t'Trigger has been created.' => 'Triggerul a fost creat.',\n\t'Alter trigger' => 'Modifică trigger',\n\t'Create trigger' => 'Crează trigger',\n\t'Time' => 'Timp',\n\t'Event' => 'Eveniment',\n\t'%s version: %s through PHP extension %s' => 'Versiunea %s: %s cu extensia PHP %s',\n\t'%d row(s)' => array('%d înscriere', '%d înscrieri'),\n\t'Remove' => 'Șterge',\n\t'Are you sure?' => 'Sunteți sigur(ă)?',\n\t'Privileges' => 'Privilegii',\n\t'Create user' => 'Crează utilizator',\n\t'User has been dropped.' => 'Utilizatorul a fost șters.',\n\t'User has been altered.' => 'Utilizatorul a fost modificat.',\n\t'User has been created.' => 'Utilizatorul a fost creat.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'Coloană',\n\t'Routine' => 'Procedură',\n\t'Grant' => 'Permite',\n\t'Revoke' => 'Interzice',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Mesajul POST este prea mare. Trimiteți mai puține date sau măriți parametrul configurației directivei %s.',\n\t'Logged as: %s' => 'Ați intrat ca: %s',\n\t'Move up' => 'Mișcă în sus',\n\t'Move down' => 'Mișcă în jos',\n\t'Functions' => 'Funcții',\n\t'Aggregation' => 'Agregare',\n\t'Export' => 'Export',\n\t'Output' => 'Date de ieșire',\n\t'open' => 'deschide',\n\t'save' => 'salvează',\n\t'Format' => 'Format',\n\t'Tables' => 'Tabele',\n\t'Data' => 'Date',\n\t'Event has been dropped.' => 'Evenimentul a fost șters.',\n\t'Event has been altered.' => 'Evenimentul a fost modificat.',\n\t'Event has been created.' => 'Evenimentul a fost adăugat.',\n\t'Alter event' => 'Modifică eveniment',\n\t'Create event' => 'Creează evenimet',\n\t'At given time' => 'În timpul curent',\n\t'Every' => 'Fiecare',\n\t'Events' => 'Evenimente',\n\t'Schedule' => 'Program',\n\t'Start' => 'Început',\n\t'End' => 'Sfârșit',\n\t'Status' => 'Stare',\n\t'On completion preserve' => 'Salvează după finisare',\n\t'Tables and views' => 'Tabele și reprezentări',\n\t'Data Length' => 'Cantitatea de date',\n\t'Index Length' => 'Cantitatea de indecși',\n\t'Data Free' => 'Spațiu liber',\n\t'Collation' => 'Colaționare',\n\t'Analyze' => 'Analizează',\n\t'Optimize' => 'Optimizează',\n\t'Check' => 'Controlează',\n\t'Repair' => 'Repară',\n\t'Truncate' => 'Curăță',\n\t'Tables have been truncated.' => 'Tabelele au fost curățate.',\n\t'Rows' => 'Înscrieri',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Tabelele au fost mutate.',\n\t'Move to other database' => 'Mută în altă bază de date',\n\t'Move' => 'Mută',\n\t'Engine' => 'Tip',\n\t'Save and continue edit' => 'Salvează și continuă editarea',\n\t'original' => 'original',\n\t'%d item(s) have been affected.' => array('A fost modificată %d înscriere.', 'Au fost modificate %d înscrieri.'),\n\t'Whole result' => 'Tot rezultatul',\n\t'Tables have been dropped.' => 'Tabelele au fost șterse.',\n\t'Clone' => 'Clonează',\n\t'Partition by' => 'Împarte',\n\t'Partitions' => 'Secțiuni',\n\t'Partition name' => 'Denumirea secțiunii',\n\t'Values' => 'Parametru',\n\t'%d row(s) have been imported.' => array('%d rînd importat.', '%d rînduri importate.'),\n\t'Import' => 'Importă',\n\t'Stop on error' => 'Se oprește la greșeală',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s.',\n\t'anywhere' => 'oriunde',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5.$3.$1',\n\t'[yyyy]-mm-dd' => 'dd.mm.[yyyy]',\n\t'History' => 'Istoria',\n\t'Variables' => 'Variabile',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Coloanele ar trebui să aibă aceleaşi tipuri de date, trebuie să existe date de referinţă și un index pe coloanela-ţintă.',\n\t'Relations' => 'Relații',\n\t'Run file' => 'Execută fișier',\n\t'Clear' => 'Curăță',\n\t'Maximum allowed file size is %sB.' => 'Fișierul maxim admis - %sO.',\n\t'Numbers' => 'Număr',\n\t'Date and time' => 'Data și timpul',\n\t'Strings' => 'Șiruri de caractere',\n\t'Binary' => 'Tip binar',\n\t'Lists' => 'Liste',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Fișierul %s pe server',\n\t'File does not exist.' => 'Acest fișier nu există.',\n\t'%d in total' => 'În total %d',\n\t'Permanent login' => 'Logare permanentă',\n\t'Databases have been dropped.' => 'Bazele de date au fost șterse.',\n\t'Search data in tables' => 'Caută în tabele',\n\t'Schema' => 'Schema',\n\t'Alter schema' => 'Modifică schema',\n\t'Create schema' => 'Crează o schemă',\n\t'Schema has been dropped.' => 'Schema a fost ștearsă.',\n\t'Schema has been created.' => 'Schema a fost creată.',\n\t'Schema has been altered.' => 'Schema a fost modificată.',\n\t'Sequences' => '«Secvențe»',\n\t'Create sequence' => 'Crează «secvență»',\n\t'Alter sequence' => 'Modifică «secvență»',\n\t'Sequence has been dropped.' => '«secvența» a fost ștearsă.',\n\t'Sequence has been created.' => '«secvența» a fost creată.',\n\t'Sequence has been altered.' => '«secvența» a fost modificată.',\n\t'User types' => 'Tipuri de utilizatori',\n\t'Create type' => 'Crează tip noi',\n\t'Alter type' => 'Modifică tip',\n\t'Type has been dropped.' => 'Tiipul a fost șters.',\n\t'Type has been created.' => 'Crează tip nou.',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+click pe o valoare pentru a o modifica.',\n\t'Use edit link to modify this value.' => 'Valoare poate fi modificată cu ajutorul butonului «modifică».',\n\t'last' => 'ultima',\n\t'From server' => 'De pe server',\n\t'System' => 'Sistem',\n\t'Select data' => 'Selectează',\n\t'Show structure' => 'Arată structura',\n\t'empty' => 'gol',\n\t'Network' => 'Rețea',\n\t'Geometry' => 'Geometrie',\n\t'File exists.' => 'Fișierul există deja.',\n\t'%d query(s) executed OK.' => array('%d query executat.', '%d query-uri executate cu succes.'),\n\t'Show only errors' => 'Arată doar greșeli',\n\t'Refresh' => 'Împrospătează',\n\t'Invalid schema.' => 'Schemă incorectă.',\n\t'Please use one of the extensions %s.' => 'Folosiți una din următoarele extensii %s.',\n\t'now' => 'acum',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Tabelele au fost copiate.',\n\t'Copy' => 'Copiază',\n\t'Permanent link' => 'Adresă permanentă',\n\t'Edit all' => 'Editează tot',\n\t'HH:MM:SS' => 'HH:MM:SS',\n);\n\n// run `php ../../lang.php ro` to update this file\n"
  },
  {
    "path": "adminer/lang/ru.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Войти',\n\t'Logout successful.' => 'Вы успешно покинули систему.',\n\t'Invalid credentials.' => 'Неправильное имя пользователя или пароль.',\n\t'Server' => 'Сервер',\n\t'Username' => 'Имя пользователя',\n\t'Password' => 'Пароль',\n\t'Select database' => 'Выбрать базу данных',\n\t'Invalid database.' => 'Неверная база данных.',\n\t'Table has been dropped.' => 'Таблица была удалена.',\n\t'Table has been altered.' => 'Таблица была изменена.',\n\t'Table has been created.' => 'Таблица была создана.',\n\t'Alter table' => 'Изменить таблицу',\n\t'Create table' => 'Создать таблицу',\n\t'Table name' => 'Название таблицы',\n\t'engine' => 'Тип таблицы',\n\t'collation' => 'режим сопоставления',\n\t'Column name' => 'Название поля',\n\t'Type' => 'Тип',\n\t'Length' => 'Длина',\n\t'Auto Increment' => 'Автоматическое приращение',\n\t'Options' => 'Действие',\n\t'Save' => 'Сохранить',\n\t'Drop' => 'Удалить',\n\t'Database has been dropped.' => 'База данных была удалена.',\n\t'Database has been created.' => 'База данных была создана.',\n\t'Database has been renamed.' => 'База данных была переименована.',\n\t'Database has been altered.' => 'База данных была изменена.',\n\t'Alter database' => 'Изменить базу данных',\n\t'Create database' => 'Создать базу данных',\n\t'SQL command' => 'SQL-запрос',\n\t'Logout' => 'Выйти',\n\t'Use' => 'Выбрать',\n\t'No tables.' => 'В базе данных нет таблиц.',\n\t'select' => 'выбрать',\n\t'Item has been deleted.' => 'Запись удалена.',\n\t'Item has been updated.' => 'Запись обновлена.',\n\t'Item%s has been inserted.' => 'Запись%s была вставлена.',\n\t'Edit' => 'Редактировать',\n\t'Insert' => 'Вставить',\n\t'Save and insert next' => 'Сохранить и вставить ещё',\n\t'Delete' => 'Стереть',\n\t'Database' => 'База данных',\n\t'Routines' => 'Хранимые процедуры и функции',\n\t'Indexes have been altered.' => 'Индексы изменены.',\n\t'Indexes' => 'Индексы',\n\t'Alter indexes' => 'Изменить индексы',\n\t'Add next' => 'Добавить ещё',\n\t'Language' => 'Язык',\n\t'Select' => 'Выбрать',\n\t'New item' => 'Новая запись',\n\t'Search' => 'Поиск',\n\t'Sort' => 'Сортировать',\n\t'descending' => 'по убыванию',\n\t'Limit' => 'Лимит',\n\t'No rows.' => 'Нет записей.',\n\t'Action' => 'Действие',\n\t'edit' => 'редактировать',\n\t'Page' => 'Страница',\n\t'Query executed OK, %d row(s) affected.' => array('Запрос завершён, изменена %d запись.', 'Запрос завершён, изменены %d записи.', 'Запрос завершён, изменено %d записей.'),\n\t'Error in query' => 'Ошибка в запросe',\n\t'Execute' => 'Выполнить',\n\t'Table' => 'Таблица',\n\t'Foreign keys' => 'Внешние ключи',\n\t'Triggers' => 'Триггеры',\n\t'View' => 'Представление',\n\t'Unable to select the table' => 'Не удалось получить данные из таблицы',\n\t'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF-токен. Отправите форму ещё раз.',\n\t'Comment' => 'Комментарий',\n\t'Default values' => 'Значения по умолчанию',\n\t'%d byte(s)' => array('%d байт', '%d байта', '%d байтов'),\n\t'No commands to execute.' => 'Нет команд для выполнения.',\n\t'Unable to upload a file.' => 'Не удалось загрузить файл на сервер.',\n\t'File upload' => 'Загрузить файл на сервер',\n\t'File uploads are disabled.' => 'Загрузка файлов на сервер запрещена.',\n\t'Routine has been called, %d row(s) affected.' => array('Была вызвана процедура, %d запись была изменена.', 'Была вызвана процедура, %d записи было изменено.', 'Была вызвана процедура, %d записей было изменено.'),\n\t'Call' => 'Вызвать',\n\t'No extension' => 'Нет расширений',\n\t'None of the supported PHP extensions (%s) are available.' => 'Недоступно ни одного расширения из поддерживаемых (%s).',\n\t'Session support must be enabled.' => 'Сессии должны быть включены.',\n\t'Session expired, please login again.' => 'Срок действия сессии истёк, нужно снова войти в систему.',\n\t'Text length' => 'Длина текста',\n\t'Foreign key has been dropped.' => 'Внешний ключ был удалён.',\n\t'Foreign key has been altered.' => 'Внешний ключ был изменён.',\n\t'Foreign key has been created.' => 'Внешний ключ был создан.',\n\t'Foreign key' => 'Внешний ключ',\n\t'Target table' => 'Результирующая таблица',\n\t'Change' => 'Изменить',\n\t'Source' => 'Источник',\n\t'Target' => 'Цель',\n\t'Add column' => 'Добавить поле',\n\t'Alter' => 'Изменить',\n\t'Add foreign key' => 'Добавить внешний ключ',\n\t'ON DELETE' => 'При стирании',\n\t'ON UPDATE' => 'При обновлении',\n\t'Index Type' => 'Тип индекса',\n\t'length' => 'длина',\n\t'View has been dropped.' => 'Представление было удалено.',\n\t'View has been altered.' => 'Представление было изменено.',\n\t'View has been created.' => 'Представление было создано.',\n\t'Alter view' => 'Изменить представление',\n\t'Create view' => 'Создать представление',\n\t'Name' => 'Название',\n\t'Process list' => 'Список процессов',\n\t'%d process(es) have been killed.' => array('Был завершён %d процесс.', 'Было завершено %d процесса.', 'Было завершено %d процессов.'),\n\t'Kill' => 'Завершить',\n\t'Parameter name' => 'Название параметра',\n\t'Database schema' => 'Схема базы данных',\n\t'Create procedure' => 'Создать процедуру',\n\t'Create function' => 'Создать функцию',\n\t'Routine has been dropped.' => 'Процедура была удалена.',\n\t'Routine has been altered.' => 'Процедура была изменена.',\n\t'Routine has been created.' => 'Процедура была создана.',\n\t'Alter function' => 'Изменить функцию',\n\t'Alter procedure' => 'Изменить процедуру',\n\t'Return type' => 'Возвращаемый тип',\n\t'Add trigger' => 'Добавить триггер',\n\t'Trigger has been dropped.' => 'Триггер был удалён.',\n\t'Trigger has been altered.' => 'Триггер был изменён.',\n\t'Trigger has been created.' => 'Триггер был создан.',\n\t'Alter trigger' => 'Изменить триггер',\n\t'Create trigger' => 'Создать триггер',\n\t'Time' => 'Время',\n\t'Event' => 'Событие',\n\t'%s version: %s through PHP extension %s' => 'Версия %s: %s с PHP-расширением %s',\n\t'%d row(s)' => array('%d строка', '%d строки', '%d строк'),\n\t'Remove' => 'Удалить',\n\t'Are you sure?' => 'Вы уверены?',\n\t'Privileges' => 'Полномочия',\n\t'Create user' => 'Создать пользователя',\n\t'User has been dropped.' => 'Пользователь был удалён.',\n\t'User has been altered.' => 'Пользователь был изменён.',\n\t'User has been created.' => 'Пользователь был создан.',\n\t'Hashed' => 'Хешировано',\n\t'Column' => 'поле',\n\t'Routine' => 'Процедура',\n\t'Grant' => 'Позволить',\n\t'Revoke' => 'Запретить',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Слишком большой объем POST-данных. Пошлите меньший объём данных или увеличьте параметр конфигурационной директивы %s.',\n\t'Logged as: %s' => 'Вы вошли как: %s',\n\t'Move up' => 'Переместить вверх',\n\t'Move down' => 'Переместить вниз',\n\t'Functions' => 'Функции',\n\t'Aggregation' => 'Агрегация',\n\t'Export' => 'Экспорт',\n\t'Output' => 'Выходные данные',\n\t'open' => 'открыть',\n\t'save' => 'сохранить',\n\t'Format' => 'Формат',\n\t'Tables' => 'Таблицы',\n\t'Data' => 'Данные',\n\t'Event has been dropped.' => 'Событие было удалено.',\n\t'Event has been altered.' => 'Событие было изменено.',\n\t'Event has been created.' => 'Событие было создано.',\n\t'Alter event' => 'Изменить событие',\n\t'Create event' => 'Создать событие',\n\t'At given time' => 'В данное время',\n\t'Every' => 'Каждые',\n\t'Events' => 'События',\n\t'Schedule' => 'Расписание',\n\t'Start' => 'Начало',\n\t'End' => 'Конец',\n\t'Status' => 'Состояние',\n\t'On completion preserve' => 'После завершения сохранить',\n\t'Tables and views' => 'Таблицы и представления',\n\t'Data Length' => 'Объём данных',\n\t'Index Length' => 'Объём индексов',\n\t'Data Free' => 'Свободное место',\n\t'Collation' => 'Режим сопоставления',\n\t'Analyze' => 'Анализировать',\n\t'Optimize' => 'Оптимизировать',\n\t'Check' => 'Проверить',\n\t'Repair' => 'Исправить',\n\t'Truncate' => 'Очистить',\n\t'Tables have been truncated.' => 'Таблицы были очищены.',\n\t'Rows' => 'Строк',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'Таблицы были перемещены.',\n\t'Move to other database' => 'Переместить в другую базу данных',\n\t'Move' => 'Переместить',\n\t'Engine' => 'Тип таблиц',\n\t'Save and continue edit' => 'Сохранить и продолжить редактирование',\n\t'original' => 'исходный',\n\t'%d item(s) have been affected.' => array('Была изменена %d запись.', 'Были изменены %d записи.', 'Было изменено %d записей.'),\n\t'Whole result' => 'Весь результат',\n\t'Tables have been dropped.' => 'Таблицы были удалены.',\n\t'Clone' => 'Клонировать',\n\t'Partition by' => 'Разделить по',\n\t'Partitions' => 'Разделы',\n\t'Partition name' => 'Название раздела',\n\t'Values' => 'Параметры',\n\t'%d row(s) have been imported.' => array('Импортирована %d строка.', 'Импортировано %d строки.', 'Импортировано %d строк.'),\n\t'Import' => 'Импорт',\n\t'Stop on error' => 'Остановить при ошибке',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Достигнуто максимальное значение количества доступных полей. Увеличьте %s.',\n\t'anywhere' => 'в любом месте',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5.$3.$1',\n\t'[yyyy]-mm-dd' => 'дд.мм.[гггг]',\n\t'History' => 'История',\n\t'Variables' => 'Переменные',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Поля должны иметь одинаковые типы данных, в результирующем поле должен быть индекс, данные для импорта должны существовать.',\n\t'Relations' => 'Отношения',\n\t'Run file' => 'Запустить файл',\n\t'Clear' => 'Очистить',\n\t'Maximum allowed file size is %sB.' => 'Максимальный разрешённый размер файла — %sB.',\n\t'Numbers' => 'Числа',\n\t'Date and time' => 'Дата и время',\n\t'Strings' => 'Строки',\n\t'Binary' => 'Двоичный тип',\n\t'Lists' => 'Списки',\n\t'Editor' => 'Редактор',\n\t'Webserver file %s' => 'Файл %s на вебсервере',\n\t'File does not exist.' => 'Такого файла не существует.',\n\t'%d in total' => 'Всего %d',\n\t'Permanent login' => 'Оставаться в системе',\n\t'Databases have been dropped.' => 'Базы данных удалены.',\n\t'Search data in tables' => 'Поиск в таблицах',\n\t'Schema' => 'Схема',\n\t'Alter schema' => 'Изменить схему',\n\t'Create schema' => 'Новая схема',\n\t'Schema has been dropped.' => 'Схема удалена.',\n\t'Schema has been created.' => 'Создана новая схема.',\n\t'Schema has been altered.' => 'Схема изменена.',\n\t'Sequences' => '«Последовательности»',\n\t'Create sequence' => 'Создать «последовательность»',\n\t'Alter sequence' => 'Изменить «последовательность»',\n\t'Sequence has been dropped.' => '«Последовательность» удалена.',\n\t'Sequence has been created.' => 'Создана новая «последовательность».',\n\t'Sequence has been altered.' => '«Последовательность» изменена.',\n\t'User types' => 'Типы пользователей',\n\t'Create type' => 'Создать тип',\n\t'Alter type' => 'Изменить тип',\n\t'Type has been dropped.' => 'Тип удален.',\n\t'Type has been created.' => 'Создан новый тип.',\n\t'Ctrl+click on a value to modify it.' => 'Выполните Ctrl+Щелчок мышью по значению, чтобы его изменить.',\n\t'Use edit link to modify this value.' => 'Изменить это значение можно с помощью ссылки «изменить».',\n\t'last' => 'последняя',\n\t'From server' => 'С сервера',\n\t'System' => 'Движок',\n\t'Select data' => 'Выбрать',\n\t'Show structure' => 'Показать структуру',\n\t'empty' => 'пусто',\n\t'Network' => 'Сеть',\n\t'Geometry' => 'Геометрия',\n\t'File exists.' => 'Файл уже существует.',\n\t'%d query(s) executed OK.' => array('%d запрос выполнен успешно.', '%d запроса выполнено успешно.', '%d запросов выполнено успешно.'),\n\t'Show only errors' => 'Только ошибки',\n\t'Refresh' => 'Обновить',\n\t'Invalid schema.' => 'Неправильная схема.',\n\t'Please use one of the extensions %s.' => 'Используйте одно из этих расширений %s.',\n\t'now' => 'сейчас',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Таблицы скопированы.',\n\t'Copy' => 'Копировать',\n\t'Permanent link' => 'Постоянная ссылка',\n\t'Edit all' => 'Редактировать всё',\n\t'HH:MM:SS' => 'ЧЧ:ММ:СС',\n\t'Tables have been optimized.' => 'Таблицы оптимизированы.',\n\t'Materialized view' => 'Материализованное представление',\n\t'Vacuum' => 'Вакуум',\n\t'Selected' => 'Выбранные',\n\t'File must be in UTF-8 encoding.' => 'Файл должен быть в кодировке UTF-8.',\n\t'Modify' => 'Изменить',\n\t'Loading' => 'Загрузка',\n\t'Load more data' => 'Загрузить ещё данные',\n\t'ATTACH queries are not supported.' => 'ATTACH-запросы не поддерживаются.',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Лимит строк',\n\t'Default value' => 'Значение по умолчанию',\n\t'Full table scan' => 'Анализ полной таблицы',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Слишком много неудачных попыток входа. Попробуйте снова через %d минуту.', 'Слишком много неудачных попыток входа. Попробуйте снова через %d минуты.', 'Слишком много неудачных попыток входа. Попробуйте снова через %d минут.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Мастер-пароль истёк. <a href=\"https://www.adminer.org/en/extension/\"%s>Реализуйте</a> метод %s, чтобы сделать его постоянным.',\n\t'If you did not send this request from Adminer then close this page.' => 'Если вы не посылали этот запрос из Adminer, закройте эту страницу.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Вы можете закачать большой SQL-файл по FTP и затем импортировать его с сервера.',\n\t'Size' => 'Размер',\n\t'Compute' => 'Вычислить',\n\t'You are offline.' => 'Вы не выполнили вход.',\n\t'You have no privileges to update this table.' => 'У вас нет прав на обновление этой таблицы.',\n\t'Saving' => 'Сохранение',\n\t'yes' => 'Да',\n\t'no' => 'Нет',\n\t'Drop %s?' => 'Удалить %s?',\n\t'overwrite' => 'перезаписать',\n\t'DB' => 'DB',\n\t'Warnings' => 'Предупреждения',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer не поддерживает доступ к базе данных без пароля, <a href=\"https://www.adminer.org/en/password/\"%s>больше информации</a>.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Спасибо за использование Adminer, рассмотрите возможность <a href=\"https://www.adminer.org/en/donation/\">пожертвования</a>.',\n\t'The action will be performed after successful login with the same credentials.' => 'Действие будет выполнено после успешного входа в систему с теми же учетными данными.',\n\t'Connecting to privileged ports is not allowed.' => 'Подключение к привилегированным портам не допускается.',\n\t'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',\n\t'Unknown error.' => 'Неизвестная ошибка.',\n\t'Database does not support password.' => 'База данных не поддерживает пароль.',\n\t'Disable %s or enable %s or %s extensions.' => 'Отключите %s или включите расширения %s или %s.',\n\t'Check has been dropped.' => 'Проверка удалена.',\n\t'Check has been altered.' => 'Проверка изменена.',\n\t'Check has been created.' => 'Проверка создана.',\n\t'Alter check' => 'Изменить проверку',\n\t'Create check' => 'Создать проверку',\n\t'Checks' => 'Проверки',\n\t'Loaded plugins' => 'Загруженные плагины',\n\t'%s must <a%s>return an array</a>.' => '%s должна <a%s>вернуть массив</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Настроить</a> %s в %s.',\n);\n\n// run `php ../../lang.php ru` to update this file\n"
  },
  {
    "path": "adminer/lang/sk.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'Prihlásiť sa',\n\t'Logout successful.' => 'Odhlásenie prebehlo v poriadku.',\n\t'Invalid credentials.' => 'Neplatné prihlasovacie údaje.',\n\t'Server' => 'Server',\n\t'Username' => 'Používateľ',\n\t'Password' => 'Heslo',\n\t'Select database' => 'Vybrať databázu',\n\t'Invalid database.' => 'Nesprávna databáza.',\n\t'Table has been dropped.' => 'Tabuľka bola odstránená.',\n\t'Table has been altered.' => 'Tabuľka bola zmenená.',\n\t'Table has been created.' => 'Tabuľka bola vytvorená.',\n\t'Alter table' => 'Zmeniť tabuľku',\n\t'Create table' => 'Vytvoriť tabuľku',\n\t'Table name' => 'Názov tabuľky',\n\t'engine' => 'úložisko',\n\t'collation' => 'porovnávanie',\n\t'Column name' => 'Názov stĺpca',\n\t'Type' => 'Typ',\n\t'Length' => 'Dĺžka',\n\t'Auto Increment' => 'Auto Increment',\n\t'Options' => 'Voľby',\n\t'Save' => 'Uložiť',\n\t'Drop' => 'Odstrániť',\n\t'Databases have been dropped.' => 'Databázy boli odstránené.',\n\t'Database has been dropped.' => 'Databáza bola odstránená.',\n\t'Database has been created.' => 'Databáza bola vytvorená.',\n\t'Database has been renamed.' => 'Databáza bola premenovaná.',\n\t'Database has been altered.' => 'Databáza bola zmenená.',\n\t'Alter database' => 'Zmeniť databázu',\n\t'Create database' => 'Vytvoriť databázu',\n\t'SQL command' => 'SQL príkaz',\n\t'Logout' => 'Odhlásiť',\n\t'Use' => 'Vybrať',\n\t'No tables.' => 'Žiadne tabuľky.',\n\t'select' => 'vypísať',\n\t'Item has been deleted.' => 'Položka bola vymazaná.',\n\t'Item has been updated.' => 'Položka bola aktualizovaná.',\n\t'Item%s has been inserted.' => 'Položka%s bola vložená.',\n\t'Edit' => 'Upraviť',\n\t'Insert' => 'Vložiť',\n\t'Save and insert next' => 'Uložiť a vložiť ďalší',\n\t'Delete' => 'Zmazať',\n\t'Database' => 'Databáza',\n\t'Routines' => 'Procedúry',\n\t'Indexes have been altered.' => 'Indexy boli zmenené.',\n\t'Indexes' => 'Indexy',\n\t'Alter indexes' => 'Zmeniť indexy',\n\t'Add next' => 'Pridať ďalší',\n\t'Language' => 'Jazyk',\n\t'Select' => 'Vypísať',\n\t'New item' => 'Nová položka',\n\t'Search' => 'Vyhľadať',\n\t'Sort' => 'Zotriediť',\n\t'descending' => 'zostupne',\n\t'Limit' => 'Limit',\n\t'No rows.' => 'Žiadne riadky.',\n\t'Action' => 'Akcia',\n\t'edit' => 'upraviť',\n\t'Page' => 'Stránka',\n\t'Query executed OK, %d row(s) affected.' => array('Príkaz prebehol v poriadku, bol zmenený %d záznam.', 'Príkaz prebehol v poriadku boli zmenené %d záznamy.', 'Príkaz prebehol v poriadku bolo zmenených %d záznamov.'),\n\t'Error in query' => 'Chyba v dotaze',\n\t'Execute' => 'Vykonať',\n\t'Table' => 'Tabuľka',\n\t'Foreign keys' => 'Cudzie kľúče',\n\t'Triggers' => 'Triggery',\n\t'View' => 'Pohľad',\n\t'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať',\n\t'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.',\n\t'Comment' => 'Komentár',\n\t'Default values' => 'Predvolené hodnoty',\n\t'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'),\n\t'No commands to execute.' => 'Žiadne príkazy na vykonanie.',\n\t'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.',\n\t'File upload' => 'Nahranie súboru',\n\t'File uploads are disabled.' => 'Nahrávánie súborov nie je povolené.',\n\t'Routine has been called, %d row(s) affected.' => array('Procedúra bola zavolaná, bol zmenený %d záznam.', 'Procedúra bola zavolaná, boli zmenené %d záznamy.', 'Procedúra bola zavolaná, bolo zmenených %d záznamov.'),\n\t'Call' => 'Zavolať',\n\t'No extension' => 'Žiadne rozšírenie',\n\t'None of the supported PHP extensions (%s) are available.' => 'Nie je dostupné žiadne z podporovaných rozšírení (%s).',\n\t'Session support must be enabled.' => 'Session premenné musia byť povolené.',\n\t'Session expired, please login again.' => 'Session vypršala, prihláste sa prosím znova.',\n\t'Text length' => 'Dĺžka textov',\n\t'Foreign key has been dropped.' => 'Cudzí kľúč bol odstránený.',\n\t'Foreign key has been altered.' => 'Cudzí kľúč bol zmenený.',\n\t'Foreign key has been created.' => 'Cudzí kľúč bol vytvorený.',\n\t'Foreign key' => 'Cudzí kľúč',\n\t'Target table' => 'Cieľová tabuľka',\n\t'Change' => 'Zmeniť',\n\t'Source' => 'Zdroj',\n\t'Target' => 'Cieľ',\n\t'Add column' => 'Pridať stĺpec',\n\t'Alter' => 'Zmeniť',\n\t'Add foreign key' => 'Pridať cudzí kľúč',\n\t'ON DELETE' => 'Pri zmazaní',\n\t'ON UPDATE' => 'Pri aktualizácii',\n\t'Index Type' => 'Typ indexu',\n\t'length' => 'dĺžka',\n\t'View has been dropped.' => 'Pohľad bol odstránený.',\n\t'View has been altered.' => 'Pohľad bol zmenený.',\n\t'View has been created.' => 'Pohľad bol vytvorený.',\n\t'Alter view' => 'Zmeniť pohľad',\n\t'Create view' => 'Vytvoriť pohľad',\n\t'Name' => 'Názov',\n\t'Process list' => 'Zoznam procesov',\n\t'%d process(es) have been killed.' => array('Bol ukončený %d proces.', 'Boli ukončené %d procesy.', 'Bolo ukončených %d procesov.'),\n\t'Kill' => 'Ukončiť',\n\t'Parameter name' => 'Názov parametra',\n\t'Database schema' => 'Schéma databázy',\n\t'Create procedure' => 'Vytvoriť procedúru',\n\t'Create function' => 'Vytvoriť funkciu',\n\t'Routine has been dropped.' => 'Procedúra bola odstránená.',\n\t'Routine has been altered.' => 'Procedúra bola zmenená.',\n\t'Routine has been created.' => 'Procedúra bola vytvorená.',\n\t'Alter function' => 'Zmeniť funkciu',\n\t'Alter procedure' => 'Zmeniť procedúru',\n\t'Return type' => 'Návratový typ',\n\t'Add trigger' => 'Pridať trigger',\n\t'Trigger has been dropped.' => 'Trigger bol odstránený.',\n\t'Trigger has been altered.' => 'Trigger bol zmenený.',\n\t'Trigger has been created.' => 'Trigger bol vytvorený.',\n\t'Alter trigger' => 'Zmeniť trigger',\n\t'Create trigger' => 'Vytvoriť trigger',\n\t'Time' => 'Čas',\n\t'Event' => 'Udalosť',\n\t'%s version: %s through PHP extension %s' => 'Verzia %s: %s cez PHP rozšírenie %s',\n\t'%d row(s)' => array('%d riadok', '%d riadky', '%d riadkov'),\n\t'Remove' => 'Odobrať',\n\t'Are you sure?' => 'Naozaj?',\n\t'Privileges' => 'Oprávnenia',\n\t'Create user' => 'Vytvoriť používateľa',\n\t'User has been dropped.' => 'Používateľ bol odstránený.',\n\t'User has been altered.' => 'Používateľ bol zmenený.',\n\t'User has been created.' => 'Používateľ bol vytvorený.',\n\t'Hashed' => 'Zahašované',\n\t'Column' => 'Stĺpec',\n\t'Routine' => 'Procedúra',\n\t'Grant' => 'Povoliť',\n\t'Revoke' => 'Zakázať',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Príliš veľké POST dáta. Zmenšite dáta alebo zvýšte hodnotu konfiguračej direktívy %s.',\n\t'Logged as: %s' => 'Prihlásený ako: %s',\n\t'Move up' => 'Presunúť hore',\n\t'Move down' => 'Presunúť dolu',\n\t'Functions' => 'Funkcie',\n\t'Aggregation' => 'Agregácia',\n\t'Export' => 'Export',\n\t'Output' => 'Výstup',\n\t'open' => 'otvoriť',\n\t'save' => 'uložiť',\n\t'Format' => 'Formát',\n\t'Tables' => 'Tabuľky',\n\t'Data' => 'Dáta',\n\t'Event has been dropped.' => 'Udalosť bola odstránená.',\n\t'Event has been altered.' => 'Udalosť bola zmenená.',\n\t'Event has been created.' => 'Udalosť bola vytvorená.',\n\t'Alter event' => 'Upraviť udalosť',\n\t'Create event' => 'Vytvoriť udalosť',\n\t'At given time' => 'V stanovený čas',\n\t'Every' => 'Každých',\n\t'Events' => 'Udalosti',\n\t'Schedule' => 'Plán',\n\t'Start' => 'Začiatok',\n\t'End' => 'Koniec',\n\t'Status' => 'Stav',\n\t'On completion preserve' => 'Po dokončení zachovat',\n\t'Save and continue edit' => 'Uložiť a pokračovať v úpravách',\n\t'original' => 'originál',\n\t'Tables have been truncated.' => 'Tabuľka bola vyprázdnená.',\n\t'Tables have been moved.' => 'Tabuľka bola presunutá.',\n\t'Tables have been dropped.' => 'Tabuľka bola odstránená.',\n\t'Tables and views' => 'Tabuľky a pohľady',\n\t'Engine' => 'Typ',\n\t'Collation' => 'Porovnávanie',\n\t'Data Length' => 'Veľkosť dát',\n\t'Index Length' => 'Veľkosť indexu',\n\t'Data Free' => 'Voľné miesto',\n\t'Rows' => 'Riadky',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Analyze' => 'Analyzovať',\n\t'Optimize' => 'Optimalizovať',\n\t'Check' => 'Skontrolovať',\n\t'Repair' => 'Opraviť',\n\t'Truncate' => 'Vyprázdniť',\n\t'Move to other database' => 'Presunúť do inej databázy',\n\t'Move' => 'Presunúť',\n\t'%d item(s) have been affected.' => '%d položiek bolo ovplyvnených.',\n\t'Whole result' => 'Celý výsledok',\n\t'Clone' => 'Klonovať',\n\t'Partition by' => 'Rozdeliť podľa',\n\t'Partitions' => 'Oddiely',\n\t'Partition name' => 'Názov oddielu',\n\t'Values' => 'Hodnoty',\n\t'%d row(s) have been imported.' => array('Bol importovaný %d záznam.', 'Boli importované %d záznamy.', 'Bolo importovaných %d záznamov.'),\n\t'Import' => 'Import',\n\t'Stop on error' => 'Zastaviť pri chybe',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Bol prekročený maximálny počet povolených polí. Zvýšte prosím %s.',\n\t'anywhere' => 'kdekoľvek',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$6.$4.$1',\n\t'[yyyy]-mm-dd' => 'd.m.[rrrr]',\n\t'History' => 'História',\n\t'Variables' => 'Premenné',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Zdrojové a cieľové stĺpce musia mať rovnaký datový typ, nad cieľovými stĺpcami musí byť definovaný index a odkazované dáta musia existovať.',\n\t'Run file' => 'Spustiť súbor',\n\t'Numbers' => 'Čísla',\n\t'Date and time' => 'Dátum a čas',\n\t'Strings' => 'Reťazce',\n\t'Binary' => 'Binárne',\n\t'Lists' => 'Zoznamy',\n\t'Relations' => 'Vzťahy',\n\t'Maximum allowed file size is %sB.' => 'Maximálna povolená veľkosť súboru je %sB.',\n\t'Clear' => 'Vyčistiť',\n\t'Editor' => 'Editor',\n\t'Webserver file %s' => 'Súbor %s na webovom serveri',\n\t'File does not exist.' => 'Súbor neexistuje.',\n\t'Permanent login' => 'Trvalé prihlásenie',\n\t'%d in total' => '%d celkom',\n\t'Search data in tables' => 'Vyhľadať dáta v tabuľkách',\n\t'Alter schema' => 'Pozmeniť schému',\n\t'Create schema' => 'Vytvoriť schému',\n\t'Schema has been dropped.' => 'Schéma bola odstránená.',\n\t'Schema has been created.' => 'Schéma bola vytvorená.',\n\t'Schema has been altered.' => 'Schéma bola zmenená.',\n\t'Schema' => 'Schéma',\n\t'Sequences' => 'Sekvencia',\n\t'Create sequence' => 'Vytvoriť sekvenciu',\n\t'Sequence has been dropped.' => 'Sekvencia bola odstránená.',\n\t'Sequence has been created.' => 'Sekvencia bola vytvorená.',\n\t'Sequence has been altered.' => 'Sekvencia bola zmenená.',\n\t'Alter sequence' => 'Pozmeniť sekvenciu',\n\t'User types' => 'Užívateľské typy',\n\t'Create type' => 'Vytvoriť typ',\n\t'Type has been dropped.' => 'Typ bol odstránený.',\n\t'Type has been created.' => 'Typ bol vytvorený.',\n\t'Alter type' => 'Pozmeniť typ',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+kliknite na políčko, ktoré chcete zmeniť.',\n\t'Use edit link to modify this value.' => 'Pre zmenu tejto hodnoty použite odkaz upraviť.',\n\t'last' => 'posledný',\n\t'From server' => 'Zo serveru',\n\t'System' => 'Systém',\n\t'Show structure' => 'Zobraziť štruktúru',\n\t'Select data' => 'Vypísať dáta',\n\t'empty' => 'prázdne',\n\t'Network' => 'Sieť',\n\t'Geometry' => 'Geometria',\n\t'File exists.' => 'Súbor existuje.',\n\t'%d query(s) executed OK.' => array('Bol vykonaný %d dotaz.', 'Boli vykonané %d dotazy.', 'Bolo vykonaných %d dotazov.'),\n\t'Show only errors' => 'Zobraziť iba chyby',\n\t'Refresh' => 'Obnoviť',\n\t'Invalid schema.' => 'Neplatné schéma.',\n\t'Please use one of the extensions %s.' => 'Prosím vyberte jednu z koncoviek %s.',\n\t'now' => 'teraz',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'Tabuľky boli skopírované.',\n\t'Copy' => 'Kopírovať',\n\t'Permanent link' => 'Permanentný odkaz',\n\t'Edit all' => 'Upraviť všetko',\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'Drop %s?' => 'Odstrániť %s?',\n\t'Tables have been optimized.' => 'Tabuľky boli optimalizované.',\n\t'Materialized view' => 'Materializovaný pohľad',\n\t'Vacuum' => 'Vyčistiť',\n\t'Selected' => 'Označené',\n\t'overwrite' => 'prepísať',\n\t'DB' => 'DB',\n\t'File must be in UTF-8 encoding.' => 'Súbor musí byť v kódovaní UTF-8.',\n\t'Modify' => 'Zmeniť',\n\t'Load more data' => 'Načítať ďalšie dáta',\n\t'Loading' => 'Načítava sa',\n\t'ATTACH queries are not supported.' => 'Dotazy ATTACH nie sú podporované.',\n\t'Warnings' => 'Varovania',\n\t'%d / ' => '%d / ',\n\t'Limit rows' => 'Limit riadkov',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer nepodporuje prístup k databáze bez hesla, <a href=\"https://www.adminer.org/sk/password/\"%s>viac informácií</a>.',\n\t'Default value' => 'Predvolená hodnota',\n\t'Full table scan' => 'Prechod celej tabuľky',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Príliš veľa pokusov o prihlásenie, skúste to znova za %d minutu.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minuty.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minút.'),\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Vďaka za používanie Admineru, <a href=\"https://www.adminer.org/sk/donation/\">prispejte</a> na vývoj.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Platnosť hlavného hesla vypršala. <a href=\"https://www.adminer.org/cs/extension/\"%s>Implementujte</a> metodu %s, aby platilo natrvalo.',\n\t'The action will be performed after successful login with the same credentials.' => 'Akcia sa vykoná po úspešnom prihlásení s rovnakými prihlasovacími údajmi.',\n\t'Connecting to privileged ports is not allowed.' => 'Pripojenie k privilegovaným portom nie je povolené.',\n\t'There is a space in the input password which might be the cause.' => 'V zadanom hesle je medzera, ktorá môže byť príčinou.',\n\t'If you did not send this request from Adminer then close this page.' => 'Pokiaľ ste tento požiadavok neodoslali z Adminera, zatvorte túto stránku.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Veľký SQL soubor môžete nahrať pomocou FTP a importovať ho zo servera.',\n\t'Size' => 'Veľkosť',\n\t'Compute' => 'Spočítať',\n\t'You are offline.' => 'Ste offline.',\n\t'You have no privileges to update this table.' => 'Nemáte oprávnenie na aktualizáciu tejto tabuľky.',\n\t'Saving' => 'Ukladá sa',\n\t'Unknown error.' => 'Neznáma chyba.',\n\t'Database does not support password.' => 'Databáza nepodporuje heslo.',\n\t'Disable %s or enable %s or %s extensions.' => 'Zakážte %s alebo povoľte rozšírenie %s alebo %s.',\n\t'yes' => 'áno',\n\t'no' => 'nie',\n\t'Checks' => 'Kontroly',\n\t'Create check' => 'Vytvoriť kontrolu',\n\t'Alter check' => 'Zmeniť kontrolu',\n\t'Check has been created.' => 'Kontrola bola vytvorená.',\n\t'Check has been altered.' => 'Kontrola bola zmenená.',\n\t'Check has been dropped.' => 'Kontrola bola odstránená.',\n);\n\n// run `php ../../lang.php sk` to update this file\n"
  },
  {
    "path": "adminer/lang/sl.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sistem',\n\t'Server' => 'Strežnik',\n\t'Username' => 'Uporabniško ime',\n\t'Password' => 'Geslo',\n\t'Permanent login' => 'Trajna prijava',\n\t'Login' => 'Prijavi se',\n\t'Logout' => 'Odjavi se',\n\t'Logged as: %s' => 'Prijavljen kot: %s',\n\t'Logout successful.' => 'Prijava uspešna.',\n\t'Invalid credentials.' => 'Neveljavne pravice.',\n\t'Language' => 'Jezik',\n\t'Invalid CSRF token. Send the form again.' => 'Neveljaven token CSRF. Pošljite formular še enkrat.',\n\t'No extension' => 'Brez dodatkov',\n\t'None of the supported PHP extensions (%s) are available.' => 'Noben od podprtih dodatkov za PHP (%s) ni na voljo.',\n\t'Session support must be enabled.' => 'Podpora za seje mora biti omogočena.',\n\t'Session expired, please login again.' => 'Seja je potekla. Prosimo, ponovno se prijavite.',\n\t'%s version: %s through PHP extension %s' => 'Verzija %s: %s preko dodatka za PHP %s',\n\t'Refresh' => 'Osveži',\n\n\t// text direction\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Pravice',\n\t'Create user' => 'Ustvari uporabnika',\n\t'User has been dropped.' => 'Uporabnik je odstranjen.',\n\t'User has been altered.' => 'Uporabnik je spremenjen.',\n\t'User has been created.' => 'Uporabnik je ustvarjen.',\n\t'Hashed' => 'Zakodirano',\n\t'Column' => 'Stolpec',\n\t'Routine' => 'Postopek',\n\t'Grant' => 'Dovoli',\n\t'Revoke' => 'Odvzemi',\n\n\t'Process list' => 'Seznam procesov',\n\t'%d process(es) have been killed.' => array('Končan je %d proces.', 'Končana sta %d procesa.', 'Končani so %d procesi.', 'Končanih je %d procesov.'),\n\t'Kill' => 'Končaj',\n\n\t'Variables' => 'Spremenljivke',\n\t'Status' => 'Stanje',\n\n\t'SQL command' => 'Ukaz SQL',\n\t'%d query(s) executed OK.' => array('Uspešno se je končala %d poizvedba.', 'Uspešno sta se končali %d poizvedbi.', 'Uspešno so se končale %d poizvedbe.', 'Uspešno se je končalo %d poizvedb.'),\n\t'Query executed OK, %d row(s) affected.' => array('Poizvedba se je uspešno izvedla, spremenjena je %d vrstica.', 'Poizvedba se je uspešno izvedla, spremenjeni sta %d vrstici.', 'Poizvedba se je uspešno izvedla, spremenjene so %d vrstice.', 'Poizvedba se je uspešno izvedla, spremenjenih je %d vrstic.'),\n\t'No commands to execute.' => 'Ni ukazov za izvedbo.',\n\t'Error in query' => 'Napaka v poizvedbi',\n\t'Execute' => 'Izvedi',\n\t'Stop on error' => 'Ustavi ob napaki',\n\t'Show only errors' => 'Pokaži samo napake',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Zgodovina',\n\t'Clear' => 'Počisti',\n\n\t'File upload' => 'Naloži datoteko',\n\t'From server' => 'z strežnika',\n\t'Webserver file %s' => 'Datoteka na spletnem strežniku %s',\n\t'Run file' => 'Zaženi datoteko',\n\t'File does not exist.' => 'Datoteka ne obstaja.',\n\t'File uploads are disabled.' => 'Nalaganje datotek je onemogočeno.',\n\t'Unable to upload a file.' => 'Ne morem naložiti datoteke.',\n\t'Maximum allowed file size is %sB.' => 'Največja velikost datoteke je %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliko podatkov za POST. Zmanjšajte število podatkov ali povečajte nastavitev za %s.',\n\n\t'Export' => 'Izvozi',\n\t'Output' => 'Izhod rezultata',\n\t'open' => 'odpri',\n\t'save' => 'shrani',\n\t'Format' => 'Format',\n\t'Data' => 'Podatki',\n\n\t'Database' => 'Baza',\n\t'Use' => 'Uporabi',\n\t'Select database' => 'Izberi bazo',\n\t'Invalid database.' => 'Neveljavna baza.',\n\t'Database has been dropped.' => 'Baza je zavržena.',\n\t'Databases have been dropped.' => 'Baze so zavržene.',\n\t'Database has been created.' => 'Baza je ustvarjena.',\n\t'Database has been renamed.' => 'Baza je preimenovana.',\n\t'Database has been altered.' => 'Baza je spremenjena.',\n\t'Alter database' => 'Spremeni bazo',\n\t'Create database' => 'Ustvari bazo',\n\t'Database schema' => 'Shema baze',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Pogon',\n\t'Collation' => 'Zbiranje',\n\t'Data Length' => 'Velikost podatkov',\n\t'Index Length' => 'Velikost indeksa',\n\t'Data Free' => 'Podatkov prosto ',\n\t'Rows' => 'Vrstic',\n\t'%d in total' => 'Skupaj %d',\n\t'Analyze' => 'Analiziraj',\n\t'Optimize' => 'Optimiziraj',\n\t'Check' => 'Preveri',\n\t'Repair' => 'Popravi',\n\t'Truncate' => 'Skrajšaj',\n\t'Tables have been truncated.' => 'Tabele so skrajšane.',\n\t'Move to other database' => 'Premakni v drugo bazo',\n\t'Move' => 'Premakni',\n\t'Tables have been moved.' => 'Tabele so premaknjene.',\n\t'Copy' => 'Kopiraj',\n\t'Tables have been copied.' => 'Tabele so kopirane.',\n\n\t'Routines' => 'Postopki',\n\t'Routine has been called, %d row(s) affected.' => array('Klican je bil postopek, spremenjena je %d vrstica.', 'Klican je bil postopek, spremenjeni sta %d vrstici.', 'Klican je bil postopek, spremenjene so %d vrstice.', 'Klican je bil postopek, spremenjenih je %d vrstic.'),\n\t'Call' => 'Pokliči',\n\t'Parameter name' => 'Ime parametra',\n\t'Create procedure' => 'Ustvari postopek',\n\t'Create function' => 'Ustvari funkcijo',\n\t'Routine has been dropped.' => 'Postopek je zavržen.',\n\t'Routine has been altered.' => 'Postopek je spremenjen.',\n\t'Routine has been created.' => 'Postopek je ustvarjen.',\n\t'Alter function' => 'Spremeni funkcijo',\n\t'Alter procedure' => 'Spremeni postopek',\n\t'Return type' => 'Vračalni tip',\n\n\t'Events' => 'Dogodki',\n\t'Event has been dropped.' => 'Dogodek je zavržen.',\n\t'Event has been altered.' => 'Dogodek je spremenjen.',\n\t'Event has been created.' => 'Dogodek je ustvarjen.',\n\t'Alter event' => 'Spremeni dogodek',\n\t'Create event' => 'Ustvari dogodek',\n\t'At given time' => 'v danem času',\n\t'Every' => 'vsake',\n\t'Schedule' => 'Urnik',\n\t'Start' => 'Začetek',\n\t'End' => 'Konec',\n\t'On completion preserve' => 'Po zaključku ohrani',\n\n\t'Tables' => 'Tabele',\n\t'Tables and views' => 'Tabele in pogledi',\n\t'Table' => 'Tabela',\n\t'No tables.' => 'Ni tabel.',\n\t'Alter table' => 'Spremeni tabelo',\n\t'Create table' => 'Ustvari tabelo',\n\t'Table has been dropped.' => 'Tabela je zavržena.',\n\t'Tables have been dropped.' => 'Tabele so zavržene.',\n\t'Table has been altered.' => 'Tabela je spremenjena.',\n\t'Table has been created.' => 'Tabela je ustvarjena.',\n\t'Table name' => 'Ime tabele',\n\t'Show structure' => 'Pokaži zgradbo',\n\t'engine' => 'pogon',\n\t'collation' => 'zbiranje',\n\t'Column name' => 'Ime stolpca',\n\t'Type' => 'Tip',\n\t'Length' => 'Dolžina',\n\t'Auto Increment' => 'Samodejno povečevanje',\n\t'Options' => 'Možnosti',\n\t'Comment' => 'Komentar',\n\t'Default values' => 'Privzete vrednosti',\n\t'Drop' => 'Zavrzi',\n\t'Are you sure?' => 'Ste prepričani?',\n\t'Move up' => 'Premakni gor',\n\t'Move down' => 'Premakni dol',\n\t'Remove' => 'Odstrani',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Največje število dovoljenih polje je preseženo. Prosimo, povečajte %s.',\n\n\t'Partition by' => 'Porazdeli po',\n\t'Partitions' => 'Porazdelitve',\n\t'Partition name' => 'Ime porazdelitve',\n\t'Values' => 'Vrednosti',\n\n\t'View' => 'Pogledi',\n\t'View has been dropped.' => 'Pogled je zavržen.',\n\t'View has been altered.' => 'Pogled je spremenjen.',\n\t'View has been created.' => 'Pogled je ustvarjen.',\n\t'Alter view' => 'Spremeni pogled',\n\t'Create view' => 'Ustvari pogled',\n\n\t'Indexes' => 'Indeksi',\n\t'Indexes have been altered.' => 'Indeksi so spremenjeni.',\n\t'Alter indexes' => 'Spremeni indekse',\n\t'Add next' => 'Dodaj naslednjega',\n\t'Index Type' => 'Tip indeksa',\n\t'length' => 'dolžina',\n\n\t'Foreign keys' => 'Tuji ključi',\n\t'Foreign key' => 'Tuj ključ',\n\t'Foreign key has been dropped.' => 'Tuj ključ je zavržen.',\n\t'Foreign key has been altered.' => 'Tuj ključ je spremenjen.',\n\t'Foreign key has been created.' => 'Tuj ključ je ustvarjen.',\n\t'Target table' => 'Ciljna tabela',\n\t'Change' => 'Spremeni',\n\t'Source' => 'Izvor',\n\t'Target' => 'Cilj',\n\t'Add column' => 'Dodaj stolpec',\n\t'Alter' => 'Spremeni',\n\t'Add foreign key' => 'Dodaj tuj ključ',\n\t'ON DELETE' => 'pri brisanju',\n\t'ON UPDATE' => 'pri posodabljanju',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Izvorni in ciljni stolpec mora imeti isti podatkovni tip. Obstajati mora indeks na ciljnih stolpcih in obstajati morajo referenčni podatki.',\n\n\t'Triggers' => 'Sprožilniki',\n\t'Add trigger' => 'Dodaj sprožilnik',\n\t'Trigger has been dropped.' => 'Sprožilnik je odstranjen.',\n\t'Trigger has been altered.' => 'Sprožilnik je spremenjen.',\n\t'Trigger has been created.' => 'Sprožilnik je ustvarjen.',\n\t'Alter trigger' => 'Spremeni sprožilnik',\n\t'Create trigger' => 'Ustvari sprožilnik',\n\t'Time' => 'Čas',\n\t'Event' => 'Dogodek',\n\t'Name' => 'Naziv',\n\n\t'select' => 'izberi',\n\t'Select' => 'Izberi',\n\t'Select data' => 'Izberi podatke',\n\t'Functions' => 'Funkcije',\n\t'Aggregation' => 'Združitev',\n\t'Search' => 'Išči',\n\t'anywhere' => 'kjerkoli',\n\t'Search data in tables' => 'Išče podatke po tabelah',\n\t'Sort' => 'Sortiraj',\n\t'descending' => 'padajoče',\n\t'Limit' => 'Limita',\n\t'Text length' => 'Dolžina teksta',\n\t'Action' => 'Dejanje',\n\t'Unable to select the table' => 'Ne morem izbrati tabele',\n\t'No rows.' => 'Ni vrstic.',\n\t'%d row(s)' => array('%d vrstica', '%d vrstici', '%d vrstice', '%d vrstic'),\n\t'Page' => 'Stran',\n\t'last' => 'Zadnja',\n\t'Whole result' => 'Cel razultat',\n\t'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajti', '%d bajtov'),\n\n\t'Import' => 'Uvozi',\n\t'%d row(s) have been imported.' => array('Uvožena je %d vrstica.', 'Uvoženi sta %d vrstici.', 'Uvožene so %d vrstice.', 'Uvoženih je %d vrstic.'),\n\n\t// in-place editing in select\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klik na vrednost za urejanje.',\n\t'Use edit link to modify this value.' => 'Uporabite urejanje povezave za spreminjanje te vrednosti.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Predmet%s je vstavljen.',\n\t'Item has been deleted.' => 'Predmet je izbrisan.',\n\t'Item has been updated.' => 'Predmet je posodobljen.',\n\t'%d item(s) have been affected.' => array('Spremenjen je %d predmet.', 'Spremenjena sta %d predmeta.', 'Spremenjeni so %d predmeti.', 'Spremenjenih je %d predmetov.'),\n\t'New item' => 'Nov predmet',\n\t'original' => 'original',\n\t// label for value '' in enum data type\n\t'empty' => 'prazno',\n\t'edit' => 'uredi',\n\t'Edit' => 'Uredi',\n\t'Insert' => 'Vstavi',\n\t'Save' => 'Shrani',\n\t'Save and continue edit' => 'Shrani in nadaljuj z urejanjem',\n\t'Save and insert next' => 'Shrani in vstavi tekst',\n\t'Clone' => 'Kloniraj',\n\t'Delete' => 'Izbriši',\n\n\t// data type descriptions\n\t'Numbers' => 'Števila',\n\t'Date and time' => 'Datum in čas',\n\t'Strings' => 'Nizi',\n\t'Binary' => 'Binarni',\n\t'Lists' => 'Seznami',\n\t'Network' => 'Mrežni',\n\t'Geometry' => 'Geometrčni',\n\t'Relations' => 'Relacijski',\n\n\t'Editor' => 'Urejevalnik',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$6.$4.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'd.m.[rrrr]',\n\t'now' => 'zdaj',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Datoteka obstaja.',\n\t'Please use one of the extensions %s.' => 'Prosim, uporabite enega od dodatkov %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Spremeni shemo',\n\t'Create schema' => 'Ustvari shemo',\n\t'Schema has been dropped.' => 'Shema je zavržena.',\n\t'Schema has been created.' => 'Shema je ustvarjena.',\n\t'Schema has been altered.' => 'Shema je spremenjena.',\n\t'Schema' => 'Shema',\n\t'Invalid schema.' => 'Neveljavna shema.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Sekvence',\n\t'Create sequence' => 'Ustvari sekvenco',\n\t'Sequence has been dropped.' => 'Sekvenca je zavržena.',\n\t'Sequence has been created.' => 'Sekvence je ustvarjena.',\n\t'Sequence has been altered.' => 'Sekvence je spremenjena.',\n\t'Alter sequence' => 'Spremni sekvenco',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Uporabniški tipi',\n\t'Create type' => 'Ustvari tip',\n\t'Type has been dropped.' => 'Tip je zavržen.',\n\t'Type has been created.' => 'Tip je ustvarjen.',\n\t'Alter type' => 'Spremeni tip',\n);\n\n// run `php ../../lang.php sl` to update this file\n"
  },
  {
    "path": "adminer/lang/sr.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Систем',\n\t'Server' => 'Сервер',\n\t'Username' => 'Корисничко име',\n\t'Password' => 'Лозинка',\n\t'Permanent login' => 'Трајна пријава',\n\t'Login' => 'Пријава',\n\t'Logout' => 'Одјава',\n\t'Logged as: %s' => 'Пријави се као: %s',\n\t'Logout successful.' => 'Успешна одјава.',\n\t'Invalid credentials.' => 'Неважеће дозволе.',\n\t'Language' => 'Језик',\n\t'Invalid CSRF token. Send the form again.' => 'Неважећи CSRF код. Проследите поново форму.',\n\t'No extension' => 'Без додатака',\n\t'None of the supported PHP extensions (%s) are available.' => 'Ниједан од подржаних PHP додатака (%s) није доступан.',\n\t'Session support must be enabled.' => 'Морате омогућити подршку за сесије.',\n\t'Session expired, please login again.' => 'Ваша сесија је истекла, пријавите се поново.',\n\t'%s version: %s through PHP extension %s' => '%s верзија: %s помоћу PHP додатка је %s',\n\t'Refresh' => 'Освежи',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Дозволе',\n\t'Create user' => 'Направи корисника',\n\t'User has been dropped.' => 'Корисник је избрисан.',\n\t'User has been altered.' => 'Корисник је измењен.',\n\t'User has been created.' => 'корисник је креиран.',\n\t'Hashed' => 'Хеширано',\n\t'Column' => 'Колона',\n\t'Routine' => 'Рутина',\n\t'Grant' => 'Дозволи',\n\t'Revoke' => 'Опозови',\n\n\t'Process list' => 'Списак процеса',\n\t'%d process(es) have been killed.' => array('%d процес је убијен.', '%d процеса су убијена.', '%d процеса је убијено.'),\n\t'Kill' => 'Убиј',\n\n\t'Variables' => 'Променљиве',\n\t'Status' => 'Статус',\n\n\t'SQL command' => 'SQL команда',\n\t'%d query(s) executed OK.' => array('%d упит је успешно извршен.', '%d упита су успешно извршена.', '%d упита је успешно извршено.'),\n\t'Query executed OK, %d row(s) affected.' => array('Упит је успешно извршен, %d ред је погођен.', 'Упит је успешно извршен, %d реда су погођена.', 'Упит је успешно извршен, %d редова је погођено.'),\n\t'No commands to execute.' => 'Без команди за извршавање.',\n\t'Error in query' => 'Грешка у упиту',\n\t'Execute' => 'Изврши',\n\t'Stop on error' => 'Заустави приликом грешке',\n\t'Show only errors' => 'Приказуј само грешке',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Историјат',\n\t'Clear' => 'Очисти',\n\t'Edit all' => 'Измени све',\n\n\t'File upload' => 'Слање датотека',\n\t'From server' => 'Са сервера',\n\t'Webserver file %s' => 'Датотека %s са веб сервера',\n\t'Run file' => 'Покрени датотеку',\n\t'File does not exist.' => 'Датотека не постоји.',\n\t'File uploads are disabled.' => 'Онемогућено је слање датотека.',\n\t'Unable to upload a file.' => 'Слање датотеке није успело.',\n\t'Maximum allowed file size is %sB.' => 'Највећа дозвољена величина датотеке је %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Превелики POST податак. Морате да смањите податак или повећајте вредност конфигурационе директиве %s.',\n\n\t'Export' => 'Извоз',\n\t'Output' => 'Испис',\n\t'open' => 'отвори',\n\t'save' => 'сачувај',\n\t'Format' => 'Формат',\n\t'Data' => 'Податци',\n\n\t'Database' => 'База података',\n\t'Use' => 'Користи',\n\t'Select database' => 'Изаберите базу',\n\t'Invalid database.' => 'Неисправна база података.',\n\t'Database has been dropped.' => 'База података је избрисана.',\n\t'Databases have been dropped.' => 'Базњ података су избрисане.',\n\t'Database has been created.' => 'База података је креирана.',\n\t'Database has been renamed.' => 'База података је преименована.',\n\t'Database has been altered.' => 'База података је измењена.',\n\t'Alter database' => 'Уреди базу података',\n\t'Create database' => 'Формирај базу података',\n\t'Database schema' => 'Шема базе података',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Трајна веза',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Механизам',\n\t'Collation' => 'Сравњивање',\n\t'Data Length' => 'Дужина података',\n\t'Index Length' => 'Дужина индекса',\n\t'Data Free' => 'Слободно података',\n\t'Rows' => 'Редова',\n\t'%d in total' => 'укупно %d',\n\t'Analyze' => 'Анализирај',\n\t'Optimize' => 'Оптимизуј',\n\t'Check' => 'Провери',\n\t'Repair' => 'Поправи',\n\t'Truncate' => 'Испразни',\n\t'Tables have been truncated.' => 'Табеле су испражњене.',\n\t'Move to other database' => 'Премести у другу базу података',\n\t'Move' => 'Премести',\n\t'Tables have been moved.' => 'Табеле су премешћене.',\n\t'Copy' => 'Умножи',\n\t'Tables have been copied.' => 'Табеле су умножене.',\n\n\t'Routines' => 'Рутине',\n\t'Routine has been called, %d row(s) affected.' => array('Позвана је рутина, %d ред је погођен.', 'Позвана је рутина, %d реда су погођена.', 'Позвана је рутина, %d редова је погођено.'),\n\t'Call' => 'Позови',\n\t'Parameter name' => 'Назив параметра',\n\t'Create procedure' => 'Формирај процедуру',\n\t'Create function' => 'Формирај функцију',\n\t'Routine has been dropped.' => 'Рутина је избрисана.',\n\t'Routine has been altered.' => 'Рутина је измењена.',\n\t'Routine has been created.' => 'Рутина је креирана.',\n\t'Alter function' => 'Уреди функцију',\n\t'Alter procedure' => 'Уреди процедуру',\n\t'Return type' => 'Повратни тип',\n\n\t'Events' => 'Догађаји',\n\t'Event has been dropped.' => 'Догађај је избрисан.',\n\t'Event has been altered.' => 'Догађај је измењен.',\n\t'Event has been created.' => 'Догађај је креиран.',\n\t'Alter event' => 'Уреди догађај',\n\t'Create event' => 'Направи догађај',\n\t'At given time' => 'У задато време',\n\t'Every' => 'Сваки',\n\t'Schedule' => 'Распоред',\n\t'Start' => 'Почетак',\n\t'End' => 'Крај',\n\t'On completion preserve' => 'Задржи по завршетку',\n\n\t'Tables' => 'Табеле',\n\t'Tables and views' => 'Табеле и погледи',\n\t'Table' => 'Табела',\n\t'No tables.' => 'Без табела.',\n\t'Alter table' => 'Уреди табелу',\n\t'Create table' => 'Направи табелу',\n\t'Table has been dropped.' => 'Табела је избрисана.',\n\t'Tables have been dropped.' => 'Табеле су избрисане.',\n\t'Tables have been optimized.' => 'Табеле су оптимизоване.',\n\t'Table has been altered.' => 'Табела је измењена.',\n\t'Table has been created.' => 'Табела је креирана.',\n\t'Table name' => 'Назив табеле',\n\t'Show structure' => 'Прикажи структуру',\n\t'engine' => 'механизам',\n\t'collation' => 'Сравњивање',\n\t'Column name' => 'Назив колоне',\n\t'Type' => 'Тип',\n\t'Length' => 'Дужина',\n\t'Auto Increment' => 'Ауто-прираштај',\n\t'Options' => 'Опције',\n\t'Comment' => 'Коментар',\n\t'Default values' => 'Подразумеване вредности',\n\t'Drop' => 'Избриши',\n\t'Are you sure?' => 'Да ли сте сигурни?',\n\t'Move up' => 'Помери на горе',\n\t'Move down' => 'Помери на доле',\n\t'Remove' => 'Уклони',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Премашен је максимални број дозвољених поља. Молим увећајте %s.',\n\n\t'Partition by' => 'Подели по',\n\t'Partitions' => 'Поделе',\n\t'Partition name' => 'Име поделе',\n\t'Values' => 'Вредности',\n\n\t'View' => 'Поглед',\n\t'View has been dropped.' => 'Поглед је избрисан.',\n\t'View has been altered.' => 'Поглед је измењен.',\n\t'View has been created.' => 'Поглед је креиран.',\n\t'Alter view' => 'Уреди поглед',\n\t'Create view' => 'Направи поглед',\n\n\t'Indexes' => 'Индекси',\n\t'Indexes have been altered.' => 'Индекси су измењени.',\n\t'Alter indexes' => 'Уреди индексе',\n\t'Add next' => 'Додај следећи',\n\t'Index Type' => 'Тип индекса',\n\t'length' => 'дужина',\n\n\t'Foreign keys' => 'Страни кључеви',\n\t'Foreign key' => 'Страни кључ',\n\t'Foreign key has been dropped.' => 'Страни кључ је избрисан.',\n\t'Foreign key has been altered.' => 'Страни кључ је измењен.',\n\t'Foreign key has been created.' => 'Страни кључ је креиран.',\n\t'Target table' => 'Циљна табела',\n\t'Change' => 'Измени',\n\t'Source' => 'Извор',\n\t'Target' => 'Циљ',\n\t'Add column' => 'Додај колону',\n\t'Alter' => 'Уреди',\n\t'Add foreign key' => 'Додај страни кључ',\n\t'ON DELETE' => 'ON DELETE (приликом брисања)',\n\t'ON UPDATE' => 'ON UPDATE (приликом освежавања)',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Изворне и циљне колоне морају бити истог типа, циљна колона мора бити индексирана и изворна табела мора садржати податке из циљне.',\n\n\t'Triggers' => 'Окидачи',\n\t'Add trigger' => 'Додај окидач',\n\t'Trigger has been dropped.' => 'Окидач је избрисан.',\n\t'Trigger has been altered.' => 'Окидач је измењен.',\n\t'Trigger has been created.' => 'Окидач је креиран.',\n\t'Alter trigger' => 'Уреди окидач',\n\t'Create trigger' => 'Формирај окидач',\n\t'Time' => 'Време',\n\t'Event' => 'Догађај',\n\t'Name' => 'Име',\n\n\t'select' => 'изабери',\n\t'Select' => 'Изабери',\n\t'Select data' => 'Изабери податке',\n\t'Functions' => 'Функције',\n\t'Aggregation' => 'Сакупљање',\n\t'Search' => 'Претрага',\n\t'anywhere' => 'било где',\n\t'Search data in tables' => 'Претражи податке у табелама',\n\t'Sort' => 'Поређај',\n\t'descending' => 'опадајуће',\n\t'Limit' => 'Граница',\n\t'Text length' => 'Дужина текста',\n\t'Action' => 'Акција',\n\t'Full table scan' => 'Скренирање комплетне табеле',\n\t'Unable to select the table' => 'Не могу да изаберем табелу',\n\t'No rows.' => 'Без редова.',\n\t'%d row(s)' => array('%d ред', '%d реда', '%d редова'),\n\t'Page' => 'Страна',\n\t'last' => 'последња',\n\t'Loading' => 'Учитавам',\n\t'Load more data' => 'Учитавам још података',\n\t'Whole result' => 'Цео резултат',\n\t'%d byte(s)' => array('%d бајт', '%d бајта', '%d бајтова'),\n\n\t'Import' => 'Увоз',\n\t'%d row(s) have been imported.' => array('%d ред је увежен.', '%d реда су увежена.', '%d редова је увежено.'),\n\n\t// in-place editing in select\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+клик на вредност за измену.',\n\t'Use edit link to modify this value.' => 'Користи везу за измену ове вредности.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Ставка%s је додата.',\n\t'Item has been deleted.' => 'Ставка је избрисана.',\n\t'Item has been updated.' => 'Ставка је измењена.',\n\t'%d item(s) have been affected.' => array('%d ставка је погођена.', '%d ставке су погођене.', '%d ставки је погођено.'),\n\t'New item' => 'Нова ставка',\n\t'original' => 'оригинал',\n\t// label for value '' in enum data type\n\t'empty' => 'празно',\n\t'edit' => 'измени',\n\t'Edit' => 'Измени',\n\t'Insert' => 'Уметни',\n\t'Save' => 'Сачувај',\n\t'Save and continue edit' => 'Сачувај и настави уређење',\n\t'Save and insert next' => 'Сачувај и уметни следеће',\n\t'Clone' => 'Дуплирај',\n\t'Delete' => 'Избриши',\n\n\t// data type descriptions\n\t'Numbers' => 'Број',\n\t'Date and time' => 'Датум и време',\n\t'Strings' => 'Текст',\n\t'Binary' => 'Бинарно',\n\t'Lists' => 'Листе',\n\t'Network' => 'Мрежа',\n\t'Geometry' => 'Геометрија',\n\t'Relations' => 'Односи',\n\n\t'Editor' => 'Уређивач',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5.$3.$1.',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'dd.mm.[yyyy].',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'сад',\n\t'yes' => 'да',\n\t'no' => 'не',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Датотека већ постоји.',\n\t'Please use one of the extensions %s.' => 'Молим користите један од наставака %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Уреди шему',\n\t'Create schema' => 'Формирај шему',\n\t'Schema has been dropped.' => 'Шема је избрисана.',\n\t'Schema has been created.' => 'Шема је креирана.',\n\t'Schema has been altered.' => 'Шема је измењена.',\n\t'Schema' => 'Шема',\n\t'Invalid schema.' => 'Шема није исправна.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Низови',\n\t'Create sequence' => 'Направи низ',\n\t'Sequence has been dropped.' => 'Низ је избрисан.',\n\t'Sequence has been created.' => 'Низ је формиран.',\n\t'Sequence has been altered.' => 'Низ је измењен.',\n\t'Alter sequence' => 'Уреди низ',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Кориснички типови',\n\t'Create type' => 'Дефиниши тип',\n\t'Type has been dropped.' => 'Тип је избрисан.',\n\t'Type has been created.' => 'тип је креиран.',\n\t'Alter type' => 'Уреди тип',\n);\n\n// run `php ../../lang.php sr` to update this file\n"
  },
  {
    "path": "adminer/lang/sv.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'System',\n\t'Server' => 'Server',\n\t'Username' => 'Användarnamn',\n\t'Password' => 'Lösenord',\n\t'Permanent login' => 'Permanent inloggning',\n\t'Login' => 'Logga in',\n\t'Logout' => 'Logga ut',\n\t'Logged as: %s' => 'Inloggad som: %s',\n\t'Logout successful.' => 'Du är nu utloggad.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Tack för att du använder Adminer, vänligen fundera över att <a href=\"https://www.adminer.org/en/donation/\">donera</a>.',\n\t'Invalid credentials.' => 'Ogiltiga inloggningsuppgifter.',\n\t'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href=\"https://www.adminer.org/en/password/\"%s>Mer information</a>.',\n\t'Database does not support password.' => 'Databasen stödjer inte lösenord.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('För många misslyckade inloggningar, försök igen om %d minut.', 'För många misslyckade inloggningar, försök igen om %d minuter.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Huvudlösenordet har löpt ut. <a href=\"https://www.adminer.org/en/extension/\"%s>Implementera</a> %s en metod för att göra det permanent.',\n\t'Language' => 'Språk',\n\t'Invalid CSRF token. Send the form again.' => 'Ogiltig CSRF-token. Skicka formuläret igen.',\n\t'If you did not send this request from Adminer then close this page.' => 'Om du inte skickade en förfrågan från Adminer så kan du stänga den här sidan.',\n\t'No extension' => 'Inget tillägg',\n\t'None of the supported PHP extensions (%s) are available.' => 'Inga av de PHP-tilläggen som stöds (%s) är tillgängliga.',\n\t'Connecting to privileged ports is not allowed.' => 'Anslutning till privilegierade portar är inte tillåtet.',\n\t'Disable %s or enable %s or %s extensions.' => 'Stäng av %s eller sätt på %s eller %s tilläggen.',\n\t'Session support must be enabled.' => 'Support för sessioner måste vara på.',\n\t'Session expired, please login again.' => 'Session har löpt ut, vänligen logga in igen.',\n\t'The action will be performed after successful login with the same credentials.' => 'Åtgärden kommer att utföras efter en lyckad inloggning med samma inloggningsuppgifter.',\n\t'%s version: %s through PHP extension %s' => '%s version: %s genom PHP-tillägg %s',\n\t'Refresh' => 'Ladda om',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Privilegier',\n\t'Create user' => 'Skapa användare',\n\t'User has been dropped.' => 'Användare har blivit borttagen.',\n\t'User has been altered.' => 'Användare har blivit ändrad.',\n\t'User has been created.' => 'Användare har blivit skapad.',\n\t'Hashed' => 'Hashad',\n\t'Column' => 'Kolumn',\n\t'Routine' => 'Rutin',\n\t'Grant' => 'Tillåt',\n\t'Revoke' => 'Neka',\n\n\t'Process list' => 'Processlista',\n\t'%d process(es) have been killed.' => array('%d process har avslutats.', '%d processer har avslutats.'),\n\t'Kill' => 'Avsluta',\n\n\t'Variables' => 'Variabler',\n\t'Status' => 'Status',\n\n\t'SQL command' => 'SQL-kommando',\n\t'%d query(s) executed OK.' => array('%d förfrågan lyckades.', '%d förfrågor lyckades.'),\n\t'Query executed OK, %d row(s) affected.' => array('Förfrågan lyckades, %d rad påverkades.', 'Förfrågan lyckades, %d rader påverkades.'),\n\t'No commands to execute.' => 'Inga kommandon att köra.',\n\t'Error in query' => 'Fel i förfrågan',\n\t'Unknown error.' => 'Okänt fel.',\n\t'Warnings' => 'Varningar',\n\t'ATTACH queries are not supported.' => 'ATTACH-förfrågor stöds inte.',\n\t'Execute' => 'Kör',\n\t'Stop on error' => 'Stanna på fel',\n\t'Show only errors' => 'Visa bara fel',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Historia',\n\t'Clear' => 'Rensa',\n\t'Edit all' => 'Redigera alla',\n\n\t'File upload' => 'Ladda upp fil',\n\t'From server' => 'Från server',\n\t'Webserver file %s' => 'Serverfil %s',\n\t'Run file' => 'Kör fil',\n\t'File does not exist.' => 'Filen finns inte.',\n\t'File uploads are disabled.' => 'Filuppladdningar är avstängda.',\n\t'Unable to upload a file.' => 'Det går inte add ladda upp filen.',\n\t'Maximum allowed file size is %sB.' => 'Högsta tillåtna storlek är %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST-datan är för stor. Minska det eller höj %s-direktivet.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Du kan ladda upp en stor SQL-fil via FTP och importera det från servern.',\n\t'You are offline.' => 'Du är offline.',\n\n\t'Export' => 'Exportera',\n\t'Output' => 'Utmatning',\n\t'open' => 'Öppna',\n\t'save' => 'Spara',\n\t'Saving' => 'Sparar',\n\t'Format' => 'Format',\n\t'Data' => 'Data',\n\n\t'Database' => 'Databas',\n\t'DB' => 'DB',\n\t'Use' => 'Använd',\n\t'Select database' => 'Välj databas',\n\t'Invalid database.' => 'Ogiltig databas.',\n\t'Database has been dropped.' => 'Databasen har tagits bort.',\n\t'Databases have been dropped.' => 'Databaserna har tagits bort.',\n\t'Database has been created.' => 'Databasen har skapats.',\n\t'Database has been renamed.' => 'Databasen har fått sitt namn ändrat.',\n\t'Database has been altered.' => 'Databasen har ändrats.',\n\t'Alter database' => 'Ändra databas',\n\t'Create database' => 'Skapa databas',\n\t'Database schema' => 'Databasschema',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Permanent länk',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Motor',\n\t'Collation' => 'Kollationering',\n\t'Data Length' => 'Datalängd',\n\t'Index Length' => 'Indexlängd',\n\t'Data Free' => 'Ledig data',\n\t'Rows' => 'Rader',\n\t'%d in total' => 'totalt %d',\n\t'Analyze' => 'Analysera',\n\t'Optimize' => 'Optimera',\n\t'Vacuum' => 'Städa',\n\t'Check' => 'Kolla',\n\t'Repair' => 'Reparera',\n\t'Truncate' => 'Avkorta',\n\t'Tables have been truncated.' => 'Tabeller har blivit avkortade.',\n\t'Move to other database' => 'Flytta till en annan databas',\n\t'Move' => 'Flytta',\n\t'Tables have been moved.' => 'Tabeller har flyttats.',\n\t'Copy' => 'Kopiera',\n\t'Tables have been copied.' => 'Tabeller har kopierats.',\n\t'overwrite' => 'Skriv över',\n\n\t'Routines' => 'Rutiner',\n\t'Routine has been called, %d row(s) affected.' => array('Rutin har kallats, %d rad påverkades.', 'Rutin har kallats, %d rader påverkades.'),\n\t'Call' => 'Kalla',\n\t'Parameter name' => 'Namn på parameter',\n\t'Create procedure' => 'Skapa procedur',\n\t'Create function' => 'Skapa funktion',\n\t'Routine has been dropped.' => 'Rutin har tagits bort.',\n\t'Routine has been altered.' => 'Rutin har ändrats.',\n\t'Routine has been created.' => 'Rutin har skapats.',\n\t'Alter function' => 'Ändra funktion',\n\t'Alter procedure' => 'Ändra procedur',\n\t'Return type' => 'Återvändningstyp',\n\n\t'Events' => 'Event',\n\t'Event has been dropped.' => 'Event har tagits bort.',\n\t'Event has been altered.' => 'Event har ändrats.',\n\t'Event has been created.' => 'Event har skapats.',\n\t'Alter event' => 'Ändra event',\n\t'Create event' => 'Skapa event',\n\t'At given time' => 'Vid en tid',\n\t'Every' => 'Varje',\n\t'Schedule' => 'Schemalägga',\n\t'Start' => 'Start',\n\t'End' => 'Slut',\n\t'On completion preserve' => 'Bibehåll vid slutet',\n\n\t'Tables' => 'Tabeller',\n\t'Tables and views' => 'Tabeller och vyer',\n\t'Table' => 'Tabell',\n\t'No tables.' => 'Inga tabeller.',\n\t'Alter table' => 'Ändra tabell',\n\t'Create table' => 'Skapa tabell',\n\t'Table has been dropped.' => 'Tabell har tagits bort.',\n\t'Tables have been dropped.' => 'Tabeller har tagits bort.',\n\t'Tables have been optimized.' => 'Tabeller har optimerats.',\n\t'Table has been altered.' => 'Tabell har ändrats.',\n\t'Table has been created.' => 'Tabell har skapats.',\n\t'Table name' => 'Tabellnamn',\n\t'Show structure' => 'Visa struktur',\n\t'engine' => 'motor',\n\t'collation' => 'kollationering',\n\t'Column name' => 'Kolumnnamn',\n\t'Type' => 'Typ',\n\t'Length' => 'Längd',\n\t'Auto Increment' => 'Automatisk uppräkning',\n\t'Options' => 'Inställningar',\n\t'Comment' => 'Kommentar',\n\t'Default value' => 'Standardvärde',\n\t'Default values' => 'Standardvärden',\n\t'Drop' => 'Ta bort',\n\t'Drop %s?' => 'Ta bort %s?',\n\t'Are you sure?' => 'Är du säker?',\n\t'Size' => 'Storlek',\n\t'Compute' => 'Beräkna',\n\t'Move up' => 'Flytta upp',\n\t'Move down' => 'Flytta ner',\n\t'Remove' => 'Ta bort',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Högsta nummer tillåtna fält är överskridet. Vänligen höj %s.',\n\n\t'Partition by' => 'Partitionera om',\n\t'Partitions' => 'Partitioner',\n\t'Partition name' => 'Partition',\n\t'Values' => 'Värden',\n\n\t'View' => 'Vy',\n\t'Materialized view' => 'Materialiserad vy',\n\t'View has been dropped.' => 'Vy har tagits bort.',\n\t'View has been altered.' => 'Vy har ändrats.',\n\t'View has been created.' => 'Vy har skapats.',\n\t'Alter view' => 'Ändra vy',\n\t'Create view' => 'Skapa vy',\n\n\t'Indexes' => 'Index',\n\t'Indexes have been altered.' => 'Index har ändrats.',\n\t'Alter indexes' => 'Ändra index',\n\t'Add next' => 'Lägg till nästa',\n\t'Index Type' => 'Indextyp',\n\t'length' => 'längd',\n\n\t'Foreign keys' => 'Främmande nycklar',\n\t'Foreign key' => 'Främmande nyckel',\n\t'Foreign key has been dropped.' => 'Främmande nyckel har tagits bort.',\n\t'Foreign key has been altered.' => 'Främmande nyckel har ändrats.',\n\t'Foreign key has been created.' => 'Främmande nyckel har skapats.',\n\t'Target table' => 'Måltabell',\n\t'Change' => 'Ändra',\n\t'Source' => 'Källa',\n\t'Target' => 'Mål',\n\t'Add column' => 'Lägg till kolumn',\n\t'Alter' => 'Ändra',\n\t'Add foreign key' => 'Lägg till främmande nyckel',\n\t'ON DELETE' => 'VID BORTTAGNING',\n\t'ON UPDATE' => 'VID UPPDATERING',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Käll- och mål-tabellen måste ha samma datatyp, ett index på målkolumnerna och refererad data måste finnas.',\n\n\t'Triggers' => 'Avtryckare',\n\t'Add trigger' => 'Lägg till avtryckare',\n\t'Trigger has been dropped.' => 'Avtryckare har tagits bort.',\n\t'Trigger has been altered.' => 'Avtryckare har ändrats.',\n\t'Trigger has been created.' => 'Avtryckare har skapats.',\n\t'Alter trigger' => 'Ändra avtryckare',\n\t'Create trigger' => 'Skapa avtryckare',\n\t'Time' => 'Tid',\n\t'Event' => 'Event',\n\t'Name' => 'Namn',\n\n\t'select' => 'välj',\n\t'Select' => 'Välj',\n\t'Select data' => 'Välj data',\n\t'Functions' => 'Funktioner',\n\t'Aggregation' => 'Aggregation',\n\t'Search' => 'Sök',\n\t'anywhere' => 'överallt',\n\t'Search data in tables' => 'Sök data i tabeller',\n\t'Sort' => 'Sortera',\n\t'descending' => 'Fallande',\n\t'Limit' => 'Begränsning',\n\t'Limit rows' => 'Begränsa rader',\n\t'Text length' => 'Textlängd',\n\t'Action' => 'Åtgärd',\n\t'Full table scan' => 'Full tabellskanning',\n\t'Unable to select the table' => 'Kunde inte välja tabellen',\n\t'No rows.' => 'Inga rader.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d rad', '%d rader'),\n\t'Page' => 'Sida',\n\t'last' => 'sist',\n\t'Load more data' => 'Ladda mer data',\n\t'Loading' => 'Laddar',\n\t'Whole result' => 'Hela resultatet',\n\t'%d byte(s)' => array('%d byte', '%d bytes'),\n\n\t'Import' => 'Importera',\n\t'%d row(s) have been imported.' => array('%d rad har importerats.', '%d rader har importerats.'),\n\t'File must be in UTF-8 encoding.' => 'Filer måste vara i UTF-8-format.',\n\n\t// in-place editing in select\n\t'Modify' => 'Ändra',\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+klicka på ett värde för att ändra det.',\n\t'Use edit link to modify this value.' => 'Använd redigeringslänken för att ändra värdet.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Sak%s har skapats.',\n\t'Item has been deleted.' => 'En sak har tagits bort.',\n\t'Item has been updated.' => 'En sak har ändrats.',\n\t'%d item(s) have been affected.' => array('%d sak har blivit förändrad.', '%d saker har blivit förändrade.'),\n\t'New item' => 'Ny sak',\n\t'original' => 'original',\n\t// label for value '' in enum data type\n\t'empty' => 'tom',\n\t'edit' => 'redigera',\n\t'Edit' => 'Redigera',\n\t'Insert' => 'Infoga',\n\t'Save' => 'Spara',\n\t'Save and continue edit' => 'Spara och fortsätt att redigera',\n\t'Save and insert next' => 'Spara och infoga nästa',\n\t'Selected' => 'Vald',\n\t'Clone' => 'Klona',\n\t'Delete' => 'Ta bort',\n\t'You have no privileges to update this table.' => 'Du har inga privilegier för att uppdatera den här tabellen.',\n\n\t// data type descriptions\n\t'Numbers' => 'Nummer',\n\t'Date and time' => 'Datum och tid',\n\t'Strings' => 'Strängar',\n\t'Binary' => 'Binärt',\n\t'Lists' => 'Listor',\n\t'Network' => 'Nätverk',\n\t'Geometry' => 'Geometri',\n\t'Relations' => 'Relationer',\n\n\t'Editor' => 'Redigerare',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'yyyy-mm-dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'nu',\n\t'yes' => 'ja',\n\t'no' => 'nej',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Filen finns redan.',\n\t'Please use one of the extensions %s.' => 'Vänligen använd en av filändelserna %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Redigera schema',\n\t'Create schema' => 'Skapa schema',\n\t'Schema has been dropped.' => 'Schema har tagits bort.',\n\t'Schema has been created.' => 'Schema har skapats.',\n\t'Schema has been altered.' => 'Schema har ändrats.',\n\t'Schema' => 'Schema',\n\t'Invalid schema.' => 'Ogiltigt schema.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Sekvenser',\n\t'Create sequence' => 'Skapa sekvens',\n\t'Sequence has been dropped.' => 'Sekvens har tagits bort.',\n\t'Sequence has been created.' => 'Sekvens har skapats.',\n\t'Sequence has been altered.' => 'Sekvens har ändrats.',\n\t'Alter sequence' => 'Ändra sekvens',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Användartyper',\n\t'Create type' => 'Skapa typ',\n\t'Type has been dropped.' => 'Typ har, typ, tagits bort.',\n\t'Type has been created.' => 'Typ har skapats.',\n\t'Alter type' => 'Ändra typ',\n);\n\n// run `php ../../lang.php sv` to update this file\n"
  },
  {
    "path": "adminer/lang/ta.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'நுழை',\n\t'Logout successful.' => 'வெற்றிக‌ர‌மாய் வெளியேறியாயிற்று.',\n\t'Invalid credentials.' => 'ச‌ரியான‌ விப‌ர‌ங்க‌ள் இல்லை.',\n\t'Server' => 'வ‌ழ‌ங்கி (Server)',\n\t'Username' => 'ப‌ய‌னாள‌ர் (User)',\n\t'Password' => 'க‌ட‌வுச்சொல்',\n\t'Select database' => 'த‌க‌வ‌ல்த‌ள‌த்தை தேர்வு செய்',\n\t'Invalid database.' => 'த‌க‌வ‌ல்த‌ள‌ம் ச‌ரியானதல்ல‌.',\n\t'Table has been dropped.' => 'அட்ட‌வ‌ணை நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Table has been altered.' => 'அட்ட‌வணை மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Table has been created.' => 'அட்ட‌வ‌ணை உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Alter table' => 'அட்ட‌வ‌ணையை மாற்று',\n\t'Create table' => 'அட்ட‌வ‌ணையை உருவாக்கு',\n\t'Table name' => 'அட்ட‌வ‌ணைப் பெய‌ர்',\n\t'engine' => 'எஞ்சின்',\n\t'collation' => 'கொலேச‌ன்',\n\t'Column name' => 'நெடுவ‌ரிசையின் பெய‌ர்',\n\t'Type' => 'வ‌கை',\n\t'Length' => 'நீளம்',\n\t'Auto Increment' => 'ஏறுமான‌ம்',\n\t'Options' => 'வேண்டிய‌வ‌ற்றை ',\n\t'Save' => 'சேமி',\n\t'Drop' => 'நீக்கு',\n\t'Database has been dropped.' => 'த‌க‌வ‌ல்த‌ள‌ம் நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Database has been created.' => 'த‌க‌வ‌ல்த‌ள‌ம் உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Database has been renamed.' => 'த‌க‌வ‌ல்த‌ள‌ம் பெய‌ர் மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Database has been altered.' => 'த‌க‌வ‌ல்த‌ள‌ம் மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Alter database' => 'த‌க‌வ‌ல்த‌ள‌த்தை மாற்று',\n\t'Create database' => 'த‌க‌வ‌ல்த‌ள‌த்தை உருவாக்கு',\n\t'SQL command' => 'SQL க‌ட்ட‌ளை',\n\t'Logout' => 'வெளியேறு',\n\t'Use' => 'உப‌யோகி',\n\t'No tables.' => 'அட்ட‌வ‌ணை இல்லை.',\n\t'select' => 'தேர்வு செய்',\n\t'Item has been deleted.' => 'உருப்படி நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Item has been updated.' => 'உருப்ப‌டி புதுப்பிக்க‌ப்ப‌ட்ட‌து.',\n\t'Edit' => 'தொகு',\n\t'Insert' => 'புகுத்து',\n\t'Save and insert next' => 'சேமித்த‌ப் பின் அடுத்த‌தை புகுத்து',\n\t'Delete' => 'நீக்கு',\n\t'Database' => 'த‌க‌வ‌ல்த‌ள‌ம்',\n\t'Routines' => 'ரொட்டீன் ',\n\t'Indexes have been altered.' => 'அக‌வ‌ரிசைக‌ள் (Indexes) மாற்ற‌ப்பட்ட‌து.',\n\t'Indexes' => 'அக‌வ‌ரிசைக‌ள் (Index) ',\n\t'Alter indexes' => 'அக‌வ‌ரிசையை (Index) மாற்று',\n\t'Add next' => 'அடுத்த‌தை சேர்க்க‌வும்',\n\t'Language' => 'மொழி',\n\t'Select' => 'தேர்வு செய்',\n\t'New item' => 'புதிய‌ உருப்ப‌டி',\n\t'Search' => 'தேடு',\n\t'Sort' => 'த‌ர‌ம் பிரி',\n\t'descending' => 'இற‌ங்குமுக‌மான‌',\n\t'Limit' => 'வ‌ர‌ம்பு',\n\t'No rows.' => 'வ‌ரிசை இல்லை.',\n\t'Action' => 'செய‌ல்',\n\t'edit' => 'தொகு',\n\t'Page' => 'ப‌க்க‌ம்',\n\t'Query executed OK, %d row(s) affected.' => array('வின‌வ‌ல் செய‌ல்ப‌டுத்த‌ப்ப‌ட்ட‌து, %d வ‌ரிசை மாற்ற‌ப்ப‌ட்ட‌து.', 'வின‌வ‌ல் செய‌ல்ப‌டுத்த‌ப்ப‌ட்ட‌து, %d வ‌ரிசைக‌ள் மாற்றப்ப‌ட்ட‌ன‌.'),\n\t'Error in query' => 'வின‌வ‌லில் த‌வ‌றுள்ள‌து',\n\t'Execute' => 'செய‌ல்ப‌டுத்து',\n\t'Table' => 'அட்ட‌வ‌ணை',\n\t'Foreign keys' => 'வேற்று விசைக‌ள்',\n\t'Triggers' => 'தூண்டுத‌ல்க‌ள்',\n\t'View' => 'தோற்றம்',\n\t'Unable to select the table' => 'அட்ட‌வ‌ணையை தேர்வு செய்ய‌ முடிய‌வில்லை',\n\t'Invalid CSRF token. Send the form again.' => 'CSRF டோக்க‌ன் செல்லாது. ப‌டிவ‌த்தை மீண்டும் அனுப்ப‌வும்.',\n\t'Comment' => 'குறிப்பு',\n\t'Default values' => 'உள்ளிருக்கும் (Default) ம‌திப்புக‌ள் ',\n\t'%d byte(s)' => array('%d பைட்', '%d பைட்டுக‌ள்'),\n\t'No commands to execute.' => 'செய‌ல் ப‌டுத்த‌ எந்த‌ க‌ட்ட‌ளைக‌ளும் இல்லை.',\n\t'Unable to upload a file.' => 'கோப்பை மேலேற்ற‌ம் (upload) செய்ய‌ இயல‌வில்லை.',\n\t'File upload' => 'கோப்பை மேலேற்று (upload) ',\n\t'File uploads are disabled.' => 'கோப்புக‌ள் மேலேற்றம் (upload)முட‌க்க‌ப்ப‌ட்டுள்ள‌ன‌.',\n\t'Routine has been called, %d row(s) affected.' => array('ரொட்டீன்க‌ள் அழைக்க‌ப்பட்டுள்ள‌ன‌, %d வ‌ரிசை மாற்ற‌ம் அடைந்த‌து.', 'ரொட்டீன்க‌ள் அழைக்க‌ப்ப‌ட்டுள்ள‌ன‌, %d வ‌ரிசைக‌ள் மாற்றம் அடைந்துள்ள‌ன‌.'),\n\t'Call' => 'அழை',\n\t'None of the supported PHP extensions (%s) are available.' => 'PHP ஆத‌ர‌வு விரிவுக‌ள் (%s) இல்லை.',\n\t'Session support must be enabled.' => 'செஷ‌ன் ஆத‌ர‌வு இய‌க்க‌ப்ப‌ட‌ வேண்டும்.',\n\t'Session expired, please login again.' => 'செஷ‌ன் காலாவ‌தியாகி விட்ட‌து. மீண்டும் நுழைய‌வும்.',\n\t'Text length' => 'உரை நீள‌ம்',\n\t'Foreign key has been dropped.' => 'வேற்று விசை நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Foreign key has been altered.' => 'வேற்று விசை மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Foreign key has been created.' => 'வேற்று விசை உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Foreign key' => 'வேற்று விசை',\n\t'Target table' => 'அட்ட‌வ‌ணை இல‌க்கு',\n\t'Change' => 'மாற்று',\n\t'Source' => 'மூல‌ம்',\n\t'Target' => 'இல‌க்கு',\n\t'Add column' => 'நெடு வ‌ரிசையை சேர்க்க‌வும்',\n\t'Alter' => 'மாற்று',\n\t'Add foreign key' => 'வேற்று விசை சேர்க்க‌வும்',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'அக‌வ‌ரிசை வ‌கை (Index Type)',\n\t'length' => 'நீள‌ம்',\n\t'View has been dropped.' => 'தோற்ற‌ம் நீக்க‌ப்ப‌ட்ட‌து.',\n\t'View has been altered.' => 'தோற்றம் மாற்றப்ப‌ட்ட‌து.',\n\t'View has been created.' => 'தோற்ற‌ம் உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Alter view' => 'தோற்ற‌த்தை மாற்று',\n\t'Create view' => 'தோற்றத்தை உருவாக்கு',\n\t'Name' => 'பெய‌ர்',\n\t'Process list' => 'வேலைக‌ளின் ப‌ட்டி',\n\t'%d process(es) have been killed.' => array('%d வேலை வ‌லுவில் நிறுத்த‌ப‌ட்ட‌து.', '%d வேலைக‌ள் வ‌லுவில் நிறுத்த‌ப‌ட்ட‌ன‌.'),\n\t'Kill' => 'வ‌லுவில் நிறுத்து',\n\t'Parameter name' => 'அள‌புரு (Parameter) பெய‌ர்',\n\t'Database schema' => 'த‌க‌வ‌ல்த‌ள‌ அமைப்பு முறைக‌ள்',\n\t'Create procedure' => 'செய்முறையை உருவாக்கு',\n\t'Create function' => 'Function உருவாக்கு',\n\t'Routine has been dropped.' => 'ரொட்டீன் நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Routine has been altered.' => 'ரொட்டீன் மாற்ற‌ப்ப‌ட்டது.',\n\t'Routine has been created.' => 'ரொட்டீன் உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Alter function' => 'Function மாற்று',\n\t'Alter procedure' => 'செய‌ல்முறையை மாற்று',\n\t'Return type' => 'திரும்பு வ‌கை',\n\t'Add trigger' => 'தூண்டு விசையை சேர்',\n\t'Trigger has been dropped.' => 'தூண்டு விசை நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Trigger has been altered.' => 'தூண்டு விசை மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Trigger has been created.' => 'தூண்டு விசை உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Alter trigger' => 'தூண்டு விசையை மாற்று',\n\t'Create trigger' => 'தூண்டு விசையை உருவாக்கு',\n\t'Time' => 'நேர‌ம்',\n\t'Event' => 'நிக‌ழ்ச்சி',\n\t'%d row(s)' => array('%d வ‌ரிசை', '%d வ‌ரிசைக‌ள்'),\n\t'Remove' => 'நீக்கு',\n\t'Are you sure?' => 'நிச்ச‌ய‌மாக‌ ?',\n\t'Privileges' => 'ச‌லுகைக‌ள் / சிற‌ப்புரிமைக‌ள்',\n\t'Create user' => 'ப‌ய‌னாள‌ரை உருவாக்கு',\n\t'User has been dropped.' => 'ப‌யனீட்டாள‌ர் நீக்க‌ப்ப‌ட்டார்.',\n\t'User has been altered.' => 'ப‌யனீட்டாள‌ர் மாற்றப்ப‌ட்டார்.',\n\t'User has been created.' => 'ப‌ய‌னீட்டாள‌ர் உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Hashed' => 'Hashed',\n\t'Column' => 'நெடுவ‌ரிசை',\n\t'Routine' => 'ரொட்டீன்',\n\t'Grant' => 'அனும‌திய‌ளி',\n\t'Revoke' => 'இர‌த்துச்செய்',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'மிக‌ அதிக‌மான‌ POST த‌க‌வ‌ல். த‌க‌வ‌லை குறைக்க‌வும் அல்ல‌து %s வ‌டிவ‌மைப்பை (configuration directive) மாற்ற‌வும்.',\n\t'Logged as: %s' => 'ப‌ய‌னாளர்: %s',\n\t'Move up' => 'மேலே ந‌க‌ர்த்து',\n\t'Move down' => 'கீழே நக‌ர்த்து',\n\t'Functions' => 'Functions',\n\t'Aggregation' => 'திர‌ள்வு (Aggregation)',\n\t'Export' => 'ஏற்றும‌தி',\n\t'Output' => 'வெளியீடு',\n\t'open' => 'திற‌',\n\t'save' => 'சேமி',\n\t'Format' => 'ஃபார்ம‌ட் (Format)',\n\t'Tables' => 'அட்ட‌வ‌ணை',\n\t'Data' => 'த‌க‌வ‌ல்',\n\t'Event has been dropped.' => 'நிக‌ழ்ச்சி (Event) நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Event has been altered.' => 'நிக‌ழ்ச்சி (Event) மாற்றப்ப‌ட்ட‌து.',\n\t'Event has been created.' => 'நிக‌ழ்ச்சி (Event) உருவாக்க‌‌ப்ப‌ட்ட‌து.',\n\t'Alter event' => 'நிக‌ழ்ச்சியை (Event) மாற்று',\n\t'Create event' => 'நிக‌ழ்ச்சியை (Event) உருவாக்கு',\n\t'At given time' => 'குறித்த‌ நேர‌த்தில்',\n\t'Every' => 'ஒவ்வொரு',\n\t'Events' => 'நிக‌ழ்ச்சிக‌ள்',\n\t'Schedule' => 'கால‌ அட்ட‌வ‌ணை',\n\t'Start' => 'தொட‌ங்கு',\n\t'End' => 'முடி (வு)',\n\t'Status' => 'நிக‌ழ்நிலை (Status)',\n\t'On completion preserve' => 'முடிந்த‌தின் பின் பாதுகாக்க‌வும்',\n\t'Tables and views' => 'அட்ட‌வ‌ணைக‌ளும் பார்வைக‌ளும்',\n\t'Data Length' => 'த‌க‌வ‌ல் நீள‌ம்',\n\t'Index Length' => 'Index நீள‌ம்',\n\t'Data Free' => 'Data Free',\n\t'Collation' => 'கொலேச‌ன்',\n\t'Analyze' => 'நுணுகி ஆராய‌வும்',\n\t'Optimize' => 'உக‌ப்பாக்கு (Optimize)',\n\t'Check' => 'ப‌ரிசோதி',\n\t'Repair' => 'ப‌ழுது பார்',\n\t'Truncate' => 'குறை (Truncate)',\n\t'Tables have been truncated.' => 'அட்ட‌வ‌ணை குறைக்க‌ப்ப‌ட்ட‌து (truncated).',\n\t'Rows' => 'வ‌ரிசைக‌ள்',\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'அட்ட‌வ‌ணை ந‌க‌ர்த்த‌ப்ப‌ட்ட‌து.',\n\t'Move to other database' => 'ம‌ற்ற‌ த‌க‌வ‌ல் தள‌த்திற்க்கு ந‌க‌ர்த்து',\n\t'Move' => 'ந‌க‌ர்த்து',\n\t'Engine' => 'எஞ்சின் (Engine)',\n\t'Save and continue edit' => 'சேமித்த‌ பிற‌கு தொகுப்ப‌தை தொட‌ர‌வும்',\n\t'original' => 'அச‌ல்',\n\t'Tables have been dropped.' => 'அட்ட‌வ‌ணை நீக்க‌ப்ப‌ட்ட‌து.',\n\t'%d item(s) have been affected.' => array('%d உருப்ப‌டி மாற்ற‌ம‌டைந்தது.', '%d உருப்ப‌டிக‌ள் மாற்ற‌ம‌டைந்த‌ன‌.'),\n\t'Whole result' => 'முழுமையான‌ முடிவு',\n\t'Clone' => 'ந‌க‌லி (Clone)',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'அனும‌திக்க‌ப்ப‌ட்ட‌ அதிக‌ப‌ட்ச‌ கோப்புக‌ளின் எண்ணிக்கை மீற‌ப்ப‌ட்ட‌து. த‌ய‌வு செய்து %s ம‌ற்றும் %s யை அதிக‌ரிக்க‌வும்.',\n\t'Partition by' => 'பிரித்த‌து',\n\t'Partitions' => 'பிரிவுக‌ள்',\n\t'Partition name' => 'பிரிவின் பெய‌ர்',\n\t'Values' => 'ம‌திப்புக‌ள்',\n\t'%d row(s) have been imported.' => array('%d வ‌ரிசை இற‌க்கும‌தி (Import) செய்ய‌ப்ப‌ட்ட‌து.', '%d வ‌ரிசைக‌ள் இற‌க்கும‌தி (Import) செய்ய‌ப்ப‌ட்டன‌.'),\n\t'Show structure' => 'க‌ட்ட‌மைப்பை காண்பிக்க‌வும்',\n\t'Import' => 'இற‌க்கும‌தி (Import)',\n\t'Stop on error' => 'பிழை ஏற்ப‌டின் நிற்க‌',\n\t'Select data' => 'த‌க‌வ‌லை தேர்வு செய்',\n\t'%.3f s' => '%.3f s',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'dd/mm/[yyyy]',\n\t'History' => 'வ‌ர‌லாறு',\n\t'Variables' => 'மாறிலிக‌ள் (Variables)',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'இல‌க்கு நெடுவ‌ரிசையில் அக‌வ‌ரிசை (Index) ம‌ற்றும் குறிக்க‌ப்ப‌ட்ட‌ த‌க‌வல் (Referenced DATA) க‌ண்டிப்பாக‌ இருத்த‌ல் வேண்டும். மூல‌ நெடுவ‌ரிசை ம‌ற்றும் இலக்கு நெடுவ‌ரிசையின் த‌க‌வ‌ல் வ‌டிவ‌ம் (DATA TYPE) ஒன்றாக‌ இருக்க‌ வேண்டும்.',\n\t'Relations' => 'உற‌வுக‌ள் (Relations)',\n\t'Run file' => 'கோப்பினை இய‌க்க‌வும்',\n\t'Clear' => 'துடை (Clear)',\n\t'Maximum allowed file size is %sB.' => 'கோப்பின் அதிக‌ப‌ட்ச‌ அள‌வு %sB.',\n\t'Numbers' => 'எண்க‌ள்',\n\t'Date and time' => 'தேதி ம‌ற்றும் நேர‌ம்',\n\t'Strings' => 'ச‌ர‌ம் (String)',\n\t'Binary' => 'பைன‌ரி',\n\t'Lists' => 'ப‌ட்டிய‌ல்',\n\t'Editor' => 'தொகுப்பாளர்',\n\t'Webserver file %s' => 'வெப் ச‌ர்வ‌ர் கோப்பு %s',\n\t'File does not exist.' => 'கோப்பு இல்லை.',\n\t'%d in total' => 'மொத்தம் %d ',\n\t'Permanent login' => 'நிர‌ந்த‌ர‌மாக‌ நுழைய‌வும்',\n\t'Schema' => 'அமைப்புமுறை',\n\t'Alter schema' => 'அமைப்புமுறையை மாற்று',\n\t'Create schema' => 'அமைப்புமுறையை உருவாக்கு',\n\t'Search data in tables' => 'த‌க‌வ‌லை அட்ட‌வ‌ணையில் தேடு',\n\t'Sequences' => 'வ‌ரிசைமுறை',\n\t'Create sequence' => 'வ‌ரிசைமுறையை உருவாக்கு',\n\t'User types' => 'ப‌ய‌னாள‌ர் வ‌கைக‌ள்',\n\t'Create type' => 'வ‌கையை உருவாக்கு',\n\t'Item%s has been inserted.' => 'உருப்ப‌டி (Item%s) சேர்க்க‌ப்ப‌ட்ட‌து.',\n\t'Schema has been dropped.' => 'அமைப்புமுறை நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Schema has been created.' => 'அமைப்புமுறை உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Schema has been altered.' => 'அமைப்புமுறை மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Use edit link to modify this value.' => 'இந்த‌ ம‌திப்பினை மாற்ற‌, தொகுப்பு இணைப்பினை உப‌யோகிக்க‌வும்.',\n\t'last' => 'க‌டைசி',\n\t'Sequence has been dropped.' => 'வ‌ரிசைமுறை நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Sequence has been created.' => 'வ‌ரிசைமுறை உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Sequence has been altered.' => 'வ‌ரிசைமுறை மாற்ற‌ப்ப‌ட்ட‌து.',\n\t'Alter sequence' => 'வ‌ரிசைமுறையை மாற்று',\n\t'From server' => 'செர்வ‌ரில் இருந்து',\n\t'Type has been dropped.' => 'வ‌கை (type) நீக்க‌ப்ப‌ட்ட‌து.',\n\t'Type has been created.' => 'வ‌கை (type) உருவாக்க‌ப்ப‌ட்ட‌து.',\n\t'Alter type' => 'வ‌கையினை (type) மாற்று',\n\t'System' => 'சிஸ்ட‌ம் (System)',\n\t'anywhere' => 'எங்காயினும்',\n\t'empty' => 'வெறுமை (empty)',\n\t'No extension' => 'விரிவு (extensஇஒன்) இல்லை ',\n\t'Databases have been dropped.' => 'த‌க‌வ‌ல் த‌ள‌ங்க‌ள் நீக்க‌ப்ப‌ட்டன‌.',\n\t'%s version: %s through PHP extension %s' => '%s ப‌திப்பு: %s through PHP extension %s',\n\t'Network' => 'நெட்வொர்க்',\n\t'Geometry' => 'வ‌டிவ‌விய‌ல் (Geometry)',\n\t'File exists.' => 'கோப்பு உள்ள‌து.',\n\t'now' => 'இப்பொழுது',\n\t'%d query(s) executed OK.' => array('%d வின‌வ‌ல் செய‌ல்ப‌டுத்த‌ப்ப‌ட்ட‌து.', '%d வின‌வ‌ல்க‌ள் செய‌ல்ப‌டுத்த‌ப்ப‌ட்ட‌ன‌.'),\n\t'Show only errors' => 'பிழைக‌ளை ம‌ட்டும் காண்பிக்க‌வும்',\n\t'Refresh' => 'புதுப்பி (Refresh)',\n\t'Invalid schema.' => 'அமைப்புமுறை ச‌ரியான‌த‌ல்ல‌ (Invalid Schema).',\n\t'Please use one of the extensions %s.' => 'த‌ய‌வு செய்து ஒரு விரிவினை %s (extension) உப‌யோகிக்க‌வும்.',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'அட்டவணைகள் நகலெடுக்கப் பட்டது.',\n\t'Copy' => 'நகல்',\n\t'Permanent link' => 'நிரந்தர இணைப்பு',\n\t'Edit all' => 'அனைத்தையும் தொகு',\n\t'HH:MM:SS' => 'HH:MM:SS',\n);\n\n// run `php ../../lang.php ta` to update this file\n"
  },
  {
    "path": "adminer/lang/th.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t'Login' => 'เข้าสู่ระบบ',\n\t'Logout successful.' => 'ออกจากระบบเรียบร้อยแล้ว.',\n\t'Invalid credentials.' => 'ข้อมูลไม่ถูกต้อง.',\n\t'Server' => 'เซอเวอร์',\n\t'Username' => 'ชื่อผู้ใช้งาน',\n\t'Password' => 'รหัสผ่าน',\n\t'Select database' => 'เลือกฐานข้อมูล',\n\t'Invalid database.' => 'ฐานข้อมูลไม่ถูกต้อง.',\n\t'Table has been dropped.' => 'ลบตารางแล้ว.',\n\t'Table has been altered.' => 'แก้ไขตารางแล้ว.',\n\t'Table has been created.' => 'สร้างตารางใหม่แล้ว.',\n\t'Alter table' => 'เปลี่ยนแปลงตารางแล้ว',\n\t'Create table' => 'สร้างตารางใหม่',\n\t'Table name' => 'ชื่อตาราง',\n\t'engine' => 'ชนิดของฐานข้อมูล',\n\t'collation' => 'การตรวจทาน',\n\t'Column name' => 'ชื่อคอลัมน์',\n\t'Type' => 'ชนิด',\n\t'Length' => 'ความยาว',\n\t'Auto Increment' => 'เพิ่มลำดับโดยอัตโนมัติ',\n\t'Options' => 'ตัวเลือก',\n\t'Save' => 'บันทึก',\n\t'Drop' => 'ลบ',\n\t'Database has been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',\n\t'Database has been created.' => 'สร้างฐานข้อมูลใหม่แล้ว.',\n\t'Database has been renamed.' => 'เปลี่ยนชื่อฐานข้อมูลแล้ว.',\n\t'Database has been altered.' => 'เปลี่ยนแปลงฐานข้อมูลแล้ว.',\n\t'Alter database' => 'เปลี่ยนแปลงฐานข้อมูล',\n\t'Create database' => 'สร้างฐานข้อมูล',\n\t'SQL command' => 'คำสั่ง SQL',\n\t'Logout' => 'ออกจากระบบ',\n\t'Use' => 'ใช้งาน',\n\t'No tables.' => 'ไม่พบตาราง.',\n\t'select' => 'เลือก',\n\t'Item has been deleted.' => 'รายการถูกลบแล้ว.',\n\t'Item has been updated.' => 'ปรับปรุงรายการแล้ว.',\n\t'Item%s has been inserted.' => 'มี%s รายการ ถูกเพิ่มแล้ว.',\n\t'Edit' => 'แก้ไข',\n\t'Insert' => 'เพิ่ม',\n\t'Save and insert next' => 'บันทึกแล้วเพิ่มรายการถัดไป',\n\t'Delete' => 'ลบ',\n\t'Database' => 'ฐานข้อมูล',\n\t'Routines' => 'รูทีน',\n\t'Indexes have been altered.' => 'เปลี่ยนแปลงดัชนีแล้ว.',\n\t'Indexes' => 'ดัชนี',\n\t'Alter indexes' => 'เปลี่ยนแปลงดัชนี',\n\t'Add next' => 'เพิ่มรายการถัดไป',\n\t'Language' => 'ภาษา',\n\t'Select' => 'เลือก',\n\t'New item' => 'รายการใหม่',\n\t'Search' => 'ค้นหา',\n\t'Sort' => 'เรียงลำดับ',\n\t'descending' => 'มากไปน้อย',\n\t'Limit' => 'จำกัด',\n\t'No rows.' => 'ไม่มีแถวของตาราง.',\n\t'Action' => 'ดำเนินการ',\n\t'edit' => 'แก้ไข',\n\t'Page' => 'หน้า',\n\t'Query executed OK, %d row(s) affected.' => 'ประมวลผลคำสั่งแล้ว มี %d ถูกดำเนินการ.',\n\t'Error in query' => 'คำสั่งไม่ถูกต้อง',\n\t'Execute' => 'ประมวลผล',\n\t'Table' => 'ตาราง',\n\t'Foreign keys' => 'คีย์คู่แข่ง',\n\t'Triggers' => 'ทริกเกอร์',\n\t'View' => 'วิว',\n\t'Unable to select the table' => 'ไม่สามารถเลือกตารางได้',\n\t'Invalid CSRF token. Send the form again.' => 'เครื่องหมาย CSRF ไม่ถูกต้อง ส่งข้อมูลใหม่อีกครั้ง.',\n\t'Comment' => 'หมายเหตุ',\n\t'Default values' => 'ค่าเริ่มต้น',\n\t'%d byte(s)' => '%d ไบท์',\n\t'No commands to execute.' => 'ไม่มีคำสั่งที่จะประมวลผล.',\n\t'Unable to upload a file.' => 'ไม่สามารถอัปโหลดไฟล์ได้.',\n\t'File upload' => 'อัปโหลดไฟล์',\n\t'File uploads are disabled.' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน.',\n\t'Routine has been called, %d row(s) affected.' => 'รูทีนถูกเรียกใช้งาน มี %d แถวถูกดำเนินการ.',\n\t'Call' => 'เรียกใช้งาน',\n\t'No extension' => 'ไม่พบส่วนเสริม',\n\t'None of the supported PHP extensions (%s) are available.' => 'ไม่มีส่วนเสริมของ PHP (%s) ที่สามารถใช้งานได้.',\n\t'Session support must be enabled.' => 'ต้องเปิดใช้งาน Session.',\n\t'Session expired, please login again.' => 'Session หมดอายุแล้ว กรุณาเข้าสู่ระบบใหม่อีกครั้ง.',\n\t'Text length' => 'ความยาวของอักษร',\n\t'Foreign key has been dropped.' => 'คีย์คู่แข่งถูกลบแล้ว.',\n\t'Foreign key has been altered.' => 'คีย์คู่แข่งถูกเปลี่ยนแปลงแล้ว.',\n\t'Foreign key has been created.' => 'คีย์คู่แข่งถูกสร้างแล้ว.',\n\t'Foreign key' => 'คีย์คู่แข่ง',\n\t'Target table' => 'คารางเป้าหมาย',\n\t'Change' => 'แก้ไข',\n\t'Source' => 'แหล่งข้อมูล',\n\t'Target' => 'เป้าหมาย',\n\t'Add column' => 'เพิ่มคอลัมน์',\n\t'Alter' => 'เปลี่ยนแปลง',\n\t'Add foreign key' => 'เพิ่มคีย์คู่แข่ง',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Index Type' => 'ชนิดของดัชนี',\n\t'length' => 'ความยาว',\n\t'View has been dropped.' => 'วิวถูกลบแล้ว.',\n\t'View has been altered.' => 'วิวถูกเปลี่ยนแปลงแล้ว.',\n\t'View has been created.' => 'วิวถูกสร้างแล้ว.',\n\t'Alter view' => 'เปลี่ยนแปลงวิว',\n\t'Create view' => 'เพิ่มวิว',\n\t'Name' => 'ชื่อ',\n\t'Process list' => 'รายการของกระบวนการ',\n\t'%d process(es) have been killed.' => 'มี %d กระบวนการถูกทำลายแล้ว.',\n\t'Kill' => 'ทำลาย',\n\t'Parameter name' => 'ชื่อพารามิเตอร์',\n\t'Database schema' => 'Schema ของฐานข้อมูล',\n\t'Create procedure' => 'สร้าง procedure',\n\t'Create function' => 'สร้าง Function',\n\t'Routine has been dropped.' => 'Routine ถูกลบแล้ว.',\n\t'Routine has been altered.' => 'Routine ถูกเปลี่ยนแปลงแล้ว.',\n\t'Routine has been created.' => 'Routine ถูกสร้างแล้ว.',\n\t'Alter function' => 'เปลี่ยนแปลง Function',\n\t'Alter procedure' => 'เปลี่ยนแปลง procedure',\n\t'Return type' => 'ประเภทของค่าที่คืนกลับ',\n\t'Add trigger' => 'เพิ่ม trigger',\n\t'Trigger has been dropped.' => 'Trigger ถูกลบแล้ว.',\n\t'Trigger has been altered.' => 'Trigger ถูกเปลี่ยนแปลงแล้ว.',\n\t'Trigger has been created.' => 'Trigger ถูกสร้างแล้ว.',\n\t'Alter trigger' => 'เปลี่ยนแปลง Trigger',\n\t'Create trigger' => 'สร้าง Trigger',\n\t'Time' => 'เวลา',\n\t'Event' => 'เหตุการณ์',\n\t'%s version: %s through PHP extension %s' => '%s รุ่น: %s ผ่านส่วนขยาย PHP %s',\n\t'%d row(s)' => '%d แถว',\n\t'Remove' => 'ลบ',\n\t'Are you sure?' => 'คุณแน่ใจแล้วหรือ',\n\t'Privileges' => 'สิทธิ์',\n\t'Create user' => 'สร้างผู้ใช้งาน',\n\t'User has been dropped.' => 'ลบผู้ใช้งานแล้ว.',\n\t'User has been altered.' => 'เปลี่ยนแปลงผู้ใช้งานแล้ว.',\n\t'User has been created.' => 'สร้างผู้ใช้งานแล้ว.',\n\t'Hashed' => 'Hash',\n\t'Column' => 'คอลัมน์',\n\t'Routine' => 'รูทีน',\n\t'Grant' => 'การอนุญาต',\n\t'Revoke' => 'ยกเลิก',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'ข้อมูลที่ส่งเข้ามีขนาดใหญ่เกิน คุณสามารถ เพิ่ม-ลดขนาดได้ที่ %s คำสั่งการตั้งค่า.',\n\t'Logged as: %s' => 'สวัสดีคุณ: %s',\n\t'Move up' => 'ย้ายไปข้างบน',\n\t'Move down' => 'ย้ายลงล่าง',\n\t'Functions' => 'ฟังก์ชั่น',\n\t'Aggregation' => 'รวบรวม',\n\t'Export' => 'ส่งออก',\n\t'Output' => 'ข้อมูลที่ส่งออก',\n\t'open' => 'เปิด',\n\t'save' => 'บันทึก',\n\t'Format' => 'รูปแบบ',\n\t'Tables' => 'ตาราง',\n\t'Data' => 'ข้อมูล',\n\t'Event has been dropped.' => 'เหตุการณ์ถูกลบแล้ว.',\n\t'Event has been altered.' => 'เหตุการณ์ถูกเปลี่ยนแปลงแล้ว.',\n\t'Event has been created.' => 'เหตุการณ์ถูกสร้างแล้ว.',\n\t'Alter event' => 'เปลี่ยนแปลงเหตุการณ์',\n\t'Create event' => 'สร้างเหตุการณ์',\n\t'At given time' => 'ในเวลาที่กำหนด',\n\t'Every' => 'ทุกๆ',\n\t'Events' => 'เหตุการณ์',\n\t'Schedule' => 'กำหนดการณ์',\n\t'Start' => 'เริ่มต้น',\n\t'End' => 'สิ้นสุด',\n\t'Status' => 'สถานะ',\n\t'On completion preserve' => 'เมื่อเสร็จสิ้นการสงวน',\n\t'Tables and views' => 'ตารางและวิว',\n\t'Data Length' => 'ความยาวของข้อมูล',\n\t'Index Length' => 'ความยาวของดัชนี',\n\t'Data Free' => 'พื้นที่ว่าง',\n\t'Collation' => 'การตรวจทาน',\n\t'Analyze' => 'วิเคราะห์',\n\t'Optimize' => 'เพิ่มประสิทธิภาพ',\n\t'Check' => 'ตรวจสอบ',\n\t'Repair' => 'ซ่อมแซม',\n\t'Truncate' => 'ตัดทิ้ง',\n\t'Tables have been truncated.' => 'เคลียร์ตารางแล้ว (truncate).',\n\t'Rows' => 'แถว',\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Tables have been moved.' => 'ตารางถูกย้ายแล้ว.',\n\t'Move to other database' => 'ย้ายไปยังฐานข้อมูลอื่น',\n\t'Move' => 'ย้าย',\n\t'Engine' => 'ชนิดของฐานข้อมูล',\n\t'Save and continue edit' => 'บันทึกและแก้ไขข้อมูลอื่นๆต่อ',\n\t'original' => 'ต้นฉบับ',\n\t'Tables have been dropped.' => 'ตารางถูกลบแล้ว.',\n\t'%d item(s) have been affected.' => 'มี %d รายการถูกดำเนินการแล้ว.',\n\t'Whole result' => 'รวมผล',\n\t'Clone' => 'ทำซ้ำ',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'จำนวนสูงสุดของฟิลด์อนุญาตให้เกิน กรุณาเพิ่มอีก %s.',\n\t'Partition by' => 'พาร์ทิชันโดย',\n\t'Partitions' => 'พาร์ทิชัน',\n\t'Partition name' => 'ชื่อของพาร์ทิชัน',\n\t'Values' => 'ค่า',\n\t'%d row(s) have been imported.' => '%d แถวถูกนำเข้าแล้ว.',\n\t'anywhere' => 'ทุกแห่ง',\n\t'Import' => 'นำเข้า',\n\t'Stop on error' => 'หยุดการทำงานเมื่อเออเรอ',\n\t'%.3f s' => '%.3f วินาที',\n\t'$1-$3-$5' => '$5/$3/$1',\n\t'[yyyy]-mm-dd' => 'วันที่/เดือน/[ปี]',\n\t'History' => 'ประวัติ',\n\t'Variables' => 'ตัวแปร',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'แหล่งที่มาและเป้าหมายของคอลมัน์ต้องมีชนิดข้อมูลเดียวกัน คือต้องมีดัชนีและข้อมูลอ้างอิงของคอลัมน์เป้าหมาย.',\n\t'Relations' => 'ความสำพันธ์',\n\t'Run file' => 'ทำงานจากไฟล์',\n\t'Clear' => 'เคลียร์',\n\t'Maximum allowed file size is %sB.' => 'ขนาดไฟล์สูงสุดที่อนุญาตให้ใช้งานคือ %sB.',\n\t'Numbers' => 'ตัวเลข',\n\t'Date and time' => 'วันและเวลา',\n\t'Strings' => 'ตัวอักษร',\n\t'Binary' => 'เลขฐานสอง',\n\t'Lists' => 'รายการ',\n\t'Editor' => 'ผู้แก้ไข',\n\t'Webserver file %s' => 'Webserver file %s',\n\t'File does not exist.' => 'ไม่มีไฟล์.',\n\t'%d in total' => '%d ของทั้งหมด',\n\t'Permanent login' => 'จดจำการเข้าสู่ระบบตลอดไป',\n\t'Databases have been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',\n\t'Search data in tables' => 'ค้นหาในตาราง',\n\t'Schema' => 'Schema',\n\t'Alter schema' => 'เปลี่ยนแปลง schema',\n\t'Create schema' => 'สร้าง schema',\n\t'Schema has been dropped.' => 'Schema ถูกลบแล้ว.',\n\t'Schema has been created.' => 'Schema ถูกสร้างแล้ว.',\n\t'Schema has been altered.' => 'Schema ถูกเปลี่ยนแปลงแล้ว.',\n\t'Sequences' => 'Sequences',\n\t'Create sequence' => 'Sequence ถูกสร้างแล้ว',\n\t'Alter sequence' => 'Sequence ถูกเปลี่ยนแปลงแล้ว',\n\t'Sequence has been dropped.' => 'Sequence ถูกลบแล้ว.',\n\t'Sequence has been created.' => 'Sequence ถูกสร้างแล้ว.',\n\t'Sequence has been altered.' => 'Sequence ถูกเปลี่ยนแปลงแล้ว.',\n\t'User types' => 'ประเภทผู้ใช้งาน',\n\t'Create type' => 'สร้างประเภทผู้ใช้งาน',\n\t'Alter type' => 'แก้ไขประเภท',\n\t'Type has been dropped.' => 'ประเภทถูกลบแล้ว.',\n\t'Type has been created.' => 'ประเภทถูกสร้างแล้ว.',\n\t'Ctrl+click on a value to modify it.' => 'กด Ctrl+click เพื่อแก้ไขค่า.',\n\t'Use edit link to modify this value.' => 'ใช้ลิงค์ แก้ไข เพื่อปรับเปลี่ยนค่านี้.',\n\t'last' => 'ล่าสุด',\n\t'From server' => 'จากเซเวอร์',\n\t'System' => 'ระบบ',\n\t'Select data' => 'เลือกข้อมูล',\n\t'Show structure' => 'แสดงโครงสร้าง',\n\t'empty' => 'ว่างเปล่า',\n\t'Network' => 'เครื่องข่าย',\n\t'Geometry' => 'เรขาคณิต',\n\t'File exists.' => 'มีไฟล์นี้อยู่แล้ว.',\n\t'%d query(s) executed OK.' => '%d คำสั่งถูกดำเนินการแล้ว.',\n\t'Show only errors' => 'แสดงเฉพาะเออเรอ',\n\t'Refresh' => 'โหลดใหม่',\n\t'Invalid schema.' => 'schema ไม่ถูกต้อง.',\n\t'Please use one of the extensions %s.' => 'กรุณาใช้ส่วนเสริมอย่างน้อย 1 ส่วนเสริมจากทั้งหมด %s.',\n\t'now' => 'ตอนนี้',\n\t'ltr' => 'ltr',\n\t'Tables have been copied.' => 'ทำซ้ำตารางฐานข้อมูลแล้ว.',\n\t'Copy' => 'ทำซ้ำ',\n\t'Permanent link' => 'ลิงค์ถาวร',\n\t'Edit all' => 'แก้ไขทั้งหมด',\n\t'HH:MM:SS' => 'HH:MM:SS',\n);\n\n// run `php ../../lang.php th` to update this file\n"
  },
  {
    "path": "adminer/lang/tr.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Sistem',\n\t'Server' => 'Sunucu',\n\t'Username' => 'Kullanıcı',\n\t'Password' => 'Parola',\n\t'Permanent login' => 'Beni hatırla',\n\t'Login' => 'Giriş',\n\t'Logout' => 'Çıkış',\n\t'Logged as: %s' => '%s olarak giriş yapıldı.',\n\t'Logout successful.' => 'Oturum başarıyla sonlandı.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href=\"https://www.adminer.org/en/donation/\">bağış yapmayı düşünün</a>.',\n\t'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href=\"https://www.adminer.org/en/extension/\"%s>%s medodunu</a> kullanın.',\n\t'Language' => 'Dil',\n\t'Invalid CSRF token. Send the form again.' => 'Geçersiz (CSRF) jetonu. Formu tekrar yolla.',\n\t'If you did not send this request from Adminer then close this page.' => 'Bu isteği Adminer\\'den göndermediyseniz bu sayfayı kapatın.',\n\t'No extension' => 'Uzantı yok',\n\t'None of the supported PHP extensions (%s) are available.' => 'Desteklenen PHP eklentilerinden (%s) hiçbiri mevcut değil.',\n\t'Connecting to privileged ports is not allowed.' => 'Ayrıcalıklı bağlantı noktalarına bağlanmaya izin verilmiyor.',\n\t'Session support must be enabled.' => 'Oturum desteği etkin olmalıdır.',\n\t'Session expired, please login again.' => 'Oturum süresi doldu, lütfen tekrar giriş yapın.',\n\t'The action will be performed after successful login with the same credentials.' => 'İşlem, aynı kimlik bilgileriyle başarıyla oturum açıldıktan sonra gerçekleştirilecektir.',\n\t'%s version: %s through PHP extension %s' => '%s sürüm: %s, %s PHP eklentisi ile',\n\t'Refresh' => 'Tazele',\n\n\t// text direction\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'İzinler',\n\t'Create user' => 'Kullanıcı oluştur',\n\t'User has been dropped.' => 'Kullanıcı silindi.',\n\t'User has been altered.' => 'Kullanıcı değiştirildi.',\n\t'User has been created.' => 'Kullanıcı oluşturuldu.',\n\t'Hashed' => 'Harmanlandı',\n\t'Column' => 'Kolon',\n\t'Routine' => 'Yordam',\n\t'Grant' => 'Yetki Ver',\n\t'Revoke' => 'Yetki Kaldır',\n\n\t'Process list' => 'İşlem listesi',\n\t'%d process(es) have been killed.' => array('%d işlem sonlandırıldı.', '%d adet işlem sonlandırıldı.'),\n\t'Kill' => 'Sonlandır',\n\n\t'Variables' => 'Değişkenler',\n\t'Status' => 'Durum',\n\n\t'SQL command' => 'SQL komutu',\n\t'%d query(s) executed OK.' => array('%d sorgu başarıyla çalıştırıldı.', '%d adet sorgu başarıyla çalıştırıldı.'),\n\t'Query executed OK, %d row(s) affected.' => array('Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.', 'Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.'),\n\t'No commands to execute.' => 'Çalıştırılacak komut yok.',\n\t'Error in query' => 'Sorguda hata',\n\t'Warnings' => 'Uyarılar',\n\t'ATTACH queries are not supported.' => 'ATTACH sorguları desteklenmiyor.',\n\t'Execute' => 'Çalıştır',\n\t'Stop on error' => 'Hata oluşursa dur',\n\t'Show only errors' => 'Sadece hataları göster',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Geçmiş',\n\t'Clear' => 'Temizle',\n\t'Edit all' => 'Tümünü düzenle',\n\n\t'File upload' => 'Dosya gönder',\n\t'From server' => 'Sunucudan',\n\t'Webserver file %s' => '%s web sunucusu dosyası',\n\t'Run file' => 'Dosyayı çalıştır',\n\t'File does not exist.' => 'Dosya mevcut değil.',\n\t'File uploads are disabled.' => 'Dosya gönderimi etkin değil.',\n\t'Unable to upload a file.' => 'Dosya gönderilemiyor.',\n\t'Maximum allowed file size is %sB.' => 'İzin verilen dosya boyutu sınırı %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'FTP yoluyla büyük bir SQL dosyası yükleyebilir ve sunucudan içe aktarabilirsiniz.',\n\t'You are offline.' => 'Çevrimdışısınız.',\n\n\t'Export' => 'Dışarı Aktar',\n\t'Output' => 'Çıktı',\n\t'open' => 'aç',\n\t'save' => 'kaydet',\n\t'Saving' => 'Saydediliyor',\n\t'Format' => 'Biçim',\n\t'Data' => 'Veri',\n\n\t'Database' => 'Veri Tabanı',\n\t'DB' => 'DB',\n\t'Use' => 'Kullan',\n\t'Select database' => 'Veri tabanı seç',\n\t'Invalid database.' => 'Geçersiz veri tabanı.',\n\t'Database has been dropped.' => 'Veri tabanı silindi.',\n\t'Databases have been dropped.' => 'Veritabanları silindi.',\n\t'Database has been created.' => 'Veri tabanı oluşturuldu.',\n\t'Database has been renamed.' => 'Veri tabanının ismi değiştirildi.',\n\t'Database has been altered.' => 'Veri tabanı değiştirildi.',\n\t'Alter database' => 'Veri tabanını değiştir',\n\t'Create database' => 'Veri tabanı oluştur',\n\t'Database schema' => 'Veri tabanı şeması',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Kalıcı bağlantı',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Motor',\n\t'Collation' => 'Karşılaştırma',\n\t'Data Length' => 'Veri Uzunluğu',\n\t'Index Length' => 'İndex Uzunluğu',\n\t'Data Free' => 'Boş Veri',\n\t'Rows' => 'Kayıtlar',\n\t'%d in total' => 'toplam %d',\n\t'Analyze' => 'Çözümle',\n\t'Optimize' => 'Optimize Et',\n\t'Vacuum' => 'Vakumla',\n\t'Check' => 'Denetle',\n\t'Repair' => 'Tamir Et',\n\t'Truncate' => 'Boşalt',\n\t'Tables have been truncated.' => 'Tablolar boşaltıldı.',\n\t'Move to other database' => 'Başka veri tabanına taşı',\n\t'Move' => 'Taşı',\n\t'Tables have been moved.' => 'Tablolar taşındı.',\n\t'Copy' => 'Kopyala',\n\t'Tables have been copied.' => 'Tablolar kopyalandı.',\n\n\t'Routines' => 'Yordamlar',\n\t'Routine has been called, %d row(s) affected.' => array('Yordam çağrıldı, %d adet kayıt etkilendi.', 'Yordam çağrıldı, %d kayıt etkilendi.'),\n\t'Call' => 'Çağır',\n\t'Parameter name' => 'Parametre adı',\n\t'Create procedure' => 'Yöntem oluştur',\n\t'Create function' => 'Fonksiyon oluştur',\n\t'Routine has been dropped.' => 'Yordam silindi.',\n\t'Routine has been altered.' => 'Yordam değiştirildi.',\n\t'Routine has been created.' => 'Yordam oluşturuldu.',\n\t'Alter function' => 'Fonksyionu değiştir',\n\t'Alter procedure' => 'Yöntemi değiştir',\n\t'Return type' => 'Geri dönüş türü',\n\n\t'Events' => 'Olaylar',\n\t'Event has been dropped.' => 'Olay silindi.',\n\t'Event has been altered.' => 'Olay değiştirildi.',\n\t'Event has been created.' => 'Olay oluşturuldu.',\n\t'Alter event' => 'Olayı değiştir',\n\t'Create event' => 'Olay oluştur',\n\t'At given time' => 'Verilen zamanda',\n\t'Every' => 'Her zaman',\n\t'Schedule' => 'Takvimli',\n\t'Start' => 'Başla',\n\t'End' => 'Son',\n\t'On completion preserve' => 'Tamamlama koruması',\n\n\t'Tables' => 'Tablolar',\n\t'Tables and views' => 'Tablolar ve görünümler',\n\t'Table' => 'Tablo',\n\t'No tables.' => 'Tablo yok.',\n\t'Alter table' => 'Tabloyu değiştir',\n\t'Create table' => 'Tablo oluştur',\n\t'Table has been dropped.' => 'Tablo silindi.',\n\t'Tables have been dropped.' => 'Tablolar silindi.',\n\t'Tables have been optimized.' => 'Tablolar en uygun hale getirildi.',\n\t'Table has been altered.' => 'Tablo değiştirildi.',\n\t'Table has been created.' => 'Tablo oluşturuldu.',\n\t'Table name' => 'Tablo adı',\n\t'Show structure' => 'Yapıyı göster',\n\t'engine' => 'motor',\n\t'collation' => 'karşılaştırma',\n\t'Column name' => 'Kolon adı',\n\t'Type' => 'Tür',\n\t'Length' => 'Uzunluk',\n\t'Auto Increment' => 'Otomatik Artır',\n\t'Options' => 'Seçenekler',\n\t'Comment' => 'Yorum',\n\t'Default value' => 'Varsayılan değer',\n\t'Default values' => 'Varsayılan değerler',\n\t'Drop' => 'Sil',\n\t'Drop %s?' => 'Sil %s?',\n\t'Are you sure?' => 'Emin misiniz?',\n\t'Size' => 'Boyut',\n\t'Compute' => 'Hesapla',\n\t'Move up' => 'Yukarı taşı',\n\t'Move down' => 'Aşağı taşı',\n\t'Remove' => 'Sil',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'İzin verilen en fazla alan sayısı aşıldı. Lütfen %s değerlerini artırın.',\n\n\t'Partition by' => 'Bununla bölümle',\n\t'Partitions' => 'Bölümler',\n\t'Partition name' => 'Bölüm adı',\n\t'Values' => 'Değerler',\n\n\t'View' => 'Görünüm',\n\t'Materialized view' => 'Materialized Görünüm',\n\t'View has been dropped.' => 'Görünüm silindi.',\n\t'View has been altered.' => 'Görünüm değiştirildi.',\n\t'View has been created.' => 'Görünüm oluşturuldu.',\n\t'Alter view' => 'Görünümü değiştir',\n\t'Create view' => 'Görünüm oluştur',\n\n\t'Indexes' => 'İndeksler',\n\t'Indexes have been altered.' => 'İndeksler değiştirildi.',\n\t'Alter indexes' => 'İndeksleri değiştir',\n\t'Add next' => 'Bundan sonra ekle',\n\t'Index Type' => 'İndex Türü',\n\t'length' => 'uzunluğu',\n\n\t'Foreign keys' => 'Dış anahtarlar',\n\t'Foreign key' => 'Dış anahtar',\n\t'Foreign key has been dropped.' => 'Dış anahtar silindi.',\n\t'Foreign key has been altered.' => 'Dış anahtar değiştirildi.',\n\t'Foreign key has been created.' => 'Dış anahtar oluşturuldu.',\n\t'Target table' => 'Hedef tablo',\n\t'Change' => 'Değiştir',\n\t'Source' => 'Kaynak',\n\t'Target' => 'Hedef',\n\t'Add column' => 'Kolon ekle',\n\t'Alter' => 'Değiştir',\n\t'Add foreign key' => 'Dış anahtar ekle',\n\t'ON DELETE' => 'ON DELETE (Hedefteki Kayıt Silinirse)',\n\t'ON UPDATE' => 'ON UPDATE (Hedefteki Kayıt Değiştirilirse)',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kaynak ve hedef kolonlar aynı veri türünde olmalı, hedef kolonlarda dizin bulunmalı ve başvurulan veri mevcut olmalı.',\n\n\t'Triggers' => 'Tetikler',\n\t'Add trigger' => 'Tetik ekle',\n\t'Trigger has been dropped.' => 'Tetik silindi.',\n\t'Trigger has been altered.' => 'Tetik değiştirildi.',\n\t'Trigger has been created.' => 'Tetik oluşturuldu.',\n\t'Alter trigger' => 'Tetiği değiştir',\n\t'Create trigger' => 'Tetik oluştur',\n\t'Time' => 'Zaman',\n\t'Event' => 'Olay',\n\t'Name' => 'Ad',\n\n\t'select' => 'seç',\n\t'Select' => 'Seç',\n\t'Select data' => 'Veri seç',\n\t'Functions' => 'Fonksiyonlar',\n\t'Aggregation' => 'Kümeleme',\n\t'Search' => 'Ara',\n\t'anywhere' => 'hiçbir yerde',\n\t'Search data in tables' => 'Tablolarda veri ara',\n\t'Sort' => 'Sırala',\n\t'descending' => 'Azalan',\n\t'Limit' => 'Limit',\n\t'Limit rows' => 'Satır Limiti',\n\t'Text length' => 'Metin Boyutu',\n\t'Action' => 'İşlem',\n\t'Full table scan' => 'Tam tablo taraması',\n\t'Unable to select the table' => 'Tablo seçilemedi',\n\t'No rows.' => 'Kayıt yok.',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d kayıt', '%d adet kayıt'),\n\t'Page' => 'Sayfa',\n\t'last' => 'son',\n\t'Load more data' => 'Daha fazla veri yükle',\n\t'Loading' => 'Yükleniyor',\n\t'Whole result' => 'Tüm sonuç',\n\t'%d byte(s)' => array('%d bayt', '%d bayt'),\n\n\t'Import' => 'İçeri Aktar',\n\t'%d row(s) have been imported.' => array('%d kayıt içeri aktarıldı.', '%d adet kayıt içeri aktarıldı.'),\n\t'File must be in UTF-8 encoding.' => 'Dosya UTF-8 kodlamasında olmalıdır.',\n\n\t// in-place editing in select\n\t'Modify' => 'Düzenle',\n\t'Ctrl+click on a value to modify it.' => 'Bir değeri değiştirmek için üzerine Ctrl+tıklayın.',\n\t'Use edit link to modify this value.' => 'Değeri değiştirmek için düzenleme bağlantısını kullanın.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Kayıt%s eklendi.',\n\t'Item has been deleted.' => 'Kayıt silindi.',\n\t'Item has been updated.' => 'Kayıt güncellendi.',\n\t'%d item(s) have been affected.' => array('%d kayıt etkilendi.', '%d adet kayıt etkilendi.'),\n\t'New item' => 'Yeni kayıt',\n\t'original' => 'orijinal',\n\t// label for value '' in enum data type\n\t'empty' => 'boş',\n\t'edit' => 'düzenle',\n\t'Edit' => 'Düzenle',\n\t'Insert' => 'Ekle',\n\t'Save' => 'Kaydet',\n\t'Save and continue edit' => 'Kaydet ve düzenlemeye devam et',\n\t'Save and insert next' => 'Kaydet ve sonrakini ekle',\n\t'Selected' => 'Seçildi',\n\t'Clone' => 'Kopyala',\n\t'Delete' => 'Sil',\n\t'You have no privileges to update this table.' => 'Bu tabloyu güncellemek için yetkiniz yok.',\n\n\t// data type descriptions\n\t'Numbers' => 'Sayılar',\n\t'Date and time' => 'Tarih ve zaman',\n\t'Strings' => 'Dizge',\n\t'Binary' => 'İkili',\n\t'Lists' => 'Listeler',\n\t'Network' => 'Ağ',\n\t'Geometry' => 'Geometri',\n\t'Relations' => 'İlişkiler',\n\n\t'Editor' => 'Düzenleyici',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$6.$4.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'g.a.[yyyy]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'SS:DD:ss',\n\t'now' => 'şimdi',\n\t'yes' => 'evet',\n\t'no' => 'hayır',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Dosya zaten mevcut.',\n\t'Please use one of the extensions %s.' => '%s uzantılarından birini kullanın.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Şemayı değiştir',\n\t'Create schema' => 'Şema oluştur',\n\t'Schema has been dropped.' => 'Şema silindi.',\n\t'Schema has been created.' => 'Şema oluşturuldu.',\n\t'Schema has been altered.' => 'Şema değiştirildi.',\n\t'Schema' => 'Şema',\n\t'Invalid schema.' => 'Geçersiz şema.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Diziler',\n\t'Create sequence' => 'Dizi oluştur',\n\t'Sequence has been dropped.' => 'Dizi silindi.',\n\t'Sequence has been created.' => 'Dizi oluşturuldu.',\n\t'Sequence has been altered.' => 'Dizi değiştirildi.',\n\t'Alter sequence' => 'Diziyi değiştir',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Kullanıcı türleri',\n\t'Create type' => 'Tür oluştur',\n\t'Type has been dropped.' => 'Tür silindi.',\n\t'Type has been created.' => 'Tür oluşturuldu.',\n\t'Alter type' => 'Türü değiştir',\n);\n\n// run `php ../../lang.php tr` to update this file\n"
  },
  {
    "path": "adminer/lang/uk.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Система Бази Даних',\n\t'Server' => 'Сервер',\n\t'Username' => 'Користувач',\n\t'Password' => 'Пароль',\n\t'Permanent login' => 'Пам\\'ятати сесію',\n\t'Login' => 'Увійти',\n\t'Logout' => 'Вийти',\n\t'Logged as: %s' => 'Ви увійшли як: %s',\n\t'Logout successful.' => 'Ви вдало вийшли з системи.',\n\t'Invalid credentials.' => 'Неправильні дані входу.',\n\t'Language' => 'Мова',\n\t'Invalid CSRF token. Send the form again.' => 'Недійсний CSRF токен. Надішліть форму ще раз.',\n\t'No extension' => 'Нема розширень',\n\t'None of the supported PHP extensions (%s) are available.' => 'Жодне з PHP-розширень (%s), що підтримуються, не доступне.',\n\t'Session support must be enabled.' => 'Сесії повинні бути дозволені.',\n\t'Session expired, please login again.' => 'Сесія закінчилась, будь ласка, увійдіть в систему знову.',\n\t'%s version: %s through PHP extension %s' => 'Версія %s: %s з PHP-розширенням %s',\n\t'Refresh' => 'Оновити',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Привілеї',\n\t'Create user' => 'Створити користувача',\n\t'User has been dropped.' => 'Користувача було видалено.',\n\t'User has been altered.' => 'Користувача було змінено.',\n\t'User has been created.' => 'Користувача було створено.',\n\t'Hashed' => 'Хешовано',\n\t'Column' => 'Колонка',\n\t'Routine' => 'Процедура',\n\t'Grant' => 'Дозволити',\n\t'Revoke' => 'Заборонити',\n\n\t'Process list' => 'Перелік процесів',\n\t'%d process(es) have been killed.' => array('Було завершено %d процес.', 'Було завершено %d процеси.', 'Було завершёно %d процесів.'),\n\t'Kill' => 'Завершити процес',\n\n\t'Variables' => 'Змінні',\n\t'Status' => 'Статус',\n\n\t'SQL command' => 'SQL запит',\n\t'%d query(s) executed OK.' => array('%d запит виконано успішно.', '%d запити виконано успішно.', '%d запитів виконано успішно.'),\n\t'Query executed OK, %d row(s) affected.' => array('Запит виконано успішно, змінено %d рядок.', 'Запит виконано успішно, змінено %d рядки.', 'Запит виконано успішно, змінено %d рядків.'),\n\t'No commands to execute.' => 'Нема запитів до виконання.',\n\t'Error in query' => 'Помилка в запиті',\n\t'Execute' => 'Виконати',\n\t'Stop on error' => 'Зупинитись при помилці',\n\t'Show only errors' => 'Показувати тільки помилки',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Історія',\n\t'Clear' => 'Очистити',\n\t'Edit all' => 'Редагувати все',\n\n\t'File upload' => 'Завантажити файл',\n\t'From server' => 'З сервера',\n\t'Webserver file %s' => 'Файл %s на вебсервері',\n\t'Run file' => 'Запустити файл',\n\t'File does not exist.' => 'Файл не існує.',\n\t'File uploads are disabled.' => 'Завантаження файлів заборонене.',\n\t'Unable to upload a file.' => 'Неможливо завантажити файл.',\n\t'Maximum allowed file size is %sB.' => 'Максимально допустимий розмір файлу %sБ.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\\'єм POST-даних. Зменшіть об\\'єм або збільшіть параметр директиви %s конфигурації.',\n\n\t'Export' => 'Експорт',\n\t'Output' => 'Вихідні дані',\n\t'open' => 'відкрити',\n\t'save' => 'зберегти',\n\t'Format' => 'Формат',\n\t'Data' => 'Дані',\n\n\t'Database' => 'База даних',\n\t'Use' => 'Обрати',\n\t'Select database' => 'Обрати базу даних',\n\t'Invalid database.' => 'Погана база даних.',\n\t'Database has been dropped.' => 'Базу даних було видалено.',\n\t'Databases have been dropped.' => 'Бази даних були видалені.',\n\t'Database has been created.' => 'Базу даних було створено.',\n\t'Database has been renamed.' => 'Базу даних було переіменовано.',\n\t'Database has been altered.' => 'Базу даних було змінено.',\n\t'Alter database' => 'Змінити базу даних',\n\t'Create database' => 'Створити базу даних',\n\t'Database schema' => 'Схема бази даних',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Постійне посилання',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Рушій',\n\t'Collation' => 'Співставлення',\n\t'Data Length' => 'Об\\'єм даних',\n\t'Index Length' => 'Об\\'єм індексів',\n\t'Data Free' => 'Вільне місце',\n\t'Rows' => 'Рядків',\n\t'%d in total' => '%d всього',\n\t'Analyze' => 'Аналізувати',\n\t'Optimize' => 'Оптимізувати',\n\t'Check' => 'Перевірити',\n\t'Repair' => 'Виправити',\n\t'Truncate' => 'Очистити',\n\t'Tables have been truncated.' => 'Таблиці було очищено.',\n\t'Move to other database' => 'Перенести до іншої бази даних',\n\t'Move' => 'Перенести',\n\t'Tables have been moved.' => 'Таблиці було перенесено.',\n\t'Copy' => 'копіювати',\n\t'Tables have been copied.' => 'Таблиці було зкопійовано.',\n\n\t'Routines' => 'Збережені процедури',\n\t'Routine has been called, %d row(s) affected.' => array('Була викликана процедура, %d запис було змінено.', 'Була викликана процедура, %d записи було змінено.', 'Була викликана процедура, %d записів було змінено.'),\n\t'Call' => 'Викликати',\n\t'Parameter name' => 'Назва параметра',\n\t'Create procedure' => 'Створити процедуру',\n\t'Create function' => 'Створити функцію',\n\t'Routine has been dropped.' => 'Процедуру було видалено.',\n\t'Routine has been altered.' => 'Процедуру було змінено.',\n\t'Routine has been created.' => 'Процедуру було створено.',\n\t'Alter function' => 'Змінити функцію',\n\t'Alter procedure' => 'Змінити процедуру',\n\t'Return type' => 'Тип, що повернеться',\n\n\t'Events' => 'Події',\n\t'Event has been dropped.' => 'Подію було видалено.',\n\t'Event has been altered.' => 'Подію було змінено.',\n\t'Event has been created.' => 'Подію було створено.',\n\t'Alter event' => 'Змінити подію',\n\t'Create event' => 'Створити подію',\n\t'At given time' => 'В даний час',\n\t'Every' => 'Кожного',\n\t'Schedule' => 'Розклад',\n\t'Start' => 'Початок',\n\t'End' => 'Кінець',\n\t'On completion preserve' => 'Після завершення зберегти',\n\n\t'Tables' => 'Таблиці',\n\t'Tables and views' => 'Таблиці і вигляди',\n\t'Table' => 'Таблиця',\n\t'No tables.' => 'Нема таблиць.',\n\t'Alter table' => 'Змінити таблицю',\n\t'Create table' => 'Створити таблицю',\n\t'Table has been dropped.' => 'Таблицю було видалено.',\n\t'Tables have been dropped.' => 'Таблиці були видалені.',\n\t'Tables have been optimized.' => 'Таблиці були оптимізовані.',\n\t'Table has been altered.' => 'Таблица була змінена.',\n\t'Table has been created.' => 'Таблиця була створена.',\n\t'Table name' => 'Назва таблиці',\n\t'Show structure' => 'Показати структуру',\n\t'engine' => 'рушій',\n\t'collation' => 'співставлення',\n\t'Column name' => 'Назва стовпця',\n\t'Type' => 'Тип',\n\t'Length' => 'Довжина',\n\t'Auto Increment' => 'Автоматичне збільшення',\n\t'Options' => 'Опції',\n\t'Comment' => 'Коментарі',\n\t'Default values' => 'Значення за замовчуванням',\n\t'Drop' => 'Видалити',\n\t'Are you sure?' => 'Ви впевнені?',\n\t'Move up' => 'Пересунути вгору',\n\t'Move down' => 'Пересунути вниз',\n\t'Remove' => 'Видалити',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Досягнута максимальна кількість доступних полів. Будь ласка, збільшіть %s.',\n\n\t'Partition by' => 'Розділити по',\n\t'Partitions' => 'Розділи',\n\t'Partition name' => 'Назва розділу',\n\t'Values' => 'Значення',\n\n\t'View' => 'Вигляд',\n\t'View has been dropped.' => 'Вигляд було видалено.',\n\t'View has been altered.' => 'Вигляд було змінено.',\n\t'View has been created.' => 'Вигляд було створено.',\n\t'Alter view' => 'Змінити вигляд',\n\t'Create view' => 'Створити вигляд',\n\n\t'Indexes' => 'Індекси',\n\t'Indexes have been altered.' => 'Індексування було змінено.',\n\t'Alter indexes' => 'Змінити індексування',\n\t'Add next' => 'Додати ще',\n\t'Index Type' => 'Тип індексу',\n\t'length' => 'довжина',\n\n\t'Foreign keys' => 'Зовнішні ключі',\n\t'Foreign key' => 'Зовнішній ключ',\n\t'Foreign key has been dropped.' => 'Зовнішній ключ було видалено.',\n\t'Foreign key has been altered.' => 'Зовнішній ключ було змінено.',\n\t'Foreign key has been created.' => 'Зовнішній ключ було створено.',\n\t'Target table' => 'Цільова таблиця',\n\t'Change' => 'Змінити',\n\t'Source' => 'Джерело',\n\t'Target' => 'Ціль',\n\t'Add column' => 'Додати стовпець',\n\t'Alter' => 'Змінити',\n\t'Add foreign key' => 'Додати зовнішній ключ',\n\t'ON DELETE' => 'ПРИ ВИДАЛЕННІ',\n\t'ON UPDATE' => 'ПРИ ЗМІНІ',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Стовпці повинні мати той самий тип даних, цільові стовпці повинні бути проіндексовані і дані, на які посилаються повинні існувати.',\n\n\t'Triggers' => 'Тригери',\n\t'Add trigger' => 'Додати тригер',\n\t'Trigger has been dropped.' => 'Тригер було видалено.',\n\t'Trigger has been altered.' => 'Тригер було змінено.',\n\t'Trigger has been created.' => 'Тригер було створено.',\n\t'Alter trigger' => 'Змінити тригер',\n\t'Create trigger' => 'Створити тригер',\n\t'Time' => 'Час',\n\t'Event' => 'Подія',\n\t'Name' => 'Назва',\n\n\t'select' => 'вибрати',\n\t'Select' => 'Вибрати',\n\t'Select data' => 'Вибрати дані',\n\t'Functions' => 'Функції',\n\t'Aggregation' => 'Агрегація',\n\t'Search' => 'Пошук',\n\t'anywhere' => 'будь-де',\n\t'Search data in tables' => 'Шукати дані в таблицях',\n\t'Sort' => 'Сортувати',\n\t'descending' => 'по спаданню',\n\t'Limit' => 'Обмеження',\n\t'Text length' => 'Довжина тексту',\n\t'Action' => 'Дія',\n\t'Unable to select the table' => 'Неможливо вибрати таблицю',\n\t'No rows.' => 'Нема рядків.',\n\t'%d row(s)' => array('%d рядок', '%d рядки', '%d рядків'),\n\t'Page' => 'Сторінка',\n\t'last' => 'остання',\n\t'Whole result' => 'Весь результат',\n\t'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),\n\n\t'Import' => 'Імпортувати',\n\t'%d row(s) have been imported.' => array('%d рядок було імпортовано.', '%d рядки було імпортовано.', '%d рядків було імпортовано.'),\n\n\t// in-place editing in select\n\t'Ctrl+click on a value to modify it.' => 'Ctrl+клікніть на значенні щоб змінити його.',\n\t'Use edit link to modify this value.' => 'Використовуйте посилання щоб змінити це значення.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Запис%s було вставлено.',\n\t'Item has been deleted.' => 'Запис було видалено.',\n\t'Item has been updated.' => 'Запис було змінено.',\n\t'%d item(s) have been affected.' => array('Було змінено %d запис.', 'Було змінено %d записи.', 'Було змінено %d записів.'),\n\t'New item' => 'Новий запис',\n\t'original' => 'початковий',\n\t// label for value '' in enum data type\n\t'empty' => 'порожньо',\n\t'edit' => 'редагувати',\n\t'Edit' => 'Редагувати',\n\t'Insert' => 'Вставити',\n\t'Save' => 'Зберегти',\n\t'Save and continue edit' => 'Зберегти і продовжити редагування',\n\t'Save and insert next' => 'Зберегти і вставити знову',\n\t'Clone' => 'Клонувати',\n\t'Delete' => 'Видалити',\n\n\t// data type descriptions\n\t'Numbers' => 'Числа',\n\t'Date and time' => 'Дата і час',\n\t'Strings' => 'Рядки',\n\t'Binary' => 'Двійкові',\n\t'Lists' => 'Списки',\n\t'Network' => 'Мережа',\n\t'Geometry' => 'Геометрія',\n\t'Relations' => 'Зв\\'язки',\n\n\t'Editor' => 'Редактор',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5.$3.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'дд.мм.[рррр]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'ГГ:ХХ:СС',\n\t'now' => 'зараз',\n\t'yes' => 'так',\n\t'no' => 'ні',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Файл існує.',\n\t'Please use one of the extensions %s.' => 'Будь ласка, використовуйте одне з розширень %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Змінити схему',\n\t'Create schema' => 'Створити схему',\n\t'Schema has been dropped.' => 'Схему було видалено.',\n\t'Schema has been created.' => 'Схему було створено.',\n\t'Schema has been altered.' => 'Схему було змінено.',\n\t'Schema' => 'Схема',\n\t'Invalid schema.' => 'Невірна схема.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Послідовності',\n\t'Create sequence' => 'Створити послідовність',\n\t'Sequence has been dropped.' => 'Послідовність було видалено.',\n\t'Sequence has been created.' => 'Послідовність було створено.',\n\t'Sequence has been altered.' => 'Послідовність було змінено.',\n\t'Alter sequence' => 'Змінити послідовність',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Типи користувачів',\n\t'Create type' => 'Створити тип',\n\t'Type has been dropped.' => 'Тип було видалено.',\n\t'Type has been created.' => 'Тип було створено.',\n\t'Alter type' => 'Змінити тип',\n\t'Drop %s?' => 'Вилучити %s?',\n\t'Materialized view' => 'Матеріалізований вигляд',\n\t'Selected' => 'Вибрані',\n\t'overwrite' => 'перезаписати',\n\t'DB' => 'DB',\n\t'File must be in UTF-8 encoding.' => 'Файл повинен бути в кодуванні UTF-8.',\n\t'Modify' => 'Змінити',\n\t'Load more data' => 'Завантажити ще дані',\n\t'Loading' => 'Завантаження',\n\t'ATTACH queries are not supported.' => 'ATTACH-запити не підтримуються.',\n\t'Warnings' => 'Попередження',\n\t'Limit rows' => 'Обмеження рядків',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer не підтримує доступ до бази даних без пароля, <a href=\"https://www.adminer.org/en/password/\"%s>більше інформації</a>.',\n\t'Default value' => 'Значення за замовчуванням',\n\t'Full table scan' => 'Повне сканування таблиці',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилину.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилини.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилин.'),\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Дякуємо, що користуєтесь Adminer, подумайте про <a href=\"https://www.adminer.org/en/donation/\">внесок</a>.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Термін дії майстер пароля минув. <a href=\"https://www.adminer.org/en/extension/\"%s>Реалізуйте</a> метод %s, щоб зробити його постійним.',\n\t'The action will be performed after successful login with the same credentials.' => 'Дія буде виконуватися після успішного входу в систему з тими ж обліковими даними.',\n\t'Connecting to privileged ports is not allowed.' => 'Підключення до привілейованих портів заборонено.',\n\t'There is a space in the input password which might be the cause.' => 'У вхідному паролі є пробіл, який може бути причиною.',\n\t'If you did not send this request from Adminer then close this page.' => 'Якщо ви не посилали цей запит з Adminer, закрийте цю сторінку.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Ви можете завантажити великий файл SQL через FTP та імпортувати його з сервера.',\n\t'Size' => 'Розмір',\n\t'Compute' => 'Обчислити',\n\t'You are offline.' => 'Ви офлайн.',\n\t'You have no privileges to update this table.' => 'Ви не маєте привілеїв для оновлення цієї таблиці.',\n\t'Saving' => 'Збереження',\n\t'Unknown error.' => 'Невідома помилка.',\n\t'Database does not support password.' => 'База даних не підтримує пароль.',\n\t'Disable %s or enable %s or %s extensions.' => 'Вимкніть %s або увімкніть розширення %s або %s.',\n\t'Check has been dropped.' => 'Перевірку видалено.',\n\t'Check has been altered.' => 'Перевірка змінена.',\n\t'Check has been created.' => 'Перевірку створено.',\n\t'Alter check' => 'Змінити перевірку',\n\t'Create check' => 'Створити перевірку',\n\t'Vacuum' => 'Вакуум',\n\t'%d / ' => '%d / ',\n\t'Checks' => 'Перевірки',\n\t'Loaded plugins' => 'Завантажені плагіни',\n\t'%s must <a%s>return an array</a>.' => '%s має <a%s>повернути масив</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Налаштувати</a> %s у %s.',\n);\n\n// run `php ../../lang.php uk` to update this file\n"
  },
  {
    "path": "adminer/lang/uz.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Tizim',\n\t'Server' => 'Server',\n\t'Username' => 'Foydalanuvchi nomi',\n\t'Password' => 'Parol',\n\t'Permanent login' => 'Doimiy kirish',\n\t'Login' => 'Kirish',\n\t'Logout' => 'Chiqish',\n\t'Logged as: %s' => 'Siz kirgansiz: %s',\n\t'Logout successful.' => 'Muvaffaqiyatli chiqdingiz.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Adminer dasturidan foydalanganingiz uchun rahmat, <a href=\"https://www.adminer.org/en/donation/\">xayriya qilishni</a> o\\'ylab ko\\'ring.',\n\t'Loaded plugins' => 'Yuklangan plaginlar',\n\t'%s must <a%s>return an array</a>.' => '%s <a%s>massiv qaytarishi</a> kerak.',\n\t'<a%s>Configure</a> %s in %s.' => '%s ni %s ichida <a%s>sozlang</a>.',\n\t'Invalid credentials.' => 'Noto\\'g\\'ri ma\\'lumotlar.',\n\t'There is a space in the input password which might be the cause.' => 'Kiritilgan parolda bo\\'sh joy bor, bu sabab bo\\'lishi mumkin.',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer parolsiz ma\\'lumotlar bazasiga kirishni qo\\'llab-quvvatlamaydi, <a href=\"https://www.adminer.org/en/password/\"%s>ko\\'proq ma\\'lumot</a>.',\n\t'Database does not support password.' => 'Ma\\'lumotlar bazasi parolni qo\\'llab-quvvatlamaydi.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Juda ko\\'p muvaffaqiyatsiz urinishlar, %d daqiqadan so\\'ng qayta urining.', 'Juda ko\\'p muvaffaqiyatsiz urinishlar, %d daqiqadan so\\'ng qayta urining.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Asosiy parol muddati tugadi. Uni doimiy qilish uchun %s usulini <a href=\"https://www.adminer.org/en/extension/\"%s>amalga oshiring</a>.',\n\t'Language' => 'Til',\n\t'Invalid CSRF token. Send the form again.' => 'Noto\\'g\\'ri CSRF belgisi. Shaklni qayta yuboring.',\n\t'If you did not send this request from Adminer then close this page.' => 'Agar bu so\\'rovni Adminerdan yuborgan bo\\'lmasangiz, ushbu sahifani yoping.',\n\t'No extension' => 'Kengaytma yo\\'q',\n\t// %s contains the list of the extensions, e.g. 'mysqli, PDO_MySQL'\n\t'None of the supported PHP extensions (%s) are available.' => 'Qo\\'llab-quvvatlanadigan PHP kengaytmalarining (%s) hech biri mavjud emas.',\n\t'Connecting to privileged ports is not allowed.' => 'Imtiyozli portlarga ulanishga ruxsat berilmagan.',\n\t'Disable %s or enable %s or %s extensions.' => '%s ni o\\'chiring yoki %s yoki %s kengaytmalarini yoqing.',\n\t'Session support must be enabled.' => 'Sessiya qo\\'llab-quvvatlashi yoqilgan bo\\'lishi kerak.',\n\t'Session expired, please login again.' => 'Sessiya muddati tugadi, iltimos, qayta kiring.',\n\t'The action will be performed after successful login with the same credentials.' => 'Amal bir xil ma\\'lumotlar bilan muvaffaqiyatli kirishdan so\\'ng amalga oshiriladi.',\n\t'%s version: %s through PHP extension %s' => '%s versiyasi: %s PHP kengaytmasi %s orqali',\n\t'Refresh' => 'Yangilash',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Imtiyozlar',\n\t'Create user' => 'Foydalanuvchi yaratish',\n\t'User has been dropped.' => 'Foydalanuvchi o\\'chirildi.',\n\t'User has been altered.' => 'Foydalanuvchi o\\'zgartirildi.',\n\t'User has been created.' => 'Foydalanuvchi yaratildi.',\n\t'Hashed' => 'Xeshlangan',\n\t'Column' => 'Ustun',\n\t'Routine' => 'Protsedura',\n\t'Grant' => 'Berish',\n\t'Revoke' => 'Bekor qilish',\n\n\t'Process list' => 'Jarayonlar ro\\'yxati',\n\t'%d process(es) have been killed.' => array('%d jarayon to\\'xtatildi.', '%d jarayonlar to\\'xtatildi.'),\n\t'Kill' => 'To\\'xtatish',\n\n\t'Variables' => 'O\\'zgaruvchilar',\n\t'Status' => 'Holat',\n\n\t'SQL command' => 'SQL buyrug\\'i',\n\t'%d query(s) executed OK.' => array('%d so\\'rov muvaffaqiyatli bajarildi.', '%d so\\'rovlar muvaffaqiyatli bajarildi.'),\n\t'Query executed OK, %d row(s) affected.' => array('So\\'rov muvaffaqiyatli bajarildi, %d qator o\\'zgartirildi.', 'So\\'rov muvaffaqiyatli bajarildi, %d qatorlar o\\'zgartirildi.'),\n\t'No commands to execute.' => 'Bajariladigan buyruqlar yo\\'q.',\n\t'Error in query' => 'So\\'rovda xatolik',\n\t'Unknown error.' => 'Noma\\'lum xatolik.',\n\t'Warnings' => 'Ogohlantirishlar',\n\t'ATTACH queries are not supported.' => 'ATTACH so\\'rovlari qo\\'llab-quvvatlanmaydi.',\n\t'Execute' => 'Bajarish',\n\t'Stop on error' => 'Xatoda to\\'xtash',\n\t'Show only errors' => 'Faqat xatolarni ko\\'rsatish',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Tarix',\n\t'Clear' => 'Tozalash',\n\t'Edit all' => 'Hammasini tahrirlash',\n\n\t'File upload' => 'Fayl yuklash',\n\t'From server' => 'Serverdan',\n\t'Webserver file %s' => 'Veb-server fayli %s',\n\t'Run file' => 'Faylni ishga tushirish',\n\t'File does not exist.' => 'Fayl mavjud emas.',\n\t'File uploads are disabled.' => 'Fayl yuklash o\\'chirilgan.',\n\t'Unable to upload a file.' => 'Faylni yuklab bo\\'lmadi.',\n\t'Maximum allowed file size is %sB.' => 'Maksimal ruxsat etilgan fayl hajmi %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Juda katta POST ma\\'lumotlari. Ma\\'lumotlarni kamaytiring yoki %s konfiguratsiya direktivasini oshiring.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Katta SQL faylini FTP orqali yuklab, uni serverdan import qilishingiz mumkin.',\n\t'You are offline.' => 'Siz oflayndasiz.',\n\n\t'Export' => 'Eksport',\n\t'Output' => 'Natija',\n\t'open' => 'ochish',\n\t'save' => 'saqlash',\n\t'Saving' => 'Saqlanmoqda',\n\t'Format' => 'Format',\n\t'Data' => 'Ma\\'lumotlar',\n\n\t'Database' => 'Ma\\'lumotlar bazasi',\n\t'DB' => 'MB',\n\t'Use' => 'Foydalanish',\n\t'Select database' => 'Ma\\'lumotlar bazasini tanlash',\n\t'Invalid database.' => 'Noto\\'g\\'ri ma\\'lumotlar bazasi.',\n\t'Database has been dropped.' => 'Ma\\'lumotlar bazasi o\\'chirildi.',\n\t'Databases have been dropped.' => 'Ma\\'lumotlar bazalari o\\'chirildi.',\n\t'Database has been created.' => 'Ma\\'lumotlar bazasi yaratildi.',\n\t'Database has been renamed.' => 'Ma\\'lumotlar bazasi qayta nomlandi.',\n\t'Database has been altered.' => 'Ma\\'lumotlar bazasi o\\'zgartirildi.',\n\t'Alter database' => 'Ma\\'lumotlar bazasini o\\'zgartirish',\n\t'Create database' => 'Ma\\'lumotlar bazasini yaratish',\n\t'Database schema' => 'Ma\\'lumotlar bazasi sxemasi',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Doimiy havola',\n\n\t// thousands separator - must contain single byte\n\t',' => ' ',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Dvigatel',\n\t'Collation' => 'Kodlash',\n\t'Data Length' => 'Ma\\'lumotlar hajmi',\n\t'Index Length' => 'Indeks hajmi',\n\t'Data Free' => 'Bo\\'sh ma\\'lumotlar',\n\t'Rows' => 'Qatorlar',\n\t'%d in total' => 'Jami %d',\n\t'Analyze' => 'Tahlil qilish',\n\t'Optimize' => 'Optimallash',\n\t'Vacuum' => 'Tozalash',\n\t'Check' => 'Tekshirish',\n\t'Repair' => 'Ta\\'mirlash',\n\t'Truncate' => 'Bo\\'shatish',\n\t'Tables have been truncated.' => 'Jadvallar bo\\'shatildi.',\n\t'Move to other database' => 'Boshqa ma\\'lumotlar bazasiga ko\\'chirish',\n\t'Move' => 'Ko\\'chirish',\n\t'Tables have been moved.' => 'Jadvallar ko\\'chirildi.',\n\t'Copy' => 'Nusxalash',\n\t'Tables have been copied.' => 'Jadvallar nusxalandi.',\n\t'overwrite' => 'qayta yozish',\n\n\t'Routines' => 'Protseduralar',\n\t'Routine has been called, %d row(s) affected.' => array('Protsedura chaqirildi, %d qator o\\'zgartirildi.', 'Protsedura chaqirildi, %d qatorlar o\\'zgartirildi.'),\n\t'Call' => 'Chaqirish',\n\t'Parameter name' => 'Parametr nomi',\n\t'Create procedure' => 'Protsedura yaratish',\n\t'Create function' => 'Funksiya yaratish',\n\t'Routine has been dropped.' => 'Protsedura o\\'chirildi.',\n\t'Routine has been altered.' => 'Protsedura o\\'zgartirildi.',\n\t'Routine has been created.' => 'Protsedura yaratildi.',\n\t'Alter function' => 'Funksiyani o\\'zgartirish',\n\t'Alter procedure' => 'Protseduranni o\\'zgartirish',\n\t'Return type' => 'Qaytarish turi',\n\n\t'Events' => 'Hodisalar',\n\t'Event has been dropped.' => 'Hodisa o\\'chirildi.',\n\t'Event has been altered.' => 'Hodisa o\\'zgartirildi.',\n\t'Event has been created.' => 'Hodisa yaratildi.',\n\t'Alter event' => 'Hodisani o\\'zgartirish',\n\t'Create event' => 'Hodisa yaratish',\n\t'At given time' => 'Belgilangan vaqtda',\n\t'Every' => 'Har bir',\n\t'Schedule' => 'Jadval',\n\t'Start' => 'Boshlash',\n\t'End' => 'Tugatish',\n\t'On completion preserve' => 'Yakunlangandan so\\'ng saqlash',\n\n\t'Tables' => 'Jadvallar',\n\t'Tables and views' => 'Jadvallar va ko\\'rinishlar',\n\t'Table' => 'Jadval',\n\t'No tables.' => 'Jadvallar yo\\'q.',\n\t'Alter table' => 'Jadvalni o\\'zgartirish',\n\t'Create table' => 'Jadval yaratish',\n\t'Table has been dropped.' => 'Jadval o\\'chirildi.',\n\t'Tables have been dropped.' => 'Jadvallar o\\'chirildi.',\n\t'Tables have been optimized.' => 'Jadvallar optimallashtirildi.',\n\t'Table has been altered.' => 'Jadval o\\'zgartirildi.',\n\t'Table has been created.' => 'Jadval yaratildi.',\n\t'Table name' => 'Jadval nomi',\n\t'Show structure' => 'Tuzilishni ko\\'rsatish',\n\t'engine' => 'dvigatel',\n\t'collation' => 'kodlash',\n\t'Column name' => 'Ustun nomi',\n\t'Type' => 'Tur',\n\t'Length' => 'Uzunlik',\n\t'Auto Increment' => 'Avto ko\\'payish',\n\t'Options' => 'Variantlar',\n\t'Comment' => 'Izoh',\n\t'Default value' => 'Standart qiymat',\n\t'Default values' => 'Standart qiymatlar',\n\t'Drop' => 'O\\'chirish',\n\t'Drop %s?' => '%s ni o\\'chirasizmi?',\n\t'Are you sure?' => 'Ishonchingiz komilmi?',\n\t'Size' => 'Hajm',\n\t'Compute' => 'Hisoblash',\n\t'Move up' => 'Yuqoriga ko\\'chirish',\n\t'Move down' => 'Pastga ko\\'chirish',\n\t'Remove' => 'Olib tashlash',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Ruxsat etilgan maydonlar soni oshib ketdi. Iltimos, %s ni oshiring.',\n\n\t'Partition by' => 'Bo\\'lish mezon',\n\t'Partitions' => 'Bo\\'limlar',\n\t'Partition name' => 'Bo\\'lim nomi',\n\t'Values' => 'Qiymatlar',\n\n\t'View' => 'Ko\\'rinish',\n\t'Materialized view' => 'Moddiy ko\\'rinish',\n\t'View has been dropped.' => 'Ko\\'rinish o\\'chirildi.',\n\t'View has been altered.' => 'Ko\\'rinish o\\'zgartirildi.',\n\t'View has been created.' => 'Ko\\'rinish yaratildi.',\n\t'Alter view' => 'Ko\\'rinishni o\\'zgartirish',\n\t'Create view' => 'Ko\\'rinish yaratish',\n\n\t'Indexes' => 'Indekslar',\n\t'Indexes have been altered.' => 'Indekslar o\\'zgartirildi.',\n\t'Alter indexes' => 'Indekslarni o\\'zgartirish',\n\t'Add next' => 'Keyingisini qo\\'shish',\n\t'Index Type' => 'Indeks turi',\n\t'length' => 'uzunlik',\n\n\t'Foreign keys' => 'Tashqi kalitlar',\n\t'Foreign key' => 'Tashqi kalit',\n\t'Foreign key has been dropped.' => 'Tashqi kalit o\\'chirildi.',\n\t'Foreign key has been altered.' => 'Tashqi kalit o\\'zgartirildi.',\n\t'Foreign key has been created.' => 'Tashqi kalit yaratildi.',\n\t'Target table' => 'Maqsad jadvali',\n\t'Change' => 'O\\'zgartirish',\n\t'Source' => 'Manba',\n\t'Target' => 'Maqsad',\n\t'Add column' => 'Ustun qo\\'shish',\n\t'Alter' => 'O\\'zgartirish',\n\t'Add foreign key' => 'Tashqi kalit qo\\'shish',\n\t'ON DELETE' => 'O\\'CHIRILGANDA',\n\t'ON UPDATE' => 'YANGILANGANDA',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Manba va maqsad ustunlari bir xil ma\\'lumot turiga ega bo\\'lishi kerak, maqsad ustunlarda indeks bo\\'lishi kerak va havolalar qilingan ma\\'lumotlar mavjud bo\\'lishi kerak.',\n\n\t'Triggers' => 'Triggerlar',\n\t'Add trigger' => 'Trigger qo\\'shish',\n\t'Trigger has been dropped.' => 'Trigger o\\'chirildi.',\n\t'Trigger has been altered.' => 'Trigger o\\'zgartirildi.',\n\t'Trigger has been created.' => 'Trigger yaratildi.',\n\t'Alter trigger' => 'Triggerni o\\'zgartirish',\n\t'Create trigger' => 'Trigger yaratish',\n\t'Time' => 'Vaqt',\n\t'Event' => 'Hodisa',\n\t'Name' => 'Nomi',\n\n\t'select' => 'tanlash',\n\t'Select' => 'Tanlash',\n\t'Select data' => 'Ma\\'lumotlarni tanlash',\n\t'Functions' => 'Funksiyalar',\n\t'Aggregation' => 'Agregatsiya',\n\t'Search' => 'Qidirish',\n\t'anywhere' => 'hamma joyda',\n\t'Search data in tables' => 'Jadvallarda ma\\'lumotlarni qidirish',\n\t'Sort' => 'Saralash',\n\t'descending' => 'kamayish bo\\'yicha',\n\t'Limit' => 'Cheklov',\n\t'Limit rows' => 'Qatorlarni cheklash',\n\t'Text length' => 'Matn uzunligi',\n\t'Action' => 'Amal',\n\t'Full table scan' => 'To\\'liq jadval skanerlash',\n\t'Unable to select the table' => 'Jadvalni tanlab bo\\'lmadi',\n\t'No rows.' => 'Qatorlar yo\\'q.',\n\t// used in SQL query limit and it is followed by another number, e.g. '10 / 50 rows' meaning 10 of 50 rows\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d qator', '%d qatorlar'),\n\t'Page' => 'Sahifa',\n\t'last' => 'oxirgi',\n\t'Load more data' => 'Ko\\'proq ma\\'lumot yuklash',\n\t'Loading' => 'Yuklanmoqda',\n\t'Whole result' => 'Butun natija',\n\t'%d byte(s)' => array('%d bayt', '%d baytlar'),\n\n\t'Import' => 'Import',\n\t'%d row(s) have been imported.' => array('%d qator import qilindi.', '%d qatorlar import qilindi.'),\n\t'File must be in UTF-8 encoding.' => 'Fayl UTF-8 kodlashda bo\\'lishi kerak.',\n\n\t// in-place editing in select\n\t'Modify' => 'O\\'zgartirish',\n\t'Ctrl+click on a value to modify it.' => 'Qiymatni o\\'zgartirish uchun Ctrl+bosing.',\n\t'Use edit link to modify this value.' => 'Bu qiymatni o\\'zgartirish uchun tahrir havolasidan foydalaning.',\n\n\t// %s can contain auto-increment value, e.g. ' 123'\n\t'Item%s has been inserted.' => 'Element%s kiritildi.',\n\t'Item has been deleted.' => 'Element o\\'chirildi.',\n\t'Item has been updated.' => 'Element yangilandi.',\n\t'%d item(s) have been affected.' => array('%d element o\\'zgartirildi.', '%d elementlar o\\'zgartirildi.'),\n\t'New item' => 'Yangi element',\n\t'original' => 'asl',\n\t// label for value '' in enum data type\n\t'empty' => 'bo\\'sh',\n\t'edit' => 'tahrirlash',\n\t'Edit' => 'Tahrirlash',\n\t'Insert' => 'Kiritish',\n\t'Save' => 'Saqlash',\n\t'Save and continue edit' => 'Saqlash va tahrirlashni davom ettirish',\n\t'Save and insert next' => 'Saqlash va keyingisini kiritish',\n\t'Selected' => 'Tanlangan',\n\t'Clone' => 'Klonlash',\n\t'Delete' => 'O\\'chirish',\n\t'You have no privileges to update this table.' => 'Bu jadvalni yangilash uchun sizda huquqlar yo\\'q.',\n\n\t// data type descriptions\n\t'Numbers' => 'Raqamlar',\n\t'Date and time' => 'Sana va vaqt',\n\t'Strings' => 'Matnlar',\n\t'Binary' => 'Ikkilik',\n\t'Lists' => 'Ro\\'yxatlar',\n\t'Network' => 'Tarmoq',\n\t'Geometry' => 'Geometriya',\n\t'Relations' => 'Munosabatlar',\n\n\t'Editor' => 'Muharrir',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$5.$3.$1',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'dd.mm.[yyyy]',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'SS:MM:SS',\n\t'now' => 'hozir',\n\t'yes' => 'ha',\n\t'no' => 'yo\\'q',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Fayl mavjud.',\n\t'Please use one of the extensions %s.' => 'Iltimos, kengaytmalardan birini %s foydalaning.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Sxemani o\\'zgartirish',\n\t'Create schema' => 'Sxema yaratish',\n\t'Schema has been dropped.' => 'Sxema o\\'chirildi.',\n\t'Schema has been created.' => 'Sxema yaratildi.',\n\t'Schema has been altered.' => 'Sxema o\\'zgartirildi.',\n\t'Schema' => 'Sxema',\n\t'Invalid schema.' => 'Noto\\'g\\'ri sxema.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Ketma-ketliklar',\n\t'Create sequence' => 'Ketma-ketlik yaratish',\n\t'Sequence has been dropped.' => 'Ketma-ketlik o\\'chirildi.',\n\t'Sequence has been created.' => 'Ketma-ketlik yaratildi.',\n\t'Sequence has been altered.' => 'Ketma-ketlik o\\'zgartirildi.',\n\t'Alter sequence' => 'Ketma-ketlikni o\\'zgartirish',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Foydalanuvchi turlari',\n\t'Create type' => 'Tur yaratish',\n\t'Type has been dropped.' => 'Tur o\\'chirildi.',\n\t'Type has been created.' => 'Tur yaratildi.',\n\t'Alter type' => 'Turni o\\'zgartirish',\n\n\t// Table check constraints\n\t'Checks' => 'Tekshirishlar',\n\t'Create check' => 'Tekshirish yaratish',\n\t'Alter check' => 'Tekshirishni o\\'zgartirish',\n\t'Check has been created.' => 'Tekshirish yaratildi.',\n\t'Check has been altered.' => 'Tekshirish o\\'zgartirildi.',\n\t'Check has been dropped.' => 'Tekshirish o\\'chirildi.',\n);\n\n// run `php ../../lang.php uz` to update this file\n"
  },
  {
    "path": "adminer/lang/vi.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Hệ thống',\n\t'Server' => 'Máy chủ',\n\t'Username' => 'Tên người dùng',\n\t'Password' => 'Mật khẩu',\n\t'Permanent login' => 'Giữ đăng nhập một thời gian',\n\t'Login' => 'Đăng nhập',\n\t'Logout' => 'Thoát',\n\t'Logged as: %s' => 'Vào dưới tên: %s',\n\t'Logout successful.' => 'Đã thoát xong.',\n\t'Invalid credentials.' => 'Tài khoản sai.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => 'Bạn gõ sai tài khoản quá nhiều lần, hãy thử lại sau %d phút nữa.',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Mật khẩu đã hết hạn. <a href=\"https://www.adminer.org/en/extension/\"%s>Thử cách làm</a> để giữ cố định.',\n\t'Language' => 'Ngôn ngữ',\n\t'Invalid CSRF token. Send the form again.' => 'Mã kiểm tra CSRF sai, hãy nhập lại biểu mẫu.',\n\t'No extension' => 'Không có phần mở rộng',\n\t'None of the supported PHP extensions (%s) are available.' => 'Bản cài đặt PHP thiếu hỗ trợ cho %s.',\n\t'Session support must be enabled.' => 'Cần phải bật session.',\n\t'Session expired, please login again.' => 'Phiên làm việc đã hết, hãy đăng nhập lại.',\n\t'%s version: %s through PHP extension %s' => 'Phiên bản %s: %s (PHP extension: %s)',\n\t'Refresh' => 'Làm mới',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Quyền truy cập',\n\t'Create user' => 'Tạo người dùng',\n\t'User has been dropped.' => 'Đã xoá người dùng.',\n\t'User has been altered.' => 'Đã sửa người dùng.',\n\t'User has been created.' => 'Đã tạo người dùng.',\n\t'Hashed' => 'Mã hoá',\n\t'Column' => 'Cột',\n\t'Routine' => 'Hàm tích hợp',\n\t'Grant' => 'Cấp quyền',\n\t'Revoke' => 'Tước quyền',\n\n\t'Process list' => 'Danh sách tiến trình',\n\t'%d process(es) have been killed.' => '%d tiến trình đã dừng.',\n\t'Kill' => 'Dừng',\n\n\t'Variables' => 'Biến',\n\t'Status' => 'Trạng thái',\n\n\t'SQL command' => 'Câu lệnh SQL',\n\t'%d query(s) executed OK.' => '%d câu lệnh đã chạy thành công.',\n\t'Query executed OK, %d row(s) affected.' => 'Đã thực hiện xong, ảnh hưởng đến %d dòng.',\n\t'No commands to execute.' => 'Chẳng có gì để thực hiện!.',\n\t'Error in query' => 'Có lỗi trong câu lệnh',\n\t'Execute' => 'Thực hiện',\n\t'Stop on error' => 'Dừng khi có lỗi',\n\t'Show only errors' => 'Chỉ hiện lỗi',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f s',\n\t'History' => 'Lịch sử',\n\t'Clear' => 'Xoá',\n\t'Edit all' => 'Sửa tất cả',\n\n\t'File upload' => 'Tải tệp lên',\n\t'From server' => 'Dùng tệp trên máy chủ',\n\t'Webserver file %s' => 'Tệp trên máy chủ %s',\n\t'Run file' => 'Chạy tệp',\n\t'File does not exist.' => 'Tệp không tồn tại.',\n\t'File uploads are disabled.' => 'Chức năng tải tệp lên đã bị cấm.',\n\t'Unable to upload a file.' => 'Không thể tải tệp lên.',\n\t'Maximum allowed file size is %sB.' => 'Kích thước tệp tối đa là %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Dữ liệu tải lên/POST quá lớn. Hãy giảm kích thước tệp hoặc tăng cấu hình (hiện tại %s).',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Bạn có thể tải tệp lên dùng FTP và nhập vào cơ sở dữ liệu.',\n\n\t'Export' => 'Xuất',\n\t'Output' => 'Kết quả',\n\t'open' => 'xem',\n\t'save' => 'lưu',\n\t'Format' => 'Định dạng',\n\t'Data' => 'Dữ liệu',\n\n\t'Database' => 'Cơ sở dữ liệu',\n\t'Use' => 'Sử dụng',\n\t'Select database' => 'Chọn CSDL',\n\t'Invalid database.' => 'CSDL sai.',\n\t'Database has been dropped.' => 'CSDL đã bị xoá.',\n\t'Databases have been dropped.' => 'Các CSDL đã bị xoá.',\n\t'Database has been created.' => 'Đã tạo CSDL.',\n\t'Database has been renamed.' => 'Đã đổi tên CSDL.',\n\t'Database has been altered.' => 'Đã thay đổi CSDL.',\n\t'Alter database' => 'Thay đổi CSDL',\n\t'Create database' => 'Tạo CSDL',\n\t'Database schema' => 'Cấu trúc CSDL',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Liên kết cố định',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => 'Cơ chế lưu trữ',\n\t'Collation' => 'Bộ mã',\n\t'Data Length' => 'Kích thước dữ liệu',\n\t'Index Length' => 'Kích thước chỉ mục',\n\t'Data Free' => 'Dữ liệu trống',\n\t'Rows' => 'Số dòng',\n\t'%d in total' => '%s',\n\t'Analyze' => 'Phân tích',\n\t'Optimize' => 'Tối ưu',\n\t'Vacuum' => 'Dọn dẹp',\n\t'Check' => 'Kiểm tra',\n\t'Repair' => 'Sửa chữa',\n\t'Truncate' => 'Làm rỗng',\n\t'Tables have been truncated.' => 'Bảng đã bị làm rỗng.',\n\t'Move to other database' => 'Chuyển tới cơ sở dữ liệu khác',\n\t'Move' => 'Chuyển đi',\n\t'Tables have been moved.' => 'Bảng.',\n\t'Copy' => 'Sao chép',\n\t'Tables have been copied.' => 'Bảng đã được sao chép.',\n\n\t'Routines' => 'Routines',\n\t'Routine has been called, %d row(s) affected.' => 'Đã chạy routine, thay đổi %d dòng.',\n\t'Call' => 'Gọi',\n\t'Parameter name' => 'Tham số',\n\t'Create procedure' => 'Tạo lệnh',\n\t'Create function' => 'Tạo hàm',\n\t'Routine has been dropped.' => 'Đã xoá routine.',\n\t'Routine has been altered.' => 'Đã thay đổi routine.',\n\t'Routine has been created.' => 'Đã tạo routine.',\n\t'Alter function' => 'Thay đổi hàm',\n\t'Alter procedure' => 'Thay đổi thủ tục',\n\t'Return type' => 'Giá trị trả về',\n\t'Events' => 'Sự kiện',\n\t'Event has been dropped.' => 'Đã xoá sự kiện.',\n\t'Event has been altered.' => 'Đã thay đổi sự kiện.',\n\t'Event has been created.' => 'Đã tạo sự kiện.',\n\t'Alter event' => 'Sửa sự kiện',\n\t'Create event' => 'Tạo sự kiện',\n\t'At given time' => 'Vào thời gian xác định',\n\t'Every' => 'Mỗi',\n\t'Schedule' => 'Đặt lịch',\n\t'Start' => 'Bắt đầu',\n\t'End' => 'Kết thúc',\n\t'On completion preserve' => 'Khi kết thúc, duy trì',\n\n\t'Tables' => 'Các bảng',\n\t'Tables and views' => 'Bảng và khung nhìn',\n\t'Table' => 'Bảng',\n\t'No tables.' => 'Không có bảng nào.',\n\t'Alter table' => 'Sửa bảng',\n\t'Create table' => 'Tạo bảng',\n\t'Table has been dropped.' => 'Bảng đã bị xoá.',\n\t'Tables have been dropped.' => 'Các bảng đã bị xoá.',\n\t'Tables have been optimized.' => 'Bảng đã được tối ưu.',\n\t'Table has been altered.' => 'Bảng đã thay đổi.',\n\t'Table has been created.' => 'Bảng đã được tạo.',\n\t'Table name' => 'Tên bảng',\n\t'Show structure' => 'Hiện cấu trúc',\n\t'engine' => 'cơ chế lưu trữ',\n\t'collation' => 'bảng mã',\n\t'Column name' => 'Tên cột',\n\t'Type' => 'Loại',\n\t'Length' => 'Độ dài',\n\t'Auto Increment' => 'Tăng tự động',\n\t'Options' => 'Tuỳ chọn',\n\t'Comment' => 'Chú thích',\n\t'Default values' => 'Giá trị mặc định',\n\t'Drop' => 'Xoá',\n\t'Are you sure?' => 'Bạn có chắc',\n\t'Size' => 'Kích thước',\n\t'Compute' => 'Tính',\n\t'Move up' => 'Chuyển lên trên',\n\t'Move down' => 'Chuyển xuống dưới',\n\t'Remove' => 'Xoá',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Thiết lập %s cần tăng thêm. (Đã vượt giới hạnố trường tối đa cho phép trong một biểu mẫu).',\n\n\t'Partition by' => 'Phân chia bằng',\n\t'Partitions' => 'Phân hoạch',\n\t'Partition name' => 'Tên phân hoạch',\n\t'Values' => 'Giá trị',\n\n\t'View' => 'Khung nhìn',\n\t'View has been dropped.' => 'Khung nhìn đã bị xoá.',\n\t'View has been altered.' => 'Khung nhìn đã được sửa.',\n\t'View has been created.' => 'Khung nhìn đã được tạo.',\n\t'Alter view' => 'Sửa khung nhìn',\n\t'Create view' => 'Tạo khung nhìn',\n\n\t'Indexes' => 'Chỉ mục',\n\t'Indexes have been altered.' => 'Chỉ mục đã được sửa.',\n\t'Alter indexes' => 'Sửa chỉ mục',\n\t'Add next' => 'Thêm tiếp',\n\t'Index Type' => 'Loại chỉ mục',\n\t'length' => 'độ dài',\n\n\t'Foreign keys' => 'Các khoá ngoại',\n\t'Foreign key' => 'Khoá ngoại',\n\t'Foreign key has been dropped.' => 'Khoá ngoại đã bị xoá.',\n\t'Foreign key has been altered.' => 'Khoá ngoại đã được sửa.',\n\t'Foreign key has been created.' => 'Khoá ngoại đã được tạo.',\n\t'Target table' => 'Bảng đích',\n\t'Change' => 'Thay đổi',\n\t'Source' => 'Nguồn',\n\t'Target' => 'Đích',\n\t'Add column' => 'Thêm cột',\n\t'Alter' => 'Sửa',\n\t'Add foreign key' => 'Thêm khoá ngoại',\n\t'ON DELETE' => 'Khi xoá',\n\t'ON UPDATE' => 'Khi cập nhật',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Cột gốc và cột đích phải cùng kiểu, phải đặt chỉ mục trong cột đích và dữ liệu tham chiếu phải tồn tại.',\n\n\t'Triggers' => 'Phản xạ',\n\t'Add trigger' => 'Thêm phản xạ',\n\t'Trigger has been dropped.' => 'Đã xoá phản xạ.',\n\t'Trigger has been altered.' => 'Đã sửa phản xạ.',\n\t'Trigger has been created.' => 'Đã tạo phản xạ.',\n\t'Alter trigger' => 'Sửa phản xạ',\n\t'Create trigger' => 'Tạo phản xạ',\n\t'Time' => 'Thời gian',\n\t'Event' => 'Sự kiện',\n\t'Name' => 'Tên',\n\n\t'select' => 'xem',\n\t'Select' => 'Xem',\n\t'Select data' => 'Xem dữ liệu',\n\t'Functions' => 'Các chức năng',\n\t'Aggregation' => 'Tổng hợp',\n\t'Search' => 'Tìm kiếm',\n\t'anywhere' => 'bất cứ đâu',\n\t'Search data in tables' => 'Tìm kiếm dữ liệu trong các bảng',\n\t'Sort' => 'Sắp xếp',\n\t'descending' => 'giảm dần',\n\t'Limit' => 'Giới hạn',\n\t'Text length' => 'Chiều dài văn bản',\n\t'Action' => 'Hành động',\n\t'Full table scan' => 'Quét toàn bộ bảng',\n\t'Unable to select the table' => 'Không thể xem dữ liệu',\n\t'No rows.' => 'Không có dòng dữ liệu nào.',\n\t'%d row(s)' => '%s dòng',\n\t'Page' => 'trang',\n\t'last' => 'cuối',\n\t'Load more data' => 'Xem thêm dữ liệu',\n\t'Loading' => 'Đang nạp',\n\t'Whole result' => 'Toàn bộ kết quả',\n\t'%d byte(s)' => '%d byte(s)',\n\n\t'Import' => 'Nhập khẩu',\n\t'%d row(s) have been imported.' => 'Đã nhập % dòng dữ liệu.',\n\t'File must be in UTF-8 encoding.' => 'Tệp phải mã hoá bằng chuẩn UTF-8.',\n\n\t// in-place editing in select\n\t'Modify' => 'Sửa',\n\t'Ctrl+click on a value to modify it.' => 'Nhấn Ctrl và bấm vào giá trị để sửa.',\n\t'Use edit link to modify this value.' => 'Dùng nút sửa để thay đổi giá trị này.',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => 'Đã thêm%s.',\n\t'Item has been deleted.' => 'Đã xoá.',\n\t'Item has been updated.' => 'Đã cập nhật.',\n\t'%d item(s) have been affected.' => '%d phần đã thay đổi.',\n\t'New item' => 'Thêm',\n\t'original' => 'bản gốc',\n\t// label for value '' in enum data type\n\t'empty' => 'trống',\n\t'edit' => 'sửa',\n\t'Edit' => 'Sửa',\n\t'Insert' => 'Thêm',\n\t'Save' => 'Lưu',\n\t'Save and continue edit' => 'Lưu và tiếp tục sửa',\n\t'Save and insert next' => 'Lưu và thêm tiếp',\n\t'Selected' => 'Chọn',\n\t'Clone' => 'Sao chép',\n\t'Delete' => 'Xoá',\n\t'You have no privileges to update this table.' => 'Bạn không có quyền sửa bảng này.',\n\n\t// data type descriptions\n\t'Numbers' => 'Số',\n\t'Date and time' => 'Ngày giờ',\n\t'Strings' => 'Chuỗi',\n\t'Binary' => 'Mã máy',\n\t'Lists' => 'Danh sách',\n\t'Network' => 'Mạng',\n\t'Geometry' => 'Toạ độ',\n\t'Relations' => 'Quan hệ',\n\n\t'Editor' => 'Biên tập',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1-$3-$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy]-mm-dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => 'hiện tại',\n\t'yes' => 'có',\n\t'no' => 'không',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Tệp đã có rồi.',\n\t'Please use one of the extensions %s.' => 'Cần phải dùng một trong các phần mở rộng sau: %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Thay đổi schema',\n\t'Create schema' => 'Tạo schema',\n\t'Schema has been dropped.' => 'Đã xoá schema.',\n\t'Schema has been created.' => 'Đã tạo schema.',\n\t'Schema has been altered.' => 'Đã thay đổi schema.',\n\t'Schema' => 'Schema',\n\t'Invalid schema.' => 'Schema không hợp lệ.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Dãy số',\n\t'Create sequence' => 'Tạo dãy số',\n\t'Sequence has been dropped.' => 'Dãy số đã bị xoá.',\n\t'Sequence has been created.' => 'Đã tạo dãy số.',\n\t'Sequence has been altered.' => 'Đã sửa dãy số.',\n\t'Alter sequence' => 'Thay đổi dãy số',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Kiểu tự định nghĩa',\n\t'Create type' => 'Tạo kiểu',\n\t'Type has been dropped.' => 'Đã xoá kiểu.',\n\t'Type has been created.' => 'Đã tạo kiểu.',\n\t'Alter type' => 'Sửa kiểu dữ liệu',\n);\n\n// run `php ../../lang.php vi` to update this file\n"
  },
  {
    "path": "adminer/lang/xx.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => 'Xx',\n\t'Server' => 'Xx',\n\t'Username' => 'Xx',\n\t'Password' => 'Xx',\n\t'Permanent login' => 'Xx',\n\t'Login' => 'Xx',\n\t'Logout' => 'Xx',\n\t'Logged as: %s' => 'Xx: %s',\n\t'Logout successful.' => 'Xx.',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => 'Xx <a href=\"https://www.adminer.org/en/donation/\">xx</a>.',\n\t'hostname[:port] or :socket' => 'xx',\n\t'Invalid credentials.' => 'Xx.',\n\t'There is a space in the input password which might be the cause.' => 'Xx.',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Xx, <a href=\"https://www.adminer.org/en/password/\"%s>xx</a>.',\n\t'Database does not support password.' => 'Xx.',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => array('Xx %d.', 'Xx %d.'),\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => 'Xx. <a href=\"https://www.adminer.org/en/extension/\"%s>Xx</a> %s xx.',\n\t'Language' => 'Xx',\n\t'Invalid CSRF token. Send the form again.' => 'Xx.',\n\t'If you did not send this request from Adminer then close this page.' => 'Xx.',\n\t'No extension' => 'Xx',\n\t// %s contains the list of the extensions, e.g. 'mysqli, PDO_MySQL'\n\t'None of the supported PHP extensions (%s) are available.' => 'Xx (%s).',\n\t'Connecting to privileged ports is not allowed.' => 'Xx.',\n\t'Disable %s or enable %s or %s extensions.' => 'Xx %s xx %s xx %s xx.',\n\t'Session support must be enabled.' => 'Xx.',\n\t'Session expired, please login again.' => 'Xx.',\n\t'The action will be performed after successful login with the same credentials.' => 'Xx.',\n\t'%s version: %s through PHP extension %s' => '%s xx: %s xx %s',\n\t'Refresh' => 'Xx',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => 'Xx',\n\t'Create user' => 'Xx',\n\t'User has been dropped.' => 'Xx.',\n\t'User has been altered.' => 'Xx.',\n\t'User has been created.' => 'Xx.',\n\t'Hashed' => 'Xx',\n\t'Column' => 'Xx',\n\t'Columns' => 'Xx',\n\t'Routine' => 'Xx',\n\t'Grant' => 'Xx',\n\t'Revoke' => 'Xx',\n\n\t'Process list' => 'Xx',\n\t'%d process(es) have been killed.' => array('%d xx.', '%d xx.'),\n\t'Kill' => 'Xx',\n\n\t'Variables' => 'Xx',\n\t'Status' => 'Xx',\n\n\t'SQL command' => 'Xx',\n\t'%d query(s) executed OK.' => array('%d xx.', '%d xx.'),\n\t'Query executed OK, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),\n\t'No commands to execute.' => 'Xx.',\n\t'Error in query' => 'Xx',\n\t'Unknown error.' => 'Xx.',\n\t'Warnings' => 'Xx',\n\t'ATTACH queries are not supported.' => 'Xx.',\n\t'Execute' => 'Xx',\n\t'Stop on error' => 'Xx',\n\t'Show only errors' => 'Xx',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f xx',\n\t'History' => 'Xx',\n\t'Clear' => 'Xx',\n\t'Edit all' => 'Xx',\n\n\t'File upload' => 'Xx',\n\t'From server' => 'Xx',\n\t'Webserver file %s' => 'Xx %s',\n\t'Run file' => 'Xx',\n\t'File does not exist.' => 'Xx.',\n\t'Increase %s.' => 'Xx %s.',\n\t'File uploads are disabled.' => 'Xx.',\n\t'Unable to upload a file.' => 'Xx.',\n\t'Maximum allowed file size is %sB.' => 'Xx %sB.',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Xx %s.',\n\t'You can upload a big SQL file via FTP and import it from server.' => 'Xx.',\n\t'You are offline.' => 'Xx.',\n\n\t'Export' => 'Xx',\n\t'Output' => 'Xx',\n\t'open' => 'xx',\n\t'save' => 'xx',\n\t'Saving' => 'Xx',\n\t'Format' => 'Xx',\n\t'Data' => 'Xx',\n\n\t'Database' => 'Xx',\n\t'DB' => 'XX',\n\t'Use' => 'Xx',\n\t'Select database' => 'Xx',\n\t'Invalid database.' => 'Xx.',\n\t'Database has been dropped.' => 'Xx.',\n\t'Databases have been dropped.' => 'Xx.',\n\t'Database has been created.' => 'Xx.',\n\t'Database has been renamed.' => 'Xx.',\n\t'Database has been altered.' => 'Xx.',\n\t'Alter database' => 'Xx',\n\t'Create database' => 'Xx',\n\t'Database schema' => 'Xx',\n\n\t// link to current database schema layout\n\t'Permanent link' => 'Xx',\n\n\t// thousands separator - must contain single byte\n\t',' => 'x',\n\t'0123456789' => 'xxxxxxxxxx',\n\t'Engine' => 'Xx',\n\t'Collation' => 'Xx',\n\t'Data Length' => 'Xx',\n\t'Index Length' => 'Xx',\n\t'Data Free' => 'Xx',\n\t'Rows' => 'Xx',\n\t'%d in total' => '%d xx',\n\t'Analyze' => 'Xx',\n\t'Optimize' => 'Xx',\n\t'Vacuum' => 'Xx',\n\t'Check' => 'Xx',\n\t'Repair' => 'Xx',\n\t'Truncate' => 'Xx',\n\t'Tables have been truncated.' => 'Xx.',\n\t'Move to other database' => 'Xx',\n\t'Move' => 'Xx',\n\t'Tables have been moved.' => 'Xx.',\n\t'Copy' => 'Xx',\n\t'Tables have been copied.' => 'Xx.',\n\t'overwrite' => 'xx',\n\n\t'Routines' => 'Xx',\n\t'Routine has been called, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),\n\t'Call' => 'Xx',\n\t'Parameter name' => 'Xx',\n\t'Create procedure' => 'Xx',\n\t'Create function' => 'Xx',\n\t'Routine has been dropped.' => 'Xx.',\n\t'Routine has been altered.' => 'Xx.',\n\t'Routine has been created.' => 'Xx.',\n\t'Alter function' => 'Xx',\n\t'Alter procedure' => 'Xx',\n\t'Return type' => 'Xx',\n\n\t'Events' => 'Xx',\n\t'Event has been dropped.' => 'Xx.',\n\t'Event has been altered.' => 'Xx.',\n\t'Event has been created.' => 'Xx.',\n\t'Alter event' => 'Xx',\n\t'Create event' => 'Xx',\n\t'At given time' => 'Xx',\n\t'Every' => 'Xx',\n\t'Schedule' => 'Xx',\n\t'Start' => 'Xx',\n\t'End' => 'Xx',\n\t'On completion preserve' => 'Xx',\n\n\t'Tables' => 'Xx',\n\t'Tables and views' => 'Xx',\n\t'Table' => 'Xx',\n\t'No tables.' => 'Xx.',\n\t'Alter table' => 'Xx',\n\t'Create table' => 'Xx',\n\t'Table has been dropped.' => 'Xx.',\n\t'Tables have been dropped.' => 'Xx.',\n\t'Tables have been optimized.' => 'Xx.',\n\t'Table has been altered.' => 'Xx.',\n\t'Table has been created.' => 'Xx.',\n\t'Table name' => 'Xx',\n\t'Show structure' => 'Xx',\n\t'engine' => 'xx',\n\t'collation' => 'xx',\n\t'Column name' => 'Xx',\n\t'Type' => 'Xx',\n\t'Length' => 'Xx',\n\t'Auto Increment' => 'Xx',\n\t'Options' => 'Xx',\n\t'Comment' => 'Xx',\n\t'Default value' => 'Xx',\n\t'Default values' => 'Xx',\n\t'Drop' => 'Xx',\n\t'Drop %s?' => 'Xx %s?',\n\t'Are you sure?' => 'Xx?',\n\t'Size' => 'Xx',\n\t'Compute' => 'Xx',\n\t'Move up' => 'Xx',\n\t'Move down' => 'Xx',\n\t'Remove' => 'Xx',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => 'Xx %s.',\n\n\t'Partition by' => 'Xx',\n\t'Partitions' => 'Xx',\n\t'Partition name' => 'Xx',\n\t'Values' => 'Xx',\n\t'Inherits from' => 'Xx',\n\t'Inherited by' => 'Xx',\n\n\t'View' => 'Xx',\n\t'Materialized view' => 'Xx',\n\t'View has been dropped.' => 'Xx.',\n\t'View has been altered.' => 'Xx.',\n\t'View has been created.' => 'Xx.',\n\t'Alter view' => 'Xx',\n\t'Create view' => 'Xx',\n\n\t'Indexes' => 'Xx',\n\t'Indexes have been altered.' => 'Xx.',\n\t'Alter indexes' => 'Xx',\n\t'Add next' => 'Xx',\n\t'Index Type' => 'Xx',\n\t'length' => 'xx',\n\t'Algorithm' => 'Xx',\n\t'Condition' => 'Xx',\n\n\t'Foreign keys' => 'Xx',\n\t'Foreign key' => 'Xx',\n\t'Foreign key has been dropped.' => 'Xx.',\n\t'Foreign key has been altered.' => 'Xx.',\n\t'Foreign key has been created.' => 'Xx.',\n\t'Target table' => 'Xx',\n\t'Change' => 'Xx',\n\t'Source' => 'Xx',\n\t'Target' => 'Xx',\n\t'Add column' => 'Xx',\n\t'Alter' => 'Xx',\n\t'Add foreign key' => 'Xx',\n\t'ON DELETE' => 'Xx',\n\t'ON UPDATE' => 'Xx',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Xx.',\n\n\t'Triggers' => 'Xx',\n\t'Add trigger' => 'Xx',\n\t'Trigger has been dropped.' => 'Xx.',\n\t'Trigger has been altered.' => 'Xx.',\n\t'Trigger has been created.' => 'Xx.',\n\t'Alter trigger' => 'Xx',\n\t'Create trigger' => 'Xx',\n\t'Time' => 'Xx',\n\t'Event' => 'Xx',\n\t'Name' => 'Xx',\n\n\t'select' => 'xx',\n\t'Select' => 'Xx',\n\t'Select data' => 'Xx',\n\t'Functions' => 'Xx',\n\t'Aggregation' => 'Xx',\n\t'Search' => 'Xx',\n\t'anywhere' => 'xx',\n\t'Search data in tables' => 'Xx',\n\t'Sort' => 'Xx',\n\t'descending' => 'xx',\n\t'Limit' => 'Xx',\n\t'Limit rows' => 'Xx',\n\t'Text length' => 'Xx',\n\t'Action' => 'Xx',\n\t'Full table scan' => 'Xx',\n\t'Unable to select the table' => 'Xx',\n\t'No rows.' => 'Xx.',\n\t// used in SQL query limit and it is followed by another number, e.g. '10 / 50 rows' meaning 10 of 50 rows\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => array('%d xx', '%d xx'),\n\t'Page' => 'Xx',\n\t'last' => 'xx',\n\t'Load more data' => 'Xx',\n\t'Loading' => 'Xx',\n\t'Whole result' => 'Xx',\n\t'%d byte(s)' => array('%d xx', '%d xx'),\n\n\t'Import' => 'Xx',\n\t'%d row(s) have been imported.' => array('%d xx.', '%d xx.'),\n\t'File must be in UTF-8 encoding.' => 'Xx.',\n\n\t// in-place editing in select\n\t'Modify' => 'Xx',\n\t'Ctrl+click on a value to modify it.' => 'Xx.',\n\t'Use edit link to modify this value.' => 'Xx.',\n\n\t// %s can contain auto-increment value, e.g. ' 123'\n\t'Item%s has been inserted.' => 'Xx%s.',\n\t'Item has been deleted.' => 'Xx.',\n\t'Item has been updated.' => 'Xx.',\n\t'%d item(s) have been affected.' => array('%d xx.', '%d xx.'),\n\t'New item' => 'Xx',\n\t'original' => 'xx',\n\t// label for value '' in enum data type\n\t'empty' => 'xx',\n\t'edit' => 'xx',\n\t'Edit' => 'Xx',\n\t'Insert' => 'Xx',\n\t'Save' => 'Xx',\n\t'Save and continue edit' => 'Xx',\n\t'Save and insert next' => 'Xx',\n\t'Selected' => 'Xx',\n\t'Clone' => 'Xx',\n\t'Delete' => 'Xx',\n\t'You have no privileges to update this table.' => 'Xx.',\n\n\t// data type descriptions\n\t'Numbers' => 'Xx',\n\t'Date and time' => 'Xx',\n\t'Strings' => 'Xx',\n\t'Binary' => 'Xx',\n\t'Lists' => 'Xx',\n\t'Network' => 'Xx',\n\t'Geometry' => 'Xx',\n\t'Relations' => 'Xx',\n\n\t'Editor' => 'Xx',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => 'xx',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => 'xx',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'Xx',\n\t'now' => 'xx',\n\t'yes' => 'xx',\n\t'no' => 'xx',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => 'Xx.',\n\t'Please use one of the extensions %s.' => 'Xx %s.',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => 'Xx',\n\t'Create schema' => 'Xx',\n\t'Schema has been dropped.' => 'Xx.',\n\t'Schema has been created.' => 'Xx.',\n\t'Schema has been altered.' => 'Xx.',\n\t'Schema' => 'Xx',\n\t'Invalid schema.' => 'Xx.',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => 'Xx',\n\t'Create sequence' => 'Xx',\n\t'Sequence has been dropped.' => 'Xx.',\n\t'Sequence has been created.' => 'Xx.',\n\t'Sequence has been altered.' => 'Xx.',\n\t'Alter sequence' => 'Xx',\n\n\t// PostgreSQL user types support\n\t'User types' => 'Xx',\n\t'Create type' => 'Xx',\n\t'Type has been dropped.' => 'Xx.',\n\t'Type has been created.' => 'Xx.',\n\t'Alter type' => 'Xx',\n\n\t// Table check constraints\n\t'Checks' => 'Xx',\n\t'Create check' => 'Xx',\n\t'Alter check' => 'Xx',\n\t'Check has been created.' => 'Xx.',\n\t'Check has been altered.' => 'Xx.',\n\t'Check has been dropped.' => 'Xx.',\n\n\t'Loaded plugins' => 'Xx',\n\t'%s must <a%s>return an array</a>.' => '%s xx <a%s>xx</a>.',\n\t'<a%s>Configure</a> %s in %s.' => '<a%s>Xx</a> %s xx %s.',\n\t'screenshot' => 'xx',\n);\n\n// run `php ../../lang.php xx` to update this file\n"
  },
  {
    "path": "adminer/lang/zh-tw.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => '資料庫系統',\n\t'Server' => '伺服器',\n\t'Username' => '帳號',\n\t'Password' => '密碼',\n\t'Permanent login' => '永久登入',\n\t'Login' => '登入',\n\t'Logout' => '登出',\n\t'Logged as: %s' => '登錄為： %s',\n\t'Logout successful.' => '成功登出。',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => '感謝使用Adminer，請考慮為我們<a href=\"https://www.adminer.org/en/donation/\">捐款（英文網頁）</a>。',\n\t'Invalid credentials.' => '無效的憑證。',\n\t'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格，這可能是導致問題的原因。',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫，<a href=\"https://www.adminer.org/en/password/\"%s>詳情見這裡</a>。',\n\t'Database does not support password.' => '資料庫不支援密碼。',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => '登錄失敗次數過多，請 %d 分鐘後重試。',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => '主密碼已過期。<a href=\"https://www.adminer.org/en/extension/\"%s>請擴展</a> %s 方法讓它永久化。',\n\t'Language' => '語言',\n\t'Invalid CSRF token. Send the form again.' => '無效的 CSRF token。請重新發送表單。',\n\t'If you did not send this request from Adminer then close this page.' => '如果您並沒有從Adminer發送請求，請關閉此頁面。',\n\t'No extension' => '無擴充模組',\n\t'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的 PHP 擴充模組（%s）。',\n\t'Connecting to privileged ports is not allowed.' => '不允許連接到特權埠。',\n\t'Disable %s or enable %s or %s extensions.' => '禁用 %s 或啟用 %s 或 %s 擴充模組。',\n\t'Session support must be enabled.' => 'Session 必須被啟用。',\n\t'Session expired, please login again.' => 'Session 已過期，請重新登入。',\n\t'The action will be performed after successful login with the same credentials.' => '此操作將在成功使用相同的憑據登錄後執行。',\n\t'%s version: %s through PHP extension %s' => '%s 版本：%s 透過 PHP 擴充模組 %s',\n\t'Refresh' => '重新載入',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => '權限',\n\t'Create user' => '建立使用者',\n\t'User has been dropped.' => '已刪除使用者。',\n\t'User has been altered.' => '已修改使用者。',\n\t'User has been created.' => '已建立使用者。',\n\t'Hashed' => 'Hashed',\n\t'Column' => '欄位',\n\t'Routine' => '程序',\n\t'Grant' => '授權',\n\t'Revoke' => '廢除',\n\n\t'Process list' => '處理程序列表',\n\t'%d process(es) have been killed.' => '%d 個 Process(es) 被終止。',\n\t'Kill' => '終止',\n\n\t'Variables' => '變數',\n\t'Status' => '狀態',\n\n\t'SQL command' => 'SQL 命令',\n\t'%d query(s) executed OK.' => '已順利執行 %d 個查詢。',\n\t'Query executed OK, %d row(s) affected.' => '執行查詢 OK，%d 行受影響。',\n\t'No commands to execute.' => '沒有命令可執行。',\n\t'Error in query' => '查詢發生錯誤',\n\t'Unknown error.' => '未知錯誤。',\n\t'Warnings' => '警告',\n\t'ATTACH queries are not supported.' => '不支援ATTACH查詢。',\n\t'Execute' => '執行',\n\t'Stop on error' => '出錯時停止',\n\t'Show only errors' => '僅顯示錯誤訊息',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f 秒',\n\t'History' => '紀錄',\n\t'Clear' => '清除',\n\t'Edit all' => '編輯全部',\n\n\t'File upload' => '檔案上傳',\n\t'From server' => '從伺服器',\n\t'Webserver file %s' => '網頁伺服器檔案 %s',\n\t'Run file' => '執行檔案',\n\t'File does not exist.' => '檔案不存在。',\n\t'File uploads are disabled.' => '檔案上傳已經被停用。',\n\t'Unable to upload a file.' => '無法上傳檔案。',\n\t'Maximum allowed file size is %sB.' => '允許的檔案上限大小為 %sB。',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 資料太大。減少資料或者增加 %s 的設定值。',\n\t'You can upload a big SQL file via FTP and import it from server.' => '您可以通過FTP上傳大型SQL檔並從伺服器導入。',\n\t'You are offline.' => '您離線了。',\n\n\t'Export' => '匯出',\n\t'Output' => '輸出',\n\t'open' => '打開',\n\t'save' => '儲存',\n\t'Saving' => '保存中',\n\t'Format' => '格式',\n\t'Data' => '資料',\n\n\t'Database' => '資料庫',\n\t'DB' => '資料庫',\n\t'Use' => '使用',\n\t'Select database' => '選擇資料庫',\n\t'Invalid database.' => '無效的資料庫。',\n\t'Database has been dropped.' => '資料庫已刪除。',\n\t'Databases have been dropped.' => '資料庫已刪除。',\n\t'Database has been created.' => '已建立資料庫。',\n\t'Database has been renamed.' => '已重新命名資料庫。',\n\t'Database has been altered.' => '已修改資料庫。',\n\t'Alter database' => '修改資料庫',\n\t'Create database' => '建立資料庫',\n\t'Database schema' => '資料庫結構',\n\n\t// link to current database schema layout\n\t'Permanent link' => '永久連結',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => '引擎',\n\t'Collation' => '校對',\n\t'Data Length' => '資料長度',\n\t'Index Length' => '索引長度',\n\t'Data Free' => '資料空閒',\n\t'Rows' => '行數',\n\t'%d in total' => '總共 %d 個',\n\t'Analyze' => '分析',\n\t'Optimize' => '最佳化',\n\t'Vacuum' => '整理（Vacuum）',\n\t'Check' => '檢查',\n\t'Repair' => '修復',\n\t'Truncate' => '清空',\n\t'Tables have been truncated.' => '已清空資料表。',\n\t'Move to other database' => '轉移到其它資料庫',\n\t'Move' => '轉移',\n\t'Tables have been moved.' => '已轉移資料表。',\n\t'Copy' => '複製',\n\t'Tables have been copied.' => '資料表已經複製。',\n\t'overwrite' => '覆蓋',\n\n\t'Routines' => '程序',\n\t'Routine has been called, %d row(s) affected.' => '程序已被執行，%d 行被影響。',\n\t'Call' => '呼叫',\n\t'Parameter name' => '參數名稱',\n\t'Create procedure' => '建立預存程序',\n\t'Create function' => '建立函式',\n\t'Routine has been dropped.' => '已刪除程序。',\n\t'Routine has been altered.' => '已修改子程序。',\n\t'Routine has been created.' => '已建立子程序。',\n\t'Alter function' => '修改函式',\n\t'Alter procedure' => '修改預存程序',\n\t'Return type' => '回傳類型',\n\n\t'Events' => '事件',\n\t'Event has been dropped.' => '已刪除事件。',\n\t'Event has been altered.' => '已修改事件。',\n\t'Event has been created.' => '已建立事件。',\n\t'Alter event' => '修改事件',\n\t'Create event' => '建立事件',\n\t'At given time' => '在指定時間',\n\t'Every' => '每',\n\t'Schedule' => '排程',\n\t'Start' => '開始',\n\t'End' => '結束',\n\t'On completion preserve' => '在完成後儲存',\n\n\t'Tables' => '資料表',\n\t'Tables and views' => '資料表和檢視表',\n\t'Table' => '資料表',\n\t'No tables.' => '沒有資料表。',\n\t'Alter table' => '修改資料表',\n\t'Create table' => '建立資料表',\n\t'Table has been dropped.' => '已經刪除資料表。',\n\t'Tables have been dropped.' => '已經將資料表刪除。',\n\t'Tables have been optimized.' => '已優化資料表。',\n\t'Table has been altered.' => '資料表已修改。',\n\t'Table has been created.' => '資料表已建立。',\n\t'Table name' => '資料表名稱',\n\t'Show structure' => '顯示結構',\n\t'engine' => '引擎',\n\t'collation' => '校對',\n\t'Column name' => '欄位名稱',\n\t'Type' => '類型',\n\t'Length' => '長度',\n\t'Auto Increment' => '自動遞增',\n\t'Options' => '選項',\n\t'Comment' => '註解',\n\t'Default value' => '預設值',\n\t'Default values' => '預設值',\n\t'Drop' => '刪除',\n\t'Drop %s?' => '刪除 %s?',\n\t'Are you sure?' => '你確定嗎？',\n\t'Size' => '大小',\n\t'Compute' => '計算',\n\t'Move up' => '上移',\n\t'Move down' => '下移',\n\t'Remove' => '移除',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加 %s。',\n\n\t'Partition by' => '分區類型',\n\t'Partitions' => '分區',\n\t'Partition name' => '分區名稱',\n\t'Values' => '值',\n\n\t'View' => '檢視表',\n\t'Materialized view' => '物化視圖',\n\t'View has been dropped.' => '已刪除檢視表。',\n\t'View has been altered.' => '已修改檢視表。',\n\t'View has been created.' => '已建立檢視表。',\n\t'Alter view' => '修改檢視表',\n\t'Create view' => '建立檢視表',\n\n\t'Indexes' => '索引',\n\t'Indexes have been altered.' => '已修改索引。',\n\t'Alter indexes' => '修改索引',\n\t'Add next' => '新增下一筆',\n\t'Index Type' => '索引類型',\n\t'length' => '長度',\n\n\t'Foreign keys' => '外來鍵',\n\t'Foreign key' => '外來鍵',\n\t'Foreign key has been dropped.' => '已刪除外來鍵。',\n\t'Foreign key has been altered.' => '已修改外來鍵。',\n\t'Foreign key has been created.' => '已建立外來鍵。',\n\t'Target table' => '目標資料表',\n\t'Change' => '變更',\n\t'Source' => '來源',\n\t'Target' => '目標',\n\t'Add column' => '新增欄位',\n\t'Alter' => '修改',\n\t'Add foreign key' => '新增外來鍵',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '來源列和目標列必須具有相同的資料類型，在目標列上必須有一個索引並且引用的資料必須存在。',\n\n\t'Triggers' => '觸發器',\n\t'Add trigger' => '建立觸發器',\n\t'Trigger has been dropped.' => '已刪除觸發器。',\n\t'Trigger has been altered.' => '已修改觸發器。',\n\t'Trigger has been created.' => '已建立觸發器。',\n\t'Alter trigger' => '修改觸發器',\n\t'Create trigger' => '建立觸發器',\n\t'Time' => '時間',\n\t'Event' => '事件',\n\t'Name' => '名稱',\n\n\t'select' => '選擇',\n\t'Select' => '選擇',\n\t'Select data' => '選擇資料',\n\t'Functions' => '函式',\n\t'Aggregation' => '集合',\n\t'Search' => '搜尋',\n\t'anywhere' => '任意位置',\n\t'Search data in tables' => '在資料庫搜尋',\n\t'Sort' => '排序',\n\t'descending' => '降冪 (遞減)',\n\t'Limit' => '限定',\n\t'Limit rows' => '限制行數',\n\t'Text length' => 'Text 長度',\n\t'Action' => '動作',\n\t'Full table scan' => '全資料表掃描',\n\t'Unable to select the table' => '無法選擇該資料表',\n\t'No rows.' => '沒有資料行。',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => '%d 行',\n\t'Page' => '頁',\n\t'last' => '最後一頁',\n\t'Load more data' => '載入更多資料',\n\t'Loading' => '載入中',\n\t'Whole result' => '所有結果',\n\t'%d byte(s)' => '%d byte(s)',\n\n\t'Import' => '匯入',\n\t'%d row(s) have been imported.' => '已匯入 %d 行。',\n\t'File must be in UTF-8 encoding.' => '檔必須使用UTF-8編碼。',\n\n\t// in-place editing in select\n\t'Modify' => '修改',\n\t'Ctrl+click on a value to modify it.' => '按住Ctrl並按一下某個值進行修改。',\n\t'Use edit link to modify this value.' => '使用編輯連結來修改。',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => '已新增項目 %s。',\n\t'Item has been deleted.' => '該項目已被刪除。',\n\t'Item has been updated.' => '已更新項目。',\n\t'%d item(s) have been affected.' => '%d 個項目受到影響。',\n\t'New item' => '新增項目',\n\t'original' => '原始',\n\t// label for value '' in enum data type\n\t'empty' => '空值',\n\t'edit' => '編輯',\n\t'Edit' => '編輯',\n\t'Insert' => '新增',\n\t'Save' => '儲存',\n\t'Save and continue edit' => '儲存並繼續編輯',\n\t'Save and insert next' => '儲存並新增下一筆',\n\t'Selected' => '已選中',\n\t'Clone' => '複製',\n\t'Delete' => '刪除',\n\t'You have no privileges to update this table.' => '您沒有許可權更新這個資料表。',\n\n\t// data type descriptions\n\t'Numbers' => '數字',\n\t'Date and time' => '日期時間',\n\t'Strings' => '字串',\n\t'Binary' => '二進位',\n\t'Lists' => '列表',\n\t'Network' => '網路',\n\t'Geometry' => '幾何',\n\t'Relations' => '關聯',\n\n\t'Editor' => '編輯器',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1.$3.$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy].mm.dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => '現在',\n\t'yes' => '是',\n\t'no' => '否',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => '檔案已存在。',\n\t'Please use one of the extensions %s.' => '請使用下列其中一個擴充模組 %s。',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => '修改資料表結構',\n\t'Create schema' => '建立資料表結構',\n\t'Schema has been dropped.' => '已刪除資料表結構。',\n\t'Schema has been created.' => '已建立資料表結構。',\n\t'Schema has been altered.' => '已修改資料表結構。',\n\t'Schema' => '資料表結構',\n\t'Invalid schema.' => '無效的資料表結構。',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => '序列',\n\t'Create sequence' => '建立序列',\n\t'Sequence has been dropped.' => '已刪除序列。',\n\t'Sequence has been created.' => '已建立序列。',\n\t'Sequence has been altered.' => '已修改序列。',\n\t'Alter sequence' => '修改序列',\n\n\t// PostgreSQL user types support\n\t'User types' => '使用者類型',\n\t'Create type' => '建立類型',\n\t'Type has been dropped.' => '已刪除類型。',\n\t'Type has been created.' => '已建立類型。',\n\t'Alter type' => '修改類型',\n);\n\n// run `php ../../lang.php zh-tw` to update this file\n"
  },
  {
    "path": "adminer/lang/zh.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nLang::$translations = array(\n\t// label for database system selection (MySQL, SQLite, ...)\n\t'System' => '系统',\n\t'Server' => '服务器',\n\t'Username' => '用户名',\n\t'Password' => '密码',\n\t'Permanent login' => '保持登录',\n\t'Login' => '登录',\n\t'Logout' => '登出',\n\t'Logged as: %s' => '登录用户：%s',\n\t'Logout successful.' => '成功登出。',\n\t'Thanks for using Adminer, consider <a href=\"https://www.adminer.org/en/donation/\">donating</a>.' => '感谢使用Adminer，请考虑为我们<a href=\"https://www.adminer.org/en/donation/\">捐款（英文页面）</a>。',\n\t'Invalid credentials.' => '无效凭据。',\n\t'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格，这可能是导致问题的原因。',\n\t'Adminer does not support accessing a database without a password, <a href=\"https://www.adminer.org/en/password/\"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库，<a href=\"https://www.adminer.org/en/password/\"%s>详情见这里</a>。',\n\t'Database does not support password.' => '数据库不支持密码。',\n\t'Too many unsuccessful logins, try again in %d minute(s).' => '登录失败次数过多，请 %d 分钟后重试。',\n\t'Master password expired. <a href=\"https://www.adminer.org/en/extension/\"%s>Implement</a> %s method to make it permanent.' => '主密码已过期。<a href=\"https://www.adminer.org/en/extension/\"%s>请扩展</a> %s 方法让它永久化。',\n\t'Language' => '语言',\n\t'Invalid CSRF token. Send the form again.' => '无效 CSRF 令牌。请重新发送表单。',\n\t'If you did not send this request from Adminer then close this page.' => '如果您并没有从Adminer发送请求，请关闭此页面。',\n\t'No extension' => '没有扩展',\n\t'None of the supported PHP extensions (%s) are available.' => '没有支持的 PHP 扩展可用（%s）。',\n\t'Connecting to privileged ports is not allowed.' => '不允许连接到特权端口。',\n\t'Disable %s or enable %s or %s extensions.' => '禁用 %s 或启用 %s 或 %s 扩展。',\n\t'Session support must be enabled.' => '必须启用会话支持。',\n\t'Session expired, please login again.' => '会话已过期，请重新登录。',\n\t'The action will be performed after successful login with the same credentials.' => '此操作将在成功使用相同的凭据登录后执行。',\n\t'%s version: %s through PHP extension %s' => '%s 版本：%s， 使用PHP扩展 %s',\n\t'Refresh' => '刷新',\n\n\t// text direction - 'ltr' or 'rtl'\n\t'ltr' => 'ltr',\n\n\t'Privileges' => '权限',\n\t'Create user' => '创建用户',\n\t'User has been dropped.' => '已删除用户。',\n\t'User has been altered.' => '已修改用户。',\n\t'User has been created.' => '已创建用户。',\n\t'Hashed' => 'Hashed',\n\t'Column' => '列',\n\t'Routine' => '子程序',\n\t'Grant' => '授权',\n\t'Revoke' => '废除',\n\n\t'Process list' => '进程列表',\n\t'%d process(es) have been killed.' => '%d 个进程被终止。',\n\t'Kill' => '终止',\n\n\t'Variables' => '变量',\n\t'Status' => '状态',\n\n\t'SQL command' => 'SQL命令',\n\t'%d query(s) executed OK.' => '%d 条查询已成功执行。',\n\t'Query executed OK, %d row(s) affected.' => '查询执行完毕，%d 行受影响。',\n\t'No commands to execute.' => '没有命令被执行。',\n\t'Error in query' => '查询出错',\n\t'Unknown error.' => '未知错误。',\n\t'Warnings' => '警告',\n\t'ATTACH queries are not supported.' => '不支持ATTACH查询。',\n\t'Execute' => '执行',\n\t'Stop on error' => '出错时停止',\n\t'Show only errors' => '仅显示错误',\n\t// sprintf() format for time of the command\n\t'%.3f s' => '%.3f 秒',\n\t'History' => '历史',\n\t'Clear' => '清除',\n\t'Edit all' => '编辑全部',\n\n\t'File upload' => '文件上传',\n\t'From server' => '来自服务器',\n\t'Webserver file %s' => 'Web服务器文件 %s',\n\t'Run file' => '运行文件',\n\t'File does not exist.' => '文件不存在。',\n\t'File uploads are disabled.' => '文件上传被禁用。',\n\t'Unable to upload a file.' => '不能上传文件。',\n\t'Maximum allowed file size is %sB.' => '最多允许的文件大小为 %sB。',\n\t'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 数据太大。请减少数据或者增加 %s 配置命令。',\n\t'You can upload a big SQL file via FTP and import it from server.' => '您可以通过FTP上传大型SQL文件并从服务器导入。',\n\t'You are offline.' => '您离线了。',\n\n\t'Export' => '导出',\n\t'Output' => '输出',\n\t'open' => '打开',\n\t'save' => '保存',\n\t'Saving' => '保存中',\n\t'Format' => '格式',\n\t'Data' => '数据',\n\n\t'Database' => '数据库',\n\t'DB' => '数据库',\n\t'Use' => '使用',\n\t'Select database' => '选择数据库',\n\t'Invalid database.' => '无效数据库。',\n\t'Database has been dropped.' => '已删除数据库。',\n\t'Databases have been dropped.' => '已删除数据库。',\n\t'Database has been created.' => '已创建数据库。',\n\t'Database has been renamed.' => '已重命名数据库。',\n\t'Database has been altered.' => '已修改数据库。',\n\t'Alter database' => '修改数据库',\n\t'Create database' => '创建数据库',\n\t'Database schema' => '数据库概要',\n\n\t// link to current database schema layout\n\t'Permanent link' => '固定链接',\n\n\t// thousands separator - must contain single byte\n\t',' => ',',\n\t'0123456789' => '0123456789',\n\t'Engine' => '引擎',\n\t'Collation' => '校对',\n\t'Data Length' => '数据长度',\n\t'Index Length' => '索引长度',\n\t'Data Free' => '数据空闲',\n\t'Rows' => '行数',\n\t'%d in total' => '共计 %d',\n\t'Analyze' => '分析',\n\t'Optimize' => '优化',\n\t'Vacuum' => '整理（Vacuum）',\n\t'Check' => '检查',\n\t'Repair' => '修复',\n\t'Truncate' => '清空',\n\t'Tables have been truncated.' => '已清空表。',\n\t'Move to other database' => '转移到其它数据库',\n\t'Move' => '转移',\n\t'Tables have been moved.' => '已转移表。',\n\t'Copy' => '复制',\n\t'Tables have been copied.' => '已复制表。',\n\t'overwrite' => '覆盖',\n\n\t'Routines' => '子程序',\n\t'Routine has been called, %d row(s) affected.' => '子程序被调用，%d 行被影响。',\n\t'Call' => '调用',\n\t'Parameter name' => '参数名',\n\t'Create procedure' => '创建过程',\n\t'Create function' => '创建函数',\n\t'Routine has been dropped.' => '已删除子程序。',\n\t'Routine has been altered.' => '已修改子程序。',\n\t'Routine has been created.' => '已创建子程序。',\n\t'Alter function' => '修改函数',\n\t'Alter procedure' => '修改过程',\n\t'Return type' => '返回类型',\n\n\t'Events' => '事件',\n\t'Event has been dropped.' => '已删除事件。',\n\t'Event has been altered.' => '已修改事件。',\n\t'Event has been created.' => '已创建事件。',\n\t'Alter event' => '修改事件',\n\t'Create event' => '创建事件',\n\t'At given time' => '在指定时间',\n\t'Every' => '每',\n\t'Schedule' => '调度',\n\t'Start' => '开始',\n\t'End' => '结束',\n\t'On completion preserve' => '完成后仍保留',\n\n\t'Tables' => '表',\n\t'Tables and views' => '表和视图',\n\t'Table' => '表',\n\t'No tables.' => '没有表。',\n\t'Alter table' => '修改表',\n\t'Create table' => '创建表',\n\t'Table has been dropped.' => '已删除表。',\n\t'Tables have been dropped.' => '已删除表。',\n\t'Tables have been optimized.' => '已优化表。',\n\t'Table has been altered.' => '已修改表。',\n\t'Table has been created.' => '已创建表。',\n\t'Table name' => '表名',\n\t'Show structure' => '显示结构',\n\t'engine' => '引擎',\n\t'collation' => '校对',\n\t'Column name' => '字段名',\n\t'Type' => '类型',\n\t'Length' => '长度',\n\t'Auto Increment' => '自动增量',\n\t'Options' => '选项',\n\t'Comment' => '注释',\n\t'Default value' => '默认值',\n\t'Default values' => '默认值',\n\t'Drop' => '删除',\n\t'Drop %s?' => '删除 %s?',\n\t'Are you sure?' => '您确定吗？',\n\t'Size' => '大小',\n\t'Compute' => '计算',\n\t'Move up' => '上移',\n\t'Move down' => '下移',\n\t'Remove' => '移除',\n\t'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',\n\n\t'Partition by' => '分区类型',\n\t'Partitions' => '分区',\n\t'Partition name' => '分区名',\n\t'Values' => '值',\n\n\t'View' => '视图',\n\t'Materialized view' => '物化视图',\n\t'View has been dropped.' => '已删除视图。',\n\t'View has been altered.' => '已修改视图。',\n\t'View has been created.' => '已创建视图。',\n\t'Alter view' => '修改视图',\n\t'Create view' => '创建视图',\n\n\t'Indexes' => '索引',\n\t'Indexes have been altered.' => '已修改索引。',\n\t'Alter indexes' => '修改索引',\n\t'Add next' => '下一行插入',\n\t'Index Type' => '索引类型',\n\n\t'Foreign keys' => '外键',\n\t'Foreign key' => '外键',\n\t'Foreign key has been dropped.' => '已删除外键。',\n\t'Foreign key has been altered.' => '已修改外键。',\n\t'Foreign key has been created.' => '已创建外键。',\n\t'Target table' => '目标表',\n\t'Change' => '修改',\n\t'Source' => '源',\n\t'Target' => '目标',\n\t'Add column' => '增加列',\n\t'Alter' => '修改',\n\t'Add foreign key' => '添加外键',\n\t'ON DELETE' => 'ON DELETE',\n\t'ON UPDATE' => 'ON UPDATE',\n\t'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目标列必须具有相同的数据类型，在目标列上必须有一个索引并且引用的数据必须存在。',\n\n\t'Triggers' => '触发器',\n\t'Add trigger' => '创建触发器',\n\t'Trigger has been dropped.' => '已删除触发器。',\n\t'Trigger has been altered.' => '已修改触发器。',\n\t'Trigger has been created.' => '已创建触发器。',\n\t'Alter trigger' => '修改触发器',\n\t'Create trigger' => '创建触发器',\n\t'Time' => '时间',\n\t'Event' => '事件',\n\t'Name' => '名称',\n\n\t'select' => '选择',\n\t'Select' => '选择',\n\t'Select data' => '选择数据',\n\t'Functions' => '函数',\n\t'Aggregation' => '集合',\n\t'Search' => '搜索',\n\t'anywhere' => '任意位置',\n\t'Search data in tables' => '在表中搜索数据',\n\t'Sort' => '排序',\n\t'descending' => '降序',\n\t'Limit' => '范围',\n\t'Limit rows' => '限制行数',\n\t'Text length' => '文本显示限制',\n\t'Action' => '动作',\n\t'Full table scan' => '全表扫描',\n\t'Unable to select the table' => '不能选择该表',\n\t'No rows.' => '无数据。',\n\t'%d / ' => '%d / ',\n\t'%d row(s)' => '%d 行',\n\t'Page' => '页面',\n\t'last' => '最后',\n\t'Load more data' => '加载更多数据',\n\t'Loading' => '加载中',\n\t'Whole result' => '所有结果',\n\t'%d byte(s)' => '%d 字节',\n\n\t'Import' => '导入',\n\t'%d row(s) have been imported.' => '%d 行已导入。',\n\t'File must be in UTF-8 encoding.' => '文件必须使用UTF-8编码。',\n\n\t// in-place editing in select\n\t'Modify' => '修改',\n\t'Ctrl+click on a value to modify it.' => '按住Ctrl并单击某个值进行修改。',\n\t'Use edit link to modify this value.' => '使用编辑链接修改该值。',\n\n\t// %s can contain auto-increment value\n\t'Item%s has been inserted.' => '已插入项目%s。',\n\t'Item has been deleted.' => '已删除项目。',\n\t'Item has been updated.' => '已更新项目。',\n\t'%d item(s) have been affected.' => '%d 个项目受到影响。',\n\t'New item' => '新建数据',\n\t'original' => '原始',\n\t// label for value '' in enum data type\n\t'empty' => '空',\n\t'edit' => '编辑',\n\t'Edit' => '编辑',\n\t'Insert' => '插入',\n\t'Save' => '保存',\n\t'Save and continue edit' => '保存并继续编辑',\n\t'Save and insert next' => '保存并插入下一个',\n\t'Selected' => '已选中',\n\t'Clone' => '复制',\n\t'Delete' => '删除',\n\t'You have no privileges to update this table.' => '您没有权限更新这个表。',\n\n\t// data type descriptions\n\t'Numbers' => '数字',\n\t'Date and time' => '日期时间',\n\t'Strings' => '字符串',\n\t'Binary' => '二进制',\n\t'Lists' => '列表',\n\t'Network' => '网络',\n\t'Geometry' => '几何图形',\n\t'Relations' => '关联信息',\n\n\t'Editor' => '编辑器',\n\t// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d\n\t'$1-$3-$5' => '$1.$3.$5',\n\t// hint for date format - use language equivalents for day, month and year shortcuts\n\t'[yyyy]-mm-dd' => '[yyyy].mm.dd',\n\t// hint for time format - use language equivalents for hour, minute and second shortcuts\n\t'HH:MM:SS' => 'HH:MM:SS',\n\t'now' => '现在',\n\t'yes' => '是',\n\t'no' => '否',\n\n\t// general SQLite error in create, drop or rename database\n\t'File exists.' => '文件已存在。',\n\t'Please use one of the extensions %s.' => '请使用其中一个扩展：%s。',\n\n\t// PostgreSQL and MS SQL schema support\n\t'Alter schema' => '修改模式',\n\t'Create schema' => '创建模式',\n\t'Schema has been dropped.' => '已删除模式。',\n\t'Schema has been created.' => '已创建模式。',\n\t'Schema has been altered.' => '已修改模式。',\n\t'Schema' => '模式',\n\t'Invalid schema.' => '非法模式。',\n\n\t// PostgreSQL sequences support\n\t'Sequences' => '序列',\n\t'Create sequence' => '创建序列',\n\t'Sequence has been dropped.' => '已删除序列。',\n\t'Sequence has been created.' => '已创建序列。',\n\t'Sequence has been altered.' => '已修改序列。',\n\t'Alter sequence' => '修改序列',\n\n\t// PostgreSQL user types support\n\t'User types' => '用户类型',\n\t'Create type' => '创建类型',\n\t'Type has been dropped.' => '已删除类型。',\n\t'Type has been created.' => '已创建类型。',\n\t'Alter type' => '修改类型',\n);\n\n// run `php ../../lang.php zh` to update this file\n"
  },
  {
    "path": "adminer/privileges.inc.php",
    "content": "<?php\nnamespace Adminer;\n\npage_header(lang('Privileges'));\n\necho '<p class=\"links\"><a href=\"' . h(ME) . 'user=\">' . lang('Create user') . \"</a>\";\n\n$result = connection()->query(\"SELECT User, Host FROM mysql.\" . (DB == \"\" ? \"user\" : \"db WHERE \" . q(DB) . \" LIKE Db\") . \" ORDER BY Host, User\");\n$grant = $result;\nif (!$result) {\n\t// list logged user, information_schema.USER_PRIVILEGES lists just the current user too\n\t$result = connection()->query(\"SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host\");\n}\n\necho \"<form action=''><p>\\n\";\nhidden_fields_get();\necho input_hidden(\"db\", DB);\necho ($grant ? \"\" : input_hidden(\"grant\"));\necho \"<table class='odds'>\\n\";\necho \"<thead><tr><th>\" . lang('Username') . \"<th>\" . lang('Server') . \"<th></thead>\\n\";\n\nwhile ($row = $result->fetch_assoc()) {\n\techo '<tr><td>' . h($row[\"User\"]) . \"<td>\" . h($row[\"Host\"]) . '<td><a href=\"' . h(ME . 'user=' . urlencode($row[\"User\"]) . '&host=' . urlencode($row[\"Host\"])) . '\">' . lang('Edit') . \"</a>\\n\";\n}\n\nif (!$grant || DB != \"\") {\n\techo \"<tr><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value='\" . lang('Edit') . \"'>\\n\";\n}\n\necho \"</table>\\n\";\necho \"</form>\\n\";\n"
  },
  {
    "path": "adminer/procedure.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$PROCEDURE = ($_GET[\"name\"] ?: $_GET[\"procedure\"]);\n$routine = (isset($_GET[\"function\"]) ? \"FUNCTION\" : \"PROCEDURE\");\n$row = $_POST;\n$row[\"fields\"] = (array) $row[\"fields\"];\n\nif ($_POST && !process_fields($row[\"fields\"]) && !$error) {\n\t$orig = routine($_GET[\"procedure\"], $routine);\n\t$temp_name = \"$row[name]_adminer_\" . uniqid();\n\tforeach ($row[\"fields\"] as $key => $field) {\n\t\tif ($field[\"field\"] == \"\") {\n\t\t\tunset($row[\"fields\"][$key]);\n\t\t}\n\t}\n\tdrop_create(\n\t\t\"DROP $routine \" . routine_id($PROCEDURE, $orig),\n\t\tcreate_routine($routine, $row),\n\t\t\"DROP $routine \" . routine_id($row[\"name\"], $row),\n\t\tcreate_routine($routine, array(\"name\" => $temp_name) + $row),\n\t\t\"DROP $routine \" . routine_id($temp_name, $row),\n\t\tsubstr(ME, 0, -1),\n\t\tlang('Routine has been dropped.'),\n\t\tlang('Routine has been altered.'),\n\t\tlang('Routine has been created.'),\n\t\t$PROCEDURE,\n\t\t$row[\"name\"]\n\t);\n}\n\npage_header(($PROCEDURE != \"\" ? (isset($_GET[\"function\"]) ? lang('Alter function') : lang('Alter procedure')) . \": \" . h($PROCEDURE) : (isset($_GET[\"function\"]) ? lang('Create function') : lang('Create procedure'))), $error);\n\nif (!$_POST) {\n\tif ($PROCEDURE == \"\") {\n\t\t$row[\"language\"] = \"sql\";\n\t} else {\n\t\t$row = routine($_GET[\"procedure\"], $routine);\n\t\t$row[\"name\"] = $PROCEDURE;\n\t}\n}\n\n$collations = get_vals(\"SHOW CHARACTER SET\");\nsort($collations);\n$routine_languages = routine_languages();\necho ($collations ? \"<datalist id='collations'>\" . optionlist($collations) . \"</datalist>\" : \"\");\n?>\n\n<form action=\"\" method=\"post\" id=\"form\">\n<p><?php echo lang('Name'); ?>: <input name=\"name\" value=\"<?php echo h($row[\"name\"]); ?>\" data-maxlength=\"64\" autocapitalize=\"off\">\n<?php echo ($routine_languages ? \"<label>\" . lang('Language') . \": \" . html_select(\"language\", $routine_languages, $row[\"language\"]) . \"</label>\\n\" : \"\"); ?>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<div class=\"scrollable\">\n<table class=\"nowrap\">\n<?php\nedit_fields($row[\"fields\"], $collations, $routine);\nif (isset($_GET[\"function\"])) {\n\techo \"<tr><td>\" . lang('Return type');\n\tedit_type(\"returns\", (array) $row[\"returns\"], $collations, array(), (JUSH == \"pgsql\" ? array(\"void\", \"trigger\") : array()));\n}\n?>\n</table>\n<?php echo script(\"editFields();\"); ?>\n</div>\n<p><?php textarea(\"definition\", $row[\"definition\"], 20); ?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php if ($PROCEDURE != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $PROCEDURE)); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/processlist.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nif (support(\"kill\")) {\n\tif ($_POST && !$error) {\n\t\t$killed = 0;\n\t\tforeach ((array) $_POST[\"kill\"] as $val) {\n\t\t\tif (adminer()->killProcess($val)) {\n\t\t\t\t$killed++;\n\t\t\t}\n\t\t}\n\t\tqueries_redirect(ME . \"processlist=\", lang('%d process(es) have been killed.', $killed), $killed || !$_POST[\"kill\"]);\n\t}\n}\n\npage_header(lang('Process list'), $error);\n?>\n\n<form action=\"\" method=\"post\">\n<div class=\"scrollable\">\n<table class=\"nowrap checkable odds\">\n<?php\necho script(\"mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});\");\n// HTML valid because there is always at least one process\n$i = -1;\nforeach (adminer()->processList() as $i => $row) {\n\tif (!$i) {\n\t\techo \"<thead><tr lang='en'>\" . (support(\"kill\") ? \"<th>\" : \"\");\n\t\tforeach ($row as $key => $val) {\n\t\t\techo \"<th>$key\" . doc_link(array(\n\t\t\t\t'sql' => \"show-processlist.html#processlist_\" . strtolower($key),\n\t\t\t\t'pgsql' => \"monitoring-stats.html#PG-STAT-ACTIVITY-VIEW\",\n\t\t\t\t'oracle' => \"REFRN30223\",\n\t\t\t));\n\t\t}\n\t\techo \"</thead>\\n\";\n\t}\n\techo \"<tr>\" . (support(\"kill\") ? \"<td>\" . checkbox(\"kill[]\", $row[JUSH == \"sql\" ? \"Id\" : \"pid\"], 0) : \"\");\n\tforeach ($row as $key => $val) {\n\t\techo \"<td>\" . (\n\t\t\t(JUSH == \"sql\" && $key == \"Info\" && preg_match(\"~Query|Killed~\", $row[\"Command\"]) && $val != \"\") ||\n\t\t\t(JUSH == \"pgsql\" && $key == \"current_query\" && $val != \"<IDLE>\") ||\n\t\t\t(JUSH == \"oracle\" && $key == \"sql_text\" && $val != \"\")\n\t\t\t? \"<code class='jush-\" . JUSH . \"'>\" . shorten_utf8($val, 100, \"</code>\") . ' <a href=\"' . h(ME . ($row[\"db\"] != \"\" ? \"db=\" . urlencode($row[\"db\"]) . \"&\" : \"\") . \"sql=\" . urlencode($val)) . '\">' . lang('Clone') . '</a>'\n\t\t\t: h($val)\n\t\t);\n\t}\n\techo \"\\n\";\n}\n?>\n</table>\n</div>\n<p>\n<?php\nif (support(\"kill\")) {\n\techo ($i + 1) . \"/\" . lang('%d in total', max_connections());\n\techo \"<p><input type='submit' value='\" . lang('Kill') . \"'>\\n\";\n}\necho input_token();\n?>\n</form>\n<?php echo script(\"tableCheck();\"); ?>\n"
  },
  {
    "path": "adminer/schema.inc.php",
    "content": "<?php\nnamespace Adminer;\n\npage_header(lang('Database schema'), \"\", array(), h(DB . ($_GET[\"ns\"] ? \".$_GET[ns]\" : \"\")));\n\n/** @var array{float, float}[] */\n$table_pos = array();\n$table_pos_js = array();\n$SCHEMA = ($_GET[\"schema\"] ?: $_COOKIE[\"adminer_schema-\" . str_replace(\".\", \"_\", DB)]); // $_COOKIE[\"adminer_schema\"] was used before 3.2.0 //! ':' in table name\npreg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', $SCHEMA, $matches, PREG_SET_ORDER);\nforeach ($matches as $i => $match) {\n\t$table_pos[$match[1]] = array($match[2], $match[3]);\n\t$table_pos_js[] = \"\\n\\t'\" . js_escape($match[1]) . \"': [ $match[2], $match[3] ]\";\n}\n\n$top = 0;\n$base_left = -1;\n/** @var array{fields:Field[], pos:array{float, float}, references:string[][][]}[] */\n$schema = array(); // table => array(\"fields\" => array(name => field), \"pos\" => array(top, left), \"references\" => array(table => array(left => array(source, target))))\n$referenced = array(); // target_table => array(table => array(left => target_column))\n/** @var array<numeric-string, bool> */\n$lefts = array();\n$all_fields = driver()->allFields();\nforeach (table_status('', true) as $table => $table_status) {\n\tif (is_view($table_status)) {\n\t\tcontinue;\n\t}\n\t$pos = 0;\n\t$schema[$table][\"fields\"] = array();\n\tforeach ($all_fields[$table] as $field) {\n\t\t$pos += 1.25;\n\t\t$field[\"pos\"] = $pos;\n\t\t$schema[$table][\"fields\"][$field[\"field\"]] = $field;\n\t}\n\t$schema[$table][\"pos\"] = ($table_pos[$table] ?: array($top, 0));\n\tforeach (adminer()->foreignKeys($table) as $val) {\n\t\tif (!$val[\"db\"]) {\n\t\t\t$left = $base_left;\n\t\t\tif (idx($table_pos[$table], 1) || idx($table_pos[$val[\"table\"]], 1)) {\n\t\t\t\t$left = min(idx($table_pos[$table], 1, 0), idx($table_pos[$val[\"table\"]], 1, 0)) - 1;\n\t\t\t} else {\n\t\t\t\t$base_left -= .1;\n\t\t\t}\n\t\t\twhile ($lefts[(string) $left]) {\n\t\t\t\t// find free $left\n\t\t\t\t$left -= .0001;\n\t\t\t}\n\t\t\t$schema[$table][\"references\"][$val[\"table\"]][(string) $left] = array($val[\"source\"], $val[\"target\"]);\n\t\t\t$referenced[$val[\"table\"]][$table][(string) $left] = $val[\"target\"];\n\t\t\t$lefts[(string) $left] = true;\n\t\t}\n\t}\n\t$top = max($top, $schema[$table][\"pos\"][0] + 2.5 + $pos);\n}\n\n?>\n<div id=\"schema\" style=\"height: <?php echo $top; ?>em;\">\n<script<?php echo nonce(); ?>>\nqs('#schema').onselectstart = () => false;\nconst tablePos = {<?php echo implode(\",\", $table_pos_js) . \"\\n\"; ?>};\nconst em = qs('#schema').offsetHeight / <?php echo $top; ?>;\ndocument.onmousemove = schemaMousemove;\ndocument.onmouseup = partialArg(schemaMouseup, '<?php echo js_escape(DB); ?>');\n</script>\n<?php\nforeach ($schema as $name => $table) {\n\techo \"<div class='table' style='top: \" . $table[\"pos\"][0] . \"em; left: \" . $table[\"pos\"][1] . \"em;'>\";\n\techo '<a href=\"' . h(ME) . 'table=' . urlencode($name) . '\"><b>' . h($name) . \"</b></a>\";\n\techo script(\"qsl('div').onmousedown = schemaMousedown;\");\n\n\tforeach ($table[\"fields\"] as $field) {\n\t\t$val = '<span' . type_class($field[\"type\"]) . ' title=\"' . h($field[\"type\"] . ($field[\"length\"] ? \"($field[length])\" : \"\") . ($field[\"null\"] ? \" NULL\" : '')) . '\">' . h($field[\"field\"]) . '</span>';\n\t\techo \"<br>\" . ($field[\"primary\"] ? \"<i>$val</i>\" : $val);\n\t}\n\n\tforeach ((array) $table[\"references\"] as $target_name => $refs) {\n\t\tforeach ($refs as $left => $ref) {\n\t\t\t$left1 = $left - idx($table_pos[$name], 1);\n\t\t\t$i = 0;\n\t\t\tforeach ($ref[0] as $source) {\n\t\t\t\techo \"\\n<div class='references' title='\" . h($target_name) . \"' id='refs$left-\" . ($i++) . \"' style='left: $left1\" . \"em; top: \" . $table[\"fields\"][$source][\"pos\"] . \"em; padding-top: .5em;'>\"\n\t\t\t\t\t. \"<div style='border-top: 1px solid gray; width: \" . (-$left1) . \"em;'></div></div>\"\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t}\n\n\tforeach ((array) $referenced[$name] as $target_name => $refs) {\n\t\tforeach ($refs as $left => $columns) {\n\t\t\t$left1 = $left - idx($table_pos[$name], 1);\n\t\t\t$i = 0;\n\t\t\tforeach ($columns as $target) {\n\t\t\t\techo \"\\n<div class='references arrow' title='\" . h($target_name) . \"' id='refd$left-\" . ($i++) . \"' style='left: $left1\" . \"em; top: \" . $table[\"fields\"][$target][\"pos\"] . \"em;'>\"\n\t\t\t\t\t. \"<div style='height: .5em; border-bottom: 1px solid gray; width: \" . (-$left1) . \"em;'></div>\"\n\t\t\t\t\t. \"</div>\"\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t}\n\n\techo \"\\n</div>\\n\";\n}\n\nforeach ($schema as $name => $table) {\n\tforeach ((array) $table[\"references\"] as $target_name => $refs) {\n\t\tif ($schema[$target_name]) { // otherwise table in another schema\n\t\t\tforeach ($refs as $left => $ref) {\n\t\t\t\t$min_pos = $top;\n\t\t\t\t$max_pos = -10;\n\t\t\t\tforeach ($ref[0] as $key => $source) {\n\t\t\t\t\t$pos1 = $table[\"pos\"][0] + $table[\"fields\"][$source][\"pos\"];\n\t\t\t\t\t$pos2 = $schema[$target_name][\"pos\"][0] + $schema[$target_name][\"fields\"][$ref[1][$key]][\"pos\"];\n\t\t\t\t\t$min_pos = min($min_pos, $pos1, $pos2);\n\t\t\t\t\t$max_pos = max($max_pos, $pos1, $pos2);\n\t\t\t\t}\n\t\t\t\techo \"<div class='references' id='refl$left' style='left: $left\" . \"em; top: $min_pos\" . \"em; padding: .5em 0;'><div style='border-right: 1px solid gray; margin-top: 1px; height: \" . ($max_pos - $min_pos) . \"em;'></div></div>\\n\";\n\t\t\t}\n\t\t}\n\t}\n}\n?>\n</div>\n<p class=\"links\"><a href=\"<?php echo h(ME . \"schema=\" . urlencode($SCHEMA)); ?>\" id=\"schema-link\"><?php echo lang('Permanent link'); ?></a>\n"
  },
  {
    "path": "adminer/scheme.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$row = $_POST;\n\nif ($_POST && !$error) {\n\t$link = preg_replace('~ns=[^&]*&~', '', ME) . \"ns=\";\n\tif ($_POST[\"drop\"]) {\n\t\tquery_redirect(\"DROP SCHEMA \" . idf_escape($_GET[\"ns\"]), $link, lang('Schema has been dropped.'));\n\t} else {\n\t\t$name = trim($row[\"name\"]);\n\t\t$link .= urlencode($name);\n\t\tif ($_GET[\"ns\"] == \"\") {\n\t\t\tquery_redirect(\"CREATE SCHEMA \" . idf_escape($name), $link, lang('Schema has been created.'));\n\t\t} elseif ($_GET[\"ns\"] != $name) {\n\t\t\tquery_redirect(\"ALTER SCHEMA \" . idf_escape($_GET[\"ns\"]) . \" RENAME TO \" . idf_escape($name), $link, lang('Schema has been altered.')); //! sp_rename in MS SQL\n\t\t} else {\n\t\t\tredirect($link);\n\t\t}\n\t}\n}\n\npage_header($_GET[\"ns\"] != \"\" ? lang('Alter schema') : lang('Create schema'), $error);\n\nif (!$row) {\n\t$row[\"name\"] = $_GET[\"ns\"];\n}\n?>\n\n<form action=\"\" method=\"post\">\n<p><input name=\"name\" autofocus value=\"<?php echo h($row[\"name\"]); ?>\" autocapitalize=\"off\">\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php\nif ($_GET[\"ns\"] != \"\") {\n\techo \"<input type='submit' name='drop' value='\" . lang('Drop') . \"'>\" . confirm(lang('Drop %s?', $_GET[\"ns\"])) . \"\\n\";\n}\necho input_token();\n?>\n</form>\n"
  },
  {
    "path": "adminer/script.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nheader(\"Content-Type: text/javascript; charset=utf-8\");\n\nif ($_GET[\"script\"] == \"db\") {\n\t$sums = array(\"Data_length\" => 0, \"Index_length\" => 0, \"Data_free\" => 0);\n\tforeach (table_status() as $name => $table_status) {\n\t\tjson_row(\"Comment-$name\", h($table_status[\"Comment\"]));\n\t\tif (!is_view($table_status) || preg_match('~materialized~i', $table_status[\"Engine\"])) {\n\t\t\tforeach (array(\"Engine\", \"Collation\") as $key) {\n\t\t\t\tjson_row(\"$key-$name\", h($table_status[$key]));\n\t\t\t}\n\t\t\tforeach ($sums + array(\"Auto_increment\" => 0, \"Rows\" => 0) as $key => $val) {\n\t\t\t\tif ($table_status[$key] != \"\") {\n\t\t\t\t\t$val = format_number($table_status[$key]);\n\t\t\t\t\tif ($val >= 0) {\n\t\t\t\t\t\tjson_row(\"$key-$name\", ($key == \"Rows\" && $val && $table_status[\"Engine\"] == (JUSH == \"pgsql\" ? \"table\" : \"InnoDB\")\n\t\t\t\t\t\t\t? \"~ $val\"\n\t\t\t\t\t\t\t: $val\n\t\t\t\t\t\t));\n\t\t\t\t\t}\n\t\t\t\t\tif (isset($sums[$key])) {\n\t\t\t\t\t\t// ignore innodb_file_per_table because it is not active for tables created before it was enabled\n\t\t\t\t\t\t$sums[$key] += ($table_status[\"Engine\"] != \"InnoDB\" || $key != \"Data_free\" ? $table_status[$key] : 0);\n\t\t\t\t\t}\n\t\t\t\t} elseif (array_key_exists($key, $table_status)) {\n\t\t\t\t\tjson_row(\"$key-$name\", \"?\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tforeach ($sums as $key => $val) {\n\t\tjson_row(\"sum-$key\", format_number($val));\n\t}\n\tjson_row(\"\");\n\n} elseif ($_GET[\"script\"] == \"kill\") {\n\tconnection()->query(\"KILL \" . number($_POST[\"kill\"]));\n\n} else { // connect\n\tforeach (count_tables(adminer()->databases()) as $db => $val) {\n\t\tjson_row(\"tables-$db\", $val);\n\t\tjson_row(\"size-$db\", db_size($db));\n\t}\n\tjson_row(\"\");\n}\n\nexit; // don't print footer\n"
  },
  {
    "path": "adminer/select.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"select\"];\n$table_status = table_status1($TABLE);\n$indexes = indexes($TABLE);\n$fields = fields($TABLE);\n$foreign_keys = column_foreign_keys($TABLE);\n$oid = $table_status[\"Oid\"];\n$adminer_import = get_settings(\"adminer_import\");\n\n$rights = array(); // privilege => 0\n$columns = array(); // selectable columns\n$search_columns = array(); // searchable columns\n$order_columns = array(); // searchable columns\n$text_length = \"\";\nforeach ($fields as $key => $field) {\n\t$name = adminer()->fieldName($field);\n\t$name_plain = html_entity_decode(strip_tags($name), ENT_QUOTES);\n\tif (isset($field[\"privileges\"][\"select\"]) && $name != \"\") {\n\t\t$columns[$key] = $name_plain;\n\t\tif (is_shortable($field)) {\n\t\t\t$text_length = adminer()->selectLengthProcess();\n\t\t}\n\t}\n\tif (isset($field[\"privileges\"][\"where\"]) && $name != \"\") {\n\t\t$search_columns[$key] = $name_plain;\n\t}\n\tif (isset($field[\"privileges\"][\"order\"]) && $name != \"\") {\n\t\t$order_columns[$key] = $name_plain;\n\t}\n\t$rights += $field[\"privileges\"];\n}\n\nlist($select, $group) = adminer()->selectColumnsProcess($columns, $indexes);\n$select = array_unique($select);\n$group = array_unique($group);\n$is_group = count($group) < count($select);\n$where = adminer()->selectSearchProcess($fields, $indexes);\n$order = adminer()->selectOrderProcess($fields, $indexes);\n$limit = adminer()->selectLimitProcess();\n\nif ($_GET[\"val\"] && is_ajax()) {\n\theader(\"Content-Type: text/plain; charset=utf-8\");\n\tforeach ($_GET[\"val\"] as $unique_idf => $row) {\n\t\t$as = convert_field($fields[key($row)]);\n\t\t$select = array($as ?: idf_escape(key($row)));\n\t\t$where[] = where_check($unique_idf, $fields);\n\t\t$return = driver()->select($TABLE, $select, $where, $select);\n\t\tif ($return) {\n\t\t\techo first($return->fetch_row());\n\t\t}\n\t}\n\texit;\n}\n\n$primary = $unselected = array();\nforeach ($indexes as $index) {\n\tif ($index[\"type\"] == \"PRIMARY\") {\n\t\t$primary = array_flip($index[\"columns\"]);\n\t\t$unselected = ($select ? $primary : array());\n\t\tforeach ($unselected as $key => $val) {\n\t\t\tif (in_array(idf_escape($key), $select)) {\n\t\t\t\tunset($unselected[$key]);\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n}\nif ($oid && !$primary) {\n\t$primary = $unselected = array($oid => 0);\n\t$indexes[] = array(\"type\" => \"PRIMARY\", \"columns\" => array($oid));\n}\n\nif ($_POST && !$error) {\n\t$where_check = $where;\n\tif (!$_POST[\"all\"] && is_array($_POST[\"check\"])) {\n\t\t$checks = array();\n\t\tforeach ($_POST[\"check\"] as $check) {\n\t\t\t$checks[] = where_check($check, $fields);\n\t\t}\n\t\t$where_check[] = \"((\" . implode(\") OR (\", $checks) . \"))\";\n\t}\n\t$where_check = ($where_check ? \"\\nWHERE \" . implode(\" AND \", $where_check) : \"\");\n\tif ($_POST[\"export\"]) {\n\t\tsave_settings(array(\"output\" => $_POST[\"output\"], \"format\" => $_POST[\"format\"]), \"adminer_import\");\n\t\tdump_headers($TABLE);\n\t\tadminer()->dumpTable($TABLE, \"\");\n\t\t$from = ($select ? implode(\", \", $select) : \"*\")\n\t\t\t. convert_fields($columns, $fields, $select)\n\t\t\t. \"\\nFROM \" . table($TABLE);\n\t\t$group_by = ($group && $is_group ? \"\\nGROUP BY \" . implode(\", \", $group) : \"\") . ($order ? \"\\nORDER BY \" . implode(\", \", $order) : \"\");\n\t\t$query = \"SELECT $from$where_check$group_by\";\n\t\tif (is_array($_POST[\"check\"]) && !$primary) {\n\t\t\t$union = array();\n\t\t\tforeach ($_POST[\"check\"] as $val) {\n\t\t\t\t// where is not unique so OR can't be used\n\t\t\t\t$union[] = \"(SELECT\" . limit($from, \"\\nWHERE \" . ($where ? implode(\" AND \", $where) . \" AND \" : \"\") . where_check($val, $fields) . $group_by, 1) . \")\";\n\t\t\t}\n\t\t\t$query = implode(\" UNION ALL \", $union);\n\t\t}\n\t\tadminer()->dumpData($TABLE, \"table\", $query);\n\t\tadminer()->dumpFooter();\n\t\texit;\n\t}\n\n\tif (!adminer()->selectEmailProcess($where, $foreign_keys)) {\n\t\tif ($_POST[\"save\"] || $_POST[\"delete\"]) { // edit\n\t\t\t$result = true;\n\t\t\t$affected = 0;\n\t\t\t$set = array();\n\t\t\tif (!$_POST[\"delete\"]) {\n\t\t\t\tforeach ($_POST[\"fields\"] as $name => $val) {\n\t\t\t\t\t$val = process_input($fields[$name]);\n\t\t\t\t\tif ($val !== null && ($_POST[\"clone\"] || $val !== false)) {\n\t\t\t\t\t\t$set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($_POST[\"delete\"] || $set) {\n\t\t\t\t$query = ($_POST[\"clone\"] ? \"INTO \" . table($TABLE) . \" (\" . implode(\", \", array_keys($set)) . \")\\nSELECT \" . implode(\", \", $set) . \"\\nFROM \" . table($TABLE) : \"\");\n\t\t\t\tif ($_POST[\"all\"] || ($primary && is_array($_POST[\"check\"])) || $is_group) {\n\t\t\t\t\t$result = ($_POST[\"delete\"]\n\t\t\t\t\t\t? driver()->delete($TABLE, $where_check)\n\t\t\t\t\t\t: ($_POST[\"clone\"]\n\t\t\t\t\t\t\t? queries(\"INSERT $query$where_check\" . driver()->insertReturning($TABLE))\n\t\t\t\t\t\t\t: driver()->update($TABLE, $set, $where_check)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\t$affected = connection()->affected_rows;\n\t\t\t\t\tif (is_object($result)) { // PostgreSQL with RETURNING fills num_rows\n\t\t\t\t\t\t$affected += $result->num_rows;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tforeach ((array) $_POST[\"check\"] as $val) {\n\t\t\t\t\t\t// where is not unique so OR can't be used\n\t\t\t\t\t\t$where2 = \"\\nWHERE \" . ($where ? implode(\" AND \", $where) . \" AND \" : \"\") . where_check($val, $fields);\n\t\t\t\t\t\t$result = ($_POST[\"delete\"]\n\t\t\t\t\t\t\t? driver()->delete($TABLE, $where2, 1)\n\t\t\t\t\t\t\t: ($_POST[\"clone\"]\n\t\t\t\t\t\t\t\t? queries(\"INSERT\" . limit1($TABLE, $query, $where2))\n\t\t\t\t\t\t\t\t: driver()->update($TABLE, $set, $where2, 1)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!$result) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$affected += connection()->affected_rows;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$message = lang('%d item(s) have been affected.', $affected);\n\t\t\tif ($_POST[\"clone\"] && $result && $affected == 1) {\n\t\t\t\t$last_id = last_id($result);\n\t\t\t\tif ($last_id) {\n\t\t\t\t\t$message = lang('Item%s has been inserted.', \" $last_id\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tqueries_redirect(remove_from_uri($_POST[\"all\"] && $_POST[\"delete\"] ? \"page\" : \"\"), $message, $result);\n\t\t\tif (!$_POST[\"delete\"]) {\n\t\t\t\t$post_fields = (array) $_POST[\"fields\"];\n\t\t\t\tedit_form($TABLE, array_intersect_key($fields, $post_fields), $post_fields, !$_POST[\"clone\"], $error);\n\t\t\t\tpage_footer();\n\t\t\t\texit;\n\t\t\t}\n\n\t\t} elseif (!$_POST[\"import\"]) { // modify\n\t\t\tif (!$_POST[\"val\"]) {\n\t\t\t\t$error = lang('Ctrl+click on a value to modify it.');\n\t\t\t} else {\n\t\t\t\t$result = true;\n\t\t\t\t$affected = 0;\n\t\t\t\tforeach ($_POST[\"val\"] as $unique_idf => $row) {\n\t\t\t\t\t$set = array();\n\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\t$key = bracket_escape($key, true); // true - back\n\t\t\t\t\t\t$set[idf_escape($key)] = (preg_match('~char|text~', $fields[$key][\"type\"]) || $val != \"\" ? adminer()->processInput($fields[$key], $val) : \"NULL\");\n\t\t\t\t\t}\n\t\t\t\t\t$result = driver()->update(\n\t\t\t\t\t\t$TABLE,\n\t\t\t\t\t\t$set,\n\t\t\t\t\t\t\" WHERE \" . ($where ? implode(\" AND \", $where) . \" AND \" : \"\") . where_check($unique_idf, $fields),\n\t\t\t\t\t\t($is_group || $primary ? 0 : 1),\n\t\t\t\t\t\t\" \"\n\t\t\t\t\t);\n\t\t\t\t\tif (!$result) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$affected += connection()->affected_rows;\n\t\t\t\t}\n\t\t\t\tqueries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result);\n\t\t\t}\n\n\t\t} elseif (!is_string($file = get_file(\"csv_file\", true))) {\n\t\t\t$error = upload_error($file);\n\t\t} elseif (!preg_match('~~u', $file)) {\n\t\t\t$error = lang('File must be in UTF-8 encoding.');\n\t\t} else {\n\t\t\tsave_settings(array(\"output\" => $adminer_import[\"output\"], \"format\" => $_POST[\"separator\"]), \"adminer_import\");\n\t\t\t$result = true;\n\t\t\t$cols = array_keys($fields);\n\t\t\tpreg_match_all('~(?>\"[^\"]*\"|[^\"\\r\\n]+)+~', $file, $matches);\n\t\t\t$affected = count($matches[0]);\n\t\t\tdriver()->begin();\n\t\t\t$separator = ($_POST[\"separator\"] == \"csv\" ? \",\" : ($_POST[\"separator\"] == \"tsv\" ? \"\\t\" : \";\"));\n\t\t\t$rows = array();\n\t\t\tforeach ($matches[0] as $key => $val) {\n\t\t\t\tpreg_match_all(\"~((?>\\\"[^\\\"]*\\\")+|[^$separator]*)$separator~\", $val . $separator, $matches2);\n\t\t\t\tif (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing \",\\n\n\t\t\t\t\t// first row corresponds to column names - use it for table structure\n\t\t\t\t\t$cols = $matches2[1];\n\t\t\t\t\t$affected--;\n\t\t\t\t} else {\n\t\t\t\t\t$set = array();\n\t\t\t\t\tforeach ($matches2[1] as $i => $col) {\n\t\t\t\t\t\t$set[idf_escape($cols[$i])] = ($col == \"\" && $fields[$cols[$i]][\"null\"] ? \"NULL\" : q(preg_match('~^\".*\"$~s', $col) ? str_replace('\"\"', '\"', substr($col, 1, -1)) : $col));\n\t\t\t\t\t}\n\t\t\t\t\t$rows[] = $set;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$result = (!$rows || driver()->insertUpdate($TABLE, $rows, $primary));\n\t\t\tif ($result) {\n\t\t\t\tdriver()->commit();\n\t\t\t}\n\t\t\tqueries_redirect(remove_from_uri(\"page\"), lang('%d row(s) have been imported.', $affected), $result);\n\t\t\tdriver()->rollback(); // after queries_redirect() to not overwrite error\n\n\t\t}\n\t}\n}\n\n$table_name = adminer()->tableName($table_status);\nif (is_ajax()) {\n\tpage_headers();\n\tob_start();\n} else {\n\tpage_header(lang('Select') . \": $table_name\", $error);\n}\n\n$set = null;\nif (isset($rights[\"insert\"]) || !support(\"table\")) {\n\t$params = array();\n\tforeach ((array) $_GET[\"where\"] as $val) {\n\t\tif (\n\t\t\tisset($foreign_keys[$val[\"col\"]]) && count($foreign_keys[$val[\"col\"]]) == 1\n\t\t\t&& ($val[\"op\"] == \"=\" || (!$val[\"op\"] && (is_array($val[\"val\"]) || !preg_match('~[_%]~', $val[\"val\"])))) // LIKE in Editor\n\t\t) {\n\t\t\t$params[\"set\" . \"[\" . bracket_escape($val[\"col\"]) . \"]\"] = $val[\"val\"];\n\t\t}\n\t}\n\n\t$set = $params ? \"&\" . http_build_query($params) : \"\";\n}\nadminer()->selectLinks($table_status, $set);\n\nif (!$columns && support(\"table\")) {\n\techo \"<p class='error'>\" . lang('Unable to select the table') . ($fields ? \".\" : \": \" . error()) . \"\\n\";\n} else {\n\techo \"<form action='' id='form'>\\n\";\n\techo \"<div style='display: none;'>\";\n\thidden_fields_get();\n\techo (DB != \"\" ? input_hidden(\"db\", DB) . (isset($_GET[\"ns\"]) ? input_hidden(\"ns\", $_GET[\"ns\"]) : \"\") : \"\"); // not used in Editor\n\techo input_hidden(\"select\", $TABLE);\n\techo \"</div>\\n\";\n\tadminer()->selectColumnsPrint($select, $columns);\n\tadminer()->selectSearchPrint($where, $search_columns, $indexes);\n\tadminer()->selectOrderPrint($order, $order_columns, $indexes);\n\tadminer()->selectLimitPrint($limit);\n\tadminer()->selectLengthPrint($text_length);\n\tadminer()->selectActionPrint($indexes);\n\techo \"</form>\\n\";\n\n\t$page = $_GET[\"page\"];\n\t$found_rows = null;\n\tif ($page == \"last\") {\n\t\t$found_rows = get_val(count_rows($TABLE, $where, $is_group, $group));\n\t\t$page = floor(max(0, intval($found_rows) - 1) / $limit);\n\t}\n\n\t$select2 = $select;\n\t$group2 = $group;\n\tif (!$select2) {\n\t\t$select2[] = \"*\";\n\t\t$convert_fields = convert_fields($columns, $fields, $select);\n\t\tif ($convert_fields) {\n\t\t\t$select2[] = substr($convert_fields, 2);\n\t\t}\n\t}\n\tforeach ($select as $key => $val) {\n\t\t$field = $fields[idf_unescape($val)];\n\t\tif ($field && ($as = convert_field($field))) {\n\t\t\t$select2[$key] = \"$as AS $val\";\n\t\t}\n\t}\n\tif (!$is_group && $unselected) {\n\t\tforeach ($unselected as $key => $val) {\n\t\t\t$select2[] = idf_escape($key);\n\t\t\tif ($group2) {\n\t\t\t\t$group2[] = idf_escape($key);\n\t\t\t}\n\t\t}\n\t}\n\t$result = driver()->select($TABLE, $select2, $where, $group2, $order, $limit, $page, true);\n\n\tif (!$result) {\n\t\techo \"<p class='error'>\" . error() . \"\\n\";\n\t} else {\n\t\tif (JUSH == \"mssql\" && $page) {\n\t\t\t$result->seek($limit * $page);\n\t\t}\n\t\t$email_fields = array();\n\t\techo \"<form action='' method='post' enctype='multipart/form-data'>\\n\";\n\t\t$rows = array();\n\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\tif ($page && JUSH == \"oracle\") {\n\t\t\t\tunset($row[\"RNUM\"]);\n\t\t\t}\n\t\t\t$rows[] = $row;\n\t\t}\n\n\t\t// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)\n\t\tif ($_GET[\"page\"] != \"last\" && $limit && $group && $is_group && JUSH == \"sql\") {\n\t\t\t$found_rows = get_val(\" SELECT FOUND_ROWS()\"); // space to allow mysql.trace_mode\n\t\t}\n\n\t\tif (!$rows) {\n\t\t\techo \"<p class='message'>\" . lang('No rows.') . \"\\n\";\n\t\t} else {\n\t\t\t$backward_keys = adminer()->backwardKeys($TABLE, $table_name);\n\n\t\t\techo \"<div class='scrollable'>\";\n\t\t\techo \"<table id='table' class='nowrap checkable odds'>\";\n\t\t\techo script(\"mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});\");\n\t\t\techo \"<thead><tr>\" . (!$group && $select\n\t\t\t\t? \"\"\n\t\t\t\t: \"<td><input type='checkbox' id='all-page' class='jsonly'>\" . script(\"qs('#all-page').onclick = partial(formCheck, /check/);\", \"\")\n\t\t\t\t\t. \" <a href='\" . h($_GET[\"modify\"] ? remove_from_uri(\"modify\") : $_SERVER[\"REQUEST_URI\"] . \"&modify=1\") . \"'>\" . lang('Modify') . \"</a>\");\n\t\t\t$names = array();\n\t\t\t$functions = array();\n\t\t\treset($select);\n\t\t\t$rank = 1;\n\t\t\tforeach ($rows[0] as $key => $val) {\n\t\t\t\tif (!isset($unselected[$key])) {\n\t\t\t\t\t/** @var array{fun?:string, col?:string} */\n\t\t\t\t\t$val = idx($_GET[\"columns\"], key($select)) ?: array();\n\t\t\t\t\t$field = $fields[$select ? ($val ? $val[\"col\"] : current($select)) : $key];\n\t\t\t\t\t$name = ($field ? adminer()->fieldName($field, $rank) : ($val[\"fun\"] ? \"*\" : h($key)));\n\t\t\t\t\tif ($name != \"\") {\n\t\t\t\t\t\t$rank++;\n\t\t\t\t\t\t$names[$key] = $name;\n\t\t\t\t\t\t$column = idf_escape($key);\n\t\t\t\t\t\t$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);\n\t\t\t\t\t\t$desc = \"&desc%5B0%5D=1\";\n\t\t\t\t\t\techo \"<th id='th[\" . h(bracket_escape($key)) . \"]'>\" . script(\"mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});\", \"\");\n\t\t\t\t\t\t$fun = apply_sql_function($val[\"fun\"], $name); //! columns looking like functions\n\t\t\t\t\t\t$sortable = isset($field[\"privileges\"][\"order\"]) || $fun != $name;\n\t\t\t\t\t\techo ($sortable ? \"<a href='\" . h($href . ($order[0] == $column || $order[0] == $key ? $desc : '')) . \"'>$fun</a>\" : $fun); // $order[0] == $key - COUNT(*)\n\t\t\t\t\t\t$menu = ($sortable ? \"<a href='\" . h($href . $desc) . \"' title='\" . lang('descending') . \"' class='text'> ↓</a>\" : '');\n\t\t\t\t\t\tif (!$val[\"fun\"] && isset($field[\"privileges\"][\"where\"])) {\n\t\t\t\t\t\t\t$menu .= '<a href=\"#fieldset-search\" title=\"' . lang('Search') . '\" class=\"text jsonly\"> =</a>';\n\t\t\t\t\t\t\t$menu .= script(\"qsl('a').onclick = partial(selectSearch, '\" . js_escape($key) . \"');\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\techo ($menu ? \"<span class='column hidden'>$menu</span>\" : \"\");\n\t\t\t\t\t}\n\t\t\t\t\t$functions[$key] = $val[\"fun\"];\n\t\t\t\t\tnext($select);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$lengths = array();\n\t\t\tif ($_GET[\"modify\"]) {\n\t\t\t\tforeach ($rows as $row) {\n\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\t$lengths[$key] = max($lengths[$key], min(40, strlen(utf8_decode($val))));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\techo ($backward_keys ? \"<th>\" . lang('Relations') : \"\") . \"</thead>\\n\";\n\n\t\t\tif (is_ajax()) {\n\t\t\t\tob_end_clean();\n\t\t\t}\n\n\t\t\tforeach (adminer()->rowDescriptions($rows, $foreign_keys) as $n => $row) {\n\t\t\t\t$unique_array = unique_array($rows[$n], $indexes);\n\t\t\t\tif (!$unique_array) {\n\t\t\t\t\t$unique_array = array();\n\t\t\t\t\treset($select);\n\t\t\t\t\tforeach ($rows[$n] as $key => $val) {\n\t\t\t\t\t\tif (!preg_match('~^(COUNT|AVG|GROUP_CONCAT|MAX|MIN|SUM)\\(~', current($select))) {\n\t\t\t\t\t\t\t$unique_array[$key] = $val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnext($select);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$unique_idf = \"\";\n\t\t\t\tforeach ($unique_array as $key => $val) {\n\t\t\t\t\t$field = (array) $fields[$key];\n\t\t\t\t\tif ((JUSH == \"sql\" || JUSH == \"pgsql\") && preg_match('~char|text|enum|set~', $field[\"type\"]) && strlen($val) > 64) {\n\t\t\t\t\t\t$key = (strpos($key, '(') ? $key : idf_escape($key)); //! columns looking like functions\n\t\t\t\t\t\t$key = \"MD5(\" . (JUSH != 'sql' || preg_match(\"~^utf8~\", $field[\"collation\"]) ? $key : \"CONVERT($key USING \" . charset(connection()) . \")\") . \")\";\n\t\t\t\t\t\t$val = md5($val);\n\t\t\t\t\t}\n\t\t\t\t\t$unique_idf .= \"&\" . ($val !== null ? urlencode(\"where[\" . bracket_escape($key) . \"]\") . \"=\" . urlencode($val === false ? \"f\" : $val) : \"null%5B%5D=\" . urlencode($key));\n\t\t\t\t}\n\t\t\t\techo \"<tr>\" . (!$group && $select ? \"\" : \"<td>\"\n\t\t\t\t\t. checkbox(\"check[]\", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST[\"check\"]))\n\t\t\t\t\t. ($is_group || information_schema(DB) ? \"\" : \" <a href='\" . h(ME . \"edit=\" . urlencode($TABLE) . $unique_idf) . \"' class='edit'>\" . lang('edit') . \"</a>\")\n\t\t\t\t);\n\n\t\t\t\treset($select);\n\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\tif (isset($names[$key])) {\n\t\t\t\t\t\t$column = current($select);\n\t\t\t\t\t\t$field = (array) $fields[$key];\n\t\t\t\t\t\tif ($val != \"\" && (!isset($email_fields[$key]) || $email_fields[$key] != \"\")) {\n\t\t\t\t\t\t\t$email_fields[$key] = (is_mail($val) ? $names[$key] : \"\"); //! filled e-mails can be contained on other pages\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$link = \"\";\n\t\t\t\t\t\tif (is_blob($field) && $val != \"\") {\n\t\t\t\t\t\t\t$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!$link && $val !== null) { // link related items\n\t\t\t\t\t\t\tforeach ((array) $foreign_keys[$key] as $foreign_key) {\n\t\t\t\t\t\t\t\tif (count($foreign_keys[$key]) == 1 || end($foreign_key[\"source\"]) == $key) {\n\t\t\t\t\t\t\t\t\t$link = \"\";\n\t\t\t\t\t\t\t\t\tforeach ($foreign_key[\"source\"] as $i => $source) {\n\t\t\t\t\t\t\t\t\t\t$link .= where_link($i, $foreign_key[\"target\"][$i], $rows[$n][$source]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$link = ($foreign_key[\"db\"] != \"\" ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key[\"db\"]), ME) : ME) . 'select=' . urlencode($foreign_key[\"table\"]) . $link; // InnoDB supports non-UNIQUE keys\n\t\t\t\t\t\t\t\t\tif ($foreign_key[\"ns\"]) {\n\t\t\t\t\t\t\t\t\t\t$link = preg_replace('~([?&]ns=)[^&]+~', '\\1' . urlencode($foreign_key[\"ns\"]), $link);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (count($foreign_key[\"source\"]) == 1) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($column == \"COUNT(*)\") {\n\t\t\t\t\t\t\t$link = ME . \"select=\" . urlencode($TABLE);\n\t\t\t\t\t\t\t$i = 0;\n\t\t\t\t\t\t\tforeach ((array) $_GET[\"where\"] as $v) {\n\t\t\t\t\t\t\t\tif (!array_key_exists($v[\"col\"], $unique_array)) {\n\t\t\t\t\t\t\t\t\t$link .= where_link($i++, $v[\"col\"], $v[\"val\"], $v[\"op\"]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tforeach ($unique_array as $k => $v) {\n\t\t\t\t\t\t\t\t$link .= where_link($i++, $k, $v);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$html = select_value($val, $link, $field, $text_length);\n\t\t\t\t\t\t$id = h(\"val[$unique_idf][\" . bracket_escape($key) . \"]\");\n\t\t\t\t\t\t$posted = idx(idx($_POST[\"val\"], $unique_idf), bracket_escape($key));\n\t\t\t\t\t\t$update = idx($field[\"privileges\"], \"update\");\n\t\t\t\t\t\t$editable = !is_array($row[$key]) && is_utf8($html) && $rows[$n][$key] == $row[$key] && !$functions[$key] && !$field[\"generated\"] && $update;\n\t\t\t\t\t\t$type = (preg_match('~^(AVG|MIN|MAX)\\((.+)\\)~', $column, $match) ? $fields[idf_unescape($match[2])][\"type\"] : $field[\"type\"]);\n\t\t\t\t\t\t$text = preg_match('~text|json|lob~', $type);\n\t\t\t\t\t\t$is_number = preg_match(number_type(), $type) || preg_match('~^(CHAR_LENGTH|ROUND|FLOOR|CEIL|TIME_TO_SEC|COUNT|SUM)\\(~', $column);\n\t\t\t\t\t\techo \"<td id='$id'\" . ($is_number && ($val === null || is_numeric(strip_tags($html)) || $type == \"money\") ? \" class='number'\" : \"\");\n\t\t\t\t\t\tif (($_GET[\"modify\"] && $editable && $val !== null) || $posted !== null) {\n\t\t\t\t\t\t\t$h_value = h($posted !== null ? $posted : $row[$key]);\n\t\t\t\t\t\t\techo \">\" . ($text ? \"<textarea name='$id' cols='30' rows='\" . (substr_count($row[$key], \"\\n\") + 1) . \"'>$h_value</textarea>\" : \"<input name='$id' value='$h_value' size='$lengths[$key]'>\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$long = strpos($html, \"<i>…</i>\");\n\t\t\t\t\t\t\techo ($update\n\t\t\t\t\t\t\t\t? \" data-text='\" . ($long ? 2 : ($text ? 1 : 0)) . \"'\"\n\t\t\t\t\t\t\t\t\t. ($editable ? \"\" : \" data-warning='\" . h(lang('Use edit link to modify this value.')) . \"'\")\n\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t) . \">$html\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnext($select);\n\t\t\t\t}\n\n\t\t\t\tif ($backward_keys) {\n\t\t\t\t\techo \"<td>\";\n\t\t\t\t}\n\t\t\t\tadminer()->backwardKeysPrint($backward_keys, $rows[$n]);\n\t\t\t\techo \"</tr>\\n\"; // close to allow white-space: pre\n\t\t\t}\n\n\t\t\tif (is_ajax()) {\n\t\t\t\texit;\n\t\t\t}\n\t\t\techo \"</table>\\n\";\n\t\t\techo \"</div>\\n\";\n\t\t}\n\n\t\tif (!is_ajax()) {\n\t\t\tif ($rows || $page) {\n\t\t\t\t$exact_count = true;\n\t\t\t\tif ($_GET[\"page\"] != \"last\") {\n\t\t\t\t\tif (!$limit || (count($rows) < $limit && ($rows || !$page))) {\n\t\t\t\t\t\t$found_rows = ($page ? $page * $limit : 0) + count($rows);\n\t\t\t\t\t} elseif (JUSH != \"sql\" || !$is_group) {\n\t\t\t\t\t\t$found_rows = ($is_group ? false : found_rows($table_status, $where));\n\t\t\t\t\t\tif (intval($found_rows) < max(1e4, 2 * ($page + 1) * $limit)) {\n\t\t\t\t\t\t\t// slow with big tables\n\t\t\t\t\t\t\t$found_rows = first(slow_query(count_rows($TABLE, $where, $is_group, $group)));\n\t\t\t\t\t\t} elseif (JUSH == 'sql' || JUSH == 'pgsql') {\n\t\t\t\t\t\t\t$exact_count = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$pagination = ($limit && ($found_rows === false || $found_rows > $limit || $page));\n\t\t\t\tif ($pagination) {\n\t\t\t\t\techo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit\n\t\t\t\t\t\t? '<p><a href=\"' . h(remove_from_uri(\"page\") . \"&page=\" . ($page + 1)) . '\" class=\"loadmore\">' . lang('Load more data') . '</a>'\n\t\t\t\t\t\t\t. script(\"qsl('a').onclick = partial(selectLoadMore, $limit, '\" . lang('Loading') . \"…');\", \"\")\n\t\t\t\t\t\t: ''\n\t\t\t\t\t);\n\t\t\t\t\techo \"\\n\";\n\t\t\t\t}\n\n\t\t\t\techo \"<div class='footer'><div>\\n\";\n\t\t\t\tif ($pagination) {\n\t\t\t\t\t// display first, previous 4, next 4 and last page\n\t\t\t\t\t$max_page = ($found_rows === false\n\t\t\t\t\t\t? $page + (count($rows) >= $limit ? 2 : 1)\n\t\t\t\t\t\t: floor(($found_rows - 1) / $limit)\n\t\t\t\t\t);\n\t\t\t\t\techo \"<fieldset>\";\n\t\t\t\t\tif (JUSH != \"simpledb\") {\n\t\t\t\t\t\techo \"<legend><a href='\" . h(remove_from_uri(\"page\")) . \"'>\" . lang('Page') . \"</a></legend>\";\n\t\t\t\t\t\techo script(\"qsl('a').onclick = function () { pageClick(this.href, +prompt('\" . lang('Page') . \"', '\" . ($page + 1) . \"')); return false; };\");\n\t\t\t\t\t\techo pagination(0, $page) . ($page > 5 ? \" …\" : \"\");\n\t\t\t\t\t\tfor ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {\n\t\t\t\t\t\t\techo pagination($i, $page);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($max_page > 0) {\n\t\t\t\t\t\t\techo ($page + 5 < $max_page ? \" …\" : \"\");\n\t\t\t\t\t\t\techo ($exact_count && $found_rows !== false\n\t\t\t\t\t\t\t\t? pagination($max_page, $page)\n\t\t\t\t\t\t\t\t: \" <a href='\" . h(remove_from_uri(\"page\") . \"&page=last\") . \"' title='~$max_page'>\" . lang('last') . \"</a>\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\techo \"<legend>\" . lang('Page') . \"</legend>\";\n\t\t\t\t\t\techo pagination(0, $page) . ($page > 1 ? \" …\" : \"\");\n\t\t\t\t\t\techo ($page ? pagination($page, $page) : \"\");\n\t\t\t\t\t\techo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? \" …\" : \"\") : \"\");\n\t\t\t\t\t}\n\t\t\t\t\techo \"</fieldset>\\n\";\n\t\t\t\t}\n\n\t\t\t\techo \"<fieldset>\";\n\t\t\t\techo \"<legend>\" . lang('Whole result') . \"</legend>\";\n\t\t\t\t$display_rows = ($exact_count ? \"\" : \"~ \") . $found_rows;\n\t\t\t\t$onclick = \"const checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);\";\n\t\t\t\techo checkbox(\"all\", 1, 0, ($found_rows !== false ? ($exact_count ? \"\" : \"~ \") . lang('%d row(s)', $found_rows) : \"\"), $onclick) . \"\\n\";\n\t\t\t\techo \"</fieldset>\\n\";\n\n\t\t\t\tif (adminer()->selectCommandPrint()) {\n\t\t\t\t\t?>\n<fieldset<?php echo ($_GET[\"modify\"] ? '' : ' class=\"jsonly\"'); ?>><legend><?php echo lang('Modify'); ?></legend><div>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\"<?php echo ($_GET[\"modify\"] ? '' : ' title=\"' . lang('Ctrl+click on a value to modify it.') . '\"'); ?>>\n</div></fieldset>\n<fieldset><legend><?php echo lang('Selected'); ?> <span id=\"selected\"></span></legend><div>\n<input type=\"submit\" name=\"edit\" value=\"<?php echo lang('Edit'); ?>\">\n<input type=\"submit\" name=\"clone\" value=\"<?php echo lang('Clone'); ?>\">\n<input type=\"submit\" name=\"delete\" value=\"<?php echo lang('Delete'); ?>\"><?php echo confirm(); ?>\n</div></fieldset>\n<?php\n\t\t\t\t}\n\n\t\t\t\t$format = adminer()->dumpFormat();\n\t\t\t\tforeach ((array) $_GET[\"columns\"] as $column) {\n\t\t\t\t\tif ($column[\"fun\"]) {\n\t\t\t\t\t\tunset($format['sql']);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ($format) {\n\t\t\t\t\tprint_fieldset(\"export\", lang('Export') . \" <span id='selected2'></span>\");\n\t\t\t\t\t$output = adminer()->dumpOutput();\n\t\t\t\t\techo ($output ? html_select(\"output\", $output, $adminer_import[\"output\"]) . \" \" : \"\");\n\t\t\t\t\techo html_select(\"format\", $format, $adminer_import[\"format\"]);\n\t\t\t\t\techo \" <input type='submit' name='export' value='\" . lang('Export') . \"'>\\n\";\n\t\t\t\t\techo \"</div></fieldset>\\n\";\n\t\t\t\t}\n\n\t\t\t\tadminer()->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);\n\t\t\t\techo \"</div></div>\\n\";\n\t\t\t}\n\n\t\t\tif (adminer()->selectImportPrint()) {\n\t\t\t\techo \"<p>\";\n\t\t\t\techo \"<a href='#import'>\" . lang('Import') . \"</a>\";\n\t\t\t\techo script(\"qsl('a').onclick = partial(toggle, 'import');\", \"\");\n\t\t\t\techo \"<span id='import'\" . ($_POST[\"import\"] ? \"\" : \" class='hidden'\") . \">: \";\n\t\t\t\techo file_input(\"<input type='file' name='csv_file'> \"\n\t\t\t\t\t. html_select(\"separator\", array(\"csv\" => \"CSV,\", \"csv;\" => \"CSV;\", \"tsv\" => \"TSV\"), $adminer_import[\"format\"])\n\t\t\t\t\t. \" <input type='submit' name='import' value='\" . lang('Import') . \"'>\")\n\t\t\t\t;\n\t\t\t\techo \"</span>\";\n\t\t\t}\n\n\t\t\techo input_token();\n\t\t\techo \"</form>\\n\";\n\t\t\techo (!$group && $select ? \"\" : script(\"tableCheck();\"));\n\t\t}\n\t}\n}\n\nif (is_ajax()) {\n\tob_end_clean();\n\texit;\n}\n"
  },
  {
    "path": "adminer/sequence.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$SEQUENCE = $_GET[\"sequence\"];\n$row = $_POST;\n\nif ($_POST && !$error) {\n\t$link = substr(ME, 0, -1);\n\t$name = trim($row[\"name\"]);\n\tif ($_POST[\"drop\"]) {\n\t\tquery_redirect(\"DROP SEQUENCE \" . idf_escape($SEQUENCE), $link, lang('Sequence has been dropped.'));\n\t} elseif ($SEQUENCE == \"\") {\n\t\tquery_redirect(\"CREATE SEQUENCE \" . idf_escape($name), $link, lang('Sequence has been created.'));\n\t} elseif ($SEQUENCE != $name) {\n\t\tquery_redirect(\"ALTER SEQUENCE \" . idf_escape($SEQUENCE) . \" RENAME TO \" . idf_escape($name), $link, lang('Sequence has been altered.'));\n\t} else {\n\t\tredirect($link);\n\t}\n}\n\npage_header($SEQUENCE != \"\" ? lang('Alter sequence') . \": \" . h($SEQUENCE) : lang('Create sequence'), $error);\n\nif (!$row) {\n\t$row[\"name\"] = $SEQUENCE;\n}\n?>\n\n<form action=\"\" method=\"post\">\n<p><input name=\"name\" value=\"<?php echo h($row[\"name\"]); ?>\" autocapitalize=\"off\">\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php\nif ($SEQUENCE != \"\") {\n\techo \"<input type='submit' name='drop' value='\" . lang('Drop') . \"'>\" . confirm(lang('Drop %s?', $SEQUENCE)) . \"\\n\";\n}\necho input_token();\n?>\n</form>\n"
  },
  {
    "path": "adminer/sql.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nif (!$error && $_POST[\"export\"]) {\n\tsave_settings(array(\"output\" => $_POST[\"output\"], \"format\" => $_POST[\"format\"]), \"adminer_import\");\n\tdump_headers(\"sql\");\n\tif ($_POST[\"format\"] == \"sql\") {\n\t\techo \"$_POST[query]\\n\";\n\t} else {\n\t\tadminer()->dumpTable(\"\", \"\");\n\t\tadminer()->dumpData(\"\", \"table\", $_POST[\"query\"]);\n\t\tadminer()->dumpFooter();\n\t}\n\texit;\n}\n\nrestart_session();\n$history_all = &get_session(\"queries\");\n$history = &$history_all[DB];\nif (!$error && $_POST[\"clear\"]) {\n\t$history = array();\n\tredirect(remove_from_uri(\"history\"));\n}\nstop_session();\n\npage_header((isset($_GET[\"import\"]) ? lang('Import') : lang('SQL command')), $error);\n$line_comment = '--' . (JUSH == 'sql' ? ' ' : '');\n\nif (!$error && $_POST) {\n\t$fp = false;\n\tif (!isset($_GET[\"import\"])) {\n\t\t$query = $_POST[\"query\"];\n\t} elseif ($_POST[\"webfile\"]) {\n\t\t$sql_file_path = adminer()->importServerPath();\n\t\t$fp = @fopen((file_exists($sql_file_path)\n\t\t\t? $sql_file_path\n\t\t\t: \"compress.zlib://$sql_file_path.gz\"\n\t\t), \"rb\");\n\t\t$query = ($fp ? fread($fp, 1e6) : false);\n\t} else {\n\t\t$query = get_file(\"sql_file\", true, \";\");\n\t}\n\n\tif (is_string($query)) { // get_file() returns error as number, fread() as false\n\t\tif (function_exists('memory_get_usage') && ($memory_limit = ini_bytes(\"memory_limit\")) != \"-1\") {\n\t\t\t@ini_set(\"memory_limit\", max($memory_limit, strval(2 * strlen($query) + memory_get_usage() + 8e6))); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables\n\t\t}\n\n\t\tif ($query != \"\" && strlen($query) < 1e6) { // don't add big queries\n\t\t\t$q = $query . (preg_match(\"~;[ \\t\\r\\n]*\\$~\", $query) ? \"\" : \";\"); //! doesn't work with DELIMITER |\n\t\t\tif (!$history || first(end($history)) != $q) { // no repeated queries\n\t\t\t\trestart_session();\n\t\t\t\t$history[] = array($q, time()); //! add elapsed time\n\t\t\t\tset_session(\"queries\", $history_all); // required because reference is unlinked by stop_session()\n\t\t\t\tstop_session();\n\t\t\t}\n\t\t}\n\n\t\t$space = \"(?:\\\\s|/\\\\*[\\s\\S]*?\\\\*/|(?:#|$line_comment)[^\\n]*\\n?|--\\r?\\n)\";\n\t\t$delimiter = driver()->delimiter;\n\t\t$offset = 0;\n\t\t$empty = true;\n\t\t$connection2 = connect(); // connection for exploring indexes and EXPLAIN (to not replace FOUND_ROWS()) //! PDO - silent error\n\t\tif ($connection2 && DB != \"\") {\n\t\t\t$connection2->select_db(DB);\n\t\t\tif ($_GET[\"ns\"] != \"\") {\n\t\t\t\tset_schema($_GET[\"ns\"], $connection2);\n\t\t\t}\n\t\t}\n\t\t$commands = 0;\n\t\t$errors = array();\n\t\t$parse = '[\\'\"' . (JUSH == \"sql\" ? '`#' : (JUSH == \"sqlite\" ? '`[' : (JUSH == \"mssql\" ? '[' : ''))) . ']|/\\*|' . $line_comment . '|$' . (JUSH == \"pgsql\" ? '|\\$([a-zA-Z]\\w*)?\\$' : '');\n\t\t$total_start = microtime(true);\n\t\t$adminer_export = get_settings(\"adminer_import\"); // this doesn't offer SQL export so we match the import/export style at select\n\n\t\twhile ($query != \"\") {\n\t\t\tif (!$offset && preg_match(\"~^$space*+DELIMITER\\\\s+(\\\\S+)~i\", $query, $match)) {\n\t\t\t\t$delimiter = preg_quote($match[1]);\n\t\t\t\t$query = substr($query, strlen($match[0]));\n\t\t\t} elseif (!$offset && JUSH == 'pgsql' && preg_match(\"~^($space*+COPY\\\\s+)[^;]+\\\\s+FROM\\\\s+stdin;~i\", $query, $match)) {\n\t\t\t\t$delimiter = \"\\n\\\\\\\\\\\\.\\r?\\n\";\n\t\t\t\t$offset = strlen($match[0]);\n\t\t\t} else {\n\t\t\t\tpreg_match(\"($delimiter\\\\s*|$parse)\", $query, $match, PREG_OFFSET_CAPTURE, $offset); // always matches\n\t\t\t\tlist($found, $pos) = $match[0];\n\t\t\t\tif (!$found && $fp && !feof($fp)) {\n\t\t\t\t\t$query .= fread($fp, 1e5);\n\t\t\t\t} else {\n\t\t\t\t\tif (!$found && rtrim($query) == \"\") {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$offset = $pos + strlen($found);\n\n\t\t\t\t\tif ($found && !preg_match(\"(^$delimiter)\", $found)) { // find matching quote or comment end\n\t\t\t\t\t\t$c_style_escapes = driver()->hasCStyleEscapes() || (JUSH == \"pgsql\" && ($pos > 0 && strtolower($query[$pos - 1]) == \"e\"));\n\n\t\t\t\t\t\t$pattern =\n\t\t\t\t\t\t\t($found == '/*' ? '\\*/' :\n\t\t\t\t\t\t\t($found == '[' ? ']' :\n\t\t\t\t\t\t\t(preg_match(\"~^$line_comment|^#~\", $found) ? \"\\n\" :\n\t\t\t\t\t\t\tpreg_quote($found) . ($c_style_escapes ? '|\\\\\\\\.' : ''))))\n\t\t\t\t\t\t;\n\n\t\t\t\t\t\twhile (preg_match(\"($pattern|\\$)s\", $query, $match, PREG_OFFSET_CAPTURE, $offset)) {\n\t\t\t\t\t\t\t$s = $match[0][0];\n\t\t\t\t\t\t\tif (!$s && $fp && !feof($fp)) {\n\t\t\t\t\t\t\t\t$query .= fread($fp, 1e5);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$offset = $match[0][1] + strlen($s);\n\t\t\t\t\t\t\t\tif (!$s || $s[0] != \"\\\\\") {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else { // end of a query\n\t\t\t\t\t\t$empty = false;\n\t\t\t\t\t\t$q = substr($query, 0, $pos + ($delimiter[0] == \"\\n\" ? 3 : 0)); // 3 - pass \"\\n\\\\.\" to PostgreSQL COPY\n\t\t\t\t\t\t$commands++;\n\t\t\t\t\t\t$print = \"<pre id='sql-$commands'><code class='jush-\" . JUSH . \"'>\" . adminer()->sqlCommandQuery($q) . \"</code></pre>\\n\";\n\t\t\t\t\t\tif (JUSH == \"sqlite\" && preg_match(\"~^$space*+ATTACH\\\\b~i\", $q, $match)) {\n\t\t\t\t\t\t\t// PHP doesn't support setting SQLITE_LIMIT_ATTACHED\n\t\t\t\t\t\t\techo $print;\n\t\t\t\t\t\t\techo \"<p class='error'>\" . lang('ATTACH queries are not supported.') . \"\\n\";\n\t\t\t\t\t\t\t$errors[] = \" <a href='#sql-$commands'>$commands</a>\";\n\t\t\t\t\t\t\tif ($_POST[\"error_stops\"]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (!$_POST[\"only_errors\"]) {\n\t\t\t\t\t\t\t\techo $print;\n\t\t\t\t\t\t\t\tob_flush();\n\t\t\t\t\t\t\t\tflush(); // can take a long time - show the running query\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$start = microtime(true);\n\t\t\t\t\t\t\t//! don't allow changing of character_set_results, convert encoding of displayed query\n\t\t\t\t\t\t\tif (connection()->multi_query($q) && $connection2 && preg_match(\"~^$space*+USE\\\\b~i\", $q)) {\n\t\t\t\t\t\t\t\t$connection2->query($q);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t$result = connection()->store_result();\n\n\t\t\t\t\t\t\t\tif (connection()->error) {\n\t\t\t\t\t\t\t\t\techo ($_POST[\"only_errors\"] ? $print : \"\");\n\t\t\t\t\t\t\t\t\techo \"<p class='error'>\" . lang('Error in query') . (connection()->errno ? \" (\" . connection()->errno . \")\" : \"\") . \": \" . error() . \"\\n\";\n\t\t\t\t\t\t\t\t\t$errors[] = \" <a href='#sql-$commands'>$commands</a>\";\n\t\t\t\t\t\t\t\t\tif ($_POST[\"error_stops\"]) {\n\t\t\t\t\t\t\t\t\t\tbreak 2;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t$time = \" <span class='time'>(\" . format_time($start) . \")</span>\"\n\t\t\t\t\t\t\t\t\t\t. (strlen($q) < 1000 ? \" <a href='\" . h(ME) . \"sql=\" . urlencode(trim($q)) . \"'>\" . lang('Edit') . \"</a>\" : \"\") // 1000 - maximum length of encoded URL in IE is 2083 characters\n\t\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\t\t\t$affected = connection()->affected_rows; // getting warnings overwrites this\n\t\t\t\t\t\t\t\t\t$warnings = ($_POST[\"only_errors\"] ? \"\" : driver()->warnings());\n\t\t\t\t\t\t\t\t\t$warnings_id = \"warnings-$commands\";\n\t\t\t\t\t\t\t\t\tif ($warnings) {\n\t\t\t\t\t\t\t\t\t\t$time .= \", <a href='#$warnings_id'>\" . lang('Warnings') . \"</a>\" . script(\"qsl('a').onclick = partial(toggle, '$warnings_id');\", \"\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$explain = null;\n\t\t\t\t\t\t\t\t\t$orgtables = null;\n\t\t\t\t\t\t\t\t\t$explain_id = \"explain-$commands\";\n\t\t\t\t\t\t\t\t\tif (is_object($result)) {\n\t\t\t\t\t\t\t\t\t\t$limit = $_POST[\"limit\"];\n\t\t\t\t\t\t\t\t\t\t$orgtables = print_select_result($result, $connection2, array(), $limit);\n\t\t\t\t\t\t\t\t\t\tif (!$_POST[\"only_errors\"]) {\n\t\t\t\t\t\t\t\t\t\t\techo \"<form action='' method='post'>\\n\";\n\t\t\t\t\t\t\t\t\t\t\t$num_rows = $result->num_rows;\n\t\t\t\t\t\t\t\t\t\t\techo \"<p class='sql-footer'>\" . ($num_rows ? ($limit && $num_rows > $limit ? lang('%d / ', $limit) : \"\") . lang('%d row(s)', $num_rows) : \"\");\n\t\t\t\t\t\t\t\t\t\t\techo $time;\n\t\t\t\t\t\t\t\t\t\t\tif ($connection2 && preg_match(\"~^($space|\\\\()*+SELECT\\\\b~i\", $q) && ($explain = explain($connection2, $q))) {\n\t\t\t\t\t\t\t\t\t\t\t\techo \", <a href='#$explain_id'>Explain</a>\" . script(\"qsl('a').onclick = partial(toggle, '$explain_id');\", \"\");\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t$id = \"export-$commands\";\n\t\t\t\t\t\t\t\t\t\t\techo \", <a href='#$id'>\" . lang('Export') . \"</a>\" . script(\"qsl('a').onclick = partial(toggle, '$id');\", \"\") . \"<span id='$id' class='hidden'>: \"\n\t\t\t\t\t\t\t\t\t\t\t\t. html_select(\"output\", adminer()->dumpOutput(), $adminer_export[\"output\"]) . \" \"\n\t\t\t\t\t\t\t\t\t\t\t\t. html_select(\"format\", adminer()->dumpFormat(), $adminer_export[\"format\"])\n\t\t\t\t\t\t\t\t\t\t\t\t. input_hidden(\"query\", $q)\n\t\t\t\t\t\t\t\t\t\t\t\t. \"<input type='submit' name='export' value='\" . lang('Export') . \"'>\" . input_token() . \"</span>\\n\"\n\t\t\t\t\t\t\t\t\t\t\t\t. \"</form>\\n\"\n\t\t\t\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (preg_match(\"~^$space*+(CREATE|DROP|ALTER)$space++(DATABASE|SCHEMA)\\\\b~i\", $q)) {\n\t\t\t\t\t\t\t\t\t\t\trestart_session();\n\t\t\t\t\t\t\t\t\t\t\tset_session(\"dbs\", null); // clear cache\n\t\t\t\t\t\t\t\t\t\t\tstop_session();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (!$_POST[\"only_errors\"]) {\n\t\t\t\t\t\t\t\t\t\t\techo \"<p class='message' title='\" . h(connection()->info) . \"'>\" . lang('Query executed OK, %d row(s) affected.', $affected) . \"$time\\n\";\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\techo ($warnings ? \"<div id='$warnings_id' class='hidden'>\\n$warnings</div>\\n\" : \"\");\n\t\t\t\t\t\t\t\t\tif ($explain) {\n\t\t\t\t\t\t\t\t\t\techo \"<div id='$explain_id' class='hidden explain'>\\n\";\n\t\t\t\t\t\t\t\t\t\tprint_select_result($explain, $connection2, $orgtables);\n\t\t\t\t\t\t\t\t\t\techo \"</div>\\n\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t$start = microtime(true);\n\t\t\t\t\t\t\t} while (connection()->next_result());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t$query = substr($query, $offset);\n\t\t\t\t\t\t$offset = 0;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ($empty) {\n\t\t\techo \"<p class='message'>\" . lang('No commands to execute.') . \"\\n\";\n\t\t} elseif ($_POST[\"only_errors\"]) {\n\t\t\techo \"<p class='message'>\" . lang('%d query(s) executed OK.', $commands - count($errors));\n\t\t\techo \" <span class='time'>(\" . format_time($total_start) . \")</span>\\n\";\n\t\t} elseif ($errors && $commands > 1) {\n\t\t\techo \"<p class='error'>\" . lang('Error in query') . \": \" . implode(\"\", $errors) . \"\\n\";\n\t\t}\n\t\t//! MS SQL - SET SHOWPLAN_ALL OFF\n\n\t} else {\n\t\techo \"<p class='error'>\" . upload_error($query) . \"\\n\";\n\t}\n}\n?>\n\n<form action=\"\" method=\"post\" enctype=\"multipart/form-data\" id=\"form\">\n<?php\n$execute = \"<input type='submit' value='\" . lang('Execute') . \"' title='Ctrl+Enter'>\";\nif (!isset($_GET[\"import\"])) {\n\t$q = $_GET[\"sql\"]; // overwrite $q from if ($_POST) to save memory\n\tif ($_POST) {\n\t\t$q = $_POST[\"query\"];\n\t} elseif ($_GET[\"history\"] == \"all\") {\n\t\t$q = $history;\n\t} elseif ($_GET[\"history\"] != \"\") {\n\t\t$q = idx($history[$_GET[\"history\"]], 0);\n\t}\n\techo \"<p>\";\n\ttextarea(\"query\", $q, 20);\n\techo 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\")) . \"');\");\n\techo \"<p>\";\n\tadminer()->sqlPrintAfter();\n\techo \"$execute\\n\";\n\techo lang('Limit rows') . \": <input type='number' name='limit' class='size' value='\" . h($_POST ? $_POST[\"limit\"] : $_GET[\"limit\"]) . \"'>\\n\";\n\n} else {\n\t$gz = (extension_loaded(\"zlib\") ? \"[.gz]\" : \"\");\n\techo \"<fieldset><legend>\" . lang('File upload') . \"</legend><div>\";\n\techo file_input(\"SQL$gz: <input type='file' name='sql_file[]' multiple>\\n$execute\");\n\techo \"</div></fieldset>\\n\";\n\t$importServerPath = adminer()->importServerPath();\n\tif ($importServerPath) {\n\t\techo \"<fieldset><legend>\" . lang('From server') . \"</legend><div>\";\n\t\techo lang('Webserver file %s', \"<code>\" . h($importServerPath) . \"$gz</code>\");\n\t\techo ' <input type=\"submit\" name=\"webfile\" value=\"' . lang('Run file') . '\">';\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\techo \"<p>\";\n}\n\necho checkbox(\"error_stops\", 1, ($_POST ? $_POST[\"error_stops\"] : isset($_GET[\"import\"]) || $_GET[\"error_stops\"]), lang('Stop on error')) . \"\\n\";\necho checkbox(\"only_errors\", 1, ($_POST ? $_POST[\"only_errors\"] : isset($_GET[\"import\"]) || $_GET[\"only_errors\"]), lang('Show only errors')) . \"\\n\";\necho input_token();\n\nif (!isset($_GET[\"import\"]) && $history) {\n\tprint_fieldset(\"history\", lang('History'), $_GET[\"history\"] != \"\");\n\tfor ($val = end($history); $val; $val = prev($history)) { // not array_reverse() to save memory\n\t\t$key = key($history);\n\t\tlist($q, $time, $elapsed) = $val;\n\t\techo '<a href=\"' . h(ME . \"sql=&history=$key\") . '\">' . lang('Edit') . \"</a>\"\n\t\t\t. \" <span class='time' title='\" . @date('Y-m-d', $time) . \"'>\" . @date(\"H:i:s\", $time) . \"</span>\" // @ - time zone may be not set\n\t\t\t. \" <code class='jush-\" . JUSH . \"'>\" . shorten_utf8(ltrim(str_replace(\"\\n\", \" \", str_replace(\"\\r\", \"\", preg_replace(\"~^(#|$line_comment).*~m\", '', $q)))), 80, \"</code>\")\n\t\t\t. ($elapsed ? \" <span class='time'>($elapsed)</span>\" : \"\")\n\t\t\t. \"<br>\\n\"\n\t\t;\n\t}\n\techo \"<input type='submit' name='clear' value='\" . lang('Clear') . \"'>\\n\";\n\techo \"<a href='\" . h(ME . \"sql=&history=all\") . \"'>\" . lang('Edit all') . \"</a>\\n\";\n\techo \"</div></fieldset>\\n\";\n}\n?>\n</form>\n"
  },
  {
    "path": "adminer/sqlite.php",
    "content": "<?php\nfunction adminer_object() {\n\tinclude_once \"../plugins/login-password-less.php\";\n\treturn new Adminer\\Plugins(array(\n\t\t// TODO: inline the result of password_hash() so that the password is not visible in source codes\n\t\tnew AdminerLoginPasswordLess(password_hash(\"YOUR_PASSWORD_HERE\", PASSWORD_DEFAULT)),\n\t));\n}\n\ninclude \"./index.php\";\n"
  },
  {
    "path": "adminer/static/dark.css",
    "content": "/** @author Robert Mesaros, https://www.rmsoft.sk */\n\nhtml {\n\t--bg: #002240;\n\t--fg: #829bb0;\n\t--dim: #154269;\n\t--lit: #011d35;\n}\n\na, a:visited { color: #618cb3; }\na:link:hover, a:visited:hover { color: #9bc0e1; }\nh1 { border-color: #5e94c1; color: #ffddbf; }\nh2 { border-color: #a3bdd3; color: #000; background: #3c678d; }\ntable, td, th, .js .column { border-color: #0e416d; }\nth { background: #11385a; }\nthead td, thead th, thead th a { color: #a8b05f; }\nfieldset { border-color: #16548a; }\ncode { background: #11385a; }\ntbody tr:hover td, tbody tr:hover th { background: #133553; }\npre.jush { background: #11385a; }\ninput.default { box-shadow: 1px 1px 1px #888; }\ninput.required, input.maxlength { box-shadow: 1px 1px 1px red; }\n.version { color: #888; }\n.error { color: red; background: #efdada; border: 1px solid #e76f6f; }\n.error b { background: #efeaea; }\n.message { color: #0b860b; background: #efe; border: 1px solid #7fbd7f; }\n.char { color: #a949a9; }\n.date { color: #59c159; }\n.enum { color: #d55c5c; }\n.binary { color: #9bc0e1; }\n.odds tbody tr:nth-child(2n) { background: #042541; }\n.js .checkable .checked td, .js .checkable .checked th { background: #10395c; color: #67a4a5; }\n.js .checkable .checked:hover td, .js .checkable .checked:hover th { background: #133553; }\n.js .checkable .checked a { color: #67a4a5; }\n.icon { filter: invert(1); background-color: #062642; }\n.icon:hover { background-color: #d1394e; }\n#menu { border-color: #a3bdd3; }\n#menu p, #logins, #tables { border-color: #326b9c; }\n#h1 { color: #ffddbf; }\n#version { color: #d2b397; }\n#schema .table { border-color: #093459; }\n#help { border-color: #666; background: #c7e4fe; }\n#schema div.table a { color: #3c7bb3; }\n#menu .active { color: #398c8d; }\n#edit-fields tbody tr:hover td, #edit-fields tbody tr:hover th { background: #3b6f9d; }\n:target { color: #a8b05f; }\n"
  },
  {
    "path": "adminer/static/default.css",
    "content": "/** @author Ondrej Valka, http://valka.info */\n\nhtml {\n\t--bg: #fff;\n\t--fg: #000;\n\t--dim: #eee;\n\t--lit: #ddf;\n}\n\nbody { color: var(--fg); background: var(--bg); font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; min-width: fit-content; }\na { color: blue; text-decoration: none; }\na:visited { color: navy; }\na:link:hover, a:visited:hover { color: red; text-decoration: underline; }\na.text:hover { text-decoration: none; }\na.jush-help:hover { color: inherit; }\nh1 { font-size: 150%; margin: 0; padding: .8em .667em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: var(--dim); }\nh2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid var(--fg); font-weight: normal; background: var(--lit); }\nh3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }\nform { margin: 0; }\ntd table { width: 100%; margin: 0; }\ntable { margin: 1em 20px 0 0; font-size: 90%; border-spacing: 0; border-width: 1px 0 0 1px; }\ntable, td, th, .js .column { border-color: #999; border-style: solid; }\ntd, th { border-width: 0 1px 1px 0; padding: .2em .3em; margin: 0; }\nth { background: var(--dim); text-align: left; }\nthead { position: sticky; top: 0; }\nthead th { text-align: center; padding: .2em .5em; }\nthead td, thead th { background: var(--lit); }\nfieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; border-radius: 5px; }\np { margin: .8em 20px 0 0; }\nimg { vertical-align: middle; border: 0; }\ntd img { max-width: 200px; max-height: 200px; }\ntbody tr:hover td, tbody tr:hover th { background: var(--dim); }\ncode { font-size: 110%; padding: 1px 2px; background: var(--dim); }\npre { margin: 1em 0 0; }\ntd pre { margin: 0; }\npre, textarea { font: 110%/1.25 monospace; }\npre.jush { background: var(--bg); }\npre code { display: block; font-size: 100%; }\ninput, textarea { box-sizing: border-box; }\ninput, select { vertical-align: middle; }\ninput[type=\"radio\"] { vertical-align: text-bottom; }\ninput.default { box-shadow: 1px 1px 1px #777; }\ninput.required, input.maxlength { box-shadow: 1px 1px 1px red; }\ninput.wayoff { left: -1000px; position: absolute; }\n.block { display: block; }\n.version { color: #777; font-size: 62%; }\n.js .hidden, .nojs .jsonly { display: none; }\n.js .column { position: absolute; background: var(--lit); padding: .27em 1ex .33em 0; margin-top: -.37em; border-width: 1px 1px 1px 0; border-radius: 0 8px 8px 0; }\n.nowrap td, .nowrap th, td.nowrap, p.nowrap { white-space: pre; }\n.wrap td { white-space: normal; }\n.error { color: red; background: #fee; }\n.error b { background: var(--bg); font-weight: normal; }\n.message { color: green; background: #efe; }\n.message table { color: var(--fg); background: var(--bg); }\n.error, .message { padding: .5em .8em; margin: 1em 20px 0 0; }\n.char { color: #007F00; }\n.date { color: #7F007F; }\n.enum { color: #007F7F; }\n.binary { color: red; }\n.odds tbody tr { background: var(--bg); }\n.odds tbody tr:nth-child(2n) { background: #F5F5F5; }\n.js .checkable .checked td, .js .checkable .checked th { background: var(--lit); }\n.time { color: silver; font-size: 70%; }\n.function, .number, .datetime { text-align: right; }\n.type { width: 15ex; }\n.options select, .options input { width: 20ex; }\n.view { font-style: italic; }\n.active { font-weight: bold; }\n.sqlarea { width: 98%; }\n.sql-footer { margin-bottom: 2.5em; }\n.explain table { white-space: pre; }\n.icon { width: 18px; height: 18px; background: navy center no-repeat; border: 0; padding: 0; vertical-align: middle; }\n.icon span { display: none; }\n.icon:hover { background-color: red; }\n.size { width: 7ex; }\n.help { cursor: help; }\n.footer { position: sticky; bottom: 0; margin: 23px -20px .5em 0; box-shadow: 0 -5px 10px 10px var(--bg); }\n.footer > div { background: var(--bg); padding: 0 0 .5em; }\n.footer fieldset { margin-top: 0; }\n.links a { white-space: nowrap; margin-right: 20px; }\n.logout { margin-top: .5em; position: absolute; top: 0; right: 0; background-color: var(--bg); box-shadow: 0 0 5px 5px var(--bg); }\n.loadmore { margin-left: 1ex; }\n/* .edit used in designs */\n#menu { position: absolute; margin: 10px 0 0; top: 2em; left: 0; width: 19em; }\n#menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }\n#logins li, #tables li { list-style: none; }\n#dbs { overflow: hidden; }\n#logins, #tables { white-space: nowrap; overflow: hidden; }\n#logins a, #tables a, #tables span { background: var(--bg); }\n#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }\n#lang { position: absolute; top: -2.6em; left: 0; padding: .3em 1em; }\n#menuopen { display: none; }\n#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: var(--dim); height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; }\n#logo { vertical-align: baseline; margin-bottom: -3px; }\n#h1 { color: #777; text-decoration: none; font-style: italic; }\n#version { color: red; }\n#schema { margin-left: 60px; position: relative; user-select: none; -webkit-user-select: none; }\n#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }\n#schema .references { position: absolute; }\n#help { position: absolute; border: 1px solid #999; background: var(--dim); padding: 5px; font-family: monospace; z-index: 1; }\n:target { background: var(--lit); }\n\n/* inlined here and not in compile.php because otherwise the development version flickers a little bit when loading the images */\n.icon-up { background-image: url(data:image/gif;base64,R0lGODlhEgASAIEAMe7u7gAAgJmZmQAAACH5BAEAAAEALAAAAAASABIAAQIghI+py+0PTQhRTgrvfRP0nmEVOIoReZphxbauAMfyHBcAOw==); }\n.icon-down { background-image: url(data:image/gif;base64,R0lGODlhEgASAIEAMe7u7gAAgJmZmQAAACH5BAEAAAEALAAAAAASABIAAQIghI+py+0PTQjxzCopvltX/lyix0wm2ZwdxraVAMfyHBcAOw==); }\n.icon-plus { background-image: url(data:image/gif;base64,R0lGODlhEgASAIEAMe7u7gAAgJmZmQAAACH5BAEAAAEALAAAAAASABIAAQIhhI+py+0PTQjxzCopvm/6rykgCHGVGaFliLXuI8TyTMsFADs=); }\n.icon-cross { background-image: url(data:image/gif;base64,R0lGODlhEgASAIEAMe7u7gAAgJmZmQAAACH5BAEAAAEALAAAAAASABIAAQIjhI+py+0PIwph1kZvfnnDLoFfd2GU4THnsUruC0fCTNc2XQAAOw==); }\n.icon-move { background-image: url(data:image/gif;base64,R0lGODlhEgASAJEAAO7u7gAAAJmZmQAAACH5BAEAAAEALAAAAAASABIAAAIfhI+py+3vgpyU0Rug3gnX5U3cqIWSZZLqigjuC8dvAQA7); }\n#schema .arrow { height: 1.25em; background: url(data:image/gif;base64,R0lGODlhCAAKAIAAAICAgP///yH5BAEAAAEALAAAAAAIAAoAAAIPBIJplrGLnpQRqtOy3rsAADs=) no-repeat right center; }\n\n.rtl h2 { margin: 0 -18px 20px 0; }\n.rtl p, .rtl table, .rtl .error, .rtl .message { margin: 1em 0 0 20px; }\n.rtl .logout { left: 0; right: auto; }\n.rtl #content { margin: 2em 21em 0 0; padding: 10px 0 20px 20px; }\n.rtl #breadcrumb { left: auto; right: 21em; margin: 0 -18px 0 0; }\n.rtl .pages { left: auto; right: 21em; }\n.rtl input.wayoff { left: auto; right: -1000px; }\n.rtl #lang, .rtl #menu { left: auto; right: 0; }\n.rtl pre, .rtl code { direction: ltr; }\n\n@media all and (max-width: 800px) {\n\t.pages { left: auto; }\n\t.js .logout { top: 1.667em; background-color: var(--dim); box-shadow: 0 0 5px 5px var(--dim); }\n\t#menu { position: static; width: auto; min-width: 23em; background: var(--bg); border: 1px solid var(--fg); margin-top: 9px; box-shadow: 0 0 20px -3px var(--fg); }\n\t#content { margin-left: 10px !important; }\n\t#lang { position: static; }\n\t#breadcrumb { left: 48px !important; }\n\t.js #foot { position: absolute; top: 2em; left: 0; }\n\t.js .foot { display: none; }\n\t.js #menuopen { display: block; position: absolute; top: 3px; left: 6px; }\n\t.nojs #menu { position: static; }\n\t.rtl.js #foot { left: auto; right: 0; }\n\t.rtl .pages { right: auto; }\n\t.rtl.js #menuopen { left: auto; right: 6px; }\n\t.rtl #content { margin-left: 0 !important; margin-right: 10px; }\n\t.rtl #breadcrumb { left: auto !important; right: 48px; }\n}\n\n@media print {\n\t#lang, #menu, .logout { display: none; }\n\t#content { margin-left: 1em; }\n\t#breadcrumb { left: 1em; }\n\t.rtl #content { margin-left: auto; margin-right: 1em; }\n\t.rtl #breadcrumb { left: auto; right: 1em; }\n\t.nowrap td, .nowrap th, td.nowrap { white-space: normal; }\n}\n"
  },
  {
    "path": "adminer/static/editing.js",
    "content": "'use strict'; // Adminer specific functions\n\nlet autocompleter; // set in adminer.inc.php\n\n/** Load syntax highlighting\n* @param string first three characters of database system version\n* @param [string]\n*/\nfunction syntaxHighlighting(version, vendor) {\n\taddEventListener('DOMContentLoaded', () => {\n\t\tif (window.jush) {\n\t\t\tjush.create_links = 'target=\"_blank\" rel=\"noreferrer noopener\"';\n\t\t\tif (version) {\n\t\t\t\tfor (let key in jush.urls) {\n\t\t\t\t\tlet obj = jush.urls;\n\t\t\t\t\tif (typeof obj[key] != 'string') {\n\t\t\t\t\t\tobj = obj[key];\n\t\t\t\t\t\tkey = 0;\n\t\t\t\t\t\tif (vendor == 'maria') {\n\t\t\t\t\t\t\tfor (let i = 1; i < obj.length; i++) {\n\t\t\t\t\t\t\t\tobj[i] = obj[i]\n\t\t\t\t\t\t\t\t\t.replace('.html', '/')\n\t\t\t\t\t\t\t\t\t.replace('-type-syntax', '-data-types')\n\t\t\t\t\t\t\t\t\t.replace(/numeric-(data-types)/, '$1-$&')\n\t\t\t\t\t\t\t\t\t.replace(/replication-options-(master|binary-log)\\//, 'replication-and-binary-log-system-variables/')\n\t\t\t\t\t\t\t\t\t.replace('server-options/', 'server-system-variables/')\n\t\t\t\t\t\t\t\t\t.replace('innodb-parameters/', 'innodb-system-variables/')\n\t\t\t\t\t\t\t\t\t.replace(/#(statvar|sysvar|option_mysqld)_(.*)/, '#$2')\n\t\t\t\t\t\t\t\t\t.replace(/#sysvar_(.*)/, '#$1')\n\t\t\t\t\t\t\t\t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tobj[key] = (vendor == 'maria' ? obj[key].replace('dev.mysql.com/doc/mysql', 'mariadb.com/kb') : obj[key]) // MariaDB\n\t\t\t\t\t\t.replace('/doc/mysql', '/doc/refman/' + version) // MySQL\n\t\t\t\t\t;\n\t\t\t\t\tif (vendor != 'cockroach') {\n\t\t\t\t\t\tobj[key] = obj[key].replace('/docs/current', '/docs/' + version); // PostgreSQL\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (window.jushLinks) {\n\t\t\t\tjush.custom_links = jushLinks;\n\t\t\t}\n\t\t\tjush.highlight_tag('code', 0);\n\t\t\tadminerHighlighter = els => jush.highlight_tag(els, 0);\n\t\t\tfor (const tag of qsa('textarea')) {\n\t\t\t\tif (/(^|\\s)jush-/.test(tag.className)) {\n\t\t\t\t\tconst pre = jush.textarea(tag, autocompleter);\n\t\t\t\t\tif (pre) {\n\t\t\t\t\t\tsetupSubmitHighlightInput(pre);\n\t\t\t\t\t\ttag.onchange = () => {\n\t\t\t\t\t\t\tpre.textContent = tag.value;\n\t\t\t\t\t\t\tpre.oninput();\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n}\n\n/** Get value of dynamically created form field\n* @param HTMLFormElement\n* @param string\n* @return HTMLElement\n*/\nfunction formField(form, name) {\n\t// required in IE < 8, form.elements[name] doesn't work\n\tfor (let i=0; i < form.length; i++) {\n\t\tif (form[i].name == name) {\n\t\t\treturn form[i];\n\t\t}\n\t}\n}\n\n/** Try to change input type to password or to text\n* @param HTMLInputElement\n* @param boolean\n*/\nfunction typePassword(el, disable) {\n\ttry {\n\t\tel.type = (disable ? 'text' : 'password');\n\t} catch (e) { // empty\n\t}\n}\n\n/** Install toggle handler\n* @param [HTMLElement]\n*/\nfunction messagesPrint(parent) {\n\tfor (const el of qsa('.toggle', parent)) {\n\t\tel.onclick = partial(toggle, el.getAttribute('href').substr(1));\n\t}\n\tfor (const el of qsa('.copy', parent)) {\n\t\tel.onclick = () => {\n\t\t\tnavigator.clipboard.writeText(qs('code', el.parentElement).innerText).then(() => el.textContent = '✓');\n\t\t\tsetTimeout(() => el.textContent = '🗐', 1000);\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\n\n\n/** Hide or show some login rows for selected driver\n* @param HTMLSelectElement\n*/\nfunction loginDriver(driver) {\n\tconst trs = parentTag(driver, 'table').rows;\n\tconst disabled = /sqlite/.test(selectValue(driver));\n\talterClass(trs[1], 'hidden', disabled);\t// 1 - row with server\n\ttrs[1].getElementsByTagName('input')[0].disabled = disabled;\n}\n\n\n\nlet dbCtrl;\nconst dbPrevious = {};\n\n/** Check if database should be opened to a new window\n* @param MouseEvent\n* @this HTMLSelectElement\n*/\nfunction dbMouseDown(event) {\n\t// Firefox: mouse-down event does not contain pressed key information for OPTION.\n\t// Chrome: mouse-down event has inherited key information from SELECT.\n\t// So we ignore the event for OPTION to work Ctrl+click correctly everywhere.\n\tif (event.target.tagName == \"OPTION\") {\n\t\treturn;\n\t}\n\n\tdbCtrl = isCtrl(event);\n\tif (dbPrevious[this.name] == undefined) {\n\t\tdbPrevious[this.name] = this.value;\n\t}\n}\n\n/** Load database after selecting it\n* @this HTMLSelectElement\n*/\nfunction dbChange() {\n\tif (dbCtrl) {\n\t\tthis.form.target = '_blank';\n\t}\n\tthis.form.submit();\n\tthis.form.target = '';\n\tif (dbCtrl && dbPrevious[this.name] != undefined) {\n\t\tthis.value = dbPrevious[this.name];\n\t\tdbPrevious[this.name] = undefined;\n\t}\n}\n\n\n\n/** Check whether the query will be executed with index\n* @this HTMLElement\n*/\nfunction selectFieldChange() {\n\tconst form = this.form;\n\tconst ok = (() => {\n\t\tfor (const input of qsa('input', form)) {\n\t\t\tif (input.value && /^fulltext/.test(input.name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tlet ok = form.limit.value;\n\t\tlet group = false;\n\t\tconst columns = {};\n\t\tfor (const select of qsa('select', form)) {\n\t\t\tconst col = selectValue(select);\n\t\t\tlet match = /^(where.+)col]/.exec(select.name);\n\t\t\tif (match) {\n\t\t\t\tconst op = selectValue(form[match[1] + 'op]']);\n\t\t\t\tconst val = form[match[1] + 'val]'].value;\n\t\t\t\tif (col in indexColumns && (!/LIKE|REGEXP/.test(op) || (op == 'LIKE' && val.charAt(0) != '%'))) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else if (col || val) {\n\t\t\t\t\tok = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ((match = /^(columns.+)fun]/.exec(select.name))) {\n\t\t\t\tif (/^(avg|count|count distinct|group_concat|max|min|sum)$/.test(col)) {\n\t\t\t\t\tgroup = true;\n\t\t\t\t}\n\t\t\t\tconst val = selectValue(form[match[1] + 'col]']);\n\t\t\t\tif (val) {\n\t\t\t\t\tcolumns[col && col != 'count' ? '' : val] = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (col && /^order/.test(select.name)) {\n\t\t\t\tif (!(col in indexColumns)) {\n\t\t\t\t\tok = false;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (group) {\n\t\t\tfor (const col in columns) {\n\t\t\t\tif (!(col in indexColumns)) {\n\t\t\t\t\tok = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ok;\n\t})();\n\tsetHtml('noindex', (ok ? '' : '!'));\n}\n\n\n\nlet added = '.', rowCount;\n\n/** Check if val is equal to a-delimiter-b where delimiter is '_', '' or big letter\n* @param string\n* @param string\n* @param string\n* @return boolean\n*/\nfunction delimiterEqual(val, a, b) {\n\treturn (val == a + '_' + b || val == a + b || val == a + b.charAt(0).toUpperCase() + b.substr(1));\n}\n\n/** Escape string to use as identifier\n* @param string\n* @return string\n*/\nfunction idfEscape(s) {\n\treturn s.replace(/`/, '``');\n}\n\n\n\n/** Set up event handlers for edit_fields().\n*/\nfunction editFields() {\n\tfor (const el of qsa('[name$=\"[field]\"]')) {\n\t\tel.oninput = function () {\n\t\t\teditingNameChange.call(this);\n\t\t\tif (!this.defaultValue) {\n\t\t\t\teditingAddRow.call(this);\n\t\t\t}\n\t\t};\n\t}\n\tfor (const el of qsa('[name$=\"[length]\"]')) {\n\t\tmixin(el, {onfocus: editingLengthFocus, oninput: editingLengthChange});\n\t}\n\tfor (const el of qsa('[name$=\"[type]\"]')) {\n\t\tmixin(el, {\n\t\t\tonfocus: function () {\n\t\t\t\tlastType = selectValue(this);\n\t\t\t},\n\t\t\tonchange: editingTypeChange,\n\t\t\tonmouseover: function (event) {\n\t\t\t\thelpMouseover.call(this, event, event.target.value, 1);\n\t\t\t},\n\t\t\tonmouseout: helpMouseout\n\t\t});\n\t}\n}\n\n/** Handle clicks on fields editing\n* @param MouseEvent\n* @return boolean false to cancel action\n*/\nfunction editingClick(event) {\n\tlet el = parentTag(event.target, 'button');\n\tif (el) {\n\t\tconst name = el.name;\n\t\tif (/^add\\[/.test(name)) {\n\t\t\teditingAddRow.call(el, 1);\n\t\t} else if (/^up\\[/.test(name)) {\n\t\t\teditingMoveRow.call(el, 1);\n\t\t} else if (/^down\\[/.test(name)) {\n\t\t\teditingMoveRow.call(el);\n\t\t} else if (/^drop_col\\[/.test(name)) {\n\t\t\teditingRemoveRow.call(el, 'fields$1[field]');\n\t\t}\n\t\treturn false;\n\t}\n\tel = event.target;\n\tif (!isTag(el, 'input')) {\n\t\tel = parentTag(el, 'label');\n\t\tel = el && qs('input', el);\n\t}\n\tif (el) {\n\t\tconst name = el.name;\n\t\tif (name == 'auto_increment_col') {\n\t\t\tconst field = el.form['fields[' + el.value + '][field]'];\n\t\t\tif (!field.value) {\n\t\t\t\tfield.value = 'id';\n\t\t\t\tfield.oninput();\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Handle input on fields editing\n* @param InputEvent\n*/\nfunction editingInput(event) {\n\tconst el = event.target;\n\tif (/\\[default]$/.test(el.name)) {\n\t\t el.previousElementSibling.checked = true;\n\t\t el.previousElementSibling.selectedIndex = Math.max(el.previousElementSibling.selectedIndex, 1);\n\t}\n}\n\n/** Detect foreign key\n* @this HTMLInputElement\n*/\nfunction editingNameChange() {\n\tconst name = this.name.substr(0, this.name.length - 7);\n\tconst type = formField(this.form, name + '[type]');\n\tconst opts = type.options;\n\tlet candidate; // don't select anything with ambiguous match (like column `id`)\n\tconst val = this.value;\n\tfor (let i = opts.length; i--; ) {\n\t\tconst match = /(.+)`(.+)/.exec(opts[i].value);\n\t\tif (!match) { // common type\n\t\t\tif (candidate && i == opts.length - 2 && val == opts[candidate].value.replace(/.+`/, '') && name == 'fields[1]') { // single target table, link to column, first field - probably `id`\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst base = match[1];\n\t\tconst column = match[2];\n\t\tfor (const table of [ base, base.replace(/s$/, ''), base.replace(/es$/, '') ]) {\n\t\t\tif (val == column || val == table || delimiterEqual(val, table, column) || delimiterEqual(val, column, table)) {\n\t\t\t\tif (candidate) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcandidate = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (candidate) {\n\t\ttype.selectedIndex = candidate;\n\t\ttype.onchange();\n\t}\n}\n\n/** Add table row for next field\n* @param [boolean]\n* @return boolean false\n* @this HTMLInputElement\n*/\nfunction editingAddRow(focus) {\n\tconst match = /(\\d+)(\\.\\d+)?/.exec(this.name);\n\tconst x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';\n\tconst row = parentTag(this, 'tr');\n\tconst row2 = cloneNode(row);\n\tlet tags = qsa('select, input, button', row);\n\tlet tags2 = qsa('select, input, button', row2);\n\tfor (let i=0; i < tags.length; i++) {\n\t\ttags2[i].name = tags[i].name.replace(/[0-9.]+/, x);\n\t\ttags2[i].selectedIndex = (/\\[(generated)/.test(tags[i].name) ? 0 : tags[i].selectedIndex);\n\t}\n\ttags = qsa('input', row);\n\ttags2 = qsa('input', row2);\n\tconst input = tags2[0]; // IE loose tags2 after insertBefore()\n\tfor (let i=0; i < tags.length; i++) {\n\t\tif (tags[i].name == 'auto_increment_col') {\n\t\t\ttags2[i].value = x;\n\t\t\ttags2[i].checked = false;\n\t\t}\n\t\tif (/\\[(orig|field|comment|default)/.test(tags[i].name)) {\n\t\t\ttags2[i].value = '';\n\t\t}\n\t\tif (/\\[(generated)/.test(tags[i].name)) {\n\t\t\ttags2[i].checked = false;\n\t\t}\n\t}\n\ttags[0].oninput = editingNameChange;\n\trow.parentNode.insertBefore(row2, row.nextSibling);\n\tif (focus) {\n\t\tinput.oninput = editingNameChange;\n\t\tinput.focus();\n\t}\n\tadded += '0';\n\trowCount++;\n\treturn false;\n}\n\n/** Remove table row for field\n* @param string regular expression replacement\n* @return boolean false\n* @this HTMLInputElement\n*/\nfunction editingRemoveRow(name) {\n\tconst field = formField(this.form, this.name.replace(/[^[]+(.+)/, name));\n\tfield.remove();\n\tparentTag(this, 'tr').style.display = 'none';\n\treturn false;\n}\n\n/** Move table row for field\n* @param [boolean]\n* @return boolean false for success\n* @this HTMLInputElement\n*/\nfunction editingMoveRow(up){\n\tconst row = parentTag(this, 'tr');\n\tif (!('nextElementSibling' in row)) {\n\t\treturn true;\n\t}\n\trow.parentNode.insertBefore(row, up\n\t\t? row.previousElementSibling\n\t\t: row.nextElementSibling ? row.nextElementSibling.nextElementSibling : row.parentNode.firstChild);\n\treturn false;\n}\n\nlet lastType = '';\n\n/** Clear length and hide collation or unsigned\n* @this HTMLSelectElement\n*/\nfunction editingTypeChange() {\n\tconst type = this;\n\tconst name = type.name.substr(0, type.name.length - 6);\n\tconst text = selectValue(type);\n\tfor (const el of type.form.elements) {\n\t\tif (el.name == name + '[length]') {\n\t\t\tif (!(\n\t\t\t\t(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))\n\t\t\t\t|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))\n\t\t\t)) {\n\t\t\t\tel.value = '';\n\t\t\t}\n\t\t\tel.oninput.apply(el);\n\t\t}\n\t\tif (lastType == 'timestamp' && el.name == name + '[generated]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {\n\t\t\tel.checked = false;\n\t\t\tel.selectedIndex = 0;\n\t\t}\n\t\tif (el.name == name + '[collation]') {\n\t\t\talterClass(el, 'hidden', !/(char|text|enum|set)$/.test(text));\n\t\t}\n\t\tif (el.name == name + '[unsigned]') {\n\t\t\talterClass(el, 'hidden', !/(^|[^o])int(?!er)|numeric|real|float|double|decimal|money/.test(text));\n\t\t}\n\t\tif (el.name == name + '[on_update]') {\n\t\t\talterClass(el, 'hidden', !/timestamp|datetime/.test(text)); // MySQL supports datetime since 5.6.5\n\t\t}\n\t\tif (el.name == name + '[on_delete]') {\n\t\t\talterClass(el, 'hidden', !/`/.test(text));\n\t\t}\n\t}\n\thelpClose();\n}\n\n/** Mark length as required\n* @this HTMLInputElement\n*/\nfunction editingLengthChange() {\n\talterClass(this, 'required', !this.value.length && /var(char|binary)$/.test(selectValue(this.parentNode.previousSibling.firstChild)));\n}\n\n/** Edit enum or set\n* @this HTMLInputElement\n*/\nfunction editingLengthFocus() {\n\tconst td = this.parentNode;\n\tif (/^(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {\n\t\tconst edit = qs('#enum-edit');\n\t\tedit.value = enumValues(this.value);\n\t\ttd.appendChild(edit);\n\t\tthis.style.display = 'none';\n\t\tedit.style.display = 'inline';\n\t\tedit.focus();\n\t}\n}\n\n/** Get enum values\n* @param string\n* @return string values separated by newlines\n*/\nfunction enumValues(s) {\n\tconst re = /(^|,)\\s*'(([^\\\\']|\\\\.|'')*)'\\s*/g;\n\tconst result = [];\n\tlet offset = 0;\n\tlet match;\n\twhile ((match = re.exec(s))) {\n\t\tif (offset != match.index) {\n\t\t\tbreak;\n\t\t}\n\t\tresult.push(match[2].replace(/'(')|\\\\(.)/g, '$1$2'));\n\t\toffset += match[0].length;\n\t}\n\treturn (offset == s.length ? result.join('\\n') : s);\n}\n\n/** Finish editing of enum or set\n* @this HTMLTextAreaElement\n*/\nfunction editingLengthBlur() {\n\tconst field = this.parentNode.firstChild;\n\tconst val = this.value;\n\tfield.value = (/^'[^\\n]+'$/.test(val) ? val : val && \"'\" + val.replace(/\\n+$/, '').replace(/'/g, \"''\").replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, \"','\") + \"'\");\n\tfield.style.display = 'inline';\n\tthis.style.display = 'none';\n}\n\n/** Show or hide selected table column\n* @param boolean\n* @param number\n*/\nfunction columnShow(checked, column) {\n\tfor (const tr of qsa('tr', qs('#edit-fields'))) {\n\t\talterClass(qsa('td', tr)[column], 'hidden', !checked);\n\t}\n}\n\n/** Show or hide index column options\n* @param boolean\n*/\nfunction indexOptionsShow(checked) {\n\tfor (const option of qsa('.idxopts')) {\n\t\talterClass(option, 'hidden', !checked);\n\t}\n}\n\n/** Display partition options\n* @this HTMLSelectElement\n*/\nfunction partitionByChange() {\n\tconst partitionTable = /RANGE|LIST/.test(selectValue(this));\n\talterClass(this.form['partitions'], 'hidden', partitionTable || !this.selectedIndex);\n\talterClass(qs('#partition-table'), 'hidden', !partitionTable);\n\thelpClose();\n}\n\n/** Add next partition row\n* @this HTMLInputElement\n*/\nfunction partitionNameChange() {\n\tconst row = cloneNode(parentTag(this, 'tr'));\n\trow.firstChild.firstChild.value = '';\n\tparentTag(this, 'table').appendChild(row);\n\tthis.oninput = () => { };\n}\n\n/** Show or hide comment fields\n* @param HTMLInputElement\n* @param [boolean] whether to focus Comment if checked\n*/\nfunction editingCommentsClick(el, focus) {\n\tconst comment = el.form['Comment'];\n\tcolumnShow(el.checked, 6);\n\talterClass(comment, 'hidden', !el.checked);\n\tif (focus && el.checked) {\n\t\tcomment.focus();\n\t}\n}\n\n\n\n/** Uncheck 'all' checkbox\n* @param MouseEvent\n* @this HTMLTableElement\n*/\nfunction dumpClick(event) {\n\tlet el = parentTag(event.target, 'label');\n\tif (el) {\n\t\tel = qs('input', el);\n\t\tconst match = /(.+)\\[]$/.exec(el.name);\n\t\tif (match) {\n\t\t\tcheckboxClick.call(el, event);\n\t\t\tformUncheck('check-' + match[1]);\n\t\t}\n\t}\n}\n\n\n\n/** Add row for foreign key\n* @this HTMLSelectElement\n*/\nfunction foreignAddRow() {\n\tconst row = cloneNode(parentTag(this, 'tr'));\n\tthis.onchange = () => { };\n\tfor (const select of qsa('select', row)) {\n\t\tselect.name = select.name.replace(/\\d+]/, '1$&');\n\t\tselect.selectedIndex = 0;\n\t}\n\tparentTag(this, 'table').appendChild(row);\n}\n\n\n\n/** Add row for indexes\n* @this HTMLSelectElement\n*/\nfunction indexesAddRow() {\n\tconst row = cloneNode(parentTag(this, 'tr'));\n\tthis.onchange = () => { };\n\tfor (const select of qsa('select', row)) {\n\t\tselect.name = select.name.replace(/indexes\\[\\d+/, '$&1');\n\t\tselect.selectedIndex = 0;\n\t}\n\tfor (const input of qsa('input', row)) {\n\t\tinput.name = input.name.replace(/indexes\\[\\d+/, '$&1');\n\t\tinput.value = '';\n\t}\n\tparentTag(this, 'table').appendChild(row);\n}\n\n/** Change column in index\n* @param string name prefix\n* @this HTMLSelectElement\n*/\nfunction indexesChangeColumn(prefix) {\n\tconst names = [];\n\tfor (const tag in { 'select': 1, 'input': 1 }) {\n\t\tfor (const column of qsa(tag, parentTag(this, 'td'))) {\n\t\t\tif (/\\[columns]/.test(column.name)) {\n\t\t\t\tconst value = selectValue(column);\n\t\t\t\tif (value) {\n\t\t\t\t\tnames.push(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tthis.form[this.name.replace(/].*/, '][name]')].value = prefix + names.join('_');\n}\n\n/** Add column for index\n* @param string name prefix\n* @this HTMLSelectElement\n*/\nfunction indexesAddColumn(prefix) {\n\tconst field = this;\n\tconst select = field.form[field.name.replace(/].*/, '][type]')];\n\tif (!select.selectedIndex) {\n\t\twhile (selectValue(select) != \"INDEX\" && select.selectedIndex < select.options.length) {\n\t\t\tselect.selectedIndex++;\n\t\t}\n\t\tselect.onchange();\n\t}\n\tconst column = cloneNode(field.parentNode);\n\tfor (const select of qsa('select', column)) {\n\t\tselect.name = select.name.replace(/]\\[\\d+/, '$&1');\n\t\tselect.selectedIndex = 0;\n\t}\n\tfield.onchange = partial(indexesChangeColumn, prefix);\n\tfor (const input of qsa('input', column)) {\n\t\tinput.name = input.name.replace(/]\\[\\d+/, '$&1');\n\t\tif (input.type != 'checkbox') {\n\t\t\tinput.value = '';\n\t\t}\n\t}\n\tparentTag(field, 'td').appendChild(column);\n\tfield.onchange();\n}\n\n\n\n/** Update the form action\n* @param HTMLFormElement\n* @param string\n*/\nfunction sqlSubmit(form, root) {\n\tconst action = root\n\t\t+ '&sql=' + encodeURIComponent(form['query'].value)\n\t\t+ (form['limit'].value ? '&limit=' + +form['limit'].value : '')\n\t\t+ (form['error_stops'].checked ? '&error_stops=1' : '')\n\t\t+ (form['only_errors'].checked ? '&only_errors=1' : '')\n\t;\n\tif ((document.location.origin + document.location.pathname + action).length < 2000) { // reasonable minimum is 2048\n\t\tform.action = action;\n\t}\n}\n\n/** Check if PHP can handle the uploaded files\n* @param Event\n* @param number\n* @param string\n* @param number\n* @param string\n*/\nfunction fileChange(event, count, countMessage, size, sizeMessage) {\n\tif (event.target.files.length > count) {\n\t\talert(countMessage);\n\t} else if (Array.from(event.target.files).reduce((sum, file) => sum + file.size, 0) > size) {\n\t\talert(sizeMessage);\n\t}\n}\n\n\n\n/** Handle changing trigger time or event\n* @param RegExp\n* @param string\n* @param HTMLFormElement\n*/\nfunction triggerChange(tableRe, table, form) {\n\tconst formEvent = selectValue(form['Event']);\n\tif (tableRe.test(form['Trigger'].value)) {\n\t\tform['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();\n\t}\n\talterClass(form['Of'], 'hidden', !/ OF/.test(formEvent));\n}\n\n\n\nlet that, x, y; // em and tablePos defined in schema.inc.php\n\n/** Get mouse position\n* @param MouseEvent\n* @this HTMLElement\n*/\nfunction schemaMousedown(event) {\n\tif ((event.which || event.button) == 1) {\n\t\tthat = this;\n\t\tx = event.clientX - this.offsetLeft;\n\t\ty = event.clientY - this.offsetTop;\n\t}\n}\n\n/** Move object\n* @param MouseEvent\n*/\nfunction schemaMousemove(event) {\n\tif (that !== undefined) {\n\t\tconst left = (event.clientX - x) / em;\n\t\tconst top = (event.clientY - y) / em;\n\t\tconst lineSet = { };\n\t\tfor (const div of qsa('div', that)) {\n\t\t\tif (div.classList.contains('references')) {\n\t\t\t\tconst div2 = qs('[id=\"' + (/^refs/.test(div.id) ? 'refd' : 'refs') + div.id.substr(4) + '\"]');\n\t\t\t\tconst ref = (tablePos[div.title] || [ div2.parentNode.offsetTop / em, 0 ]);\n\t\t\t\tlet left1 = -1;\n\t\t\t\tconst id = div.id.replace(/^ref.(.+)-.+/, '$1');\n\t\t\t\tif (div.parentNode != div2.parentNode) {\n\t\t\t\t\tleft1 = Math.min(0, ref[1] - left) - 1;\n\t\t\t\t\tdiv.style.left = left1 + 'em';\n\t\t\t\t\tdiv.querySelector('div').style.width = -left1 + 'em';\n\t\t\t\t\tconst left2 = Math.min(0, left - ref[1]) - 1;\n\t\t\t\t\tdiv2.style.left = left2 + 'em';\n\t\t\t\t\tdiv2.querySelector('div').style.width = -left2 + 'em';\n\t\t\t\t}\n\t\t\t\tif (!lineSet[id]) {\n\t\t\t\t\tconst line = qs('[id=\"' + div.id.replace(/^....(.+)-.+$/, 'refl$1') + '\"]');\n\t\t\t\t\tconst top1 = top + div.offsetTop / em;\n\t\t\t\t\tlet top2 = top + div2.offsetTop / em;\n\t\t\t\t\tif (div.parentNode != div2.parentNode) {\n\t\t\t\t\t\ttop2 += ref[0] - top;\n\t\t\t\t\t\tline.querySelector('div').style.height = Math.abs(top1 - top2) + 'em';\n\t\t\t\t\t}\n\t\t\t\t\tline.style.left = (left + left1) + 'em';\n\t\t\t\t\tline.style.top = Math.min(top1, top2) + 'em';\n\t\t\t\t\tlineSet[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthat.style.left = left + 'em';\n\t\tthat.style.top = top + 'em';\n\t}\n}\n\n/** Finish move\n* @param MouseEvent\n* @param string\n*/\nfunction schemaMouseup(event, db) {\n\tif (that !== undefined) {\n\t\ttablePos[that.firstChild.firstChild.firstChild.data] = [ (event.clientY - y) / em, (event.clientX - x) / em ];\n\t\tthat = undefined;\n\t\tlet s = '';\n\t\tfor (const key in tablePos) {\n\t\t\ts += '_' + key + ':' + Math.round(tablePos[key][0]) + 'x' + Math.round(tablePos[key][1]);\n\t\t}\n\t\ts = encodeURIComponent(s.substr(1));\n\t\tconst link = qs('#schema-link');\n\t\tlink.href = link.href.replace(/[^=]+$/, '') + s;\n\t\tcookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db\n\t}\n}\n\n\n\nlet helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it\n\n/** Display help\n* @param MouseEvent\n* @param string\n* @param bool display on left side (otherwise on top)\n* @this HTMLElement\n*/\nfunction helpMouseover(event, text, side) {\n\tconst target = event.target;\n\tif (!text) {\n\t\thelpClose();\n\t} else if (window.jush && (!helpIgnore || this != target)) {\n\t\thelpOpen = 1;\n\t\tconst help = qs('#help');\n\t\thelp.innerHTML = text;\n\t\tjush.highlight_tag([ help ]);\n\t\talterClass(help, 'hidden');\n\t\tconst rect = target.getBoundingClientRect();\n\t\tconst body = document.documentElement;\n\t\thelp.style.top = (body.scrollTop + rect.top - (side ? (help.offsetHeight - target.offsetHeight) / 2 : help.offsetHeight)) + 'px';\n\t\thelp.style.left = (body.scrollLeft + rect.left - (side ? help.offsetWidth : (help.offsetWidth - target.offsetWidth) / 2)) + 'px';\n\t}\n}\n\n/** Close help after timeout\n* @param MouseEvent\n* @this HTMLElement\n*/\nfunction helpMouseout(event) {\n\thelpOpen = 0;\n\thelpIgnore = (this != event.target);\n\tsetTimeout(() => {\n\t\tif (!helpOpen) {\n\t\t\thelpClose();\n\t\t}\n\t}, 200);\n}\n\n/** Close help\n*/\nfunction helpClose() {\n\talterClass(qs('#help'), 'hidden', true);\n}\n"
  },
  {
    "path": "adminer/static/functions.js",
    "content": "'use strict';\n\n/** Get first element by selector\n* @param string\n* @param [HTMLElement] defaults to document\n* @return HTMLElement\n*/\nfunction qs(selector, context) {\n\treturn (context || document).querySelector(selector);\n}\n\n/** Get last element by selector\n* @param string\n* @param [HTMLElement] defaults to document\n* @return HTMLElement\n*/\nfunction qsl(selector, context) {\n\tconst els = qsa(selector, context);\n\treturn els[els.length - 1];\n}\n\n/** Get all elements by selector\n* @param string\n* @param [HTMLElement] defaults to document\n* @return NodeList\n*/\nfunction qsa(selector, context) {\n\treturn (context || document).querySelectorAll(selector);\n}\n\n/** Return a function calling fn with the next arguments\n* @param function\n* @param ...\n* @return function with preserved this\n*/\nfunction partial(fn) {\n\tconst args = Array.apply(null, arguments).slice(1);\n\treturn function () {\n\t\treturn fn.apply(this, args);\n\t};\n}\n\n/** Return a function calling fn with the first parameter and then the next arguments\n* @param function\n* @param ...\n* @return function with preserved this\n*/\nfunction partialArg(fn) {\n\tconst args = Array.apply(null, arguments);\n\treturn function (arg) {\n\t\targs[0] = arg;\n\t\treturn fn.apply(this, args);\n\t};\n}\n\n/** Assign values from source to target\n* @param Object\n* @param Object\n*/\nfunction mixin(target, source) {\n\tfor (const key in source) {\n\t\ttarget[key] = source[key];\n\t}\n}\n\n/** Add or remove CSS class\n* @param HTMLElement\n* @param string\n* @param [boolean]\n*/\nfunction alterClass(el, className, enable) {\n\tif (el) {\n\t\tel.classList[enable ? 'add' : 'remove'](className);\n\t}\n}\n\n/** Toggle visibility\n* @param string\n* @return boolean false\n*/\nfunction toggle(id) {\n\tconst el = qs('#' + id);\n\tel && el.classList.toggle('hidden');\n\treturn false;\n}\n\n/** Set permanent cookie\n* @param string\n* @param number\n*/\nfunction cookie(assign, days) {\n\tconst date = new Date();\n\tdate.setDate(date.getDate() + days);\n\tdocument.cookie = assign + '; expires=' + date;\n}\n\n/** Verify current Adminer version\n* @param string\n*/\nfunction verifyVersion(current) {\n\tcookie('adminer_version=0', 1);\n\t// do not send X-Requested-With to avoid preflight\n\tfetch('https://www.adminer.org/version/?current=' + current).then(async response => {\n\t\tconst json = await response.json();\n\t\tcookie('adminer_version=' + (json.version || current), 7); // empty if there's no newer version\n\t\tqs('#version').textContent = json.version;\n\t});\n}\n\n/** Get value of select\n* @param HTMLElement <select> or <input>\n* @return string\n*/\nfunction selectValue(select) {\n\tif (!select.selectedIndex) {\n\t\treturn select.value;\n\t}\n\tconst selected = select.options[select.selectedIndex];\n\treturn ((selected.attributes.value || {}).specified ? selected.value : selected.text);\n}\n\n/** Verify if element has a specified tag name\n* @param HTMLElement\n* @param string regular expression\n* @return boolean\n*/\nfunction isTag(el, tag) {\n\tconst re = new RegExp('^(' + tag + ')$', 'i');\n\treturn el && re.test(el.tagName);\n}\n\n/** Get parent node with specified tag name\n* @param HTMLElement\n* @param string regular expression\n* @return HTMLElement\n*/\nfunction parentTag(el, tag) {\n\twhile (el && !isTag(el, tag)) {\n\t\tel = el.parentNode;\n\t}\n\treturn el;\n}\n\n/** Set checked class\n* @param HTMLInputElement\n*/\nfunction trCheck(el) {\n\tconst tr = parentTag(el, 'tr');\n\talterClass(tr, 'checked', el.checked);\n\tif (el.form && el.form['all'] && el.form['all'].onclick) { // Opera treats form.all as document.all\n\t\tel.form['all'].onclick();\n\t}\n}\n\n/** Fill number of selected items\n* @param string\n* @param string\n* @uses thousandsSeparator\n*/\nfunction selectCount(id, count) {\n\tsetHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\\B(?=(\\d{3})+$)/g, thousandsSeparator) + ')'));\n\tconst el = qs('#' + id);\n\tif (el) {\n\t\tfor (const input of qsa('input', el.parentNode.parentNode)) {\n\t\t\tif (input.type == 'submit') {\n\t\t\t\tinput.disabled = (count == '0');\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Check all elements matching given name\n* @param RegExp\n* @this HTMLInputElement\n*/\nfunction formCheck(name) {\n\tfor (const elem of this.form.elements) {\n\t\tif (name.test(elem.name)) {\n\t\t\telem.checked = this.checked;\n\t\t\ttrCheck(elem);\n\t\t}\n\t}\n}\n\n/** Check all rows in <table class=\"checkable\">\n*/\nfunction tableCheck() {\n\tfor (const input of qsa('table.checkable td:first-child input')) {\n\t\ttrCheck(input);\n\t}\n}\n\n/** Uncheck single element\n* @param string\n*/\nfunction formUncheck(id) {\n\tconst el = qs('#' + id);\n\tel.checked = false;\n\ttrCheck(el);\n}\n\n/** Get number of checked elements matching given name\n* @param HTMLInputElement\n* @param RegExp\n* @return number\n*/\nfunction formChecked(input, name) {\n\tlet checked = 0;\n\tfor (const el of input.form.elements) {\n\t\tif (name.test(el.name) && el.checked) {\n\t\t\tchecked++;\n\t\t}\n\t}\n\treturn checked;\n}\n\n/** Select clicked row\n* @param MouseEvent\n* @param [boolean] force click\n*/\nfunction tableClick(event, click) {\n\tconst td = parentTag(event.target, 'td');\n\tlet text;\n\tif (td && (text = td.dataset.text)) {\n\t\tif (selectClick.call(td, event, +text, td.dataset.warning)) {\n\t\t\treturn;\n\t\t}\n\t}\n\tclick = (click || !window.getSelection || getSelection().isCollapsed);\n\tlet el = event.target;\n\twhile (!isTag(el, 'tr')) {\n\t\tif (isTag(el, 'table|a|input|textarea')) {\n\t\t\tif (el.type != 'checkbox') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcheckboxClick.call(el, event);\n\t\t\tclick = false;\n\t\t}\n\t\tel = el.parentNode;\n\t\tif (!el) { // Ctrl+click on text fields hides the element\n\t\t\treturn;\n\t\t}\n\t}\n\tel = el.firstChild.firstChild;\n\tif (click) {\n\t\tel.checked = !el.checked;\n\t\tel.onclick && el.onclick();\n\t}\n\tif (el.name == 'check[]') {\n\t\tel.form['all'].checked = false;\n\t\tformUncheck('all-page');\n\t}\n\tif (/^(tables|views)\\[\\]$/.test(el.name)) {\n\t\tformUncheck('check-all');\n\t}\n\ttrCheck(el);\n}\n\nlet lastChecked;\n\n/** Shift-click on checkbox for multiple selection.\n* @param MouseEvent\n* @this HTMLInputElement\n*/\nfunction checkboxClick(event) {\n\tif (!this.name) {\n\t\treturn;\n\t}\n\tif (event.shiftKey && (!lastChecked || lastChecked.name == this.name)) {\n\t\tconst checked = (lastChecked ? lastChecked.checked : true);\n\t\tlet checking = !lastChecked;\n\t\tfor (const input of qsa('input', parentTag(this, 'table'))) {\n\t\t\tif (input.name === this.name) {\n\t\t\t\tif (checking) {\n\t\t\t\t\tinput.checked = checked;\n\t\t\t\t\ttrCheck(input);\n\t\t\t\t}\n\t\t\t\tif (input === this || input === lastChecked) {\n\t\t\t\t\tif (checking) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tchecking = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tlastChecked = this;\n\t}\n}\n\n/** Set HTML code of an element\n* @param string\n* @param string undefined to set parentNode to empty string\n*/\nfunction setHtml(id, html) {\n\tconst el = qs('[id=\"' + id.replace(/[\\\\\"]/g, '\\\\$&') + '\"]'); // database name is used as ID\n\tif (el) {\n\t\tif (html == null) {\n\t\t\tel.parentNode.innerHTML = '';\n\t\t} else {\n\t\t\tel.innerHTML = html;\n\t\t}\n\t}\n}\n\n/** Find node position\n* @param Node\n* @return number\n*/\nfunction nodePosition(el) {\n\tlet pos = 0;\n\twhile ((el = el.previousSibling)) {\n\t\tpos++;\n\t}\n\treturn pos;\n}\n\n/** Go to the specified page\n* @param string\n* @param string\n*/\nfunction pageClick(href, page) {\n\tif (!isNaN(page) && page) {\n\t\tlocation.href = href + (page != 1 ? '&page=' + (page - 1) : '');\n\t}\n}\n\n\n\n/** Display items in menu\n* @param MouseEvent\n* @this HTMLElement\n*/\nfunction menuOver(event) {\n\tconst a = event.target;\n\tif (isTag(a, 'a|span') && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis\n\t\tthis.style.overflow = 'visible';\n\t}\n}\n\n/** Hide items in menu\n* @this HTMLElement\n*/\nfunction menuOut() {\n\tthis.style.overflow = 'hidden';\n}\n\n\n\n/** Add row in select fieldset\n* @this HTMLSelectElement\n*/\nfunction selectAddRow() {\n\tconst field = this;\n\tconst row = cloneNode(field.parentNode);\n\tfield.onchange = selectFieldChange;\n\tfield.onchange();\n\tfor (const select of qsa('select', row)) {\n\t\tselect.name = select.name.replace(/[a-z]\\[\\d+/, '$&1');\n\t\tselect.selectedIndex = 0;\n\t}\n\tfor (const input of qsa('input', row)) {\n\t\tinput.name = input.name.replace(/[a-z]\\[\\d+/, '$&1');\n\t\tinput.className = '';\n\t\tif (input.type == 'checkbox') {\n\t\t\tinput.checked = false;\n\t\t} else {\n\t\t\tinput.value = '';\n\t\t}\n\t}\n\tfield.parentNode.parentNode.appendChild(row);\n}\n\n/** Prevent onsearch handler on Enter\n* @param KeyboardEvent\n* @this HTMLInputElement\n*/\nfunction selectSearchKeydown(event) {\n\tif (event.keyCode == 13 || event.keyCode == 10) {\n\t\tthis.onsearch = () => { };\n\t}\n}\n\n/** Clear column name after resetting search\n* @this HTMLInputElement\n*/\nfunction selectSearchSearch() {\n\tif (!this.value) {\n\t\tthis.parentNode.firstChild.selectedIndex = 0;\n\t}\n}\n\n\n\n/** Toggle column context menu\n* @param [string] extra class name\n* @this HTMLElement\n*/\nfunction columnMouse(className) {\n\tfor (const span of qsa('span', this)) {\n\t\tif (/column/.test(span.className)) {\n\t\t\tspan.className = 'column' + (className || '');\n\t\t}\n\t}\n}\n\n\n\n/** Fill column in search field\n* @param string\n* @return boolean false\n*/\nfunction selectSearch(name) {\n\tlet el = qs('#fieldset-search');\n\tel.className = '';\n\tconst divs = qsa('div', el);\n\tlet i, div;\n\tfor (i=0; i < divs.length; i++) {\n\t\tdiv = divs[i];\n\t\tel = qs('[name$=\"[col]\"]', div);\n\t\tif (el && selectValue(el) == name) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (i == divs.length) {\n\t\tdiv.firstChild.value = name;\n\t\tdiv.firstChild.onchange();\n\t}\n\tqs('[name$=\"[val]\"]', div).focus();\n\treturn false;\n}\n\n\n/** Check if Ctrl key (Command key on Mac) was pressed\n* @param KeyboardEvent|MouseEvent\n* @return boolean\n*/\nfunction isCtrl(event) {\n\treturn (event.ctrlKey || event.metaKey) && !event.altKey; // shiftKey allowed\n}\n\n\n\n/** Send form by Ctrl+Enter on <select> and <textarea>\n* @param KeyboardEvent\n* @param [string]\n* @return boolean\n*/\nfunction bodyKeydown(event, button) {\n\teventStop(event);\n\tlet target = event.target;\n\tif (target.jushTextarea) {\n\t\ttarget = target.jushTextarea;\n\t}\n\tif (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10) && isTag(target, 'select|textarea|input')) { // 13|10 - Enter\n\t\ttarget.blur();\n\t\tif (target.form[button]) {\n\t\t\ttarget.form[button].click();\n\t\t} else {\n\t\t\ttarget.form.dispatchEvent(new Event('submit', {bubbles: true}));\n\t\t\ttarget.form.submit();\n\t\t}\n\t\ttarget.focus();\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/** Open form to a new window on Ctrl+click or Shift+click\n* @param MouseEvent\n*/\nfunction bodyClick(event) {\n\tconst target = event.target;\n\tif ((isCtrl(event) || event.shiftKey) && target.type == 'submit' && isTag(target, 'input')) {\n\t\ttarget.form.target = '_blank';\n\t\tsetTimeout(() => {\n\t\t\t// if (isCtrl(event)) { focus(); } doesn't work\n\t\t\ttarget.form.target = '';\n\t\t}, 0);\n\t}\n}\n\n\n\n/** Change focus by Ctrl+Shift+Up or Ctrl+Shift+Down\n* @param KeyboardEvent\n* @return boolean\n*/\nfunction editingKeydown(event) {\n\tif ((event.keyCode == 40 || event.keyCode == 38) && isCtrl(event)) { // 40 - Down, 38 - Up\n\t\tconst target = event.target;\n\t\tconst sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');\n\t\tlet el = target.parentNode.parentNode[sibling];\n\t\tif (el && (isTag(el, 'tr') || (el = el[sibling])) && isTag(el, 'tr') && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {\n\t\t\tel.focus();\n\t\t}\n\t\treturn false;\n\t}\n\tif (event.shiftKey && !bodyKeydown(event, 'insert')) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/** Disable maxlength for functions\n* @this HTMLSelectElement\n*/\nfunction functionChange() {\n\tconst input = this.form[this.name.replace(/^function/, 'fields')];\n\tif (input) { // undefined with the set data type\n\t\tif (selectValue(this)) {\n\t\t\tif (input.origType === undefined) {\n\t\t\t\tinput.origType = input.type;\n\t\t\t\tinput.origMaxLength = input.dataset.maxlength;\n\t\t\t}\n\t\t\tdelete input.dataset.maxlength;\n\t\t\tinput.type = 'text';\n\t\t} else if (input.origType) {\n\t\t\tinput.type = input.origType;\n\t\t\tif (input.origMaxLength >= 0) {\n\t\t\t\tinput.dataset.maxlength = input.origMaxLength;\n\t\t\t}\n\t\t}\n\t\toninput({target: input});\n\t}\n\thelpClose();\n}\n\n/** Skip 'original' when typing\n* @param number\n* @this HTMLTableCellElement\n*/\nfunction skipOriginal(first) {\n\tconst fnSelect = qs('select', this.previousSibling);\n\tif (fnSelect.selectedIndex < first) {\n\t\tfnSelect.selectedIndex = first;\n\t}\n}\n\n/** Add new field in schema-less edit\n* @this HTMLInputElement\n*/\nfunction fieldChange() {\n\tconst row = cloneNode(parentTag(this, 'tr'));\n\tfor (const input of qsa('input', row)) {\n\t\tinput.value = '';\n\t}\n\t// keep value in <select> (function)\n\tparentTag(this, 'table').appendChild(row);\n\tthis.oninput = () => { };\n}\n\n\n\n/** Create AJAX request\n* @param string\n* @param function (XMLHttpRequest)\n* @param [string]\n* @param [string]\n* @return XMLHttpRequest or false in case of an error\n* @uses offlineMessage\n*/\nfunction ajax(url, callback, data, message) {\n\tconst request = new XMLHttpRequest();\n\tif (request) {\n\t\tconst ajaxStatus = qs('#ajaxstatus');\n\t\tif (message) {\n\t\t\tajaxStatus.innerHTML = '<div class=\"message\">' + message + '</div>';\n\t\t}\n\t\talterClass(ajaxStatus, 'hidden', !message);\n\t\trequest.open((data ? 'POST' : 'GET'), url);\n\t\tif (data) {\n\t\t\trequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n\t\t}\n\t\trequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n\t\trequest.onreadystatechange = () => {\n\t\t\tif (request.readyState == 4) {\n\t\t\t\tif (/^2/.test(request.status)) {\n\t\t\t\t\tcallback(request);\n\t\t\t\t} else if (message !== null) {\n\t\t\t\t\tajaxStatus.innerHTML = (request.status ? request.responseText : '<div class=\"error\">' + offlineMessage + '</div>');\n\t\t\t\t\talterClass(ajaxStatus, 'hidden');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\trequest.send(data);\n\t}\n\treturn request;\n}\n\n/** Use setHtml(key, value) for JSON response\n* @param string\n* @return boolean false for success\n*/\nfunction ajaxSetHtml(url) {\n\treturn !ajax(url, request => {\n\t\tconst data = JSON.parse(request.responseText);\n\t\tfor (const key in data) {\n\t\t\tsetHtml(key, data[key]);\n\t\t}\n\t});\n}\n\nlet editChanged; // used by plugins\nlet adminerHighlighter = els => {}; // overwritten by syntax highlighters\n\n/** Save form contents through AJAX\n* @param HTMLFormElement\n* @param string\n* @param [HTMLInputElement]\n* @return boolean\n*/\nfunction ajaxForm(form, message, button) {\n\tlet data = [];\n\tfor (const el of form.elements) {\n\t\tif (el.name && !el.disabled) {\n\t\t\tif (/^file$/i.test(el.type) && el.value) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!/^(checkbox|radio|submit|file)$/i.test(el.type) || el.checked || el == button) {\n\t\t\t\tdata.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(isTag(el, 'select') ? selectValue(el) : el.value));\n\t\t\t}\n\t\t}\n\t}\n\tdata = data.join('&');\n\n\tlet url = form.action;\n\tif (!/post/i.test(form.method)) {\n\t\turl = url.replace(/\\?.*/, '') + '?' + data;\n\t\tdata = '';\n\t}\n\treturn ajax(url, request => {\n\t\tconst ajaxstatus = qs('#ajaxstatus');\n\t\tsetHtml('ajaxstatus', request.responseText);\n\t\tif (qs('.message', ajaxstatus)) { // success\n\t\t\teditChanged = null;\n\t\t}\n\t\tadminerHighlighter(qsa('code', ajaxstatus));\n\t\tmessagesPrint(ajaxstatus);\n\t}, data, message);\n}\n\n\n\n/** Display edit field\n* @param MouseEvent\n* @param number display textarea instead of input, 2 - load long text\n* @param [string] warning to display\n* @return boolean\n* @this HTMLElement\n*/\nfunction selectClick(event, text, warning) {\n\tconst td = this;\n\tconst target = event.target;\n\tif (!isCtrl(event) || isTag(td.firstChild, 'input|textarea') || isTag(target, 'a')) {\n\t\treturn;\n\t}\n\tif (warning) {\n\t\talert(warning);\n\t\treturn true;\n\t}\n\tconst original = td.innerHTML;\n\ttext = text || /\\n/.test(original);\n\tconst input = document.createElement(text ? 'textarea' : 'input');\n\tinput.onkeydown = event => {\n\t\tif (event.keyCode == 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc\n\t\t\tinputBlur.apply(input);\n\t\t\ttd.innerHTML = original;\n\t\t}\n\t};\n\n\tconst pos = getSelection().anchorOffset;\n\tlet value = (td.firstChild && td.firstChild.alt) || td.textContent;\n\tconst tdStyle = window.getComputedStyle(td, null);\n\n\tinput.style.width = Math.max(td.clientWidth - parseFloat(tdStyle.paddingLeft) - parseFloat(tdStyle.paddingRight), (text ? 200 : 20)) + 'px';\n\n\tif (text) {\n\t\tlet rows = 1;\n\t\tvalue.replace(/\\n/g, () => {\n\t\t\trows++;\n\t\t});\n\t\tinput.rows = rows;\n\t}\n\tif (qsa('i', td).length) { // <i> - NULL\n\t\tvalue = '';\n\t}\n\ttd.innerHTML = '';\n\ttd.appendChild(input);\n\tsetupSubmitHighlight(td);\n\tinput.focus();\n\tif (text == 2) { // long text\n\t\treturn ajax(location.href + '&' + encodeURIComponent(td.id) + '=', request => {\n\t\t\tif (request.responseText) {\n\t\t\t\tinput.value = request.responseText;\n\t\t\t\tinput.name = td.id;\n\t\t\t}\n\t\t});\n\t}\n\tinput.value = value;\n\tinput.name = td.id;\n\tinput.selectionStart = pos;\n\tinput.selectionEnd = pos;\n\treturn true;\n}\n\n\n\n/** Load and display next page in select\n* @param number\n* @param string\n* @return boolean false for success\n* @this HTMLLinkElement\n*/\nfunction selectLoadMore(limit, loading) {\n\tconst a = this;\n\tconst title = a.innerHTML;\n\tconst href = a.href;\n\ta.innerHTML = loading;\n\tif (href) {\n\t\ta.removeAttribute('href');\n\t\treturn !ajax(href, request => {\n\t\t\tconst tbody = document.createElement('tbody');\n\t\t\ttbody.innerHTML = request.responseText;\n\t\t\tadminerHighlighter(qsa('code', tbody));\n\t\t\tqs('#table').appendChild(tbody);\n\t\t\tif (tbody.children.length < limit) {\n\t\t\t\ta.remove();\n\t\t\t} else {\n\t\t\t\ta.href = href.replace(/\\d+$/, page => +page + 1);\n\t\t\t\ta.innerHTML = title;\n\t\t\t}\n\t\t});\n\t}\n}\n\n\n\n/** Stop event propagation\n* @param Event\n*/\nfunction eventStop(event) {\n\tevent.stopPropagation();\n}\n\n\n\n/** Setup highlighting of default submit button on form field focus\n* @param HTMLElement\n*/\nfunction setupSubmitHighlight(parent) {\n\tfor (const input of qsa('input, select, textarea', parent)) {\n\t\tsetupSubmitHighlightInput(input);\n\t}\n}\n\n/** Setup submit highlighting for single element\n* @param HTMLElement\n*/\nfunction setupSubmitHighlightInput(input) {\n\tif (!/submit|button|image|file/.test(input.type)) {\n\t\taddEvent(input, 'focus', inputFocus);\n\t\taddEvent(input, 'blur', inputBlur);\n\t}\n}\n\n/** Highlight default submit button\n* @this HTMLInputElement\n*/\nfunction inputFocus() {\n\talterClass(findDefaultSubmit(this), 'default', true);\n}\n\n/** Unhighlight default submit button\n* @this HTMLInputElement\n*/\nfunction inputBlur() {\n\talterClass(findDefaultSubmit(this), 'default');\n}\n\n/** Find submit button used by Enter\n* @param HTMLElement\n* @return HTMLInputElement\n*/\nfunction findDefaultSubmit(el) {\n\tif (el.jushTextarea) {\n\t\tel = el.jushTextarea;\n\t}\n\tif (!el.form) {\n\t\treturn null;\n\t}\n\tfor (const input of qsa('input', el.form)) {\n\t\tif (input.type == 'submit' && !input.style.zIndex) {\n\t\t\treturn input;\n\t\t}\n\t}\n}\n\n\n\n/** Add event listener\n* @param HTMLElement\n* @param string without 'on'\n* @param function\n*/\nfunction addEvent(el, action, handler) {\n\tel.addEventListener(action, handler, false);\n}\n\n/** Clone node and setup submit highlighting\n* @param HTMLElement\n* @return HTMLElement\n*/\nfunction cloneNode(el) {\n\tconst el2 = el.cloneNode(true);\n\tconst selector = 'input, select';\n\tconst origEls = qsa(selector, el);\n\tconst cloneEls = qsa(selector, el2);\n\tfor (let i=0; i < origEls.length; i++) {\n\t\tconst origEl = origEls[i];\n\t\tfor (const key in origEl) {\n\t\t\tif (/^on/.test(key) && origEl[key]) {\n\t\t\t\tcloneEls[i][key] = origEl[key];\n\t\t\t}\n\t\t}\n\t}\n\tsetupSubmitHighlight(el2);\n\treturn el2;\n}\n\noninput = event => {\n\tconst target = event.target;\n\tconst maxLength = target.dataset.maxlength;\n\talterClass(target, 'maxlength', target.value && maxLength != null && target.value.length > maxLength); // maxLength could be 0\n};\n\naddEvent(document, 'click', event => {\n\tif (!qs('#foot').contains(event.target)) {\n\t\talterClass(qs('#foot'), 'foot', true);\n\t}\n});\n"
  },
  {
    "path": "adminer/table.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"table\"];\n$fields = fields($TABLE);\nif (!$fields) {\n\t$error = error() ?: lang('No tables.');\n}\n$table_status = table_status1($TABLE);\n$name = adminer()->tableName($table_status);\n\npage_header(($fields && is_view($table_status) ? $table_status['Engine'] == 'materialized view' ? lang('Materialized view') : lang('View') : lang('Table')) . \": \" . ($name != \"\" ? $name : h($TABLE)), $error);\n\n$rights = array();\nforeach ($fields as $key => $field) {\n\t$rights += $field[\"privileges\"];\n}\nadminer()->selectLinks($table_status, (isset($rights[\"insert\"]) || !support(\"table\") ? \"\" : null));\n\n$comment = $table_status[\"Comment\"];\nif ($comment != \"\") {\n\techo \"<p class='nowrap'>\" . lang('Comment') . \": \" . h($comment) . \"\\n\";\n}\n\nif ($fields) {\n\tadminer()->tableStructurePrint($fields, $table_status);\n}\n\n/** Print links to tables\n* @param list<array{table: string, ns: string}> $tables\n*/\nfunction tables_links(array $tables): void {\n\techo \"<ul>\\n\";\n\tforeach ($tables as $row) {\n\t\t$link = preg_replace('~ns=[^&]*~', \"ns=\" . urlencode($row[\"ns\"]), ME);\n\t\techo \"<li><a href='\" . h($link . \"table=\" . urlencode($row[\"table\"])) . \"'>\" . ($row[\"ns\"] != $_GET[\"ns\"] ? \"<b>\" . h($row[\"ns\"]) . \"</b>.\" : \"\") . h($row[\"table\"]) . \"</a>\";\n\t}\n\techo \"</ul>\\n\";\n}\n\n$inherits = driver()->inheritsFrom($TABLE);\nif ($inherits) {\n\techo \"<h3>\" . lang('Inherits from') . \"</h3>\\n\";\n\ttables_links($inherits);\n}\n\nif (support(\"indexes\") && driver()->supportsIndex($table_status)) {\n\techo \"<h3 id='indexes'>\" . lang('Indexes') . \"</h3>\\n\";\n\t$indexes = indexes($TABLE);\n\tif ($indexes) {\n\t\tadminer()->tableIndexesPrint($indexes, $table_status);\n\t}\n\techo '<p class=\"links\"><a href=\"' . h(ME) . 'indexes=' . urlencode($TABLE) . '\">' . lang('Alter indexes') . \"</a>\\n\";\n}\n\nif (!is_view($table_status)) {\n\tif (fk_support($table_status)) {\n\t\techo \"<h3 id='foreign-keys'>\" . lang('Foreign keys') . \"</h3>\\n\";\n\t\t$foreign_keys = foreign_keys($TABLE);\n\t\tif ($foreign_keys) {\n\t\t\techo \"<table>\\n\";\n\t\t\techo \"<thead><tr><th>\" . lang('Source') . \"<td>\" . lang('Target') . \"<td>\" . lang('ON DELETE') . \"<td>\" . lang('ON UPDATE') . \"<td></thead>\\n\";\n\t\t\tforeach ($foreign_keys as $name => $foreign_key) {\n\t\t\t\techo \"<tr title='\" . h($name) . \"'>\";\n\t\t\t\techo \"<th><i>\" . implode(\"</i>, <i>\", array_map('Adminer\\h', $foreign_key[\"source\"])) . \"</i>\";\n\t\t\t\t$link = ($foreign_key[\"db\"] != \"\"\n\t\t\t\t\t? preg_replace('~db=[^&]*~', \"db=\" . urlencode($foreign_key[\"db\"]), ME)\n\t\t\t\t\t: ($foreign_key[\"ns\"] != \"\" ? preg_replace('~ns=[^&]*~', \"ns=\" . urlencode($foreign_key[\"ns\"]), ME) : ME)\n\t\t\t\t);\n\t\t\t\techo \"<td><a href='\" . h($link . \"table=\" . urlencode($foreign_key[\"table\"])) . \"'>\"\n\t\t\t\t\t. ($foreign_key[\"db\"] != \"\" && $foreign_key[\"db\"] != DB ? \"<b>\" . h($foreign_key[\"db\"]) . \"</b>.\" : \"\")\n\t\t\t\t\t. ($foreign_key[\"ns\"] != \"\" && $foreign_key[\"ns\"] != $_GET[\"ns\"] ? \"<b>\" . h($foreign_key[\"ns\"]) . \"</b>.\" : \"\")\n\t\t\t\t\t. h($foreign_key[\"table\"])\n\t\t\t\t\t. \"</a>\"\n\t\t\t\t;\n\t\t\t\techo \"(<i>\" . implode(\"</i>, <i>\", array_map('Adminer\\h', $foreign_key[\"target\"])) . \"</i>)\";\n\t\t\t\techo \"<td>\" . h($foreign_key[\"on_delete\"]);\n\t\t\t\techo \"<td>\" . h($foreign_key[\"on_update\"]);\n\t\t\t\techo '<td><a href=\"' . h(ME . 'foreign=' . urlencode($TABLE) . '&name=' . urlencode($name)) . '\">' . lang('Alter') . '</a>';\n\t\t\t\techo \"\\n\";\n\t\t\t}\n\t\t\techo \"</table>\\n\";\n\t\t}\n\t\techo '<p class=\"links\"><a href=\"' . h(ME) . 'foreign=' . urlencode($TABLE) . '\">' . lang('Add foreign key') . \"</a>\\n\";\n\t}\n\n\tif (support(\"check\")) {\n\t\techo \"<h3 id='checks'>\" . lang('Checks') . \"</h3>\\n\";\n\t\t$check_constraints = driver()->checkConstraints($TABLE);\n\t\tif ($check_constraints) {\n\t\t\techo \"<table>\\n\";\n\t\t\tforeach ($check_constraints as $key => $val) {\n\t\t\t\techo \"<tr title='\" . h($key) . \"'>\";\n\t\t\t\techo \"<td><code class='jush-\" . JUSH . \"'>\" . h($val);\n\t\t\t\techo \"<td><a href='\" . h(ME . 'check=' . urlencode($TABLE) . '&name=' . urlencode($key)) . \"'>\" . lang('Alter') . \"</a>\";\n\t\t\t\techo \"\\n\";\n\t\t\t}\n\t\t\techo \"</table>\\n\";\n\t\t}\n\t\techo '<p class=\"links\"><a href=\"' . h(ME) . 'check=' . urlencode($TABLE) . '\">' . lang('Create check') . \"</a>\\n\";\n\t}\n}\n\nif (support(is_view($table_status) ? \"view_trigger\" : \"trigger\")) {\n\techo \"<h3 id='triggers'>\" . lang('Triggers') . \"</h3>\\n\";\n\t$triggers = triggers($TABLE);\n\tif ($triggers) {\n\t\techo \"<table>\\n\";\n\t\tforeach ($triggers as $key => $val) {\n\t\t\techo \"<tr valign='top'><td>\" . h($val[0]) . \"<td>\" . h($val[1]) . \"<th>\" . h($key) . \"<td><a href='\" . h(ME . 'trigger=' . urlencode($TABLE) . '&name=' . urlencode($key)) . \"'>\" . lang('Alter') . \"</a>\\n\";\n\t\t}\n\t\techo \"</table>\\n\";\n\t}\n\techo '<p class=\"links\"><a href=\"' . h(ME) . 'trigger=' . urlencode($TABLE) . '\">' . lang('Add trigger') . \"</a>\\n\";\n}\n\n$inherited = driver()->inheritedTables($TABLE);\nif ($inherited) {\n\techo \"<h3 id='partitions'>\" . lang('Inherited by') . \"</h3>\\n\";\n\t$partition = driver()->partitionsInfo($TABLE);\n\tif ($partition) {\n\t\techo \"<p><code class='jush-\" . JUSH . \"'>BY \" . h(\"$partition[partition_by]($partition[partition])\") . \"</code>\\n\";\n\t}\n\ttables_links($inherited);\n}\n"
  },
  {
    "path": "adminer/trigger.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"trigger\"];\n$name = \"$_GET[name]\";\n$trigger_options = trigger_options();\n$row = (array) trigger($name, $TABLE) + array(\"Trigger\" => $TABLE . \"_bi\");\n\nif ($_POST) {\n\tif (!$error && in_array($_POST[\"Timing\"], $trigger_options[\"Timing\"]) && in_array($_POST[\"Event\"], $trigger_options[\"Event\"]) && in_array($_POST[\"Type\"], $trigger_options[\"Type\"])) {\n\t\t// don't use drop_create() because there may not be more triggers for the same action\n\t\t$on = \" ON \" . table($TABLE);\n\t\t$drop = \"DROP TRIGGER \" . idf_escape($name) . (JUSH == \"pgsql\" ? $on : \"\");\n\t\t$location = ME . \"table=\" . urlencode($TABLE);\n\t\tif ($_POST[\"drop\"]) {\n\t\t\tquery_redirect($drop, $location, lang('Trigger has been dropped.'));\n\t\t} else {\n\t\t\tif ($name != \"\") {\n\t\t\t\tqueries($drop);\n\t\t\t}\n\t\t\tqueries_redirect(\n\t\t\t\t$location,\n\t\t\t\t($name != \"\" ? lang('Trigger has been altered.') : lang('Trigger has been created.')),\n\t\t\t\tqueries(create_trigger($on, $_POST))\n\t\t\t);\n\t\t\tif ($name != \"\") {\n\t\t\t\tqueries(create_trigger($on, $row + array(\"Type\" => reset($trigger_options[\"Type\"]))));\n\t\t\t}\n\t\t}\n\t}\n\t$row = $_POST;\n}\n\npage_header(($name != \"\" ? lang('Alter trigger') . \": \" . h($name) : lang('Create trigger')), $error, array(\"table\" => $TABLE));\n?>\n\n<form action=\"\" method=\"post\" id=\"form\">\n<table class=\"layout\">\n<tr><th><?php echo lang('Time'); ?><td><?php echo html_select(\"Timing\", $trigger_options[\"Timing\"], $row[\"Timing\"], \"triggerChange(/^\" . preg_quote($TABLE, \"/\") . \"_[ba][iud]$/, '\" . js_escape($TABLE) . \"', this.form);\"); ?>\n<tr><th><?php echo lang('Event'); ?><td><?php echo html_select(\"Event\", $trigger_options[\"Event\"], $row[\"Event\"], \"this.form['Timing'].onchange();\"); ?>\n<?php echo (in_array(\"UPDATE OF\", $trigger_options[\"Event\"]) ? \" <input name='Of' value='\" . h($row[\"Of\"]) . \"' class='hidden'>\": \"\"); ?>\n<tr><th><?php echo lang('Type'); ?><td><?php echo html_select(\"Type\", $trigger_options[\"Type\"], $row[\"Type\"]); ?>\n</table>\n<p><?php echo lang('Name'); ?>: <input name=\"Trigger\" value=\"<?php echo h($row[\"Trigger\"]); ?>\" data-maxlength=\"64\" autocapitalize=\"off\">\n<?php echo script(\"qs('#form')['Timing'].onchange();\"); ?>\n<p><?php textarea(\"Statement\", $row[\"Statement\"]); ?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php if ($name != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $name)); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/type.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TYPE = $_GET[\"type\"];\n$row = $_POST;\n\nif ($_POST && !$error) {\n\t$link = substr(ME, 0, -1);\n\tif ($_POST[\"drop\"]) {\n\t\tquery_redirect(\"DROP TYPE \" . idf_escape($TYPE), $link, lang('Type has been dropped.'));\n\t} else {\n\t\tquery_redirect(\"CREATE TYPE \" . idf_escape(trim($row[\"name\"])) . \" $row[as]\", $link, lang('Type has been created.'));\n\t}\n}\n\npage_header($TYPE != \"\" ? lang('Alter type') . \": \" . h($TYPE) : lang('Create type'), $error);\n\nif (!$row) {\n\t$row[\"as\"] = \"AS \";\n}\n?>\n\n<form action=\"\" method=\"post\">\n<p>\n<?php\nif ($TYPE != \"\") {\n\t$types = driver()->types();\n\t$enums = type_values($types[$TYPE]);\n\tif ($enums) {\n\t\techo \"<code class='jush-\" . JUSH . \"'>ENUM (\" . h($enums) . \")</code>\\n<p>\";\n\t}\n\techo \"<input type='submit' name='drop' value='\" . lang('Drop') . \"'>\" . confirm(lang('Drop %s?', $TYPE)) . \"\\n\";\n} else {\n\techo lang('Name') . \": <input name='name' value='\" . h($row['name']) . \"' autocapitalize='off'>\\n\";\n\techo doc_link(array(\n\t\t'pgsql' => \"datatype-enum.html\",\n\t), \"?\");\n\ttextarea(\"as\", $row[\"as\"]);\n\techo \"<p><input type='submit' value='\" . lang('Save') . \"'>\\n\";\n}\necho input_token();\n?>\n</form>\n"
  },
  {
    "path": "adminer/user.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$USER = $_GET[\"user\"];\n$privileges = array(\"\" => array(\"All privileges\" => \"\"));\nforeach (get_rows(\"SHOW PRIVILEGES\") as $row) {\n\tforeach (explode(\",\", ($row[\"Privilege\"] == \"Grant option\" ? \"\" : $row[\"Context\"])) as $context) {\n\t\t$privileges[$context][$row[\"Privilege\"]] = $row[\"Comment\"];\n\t}\n}\n$privileges[\"Server Admin\"] += $privileges[\"File access on server\"];\n$privileges[\"Databases\"][\"Create routine\"] = $privileges[\"Procedures\"][\"Create routine\"]; // MySQL bug #30305\nunset($privileges[\"Procedures\"][\"Create routine\"]);\n$privileges[\"Columns\"] = array();\nforeach (array(\"Select\", \"Insert\", \"Update\", \"References\") as $val) {\n\t$privileges[\"Columns\"][$val] = $privileges[\"Tables\"][$val];\n}\nunset($privileges[\"Server Admin\"][\"Usage\"]);\nforeach ($privileges[\"Tables\"] as $key => $val) {\n\tunset($privileges[\"Databases\"][$key]);\n}\n\n$new_grants = array();\nif ($_POST) {\n\tforeach ($_POST[\"objects\"] as $key => $val) {\n\t\t$new_grants[$val] = (array) $new_grants[$val] + idx($_POST[\"grants\"], $key, array());\n\t}\n}\n$grants = array();\n$old_pass = \"\";\n\nif (isset($_GET[\"host\"]) && ($result = connection()->query(\"SHOW GRANTS FOR \" . q($USER) . \"@\" . q($_GET[\"host\"])))) { //! use information_schema for MySQL 5 - column names in column privileges are not escaped\n\twhile ($row = $result->fetch_row()) {\n\t\tif (preg_match('~GRANT (.*) ON (.*) TO ~', $row[0], $match) && preg_match_all('~ *([^(,]*[^ ,(])( *\\([^)]+\\))?~', $match[1], $matches, PREG_SET_ORDER)) { //! escape the part between ON and TO\n\t\t\tforeach ($matches as $val) {\n\t\t\t\tif ($val[1] != \"USAGE\") {\n\t\t\t\t\t$grants[\"$match[2]$val[2]\"][$val[1]] = true;\n\t\t\t\t}\n\t\t\t\tif (preg_match('~ WITH GRANT OPTION~', $row[0])) { //! don't check inside strings and identifiers\n\t\t\t\t\t$grants[\"$match[2]$val[2]\"][\"GRANT OPTION\"] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (preg_match(\"~ IDENTIFIED BY PASSWORD '([^']+)~\", $row[0], $match)) {\n\t\t\t$old_pass = $match[1];\n\t\t}\n\t}\n}\n\nif ($_POST && !$error) {\n\t$old_user = (isset($_GET[\"host\"]) ? q($USER) . \"@\" . q($_GET[\"host\"]) : \"''\");\n\tif ($_POST[\"drop\"]) {\n\t\tquery_redirect(\"DROP USER $old_user\", ME . \"privileges=\", lang('User has been dropped.'));\n\t} else {\n\t\t$new_user = q($_POST[\"user\"]) . \"@\" . q($_POST[\"host\"]); // if $_GET[\"host\"] is not set then $new_user is always different\n\t\t$pass = $_POST[\"pass\"];\n\t\tif ($pass != '' && !$_POST[\"hashed\"] && !min_version(8)) {\n\t\t\t// compute hash in a separate query so that plain text password is not saved to history\n\t\t\t$pass = get_val(\"SELECT PASSWORD(\" . q($pass) . \")\");\n\t\t\t$error = !$pass;\n\t\t}\n\n\t\t$created = false;\n\t\tif (!$error) {\n\t\t\tif ($old_user != $new_user) {\n\t\t\t\t$created = queries((min_version(5) ? \"CREATE USER\" : \"GRANT USAGE ON *.* TO\") . \" $new_user IDENTIFIED BY \" . (min_version(8) ? \"\" : \"PASSWORD \") . q($pass));\n\t\t\t\t$error = !$created;\n\t\t\t} elseif ($pass != $old_pass) {\n\t\t\t\tqueries(\"SET PASSWORD FOR $new_user = \" . q($pass));\n\t\t\t}\n\t\t}\n\n\t\tif (!$error) {\n\t\t\t$revoke = array();\n\t\t\tforeach ($new_grants as $object => $grant) {\n\t\t\t\tif (isset($_GET[\"grant\"])) {\n\t\t\t\t\t$grant = array_filter($grant);\n\t\t\t\t}\n\t\t\t\t$grant = array_keys($grant);\n\t\t\t\tif (isset($_GET[\"grant\"])) {\n\t\t\t\t\t// no rights to mysql.user table\n\t\t\t\t\t$revoke = array_diff(array_keys(array_filter($new_grants[$object], 'strlen')), $grant);\n\t\t\t\t} elseif ($old_user == $new_user) {\n\t\t\t\t\t$old_grant = array_keys((array) $grants[$object]);\n\t\t\t\t\t$revoke = array_diff($old_grant, $grant);\n\t\t\t\t\t$grant = array_diff($grant, $old_grant);\n\t\t\t\t\tunset($grants[$object]);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tpreg_match('~^(.+)\\s*(\\(.*\\))?$~U', $object, $match) && (\n\t\t\t\t\t!grant(\"REVOKE\", $revoke, $match[2], \" ON $match[1] FROM $new_user\") //! SQL injection\n\t\t\t\t\t|| !grant(\"GRANT\", $grant, $match[2], \" ON $match[1] TO $new_user\"))\n\t\t\t\t) {\n\t\t\t\t\t$error = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!$error && isset($_GET[\"host\"])) {\n\t\t\tif ($old_user != $new_user) {\n\t\t\t\tqueries(\"DROP USER $old_user\");\n\t\t\t} elseif (!isset($_GET[\"grant\"])) {\n\t\t\t\tforeach ($grants as $object => $revoke) {\n\t\t\t\t\tif (preg_match('~^(.+)(\\(.*\\))?$~U', $object, $match)) {\n\t\t\t\t\t\tgrant(\"REVOKE\", array_keys($revoke), $match[2], \" ON $match[1] FROM $new_user\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries_redirect(ME . \"privileges=\", (isset($_GET[\"host\"]) ? lang('User has been altered.') : lang('User has been created.')), !$error);\n\n\t\tif ($created) {\n\t\t\t// delete new user in case of an error\n\t\t\tconnection()->query(\"DROP USER $new_user\");\n\t\t}\n\t}\n}\n\npage_header((isset($_GET[\"host\"]) ? lang('Username') . \": \" . h(\"$USER@$_GET[host]\") : lang('Create user')), $error, array(\"privileges\" => array('', lang('Privileges'))));\n\n$row = $_POST;\nif ($row) {\n\t$grants = $new_grants;\n} else {\n\t$row = $_GET + array(\"host\" => get_val(\"SELECT SUBSTRING_INDEX(CURRENT_USER, '@', -1)\")); // create user on the same domain by default\n\t$row[\"pass\"] = $old_pass;\n\tif ($old_pass != \"\") {\n\t\t$row[\"hashed\"] = true;\n\t}\n\t$grants[(DB == \"\" || $grants ? \"\" : idf_escape(addcslashes(DB, \"%_\\\\\"))) . \".*\"] = array();\n}\n\n?>\n<form action=\"\" method=\"post\">\n<table class=\"layout\">\n<tr><th><?php echo lang('Server'); ?><td><input name=\"host\" data-maxlength=\"60\" value=\"<?php echo h($row[\"host\"]); ?>\" autocapitalize=\"off\">\n<tr><th><?php echo lang('Username'); ?><td><input name=\"user\" data-maxlength=\"80\" value=\"<?php echo h($row[\"user\"]); ?>\" autocapitalize=\"off\">\n<tr><th><?php echo lang('Password'); ?><td><input name=\"pass\" id=\"pass\" value=\"<?php echo h($row[\"pass\"]); ?>\" autocomplete=\"new-password\">\n<?php echo ($row[\"hashed\"] ? \"\" : script(\"typePassword(qs('#pass'));\")); ?>\n<?php echo (min_version(8) ? \"\" : checkbox(\"hashed\", 1, $row[\"hashed\"], lang('Hashed'), \"typePassword(this.form['pass'], this.checked);\")); ?>\n</table>\n\n<?php\n//! MAX_* limits, REQUIRE\necho \"<table class='odds'>\\n\";\necho \"<thead><tr><th colspan='2'>\" . lang('Privileges') . doc_link(array('sql' => \"grant.html#priv_level\"));\n$i = 0;\nforeach ($grants as $object => $grant) {\n\techo '<th>' . ($object != \"*.*\"\n\t\t? \"<input name='objects[$i]' value='\" . h($object) . \"' size='10' autocapitalize='off'>\"\n\t\t: input_hidden(\"objects[$i]\", \"*.*\") . \"*.*\"\n\t); //! separate db, table, columns, PROCEDURE|FUNCTION, routine\n\t$i++;\n}\necho \"</thead>\\n\";\n\nforeach (\n\tarray(\n\t\t\"\" => \"\",\n\t\t\"Server Admin\" => lang('Server'),\n\t\t\"Databases\" => lang('Database'),\n\t\t\"Tables\" => lang('Table'),\n\t\t\"Columns\" => lang('Column'),\n\t\t\"Procedures\" => lang('Routine'),\n\t) as $context => $desc\n) {\n\tforeach ((array) $privileges[$context] as $privilege => $comment) {\n\t\techo \"<tr><td\" . ($desc ? \">$desc<td\" : \" colspan='2'\") . ' lang=\"en\" title=\"' . h($comment) . '\">' . h($privilege);\n\t\t$i = 0;\n\t\tforeach ($grants as $object => $grant) {\n\t\t\t$name = \"'grants[$i][\" . h(strtoupper($privilege)) . \"]'\";\n\t\t\t$value = $grant[strtoupper($privilege)];\n\t\t\tif ($context == \"Server Admin\" && $object != (isset($grants[\"*.*\"]) ? \"*.*\" : \".*\")) {\n\t\t\t\techo \"<td>\";\n\t\t\t} elseif (isset($_GET[\"grant\"])) {\n\t\t\t\techo \"<td><select name=$name><option><option value='1'\" . ($value ? \" selected\" : \"\") . \">\" . lang('Grant') . \"<option value='0'\" . ($value == \"0\" ? \" selected\" : \"\") . \">\" . lang('Revoke') . \"</select>\";\n\t\t\t} else {\n\t\t\t\techo \"<td align='center'><label class='block'>\";\n\t\t\t\techo \"<input type='checkbox' name=$name value='1'\" . ($value ? \" checked\" : \"\") . ($privilege == \"All privileges\"\n\t\t\t\t\t? \" id='grants-$i-all'>\" //! uncheck all except grant if all is checked\n\t\t\t\t\t: \">\" . ($privilege == \"Grant option\" ? \"\" : script(\"qsl('input').onclick = function () { if (this.checked) formUncheck('grants-$i-all'); };\")));\n\t\t\t\techo \"</label>\";\n\t\t\t}\n\t\t\t$i++;\n\t\t}\n\t}\n}\n\necho \"</table>\\n\";\n?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php if (isset($_GET[\"host\"])) { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', \"$USER@$_GET[host]\")); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "adminer/variables.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$status = isset($_GET[\"status\"]);\npage_header($status ? lang('Status') : lang('Variables'));\n\n$variables = ($status ? adminer()->showStatus() : adminer()->showVariables());\nif (!$variables) {\n\techo \"<p class='message'>\" . lang('No rows.') . \"\\n\";\n} else {\n\techo \"<table>\\n\";\n\tforeach ($variables as $row) {\n\t\techo \"<tr>\";\n\t\t$key = array_shift($row);\n\t\techo \"<th><code class='jush-\" . JUSH . ($status ? \"status\" : \"set\") . \"'>\" . h($key) . \"</code>\";\n\t\tforeach ($row as $val) {\n\t\t\techo \"<td>\" . nl_br(h($val));\n\t\t}\n\t}\n\techo \"</table>\\n\";\n}\n"
  },
  {
    "path": "adminer/view.inc.php",
    "content": "<?php\nnamespace Adminer;\n\n$TABLE = $_GET[\"view\"];\n$row = $_POST;\n$orig_type = \"VIEW\";\nif (JUSH == \"pgsql\" && $TABLE != \"\") {\n\t$status = table_status1($TABLE);\n\t$orig_type = strtoupper($status[\"Engine\"]);\n}\n\nif ($_POST && !$error) {\n\t$name = trim($row[\"name\"]);\n\t$as = \" AS\\n$row[select]\";\n\t$location = ME . \"table=\" . urlencode($name);\n\t$message = lang('View has been altered.');\n\n\t$type = ($_POST[\"materialized\"] ? \"MATERIALIZED VIEW\" : \"VIEW\");\n\n\tif (!$_POST[\"drop\"] && $TABLE == $name && JUSH != \"sqlite\" && $type == \"VIEW\" && $orig_type == \"VIEW\") {\n\t\tquery_redirect((JUSH == \"mssql\" ? \"ALTER\" : \"CREATE OR REPLACE\") . \" VIEW \" . table($name) . $as, $location, $message);\n\t} else {\n\t\t$temp_name = $name . \"_adminer_\" . uniqid();\n\t\tdrop_create(\n\t\t\t\"DROP $orig_type \" . table($TABLE),\n\t\t\t\"CREATE $type \" . table($name) . $as,\n\t\t\t\"DROP $type \" . table($name),\n\t\t\t\"CREATE $type \" . table($temp_name) . $as,\n\t\t\t\"DROP $type \" . table($temp_name),\n\t\t\t($_POST[\"drop\"] ? substr(ME, 0, -1) : $location),\n\t\t\tlang('View has been dropped.'),\n\t\t\t$message,\n\t\t\tlang('View has been created.'),\n\t\t\t$TABLE,\n\t\t\t$name\n\t\t);\n\t}\n}\n\nif (!$_POST && $TABLE != \"\") {\n\t$row = view($TABLE);\n\t$row[\"name\"] = $TABLE;\n\t$row[\"materialized\"] = ($orig_type != \"VIEW\");\n\tif (!$error) {\n\t\t$error = error();\n\t}\n}\n\npage_header(($TABLE != \"\" ? lang('Alter view') : lang('Create view')), $error, array(\"table\" => $TABLE), h($TABLE));\n?>\n\n<form action=\"\" method=\"post\">\n<p><?php echo lang('Name'); ?>: <input name=\"name\" value=\"<?php echo h($row[\"name\"]); ?>\" data-maxlength=\"64\" autocapitalize=\"off\">\n<?php echo (support(\"materializedview\") ? \" \" . checkbox(\"materialized\", 1, $row[\"materialized\"], lang('Materialized view')) : \"\"); ?>\n<p><?php textarea(\"select\", $row[\"select\"]); ?>\n<p>\n<input type=\"submit\" value=\"<?php echo lang('Save'); ?>\">\n<?php if ($TABLE != \"\") { ?>\n<input type=\"submit\" name=\"drop\" value=\"<?php echo lang('Drop'); ?>\"><?php echo confirm(lang('Drop %s?', $TABLE)); ?>\n<?php } ?>\n<?php echo input_token(); ?>\n</form>\n"
  },
  {
    "path": "compile.php",
    "content": "#!/usr/bin/env php\n<?php\ninclude __DIR__ . \"/adminer/include/version.inc.php\";\ninclude __DIR__ . \"/adminer/include/errors.inc.php\";\ninclude __DIR__ . \"/externals/JsShrink/jsShrink.php\";\ninclude __DIR__ . \"/externals/PhpShrink/phpShrink.php\";\n\nfunction add_apo_slashes($s) {\n\treturn addcslashes($s, \"\\\\'\");\n}\n\nfunction add_quo_slashes($s) {\n\t$return = $s;\n\t$return = addcslashes($return, \"\\n\\r\\$\\\"\\\\\");\n\t$return = preg_replace('~\\0(?![0-7])~', '\\\\\\\\0', $return);\n\t$return = addcslashes($return, \"\\0\");\n\treturn $return;\n}\n\nfunction remove_lang($match) {\n\t$idf = strtr($match[2], array(\"\\\\'\" => \"'\", \"\\\\\\\\\" => \"\\\\\"));\n\t$s = (Adminer\\Lang::$translations[$idf] ?: $idf);\n\tif ($match[3] == \",\") { // lang() has parameters\n\t\treturn $match[1] . (is_array($s) ? \"lang_format(array('\" . implode(\"', '\", array_map('add_apo_slashes', $s)) . \"'),\" : \"sprintf('\" . add_apo_slashes($s) . \"',\");\n\t}\n\treturn ($match[1] && $match[4] ? $s : \"$match[1]'\" . add_apo_slashes($s) . \"'$match[4]\");\n}\n\nfunction lang_ids($match) {\n\tglobal $lang_ids;\n\t$lang_id = &$lang_ids[stripslashes($match[1])];\n\tif ($lang_id === null) {\n\t\t$lang_id = count($lang_ids) - 1;\n\t}\n\treturn ($_SESSION[\"lang\"] ? $match[0] : \"lang($lang_id$match[2]\");\n}\n\nfunction put_file($match) {\n\tglobal $project, $vendor;\n\tif (preg_match('~LANG~', $match[2])) {\n\t\treturn $match[0]; // processed later\n\t}\n\t$return = file_get_contents(__DIR__ . \"/$project/$match[2]\");\n\t$return = preg_replace('~namespace Adminer;\\s*~', '', $return);\n\tif ($vendor && preg_match('~/drivers/~', $match[2])) {\n\t\t$return = preg_replace('~^if \\(isset\\(\\$_GET\\[\"' . $vendor . '\"]\\)\\) \\{(.*)^}~ms', '\\1', $return);\n\t\t// check function definition in drivers\n\t\tif ($vendor != \"mysql\") {\n\t\t\tpreg_match_all(\n\t\t\t\t'~\\bfunction (?!alter_table|drop_tables|truncate_tables)([^(]+)~', // used for feature detection\n\t\t\t\tpreg_replace('~class Driver.*\\n\\t}~sU', '', file_get_contents(__DIR__ . \"/adminer/drivers/mysql.inc.php\")),\n\t\t\t\t$matches\n\t\t\t); //! respect context (extension, class)\n\t\t\t$functions = array_combine($matches[1], $matches[0]);\n\t\t\t$requires = array(\n\t\t\t\t\"copy\" => array(\"copy_tables\"),\n\t\t\t\t\"database\" => array(\"create_database\", \"rename_database\", \"drop_databases\", \"move_tables\"),\n\t\t\t\t\"dump\" => array(\"use_sql\", \"create_sql\", \"truncate_sql\", \"trigger_sql\"),\n\t\t\t\t\"kill\" => array(\"kill_process\", \"connection_id\", \"max_connections\"),\n\t\t\t\t\"processlist\" => array(\"process_list\"),\n\t\t\t\t\"routine\" => array(\"routines\", \"routine\", \"routine_languages\", \"routine_id\"),\n\t\t\t\t\"scheme\" => array(\"schemas\", \"get_schema\", \"set_schema\"),\n\t\t\t\t\"sql\" => array(\"multi_query\", \"store_result\", \"next_result\", \"explain\"),\n\t\t\t\t\"status\" => array(\"show_status\"),\n\t\t\t\t\"indexes\" => array(\"alter_indexes\"),\n\t\t\t\t\"table\" => array(\"auto_increment\"),\n\t\t\t\t\"trigger\" => array(\"triggers\", \"trigger\", \"trigger_options\", \"trigger_sql\"),\n\t\t\t\t\"type\" => array(\"types\", \"type_values\"),\n\t\t\t\t\"variables\" => array(\"show_variables\"),\n\t\t\t\t\"view\" => array(\"drop_views\", \"view\"),\n\t\t\t);\n\t\t\tforeach ($requires as $support => $fns) {\n\t\t\t\tif (!Adminer\\support($support)) {\n\t\t\t\t\tforeach ($fns as $fn) {\n\t\t\t\t\t\tunset($functions[$fn]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tunset($functions[\"__construct\"], $functions[\"__destruct\"], $functions[\"set_charset\"], $functions[\"multi_query\"], $functions[\"store_result\"], $functions[\"next_result\"]);\n\t\t\tforeach ($functions as $val) {\n\t\t\t\tif (!strpos($return, \"$val(\")) {\n\t\t\t\t\tfprintf(STDERR, \"Missing $val in $vendor\\n\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (basename($match[2]) == \"lang.inc.php\") {\n\t\tif (!$_SESSION[\"lang\"]) {\n\t\t\t$return = str_replace('function lang(string $idf, $number = null): string {', 'function lang($idf, $number = null) {\n\tif (is_string($idf)) { // compiled version uses numbers, string comes from a plugin\n\t\t// English translation is closest to the original identifiers //! pluralized translations are not found\n\t\t$pos = array_search($idf, get_translations(\"en\")); //! this should be cached\n\t\tif ($pos !== false) {\n\t\t\t$idf = $pos;\n\t\t}\n\t}', $return, $count);\n\t\t\tif (!$count) {\n\t\t\t\techo \"lang() not found\\n\";\n\t\t\t}\n\t\t} else {\n\t\t\t$return = preg_replace('~// not used in a single language version from here.*~s', '', $return);\n\t\t\t$return = preg_replace_callback('~(\\$pos = (.+\\n).+;)~sU', function ($match) {\n\t\t\t\treturn \"\\$pos = $match[2]\\t\\t\\t: \" . (preg_match(\"~'$_SESSION[lang]'.* \\\\? (.+)\\n~U\", $match[1], $match2) ? $match2[1] : \"1\") . \"\\n\\t\\t);\";\n\t\t\t}, $return);\n\t\t\t$return = str_replace('Lang::$translations[$idf] ?: $idf', '$idf', $return); // lang() is used only by old plugins\n\t\t\t$return .= \"define('Adminer\\\\LANG', '$_SESSION[lang]');\\n\";\n\t\t}\n\t}\n\t$tokens = token_get_all($return); // to find out the last token\n\treturn \"?>\\n$return\" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? \"<?php\" : \"\");\n}\n\nfunction lzw_compress($string) {\n\t// compression\n\t$dictionary = array_flip(range(\"\\0\", \"\\xFF\"));\n\t$word = \"\";\n\t$codes = array();\n\tfor ($i=0; $i <= strlen($string); $i++) {\n\t\t$x = @$string[$i];\n\t\tif (strlen($x) && isset($dictionary[$word . $x])) {\n\t\t\t$word .= $x;\n\t\t} elseif ($i) {\n\t\t\t$codes[] = $dictionary[$word];\n\t\t\t$dictionary[$word . $x] = count($dictionary);\n\t\t\t$word = $x;\n\t\t}\n\t}\n\t// convert codes to binary string\n\t$dictionary_count = 256;\n\t$bits = 8; // ceil(log($dictionary_count, 2))\n\t$return = \"\";\n\t$rest = 0;\n\t$rest_length = 0;\n\tforeach ($codes as $code) {\n\t\t$rest = ($rest << $bits) + $code;\n\t\t$rest_length += $bits;\n\t\t$dictionary_count++;\n\t\tif ($dictionary_count >> $bits) {\n\t\t\t$bits++;\n\t\t}\n\t\twhile ($rest_length > 7) {\n\t\t\t$rest_length -= 8;\n\t\t\t$return .= chr($rest >> $rest_length);\n\t\t\t$rest &= (1 << $rest_length) - 1;\n\t\t}\n\t}\n\treturn $return . ($rest_length ? chr($rest << (8 - $rest_length)) : \"\");\n}\n\nfunction put_file_lang($match) {\n\tglobal $lang_ids, $project;\n\tif ($_SESSION[\"lang\"]) {\n\t\treturn \"\";\n\t}\n\t$return = \"\";\n\tforeach (Adminer\\langs() as $lang => $val) {\n\t\tinclude __DIR__ . \"/adminer/lang/$lang.inc.php\";\n\t\t$translation_ids = array_flip($lang_ids); // default translation\n\t\tforeach (Adminer\\Lang::$translations as $key => $val) {\n\t\t\tif ($val !== null) {\n\t\t\t\t$translation_ids[$lang_ids[$key]] = implode(\"\\t\", (array) $val);\n\t\t\t}\n\t\t}\n\t\t$return .= '\n\t\tcase \"' . $lang . '\": $compressed = \"' . add_quo_slashes(lzw_compress(implode(\"\\n\", $translation_ids))) . '\"; break;';\n\t}\n\t$translations_version = crc32($return);\n\treturn 'Lang::$translations = (array) $_SESSION[\"translations\"];\nif ($_SESSION[\"translations_version\"] != LANG . ' . $translations_version . ') {\n\tLang::$translations = array();\n\t$_SESSION[\"translations_version\"] = LANG . ' . $translations_version . ';\n}\nif (!Lang::$translations) {\n\tLang::$translations = get_translations(LANG);\n\t$_SESSION[\"translations\"] = Lang::$translations;\n}\n\nfunction get_translations($lang) {\n\tswitch ($lang) {' . $return . '\n\t}\n\t$translations = array();\n\tforeach (explode(\"\\n\", lzw_decompress($compressed)) as $val) {\n\t\t$translations[] = (strpos($val, \"\\t\") ? explode(\"\\t\", $val) : $val);\n\t}\n\treturn $translations;\n}\n';\n}\n\nfunction minify_css($file) {\n\tglobal $project;\n\tif ($project == \"editor\") {\n\t\t$file = preg_replace('~\\.icon-(up|down|plus|cross).*~', '', $file);\n\t}\n\t$file = preg_replace_callback('~url\\((\\w+\\.(gif|png|jpg))\\)~', function ($match) {\n\t\treturn \"url(data:image/$match[2];base64,\" . base64_encode(file_get_contents(__DIR__ . \"/adminer/static/$match[1]\")) . \")\"; // we don't have ME in *.css so we can only inline images\n\t}, $file);\n\treturn lzw_compress(preg_replace('~\\s*([:;{},])\\s*~', '\\1', preg_replace('~/\\*.*?\\*/\\s*~s', '', $file)));\n}\n\nfunction minify_js($file) {\n\t$file = preg_replace_callback(\"~'use strict';~\", function ($match) {\n\t\tstatic $count = 0;\n\t\t$count++;\n\t\treturn ($count == 1 ? $match[0] : ''); // keep only the first one\n\t}, $file);\n\tif (function_exists('jsShrink')) {\n\t\t$file = jsShrink($file);\n\t}\n\treturn lzw_compress($file);\n}\n\n// $callback only to match signature\nfunction compile_file($match, $callback = '') {\n\tglobal $project;\n\t$file = \"\";\n\tlist(, $filenames, $callback) = $match;\n\tif ($filenames != \"\") {\n\t\tforeach (preg_split('~;\\s*~', $filenames) as $filename) {\n\t\t\t$file .= file_get_contents(__DIR__ . \"/$project/$filename\");\n\t\t}\n\t}\n\tif ($callback) {\n\t\t$file = call_user_func($callback, $file);\n\t}\n\treturn '\"' . add_quo_slashes($file) . '\"';\n}\n\nfunction number_type() {\n\treturn '';\n}\n\nfunction ini_bool() {\n\treturn true;\n}\n\n$project = \"adminer\";\nif ($_SERVER[\"argv\"][1] == \"editor\") {\n\t$project = \"editor\";\n\tarray_shift($_SERVER[\"argv\"]);\n}\n\n$vendor = \"\";\n$driver_path = \"/adminer/drivers/\" . $_SERVER[\"argv\"][1] . \".inc.php\";\nif (!file_exists(__DIR__ . $driver_path)) {\n\t$driver_path = \"/plugins/drivers/\" . $_SERVER[\"argv\"][1] . \".php\";\n}\nif (file_exists(__DIR__ . $driver_path)) {\n\t$vendor = $_SERVER[\"argv\"][1];\n\tarray_shift($_SERVER[\"argv\"]);\n}\n\nunset($_COOKIE[\"adminer_lang\"]);\n$_SESSION[\"lang\"] = $_SERVER[\"argv\"][1]; // Adminer functions read language from session\ninclude __DIR__ . \"/adminer/include/functions.inc.php\";\ninclude __DIR__ . \"/adminer/include/lang.inc.php\";\nif (Adminer\\idx(Adminer\\langs(), $_SESSION[\"lang\"])) {\n\tinclude __DIR__ . \"/adminer/lang/$_SESSION[lang].inc.php\";\n\tarray_shift($_SERVER[\"argv\"]);\n}\n\nif ($_SERVER[\"argv\"][1]) {\n\techo \"Usage: php compile.php [editor] [driver] [lang]\\n\";\n\techo \"Purpose: Compile adminer[-driver][-lang].php or editor[-driver][-lang].php.\\n\";\n\texit(1);\n}\n\ninclude __DIR__ . \"/adminer/include/db.inc.php\";\ninclude __DIR__ . \"/adminer/include/pdo.inc.php\";\ninclude __DIR__ . \"/adminer/include/driver.inc.php\";\n$features = array(\"check\", \"call\" => \"routine\", \"dump\", \"event\", \"privileges\", \"procedure\" => \"routine\", \"processlist\", \"routine\", \"scheme\", \"sequence\", \"sql\", \"status\", \"trigger\", \"type\", \"user\" => \"privileges\", \"variables\", \"view\");\n$lang_ids = array(); // global variable simplifies usage in a callback function\n$file = file_get_contents(__DIR__ . \"/$project/index.php\");\n$file = preg_replace('~\\*/~', \"* @version \" . Adminer\\VERSION . \"\\n*/\", $file, 1);\nif ($vendor) {\n\t$_GET[$vendor] = true; // to load the driver\n\tinclude_once __DIR__ . $driver_path;\n\tAdminer\\Db::$instance = (object) array('flavor' => '', 'server_info' => '99'); // used in support()\n\tforeach ($features as $key => $feature) {\n\t\tif (!Adminer\\support($feature)) {\n\t\t\tif (!is_int($key)) {\n\t\t\t\t$feature = $key;\n\t\t\t}\n\t\t\t$file = str_replace(\"} elseif (isset(\\$_GET[\\\"$feature\\\"])) {\\n\\tinclude \\\"./$feature.inc.php\\\";\\n\", \"\", $file);\n\t\t}\n\t}\n\tif (!Adminer\\support(\"routine\")) {\n\t\t$file = str_replace(\"if (isset(\\$_GET[\\\"callf\\\"])) {\\n\\t\\$_GET[\\\"call\\\"] = \\$_GET[\\\"callf\\\"];\\n}\\nif (isset(\\$_GET[\\\"function\\\"])) {\\n\\t\\$_GET[\\\"procedure\\\"] = \\$_GET[\\\"function\\\"];\\n}\\n\", \"\", $file);\n\t}\n}\n$file = preg_replace_callback('~\\b(include|require) \"([^\"]*)\";~', 'put_file', $file);\n$file = str_replace('include \"../adminer/include/coverage.inc.php\";', '', $file);\nif ($vendor) {\n\tif (preg_match('~^/plugins/~', $driver_path)) {\n\t\t$file = preg_replace('((include \"..)/adminer/drivers/mysql.inc.php)', \"\\\\1$driver_path\", $file);\n\t}\n\t$file = preg_replace('(include \"../adminer/drivers/(?!' . preg_quote($vendor) . '\\.).*\\s*)', '', $file);\n}\n$file = preg_replace_callback('~\\b(include|require) \"([^\"]*)\";~', 'put_file', $file); // bootstrap.inc.php\nif ($vendor) {\n\tforeach ($features as $feature) {\n\t\tif (!Adminer\\support($feature)) {\n\t\t\t$file = preg_replace(\"((\\t*)\" . preg_quote('if (support(\"' . $feature . '\")') . \".*?\\n\\\\1\\\\}( else)?)s\", '', $file);\n\t\t}\n\t}\n\tif ($project != \"editor\" && count(Adminer\\SqlDriver::$drivers) == 1) {\n\t\t$file = str_replace(\n\t\t\t'html_select(\"auth[driver]\", SqlDriver::$drivers, DRIVER, \"loginDriver(this);\")',\n\t\t\t'input_hidden(\"auth[driver]\", \"' . ($vendor == \"mysql\" ? \"server\" : $vendor) . '\") . \"' . reset(Adminer\\SqlDriver::$drivers) . '\"',\n\t\t\t$file,\n\t\t\t$count\n\t\t);\n\t\tif (!$count) {\n\t\t\techo \"auth[driver] form field not found\\n\";\n\t\t}\n\t\t$file = str_replace(\" . script(\\\"const authDriver = qs('#username').form['auth[driver]']; authDriver && authDriver.onchange();\\\")\", \"\", $file);\n\t\tif ($vendor == \"sqlite\") {\n\t\t\t$file = str_replace(\");\\n\\t\\techo \\$this->loginFormField('server', '<tr><th>' . lang('Server') . '<td>', '<input name=\\\"auth[server]\", ' . \\'<input type=\"hidden\" name=\"auth[server]\"', $file);\n\t\t}\n\t}\n\t$file = preg_replace('(;\\s*../externals/jush/modules/jush-(?!autocomplete-sql\\.|textarea\\.|txt\\.|js\\.|' . preg_quote($vendor == \"mysql\" ? \"sql\" : $vendor) . '\\.)[^.]+.js)', '', $file);\n\t$file = preg_replace_callback('~doc_link\\(array\\((.*)\\)\\)~sU', function ($match) use ($vendor) {\n\t\tlist(, $links) = $match;\n\t\t$links = preg_replace(\"~'(?!(\" . ($vendor == \"mysql\" ? \"sql|mariadb\" : $vendor) . \")')[^']*' => [^,]*,?~\", '', $links);\n\t\treturn (trim($links) ? \"doc_link(array($links))\" : \"''\");\n\t}, $file);\n\t//! strip doc_link() definition\n}\nif ($project == \"editor\") {\n\t$file = preg_replace('~;.\\.\\/externals/jush/jush(-dark)?\\.css~', '', $file);\n\t$file = preg_replace('~compile_file\\(\\'\\.\\./(externals/jush/modules/jush\\.js)[^)]+\\)~', \"''\", $file);\n}\n$file = preg_replace_callback(\"~(?<!>)lang\\\\('((?:[^\\\\\\\\']+|\\\\\\\\.)*)'([,)])~s\", 'lang_ids', $file);\n$file = preg_replace_callback('~\\b(include|require) \"([^\"]*\" . LANG . \".inc.php)\";~', 'put_file_lang', $file);\n$file = str_replace(\"\\r\", \"\", $file);\nif ($_SESSION[\"lang\"]) {\n\t// single language version\n\t$file = preg_replace_callback(\"~(<\\\\?php\\\\s*echo )?(?<!>)lang\\\\('((?:[^\\\\\\\\']+|\\\\\\\\.)*)'([,)])(;\\\\s*\\\\?>)?~s\", 'remove_lang', $file);\n\t$file = str_replace(\"switch_lang();\", \"\", $file);\n\t$file = str_replace('<?php echo LANG; ?>', $_SESSION[\"lang\"], $file);\n}\n$file = str_replace('echo script_src(\"static/editing.js\");' . \"\\n\", \"\", $file); // merged into functions.js\n$file = preg_replace('~\\s+echo script_src\\(\"\\.\\./externals/jush/modules/jush-(autocomplete-sql|textarea|txt|js|\" \\. JUSH \\. \")\\.js\", true\\);~', '', $file); // merged into jush.js\n$file = preg_replace('~echo .*/jush(-dark)?.css\\'>.*~', '', $file); // merged into default.css or dark.css\nif (function_exists('stripTypes')) {\n\t$file = stripTypes($file);\n}\n$file = preg_replace_callback(\"~compile_file\\\\('([^']+)'(?:, '([^']*)')?\\\\)~\", 'compile_file', $file); // integrate static files\n$replace = 'preg_replace(\"~\\\\\\\\\\\\\\\\?.*~\", \"\", ME) . \"?file=\\1&version=' . Adminer\\VERSION . '\"';\n$file = preg_replace('~\\.\\./adminer/static/(default\\.css)~', '<?php echo h(' . $replace . '); ?>', $file);\n$file = preg_replace('~\"\\.\\./adminer/static/(functions\\.js)\"~', $replace, $file);\n$file = preg_replace('~\\.\\./adminer/static/([^\\'\"]*)~', '\" . h(' . $replace . ') . \"', $file);\n$file = preg_replace('~\"\\.\\./externals/jush/modules/(jush\\.js)\"~', $replace, $file);\nif (function_exists('phpShrink')) {\n\t$file = phpShrink($file);\n}\n\n$filename = $project . (preg_match('~-dev$~', Adminer\\VERSION) ? \"\" : \"-\" . Adminer\\VERSION) . ($vendor ? \"-$vendor\" : \"\") . ($_SESSION[\"lang\"] ? \"-$_SESSION[lang]\" : \"\") . \".php\";\nfile_put_contents($filename, $file);\necho \"$filename created (\" . strlen($file) . \" B).\\n\";\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"vrana/adminer\",\n    \"description\": \"Database management in a single PHP file.\",\n    \"homepage\": \"https://www.adminer.org/\",\n    \"keywords\": [\n        \"database\"\n    ],\n    \"support\": {\n        \"issues\": \"https://github.com/vrana/adminer/issues\",\n        \"forum\": \"https://github.com/vrana/adminer/discussions\",\n        \"source\": \"https://github.com/vrana/adminer/\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Jakub Vrána\",\n            \"homepage\": \"https://www.vrana.cz/\"\n        }\n    ],\n    \"autoload\": {\n        \"exclude-from-classmap\": [\n            \"adminer/drivers/\",\n            \"plugins/drivers/\"\n        ],\n        \"classmap\": [\n            \"plugins/\"\n        ]\n    },\n    \"license\": [\n        \"Apache-2.0\",\n        \"GPL-2.0-only\"\n    ],\n    \"require\": {\n        \"php\": \">=7.4\"\n    },\n    \"scripts\": {\n        \"check\": [\n            \"phpcs\",\n            \"phpstan analyse -c phpstan.neon\"\n        ],\n        \"compile\": \"@php compile.php\",\n        \"clean\": \"rm -f adminer*.php editor*.php\"\n    }\n}\n"
  },
  {
    "path": "coverage.php",
    "content": "<!DOCTYPE html>\n<html lang=\"cs\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n<title>Coverage</title>\n\n<body>\n\n<?php\ninclude \"./adminer/include/errors.inc.php\";\n\nfunction xhtml_open_tags($s) {\n\t// returns array of opened tags in $s\n\t$return = array();\n\tpreg_match_all('~<([^>]+)~', $s, $matches);\n\tforeach ($matches[1] as $val) {\n\t\tif ($val[0] == \"/\") {\n\t\t\tarray_pop($return);\n\t\t} elseif (substr($val, -1) != \"/\") {\n\t\t\t$return[] = $val;\n\t\t}\n\t}\n\treturn $return;\n}\n\n$coverage_filename = sys_get_temp_dir() . \"/adminer.coverage\";\nif (!extension_loaded(\"xdebug\")) {\n\techo \"<p class='error'>Xdebug has to be enabled.\\n\";\n} elseif ($_GET[\"coverage\"] === \"0\") {\n\tfile_put_contents($coverage_filename, serialize(array()));\n\techo \"<p class='message'>Coverage started.\\n\";\n} elseif (preg_match('~^(adminer|editor)/(include/|drivers/)?[-_.a-z0-9]+$~i', $_GET[\"coverage\"])) {\n\t// highlight single file\n\t$filename = $_GET[\"coverage\"];\n\t$coverage = (file_exists($coverage_filename) ? unserialize(file_get_contents($coverage_filename)) : array());\n\t$file = explode(\"\\n\", substr(highlight_file($filename, true), 5, -6)); // unwrap <pre></pre>\n\t$prev_color = null;\n\t$s = \"\";\n\techo \"<pre>\";\n\tfor ($l=0; $l <= count($file); $l++) {\n\t\t$line = $file[$l];\n\t\t$color = \"#C0FFC0\"; // tested\n\t\tswitch ($coverage[realpath($filename)][$l+1] ?? null) {\n\t\t\tcase -1: // untested\n\t\t\t\t$color = \"#FFC0C0\";\n\t\t\t\tbreak;\n\t\t\tcase -2: // dead code\n\t\t\t\t$color = \"Silver\";\n\t\t\t\tbreak;\n\t\t\tcase null: // not executable\n\t\t\t\t$color = \"\";\n\t\t\t\tbreak;\n\t\t}\n\t\tif ($prev_color === null) {\n\t\t\t$prev_color = $color;\n\t\t}\n\t\tif ($prev_color != $color || $line === null) {\n\t\t\techo \"<div\" . ($prev_color ? \" style='background-color: $prev_color;'\" : \"\") . \">$s\";\n\t\t\t$open_tags = xhtml_open_tags($s);\n\t\t\tforeach (array_reverse($open_tags) as $tag) {\n\t\t\t\techo \"</\" . preg_replace('~ .*~', '', $tag) . \">\";\n\t\t\t}\n\t\t\techo \"</div>\";\n\t\t\t$s = ($open_tags ? \"<\" . implode(\"><\", $open_tags) . \">\" : \"\");\n\t\t\t$prev_color = $color;\n\t\t}\n\t\t$s .= \"$line\\n\";\n\t}\n\techo \"</pre>\";\n} else {\n\tif (file_exists($coverage_filename)) {\n\t\t// display list of files\n\t\t$coverage = unserialize(file_get_contents($coverage_filename));\n\t\techo \"<table border='1' cellspacing='0'>\\n\";\n\t\tforeach (array_merge(glob(\"adminer/*.php\"), glob(\"adminer/drivers/*.php\"), glob(\"adminer/include/*.php\"), glob(\"editor/*.php\"), glob(\"editor/include/*.php\")) as $filename) {\n\t\t\t$cov = $coverage[realpath($filename)];\n\t\t\t$ratio = 0;\n\t\t\tif (is_array($cov)) {\n\t\t\t\t$values = array_count_values($cov);\n\t\t\t\t$ratio = round(100 - 100 * $values[-1] / (count($cov) - $values[-2]));\n\t\t\t}\n\t\t\techo \"<tr><td align='right' style='background-color: \" . ($ratio < 50 ? \"Red\" : ($ratio < 75 ? \"#FFEA20\" : \"#A7FC9D\")) . \";'>$ratio%<td><a href='coverage.php?coverage=$filename'>$filename</a>\\n\";\n\t\t}\n\t\techo \"</table>\\n\";\n\t}\n\techo \"<p><a href='coverage.php?coverage=0'>Start new coverage</a>\\n\";\n}\n"
  },
  {
    "path": "designs/README.md",
    "content": "Copy `adminer.css` alongside Adminer PHP script to use an alternative design.\nIf the design supports dark mode then it should be named `adminer-dark.css`.\n\nGallery of designs (including external): https://www.adminer.org/#extras\n\nSee also: [plugins/designs.php](/plugins/designs.php)\n"
  },
  {
    "path": "designs/adminer-dark/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/screenshots/dark.png)\n"
  },
  {
    "path": "designs/adminer-dark/adminer-dark.css",
    "content": "/* Empty file named adminer-dark.css causes Adminer to switch to default dark mode. */\n"
  },
  {
    "path": "designs/brade/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/brade/screenshot.png)\n"
  },
  {
    "path": "designs/brade/adminer.css",
    "content": "/* CSS by Brade - www.bradezone.com */\nhtml {\n\t--fg: #333;\n}\n\n*{margin:0;padding:0}\nbody{font:13px/18px Helvetica,Arial,sans-serif;background:#fff;color:#333}\n/* generic */\na{color:#06c;text-decoration:none;border-bottom:1px dotted}\na:hover,a:link:hover{border-bottom:1px solid #06c;background:#06c;color:#fff}\np{padding-bottom:4px;margin-bottom:4px}\nh1{font-size:18px;font-weight:bold;padding-bottom:0px;height:40px;padding:0 0 8px 0;color:#666;border:0}\nh2{font:32px Georgia,serif;padding:10px 0 8px;margin:0;background:transparent;border:0;color:#333}\nh3{font-size:18px;font-weight:bold;padding:4px 0;margin:0}\nform#form{overflow:hidden}\nfieldset{float:left;min-height:48px;padding:0 4px 4px 4px;border:1px solid #ccc;margin-bottom:8px;margin-right:4px}\nfieldset div{margin-top:4px}\ninput,select,textarea{font:13px Helvetica,Arial,sans-serif;color:#555;border:1px solid #999;padding:3px}\ninput[type=submit]{background:#ccc;padding:2px;cursor:pointer;color:#333}\ninput[type=submit]:hover{background:#bbb}\ninput[type=image],input[type=checkbox]{border:0;padding:0}\nlabel input[type=checkbox],td input[type=radio],td span select{margin-right:4px}\nselect{border:1px solid #999;padding:2px}\nfieldset select{margin-right:4px}\noption{padding:0 5px}\noptgroup{font-size:11px}\ncode{background:#eee;padding:2px 4px;font:16px/20px Courier,monospace}\ncode a:hover{background:transparent}\ntable{margin:4px 0 8px;border:1px solid #ccc;font-size:inherit}\ntbody tr:hover td,tbody tr:hover th{background:#eee}\nthead { top: 40px; }\nthead tr:hover td,thead tr:hover th{background:#ddd}\nth,td{text-align:left;padding:2px 4px;vertical-align:top;font-weight:normal;border:1px dotted #ccc;border-width:0 0 0 1px;\nmargin:0;background:inherit}\nthead th,thead td{white-space:nowrap;font-weight:bold;background:#ddd;border-color:#ddd}\nth:first-child,td:first-child{border-color:transparent;white-space:nowrap}\ntd[align=right]{text-align:right}\ntable code{font-size:13px;line-height:18px}\n.footer fieldset{float:none;}\n.hidden{display:none}\n.error,.message{padding:0;background:transparent;font-weight:bold}\n.error{color:#c00}\n.message{color:#090}\n/* specific */\n#content{margin:0 0 0 320px;padding:50px 20px 40px 0;height:100%}\n#content:after{content:'.';clear:both;height:0;overflow:hidden;display:block}\n#lang{background:#333;color:#fff;position:fixed;top:0;left:0;width:100%;padding:0 20px 0 40px;line-height:40px;height:40px}\n#lang select{border-color:#333}\n#menu{background:#eee;position:fixed;top:60px;bottom:20px;overflow:auto;left:20px;width:240px;padding:10px 15px;\nborder:5px solid #ccc;margin:0}\n#menu a{color:#333;margin-right:4px}\n#menu a:hover{background:#333;color:#fff;border-color:#333}\n#menu a.h1,#menu a.h1:hover{display:block;height:0;width:175px;padding:40px 0 0 0;overflow:hidden;float:left;border:0;margin:0;\noutline:0;background:url(//www.bradezone.com/random/adminer_logo.gif) no-repeat;line-height:32px}\n#menu p,#logins,#tables{border:0;padding:0 0 4px 0;margin:0 0 4px 0}\n#breadcrumb{background:#333;color:#fff;position:fixed;top:0;left:320px;line-height:40px;padding:0;z-index:1;margin:0}\n#breadcrumb a{color:#ff9}\n#breadcrumb a:hover{background:transparent;color:#ff9;border-color:#ff9}\n#schema .table{padding:4px 8px;background:#f3f3f3}\n.tables-filter{padding:0;margin:10px 0;}\n/* IE hacks */\n*+html th:first-child,*+html td:first-child{border-color:inherit;white-space:inherit}\n* html #lang,* html #menu,* html #breadcrumb{position:absolute}\n* html #lang{padding-top:10px;height:30px}\n* html form#form{height:100%}\n#logins a,#tables a{background: none}\n.logout{color:#fff;background-color:#333;box-shadow:0 0 5px 5px #333;z-index:1}\n#logout{color:#333;text-decoration:none;border-bottom:1px dotted}\n#logout:hover{border-color:#333;background:#333;color:#fff}\n.js .column{background:#ddd}\n"
  },
  {
    "path": "designs/bueltge/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/bueltge/screenshot.png)\n"
  },
  {
    "path": "designs/bueltge/adminer.css",
    "content": "/**\r\n * Alternative style for Adminer by Frank Bültge\r\n *\r\n * @link     http://bueltge.de/\r\n * @version  02/18/2014\r\n */\r\n\r\nhtml {\r\n\t--bg: #F9F9F9;\r\n\t--fg: #333;\r\n}\r\n\r\nbody {\r\nmargin: 0;\r\nfont-size: 12px;\r\nline-height: 1.4em;\r\nbackground: #F9F9F9;\r\ncolor: #333;\r\n}\r\nbody, select, option, optgroup, button {\r\nfont-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif;\r\n} /* IE6 */\r\ninput[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {\r\nfont-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif;\r\n}\r\ninput, textarea, pre, code, samp, kbd, var {\r\nfont-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif;\r\nfont-size: 12px;\r\n}\r\n\r\npre {\r\nwhite-space: pre-wrap;\r\n}\r\n\r\np {\r\nmargin: 0.8em 20px 0 5px\r\n}\r\n\r\na {\r\ncolor: #21759B;\r\nbackground: none !important;\r\n}\r\na:visited {\r\ncolor: #21759B;\r\n}\r\na:hover, a:hover {\r\ntext-decoration: none;\r\ncolor: #d54e21;\r\n}\r\na:focus {\r\n\tbackground: #c7e7fd;\r\n\tcolor: #124964;\r\n}\r\na:active {\r\n\tbackground: none;\r\n\toutline: thin dotted;\r\n}\r\n\r\na.active, a.active + a {\r\n\ttext-decoration: none;\r\n\tfont-weight: 700;\r\n}\r\n.icon {\r\n\tbackground-color: #21759B;\r\n}\r\nform {\r\nmargin: 0;\r\npadding: 0 0 0 5px;\r\n}\r\ntable {\r\nwidth: 100%;\r\nclear: both;\r\nmargin: 0;\r\nborder-spacing: 0;\r\nborder-collapse: separate;\r\nborder-color: gray;\r\n}\r\ntable, thead, tbody {\r\nmargin: 10px 12px 0 0;\r\nborder: 1px #BBB solid;\r\nfont-size: 90%;\r\n}\r\nthead th, thead td {\r\ntext-align: center;\r\n}\r\ntd {\r\nwhite-space: normal;\r\noverflow: hidden;\r\npadding: 0 4px;\r\n}\r\nth {\r\ntext-align: left;\r\nfont-weight: 400;\r\n}\r\ntd, th {\r\nbackground-color: #fff;\r\npadding: 1px 2px;\r\nborder: 1px #DfDfDf solid;\r\nborder-width: 1px 0 0 1px;\r\n}\r\ntr:first-child td, tr:first-child th {\r\nborder-top-width: 0;\r\n}\r\ntd:first-child, th:first-child {\r\nborder-left-width: 0;\r\n}\r\nthead {\r\ndisplay: table-header-group;\r\nvertical-align: middle;\r\nborder-color: inherit;\r\n}\r\nthead td, thead th {\r\nbackground-color: #DFDFDF;\r\nborder: none;\r\nborder-bottom: 1px #BBB solid;\r\n}\r\nthead tr:hover td, thead tr:hover th {\r\nbackground-color: #DDD !important;\r\n}\r\ntr:nth-child(2n) td, tr:nth-child(2n) th {\r\nbackground-color: #F1F1F1;\r\n}\r\ntr:hover td, tr:hover th {\r\nbackground-color: #BCD;\r\n}\r\n\r\n.footer {\r\nborder-image:linear-gradient(rgba(249, 249, 249, .2), #F9F9F9) 100% 0;\r\n}\r\n.footer > div {\r\nbackground-color: #F9F9F9;\r\n}\r\n\r\nfieldset {\r\ndisplay: inline;\r\nvertical-align: top;\r\npadding: 2px 12px;\r\nmargin: 25px 12px 12px 0;\r\nborder: none;\r\nbackground-color: #F1F1F1;\r\nborder: 1px solid #E3E3E3;\r\nposition: relative;\r\npadding-top: 14px;\r\n}\r\nfieldset, x:-moz-any-link {\r\npadding-top: 4px;\r\n}\r\nfieldset {\r\npadding-top: 14px;\r\n}\r\nlegend {\r\nfont-weight: 900;\r\ncolor: #000;\r\ntop: -1.666em;\r\nleft: -1em;\r\npadding: 0 4px;\r\n}\r\ninput {\r\npadding: 2px 5px 1px 5px;\r\n}\r\ninput[name='limit'], input[name='length'] {\r\nwidth: 3em;\r\ntext-align: right;\r\n}\r\ninput[name='text_length'] {\r\nwidth: 5em;\r\n}\r\nselect + input, select + select {\r\nmargin-left: 2px;\r\n}\r\ntextarea, input, select {\r\nborder-width: 1px;\r\nborder-style: solid;\r\n-moz-border-radius: 3px;\r\n-khtml-border-radius: 3px;\r\n-webkit-border-radius: 3px;\r\nborder-radius: 3px;\r\nborder-color: #DFDFDF;\r\n}\r\nselect {\r\nmargin: 0 0 1px 0;\r\n}\r\ninput[type=\"checkbox\"], input[type=\"radio\"], input[type=\"image\"] {\r\nborder: 0 none;\r\n}\r\ninput[type=button], input[type=submit] {\r\n\tdisplay: inline-block;\r\n\ttext-decoration: none;\r\n\tfont-size: 12px;\r\n\tline-height: 15px;\r\n\tpadding: 1px 0 0 0;\r\n\tcursor: pointer;\r\n\tborder-width: 1px;\r\n\tborder-style: solid;\r\n\t-webkit-border-radius: 3px;\r\n\tborder-radius: 3px;\r\n\t-webkit-box-sizing: content-box;\r\n\t-moz-box-sizing:    content-box;\r\n\tbox-sizing:         content-box;\r\n\twhite-space: nowrap;\r\n\tborder-color: #dfdfdf;\r\n\tbackground-color: #fff;\r\n\tcolor: #333;\r\n}\r\ninput[type=\"button\"]:focus, input[type=submit] {\r\n\tborder-color: #a1a1a1;\r\n\t-webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.1);\r\n\tbox-shadow: 1px 1px 2px rgba(0,0,0,0.1);\r\n}\r\ninput[type=button], input[type=submit] {\r\n\tpadding: 2px 5px 1px 5px;\r\n\tbackground: #ececec;\r\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));\r\n\tbackground-image: -webkit-linear-gradient(top, #fff, #eee);\r\n\tbackground-image:    -moz-linear-gradient(top, #fff, #eee);\r\n\tbackground-image:      -o-linear-gradient(top, #fff, #eee);\r\n\tbackground-image:   linear-gradient(to bottom, #fff, #eee);\r\n\tborder-color: #ccc;\r\n\t-webkit-box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);\r\n \tbox-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);\r\n \tcolor: #464646;\r\n\ttext-shadow: 1px 1px 0 #fff;\r\n}\r\ninput[type=button]:hover, input[type=submit]:hover,\r\ninput[type=button]:focus, input[type=submit]:focus  {\r\n\tbackground: #ececec;\r\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#eee));\r\n\tbackground-image: -webkit-linear-gradient(top, #fff, #eee);\r\n\tbackground-image:    -moz-linear-gradient(top, #fff, #eee);\r\n\tbackground-image:      -o-linear-gradient(top, #fff, #eee);\r\n\tbackground-image:   linear-gradient(to bottom, #fff, #eee);\r\n\tborder-color: #bbb;\r\n\t-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);\r\n\tbox-shadow: 0px 1px 1px rgba(0,0,0,.1);\r\n\tcolor: #000;\r\n}\r\ninput[type=button]:active, input[type=submit]:active {\r\n\tbackground: #eee;\r\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#f9f9f9));\r\n\tbackground-image: -webkit-linear-gradient(top, #eee, #f9f9f9);\r\n\tbackground-image:    -moz-linear-gradient(top, #eee, #f9f9f9);\r\n\tbackground-image:      -o-linear-gradient(top, #eee, #f9f9f9);\r\n\tbackground-image:   linear-gradient(to bottom, #eee, #f9f9f9);\r\n\tborder-color: #999 #ddd #ddd #999;\r\n\tcolor: #555;\r\n\t-webkit-box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);\r\n\tbox-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);\r\n}\r\ninput[type=button]:focus, input[type=submit]:focus {\r\n\tborder-color: #aaa;\r\n}\r\ninput + label input, select + label input {\r\nmargin-left: 4px;\r\n}\r\ntd input[type='checkbox']:first-child, td input[type='radio']:first-child {\r\nmargin-left: 2px;\r\n}\r\nlabel:hover {\r\ntext-decoration: underline;\r\n}\r\nfieldset div {\r\nmargin-bottom: 2px;\r\n}\r\ninput[name='Comment'] { /* !!! */\r\nwidth: 24em;\r\n}\r\ninput[name='Auto_increment'] { /* !!! */\r\nwidth: 6em;\r\n}\r\n\r\nimg {\r\nvertical-align: middle;\r\nmargin: 0;\r\npadding: 0;\r\n}\r\n.js .column {\r\nposition: relative;\r\nbackground: none;\r\npadding: 0;\r\n}\r\n.error {\r\npadding: 8px;\r\ncolor: red;\r\nbackground-color: #FEE;\r\n}\r\n.message {\r\npadding: 8px;\r\nbackground-color: #DDD;\r\n}\r\n.char {\r\ncolor: #070;\r\n}\r\n.date {\r\ncolor: #707;\r\n}\r\n.enum {\r\ncolor: #077;\r\n}\r\n.binary {\r\ncolor: red;\r\n}\r\n.jush-sql {\r\npadding: 2px 4px;\r\nmargin-right: 4px;\r\nfont-size: 11px;\r\n}\r\n.time {\r\ncolor: #333;\r\n}\r\n\r\n#content {\r\nmargin: 2px 0 0 270px;\r\npadding: 10px 20px 20px 0;\r\n}\r\n#lang {\r\nfont-size:10px;\r\nheight: 23px;\r\nwidth: 255px;\r\ndisplay: block;\r\nmargin-top: -28px;\r\npadding: 1px 0;\r\nposition: absolute;\r\ntop: 0;\r\nleft: 0;\r\ntext-align: center;\r\nbackground-color: #f1f1f1;\r\nborder: 1px solid #E3E3E3;\r\nline-height: 1.25em;\r\n}\r\n#lang select {\r\nfont-size: 10px;\r\n}\r\n#breadcrumb {\r\nmargin: 0;\r\nheight: 21px;\r\ndisplay: block;\r\nposition: absolute;\r\ntop: 0;\r\nleft: 270px;\r\nbackground-color: #f1f1f1;\r\nborder: 1px solid #E3E3E3;\r\npadding: 2px 12px;\r\nline-height: 1.25em }\r\n#menu {\r\nposition: absolute;\r\nmargin: 0;\r\ntop: 28px;\r\nleft: 0;\r\nwidth: 255px;\r\nbackground-color: #f1f1f1;\r\nborder: 1px solid #E3E3E3;\r\n}\r\n#menu form {\r\nmargin: 0;\r\n}\r\n#menu p, #logins, #tables, .tables-filter {\r\npadding-left: 8px;\r\n}\r\n#menu form p {\r\npadding-left: 0;\r\ntext-align: left;\r\n}\r\n#dbs {\r\n\tborder-bottom: none !important;\r\n\tpadding-left: 3px !important;\r\n}\r\nh1 .h1:hover {\r\ntext-decoration: underline;\r\n}\r\nh1, h2 {\r\nfont: italic normal normal 24px/29px Georgia, \"Times New Roman\", \"Bitstream Charter\", Times, serif;\r\nmargin: 0;\r\npadding: 14px 15px 3px 10px;\r\nline-height: 35px;\r\ntext-shadow: rgba(255,255,255,1) 0 1px 0px;\r\nbackground: none;\r\n}\r\nh1 .h1 {\r\nfont-size: 12px;\r\n}\r\nh2 {\r\npadding: 22px 0 0 10px;\r\n}\r\nh3 {\r\nfont: normal normal normal 18px/22px Georgia, \"Times New Roman\", \"Bitstream Charter\", Times, serif;\r\nmargin: 20px 0 0 5px;\r\n}\r\n#schema {\r\nmargin: 1.5em 0 0 220px;\r\nposition: relative;\r\n}\r\n#schema .table {\r\nborder: 1px solid #E3E3E3;\r\nbackground-color: #F1F1F1;\r\npadding: 0 2px;\r\ncursor: move;\r\nposition: absolute;\r\n}\r\n#schema .references {\r\nposition: absolute;\r\n}\r\n.js .hidden {\r\ndisplay: hidden;\r\n}\r\n.js td.hidden, .js input.hidden {\r\ndisplay: none;\r\n}\r\nlegend a {\r\ncolor: #333;\r\ntext-decoration: none;\r\ncursor: default;\r\n}\r\nlegend a:hover {\r\ncolor: #333;\r\n}\r\ncode {\r\nbackground: transparent;\r\n}\r\nfieldset, legend, table, thead, tbody, .error, .message {\r\n-moz-border-radius: 3px;\r\n-khtml-border-radius: 3px;\r\n-webkit-border-radius: 3px;\r\nborder-radius: 3px;\r\n}\r\n#breadcrumb, #lang, #menu {\r\n-moz-border-radius-bottomright: 3px;\r\n-khtml-border-bottom-right-radius: 3px;\r\n-webkit-border-bottom-right-radius: 3px;\r\nborder-bottom-right-radius: 3px;\r\n}\r\n#breadcrumb {\r\n-moz-border-radius-bottomleft: 3px;\r\n-khtml-border-bottom-left-radius: 3px;\r\n-webkit-border-bottom-left-radius: 3px;\r\nborder-bottom-left-radius: 3px;\r\n}\r\n#menu {\r\n-moz-border-radius-topright: 5px;\r\n-khtml-border-top-right-radius: 3px;\r\n-webkit-border-top-right-radius: 3px;\r\nborder-top-right-radius: 3px;\r\n}\r\n"
  },
  {
    "path": "designs/dracula/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/dracula/screenshot.png)\n"
  },
  {
    "path": "designs/dracula/adminer-dark.css",
    "content": "/*\n * Theme by Douglas Damasio [http://github.com/douglasdamasio]\n * Based on Pepa Linha\n * Color syntax inspired by Dracula Theme [https://draculatheme.com/]\n * @version 1.0 (June 2020)\n */\nhtml {\n\t--bg: #282a36;\n\t--fg: #f8f8f2;\n}\n\n @import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;600&family=Ubuntu:wght@500;700&display=swap');\n\n :root {\n  --color-darkBackground: #282a36;\n  --color-darkCurrentLine: #44475a;\n  --color-darkForeground: #f8f8f2;\n  --color-darkComment: #6272a4;\n  --color-darkCyan: #8be9fd;\n  --color-darkGreen: #50fa7b;\n  --color-darkOrange: #ffb86c;\n  --color-darkPink: #ff79c6;\n  --color-darkPurple: #bd93f9;\n  --color-darkRed: #ff5555;\n  --color-darkYellow: #f1fa8c;\n\n  --color-darkTitleSite: #bcc2cd;\n  --color-darkDraculaSite: #383a59;\n  --color-darkDraculaVSCode: #22222c;\n}\n html,\n body {\n   height: 100%;\n   background: var(--color-darkBackground);\n }\n\n body {\n  font-family: 'Source Sans Pro', sans-serif;\n }\n\n div {\n   color: var(--color-darkForeground);\n }\n\n h1 {\n   margin: 0;\n   padding: 0;\n   background: none;\n   border: 0;\n }\n\n h2 {\n   margin: 0;\n   padding: 0;\n   background: none;\n   border: 0;\n   font-family: 'Ubuntu', sans-serif;\n   font-size: 32px;\n   font-weight: 700;\n   color: var(--color-darkPink);\n   border-bottom: 1px solid var(--color-darkComment);\n   padding-bottom: 6px;\n   margin-bottom: 40px;\n }\n\n .rtl h2 {\n   margin: 0;\n   margin-bottom: 40px;\n }\n\n h3 {\n   font-size: 22px;\n   margin: 0 0 10px;\n   border-bottom: 1px solid var(--color-darkComment);\n   padding: 0;\n   padding-bottom: 6px;\n   color: var(--color-darkGreen);\n\n }\n\n p {\n   margin: 0;\n   margin-bottom: 15px;\n   align-items: center;\n   color: var(--color-darkForeground);\n }\n\n a {\n   color:var(--color-darkPink);\n   text-decoration:none;\n }\n\n a:visited {\n   color: var(--color-darkPurple);\n }\n\n a:link:hover,\n a:visited:hover {\n   color: var(--color-darkPink);\n   text-decoration:underline;\n }\n\n\n a[href*=charsets] {\n   display: none;\n }\n\n table {\n   border: 0;\n   margin: 0;\n   margin-top: 15px;\n }\n\n th, td {\n   border: 0;\n   padding: 6px;\n   color: var(--color-darkOrange);\n }\n\n th {\n   background: none;\n   color: var(--color-darkCyan);\n   font-weight: normal;\n }\n\n tbody tr:hover td,\n tbody tr:hover th {\n   background: var(--color-darkCurrentLine);\n }\n\n table:not(.checkable) th {\n   min-width: 120px;\n }\n\n#edit-fields th {\n\tmin-width: 0;\n}\n\n thead td,\n thead th {\n   background: var(--color-darkComment);\n }\n\n thead td,\n thead td a,\n thead td a:link:hover,\n thead td a:visited,\n thead td a:visited:hover,\n thead th,\n thead th a,\n thead th a:link:hover,\n thead th a:visited,\n thead th a:visited:hover {\n   color: var(--color-darkForeground);\n }\n\n table.checkable,\n p.links + table,\n pre + table,\n #edit-fields,\n p + table,\n h3 + table,\n .scrollable table{\n   border: 1px solid var(--color-darkCurrentLine);\n   margin-bottom: 15px;\n }\n\n table.checkable tbody tr:hover td,\n table.checkable tbody tr:hover th {\n   background: var(--color-darkCurrentLine);\n }\n\n .js .checkable .checked td,\n .js .checkable .checked th {\n   background: var(--color-darkDraculaSite);\n }\n\n .js .checkable thead .checked td,\n .js .checkable thead .checked th {\n   background: var(--color-darkPurple);\n }\n\n .odds tbody tr:nth-child(2n) {\n   background: var(--color-darkDraculaVSCode);\n }\n\n fieldset {\n   display: inline-block;\n   padding: 15px;\n   padding-top: 5px;\n   margin: 0 0 15px;\n   border: 0;\n   background: var(--color-darkBackground);\n }\n\n fieldset select {\n   margin-right: 5px;\n }\n\n fieldset input[type=button],\n fieldset input[type=submit],\n fieldset p {\n   margin-bottom: 0;\n }\n\n fieldset div p {\n   margin-top: 10px;\n }\n\n legend {\n   display: inline-block;\n   padding: 6px 15px;\n   margin: 0 0 0 -15px;\n   background: var(--color-darkDraculaSite);\n   font-family: 'Source Sans Pro', sans-serif;\n   color: var(--color-darkOrange);\n }\n\n legend a,\n legend a:link:hover {\n   color: var(--color-darkOrange);\n   text-decoration: underline;\n }\n\n code {\n   background: none;\n }\n\n p code,\n pre code,\n pre[contenteditable=true] {\n   padding: 10px 15px;\n   display: block;\n   font-size: 17px;\n   margin-bottom: 15px;\n }\n\n p code + a,\n p code + a:link:hover,\n p code + a:visited:hover {\n   margin-left: 15px;\n   position: relative;\n   top: -20px;\n   color: var(--color-darkOrange);\n   font-size: 12px;\n   text-decoration: underline;\n   text-transform: lowercase;\n }\n\n #content {\n   margin: 0;\n   margin-left: 400px;\n   margin-right: 54px;\n   padding: 0;\n   padding-top: 50px;\n }\n\n #content > p {\n   margin-bottom: 15px;\n   color: var(--color-darkForeground);\n }\n\n .rtl #content {\n   margin: 0;\n   margin-left: 54px;\n   margin-right: 400px;\n   padding: 0;\n   padding-top: 50px;\n }\n\n #menu {\n   width: 347px;\n   border-right: 1px solid var(--color-darkBackground);\n   box-shadow: inset -1px 0 0 #000000b4;\n   margin: 0;\n   padding: 0;\n   top: 0;\n   background: var(--color-darkDraculaVSCode);\n   bottom: 0;\n   position: fixed;\n   padding: 0 15px;\n   box-sizing: border-box;\n }\n\n #menu h1 {\n   line-height: 50px;\n   margin: 10px 0;\n }\n\n #menu h1 a {\n   font-style: normal;\n }\n\n #menu h1 .version {\n   color: var(--color-darkPurple);\n }\n\n #menu a {\n   color: var(--color-darkForeground);\n }\n\n #menu p, #tables {\n   border: 0;\n   padding: 0;\n }\n\n #menu #dbs {\n   background: var(--color-darkDraculaVSCode);\n   padding: 10px 15px 15px;\n   border: 1px solid var(--color-darkForeground);\n   border-bottom: 0;\n   box-sizing: border-box;\n   color: var(--color-darkCyan);\n }\n\n #menu #dbs select {\n   outline: 0;\n   border-color: var(--color-darkComment);\n   width: 100%;\n }\n\n #menu p.links {\n   margin: 0 0 15px;\n   border: 1px solid var(--color-darkForeground);\n   border-top: 0;\n   text-align: center;\n   display: table;\n   width: 100%;\n   box-sizing: border-box;\n }\n\n #menu p.links a {\n   padding: 8px;\n   margin: 0;\n   display: table-cell;\n   font-size: 12px;\n }\n\n #menu p.links a:hover {\n   color: var(--color-darkPink);\n }\n\n #menu p.links a.active {\n   font-weight: normal;\n   background: var(--color-darkCurrentLine);\n   color: var(--color-darkYellow);\n }\n\n.tables-filter {\n\tmargin-top: 32px;\n\tpadding: 0;\n}\n\n #content p.links {\n   margin: -10px 0 15px;\n }\n\n #content p.links a {\n   padding: 8px;\n   margin: 0;\n   display: table-cell;\n   border: 1px solid var(--color-darkBackground);\n }\n\n #content p.links a,\n #content p.links a:visited,\n #content p.links a:hover {\n   color: var(--color-darkCyan);\n }\n\n #content p.links a.active {\n   font-weight: normal;\n   border: 1px solid var(--color-darkTitleSite);\n   background: var(--color-darkCurrentLine);\n }\n\n #tables {\n   max-height: 100%;\n   margin: 15px -15px 32px !important;\n   position: absolute;\n   left: 15px;\n   right: 15px;\n   bottom: 0;\n   top: 220px;\n   overflow: hidden !important;\n   overflow-y: auto !important;\n }\n\n .rtl #tables {\n   overflow: hidden !important;\n   overflow-y: auto !important;\n }\n\n #tables a {\n   float: right;\n   padding: 6px 15px;\n }\n\n .rtl #tables a {\n   float: none;\n }\n\n #tables .structure, #tables .view {\n   float: none;\n   display: block;\n }\n\n .rtl #tables a:first-child,\n .rtl #tables br + a {\n   float: left;\n   display: block;\n   margin-left: 15px;\n }\n\n #tables a:hover,\n #tables a:hover + a,\n #tables a.active,\n #tables a.active + a {\n   background: var(--color-darkBackground);\n   color: var(--color-darkPink);\n }\n\n #tables br {\n   display: none;\n }\n\n .js .column {\n   background: var(--color-darkDraculaVSCode);\n }\n\n .js .checked .column {\n   background: var(--color-darkDraculaVSCode);\n }\n\n .pages {\n   left: 400px;\n   background: var(--color-darkCyan);\n   color: var(--color-darkBackground);\n   font-weight: bold;\n   border: 0;\n   display: inline-block;\n   position: static;\n }\n\n .pages a,\n .pages a:link,\n .pages a:link:hover,\n .pages a:visited,\n .pages a:visited:hover {\n   color: var(--color-darkBackground);\n   font-weight: normal;\n }\n\n #breadcrumb {\n   margin: 0;\n   left: 400px;\n   background: none;\n   padding: 0;\n   padding-top: 25px;\n   font-size: 12px;\n }\n\n #breadcrumb a {\n   color: var(--color-darkForeground);\n   text-decoration: underline;\n }\n\n #breadcrumb,\n #breadcrumb a:hover {\n   color: var(--color-darkTitleSite);\n }\n\n .rtl #breadcrumb {\n   margin: 0;\n   padding: 0;\n   padding-top: 25px;\n   right: 400px;\n }\n\n .logout,\n .rtl .logout {\n   top: 20px;\n   right: 54px;\n   margin: 0;\n }\n\n .rtl .logout {\n   right: auto;\n   left: 54px;\n }\n\n #logout {\n\t margin-top: 0;\n }\n\n pre.jush,\n input:not([type]),\n input[type=\"color\"],\n input[type=\"email\"],\n input[type=\"number\"],\n input[type=\"password\"],\n input[type=\"tel\"],\n input[type=\"url\"],\n input[type=\"text\"],\n input[type=\"search\"] {\n   border: 1px solid var(--color-darkCurrentLine);\n   background-color: var(--color-darkBackground);\n   padding: 6px;\n   margin: 0;\n   box-sizing: border-box;\n   color: var(--color-darkForeground);\n }\n\ninput::placeholder {\n\tcolor: var(--color-darkForeground);\n}\n\n table:not(#table) input:not([type]),\n table:not(#table) input[type=\"color\"],\n table:not(#table) input[type=\"email\"],\n table:not(#table) input[type=\"number\"],\n table:not(#table) input[type=\"password\"],\n table:not(#table) input[type=\"tel\"],\n table:not(#table) input[type=\"url\"],\n table:not(#table) input[type=\"text\"],\n table:not(#table) input[type=\"search\"] {\n   min-width: 280px;\n }\n\n input[type=submit],\n input[type=button] {\n   border: 0;\n   padding: 7px 12px;\n   cursor: pointer;\n   outline: 0;\n   box-shadow: none;\n   background: var(--color-darkGreen);\n   color: var(--color-darkBackground);\n   font-weight: bold;\n   margin-bottom: 5px;\n   transition: background .4s ease;\n   border-radius: 5px;\n   margin-top: 20px;\n }\n\n input[type=submit][disabled],\n input[type=button][disabled] {\n   background: var(--color-darkTitleSite) !important;\n   color: var(--color-darkBackground);\n   cursor: not-allowed;\n }\n\n input[type=submit]:hover,\n input[type=button]:hover,\n input[type=submit]:focus,\n input[type=button]:focus {\n   background: var(--color-darkGreen);\n   opacity: 0.8;\n }\n\n .logout input[type=submit] {\n   background: var(--color-darkRed);\n   color: var(--color-darkForeground);\n }\n\n .logout input[type=submit]:hover {\n   background: var(--color-darkRed);\n   opacity: 0.8;\n }\n\n input.default,\n input.default {\n   box-shadow: none;\n   background: var(--color-darkGreen);\n   color: var(--color-darkDraculaVSCode);\n   font-weight: bold;\n }\n\n select {\n   box-sizing: border-box;\n   margin: 0;\n   padding: 6px;\n   border: 1px solid var(--color-darkCurrentLine);\n   background-color: var(--color-darkBackground);\n   color: var(--color-darkForeground);\n }\n\n label {\n   cursor: pointer;\n   margin: 18px;\n   color: var(--color-darkOrange);\n }\n\n .error,\n .message {\n   margin: 0;\n   margin-bottom: 15px;\n   background: var(--color-darkCurrentLine);\n   color: var(--color-darkRed);\n }\n\n #logins a,\n #tables a,\n #tables span {\n   background: none;\n }\n\n #form > p {\n   margin-bottom: 15px;\n   color: var(--color-darkForeground);\n }\n\n\n #schema .table {\n   padding: 6px;\n }\n\n #schema .table a {\n   display: block;\n   margin: -6px;\n   margin-bottom: 6px;\n   padding: 6px;\n   color: var(--color-darkBackground);\n   background: var(--color-darkPurple);\n }\n\n #schema .table br {\n   display: none;\n }\n\n #schema .table span {\n   display: block;\n   margin-bottom: 1px solid var(--color-darkDraculaVSCode);\n }\n\n #lang {\n   position: fixed;\n   top: 30px;\n   right: calc(100% + 8px);\n   z-index: 10;\n   margin-right: -340px;\n   line-height: normal;\n   padding: 0;\n   left: auto;\n   font-size: 0;\n }\n\n #lang select {\n   font-size: 12px;\n   padding: 0;\n   text-align: right;\n   border: 0;\n   background: none;\n   -webkit-appearance: none;\n   -moz-appearance: none;\n   appearance: none;\n   cursor: pointer;\n   outline: 0;\n }\n\n #lang select option {\n   text-align: right;\n }\n\n .rtl #lang {\n   margin-right: 0;\n   left: 100%;\n   margin-left: -261px;\n   right: auto;\n }\n\n .jush {\n   color: var(--color-darkForeground);\n }\n\n .jush a {\n   color: var(--color-darkPurple);\n }\n\n .jush-sql a,\n .jush-sql_code a,\n .jush-sqlite a,\n .jush-pgsql a,\n .jush-mssql a,\n .jush-oracle a,\n .jush-simpledb a {\n   font-weight: normal;\n }\n\n .jush-bac,\n .jush-php_bac,\n .jush-bra,\n .jush-mssql_bra,\n .jush-sqlite_quo {\n   color: var(--color-darkYellow);\n }\n\n .jush-php_quo,\n .jush-quo,\n .jush-quo_one,\n .jush-php_eot,\n .jush-apo,\n .jush-sql_apo,\n .jush-sqlite_apo,\n .jush-sql_quo,\n .jush-sql_eot {\n   color: var(--color-darkOrange);\n }\n\n .jush-num,\n .jush-clr {\n   color: var(--color-darkPurple);\n }\n\n @media print {\n   .logout {\n     display: none;\n   }\n\n   #breadcrumb {\n     position: static;\n   }\n\n   #content {\n     margin: 0;\n   }\n }\n\n .footer {\n  position: sticky;\n  bottom: 0;\n  margin-right: -20px;\n  border-top: 20px solid var(--color-darkBackground);\n  border-image: var(--color-darkBackground) 100% 0;\n  border-image-source: var(--color-darkBackground);\n  border-image-slice: 100% 0;\n  border-image-width: 1;\n  border-image-outset: 0;\n  border-image-repeat: stretch;\n}\n\n .footer > div {\n  background: var(--color-darkBackground);\n  padding: 0 0 .5em;\n}\n"
  },
  {
    "path": "designs/esterka/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/esterka/screenshot.png)\n"
  },
  {
    "path": "designs/esterka/adminer.css",
    "content": "* {\n\tfont: 11px/1.25 Verdana, 'Geneva CE', lucida, sans-serif;\n\tcolor:#333333;\n\tmargin:0px;\n\tpadding:0px;\n}\n\na,a:visited {\n\tcolor:#0033ff;\n\ttext-decoration:none;\n\tpadding:3px 1px;\n}\n\n#content table thead span, #content table thead a {\n\tfont-weight:bold;\n\tcolor:black;\n}\n\n#content table thead a:hover {\n\tbackground:none;\n\ttext-decoration:underline;\n\tcolor:black;\n}\n\na:hover {\n\tcolor:white;\n\tbackground:#0033ff;\n}\n\nh1 {\n\tfont-size:1.5em;\n\tline-height: 2em;\n\tfont-weight:bold;\n\tbackground:white;\n\tcolor:#1e5eb6;\n\tborder-bottom:1px solid #f4f4f4;\n\n\tpadding:20px;\n\tmargin:0px;\n}\n\n#menu h1 {\n\tpadding:0px 0px 5px 20px;\n\tbackground:none;\n}\n\nh2,h3 {\n\tfont-size:1.5em;\n\tfont-weight:normal;\n\tbackground:white;\n\tcolor:#A0522D;\n\tborder-bottom:1px solid #f4f4f4;\n\tpadding:5px 0px;\n\tmargin:0px;\n}\n\nfieldset {\n\tpadding:5px;\n\tborder:1px solid #d0cdc4;\n\tbackground:#fcfaf5;\n}\n\ninput,select,textarea {\n\tborder:1px solid #e5e5e5;\n\tmargin:1px;\n\tpadding:3px;\n}\n\ninput[type=submit] {\n\tcolor:white;\n\tbackground:#A0522D;\n\tpadding:3px 10px;\n\tcursor:pointer;\n\tborder:0px solid;\n}\n\ninput[type=submit]:hover{\n\tbackground:blue;\n}\n\ninput[type=checkbox]{\n\tmargin-right:5px;\n}\n\ninput[type=image] {\n\tborder:1px solid #d0cdc4;\n}\n\ninput[type=checkbox],input[type=radio]{\n\tborder:1px solid #e5e5e5;\n\tpadding:2px 5px;\n}\n\ncode{\n\tbackground:#f0ffe1;\n\tborder:1px dashed #d5f1b9;\n\tpadding:2px 4px;\n\tfont-family:\"Courier New\";\n}\ncode a:hover{background:transparent}\n\ntable{\n\tmargin:10px 0px;\n\tborder:1px solid #d0cdc4;\n\tborder-collapse:collapse;\n}\n\ntbody tr:hover td,tbody tr:hover th{\n\tbackground:#edf4ff\n}\n\nthead{\n\ttop: 44px;\n}\n\nthead th, thead td {\n\ttext-align:center;\n\tvertical-align:middle;\n\tfont-weight:bold;\n\twhite-space:nowrap;\n\tbackground:#f2eee1;\n\tcolor:#808080;\n}\n\nth,td{\n\tborder:1px solid #d0cdc4;\n\tpadding:1px 4px;\n\tvertical-align:middle;\n}\n\nth a {\n\tfont-weight:bold;\n\tpadding-bottom:0px;\n}\n\nth {\n\tbackground:white;\n}\n\n.odds tbody tr:nth-child(2n) {\n\tbackground:#fcfaf5;\n}\n\n#content tbody tr.checked td, .odds tbody tr.checked:nth-child(2n) td {\n\tbackground:#fbe2e2;\n\tcolor:red;\n}\n\n.hidden{\n\tdisplay:none\n}\n\n.error,.message{\n\tpadding:0px;\n\tbackground:transparent;\n\tfont-weight:bold\n}\n\n.error{\n\tcolor:#c00\n}\n\n.message{\n\tcolor:#090\n}\n\n#content{\n\tmargin:0px 0px 0px 255px;\n\tpadding:50px 20px 40px 0px;\n\theight:100%;\n}\n\n#lang {\n\tbackground:#f2eee1;\n\tcolor:#808080;\n\tposition:fixed;\n\ttop:0px;\n\tleft:0px;\n\twidth:100%;\n\tpadding:10px 20px;\n\tz-index:1;\n}\n\n#breadcrumb {\n\tposition:fixed;\n\ttop:0px;\n\tleft:260px;\n\tbackground:#f2eee1;\n\tz-index:2;\n\twidth:100%;\n\tpadding:10px;\n}\n\n#menu {\n\tbackground:#fcfaf5;\n\tposition:fixed;\n\ttop:-10px;\n\tpadding:0px;\n\tpadding-top:10px;\n\tbottom:0px;\n\toverflow:auto;\n\tleft:0px;\n\twidth:240px;\n\tborder-right:5px solid #f2eee1;\n}\n\n#schema .table {\n\tpadding:5px;\n\tbackground:#fcfaf5;\n\tborder:1px solid #d0cdc4;\n}\n\n#schema .table b {\n\tcolor:#0033ff;\n\tfont-weight:bold;\n\ttext-decoration:underline;\n}\n\n#schema .table b:hover {\n\tcolor:white;\n}\n\n#logout {\n\tcolor:#fce2e2;\n\tbackground:#d73e3e;\n}\n\n#logout:hover {\n\tbackground:#ea0202;\n}\n\n#logins a, #tables a {\n\tbackground:none;\n}\n\n#logins a:hover, #tables a:hover {\n\tbackground:#A0522D;\n\tcolor:white;\n}\n\n.logout {\n\tz-index: 2;\n\tbackground-color: #f2eee1;\n\tbox-shadow: 0 0 5px 5px #f2eee1;\n}\n\n.js .column {\n\tbackground:#f2eee1;\n}\n\n#content table thead a.text:hover {\n\ttext-decoration:none;\n}\n\n#version, .version {\n\tfont-size:50%;\n}\n\n#h1:hover {\n\tcolor:white;\n}\n"
  },
  {
    "path": "designs/flat/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/flat/screenshot.png)\n"
  },
  {
    "path": "designs/flat/adminer.css",
    "content": "/**\n * Adminer \"flat\" theme by Israel Viana\n *\n * Color palette from https://kuler.adobe.com/Copy-of-Flat-UI-color-theme-3785174/\n * Navy: 2c3e50\n * Red: e74c3c\n * Gray: ecf0f1\n * Light blue: 3498db\n * Blue: 2980b9\n */\n\n/*\n * Basic tags\n */\n\na {\n\tcolor: #2980b9;\n}\n\na:visited {\n\tcolor: #3498db\n}\n\na:link:hover, a:visited:hover {\n\tcolor: #e74c3c;\n}\n\nh1 {\n\tborder-bottom: 1px solid #e74c3c;\n\tbackground: #ecf0f1;\n}\n\nh2 {\n\tborder-bottom: 1px solid #e74c3c;\n\tbackground: #ecf0f1;\n}\n\n/*\n * Tables\n */\n\ntable {\n\tborder-top: 0;\n\tborder-left: 1px solid silver;\n}\n\ntd, th {\n\tborder-right: 1px solid silver;\n\tborder-bottom: 1px solid silver;\n\tpadding: .3em .5em;\n}\n\nthead th, thead td {\n\tbackground: #3498db;\n\tcolor: white;\n\tborder-right: 1px solid white;\n\tborder-bottom: 1px solid white;\n\tpadding: .3em .5em;\n}\n\nthead th a, thead td a {\n\tcolor: #eee;\n}\n\n.js span.column {\n\tbackground: white;\n}\n\tth span.column a.text {\n\t\tcolor: #2980b9;\n\t}\n\n.js .checkable .checked td, .js .checkable .checked th {\n\tbackground: rgba(52, 152, 219, .3);\n}\n\n.pages {\n  border: none;\n  box-shadow: -1px -1px 4px silver;\n}\n\n/*\n * Common sections\n */\n\n#breadcrumb a {\n\tcolor: #e74c3c;\n}\n\n#logout {\n\tfont-weight: bold;\n}\n\n/*\n * Elements\n */\n\nsup {\n\tpadding: 3px 7px;\n\tbackground: #3498db;\n\tcolor: white;\n\tborder-radius: 2em;\n}\n\ncode.jush-sql {\n\tdisplay: block;\n\tpadding: .4em .7em;\n\tline-height: 1.5em;\n}\n"
  },
  {
    "path": "designs/galkaev/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/galkaev/screenshot.png)\n"
  },
  {
    "path": "designs/galkaev/adminer-dark.css",
    "content": "/** theme \"easy on the eyes\" for Adminer by p.galkaev@miraidenshi-tech.jp */\r\n\r\nhtml {\r\n\t--bg: black;\r\n\t--fg: #ccc;\r\n}\r\n\r\n@import url(//fonts.googleapis.com/css?family=Source+Sans+Pro:400,900);\r\n\r\n/* reset\r\n   ----------------------------------------------------------------------- */\r\n\r\n*,\r\n*:after,\r\n*:before {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\toutline: none;\r\n\tcursor: default;\r\n\t-webkit-appearance: none;\r\n\t-moz-box-sizing: border-box;\r\n\t-webkit-box-sizing: border-box;\r\n\tbox-sizing: border-box;\r\n\t-webkit-print-color-adjust: exact;\r\n}\r\n\r\n/* for font awesome */\r\n*:not(.fa) {\r\n\tfont-family: 'Source Sans Pro', sans-serif;\r\n}\r\n\r\n#logins a, #tables a, #tables span {\r\n  background: none;\r\n}\r\n\r\np,\r\nform\r\n{\r\n\tmargin: 0;\r\n\tmargin-bottom: 20px;\r\n\tfont-size: 14px;\r\n}\r\n\r\np:last-child,\r\nform:last-child\r\n{\r\n\tmargin-bottom: 0;\r\n}\r\n\r\n.type,\r\n.options select\r\n{\r\n\twidth: 100%;\r\n}\r\n\r\nsup{\r\n\tdisplay: none;\r\n}\r\n\r\n/* js tooltip\r\n   ----------------------------------------------------------------------- */\r\n\r\n.js .column {\r\n\tposition: absolute;\r\n\tpadding: 0;\r\n\tmargin-top: 0;\r\n\ttop: 50px;\r\n\tz-index: 9;\r\n\tleft: 0px;\r\n\twidth: 100%;\r\n}\r\n\r\n.js .column:not(.hidden){\r\n\tdisplay: flex;\r\n}\r\n\r\n.js .column a{\r\n\ttext-align: center;\r\n\tcolor: black;\r\n\tfont-weight: bold;\r\n\tflex-grow: 1;\r\n\tbackground: #fb4;\r\n\theight: 40px;\r\n\tline-height: 40px;\r\n\tfont-size: 15px;\r\n\tfont-weight: normal;\r\n}\r\n\r\n.js .column a:hover{\r\n\tbackground-color: gold;\r\n\tcolor: black;\r\n}\r\n\r\n#help {\r\n\tposition: absolute;\r\n\tborder: none;\r\n\tbackground: #fb4;\r\n\tfont-family: monospace;\r\n\tz-index: 1;\r\n\tfont-size: 14px;\r\n\tline-height: 30px;\r\n\tpadding: 0;\r\n}\r\n\r\n#help a{\r\n\tcolor: black;\r\n\theight: 100%;\r\n\tdisplay: block;\r\n\tpadding: 0 10px;\r\n}\r\n\r\n#help a:hover{\r\n\tbackground-color: gold;\r\n}\r\n\r\n#help, .js .column{\r\n\tdisplay: none;\r\n}\r\n\r\n/* error and message\r\n   ----------------------------------------------------------------------- */\r\n\r\n.error, .message {\r\n\tpadding: 5px 15px 7px;\r\n\tmargin: 10px 0;\r\n\tfont-size: 14px;\r\n\tdisplay: table;\r\n\tborder-radius: 3px;\r\n\tcolor: white;\r\n}\r\n\r\n.error{\r\n\tbackground-color: crimson;\r\n}\r\n\r\n.message{\r\n\tbackground-color: seagreen;\r\n}\r\n\r\n/* scroll bar\r\n   ----------------------------------------------------------------------- */\r\n\r\n::selection {\r\n\tbackground-color: #2a65ae;\r\n}\r\n/*\r\n::-moz-selection {\r\n\tbackground-color: #333;\r\n}*/\r\n\r\n/* scroll bar\r\n   ----------------------------------------------------------------------- */\r\n\r\n::-webkit-scrollbar {\r\n\tbackground-color: black;\r\n\tcursor: pointer;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n\tbackground-color: #555;\r\n\tcursor: pointer;\r\n}\r\n\r\n::-webkit-scrollbar:vertical{\r\n\twidth: 6px;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:vertical{\r\n\tborder-left: 0px solid black;\r\n\twidth: 6px;\r\n}\r\n\r\n::-webkit-scrollbar:horizontal{\r\n\theight: 6px;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:horizontal{\r\n\tborder-top: 0px solid black;\r\n\theight: 6px;\r\n}\r\n\r\n::-webkit-scrollbar-corner{\r\n\tcolor: black;\r\n\tbackground-color: black;\r\n\tborder-color: black;\r\n}\r\n\r\n::-webkit-resizer{\r\n\tbackground-color: #555;\r\n\tborder-radius: 100%;\r\n}\r\n\r\n/* html and body\r\n   ----------------------------------------------------------------------- */\r\n\r\nhtml,\r\nbody {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n    max-height: 100%;\r\n    overflow: hidden;\r\n\r\n}\r\n\r\nbody{\r\n\tmin-height: 100%;\r\n\tfont-size: 14px;\r\n\tposition: relative;\r\n\tcolor: #ccc;\r\n\tbackground-color: black;\r\n\toverflow: hidden;\r\n\tdisplay: flex;\r\n\tflex-wrap: nowrap;\r\n\tfont: inherit;\r\n}\r\n\r\n/* headings\r\n   ----------------------------------------------------------------------- */\r\n\r\nh1{\r\n\tfont-size: 24px;\r\n\tmargin: 0;\r\n\tpadding: 0 18px;\r\n\tborder-bottom: 1px solid #444;\r\n\tfont-weight: bold;\r\n\theight: 70px;\r\n\tline-height: 70px;\r\n\tcolor: #555;\r\n\tbackground: none;\r\n}\r\n\r\nh2{\r\n\tfont-size: 24px;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tpadding-left: 50px;\r\n\tborder-bottom: 1px solid #333;\r\n\tcolor: #2CC990;\r\n\tfont-weight: bold;\r\n\tbackground: none;\r\n\theight: 70px;\r\n\tline-height: 70px;\r\n\ttext-transform: uppercase;\r\n}\r\n\r\nh3{\r\n\tfont-weight: bold;\r\n\tfont-size: 24px;\r\n\tmargin: 40px 0 10px;\r\n\tcolor: #2CC990;\r\n\tpadding-bottom: 5px;\r\n}\r\n\r\n/* links\r\n   ----------------------------------------------------------------------- */\r\n\r\na{\r\n\tcolor: inherit;\r\n\tcursor: pointer;\r\n}\r\n\r\na:hover, a:visited{\r\n\tcolor: inherit;\r\n}\r\n\r\na:link:hover, a:visited:hover {\r\n\tcolor: inherit;\r\n\ttext-decoration: none;\r\n}\r\n\r\n/* table\r\n   ----------------------------------------------------------------------- */\r\n\r\ntable{\r\n\tmargin: 0;\r\n\tmargin-bottom: 20px;\r\n\tborder: 0;\r\n\tborder-collapse: collapse;\r\n\tfont-size: 13px;\r\n\twidth: 100%;\r\n\t/*table-layout: fixed;*/\r\n}\r\n\r\ntr:hover th,\r\n.checked th\r\n{\r\n\tbackground: #333 !important;\r\n\tcolor: #ddd;\r\n\tborder-color: none;\r\n}\r\n\r\ntr:hover td,\r\n.checked td\r\n{\r\n\tbackground: #222 !important;\r\n\tcolor: #ddd;\r\n\tborder-color: none;\r\n}\r\n\r\n.links + table tr:hover th{\r\n\tcolor: #ddd;\r\n\tbackground: #336f5a !important;\r\n}\r\n\r\n.links + table tr:hover td{\r\n\tbackground: #2CC990 !important;\r\n\tcolor: #333;\r\n}\r\n\r\np + table{\r\n\tmargin-top: 20px;\r\n}\r\n\r\ntr{\r\n\tpadding-bottom: 1px;\r\n}\r\n\r\ntd, th {\r\n\tborder: 0;\r\n\tborder-right: 1px solid #333;\r\n\tpadding: 0 12px;\r\n\tline-height: 30px;\r\n\tposition: relative;\r\n}\r\n\r\ntd:last-child,\r\nth:last-child{\r\n\tborder-right: none;\r\n}\r\n\r\nth{\r\n\tposition: relative;\r\n\tbackground: #222;\r\n\tfont-weight: normal;\r\n\twidth: 17%;\r\n\tborder-left: 5px solid #336f5a;\r\n\tborder-bottom: 1px solid rgba(255, 255, 255, .13);\r\n\tcolor: #999;\r\n}\r\n\r\n.checkable td:first-child{\r\n\tbackground: #222;\r\n\tborder-right-style: solid;\r\n}\r\n\r\ntable.checkable th{\r\n\tborder-left: none;\r\n}\r\n\r\ntd{\r\n\tbackground: #000;\r\n\tborder-bottom: 1px solid rgba(255, 255, 255, .1);\r\n}\r\n\r\n.odds tbody tr:nth-child(2n) th{\r\n\tbackground: #222;\r\n}\r\n\r\n.odds tbody tr:nth-child(2n) td{\r\n\tbackground: #000;\r\n}\r\n\r\nthead td,\r\nthead th\r\n{\r\n\tbackground: transparent !important;\r\n\tcolor: #ccc;\r\n\tborder-right-style: dashed;\r\n\tfont-weight: bold;\r\n}\r\n\r\ntable#edit-fields td,\r\ntable#edit-fields th\r\n{\r\n\tpadding: 0;\r\n\tpadding-left: 5px;\r\n}\r\n\r\ntable#edit-fields thead th,\r\ntable#edit-fields thead td\r\n{\r\n\tpadding-left: 10px;\r\n}\r\n\r\nthead tr:hover th,\r\nthead tr:hover td,\r\n.links + table thead tr:hover th,\r\n.links + table thead tr:hover td,\r\ntable#edit-fields thead tr:hover th,\r\ntable#edit-fields thead tr:hover td\r\n{\r\n\tbackground-color: transparent !important;\r\n\tcolor: inherit !important;\r\n\tborder-bottom: 1px solid rgba(255, 255, 255, .1) !important;\r\n}\r\n\r\nthead tr:hover th{\r\n\tborder-bottom: 1px solid rgba(255, 255, 255, .13) !important;\r\n}\r\n\r\nthead th {\r\n\tborder-left-color: transparent;\r\n\ttext-align: left;\r\n\tpadding: 10px;\r\n}\r\n\r\n/* form\r\n   ----------------------------------------------------------------------- */\r\n\r\ninput,\r\nselect,\r\ntextarea\r\n{\r\n\tcolor: #333;\r\n\tfont-size: 15px;\r\n\theight: 30px;\r\n\tbackground-color: #ddd;\r\n\tborder: none;\r\n\tborder-radius: 3px;\r\n\tline-height: 28px;\r\n\tcursor: pointer;\r\n\tpadding: 0;\r\n\tpadding-left: 10px;\r\n\t-webkit-appearance: none;\r\n\toutline: none;\r\n}\r\n\r\ninput:hover,\r\nselect:hover,\r\ninput:focus,\r\nselect:focus\r\n{\r\n\tbackground-color: #bbb;\r\n}\r\n\r\nth input,\r\ntd input,\r\nth select,\r\ntd select,\r\ntd textarea\r\n{\r\n\tbackground-color: transparent;\r\n\tcolor: pink;\r\n\twidth: 100%;\r\n\tdisplay: inline;\r\n\tborder-left: 1px dashed #555;\r\n\tborder-radius: 0;\r\n}\r\n\r\nth input::placeholder,\r\ntd input::placeholder\r\n{\r\n\tcolor: #fff;\r\n}\r\n\r\n\r\nth input:hover,\r\nth select:hover,\r\ntd input:hover,\r\ntd select:hover,\r\nth input:focus,\r\nth select:focus,\r\ntd input:focus,\r\ntd select:focus\r\n{\r\n\tbackground-color: rgba(255, 255, 255, .15);\r\n}\r\n\r\nth input[type='checkbox'],\r\nth input[type='radio'],\r\ntd input[type='checkbox'],\r\ntd input[type='radio']{\r\n\tborder-left: none;\r\n\tbackground-color: transparent !important;\r\n}\r\n\r\n\r\ntd input + a,\r\ntd input + a:visited\r\n{\r\n\ttext-transform: uppercase;\r\n\tmargin-left: 5px;\r\n\tcolor: dodgerblue;\r\n\tfont-size: 12px;\r\n\tfont-weight: normal;\r\n}\r\n\r\ntd input + a:hover{\r\n\tcolor: lightskyblue !important;\r\n}\r\n\r\ninput.icon{\r\n\tpadding-left: 0;\r\n}\r\n\r\ninput.icon::after{\r\n\tcontent: '';\r\n}\r\n\r\nth select,\r\ntd select\r\n{\r\n\tcolor: lightcoral;\r\n}\r\n\r\ninput[type='number'] {\r\n\tmin-width: 55px;\r\n}\r\n\r\n/* radio */\r\ninput[type='radio']{\r\n\t-webkit-appearance: radio;\r\n\twidth: 18px;\r\n\theight: 18px;\r\n\tvertical-align: middle;\r\n\tmargin-left: 8px;\r\n\tmargin-right: 0;\r\n}\r\n\r\n/* checkbox */\r\ninput[type='checkbox']{\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tmargin-right: 6px;\r\n\tposition: relative;\r\n\tborder-radius: 2px;\r\n\tmargin-left: 20px;\r\n}\r\n\r\ninput[type=checkbox]:hover{\r\n\tborder-color: white;\r\n}\r\n\r\ninput[type=checkbox]::after {\r\n\tcursor: pointer;\r\n\tposition: absolute;\r\n\tcontent: '×';\r\n\tleft: 17%;\r\n\ttop: 4.5%;\r\n\tcolor: #ccc;\r\n\tfont-size: 35px;\r\n\tfont-family: sans-serif;\r\n\tfont-weight: bold;\r\n}\r\n\r\ninput[type=checkbox]:hover::after {\r\n\tcolor: #aaa;\r\n}\r\n\r\ninput[type=checkbox]:checked::after {\r\n\tcolor: #333;\r\n}\r\n\r\ntd input[type='checkbox'],\r\nth input[type='checkbox']\r\n{\r\n\tmargin-left: 10px;\r\n\tmargin-right: 26px;\r\n}\r\n\r\ntd input[type='checkbox']::after{\r\n\tleft: 10%;\r\n\ttop: -2px;\r\n\tcolor: #333;\r\n}\r\n\r\ntd input[type='checkbox']:hover::after{\r\n\tcolor: #555;\r\n}\r\n\r\ntd input[type='checkbox']:checked::after{\r\n\tcolor: #ddd;\r\n}\r\n\r\np input:first-child{\r\n\tmargin-left: 8px;\r\n}\r\n\r\nlabel{\r\n\tline-height: 27px;\r\n\tfont-size: 14px;\r\n}\r\n\r\nth label{\r\n\tline-height: 35px;\r\n}\r\n\r\nlabel input {\r\n\tvertical-align: top;\r\n}\r\n\r\n/* submit */\r\ninput[type='submit']{\r\n\tcolor: white;\r\n\tbackground-color: royalblue;\r\n\tpadding: 0 25px;\r\n\tmargin-right: 20px;\r\n\tborder-radius: 2px;\r\n}\r\n\r\ninput[type='submit']:hover{\r\n\tbackground-color: #214ac5;\r\n}\r\n\r\n/* select */\r\nselect{\r\n\tpadding-left: 6px;\r\n}\r\n\r\n/* textarea */\r\ntextarea{\r\n\tmin-height: 150px;\r\n\twidth: 100%;\r\n}\r\n\r\n/* fieldset */\r\nfieldset {\r\n\tdisplay: inline;\r\n\tvertical-align: top;\r\n\tpadding: 4px 7px 7px;\r\n\tmargin: 0 5px 10px;\r\n\tborder: 1px dashed #555;\r\n\tborder-radius: 2px;\r\n\tmin-height: 60px;\r\n}\r\n\r\nfieldset > div{\r\n\tdisplay: flex;\r\n}\r\n\r\nfieldset > div * + p{\r\n\tmargin-left: 10px;\r\n}\r\n\r\nfieldset > div > div{\r\n\tmargin-left: 10px;\r\n}\r\n\r\nfieldset > div > div:first-child{\r\n\tmargin-left: 0;\r\n}\r\n\r\nfieldset > div input,\r\nfieldset > div select\r\n{\r\n\tmargin-right: 5px;\r\n}\r\n\r\nfieldset > div input[type='checkbox']{\r\n\tmargin-left: 5px;\r\n}\r\n\r\nfieldset input{\r\n\tflex-grow: 1;\r\n}\r\n\r\nfieldset input[type='submit']{\r\n\tmargin-right: 10px;\r\n}\r\n\r\nfieldset input[type='submit']:last-of-type{\r\n\tmargin-right: 0;\r\n}\r\n\r\nlegend{\r\n\tfont-size: 14px;\r\n\tbackground-color: #000;\r\n\tpadding: 0 3px;\r\n\tcolor: #999;\r\n}\r\n\r\n.footer {\r\n\tborder-image: linear-gradient(rgba(0, 0, 0, .2), #000) 100% 0;\r\n}\r\n\r\n.footer > div{\r\n\tbackground: #000;\r\n}\r\n\r\n/* menu\r\n   ----------------------------------------------------------------------- */\r\n\r\n#menu{\r\n\theight: 100%;\r\n\twidth: 300px;\r\n\tbackground-color: #333;\r\n\tposition: relative;\r\n\torder: 1;\r\n\tflex-grow: 0;\r\n\tflex-shrink: 0;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\ttop: 0;\r\n\toverflow-y: overlay;\r\n\tz-index: 1;\r\n}\r\n\r\n#menu p {\r\n\tpadding: 18px;\r\n\tmargin: 0;\r\n\tborder-bottom: 1px solid #444;\r\n}\r\n\r\n/* logo */\r\n#h1{\r\n\tcolor: #555;\r\n\ttext-decoration: none;\r\n\tfont-style: inherit;\r\n}\r\n\r\n.version {\r\n  color: #555;\r\n  font-size: inherit;\r\n}\r\n\r\n/* links */\r\n#menu .links{\r\n\tpadding-top: 0;\r\n\tpadding-bottom: 10px;\r\n}\r\n\r\n#menu .links a:nth-child(even){\r\n\tmargin-left: 6px;\r\n}\r\n\r\n#menu .links a{\r\n\tdisplay: inline-block;\r\n\tvertical-align: top;\r\n\twidth: 127px;\r\n\theight: 31px;\r\n\tmargin: 0;\r\n\tmargin-bottom: 10px;\r\n\tborder: 1px solid #555;\r\n\tline-height: 27px;\r\n\ttext-align: center;\r\n\ttext-transform: uppercase;\r\n\tfont-size: 12px;\r\n\tborder-radius: 3px;\r\n\tcolor: #999;\r\n}\r\n\r\n#menu .links a.active,\r\n#menu .links a:hover\r\n{\r\n\tborder: 1px solid #ccc;\r\n\tfont-weight: normal;\r\n\tcolor: inherit;\r\n}\r\n\r\n/* tables */\r\n#logins, #tables{\r\n\tborder-bottom: none;\r\n\tline-height: 20px;\r\n\tpadding: 18px 0;\r\n\toverflow-y: auto !important;\r\n}\r\n\r\n#tables br{\r\n\tdisplay: none;\r\n}\r\n\r\n#tables a {\r\n\tfloat: right;\r\n\tpadding: 5px 18px 9px;\r\n\tline-height: 17px;\r\n\tcolor: #2CC990;\r\n\tfont-size: 13px;\r\n}\r\n\r\n#tables .structure, #tables .view {\r\n\tfloat: none;\r\n\tdisplay: block;\r\n\tcolor: inherit;\r\n\tfont-size: 14px;\r\n}\r\n\r\n#logins a {\r\n\tdisplay: block;\r\n\tpadding: 5px 18px 9px;\r\n\tcolor: inherit;\r\n\tfont-size: 14px;\r\n}\r\n\r\n#tables a.select.active,\r\n#tables a.select:hover\r\n{\r\n\tcolor: #fba;\r\n}\r\n\r\n#logins a:hover,\r\n#tables a[title]:hover,\r\n#tables a.active,\r\n#tables a.select:hover + a,\r\n#tables a.select.active + a\r\n{\r\n\tbackground-color: #555;\r\n\tfont-weight: normal;\r\n}\r\n\r\n/* content\r\n   ----------------------------------------------------------------------- */\r\n\r\n#content{\r\n\theight: 100%;\r\n\twidth: 100%;\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n\tpadding-left: 50px;\r\n\tpadding-right: 50px;\r\n\tpadding-bottom: 30px;\r\n\toverflow-y: auto !important;\r\n\torder: 2;\r\n\tflex-grow: 1;\r\n}\r\n\r\n#breadcrumb{\r\n\tposition: relative;\r\n\tdisplay: none;\r\n}\r\n\r\n#content h2{\r\n\tmargin-left: -50px;\r\n}\r\n\r\n/* links */\r\n#content .links a,\r\ncode.jush-sql ~ a,\r\n#fieldset-history > a:first-child\r\n{\r\n\tdisplay: inline-block;\r\n\theight: 32px;\r\n\tline-height: 30px;\r\n\tpadding: 0 10px;\r\n\tborder: 1px solid #666;\r\n\tborder-radius: 3px;\r\n\tfont-size: 12px;\r\n\ttext-transform: uppercase;\r\n}\r\n\r\n#content .links a:hover,\r\ncode.jush-sql ~ a:hover,\r\n#fieldset-history > a:first-child:hover\r\n{\r\n\tcolor: #eee;\r\n\tborder-color: #eee;\r\n}\r\n\r\n#ajaxstatus + *{\r\n\tmargin-top: 18px;\r\n}\r\n\r\n#ajaxstatus + *.links {\r\n\tmargin-top: 0 !important;\r\n\theight: 65px;\r\n\tline-height: 55px;\r\n\tmargin-bottom: 0;\r\n}\r\n\r\n#ajaxstatus + .links a{\r\n\twhite-space: nowrap;\r\n\tmargin-right: 20px;\r\n\tpadding: 0;\r\n\tpadding-bottom: 5px;\r\n\tborder: 0;\r\n\tborder-radius: 0;\r\n\tfont-size: 15px;\r\n\tfont-weight: bold;\r\n}\r\n\r\n#ajaxstatus + .links a.active,\r\n#ajaxstatus + .links a:hover\r\n{\r\n\tborder-bottom: 1px solid;\r\n\tborder-color: inherit;\r\n\tcolor: inherit;\r\n}\r\n\r\n/* fieldset search */\r\n#fieldset-search > div > *{\r\n\tmargin-right: 5px;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n/* fieldset search */\r\n#fieldset-partition p{\r\n\tmargin-bottom: 0;\r\n}\r\n\r\n/* feldset history */\r\n#fieldset-history{\r\n\tflex-wrap: wrap;\r\n}\r\n\r\n#fieldset-history i{\r\n\tdisplay: none;\r\n}\r\n\r\n#fieldset-history input[type='submit']{\r\n\tflex-grow: 0;\r\n\torder: 1;\r\n\tmargin-top: 1px;\r\n\tmargin-left: 17px;\r\n}\r\n\r\n#fieldset-history > div a:last-child{\r\n\torder: 2;\r\n}\r\n\r\n#fieldset-history > a{\r\n\tflex-grow: 0;\r\n\tflex-basis: 5%;\r\n\tmin-width: 45px;\r\n\ttext-align: center;\r\n\tmargin-bottom: 10px;\r\n\tmargin-left: 5px;\r\n}\r\n\r\n#fieldset-history > .time{\r\n\tflex-grow: 0;\r\n\tflex-basis: 5%;\r\n\ttext-align: center;\r\n\tline-height: 29px;\r\n}\r\n\r\n#fieldset-history > code{\r\n\tflex-grow: 1;\r\n\tflex-basis: 89%;\r\n\tline-height: 29px;\r\n}\r\n\r\n#fieldset-history > .time{\r\n\tflex-grow: 0;\r\n\tflex-basis: 5%;\r\n\ttext-align: center;\r\n}\r\n\r\n/* sql\r\n   ----------------------------------------------------------------------- */\r\n\r\n.sqlarea{\r\n\tborder: 1px solid #444 !important;\r\n\twidth: 100% !important;\r\n\tpadding: 12px 15px !important;\r\n\tfont-size: 15px;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.jush-sql_code{\r\n\tcolor: #fafafa !important;\r\n\tfont-family: 'Source Sans Pro', sans-serif !important;\r\n}\r\n\r\n.jush a, .jush a:visited{\r\n\tcolor: #fba;\r\n\tfont-weight: normal;\r\n}\r\n\r\n.jush a:hover{\r\n\tcolor: #fba;\r\n\tcursor: pointer;\r\n}\r\n\r\n.jush-php_quo, .jush-quo, .jush-quo_one, .jush-php_eot, .jush-apo, .jush-sql_apo, .jush-sqlite_apo, .jush-sql_quo, .jush-sql_eot{\r\n\tcolor: aquamarine;\r\n}\r\n\r\n.jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo{\r\n\tcolor: plum;\r\n}\r\n\r\n.jush-num, .jush-clr{\r\n\tcolor: #85E2FF;\r\n}\r\n\r\ncode {\r\n\tbackground: #000;\r\n\tfont-size: 14px;\r\n}\r\n\r\ncode.jush-sql ~ a{\r\n\tposition: relative;\r\n\tmargin-left: 5px;\r\n\t/*margin-top: 20px;\r\n\tmargin-bottom: 20px;\t*/\r\n}\r\n\r\ncode.jush-sql ~ a:first-of-type{\r\n\tmargin-left: 30px;\r\n}\r\n\r\ncode.jush-sql ~ a:first-of-type::before{\r\n\tcontent: '◀';\r\n\tcolor: #555;\r\n\tposition: absolute;\r\n\tleft: -22px;\r\n\tfont-size: 22px;\r\n\ttop: -1px;\r\n}\r\n\r\n/* logout form\r\n   ----------------------------------------------------------------------- */\r\n\r\n.logout {\r\n\tz-index: 10;\r\n}\r\n\r\n#logout {\r\n\tmargin-right: 0;\r\n\tmargin-left: 10px;\r\n}\r\n"
  },
  {
    "path": "designs/haeckel/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/haeckel/screenshot.png)\n"
  },
  {
    "path": "designs/haeckel/adminer.css",
    "content": "/**\n * Alternative style for Adminer.\n *\n * Klemens Häckel [http://clickdimension.wordpress.com/]\n *\n * new remaster based on style for WT-NMP 13.12\n *\n * Created by Miroslav Pokorný [http://fuch.cz].\n * Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).\n * Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.\n *\n * updated 2018-02 by Jan [http://cloux.org]\n *  - fixes and usability improvements for Adminer 4.6.1\n *\n */\n\n/*** Fonts ***/\n/*\n * @import url(http://fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);\n@import url(http://fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);\n*\n* */\n\n* {\n\t/* font-family: 'Ubuntu', sans-serif */\n\t/* font-family: Verdana;  font name */\n\tfont-family: Verdana,Arial,Helvetica,sans-serif;\n}\ntextarea, pre, code, samp, kbd, var {\n\tfont-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace;\n}\n/*** Icons ***/\n/* Error message */\nhtml>/**/body .error {\n\tbackground: #FFEEEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC\") no-repeat 0.8em center;\n\tpadding-left: 38px;\n}\n/* Ok message */\nhtml>/**/body .message, html>/**/body #menu p.message {\n\tbackground: #EEFFEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==\") no-repeat scroll 0.8em center; padding-left:38px;\n}\n\n/* Adminer logo */\nhtml>/**/body h1 {\n\tbackground: #eee;\n\tbox-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;\n\tfont-size: 1em;\n\tpadding: 7px 6px 5px 35px;\n\tposition:fixed;\n\twidth: 100%;\n\theight: 22px;\n\tline-height: 22px;\n}\n/* Logout */\nhtml>/**/body input[name=\"logout\"], #logout {\n\tbackground: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC\") no-repeat 8px 4px;\n\tcolor: #555555;\n\tborder: none;\n\tcursor: pointer;\n\theight: 22px;\n\tposition: absolute;\n\tright: 8px;\n\ttext-indent: 0px;\n\ttop: 6px;\n\twidth: 120px;\n\tposition:fixed;\n\tz-index: 10;\n}\nhtml>/**/body input[name=\"logout\"]:hover, #logout:hover {\n\tcolor: #444444;\n\ttext-shadow: 1px 1px 1px #888888;\n}\n\n/*** \"Alter table\" picture ***/\nhtml>/**/body table a[href*=\"&create=\"],\nhtml>/**/body #content p.links a[href*=\"&create=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC\") no-repeat 0px 0px;\n\tpadding: 0px 0px 3px 22px;\n}\n/*** \"Alter index\" picture ***/\nhtml>/**/body #content table a[id|=\"Index_length\"],\nhtml>/**/body #content p.links a[href*=\"&indexes=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat 0px 0px;\n\tpadding: 0px 0px 3px 22px;\n}\n/*** \"Create table\" picture ***/\nhtml>/**/body a[href$=\"&create=\"],\nhtml>/**/body #content p.links a[href$=\"&create=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=\") no-repeat 0px 2px;\n\tpadding: 4px 0px 0px 22px;\n}\n\n/*** Menu Links ***/\n/* Fix size */\nhtml>/**/body #menu .links {\n}\n/* Sql command */\nhtml>/**/body #menu p.links a[href$=\"&sql=\"] {\n\tbackground: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==\") no-repeat 0px 0px;\n\tpadding: 3px 0px 0px 22px;\n}\n/* Import */\nhtml>/**/body #menu p.links a[href$=\"&import=\"] {\n\tbackground: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ%0AbWFnZVJlYWR5ccllPAAAAnRJREFUeNqMU72PElEQ/%2B1HWHZhgYPjkiMWxoLkaChMzgoJ0JhwlsTK%0AhsKQmFxjT4ImxL/AxOSKS/wPXAs7Q%2BEHqO0VXElAkc89BA7c3ee8PY5w5xVOMjvvzXszb%2BY3vxUK%0AhQJW8pB0F/8nP0gNvpAvPYvFYvfo6Oj1dDrFfD6HZdno9X7T2oHXq0LXdQQCAQSDAZRKj55KkuTG%0AyScnJ0gkEu7GsizU63VMJhOEwxHMZgznCwc%2Bnw7LtiBKIjSfeqUUkSeo1Wprx2AwQCaTgWmOKeES%0AjHxMcC4UF7opvIVCr9e7ZRgGstms6%2Bz3%2B9jfv4ePn%2BoU6KUgtgq2Xb2SQBCEO6enpy83nY7jYDQa%0AIbylo91u42e7Cb/fT/0H0Ww239OVb5d3BQLjMdnbfFOpVJ5zm8vlEIls4/OXr1D9W9AJOL/uQ5BA%0A5EAeloocxFcuBqRvotHoi3w%2B3y0Wi1gul6A9DOMtzmk9MIfoDroYkZ1Mz/DHWlwFcW9vD6lUau2I%0ARCI4Pj6mJDtQNW3duyPYN2PAE2xKOp12J8F50B2ONyZASVZ6fQqX8r1arb5LJpMHHMTZbLZKZBGR%0AvBgSiH0C0bgGoswvr5C/Wy6XDzaZ%2BIsqMOdTyIoIn18lAHXcz%2BcePHtyaND0Gm6CVquFUCjEwWP8%0ANdM01y93aZTmcgpF8yDEAhBlBk1TQI/YoihiPB5DbjQaiMfjUBRFvvm/Yf8wkR6QeJXEHxcDlcih%0Ax2IxTZZllywej8dtQVJUaOdnEBXBbUHTVEiyyJmqdjqdHYqdCPQJk8ZUVc0wxrZtm0bFmEsyriT8%0AA14yWcbXdN6jCj7QeeevAAMALZ84sPgoxOsAAAAASUVORK5CYII%3D%0A\") no-repeat 0px 0px;\n\tpadding: 0px 0px 2px 22px;\n}\n/* Export */\nhtml>/**/body #menu p.links a[href*=\"&dump=\"]  {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==\") no-repeat 0px 0px;\n\tpadding: 2px 0px 0px 22px;\n}\n/* Create table */\nhtml>/**/body #menu p.links a[href$=\"&create=\"] {\n\tdisplay: none; /* 'Create table' is now available only when database is displayed, below the list of tables */\n}\n/* Menu + Table - Select data */\nhtml>/**/body .links a[href*=\"&select=\"],\nhtml>/**/body #menu li a[href*=\"&select=\"],\nhtml>/**/body #content form table thead>tr>td a[href*=\"&select=\"],\nhtml>/**/body #content table a[id|=\"Rows\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=\") no-repeat 1px 0px;\n}\nhtml>/**/body #menu ul li {\n\theight: 19px;\n}\nhtml>/**/body #menu li a[href*=\"&select=\"] {\n\tfloat: left;\n\twidth: 0px;\n\theight: 18px;\n\tmargin-left: -2px;\n\tmargin-right: 2px;\n\toverflow: hidden;\n\tpadding-left: 18px;\n\ttext-decoration: none;\n}\nhtml>/**/body #menu li a[href*=\"&select=\"]:link:hover {\n\tbackground-color: #83D0E9;\n}\n\n/* Menu - Show structure */\nhtml>/**/body #menu li a[href*=\"&table=\"] {\n\twidth: 280px;\n\tfloat: left;\n}\n/* Hide \"new version\" link in the top bar */\n/*\nhtml>body #menu h1 a#version {\n\tdisplay: none;\n}\n*/\n\n/*** Tables and views ***/\n/* set default alignment to left */\nhtml>/**/body #content td {\n\ttext-align: left;\n}\n/* header sorting popup onmouseover */\nhtml> body #content form table thead span.column {\n\tbackground: #ddd;\n\twidth: 60px;\n\theight: 30px;\n\tmargin-left: -60px;\n\tmargin-top: 30px;\n\tpadding: 0px 0px 0px 0px;\n\tbox-shadow: 0px 0px 4px rgba(0,0,0,0.40) !important;\n}\nhtml> body #content form table thead span.column > a.text {\n\tposition: relative;\n\twidth: 30px;\n\theight: 30px;\n\tfont-size: 150%;\n\tfloat: left;\n\tmargin-left: 0px;\n\tpadding: 4px 0px 0px 0px;\n\ttext-align: center;\n}\nhtml>/**/body #content th a[href*=\"&db=\"],           /* Databases and Table column */\nhtml>/**/body #content td a[href*=\"&view=\"],         /* Alter view */\nhtml>/**/body #content td a[href*=\"&select=\"],       /* Select view */\nhtml>/**/body #content table a[href*=\"&table=\"],     /* Show structure */\nhtml>/**/body #content table td a[href*=\"&edit=\"][href*=\"&where\"] { /* Modify single rows (without icon, after executing SQL) */\n\tfloat: left;\n\twidth: 100%;\n\theight: 17px;\n\tpadding: 5px 3px 0px 0px;\n}\nhtml>/**/body #content table a[id|=\"Data_length\"],    /* Alter table (Data Length) */\nhtml>/**/body #content table a[id|=\"Index_length\"],   /* Alter indexes (Index Length) */\nhtml>/**/body #content table a[id|=\"Data_free\"],      /* New item (Data Free) */\nhtml>/**/body #content table a[id|=\"Auto_increment\"], /* Alter Table (Auto Increment) */\nhtml>/**/body #content table a[id|=\"Rows\"] {          /* Select data (Rows) */\n\tfloat: left;\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 2px 0px 1px 22px;\n\tmargin-right: 5px;\n}\n/* Edit,modify row (pen icon) */\nhtml>/**/body #content form table thead>tr>td a[href$=\"&modify=1\"],\nhtml>/**/body #content form table a[href*=\"&edit=\"][href*=\"&where\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=\") no-repeat 3px 3px;\n}\n/* Modify rows together (icon in table header) */\nhtml>/**/body #content form table thead>tr>td a[href$=\"&modify=1\"],\nhtml>/**/body #content form table thead>tr>td a[href*=\"&select=\"] {\n\tdisplay: inline-block;\n\twidth: 0px;\n\theight: 20px;\n\tmargin-top: 4px;\n\toverflow: hidden;\n\tpadding: 2px 0px 0px 24px;\n\tfloat: none;\n}\n/* Modify single rows (icon in each row) */\nhtml>/**/body #content table a.edit[href*=\"&edit=\"][href*=\"&where\"] {\n\tdisplay: inline-block;\n\twidth: 0px;\n\theight: 19px;\n\toverflow: hidden;\n\tpadding: 2px 0px 0px 24px;\n\tfloat: none;\n}\n/* Sort table by X when clicking on header */\nhtml>/**/body #content table a[href*=\"&order\"] {\n\tfloat: left;\n\twidth: 100%;\n\theight: 20px;\n\tpadding-top: 8px;\n}\n/** hide useless headers, they take too much space **/\n/* hides: 'Tables and views', 'Routines', 'Events' */\nhtml>/**/body #content h3#tables-views,\nhtml>/**/body #content h3#routines,\nhtml>/**/body #content h3#events {\n\tdisplay: none;\n}\n/** resize useful headers **/\nhtml>/**/body #content h3#indexes,\nhtml>/**/body #content h3#foreign-keys,\nhtml>/**/body #content h3#triggers {\n\tfont-size: 1em;\n\tfont-weight: bold;\n}\n/* Create table */\nhtml>/**/body #content a[href$=\"&create=\"] {\n\tposition: relative;\n\ttop: 2px;\n}\n/* Create view */\nhtml>/**/body #content a[href$=\"&view=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;\n\tpadding: 2px 0px 0px 22px;\n\tposition: relative;\n\ttop: 2px;\n}\n/* Create new database */\nhtml>/**/body #content a[href*=\"&database=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==\") no-repeat 0px 0px;\n\tpadding: 3px 0px 0px 22px;\n}\n/* Privileges */\nhtml>/**/body #content a[href*=\"&privileges=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=\") no-repeat 2px 0px;\n\tpadding: 3px 0px 0px 22px;\n}\n/* Process list */\nhtml>/**/body #content a[href*=\"&processlist=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=\") no-repeat 0px 0px;\n\tpadding: 3px 0px 0px 22px;\n}\n/* Variables */\nhtml>/**/body #content a[href*=\"&variables=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==\") no-repeat 2px 0px;\n\tpadding: 3px 0px 0px 22px;\n}\n/* Status */\nhtml>/**/body #content a[href*=\"&status=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==\") no-repeat 2px 0px;\n\tpadding: 2px 0px 0px 22px;\n}\n/* Alter database */\nhtml>/**/body #content a[href*=\"&database=\"][href*=\"&db=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==\") no-repeat 0px 4px;\n\tpadding: 5px 0px 5px 22px;\n}\n/* Database schema */\nhtml>/**/body #content a[href*=\"&schema=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=\") no-repeat left -2px;\n\tfloat: left;\n\tpadding-left: 22px;\n}\n/* Refresh */\nhtml>/**/body #content a[href*=\"&refresh=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==\") no-repeat 2px 0px;\n\tpadding: 2px 0px 4px 22px;\n\theight: 18px;\n}\n/* Show structure */\nhtml>/**/body .links a[href*=\"&table=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==\") no-repeat 0px 0px;\n\tpadding: 1px 0px 3px 22px;\n}\n/* Select data */\nhtml>/**/body .links a[href*=\"&select=\"] {\n\tpadding: 1px 0px 1px 22px;\n}\n/* Edit Sql */\nhtml>/**/body #content a[href*=\"&sql=\"] {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC\") no-repeat 0px 0px;\n\tmargin-left: 10px;\n\tpadding-left: 22px;\n}\n/* Inline plus */\nhtml>/**/body #content .icon-plus {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==\") no-repeat left center;\n\theight: 16px;\n}\n/* Inline up */\nhtml>/**/body #content .icon-up {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC\") no-repeat left center;\n\theight: 16px;\n}\n/* Inline down */\nhtml>/**/body #content .icon-down {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=\") no-repeat left center;\n\theight: 16px;\n}\n/* Inline cross */\nhtml>/**/body #content .icon-cross {\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC\") no-repeat left center;\n\theight: 16px;\n}\n/* Delete */\nhtml>/**/body input[name=\"delete\"],\nhtml>/**/body input[name=\"drop\"] {\n\tbackground: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==\") no-repeat 0px 0px;\n\tborder: 0;\n\tcursor: pointer;\n\tpadding: 1px 5px 1px 22px;\n\tmargin-left: 20px;\n}\nhtml>/**/body input[name=\"delete\"]:hover, html>/**/body input[name=\"drop\"]:hover {\n\tbackground-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==\");\n\tcolor: red;\n\ttext-shadow: 1px 1px 1px #ef7a7a;\n}\nhtml>/**/body #content p a[href*=\"&edit=\"],       /* New item */\nhtml>/**/body #content table a[id|=\"Data_free\"] { /* New item (Table -> Data Free column) */\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC\") no-repeat scroll 0px 0px;\n}\n/* New item */\nhtml>/**/body #content p a[href*=\"&edit=\"] {\n\tpadding: 1px 0px 1px 22px;\n}\n\n/*** Messages ***/\n.error {\n\tborder: red 1px solid;\n}\n.message {\n\tborder: green 1px solid;\n}\n.error, .message {\n\tmargin: 1em 0 0 0;\n}\n\n/*** Content ***/\n#breadcrumb {\n\tbackground: transparent;\n\tfont-size: 1em;\n\tmargin-left: 0em;\n\tpadding-top: 5px;\n\tposition:fixed;\n\tz-index: 10;\n\tfont-weight: bold;\n}\n#breadcrumb > a[href] {\n\tfont-weight: normal;\n}\nh2 {\n\tdisplay: none;\n}\n#content {\n\tmargin-left: 355px;\n}\n.tabs {\n\tmargin: 12px auto 10px auto;\n}\n#form + p {\n\tmargin: 20px 0;\n}\n#content .jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo {\n\tcolor: #344a60;\n}\n#content .jush-num, .jush-clr {\n\tcolor: #007000;\n}\n.sqlarea {\n\twidth: 99%;\n}\n.jush-sql {\n\tpadding: 1px 2px;\n}\n\n/*** Tables ***/\nhtml>/**/body table tbody input[name*=\"check\"] {\n\tdisplay: block;\n\tfloat: left;\n}\ntable {\n\tborder-radius: 2px !important;\n\tbox-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;\n}\nthead {\n\ttop: 34px;\n}\nthead td, thead th {\n\tbackground: #eee;\n}\ntable tbody td:first-child {\n\twhite-space: normal;\n}\ntd, th {\n\tborder-color: #bbb;\n\tborder-width: 0 1px 1px 0;\n\tfont-size: 0.83em;   /* x-small;  font size */\n}\n#logins a, #tables a {\n\theight: 18px;\n\tline-height: 18px;\n}\ncode{\n\tbackground-color: transparent;\n}\n\n/*** Links ***/\na, a:link, a:visited {\n\tcolor: #344a60;\n\tbackground-color: transparent;\n}\na:link:hover, a:visited:hover {\n\t/*color: #384053;\n\ttext-shadow: 1px 1px 1px #485c7c;*/\n\tcolor: #283043;\n\ttext-shadow: 1px 1px 1px #102030;\n\ttext-decoration: none;\n}\n\n/*** Sidebar Menu ***/\n#h1 {\n\tcolor: #222;\n\tfont-style: normal;\n}\n#menu {\n\tbackground-color: #f8f8f8;\n\tbox-shadow: 0px 0px 3px rgba(0,0,0,0.50) !important;\n\twidth: 330px;\n\tmargin: 0;\n\ttop: 0;\n\tpadding-bottom: 0;\n}\n#menu a {\n\tbackground-color: transparent;\n}\n#menu a:link:hover, a:visited:hover {\n\tbackground-color: #e8e8e8;\n}\n\n/*** Forms ***/\nfieldset {\n\tbackground-color: transparent;\n\tborder: 1px solid #f0f0f0;\n\tborder-radius: 5px !important;\n}\n\n/*** Others ***/\n#lang {\n\tbackground: transparent;\n\tfont-size: .9em;\n\tleft: auto;\n\tright: 120px;\n\ttop: 3px;\n\tposition:fixed;\n\tz-index: 10;\n\tpadding-top: 2px;\n}\n.active{\n\tfont-weight: normal;\n\tcolor: #283043;\n\ttext-shadow: 1px 1px 1px #102030;\n}\np {\n\tmargin: 0.8em 0 0 0;\n}\n\n#menu form {\n\tpadding-top: 30px;\n}\n#menu #logins {\n\tpadding-top: 50px;\n}\n\n/*** Floating footer since v4.6.1 ***/\n.footer {\n\twidth: 700px;\n\tbackground-color: #f8f8f8;\n\tbox-shadow: 0px 0px 3px rgba(0,0,0,0.50) !important;\n\tmargin-top: 10px;\n}\n.footer>p {\n\tmargin-left: 15px;\n}\n"
  },
  {
    "path": "designs/hever/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/hever/screenshot.png)\n"
  },
  {
    "path": "designs/hever/adminer.css",
    "content": "/*\r\nTheme by Hever [http://hev.cz] - September 2019, ver 0.2.5\r\nUsed Silk icon set 1.3 by Mark James - http://www.famfamfam.com/lab/icons/silk\r\n*/\r\n\r\n.error {background:#FFEEEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC\") no-repeat scroll 0.8em center; padding-left:38px;}\r\n.message, #menu p.message {background:#EEFFEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==\") no-repeat scroll 0.8em center; padding-left:38px;}\r\n\r\n#dbs span, th a[href*=\"&db=\"]:not([href*=\"&select=\"]):not([href*=\"&table=\"]) {background:transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:22px;}\r\n\r\n.links a {margin-right:8px;}\r\n\r\na[href$=\"&sql=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:22px;}\r\na[href*=\"&dump=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\na[href$=\"&dump=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\na[href*=\"&import=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDQPlDJUDwAAAiNJREFUOMutk0tI1FEUh7//Y9TJghyc1KQ20lMthRAlgoKgVkWte6wid0EICUHUQjdBErRqHYmQghgU5KLQGB8FKVEMCi0G1JmRbPLJ/O89p8XYOAMZBB24HM5dfL/fOfdcB6Aj1j6kqm2qWv/o5NMk/xBOR6z9dVVpzbmQEyKxPMcBc5svbheHs91YK1hRjJWCY7FGsSKT3VcPtviquqaqVJVVY6xlZu0hYpRrpyJ/Vb7fN3sMwAG4965Hw+ElKrzdlPphPqTHaYw0EdiAQEwuW4MRg7GGzrYu7j6L8/hGg+MD7DNXmF7tpDpSg6MOYpWbzbe2VV/dMATGAuADTLt3UFEmU+OICCpK72hqW8CFExGymwAAnrya15X1QJ+PJFVVtW90QQvjRay4TmfW9XrPpOYdBFYQVXwP+mMpPM9lYCyF44K7KTI4kQJVQj4cqd1BNihowVpBAd9zuNQSZXAizcWWPXmH/WPJonp27ifGCEUOVMB34eXHNJ6Xy5C7+w3xHRDg6N4ylEKAEVSVkAfnm6MMTy1y9nhlXvHNpzSthyrYFfYBiCcylJf6WwAjOZrnOgxPLQLks+tAIDDydSkPrIuWYG2BA2NMbgYunGms5O3nRU43bDkYGEtzuTWar+OJDN5ma1szUKVh/07mv69TVxXm28JK/i/U15YQT2SKdkFEpeAV9P2D3pmmrJXywFgCY7FGCKxgrPnjMv1Y3hjif8QvwdlGGi2XXTgAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\na[href$=\"&import=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFDMETKEbQAAAAjZJREFUOMuVkjFoU2EUhc//3gsvptFCIdRHh2CrQ1AcmsUYHTKJDkJrFUdx6uJkpuLspCI4xaJLNik4SMGlOKgEdekQ0EEwFhJqCw+a16RJ//+/x0Heo6XN4B0v537nHLgKAKqNxXckSyTPPyu//IP/GFVtLL6f9INrKZXC791f3UvDysPP3tryjcHt7yTPkRQRaZL8KSKvRGRtbm7OxgCPZJ8kJtOnYaw99ZUfl8UQ5XK5kMlkQBI7OzuzURTNbmxs3Nne3v60srJyd2FhoQ0AztPLtflOv/22tdtCVo3hwvhFUATZbBaO48B1XUxMTCCfz6NUKmF6evqKtfZxnMABgOdXl+c7vTZ87wQUFcRyZOepqSmIyPWkAgA8+HCfFMG3rS8QEVCIvb09pFIpkES/30cYhmi325iZmYGI4BDgReW1Wl1d3apUKrler4coitBqtUASxhh0u10Mh0N4ngeSRwEAQBIk4bou0uk0PM+D53nQWsMYA/JfLRGBtfYoQEQSx/hIKQVrbbJzHGd0ghgQHxhj4LourLXQWkNrDdd1E81IQCy21iaAOEFcU2t9PEBEEvcYeDBZrNvf38ehPwAAay3CMEQul4Pv+4f/XSkEQYBisYhOpzMywb1Go/GmUCiM5fN5+L4PpRRIIggCRFGEZrOJ9fX1TWPMzQR+0Kler58RkUcicstxnPFMJgNjDMIwxGAw2DTG1K21T5aWlraOBRycWq120hhz1hgjWusf1Wp1eJzuL3uxkTGLHB98AAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\n@media all and (min-width: 881px) {\r\n  #menu .links {height:22px; transition:.2s;}\r\n  #menu .links:hover {height:5em;}\r\n  #menu .links a {color:transparent; transition:.2s; display:block; margin-bottom:-1.25em;}\r\n  #menu .links > a + a {margin-left:22px;}\r\n  #menu .links > a + a + a {margin-left:44px;}\r\n  #menu .links > a + a + a + a {margin-left:66px;}\r\n  #menu .links:hover a {color:blue; margin:0;}\r\n  #menu .links a:hover {color:red;}\r\n}\r\n\r\n#menu ul#tables a[href*=\"&select=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll right bottom; display:inline-block; height:16px; margin-right:4px; vertical-align:middle; overflow:hidden; padding-left:16px; width:0;}\r\n#menu ul#tables a.active[href*=\"&select=\"] {border-left:2px solid #00f; margin-left:-4px; padding-left:18px;}\r\n\r\n.links a[href*=\"&create=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n.links a[href$=\"&create=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:22px;}\r\n\r\n#content p a[href*=\"&create=\"] {padding-left:22px;}\r\n#content p a[href*=\"&select=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n#content p a[href*=\"&page=\"] {background-image:none; padding-left:0;}\r\n#content p a[href$=\"&database=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n#content p a[href*=\"&edit=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n#content p a[href*=\"&table=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nth a[href*=\"&table=\"]  {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\n.links #content a[href*=\"&database=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n#content p a[href*=\"&schema=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n#content p a[href*=\"&privileges=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGnSURBVDjLxVM9T8JQFD2lBRQRFPAjEhIwXRgwEUjERRMnZPYXuPoHSJz8BQ7+BCcHJzZHiST4MWC0fsQBJUKCEQnGWihtfa/QBgK6MHiT2/tu3+1559x3y2iahlHMghFtZACuUqmkSdyiiaqqoJJo7HVFUQZi1w+Zcrnc9vl8LAXo7YexHhaNdaFQUDiSsFarFftXClriJz4eTqHJX7DMhDEbiiDlfALP80if1CFKLYjfxCUZR9s8ZcByvadG7w/QLl/guVRC8U2Etnutv5dlGXvr44S+3ZRFjcrgjEQvnFvG2pIfGzYOZ5c3KLCsWZjNZvual0wmOwD0oX/cVnFeXQDHfcDpcuGqtYJaTQKcHYBEImGebrDuY1AvPWImtIhjLoraSwtjHhvmv17Nwnw+/zcD/0QDt+9TUD1TmJ6zQWpImFTfyM64XhiLxdAr17h2E2Bnc9XcEEURzWaTFARM2na7HW63+3eAEul8tVqF1+tFMBiEw+EYmDpBEFAsFhEIBBCJRHQAhgyDQEDCFCgejzO5XE4bNn2Gp1IpJpPJaF05d8y//40/Nlww9OOVWvkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\n#content p a[href*=\"&event=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJlSURBVDjLpZNbaM9hGMc/v8NsTqF2yMhZKIexmpFyRZIiblwouZDauLYoTVEryg2uXIoIOUU5zJkh4e9QDmtJbWxrbUzz/72/9/m6+P3HLslbT9/3ufm+n/f7Pm8gif9ZMcDxe717JLZ62UQzwxukZnhveBOptyHl8anwZk/3b5pZEwOYtGNDzejSfzm58dTH+b8JvFkpwMizdSCBT8E8OJftkzy4BPIOnONHQzPO+eIhBoM5CCrLwNKslBZM8uDykCbwtgMAl/o/GXhvBYMA2rtAlpGYZSR+UIGKCgCSggGSOHy1Q/0DTifufZUknbr/RZJ0+mHWn3mU9edbMu3qG9DmQ08lKSNw3jCJOIKzjzqJopBzLZ3EEVx40smDr/u4e96QGUXPGpkzYQSJywjCwSsIiKOADUvKiUNYX1tOUQhra8oJg4hZ02cQhhGrqyuyp03tTwbOGzKIQ7j8rIsn3Qd4fEVIIn6+kzAMaH35Fn37wbZD68gnCUl+EbAkI3CpIYmiCNZUlwEwbfIUgiBg1cIyJqbzGFPiWbl8GXUb66mqnkrJ2IvUbq88GEI2dQBRGHDjZTcAbZ8+ERDQnOvm+fszVM1egA89C8avwAeO2nlLAeqRxK7j79TzPa/mXJck6darTG8XdM3uhbry+piGrou5I1pcP17h7wwk5k4aRUfPANMrhtP2pZ8J44bx7nMfff29vGl/SNP1LQA0XdtCa2cO4GdhkPRg78kPVYm3kS71uNTjU8N5I/UpxSWracndZOn8ZVx6dZRhQcz9F3cAjgR/+51rt1c2AXXAaOA7cLTlcHvDL6y6kIpO9lqsAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n#content p a[href$=\"&view=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEJFwohC2f85AAAAsxJREFUOMulk8tr3HUAxD+/1z5+u5smMYlmm6R1rTlEmrY0RKqtWMVWW6qtePBv8NaKUFGUgmBB9CJ48aIH8SKGBhGKKEIaPdgam0gTQ7Bm3U2zTbKPZrP7+32fHkqDx0LnNocZmGHGsdbyIHB5QPj/J8Vi8bDV8m0RtY5qGaeNMVijsdbiOF6cDDNXw47u8/l8/so9jXMvQqlU+lK0m6+LdjMRBAFCCBq1DYRU+L5P944OtIiRxtru/qHvhh7d8/K2QalUutysrx/zHEu5XGZl9TbWDUilsygDSimMbJGyEYVdAwB09g3MPTayb9RfXl7+RLTuHHOtYn5hkYHCCH5nAW0sUmmEVCiliIRisL8HWf8b0apj4qW9CvcL5+bSX6uNjcrD2gkYPTDG7zf+YWsrRinF9I8TWGt5Yvw4QioSgc+rx8e5uThPeWGGRrOt/Np6pa83v4ue3j4AlFBEsUDru+UBxEIihdwue7DwOKl0yPTlS77f0z9kMtmcp7XGdV2ymQRr1Qax1AwfeA6pNHEUEwvNYL4XYwxaa7Kd3QzsLlhnfm6mms11dOU6H8L3fep3WswuFFmrNu7ml4pYaKJwllv2Gk1RRciY8f7nGW7tEd7Zc28WNjcqB0W0heMFpNNJUgkPqRSbm1toY2lnZmj2/cYzB5/khf2naGf+ZerWNyyVVyqOtZbZ63/8EtVWDyV9j0xXby0Z5qJkmBGu5xuAcxOndr924kXHeA6nH3mPj+bO4OPy1beTkQ8wum//U9NXpi7drpRPhBtrXWEYkkikcIMEAGvNFQLTwUs7zwLw1t4JJosXgcnU9pSfPnzkla8//zRZbtRPR7E447ru0cB1soBTjdbTf1Z/4lrtB94d/Z4Pr58k5aYAIud+3jh2Ifhg53D4zpGRZxnuOsRi7VembvxMebH1sXO/dx67EFwE3gBywCbw2dX35fn/ANYEZmpcDQc/AAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\n#content p a[href*=\"&refresh=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI/SURBVDjLjZPbS9NhHMYH+zNidtCSQrqwQtY5y2QtT2QGrTZf13TkoYFlzsWa/tzcoR3cSc2xYUlGJfzAaIRltY0N12H5I+jaOxG8De+evhtdOP1hu3hv3sPzPO/z4SsBIPnfuvG8cbBlWiEVO5OUItA0VS8oxi9EdhXo+6yV3V3UGHRvVXHNfNv6zRfNuBZVoiFcB/3LdnQ8U+Gk+bhPVKB3qUOuf6/muaQR/qwDkZ9BRFdCmMr5EPz6BN7lMYylLGgNNaKqt3K0SKDnQ7us690t3rNsxeyvaUz+8OJpzo/QNzd8WTtcaQ7WlBmPvxhx1V2Pg7oDziIBimwwf3qAGWESkVwQ7owNujk1ztvk+cg4NnAUTT4FrrjqUKHdF9jxBfXr1rgjaSk4OlMcLrnOrJ7latxbL1V2lgvlbG9MtMTrMw1r1PImtfyn1n5q47TlBLf90n5NmalMtUdKZoyQMkLKlIGLjMyYhFpmlz3nGEVmFJlRZNaf7pIaEndM24XIjCOzjX9mm2S2JsqdkMYIqbB1j5C6yWzVk7YRFTsGFu7l+4nveExIA9aMCcOJh6DIoMigyOh+o4UryRWQOtIjaJtoziM1FD0mpE4uZcTc72gBaUyYKEI6khgqINXO3saR7kM8IZUVCRDS0Ucf+xFbCReQhr97MZ51wpWxYnhpCD3zOrT4lTisr+AJqVx0Fiiyr4/vhP4VyyMFIUWNqRrV96vWKXKckBoIqWzXYcoPDrUslDJoopuEVEpIB0sR+AuErIiZ6OqMKAAAAABJRU5ErkJggg==\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\n#content p a[href*=\"&sql=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:24px;}\r\n\r\ntable tbody input[name*=\"check\"] {display:block; float:left;}\r\n\r\ntable a[href*=\"&edit=\"][href*=\"&where\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC\") no-repeat scroll right bottom; padding-right:18px;}\r\n\r\ntable input + a[href*=\"&edit=\"][href*=\"&where\"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom;}\r\n\r\ntable thead a[href*=\"&modify=1\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gEKDjA70u7s9gAAAMZJREFUOMvtksFpwzAUhr9fcUsWyAQewWDIHt6iLrlriBDIBl4maARPYNH6VtAh2FEuCSQksUV77Qc66Ef63nvw5JyLTNA0DXme03UdVVU9PnDOxWEYJk9d109z733MrqLN/oAkiBEJEAjYfqwJIbzsMLu9vC9XoIgxJ94yEX6+meNOoAXACWPAmEsnqQIBx/CFgEGRo0DEdMHuc81vkPd+soy1lqIoaNsWa+2jYG4PkkYoy/IuHMcx6XPf9xj+yL8gYQ/mOAPpeHRKiIdANAAAAABJRU5ErkJggg==\") no-repeat scroll right bottom; }\r\ntable thead a[href*=\"&modify=1\"] {width:0; display:inline-block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 16px; vertical-align: middle;}\r\ntable td:first-child {white-space:nowrap;}\r\n\r\ninput[name=\"delete\"], input[name=\"drop\"] {background:transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC\") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}\r\ninput[name=\"delete\"]:hover, input[name=\"drop\"]:hover {color:red; background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==\")}\r\n\r\ninput[name=\"logout\"] {background:transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC\") no-repeat scroll right center; padding:1px 22px 1px 5px; border:0; cursor:pointer; font-size:.9em;}\r\ninput[name=\"logout\"]:hover {color:red;}\r\n"
  },
  {
    "path": "designs/konya/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/konya/screenshot.png)\n"
  },
  {
    "path": "designs/konya/adminer.css",
    "content": "/* Merged and fixed version of Hever's and Frank Bueltge's skins by Oguz KONYA. I liked Bueltge's skin but I wanted the icons, too.\r\n/* So I merged them into one file, fixed a couple of problems, added some paddings here and there, voila!\r\n\r\n/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */\r\n/**\r\n * Alternative style for Adminer by Frank Bueltge\r\n * @link http://bueltge.de/\r\n */\r\n\r\nhtml {\r\n\t--bg: #F9F9F9;\r\n}\r\n\r\n/* Added icons */\r\n/* IE doesn't support inline images - using some hack that eliminate IE*/\r\nhtml/*\\*/>/*/*/body .error {background:#FFEEEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC\") no-repeat scroll 0.8em center; padding-left:38px;}\r\nhtml/*\\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==\") no-repeat scroll 0.8em center; padding-left:38px;}\r\n\r\nhtml/*\\*/>/*/*/body a[href$=\"&sql=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body a[href*=\"dump=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body a[href$=\"dump=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\nhtml/*\\*/>/*/*/body select[name=\"db\"] {background:white url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:16px;}\r\nhtml/*\\*/>/*/*/body select[name=\"db\"] option {padding-left:18px;}\r\n\r\nhtml/*\\*/>/*/*/body #menu li a[href*=\"&select=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding-top:1px; overflow:hidden; padding-left:16px; width:0; text-decoration:none;}\r\n\r\nhtml/*\\*/>/*/*/body #menu li a[href*=\"&table=\"], html/*\\*/>/*/*/body #menu li a[href*=\"&view=\"] {clear:right; margin-left:24px; display:block; height:17px; padding-bottom:1px; text-decoration:none;}\r\n\r\nhtml/*\\*/>/*/*/body #menu p#tables br {display:none;}\r\n\r\nhtml/*\\*/>/*/*/body a[href*=\"&create=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body a[href$=\"&create=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:22px;}\r\n\r\nhtml/*\\*/>/*/*/body #content p a {padding-left:2px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&create=\"] {padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&select=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&page=\"] {background-image:none; padding-left:0;}\r\nhtml/*\\*/>/*/*/body #content p a[href$=\"?database=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&edit=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&table=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\nhtml/*\\*/>/*/*/body #content a[href*=\"&database=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&schema=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\n\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&sql=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:24px;}\r\n\r\nhtml/*\\*/>/*/*/body table tbody input[name*=\"check\"] {display:block; float:left;}\r\n\r\nhtml/*\\*/>/*/*/body table a[href*=\"&edit=\"][href*=\"&where\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC\") no-repeat scroll right bottom; padding-right:18px;}\r\n\r\nhtml/*\\*/>/*/*/body table input + a[href*=\"&edit=\"][href*=\"&where\"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom; margin-left:5px;}\r\nhtml/*\\*/>/*/*/body table tbody td:first-child {white-space:normal;}\r\nhtml/*\\*/>/*/*/body table thead input {margin-right: 5px;}\r\n\r\nhtml/*\\*/>/*/*/body input[name=\"delete\"], html/*\\*/>/*/*/body input[name=\"drop\"] {background:transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC\") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}\r\nhtml/*\\*/>/*/*/body input[name=\"delete\"]:hover, html/*\\*/>/*/*/body input[name=\"drop\"]:hover {color:red; background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==\")}\r\n\r\n.logout {font-size: 8pt !important;}\r\n#logout{ height:17px; border: none; background: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC\") no-repeat center left; overflow: hidden; text-indent: 18px; line-height: 0px; cursor:pointer; margin-left:6px; color: #21759B;  text-decoration: underline;}\r\n#logout:hover {text-decoration: none; color: #D54E21;}\r\n#logins a, #tables a {background: none repeat scroll 0 0 transparent;}\r\nbody {margin: 0; line-height: 1.25em; font-size: 13px; background: #F9F9F9;}\r\nbody, select, option, optgroup, button {font-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif;} /* IE6 */\r\ninput[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {font-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif;}\r\ninput, textarea, pre, code, samp, kbd, var {font-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif; font-size: 12px;}\r\na {color: #21759B;}\r\na:visited {color: #21759B;}\r\na:hover {text-decoration: none; color: #D54E21;}\r\nform {margin: 0;}\r\ntable {margin: 10px 12px 12px 0; border: 1px #BBB solid; font-size: 90%;}\r\nth {text-align: left;}\r\ntd, th {background-color: #fff; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}\r\ntr:first-child td, tr:first-child th {border-top-width: 0;}\r\ntr:first-child th {padding-right: 30px;}\r\ntd:first-child, th:first-child {border-left-width: 0;}\r\nthead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px #BBB solid;}\r\nthead tr:hover td, thead tr:hover th {background-color: #DDD !important;}\r\ntr:nth-child(2n) td, tr:nth-child(2n) th, .odds tbody tr:nth-child(2n), .odds tbody tr:nth-child(2n):not(.checked, :hover) {background-color: #F1F1F1;}\r\ntr:hover td, tr:hover th {background-color: #BCD;}\r\nfieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #F1F1F1; border: 1px solid #E3E3E3; position: relative;}\r\nfieldset, x:-moz-any-link {padding-top: 4px;}\r\nlegend {font-weight: 900; color: #000; position: relative; top: -0.8em; left: -1em; padding: 0 4px;}\r\ninput[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;}\r\ninput[name='text_length'] {width: 5em;}\r\nselect + input, select + select {margin-left: 2px;}\r\ntextarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #DFDFDF;}\r\ninput[type=\"checkbox\"], input[type=\"radio\"], input[type=\"image\"] {border: 0 none;}\r\ninput[type=button], input[type=submit] {border-color: #bbb; color: #464646;}\r\ninput[type=button]:hover, input[type=submit]:hover {color: #000; border-color: #666;}\r\ninput[type=button], input[type=submit] {text-decoration: none; font-size: 11px !important; line-height: 14px; padding: 2px 8px; cursor: pointer; border-width: 1px; border-style: solid; -moz-border-radius: 11px; -khtml-border-radius: 11px; -webkit-border-radius: 11px; border-radius: 11px; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; -khtml-box-sizing: content-box; box-sizing: content-box;}\r\ninput + label input, select + label input {margin-left: 4px;}\r\ntd input[type='checkbox']:first-child, td input[type='radio']:first-child {margin-left: 2px;}\r\nlabel:hover {text-decoration: underline;}\r\nfieldset div {margin-bottom: 2px;}\r\ninput[name='Comment'] { /* !!! */ width: 24em;}\r\ninput[name='Auto_increment'] { /* !!! */width: 6em;}\r\nimg {vertical-align: middle; margin: 0; padding: 0;}\r\n.footer{border-image: linear-gradient(rgba(249, 249, 249, .2), #F9F9F9) 100% 0}\r\n.footer > div {background-color: #F9F9F9;}\r\n.error {padding: 8px; color: red; background-color: #FEE;}\r\n.message {padding: 8px; background-color: #DDD;}\r\n.char {color: #070;}\r\n.date {color: #707;}\r\n.enum {color: #077;}\r\n.binary {color: red;}\r\n.jush-sql {padding: 2px 4px; margin-right: 4px; outline: 1px #BBB dashed; font-size: 9pt;}\r\n#content {margin: 2px 0 0 300px; padding: 10px 20px 20px 0;}\r\n#lang {height: 23px; width: 250px; display: block; padding: 1px 10px; position: absolute; top: 0; left: 0; text-align: center; background-color: #f1f1f1; border: 1px solid #E3E3E3; line-height: 1.25em;}\r\n#lang select {font-size: 8pt;}\r\n#breadcrumb {margin: 0; height: 21px; display: block; position: absolute; top: 0; left: 300px; background-color: #f1f1f1; border: 1px solid #E3E3E3; padding: 2px 12px; line-height: 1.25em }\r\n#menu {position: absolute; padding: 10px; margin: 0; top: 28px; left: 0; width: 250px; background-color: #f1f1f1; border: 1px solid #E3E3E3;}\r\n#menu form {margin: 0;}\r\n#menu p, #logins, #tables {padding-left: 8px; font-size: 10pt; border-bottom: none;}\r\n#menu form p {padding-left: 0; text-align: left;}\r\n#dbs, .tables-filter {padding-left:8px !important;}\r\nh1 .h1:hover {text-decoration: underline;}\r\nh1, h2 {font: italic normal normal 24px/29px Georgia, \"Times New Roman\", \"Bitstream Charter\", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; text-shadow: rgba(255,255,255,1) 0 1px 0px; background: none;}\r\nh1 {font-size: 12px;}\r\nh1 .h1 {font-size: 12px;}\r\nh2 {padding: 22px 0 0 10px;}\r\nh3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}\r\n#schema {margin: 1.5em 0 0 220px; position: relative;}\r\n#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}\r\n#schema .references {position: absolute;}\r\nlegend a {color: #333; text-decoration: none; cursor: default;}\r\nlegend a:hover {color: #333;}\r\ncode {background: transparent;}\r\nfieldset, legend, h2, table, .error, .message {-moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px;border-radius: 5px;}\r\n#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}\r\n#breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}\r\n#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}\r\n#loader {margin-left: 35px;}\r\n"
  },
  {
    "path": "designs/lavender-light/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/lavender-light/screenshot.png)\n"
  },
  {
    "path": "designs/lavender-light/adminer.css",
    "content": "/**\n * lavender-light theme for Adminer\n * by Alex Yu\n *\n * Color palette from:\n * https://color.adobe.com/Lavender-v2-color-theme-294b8aa6-1935-401f-a763-13b98ec68b90/\n *\n * - white\n * - ghostwhite     (f8f8ff)\n * - lavender       (f0f0ff)\n * - darkslateblue  (483d8b)\n * - aliceblue      (f0f8ff)\n * - gray           (313b43), (21282e)\n * - blue           (001dff), (002799)\n */\n\nbody {\n    display: grid;\n    column-gap: 1rem;\n    row-gap: 20px;\n\n    width: 100%;\n    height: auto;\n\n    grid-template-areas:\n        \"menu content\";\n\n    grid-template-rows: 1fr;\n    grid-template-columns: 21rem 1fr;\n\n    align-items: stretch;\n    justify-items: start;\n\n    font: 0.96rem/1.2rem sans-serif !important;\n}\n\na {\n    color: #001dff;\n    text-underline-offset: 1px;\n    transition-property: all;\n    transition-timing-function: cubic-bezier(.4,0,.2,1);\n    transition-duration: .15s;\n}\n\n/*\n * Basic tags\n */\n\na:visited {\n    color: #002799;\n}\n\na:link:hover, a:visited:hover {\n    color: #7388c9;\n    text-underline-offset: 4px;\n}\n\nh1 {\n    border: 0;\n}\n\nh2 {\n    margin: 0 0 20px 0px;\n    line-height: 1.68rem;\n    border-bottom: 1px solid #20165a; /* darkslateblue; */\n    background: #3c3085;\n    color: white;\n}\n\n#h1 {\n    font-size: 1.2rem;\n    font-style: normal;\n    font-weight: bold;\n    text-transform: uppercase;\n    color: #333;\n}\n\n#h1 img {\n    display: none;\n}\n\n/*\n * Tables\n */\n\ntable {\n    border-left: 1px solid silver;\n}\n\n#table .column {\n    display: none;\n}\n\ntd, th {\n    font-size: 1.05em;\n    border-right: 1px solid silver;\n    border-bottom: 1px solid silver;\n    padding: .3em .6em;\n    background: none;\n}\n\nthead th, thead td {\n    background: #313b43;\n    color: white;\n    border-right: 1px solid #21282e;\n    border-bottom: 1px solid #21282e;\n    padding: .5em .5em;\n}\n\nthead th a, thead td a,\nthead th a:visited, thead td a:visited,\nthead th a:hover, thead td a:hover {\n    color: #eee;\n}\n\nth span.column a.text {\n    color: #2980b9;\n}\n\n.js span.column {\n    background: white;\n}\n\n\ntable#table thead .checked td,\ntable#table thead .checked th {\n    background: #313b43;\n}\n\n.pages {\n    border: none;\n    box-shadow: -1px -1px 4px silver;\n}\n\n/*\n * Common sections\n */\n\n#breadcrumb {\n    position: static;\n    top: initial;\n    left: initial;\n    margin: 0;\n    padding: 0.6rem 0 0.4rem 0;\n    color: #596167;\n    background: none;\n}\n\n#breadcrumb a {\n    color: #002799;\n}\n\n#content {\n    grid-area: content;\n    margin: 0;\n    padding: 0 20px 0 0;\n    width: calc(100% - 20px);\n}\n\n#logout {\n    font-weight: bold;\n    text-transform: uppercase;\n    padding: 0.3rem 0.7rem;\n}\n\n#menu {\n    grid-area: menu;\n    position: initial;\n\n    margin: 0;\n    padding: 1rem 1.5rem;\n    width: 18rem;\n\n    background: ghostwhite;\n\n    overflow-y: auto;\n}\n\n#menu h1 {\n    padding: 0 0 1rem 0;\n    background: none;\n}\n\n#menu #dbs {\n    padding: 3rem 0 1.5rem;\n}\n\n#menu p, #tables {\n    padding: .8em 0em 1.2rem;\n}\n\n#menu #tables a[href*=\"&select=\"] {\n    background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=) no-repeat scroll right bottom;\n    display: inline-block;\n    height: 16px;\n    margin-right: 4px;\n    vertical-align: middle;\n    overflow: hidden;\n    padding-left: 18px;\n    border-left: 1px solid transparent;\n    width: 0;\n}\n\n#menu #tables a.active {\n    border-left: 1px solid #20165a;\n}\n\n#menu .links {\n    display: inline-flex;\n    flex-direction: column;\n    flex-wrap: wrap;\n    padding: 1rem 0 0 1.6rem;\n    border: 0;\n}\n\n#menu #tables li {\n    list-style: none;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n    align-items: stretch;\n    flex-direction: row;\n}\n\n#menu #tables li a+a {\n    padding-left: 0.3rem;\n}\n\n#lang {\n    position: absolute;\n    top: 4rem;\n    z-index: 100;\n    padding: 0 0 0 1.5rem;\n}\n\n#logins a, #tables a, #tables span {\n    background: initial;\n}\n\n#logins ul {\n\tpadding: 3rem 0 1rem;\t\n}\n\n#logins ul li {\n  \tmargin-bottom: .5rem;\n}\n\n/*\n * Elements\n */\n\nsup {\n    padding: 3px 7px;\n    background: #3498db;\n    color: white;\n    border-radius: 2em;\n}\n\ncode.jush-sql {\n    display: block;\n    padding: .4em .7em;\n    line-height: 1.5em;\n}\n\n.jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo {\n    color: #dc33f9;\n}\n\npre, textarea {\n    padding: 1.5rem;\n    font: 100% / 1.25 monospace;\n}\n\npre, code {\n    background: #f2f2ff;\n}\n\npre.sqlarea {\n    padding: 1rem !important;\n    border: 2px solid #a9a9a9 !important;\n    border-radius: 4px;\n    background: #fff;\n}\n\na.jush-custom:link, a.jush-custom:visited {\n    color: midnightblue;\n}\n\nselect, input {\n    padding: 2px;\n}\n"
  },
  {
    "path": "designs/lucas-sandery/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/lucas-sandery/screenshot.png)\n"
  },
  {
    "path": "designs/lucas-sandery/adminer.css",
    "content": "/*\nA colourful, RTL-friendly theme.\nUpdate from https://github.com/lucas-sandery/adminer/raw/master/designs/lucas-sandery/adminer.css\n\nIcons from http://FlatIcon.com:\n\"Translation\" by Freepik\n\"Power\" by Vectors Market\n\"Database\" by Madebyoliver\n\"Table\" by Vaadin icons\n\"Plus\" by Freepik\n\"Up arrow\" by Alfredo Hernandez\n\"Down arrow\" by Alfredo Hernandez\n\"Forbidden Mark\" by Pavel Kozlov\n\"Search\" by Freepik\n\nBackground adapted from \"All Work and No Play\", http://thenewcode.com/1008/SVG-Movie-Backgrounds-Andys-Room-and-Overlook-Hotel\n*/\nhtml {\n\t--bleu: #41658a;\n\t--lahtbleu: var(--bleu);\n\t--poiple: #414073;\n\t--lahtpoiple: var(--poiple);\n\t--oringe: #ec5f12;\n\t--oringe-c-fru: rgba(236, 95, 18, 0.6);\n\t--pail-oringe: #f39561;\n\t--menu-w: 20em;\n\t--icon-w: 2em;\n\t--bg: var(--bleu);\n\t--inv-fg: #fff;\n\t--shado: var(--fg);\n\theight: 100vh;\n}\n:focus {\n\toutline: thin solid var(--oringe-c-fru);\n}\n@media (prefers-color-scheme: dark) {\n\thtml {\n\t\t--bleu: #314c68;\n\t\t--lahtbleu: #649dd6;\n\t\t--lahtpoiple: #706fc7;\n\t\t--inv-fg: #eee;\n\t\t--pail-oringe: #c66734;\n\t\t--fg: var(--inv-fg);\n\t\t--dim: #111;\n\t\t--shado: var(--dim);\n\t}\n\t.jush {\n\t\t--text-color: #f0f0f0;\n\t}\n\tpre.jush {\n\t\tbackground-color: var(--dim);\n\t}\n}\nbody {\n\twidth: 100vw;\n\tmin-height: 100vh;\n\tdisplay: flex;\n\talign-items: stretch;\n\tbox-sizing: border-box;\n}\np {\n\tmargin-right: 0;\n}\na {\n\tcolor: var(--lahtbleu);\n}\na:visited {\n\tcolor: var(--lahtpoiple);\n}\na:link:hover,\na:visited:hover,\na:link:focus,\na:visited:focus {\n\tcolor: var(--oringe);\n\ttext-decoration: underline;\n\toutline: none;\n}\n::-moz-focus-inner {\n\tborder: 0;\n}\n#noindex {\n\tcursor: help;\n}\n#help,\ninput:not([type=\"image\"]),\nselect,\ntextarea,\nfieldset {\n\tborder: thin solid rgba(65, 101, 138, 0.3);\n}\n@media (prefers-color-scheme: dark) {\n\tinput:not([type=\"image\"]),\n\tselect,\n\ttextarea {\n\t\tbackground: #333;\n\t\tcolor: #eee;\n\t}\n}\nlabel {\n\twhite-space: nowrap;\n}\n.sqlarea {\n\tborder: thin solid rgba(65, 101, 138, 0.3) !important;\n\twidth: auto !important;\n}\nlegend {\n\tpadding: 0 0.5em;\n}\ninput[type=\"image\"],\ninput[type=\"file\"],\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n\tborder-style: none;\n}\n.error,\n.message {\n\tmargin-right: 0;\n\tcolor: var(--inv-fg);\n}\n.error,\n.error b {\n\tbackground: #ae1010;\n}\n.error b {\n\tfont-weight: bold;\n}\n.message {\n\tbackground: #379f17;\n}\n.time {\n\tcolor: #70a37f;\n}\n.error .time,\n.message .time {\n\tcolor: #e7ffaf;\n}\n.js .checkable .checked a,\nthead a,\nthead th a,\n.error > a,\n.error div > a,\n.error p > a,\n.message > a,\n.message div > a,\n.message p > a {\n\tcolor: #cce2f8;\n}\nthead a:hover,\nthead a:focus,\nthead th a:hover,\nthead th a:focus,\n.error > a:link:hover,\n.error > a:visited:hover,\n.error > a:link:focus,\n.error > a:visited:focus,\n.error div > a:link:hover,\n.error div > a:visited:hover,\n.error div > a:link:focus,\n.error div > a:visited:focus,\n.error p > a:link:hover,\n.error p > a:visited:hover,\n.error p > a:link:focus,\n.error p > a:visited:focus,\n.message > a:link:hover,\n.message > a:visited:hover,\n.message > a:link:focus,\n.message > a:visited:focus,\n.message div > a:link:hover,\n.message div > a:visited:hover,\n.message div > a:link:focus,\n.message div > a:visited:focus,\n.message p > a:link:hover,\n.message p > a:visited:hover,\n.message p > a:link:focus,\n.message p > a:visited:focus {\n\tcolor: var(--pail-oringe);\n}\nthead a sup {\n\tcolor: inherit;\n}\npre {\n\toverflow-x: auto;\n}\ncode {\n\tbackground: var(--dim);\n}\ncode.jush-sql {\n\tdisplay: inline-block;\n\tpadding: 0.3em 0.5em 0.2em;\n\t-webkit-box-decoration-break: clone;\n\t-o-box-decoration-break: clone;\n\tbox-decoration-break: clone;\n}\nth > code {\n\tbackground: transparent;\n}\n.version {\n\tcolor: inherit;\n\twhite-space: nowrap;\n}\n#content,\n#menu,\n.rtl #content,\n.rtl #menu {\n\tmargin: 0 !important;\n\tpadding: 0 20px 1.5em;\n\tbox-sizing: border-box;\n}\n#content {\n\torder: 2;\n\tflex: 0 0 auto;\n\twidth: calc(100vw - var(--menu-w));\n}\n#content,\n.footer {\n\tbackground: #fff url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340.6 491.8' width='56px' height='81px'%3E%3Cpolygon fill='%2370a37f' fill-opacity='0.05' points='229.9,208.7 170.5,243 111,208.7 111,140 170.5,105.7 229.9,140'/%3E%3Cpolygon fill='%2370a37f' fill-opacity='0.05' points='0,305.3 59.5,339.6 59.5,408.3 0,442.6'/%3E%3Cpolygon fill='%2370a37f' fill-opacity='0.05' points='342.8,442.6 283.3,408.3 283.3,339.6 342.8,305.3'/%3E%3Cpolygon fill='%2379b473' fill-opacity='0.05' points='91.6,0 0,52.9 0,0'/%3E%3Cpolygon fill='%2379b473' fill-opacity='0.05' points='340.6,0 340.6,52.9 248.8,0'/%3E%3Cpolygon fill='%2379b473' fill-opacity='0.05' points='21.4,264.6 102.8,311.6 102.8,431.7 -1.2,491.8 0,544.5 149.7,458.1 149.1,285.1 68.2,236.7 68.2,116.6 172.2,56.5 276.2,116.6 276.2,236.7 192.5,285 192.5,337.1 192.5,337.1 192.5,458.1 342.2,544.5 341,491.8 237,431.7 237,311.6 320.8,263.3 320.8,90.2 171.1,3.8 21.4,90.2'/%3E%3C/svg%3E\") fixed;\n}\n@supports (-ms-ime-align: auto) {\n\t.footer {\n\t\tbackground: #fff;\n\t}\n}\n.scrollable {\n\toverflow: auto;\n}\nh1,\nh2,\n#breadcrumb {\n\tposition: sticky;\n\ttop: 0;\n\tz-index: 1;\n\tcolor: var(--inv-fg);\n}\n#breadcrumb {\n\tz-index: 2;\n\twhite-space: normal;\n\tbackground: #70a37f;\n\tpadding: 0.1em 2.5em 0.1em 20px;\n\theight: auto;\n\tmargin: 0 -20px -2em;\n\tleft: auto;\n}\n.rtl #breadcrumb {\n\tright: auto;\n\tleft: 0;\n\tmargin: 0 -20px -2em;\n\tpadding-right: 20px;\n\tpadding-left: 2.5em;\n}\nthead a,\n#breadcrumb a,\nthead a:visited,\n#breadcrumb a:visited {\n\tcolor: inherit;\n}\nh1,\nh2 {\n\tpadding: var(--icon-w) 20px 0.5em;\n\tborder-bottom-style: none;\n\tcolor: var(--inv-fg);\n\toverflow-wrap: break-word;\n}\nh1,\nh2,\n.rtl h2 {\n\tmargin: 0 -20px 1em;\n}\n#h1,\nh2 a {\n\tcolor: inherit;\n}\n#h1:hover,\n#h1:focus {\n\ttext-decoration: underline;\n}\nh2 {\n\tbackground: #79b473;\n}\n@media (prefers-color-scheme: dark) {\n\t#content,\n\t.footer {\n\t\tbackground-color: var(--dim);\n\t}\n\t#breadcrumb {\n\t\tbackground: #547a5f;\n\t}\n\th2 {\n\t\tbackground: #5f8c59;\n\t}\n}\nh2 + *,\nh2 + .hidden + *,\nh2 + * > :first-child:not(fieldset),\nh2 + .hidden + * > :first-child:not(fieldset) {\n\tmargin-top: 0;\n}\nh2 + form:has( > fieldset:first-child),\nh2 + .hidden + form:has( > fieldset:first-child) {\n\tmargin-top: -0.8em;\n}\nh3 {\n\tfont-size: 110%;\n\tfont-weight: bold;\n}\nfieldset {\n\tdisplay: inline-block;\n}\n.rtl fieldset {\n\tmargin-right: 0;\n\tmargin-left: 0.5em;\n}\ninput.default {\n\tbackground-color: var(--poiple);\n\tbox-shadow: none;\n}\ninput.required {\n\toutline: thin dashed var(--oringe);\n\toutline-offset: 1px;\n\tbox-shadow: none;\n}\n.odds tbody tr:nth-child(2n) {\n\tbackground: transparent;\n}\ntable {\n\tborder-style: none;\n\tbackground: rgba(255, 255, 255, 0.6);\n}\ntd,\nth {\n\tborder-color: #dde5ef;\n\tborder-width: 0 thin 0 0;\n\tpadding: 0.3em 0.8em 0.4em;\n\tbackground: rgba(65, 101, 138, 0.02);\n}\n.rtl td,\n.rtl th {\n\tborder-width: 0 0 0 thin;\n}\ntd a,\nth a {\n\tvertical-align: inherit;\n}\nth {\n\tbackground: rgba(65, 64, 115, 0.02);\n}\ntd:last-child,\nth:last-child {\n\tborder-width: 0;\n}\nthead th,\nthead td {\n\tborder-color: var(--inv-fg);\n\tpadding: 0.5em 0.8em 0.6em;\n}\n.js .checkable thead .checked th,\nthead th,\nthead td {\n\tcolor: var(--inv-fg);\n}\nthead th {\n\ttext-align: left;\n\tfont-weight: normal;\n}\n.js .checkable thead .checked th,\nthead th {\n\tbackground: var(--poiple);\n\tposition: relative;\n\tbackground-clip: padding-box;\n}\n.rtl thead th {\n\ttext-align: right;\n}\n.js .checkable thead .checked td,\nthead td {\n\tbackground: var(--bleu);\n}\n.js .column {\n\tz-index: 1;\n\tbackground: transparent;\n\tpadding: 0;\n\tmargin-top: 0;\n\tline-height: 1.25em;\n\tborder: none;\n}\n.column a {\n\tmargin-left: 0.2em;\n\tdisplay: inline-block;\n\twidth: 1.25em;\n\theight: 1.25em;\n\tvertical-align: middle;\n\toverflow: hidden;\n\ttext-indent: -5em;\n\tbackground: #4c3957 center no-repeat;\n\tbackground-size: 66%;\n}\n.rtl .column a {\n\tmargin-left: 0;\n\tmargin-right: 0.2em;\n}\n.column a:hover,\n.column a:focus {\n\tbackground-color: var(--oringe);\n}\ntbody tr:nth-child(even) td {\n\tbackground: rgba(65, 101, 138, 0.06);\n}\ntbody tr:nth-child(even) th {\n\tbackground: rgba(65, 64, 115, 0.06);\n}\ntbody tr:nth-child(n):hover td {\n\tbackground: rgba(236, 95, 18, 0.15);\n}\ntbody tr:nth-child(n):hover th {\n\tbackground: rgba(236, 72, 18, 0.2);\n}\n.js .checkable tbody .checked td,\n.js .checkable tbody .checked th {\n\tcolor: var(--fg);\n}\n.js .checkable tbody .checked td code {\n\tbackground: rgba(0, 0, 0, 0.25);\n}\n.js .checkable tbody .checked td {\n\tbackground: rgba(236, 72, 18, 0.25);\n}\n.js .checkable tbody .checked:nth-child(even) td,\n.js .checkable tbody .checked th {\n\tbackground: rgba(236, 72, 18, 0.3);\n}\n.js .checkable tbody .checked:nth-child(even) th {\n\tbackground: rgba(236, 72, 18, 0.35);\n}\n.js .checkable tbody .checked:hover td {\n\tbackground: rgba(236, 72, 18, 0.4);\n}\n.js .checkable tbody .checked:hover th {\n\tbackground: rgba(236, 72, 18, 0.45);\n}\n@media (prefers-color-scheme: dark) {\n\ttable {\n\t\tbackground: rgba(255, 255, 255, 0.02);\n\t}\n\ttd,\n\tth {\n\t\tborder-color: #494c4f;\n\t}\n\tthead th,\n\tthead td {\n\t\tborder-color: #444;\n\t}\n\ttbody tr:nth-child(even) td {\n\t\tbackground: rgba(65, 101, 138, 0.09);\n\t}\n\ttbody tr:nth-child(even) th {\n\t\tbackground: rgba(65, 64, 115, 0.09);\n\t}\n}\n.icon {\n\twidth: 1.2em;\n\tbackground-color: #4c3957;\n\tbackground-size: 66%;\n\tfilter: none;\n}\n.icon-plus {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' width='512px' height='512px' viewBox='0 0 456 456'%3E%3Cg%3E%3Cpolygon points='456,157.566 298.433,157.566 298.433,0 157.567,0 157.567,157.566 0,157.566 0,298.434 157.567,298.434 157.567,456 298.433,456 298.433,298.434 456,298.434' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.column a[href*=\"&asc%5B\"],\n.icon-up {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 490 490' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='M490,474.459H0L245.009,15.541L490,474.459z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.column a[href*=\"&desc%5B\"],\n.icon-down {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 490 490' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='M0,15.541h490L244.991,474.459L0,15.541z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.icon-cross {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 174.239 174.239' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='M146.537,1.047c-1.396-1.396-3.681-1.396-5.077,0L89.658,52.849c-1.396,1.396-3.681,1.396-5.077,0L32.78,1.047 c-1.396-1.396-3.681-1.396-5.077,0L1.047,27.702c-1.396,1.396-1.396,3.681,0,5.077l51.802,51.802c1.396,1.396,1.396,3.681,0,5.077 L1.047,141.46c-1.396,1.396-1.396,3.681,0,5.077l26.655,26.655c1.396,1.396,3.681,1.396,5.077,0l51.802-51.802 c1.396-1.396,3.681-1.396,5.077,0l51.801,51.801c1.396,1.396,3.681,1.396,5.077,0l26.655-26.655c1.396-1.396,1.396-3.681,0-5.077 l-51.801-51.801c-1.396-1.396-1.396-3.681,0-5.077l51.801-51.801c1.396-1.396,1.396-3.681,0-5.077L146.537,1.047z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.column a[href=\"#fieldset-search\"] {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 310.088 310.088' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='m299.85,250.413l-62.808-62.808c-3.982-3.982-10.437-3.982-14.418,0l-3.539,3.539-18.586-18.586c29.709-42.872 25.472-102.152-12.716-140.34-42.958-42.958-112.606-42.958-155.563,0s-42.958,112.606 0,155.563c38.189,38.188 97.468,42.425 140.34,12.716l18.586,18.586-3.539,3.539c-3.982,3.981-3.982,10.437 0,14.418l62.808,62.808c13.651,13.651 35.785,13.651 49.436,0s13.65-35.784-0.001-49.435zm-251.368-78.895c-33.921-33.921-33.921-89.115-0.001-123.036 33.922-33.921 89.117-33.922 123.037-0.001v0.001c33.922,33.921 33.922,89.115 0,123.036-16.96,16.961-39.239,25.441-61.518,25.441-22.279,0-44.558-8.48-61.518-25.441z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.loadmore,\n.rtl .loadmore {\n\tmargin: 0;\n}\n.footer {\n\tmargin: 0;\n\tpadding-top: 1em;\n\tborder-style: none;\n\t-webkit-mask-image: linear-gradient(rgba(255, 255, 255, 0), #fff 1em);\n\tmask-image: linear-gradient(rgba(255, 255, 255, 0), #fff 1em);\n}\n.footer > div {\n\tbackground: transparent;\n\tpadding: 0;\n}\n.footer ~ div {\n\tmargin-top: 0.8em;\n}\n.js #menuopen,\n#lang,\n.logout {\n\tz-index: 3;\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n\twidth: var(--icon-w);\n\theight: var(--icon-w);\n\tbox-shadow: none;\n}\n#lang,\n.logout {\n\tposition: fixed;\n}\n#lang {\n\ttop: 0;\n\t--lang-offset: calc(var(--menu-w) - var(--icon-w));\n\tleft: var(--lang-offset);\n}\n.rtl #lang {\n\tright: var(--lang-offset);\n}\n.rtl .logout {\n\tmargin: 0;\n}\n.js #menuopen button,\n#lang select,\n#logout {\n\topacity: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tcursor: pointer;\n\tz-index: 1;\n}\n.js #menuopen::before,\n#lang label::before,\n.logout::before {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: block;\n\theight: 100%;\n\twidth: 100%;\n\ttext-align: center;\n\tcontent: \" \";\n\tbackground: #2d3047 center no-repeat;\n\tbackground-size: 70%;\n}\n#lang label::before {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 470 470' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='m432.5,227.5h-77.031c-0.611-37.438-5.782-73.616-14.771-105.694h50.518c4.143,0 7.5-3.357 7.5-7.5s-3.357-7.5-7.5-7.5h-55.112c-8.018-24.165-18.316-45.521-30.553-62.656-2.408-3.371-7.093-4.153-10.462-1.745-3.371,2.407-4.152,7.092-1.745,10.462 10.618,14.868 19.688,33.199 26.965,53.939h-77.809v-69.306c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v69.306h-77.81c7.277-20.74 16.347-39.071 26.965-53.939 2.407-3.37 1.626-8.055-1.745-10.462-3.372-2.407-8.055-1.625-10.462,1.745-12.237,17.135-22.535,38.492-30.553,62.656h-55.112c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5 7.5,7.5h50.518c-8.988,32.078-14.159,68.256-14.771,105.694h-77.03c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5 7.5,7.5h77.031c0.611,37.438 5.782,73.616 14.771,105.694h-50.519c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5 7.5,7.5h55.112c8.019,24.169 18.32,45.529 30.56,62.666 1.464,2.049 3.77,3.142 6.11,3.142 1.508,0 3.031-0.454 4.353-1.397 3.37-2.408 4.151-7.092 1.744-10.463-10.621-14.869-19.693-33.204-26.972-53.947h77.81v69.305c0,4.143 3.357,7.5 7.5,7.5s7.5-3.357 7.5-7.5v-69.306h77.81c-7.278,20.744-16.351,39.078-26.972,53.947-2.407,3.371-1.626,8.055 1.744,10.463 1.321,0.943 2.844,1.397 4.353,1.397 2.341,0 4.646-1.093 6.11-3.142 12.24-17.137 22.54-38.497 30.56-62.666h55.112c4.143,0 7.5-3.357 7.5-7.5s-3.357-7.5-7.5-7.5h-50.519c8.989-32.078 14.16-68.256 14.771-105.694h77.031c4.143,0 7.5-3.357 7.5-7.5s-3.357-7.499-7.5-7.499zm-107.36-105.694c9.313,31.683 14.695,67.958 15.326,105.694h-97.966v-105.694h82.64zm-180.28,0h82.64v105.694h-97.966c0.632-37.737 6.013-74.011 15.326-105.694zm0,226.388c-9.313-31.683-14.695-67.958-15.326-105.694h97.966v105.694h-82.64zm180.28,0h-82.64v-105.694h97.966c-0.632,37.737-6.013,74.012-15.326,105.694z' fill='%23ECEBE4'/%3E%3Cpath d='M401.17,68.83C356.784,24.444,297.771,0,235,0S113.216,24.444,68.83,68.83S0,172.229,0,235.001 c0,46.271,13.391,90.899,38.764,129.316l-28.718,86.148c-0.898,2.695-0.197,5.667,1.812,7.676c2.009,2.008,4.979,2.708,7.676,1.812 l86.15-28.716C144.102,456.609,188.729,470,235,470c62.771,0,121.784-24.444,166.17-68.83S470,297.771,470,235.001 C470,172.229,445.556,113.216,401.17,68.83z M235,455c-44.491,0-87.355-13.222-123.961-38.235 c-1.262-0.862-2.739-1.308-4.231-1.308c-0.797,0-1.598,0.127-2.372,0.385L29.02,440.979l25.14-75.414 c0.741-2.225,0.399-4.668-0.923-6.604C28.222,322.357,15,279.492,15,235.001C15,113.692,113.691,15,235,15s220,98.692,220,220.001 C455,356.309,356.309,455,235,455z' fill='%23ECEBE4'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.logout::before {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 512 512' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='m256,501c-129.6,0-235-102.2-235-227.8 0-87.8 50.6-166.3 132.1-204.9 10.2-4.8 22.4-0.5 27.2,9.7 4.8,10.2 0.5,22.4-9.7,27.2-67.1,31.8-108.7,96.1-108.7,168-7.10543e-15,103.1 87.1,187 194.1,187 107,0 194.1-83.9 194.1-187 0-72.4-44-138.9-112.2-169.5-10.3-4.6-14.9-16.7-10.3-27 4.6-10.3 16.7-14.9 27-10.2 82.9,37.1 136.4,118.3 136.4,206.7 0,125.6-105.4,227.8-235,227.8z' fill='%23FFFFFF'/%3E%3Cpath d='m256,287.9c-11.3,0-20.4-9.1-20.4-20.4v-236.1c0-11.3 9.2-20.4 20.4-20.4 11.3,0 20.4,9.1 20.4,20.4v236.1c0,11.3-9.1,20.4-20.4,20.4z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\");\n}\n.js #menuopen::before {\n\tbackground-image: url(\"data:image/svg+xml,%3Csvg version='1.1' baseProfile='full' xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cdefs%3E%3Cpath id='bar' fill='%23FFFFFF' d='m87,-3 a3 3 180 0 1 0,6 h-84 a3 3 180 0 1 0,-6 z'/%3E%3C/defs%3E%3Cuse href='%23bar' x='15' y='18'/%3E%3Cuse href='%23bar' x='15' y='60'/%3E%3Cuse href='%23bar' x='15' y='102'/%3E%3C/svg%3E\");\n}\n.js #menuopen:focus-within::before,\n.js #menuopen:hover::before,\n#lang label:focus-within::before,\n#lang label:hover::before,\n.logout:focus-within::before,\n.logout:hover::before {\n\tbackground-color: var(--oringe);\n}\n.foot,\n#menu {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: stretch;\n}\n#foot {\n\tposition: relative;\n\tflex: 0 0 auto;\n\twidth: var(--menu-w);\n}\n#menu {\n\tposition: static;\n\twidth: 100%;\n\tflex-grow: 1;\n}\nh1 {\n\tbackground: var(--poiple);\n\tmargin-bottom: 0;\n}\n#h1 {\n\tfont-style: normal;\n}\n#dbs {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 0.5em;\n\tcolor: transparent;\n}\n#dbs label {\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n}\n#dbs label::before {\n\tcontent: \" \";\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\theight: 1em;\n\twidth: 1em;\n\tmargin-inline-end: -1em;\n\tbackground: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' viewBox='0 0 58.201 58.201' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='M31.707,33.07c-0.87,0.027-1.74,0.042-2.606,0.042c-0.869,0-1.742-0.014-2.614-0.042 c-7.341-0.201-13.191-1.238-17.403-2.717C7.104,29.685,5.409,28.899,4.1,28v7.111v0.5v0.5V37.4c2.846,2.971,12.394,5.711,25,5.711 s22.154-2.74,25-5.711v-1.289v-0.5v-0.5V28c-1.318,0.905-3.028,1.697-5.025,2.367C44.865,31.839,39.027,32.87,31.707,33.07z' fill='%23FFFFFF'/%3E%3Cpath d='M4.1,14.889V22v0.5V23v1.289c2.638,2.754,11.033,5.31,22.286,5.668c0.115,0.004,0.233,0.005,0.349,0.008 c0.326,0.009,0.651,0.018,0.982,0.023C28.174,29.996,28.635,30,29.1,30s0.926-0.004,1.383-0.011 c0.33-0.005,0.656-0.014,0.982-0.023c0.116-0.003,0.234-0.005,0.349-0.008c11.253-0.359,19.648-2.915,22.286-5.668V23v-0.5V22 v-7.111C49.233,18.232,38.944,20,29.1,20S8.968,18.232,4.1,14.889z' fill='%23FFFFFF'/%3E%3Cpath d='M53.965,8.542C52.843,4.241,44.215,0,29.1,0C14.023,0,5.404,4.22,4.247,8.51C4.162,8.657,4.1,8.818,4.1,9v0.5v1.806 C6.937,14.267,16.417,17,29.1,17s22.164-2.733,25-5.694V9.5V9C54.1,8.832,54.044,8.681,53.965,8.542z' fill='%23FFFFFF'/%3E%3Cpath d='M4.1,41v8.201c0,0.162,0.043,0.315,0.117,0.451c1.181,4.895,11.747,8.549,24.883,8.549c13.106,0,23.655-3.639,24.875-8.516 c0.08-0.144,0.125-0.309,0.125-0.484v-8.199c-4.135,2.911-12.655,5.199-25,5.199C16.754,46.201,8.234,43.911,4.1,41z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E\") center no-repeat;\n\tbackground-size: auto 100%;\n}\n#dbs select {\n\tflex-grow: 1;\n}\n#menu p {\n\tmargin: 1.5em 0 0;\n}\n#menu p,\n#logins,\n#tables {\n\tpadding: 0;\n\tborder-bottom-style: none;\n}\n#menu .message,\n#menu .error {\n\tpadding: 0.2em 0.4em;\n}\np:has(#filter-field) {\n\tdisplay: flex;\n}\n#filter-field {\n\tflex: 1 1 auto;\n\tmax-width: 100%;\n}\n.tables-filter {\n\tpadding: 0;\n\tmargin-top: 1.2em;\n}\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"],\nbutton,\n.links a {\n\tdisplay: inline-block;\n\tfont-size: 85%;\n\ttext-align: center;\n\tbackground-color: #4c3957;\n\tcolor: var(--inv-fg);\n\tpadding: 0.5em 0.8em 0.6em;\n\tmargin: 0;\n\tborder-style: none;\n\tcursor: pointer;\n}\ninput[type=\"submit\"]:hover,\ninput[type=\"submit\"]:focus,\ninput[type=\"reset\"]:hover,\ninput[type=\"reset\"]:focus,\ninput[type=\"button\"]:hover,\ninput[type=\"button\"]:focus,\nbutton:hover,\nbutton:focus,\n.links a:link:hover,\n.links a:visited:hover,\n.links a:link:focus,\n.links a:visited:focus,\n#menu .links a:hover,\n#menu .links a:focus {\n\tcolor: var(--inv-fg);\n\tbackground-color: var(--oringe);\n\ttext-decoration: none;\n}\ninput[type=\"submit\"]:disabled,\ninput[type=\"reset\"]:disabled,\ninput[type=\"button\"]:disabled,\nbutton:disabled {\n\tbackground-color: rgba(76, 57, 87, 0.35);\n\tcursor: not-allowed;\n}\ninput[type=\"file\"]::-ms-browse {\n\tdisplay: inline-block;\n\tfont-size: 85%;\n\ttext-align: center;\n\tbackground: #4c3957;\n\tcolor: var(--inv-fg);\n\tpadding: 0.5em 0.8em 0.6em;\n\tmargin: 0 0.5em;\n\tborder-style: none;\n\tcursor: pointer;\n}\ninput[type=\"file\"]:hover::-ms-browse,\ninput[type=\"file\"]:focus::-ms-browse {\n\tcolor: var(--inv-fg);\n\tbackground: var(--oringe);\n\ttext-decoration: none;\n}\ninput[type=\"file\"]:disabled::-ms-browse {\n\tbackground-color: rgba(76, 57, 87, 0.35);\n\tcursor: not-allowed;\n}\ninput[type=\"file\"]::-webkit-file-upload-button {\n\t-webkit-appearance: none;\n\tdisplay: inline-block;\n\tfont-size: 85%;\n\ttext-align: center;\n\tbackground: #4c3957;\n\tcolor: var(--inv-fg);\n\tpadding: 0.5em 0.8em 0.6em;\n\tmargin: 0 0.5em;\n\tborder-style: none;\n\tcursor: pointer;\n}\ninput[type=\"file\"]:hover::-webkit-file-upload-button,\ninput[type=\"file\"]:focus::-webkit-file-upload-button {\n\tcolor: var(--inv-fg);\n\tbackground: var(--oringe);\n\ttext-decoration: none;\n}\ninput[type=\"file\"]:disabled::-webkit-file-upload-button {\n\tbackground-color: rgba(76, 57, 87, 0.35);\n\tcursor: not-allowed;\n}\ninput[type=\"file\"]::file-selector-button {\n\tdisplay: inline-block;\n\tfont-size: 85%;\n\ttext-align: center;\n\tbackground: #4c3957;\n\tcolor: var(--inv-fg);\n\tpadding: 0.5em 0.8em 0.6em;\n\tmargin: 0 0.5em;\n\tborder-style: none;\n\tcursor: pointer;\n}\ninput[type=\"file\"]:hover::file-selector-button,\ninput[type=\"file\"]:focus::file-selector-button {\n\tcolor: var(--inv-fg);\n\tbackground: var(--oringe);\n\ttext-decoration: none;\n}\ninput[type=\"file\"]:disabled::file-selector-button {\n\tbackground-color: rgba(76, 57, 87, 0.35);\n\tcursor: not-allowed;\n}\n#menu .active {\n\tcolor: var(--inv-fg);\n\tfont-weight: normal;\n\tbackground-color: var(--poiple);\n}\n#menu .links {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tmargin: 1em -5px -5px;\n}\n#menu .links::after {\n\tcontent: \" \";\n\tdisplay: table;\n\tclear: both;\n}\n#menu .links a {\n\tflex: 1 1 7em;\n\tmargin: 5px;\n}\n#logins,\n#tables {\n\tflex-grow: 1;\n\tmargin: 0.7em -20px -20px;\n\tpadding: 0 20px\t20px;\n\toverflow: hidden !important;\n}\n#logins:focus-within,\n#tables:focus-within,\n#logins:hover,\n#tables:hover {\n\toverflow: visible !important;\n}\n#logins li,\n#tables li {\n\tbackground: var(--bleu);\n}\n#logins a,\n#tables a,\n#tables span {\n\tbackground: var(--bleu);\n\tcolor: var(--inv-fg);\n\tpadding: 0.2em 0.4em 0.3em 0;\n}\n.rtl #logins a,\n.rtl #tables a,\n.rtl #tables span {\n\tpadding-left: 0.4em;\n\tpadding-right: 0;\n}\n#logins {\n\tline-height: 2;\n}\n#tables a.select {\n\tdisplay: inline-block;\n\tposition:\trelative;\n\twidth: 1.13em;\n\theight: 1.3em;\n\toverflow: hidden;\n\tbackground: transparent;\n\tcolor: transparent;\n\tmargin-inline-start: -0.2em;\n\twhite-space: nowrap;\n\tpadding: 0.1em 0.2em;\n\ttop: 0.4em;\n}\n#tables a.select::before {\n\tcontent: ' ';\n\tbackground: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' width='512px' height='512px' viewBox='0 0 16 16'%3E%3Cg%3E%3Cpath fill='%23FFFFFF' d='M0 1v15h16v-15h-16zM5 15h-4v-2h4v2zM5 12h-4v-2h4v2zM5 9h-4v-2h4v2zM5 6h-4v-2h4v2zM10 15h-4v-2h4v2zM10 12h-4v-2h4v2zM10 9h-4v-2h4v2zM10 6h-4v-2h4v2zM15 15h-4v-2h4v2zM15 12h-4v-2h4v2zM15 9h-4v-2h4v2zM15 6h-4v-2h4v2z'/%3E%3C/g%3E%3C/svg%3E\") center no-repeat;\n\tbackground-size: contain;\n\tdisplay: block;\n\theight: 100%;\n}\n#tables a.select:hover,\n#tables a.select:focus,\n#tables a.select.active {\n\tbackground-color: var(--oringe);\n}\n#tables a.select.active ~ .structure {\n\tfont-weight: bold;\n}\n#routines + .links a {\n\tmargin-inline-end: 0.45em;\n}\n#routines + .links a:last-child {\n\tmargin-inline-end: 0;\n}\n.rtl p,\n.rtl table,\n.rtl .error,\n.rtl .message {\n\tmargin-left: 0;\n}\n\n@media all and (max-width: 800px) {\n\t.js body {\n\t\tpadding-bottom: 2em;\n\t}\n\t.js #menuopen {\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: var(--icon-w);\n\t\theight: var(--icon-w);\n\t}\n\t.rtl.js #menuopen {\n\t\tleft: auto;\n\t\tright: 0;\n\t}\n\t.js #menu {\n\t\tborder: none;\n\t\tbox-shadow: 0 0 10px 2px var(--shado);\n\t}\n\tbody,\n\t#content,\n\t#content > form:last-of-type,\n\t#menu {\n\t\tdisplay: block;\n\t}\n\t.rtl #content,\n\t.rtl #menu,\n\t#content,\n\t#menu {\n\t\tmax-width: none;\n\t\tpadding: 0 10px 2em;\n\t\twidth: 100vw;\n\t}\n\t#foot {\n\t\twidth: 100vw;\n\t}\n\t.rtl #breadcrumb,\n\t#breadcrumb {\n\t\tpadding: 0 10px;\n\t\tmargin: 0 -10px;\n\t}\n\t#breadcrumb {\n\t\theight: 2em;\n\t\tline-height: 2em;\n\t\toverflow: auto;\n\t\tposition: static;\n\t\twhite-space: nowrap;\n\t\twidth: 100vw;\n\t\tbox-sizing: border-box;\n\t}\n\t.js #breadcrumb {\n\t\tpadding-left: calc(10px + var(--icon-w));\n\t}\n\t.rtl.js #breadcrumb {\n\t\tpadding-left: 10px;\n\t\tpadding-right: calc(10px + var(--icon-w));\n\t}\n\t#breadcrumb::after {\n\t\tcontent: '';\n\t\tdisplay: inline-block;\n\t\twidth: 2.4em;\n\t}\n\t.rtl h1,\n\t.rtl h2,\n\th1,\n\th2 {\n\t\tposition: static;\n\t\tmargin: 0 -10px 1em;\n\t\tpadding: 1em 10px 0.5em;\n\t}\n\t.js #menuopen ~ h2 {\n\t\tpadding-top: var(--icon-w);\n\t}\n\t.js #menuopen ~ #breadcrumb ~ h2 {\n\t\tpadding-top: 1em;\n\t}\n\t#content .links a {\n\t\twhite-space: normal;\n\t\tmargin-bottom: 0.2em;\n\t\t-webkit-box-decoration-break: clone;\n\t\t-o-box-decoration-break: clone;\n\t\tbox-decoration-break: clone;\n\t}\n\t.logout {\n\t\tposition: absolute;\n\t}\n\t.js .logout {\n\t\ttop: 0;\n\t\tbox-shadow: none;\n\t}\n\t#lang {\n\t\tmargin: -1.5em -10px 0 auto;\n\t\tposition: relative;\n\t\ttop: auto;\n\t\tleft: auto;\n\t}\n\t.rtl #lang {\n\t\tright: auto;\n\t\tmargin-left: -10px;\n\t\tmargin-right: auto;\n\t}\n\t#logins,\n\t#tables {\n\t\tmargin: 0.7em -10px -10px;\n\t\tpadding: 0 10px\t10px;\n\t}\n}\n"
  },
  {
    "path": "designs/mancave/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/mancave/screenshot.png)\n"
  },
  {
    "path": "designs/mancave/adminer-dark.css",
    "content": "/*\n\n  VERSION: adminer-theme-mancave2-2.1.alpha\n\n  AUTHORS: panreach@gmail.com, dev@monolithforge.com //NOTE: CREDITS below that we stole from ;-)\n\n  LICENSE: www.adminer.org\n\n  NOTES:\n    This (mancave-2.0-alpha) theme still needs some debugging! ;/\n\n*/\n\n\n/*****/\n\n/* CREDITS */\n\n/** Theme \"mancave2\" based off of \"easy on the eyes\" theme... - 2017 */\n\n/** (ORIGINAL THEME cReDiTs) theme \"easy on the eyes\" for Adminer by p.galkaev@miraidenshi-tech.jp */\n\n\nhtml {\n\t--bg: #110236;\n\t--fg: #eee;\n}\n\n@import url(//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css);\n\n/* reset\n   ----------------------------------------------------------------------- */\n\n*,\n*:after,\n*:before {\n\tmargin: 0;\n\tpadding: 0;\n\toutline: none;\n\tcursor: default;\n\t-webkit-appearance: none;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n\tbox-sizing: border-box;\n\t-webkit-print-color-adjust: exact;\n}\n\n/* for font awesome */\n*:not(.fa) {\n\tfont-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif !important;\n}\n\n#logins a, #tables a, #tables span {\n  background: none;\n}\n\np,\nform\n{\n\tmargin: 0;\n\tmargin-bottom: 20px;\n\tfont-size: 14px;\n}\n\np:last-child,\nform:last-child\n{\n\tmargin-bottom: 0;\n}\n\n.type,\n.options select\n{\n\twidth: 100%;\n}\n\nsup{\n\tdisplay: none;\n}\n\n/* js tooltip\n   ----------------------------------------------------------------------- */\n\n.js .column {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin-top: 0;\n\ttop: 50px;\n\tz-index: 9;\n\tleft: 0px;\n\twidth: 100%;\n}\n\n.js .column:not(.hidden){\n\tdisplay: flex;\n}\n\n.js .column a{\n\ttext-align: center;\n\tcolor: black;\n\tfont-weight: bold;\n\tflex-grow: 1;\n\tbackground: green;\n\theight: 40px;\n\tline-height: 40px;\n\tfont-size: 15px;\n\tfont-weight: normal;\n}\n\n.js .column a:hover{\n\tbackground-color: #F1E5B3;\n\tcolor: black;\n}\n\n#help {\n\tposition: absolute;\n\tborder: none;\n\tbackground: #fb4;\n\tfont-family: monospace;\n\tz-index: 1;\n\tfont-size: 14px;\n\tline-height: 30px;\n\tpadding: 0;\n}\n\n#help a{\n\tcolor: black;\n\theight: 100%;\n\tdisplay: block;\n\tpadding: 0 10px;\n}\n\n#help a:hover{\n\tbackground-color: gold;\n}\n\n#help, .js .column{\n\tdisplay: none;\n}\n\n/* error and message\n   ----------------------------------------------------------------------- */\n\n.error, .message {\n\tpadding: 5px 15px 7px;\n\tmargin: 10px 0;\n\tfont-size: 14px;\n\tdisplay: table;\n\tborder-radius: 3px;\n\tcolor: white;\n}\n\n.error{\n\tbackground-color: crimson;\n}\n\n.message{\n\tbackground-color: seagreen;\n}\n\n/* scroll bar\n   ----------------------------------------------------------------------- */\n\n::selection {\n\tbackground-color: #2a65ae;\n}\n/*\n::-moz-selection {\n\tbackground-color: #333;\n}*/\n\n/* scroll bar\n   ----------------------------------------------------------------------- */\n\n::-webkit-scrollbar {\n\tbackground-color: black;\n\tcursor: pointer;\n}\n\n::-webkit-scrollbar-thumb {\n\tbackground-color: #555;\n\tcursor: pointer;\n}\n\n::-webkit-scrollbar:vertical{\n\twidth: 6px;\n}\n\n::-webkit-scrollbar-thumb:vertical{\n\tborder-left: 0px solid black;\n\twidth: 6px;\n}\n\n::-webkit-scrollbar:horizontal{\n\theight: 12px;\n}\n\n::-webkit-scrollbar-thumb:horizontal{\n\tborder-top: 0px solid black;\n\theight: 12px;\n}\n\n::-webkit-scrollbar-corner{\n\tcolor: black;\n\tbackground-color: black;\n\tborder-color: black;\n}\n\n::-webkit-resizer{\n\tbackground-color: #555;\n\tborder-radius: 100%;\n}\n\n/* html and body\n   ----------------------------------------------------------------------- */\n\nhtml,\nbody {\n\twidth: 100%;\n\theight: 100%;\n    max-height: 100%;\n    overflow: hidden;\n\n}\n\nbody{\n\tmin-height: 100%;\n\tfont-size: 14px;\n\tposition: relative;\n\tcolor: #eee;\n\tbackground-color: #110236;\n\toverflow: hidden;\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tfont: inherit;\n}\n\n/* headings\n   ----------------------------------------------------------------------- */\n\nh1{\n\tfont-size: 24px;\n\tmargin: 0;\n\tpadding: 0 18px;\n\tborder-bottom: 1px solid #444;\n\tfont-weight: bold;\n\tcolor: #555;\n\tbackground: none;\n}\n\nh2{\n\tfont-size: 24px;\n\tmargin: 0;\n\tpadding: 0;\n\tpadding-left: 50px;\n\tborder-bottom: 1px solid #333;\n\tcolor: #A3A3A3;\n\tfont-weight: bold;\n\tbackground: none;\n\theight: 77px;\n\tline-height: 77px;\n}\n\nh1, h2 {font: italic normal normal 24px/29px Georgia, \"Times New Roman\", \"Bitstream Charter\", Times, serif; margin: 0; padding: 40px 15px 3px 10px; line-height: 35px; /*text-shadow: rgba(185,185,185,1) 0 1px 0px;*/ background: none;color:#A3A3A3}\n\nh3{\n\tfont-weight: bold;\n\tfont-size: 24px;\n\tmargin: 40px 0 10px;\n\tcolor: #ccc;\n\tpadding-bottom: 5px;\n}\n\n/* links\n   ----------------------------------------------------------------------- */\n\na{\n\tcolor: #F1E5B3;\n\tcursor: pointer;\n}\n\na:hover, a:visited{\n\tcolor: #F1E5B3;\n}\n\na:link:hover, a:visited:hover {\n\tcolor: red;\n\ttext-decoration: none;\n}\n\n/* table\n   ----------------------------------------------------------------------- */\n\ntable{\n\tmargin: 0;\n\tmargin-bottom: 20px;\n\t/*border: 0;*/\n    border-color:#777;\n\tborder-collapse: collapse;\n\tfont-size: 13px;\n\twidth: 100%;\n\t/*table-layout: fixed;*/\n}\n\ntr:hover th,\n.checked th\n{\n\tbackground: #333 !important;\n\tcolor: #ddd;\n\tborder-color: #777;\n}\n\ntr:hover td,\n.checked td\n{\n\tbackground: #110236 !important;\n\tcolor: #ddd;\n\tborder-color: #777;\n}\n\n.links + table tr:hover th{\n\tcolor: #ddd;\n\tbackground: #333 !important;\n}\n\n.links + table tr:hover td{\n\tbackground: #333 !important;\n\tcolor: #fff;\n}\n\ntbody tr:hover td,tbody tr:hover th{\n\tbackground:#333333  !important;\n}\n.js .checked td,.js .checked th, .js .checkable .checked td, .js .checkable .checked th{\n\tbackground:#5A3901  !important;\n    border-color:#999;\n}\n\n\np + table{\n\tmargin-top: 20px;\n}\n\ntr{\n\tpadding-bottom: 1px;\n}\n\ntd, th {\n\tborder: 0;\n\tborder-right: 1px solid #777;\n\tpadding: 0 12px;\n\tline-height: 30px;\n\tposition: relative;\n}\n\ntd:last-child,\nth:last-child{\n\t/*border-right: none;*/\n}\n\nth{\n\tposition: relative;\n\tbackground: #110236;\n\tfont-weight: normal;\n\tborder-left: 5px solid #777;\n\tborder-bottom: 1px solid #777;\n\tcolor: #eee;\n}\n\n.checkable td:first-child{\n\t/*background: #222;*/\n\tborder-right-style: solid;\n}\n\ntable.checkable th{\n\tborder-left: none;\n}\n\ntd{\n\tbackground: #110236;\n\tborder-bottom: 1px solid #777;\n}\n\n.odds tbody tr:nth-child(2n) th{\n\tbackground: #33394d;\n}\n\n.odds tbody tr:nth-child(2n) td{\n\tbackground: #33394d;\n}\n\nthead td,\nthead th\n{\n\tbackground: transparent !important;\n\tcolor: #ccc;\n\tborder-right-style: dashed;\n\tfont-weight: bold;\n}\n\ntable#edit-fields td,\ntable#edit-fields th\n{\n\tpadding: 0;\n\tpadding-left: 5px;\n}\n\ntable#edit-fields thead th,\ntable#edit-fields thead td\n{\n\tpadding-left: 10px;\n}\n\nthead tr:hover th,\nthead tr:hover td,\n.links + table thead tr:hover th,\n.links + table thead tr:hover td,\ntable#edit-fields thead tr:hover th,\ntable#edit-fields thead tr:hover td\n{\n\tbackground-color: transparent !important;\n\tcolor: inherit !important;\n\tborder-bottom: 1px solid #777;\n}\n\nthead tr:hover th{\n\tborder-bottom: 1px solid #777;\n}\n\nthead th {\n\tborder-left-color: transparent;\n\ttext-align: left;\n\tpadding: 10px;\n}\n\n/* form\n   ----------------------------------------------------------------------- */\n\ninput,\nselect,\ntextarea\n{\n\t/*color: #333;*/\n\tfont-size: 15px;\n\theight: 30px;\n\t/*background-color: #ddd;*/\n\tborder: none;\n\tborder-radius: 3px;\n\tline-height: 28px;\n\tcursor: pointer;\n\tpadding: 0;\n\tpadding-left: 10px;\n\t-webkit-appearance: none;\n\toutline: none;\n}\n\npre.jush,\ntextarea, input, select {\n    border-width: 1px;\n    -moz-border-radius: 4px;\n    -khtml-border-radius: 4px;\n    -webkit-border-radius: 4px;\n    border-radius: 4px;\n    border-color: #5C5C5C;\n    background-color: #49526D;\n    color: #ccc;\n}\n\ninput:hover,\nselect:hover,\ninput:focus,\nselect:focus\n{\n\tbackground-color: #49526D;\n}\n\nth input,\ntd input,\nth select,\ntd select,\ntd textarea\n{\n\tcolor: #ccc;\n\twidth: 100%;\n\tdisplay: inline;\n\tbackground-color:#49526D;\n}\n\n\nth input:hover,\nth select:hover,\ntd input:hover,\ntd select:hover,\nth input:focus,\nth select:focus,\ntd input:focus,\ntd select:focus\n{\n\tbackground-color: #5c678a;\n}\n\nth input[type='checkbox'],\nth input[type='radio'],\ntd input[type='checkbox'],\ntd input[type='radio']{\n\tborder-left: none;\n\tbackground-color: transparent !important;\n}\n\n\ntd input + a,\ntd input + a:visited\n{\n\tmargin-left: 5px;\n\t/*color: #F1E5B3;*/\n\tfont-size: 12px;\n\tfont-weight: normal;\n}\n\ntd input + a:hover{\n\tcolor: red !important;\n    text-decoration:underline;\n}\n\ninput.icon{\n\tpadding-left: 0;\n}\n\ninput.icon::after{\n\tcontent: '';\n}\n\nth select,\ntd select\n{\n\tcolor: #999;\n}\n\ninput[type='number'] {\n\tmin-width: 55px;\n}\n\n/* radio */\ninput[type='radio']{\n\t-webkit-appearance: radio;\n\twidth: 18px;\n\theight: 18px;\n\tvertical-align: middle;\n\tmargin-left: 8px;\n\tmargin-right: 0;\n}\n\n/* checkbox */\ninput[type='checkbox']{\n\twidth: 30px;\n\theight: 30px;\n\tmargin-right: 6px;\n\tposition: relative;\n\tborder-radius: 2px;\n\tmargin-left: 20px;\n}\n\ninput[type=checkbox]:hover{\n\tborder-color: white;\n}\n\ninput[type=checkbox]::after {\n\tcursor: pointer;\n\tposition: absolute;\n\tleft: 17%;\n\ttop: 4.5%;\n\tcolor: #ccc;\n\tfont-size: 18px;\n\tfont-weight: normal;\n}\n\ninput[type=checkbox]:hover::after {\n\tcolor: #aaa;\n}\n\ninput[type=checkbox]:checked::after {\n\tcolor: #ccc;\n}\n\ntd input[type='checkbox'],\nth input[type='checkbox']\n{\n\tmargin-left: 10px;\n\tmargin-right: 26px;\n}\n\ntd input[type='checkbox']::after{\n\tleft: 10%;\n\ttop: -2px;\n\tcolor: #ccc;\n}\n\ntd input[type='checkbox']:hover::after{\n\tcolor: #555;\n}\n\ntd input[type='checkbox']:checked::after{\n\tcolor: #ddd;\n}\n\ninput[type=checkbox]::after {\n  font-family: FontAwesome;\n  display: inline-block;\n}\n\ninput[type=checkbox]::after { content: \"\\f096\"; } /* unchecked icon */\ninput[type=checkbox]::after { letter-spacing: 10px; } /* space between checkbox and label */\n\n/*input[type=checkbox]:checked::after { content: \"\\f046\"; }*/ /* checked icon */\ninput[type=checkbox]:checked::after { content: \"\\f14a\"; } /* checked icon */\ninput[type=checkbox]:checked::after { letter-spacing: 5px; } /* allow space for check mark */\n\np input:first-child{\n\tmargin-left: 8px;\n}\n\nlabel{\n\tline-height: 27px;\n\tfont-size: 14px;\n}\n\nth label{\n\tline-height: 35px;\n}\n\nlabel input {\n\tvertical-align: top;\n}\n\n/* submit */\ninput[type='submit']{\n\tcolor: #999;\n\tbackground-color: #110236;\n\tpadding: 0 25px;\n\tmargin-right: 20px;\n\tborder-radius: 2px;\n    border: 1px solid #666;\n}\n\ninput[type='submit']:hover{\n\tborder-color: #eee;\n    color: #eee;\n}\n\nbody input[name=\"delete\"]:hover {\n    border-color:red;\n    color:red;\n}\n\n/* select */\nselect{\n\tpadding-left: 6px;\n}\n\n/* textarea */\ntextarea{\n\tmin-height: 150px;\n\twidth: 100%;\n}\n\n/* fieldset */\nfieldset {\n\tdisplay: inline;\n\tvertical-align: top;\n\tpadding: 4px 7px 7px;\n\tmargin: 0 5px 10px;\n\tborder: 1px dashed #555;\n\tborder-radius: 2px;\n\tmin-height: 60px;\n}\n\nfieldset > div{\n\tdisplay: flex;\n}\n\nfieldset > div * + p{\n\tmargin-left: 10px;\n}\n\nfieldset > div > div{\n\tmargin-left: 10px;\n}\n\nfieldset > div > div:first-child{\n\tmargin-left: 0;\n}\n\nfieldset > div input,\nfieldset > div select\n{\n\tmargin-right: 5px;\n}\n\nfieldset > div input[type='checkbox']{\n\tmargin-left: 5px;\n}\n\nfieldset input{\n\tflex-grow: 1;\n}\n\nfieldset input[type='submit']{\n\tmargin-right: 10px;\n}\n\nfieldset input[type='submit']:last-of-type{\n\tmargin-right: 0;\n}\n\nlegend{\n\tfont-size: 14px;\n\tbackground-color: #000;\n\tpadding: 0 3px;\n\tcolor: #999;\n}\n\n.footer legend {\n\tbackground-color: #49526D;\n}\n\n/* menu\n   ----------------------------------------------------------------------- */\n\n#foot{\n\theight: 100%;\n}\n\n#menu{\n\theight: 100%;\n\twidth: 300px;\n\tbackground-color: #110236;\n\tposition: absolute;\n\torder: 1;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tmargin: 0;\n\tpadding: 0;\n\ttop: 0;\n\toverflow-y: overlay;\n    overflow-y: auto; /* needed for firefox 2017-03-05 */\n\tz-index: 10;\n}\n\n#menu p {\n\tpadding: 18px 18px 18px 0px;\n\tmargin: 0;\n\tborder-bottom: 1px solid #444;\n    line-height:24px;\n}\n\n/* logo */\n#h1{\n\tcolor: #555;\n\ttext-decoration: none;\n\tfont-style: inherit;\n}\n\n.version {\n  color: #555;\n  font-size: 18px;\n}\n\n/* db select */\n#dbs {\n\tpadding-left: 18px !important;\n}\n\n/* links */\n#menu .links{\n\tpadding-top: 0;\n\tpadding-bottom: 10px;\n}\n\n#menu .links a:nth-child(even){\n\tmargin-left: 6px;\n}\n\n#menu .links a{\n\tdisplay: inline-block;\n\tvertical-align: top;\n\twidth: 127px;\n\theight: 31px;\n\tmargin: 0;\n\tmargin-bottom: 10px;\n\tborder: 1px solid #555;\n\tline-height: 27px;\n\ttext-align: center;\n\tfont-size: 12px;\n\tborder-radius: 3px;\n\tcolor: #999;\n}\n\n#menu .links a.active,\n#menu .links a:hover\n{\n\tborder: 1px solid #ccc;\n\tfont-weight: normal;\n\tcolor: inherit;\n}\n\n/* tables */\n#logins, #tables{\n\tborder-bottom: none;\n\tline-height: 20px;\n\tpadding: 18px 0;\n\toverflow-y: auto !important;\n}\n\n#tables br{\n\tdisplay: none;\n}\n\n#tables a {\n\tfloat: left;\n\tpadding: 5px 18px 9px;\n\tline-height: 17px;\n\tcolor: #F1E5B3;\n\tfont-size: 13px;\n}\n\n#tables .structure, #tables .view {\n\tfloat: none;\n\tdisplay: block;\n\tcolor: #F1E5B3;\n\tfont-size: 14px;\n}\n\n#logins a {\n\tdisplay: block;\n\tpadding: 5px 18px;\n\tline-height: 14px;\n\tcolor: #F1E5B3;\n\tfont-size: 14px;\n}\n\n#tables a.select.active,\n#tables a.select:hover\n{\n\tcolor: red;\n}\n\n#logins a:hover,\n#tables a[title]:hover,\n#tables a.active,\n#tables a.select:hover + a,\n#tables a.select.active + a\n{\n\tbackground-color: #222;\n\tfont-weight: normal;\n    color: red;\n}\n\n/* content\n   ----------------------------------------------------------------------- */\n\n#content{\n\theight: 100%;\n\twidth: 100%;\n\tmargin: 0;\n\tpadding: 0;\n\tpadding-left: 50px;\n\tpadding-right: 50px;\n\tpadding-bottom: 30px;\n\toverflow-y: auto !important;\n\torder: 2;\n\tflex-grow: 1;\n    margin-left:300px;\n}\n\n#breadcrumb {\n    margin: 0;\n    height: 21px;\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 300px;\n    background-color: #000;\n    border: 1px dashed #ccc;\n    border-top:0;\n    padding: 2px 12px 24px 12px;\n    line-height: 1.5em;\n    color:#800000;\n    z-index:5000;\n}\n#breadcrumb a {\n    color:red;\n}\n\n#content h2{\n\tmargin-left: -50px;\n}\n\n/* links */\n#content .links a,\ncode.jush-sql ~ a,\n#fieldset-history > a:first-child\n{\n\tdisplay: inline-block;\n\theight: 32px;\n\tline-height: 30px;\n\tpadding: 0 10px;\n\tborder: 1px solid #666;\n\tborder-radius: 3px;\n\tfont-size: 12px;\n}\n\n#content .links a:hover,\ncode.jush-sql ~ a:hover,\n#fieldset-history > a:first-child:hover\n{\n\tcolor: #eee;\n\tborder-color: #eee;\n}\n\n#ajaxstatus + *{\n\tmargin-top: 18px;\n}\n\n#ajaxstatus + *.links {\n\tmargin-top: 0 !important;\n\theight: 65px;\n\tline-height: 55px;\n\tmargin-bottom: 0;\n}\n\n#ajaxstatus + .links a{\n\twhite-space: nowrap;\n\tmargin-right: 20px;\n\tpadding: 0;\n\tpadding-bottom: 5px;\n\tborder: 0;\n\tborder-radius: 0;\n\tfont-size: 15px;\n\tfont-weight: bold;\n}\n\n#ajaxstatus + .links a.active,\n#ajaxstatus + .links a:hover\n{\n\tborder-bottom: 1px solid;\n\tborder-color: inherit;\n\tcolor: inherit;\n}\n\n/* fieldset search */\n#fieldset-search > div > *{\n\tmargin-right: 5px;\n\tmargin-bottom: 5px;\n}\n\n/* fieldset search */\n#fieldset-partition p{\n\tmargin-bottom: 0;\n}\n\n/* feldset history */\n#fieldset-history{\n\tflex-wrap: wrap;\n}\n\n#fieldset-history i{\n\tdisplay: none;\n}\n\n#fieldset-history input[type='submit']{\n\tflex-grow: 0;\n\torder: 1;\n\tmargin-top: 1px;\n\tmargin-left: 17px;\n}\n\n#fieldset-history > div a:last-child{\n\torder: 2;\n}\n\n#fieldset-history > a{\n\tflex-grow: 0;\n\tflex-basis: 5%;\n\tmin-width: 45px;\n\ttext-align: center;\n\tmargin-bottom: 10px;\n\tmargin-left: 5px;\n}\n\n#fieldset-history > .time{\n\tflex-grow: 0;\n\tflex-basis: 5%;\n\ttext-align: center;\n\tline-height: 29px;\n}\n\n#fieldset-history > code{\n\tflex-grow: 1;\n\tflex-basis: 89%;\n\tline-height: 29px;\n}\n\n#fieldset-history > .time{\n\tflex-grow: 0;\n\tflex-basis: 5%;\n\ttext-align: center;\n}\n\n/* sql\n   ----------------------------------------------------------------------- */\n\n.sqlarea{\n\tborder: 1px solid #444 !important;\n\twidth: 100% !important;\n\tpadding: 12px 15px !important;\n\tfont-size: 15px;\n\tmargin-bottom: 20px;\n}\n\n.jush-sql_code{\n\tcolor: #fafafa !important;\n\tfont-family: \"Lucida Grande\",Verdana,Arial,\"Bitstream Vera Sans\",sans-serif !important;\n}\n\n.jush a, .jush a:visited{\n\tcolor: #fba;\n\tfont-weight: normal;\n}\n\n.jush a:hover{\n\tcolor: #fba;\n\tcursor: pointer;\n}\n\n.jush-php_quo, .jush-quo, .jush-quo_one, .jush-php_eot, .jush-apo, .jush-sql_apo, .jush-sqlite_apo, .jush-sql_quo, .jush-sql_eot{\n\tcolor: aquamarine;\n}\n\n.jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo{\n\tcolor: plum;\n}\n\n.jush-num, .jush-clr{\n\tcolor: #85E2FF;\n}\n\ncode {\n\tbackground: #000;\n\tfont-size: 14px;\n}\n\ncode.jush-sql ~ a{\n\tposition: relative;\n\tmargin-left: 5px;\n\t/*margin-top: 20px;\n\tmargin-bottom: 20px;\t*/\n}\n\ncode.jush-sql ~ a:first-of-type{\n\tmargin-left: 30px;\n}\n\ncode.jush-sql ~ a:first-of-type::before{\n    font-family: FontAwesome;\n\tcontent: '\\f104';\n\tcolor: #555;\n\tposition: absolute;\n\tleft: -22px;\n\tfont-size: 22px;\n\ttop: -1px;\n}\n\n/* logout form\n   ----------------------------------------------------------------------- */\n\nbody > form{\n\t/*position: relative;*/\n}\n\n.logout{\n\tz-index: 5000;\n}\n\n#lang {\n    z-index: 5000;\n    position: absolute;\n    top: 0;\n    left: 0;\n\n    margin: 0;\n    height: 21px;\n    display: block;\n    background-color: #110236;\n    border: 1px dashed #ccc;\n    border-top:0;\n    padding: 2px 12px 36px 12px;\n    line-height: 1.5em;\n    color:#ccc;\n    z-index:5000;\n}\n\n#theme-container {\n    margin-top: .5em;\n    position: absolute;\n    top: 0;\n    right: 140px;\n    margin: 0;\n    height: 21px;\n    display: block;\n    background-color: #110236;\n    border: 1px dashed #ccc;\n    border-top:0;\n    padding: 2px 12px 36px 12px;\n    line-height: 1.5em;\n    color:#ccc;\n    z-index:5000;\n\n}\n\n.jush-sql {padding: 2px 4px; margin-right: 4px; font-size: 9pt;background-color:#49526D;}\n.jush { color: white; }\n.jush-htm_com, .jush-com, .jush-com_code, .jush-one, .jush-php_doc, .jush-php_com, .jush-php_one, .jush-js_one, .jush-js_doc { color: #E0E0E0; }\n.jush-php, .jush-php_new, .jush-php_fun { color: #CCDAFF; background-color: #F0F0F0; }\n.jush-php_quo, .jush-quo, .jush-quo_one, .jush-php_eot, .jush-apo, .jush-sql_apo, .jush-sqlite_apo, .jush-sql_quo, .jush-sql_eot { color: #D3FFDC; }\n.jush-php_apo { color: #D3FFDC; }\n.jush-php_quo_var, .jush-php_var, .jush-sql_var { font-style: italic; }\n.jush-php_apo .jush-php_quo_var, .jush-php_apo .jush-php_var { font-style: normal; }\n.jush-php_halt2 { background-color: black; color: white; }\n.jush-tag_css, .jush-att_css .jush-att_quo, .jush-att_css .jush-att_apo, .jush-att_css .jush-att_val { color: white; background-color: #505003; }\n.jush-tag_js, .jush-att_js .jush-att_quo, .jush-att_js .jush-att_apo, .jush-att_js .jush-att_val, .jush-css_js { color: white; background-color: #00006D; }\n.jush-tag, .jush-xml_tag { color: #B4D5FF; }\n.jush-att, .jush-xml_att, .jush-att_js, .jush-att_css, .jush-att_http { color: #D9FEFF; }\n.jush-att_quo, .jush-att_apo, .jush-att_val { color: #FED8FF; }\n.jush-ent { color: #FED8FF; }\n.jush-js_reg { color: #B4D5FF; }\n.jush-php_sql .jush-php_quo, .jush-php_sql .jush-php_apo,\n.jush-php_sqlite .jush-php_quo, .jush-php_sqlite .jush-php_apo,\n.jush-php_pgsql .jush-php_quo, .jush-php_pgsql .jush-php_apo,\n.jush-php_mssql .jush-php_quo, .jush-php_mssql .jush-php_apo,\n.jush-php_oracle .jush-php_quo, .jush-php_oracle .jush-php_apo\n{ background-color: #FFBBB0; }\n.jush-bac, .jush-php_bac, .jush-bra, .jush-mssql_bra, .jush-sqlite_quo { color: #FFBBB0; }\n.jush-num, .jush-clr { color: #007F7F; }\n\n.jush a { color: #B4D5FF; }\n.jush-sql a, .jush-sql_code a, .jush-sqlite a, .jush-pgsql a, .jush-mssql a, .jush-oracle a { font-weight: bold; }\n.jush-sql span { outline: none; }\n.jush-php_sql .jush-php_quo a, .jush-php_sql .jush-php_apo a { font-weight: normal; }\n.jush-tag a, .jush-att a, .jush-apo a, .jush-quo a, .jush-php_apo a, .jush-php_quo a, .jush-php_eot2 a { color: inherit; color: expression(parentNode.currentStyle.color); }\na.jush-custom:link, a.jush-custom:visited { font-weight: normal; color: #F1E5B3; color: expression(parentNode.currentStyle.color); }\n\n\n#tables a.select {\n    overflow:hidden;\n    position:relative;\n    left:0;\n    width:24px;\n    height:24px;\n    margin-right:20px;\n    z-index:100;\n}\n#tables a.select::before {\n    font-family: FontAwesome;\n    font-size:18px;\n    content: \"\\f0ce\";\n    color:#F1E5B3;\n    width:24px;\n    height:24px;\n    cursor:pointer;\n    z-index:100;\n}\n#tables a:not(.select) {\n    position:relative;\n    left:-10px;\n    padding:5px;\n    width:auto;\n    height:24px;\n}\n/* editor table list */\np#tables a.select {\n    overflow:visible;\n}\np#tables a.select::before {\n    margin-right:15px;\n}\n\n/* edit row */\nhtml/*\\*/>/*/*/body table input + a[href*=\"&edit=\"][href*=\"&where\"] {\n    content: '';\n    width:18px;\n    vertical-align:middle;\n    display:inline-block;\n    overflow:hidden;\n}\nhtml/*\\*/>/*/*/body table a[href*=\"&edit=\"][href*=\"&where\"]::before {\n    font-family: FontAwesome;\n    font-size:18px;\n    /*content: \"\\f040\";*/\n    content: \"\\f044\";\n    /*content: \"\\f14b\";*/\n    letter-spacing: 10px;\n    color:#F1E5B3;\n    width:24px;\n    height:24px;\n    cursor:pointer;\n}\nhtml/*\\*/>/*/*/body table a[href*=\"&edit=\"][href*=\"&where\"]:hover::before {\n    color:forestgreen;\n}\n\n.pages {background:#817F5A;}\n\n.footer, .footer>div {\n\tbackground-color: #49526D;\n\topacity: .9;\n}\n.footer {\n\tborder-image: none;\n\tpadding: 20px 12px 0px;\n\tborder: 1px #BBB dashed;\n\tmargin: 12px;\n}\n"
  },
  {
    "path": "designs/mvt/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/mvt/screenshot.png)\n"
  },
  {
    "path": "designs/mvt/adminer.css",
    "content": "/**\n* Adminer theme by Aleksey M. (alekseymvt@gmail.com)\n* @link https://github.com/alekseymvt/Adminer.theme\n* @link https://github.com/vrana/adminer/\n* @link https://www.adminer.org/\n* -----------\n* Based on work by:\n* FLAT UI Flavored Adminer Theme by M. Mahbubur Rahman (mahbub@mahbubblog.com)\n* designs/pappu687/adminer.css\n* -----------\n* Based on work by : Lukáš Brandejs\n* https://raw.github.com/vrana/adminer/master/designs/ng9/adminer.css\n*/\n\n/*! normalize.css v4.2.0 | MIT License | github.com/necolas/normalize.css */\n\nhtml {\n\t--bg: #eef0f0;\n}\n\nhtml {\n\tfont-family: sans-serif;\n\tline-height: 1.15;\n\t-ms-text-size-adjust: 100%;\n\t-webkit-text-size-adjust: 100%;\n}\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n\tdisplay: block;\n}\n\nbody {\n\tmargin: 0;\n}\n\nh1 {\n\tfont-size: 2em;\n\tmargin: .67em 0;\n}\n\nhr {\n\tbox-sizing: content-box;\n\theight: 1px;\n\tborder: 0;\n\tbackground: gray;\n}\n\na {\n\tbackground-color: transparent;\n\t-webkit-text-decoration-skip: objects;\n\tcursor: pointer;\n}\n\na:active, a:hover {\n\toutline-width: 0;\n}\n\nabbr[title] {\n\tborder-bottom: none;\n\ttext-decoration: underline dotted;\n}\n\ncode, kbd, pre, samp {\n\tfont-family: monospace, monospace;\n\tfont-size: 1em;\n}\n\ndfn {\n\tfont-style: italic;\n}\n\nmark {\n\tbackground-color: #ff0;\n\tcolor: #000;\n}\n\nsmall {\n\tfont-size: 80%;\n}\n\nsub, sup {\n\tfont-size: 75%;\n\tline-height: 0;\n\tposition: relative;\n\tvertical-align: baseline;\n}\n\nsub {\n\tbottom: -.25em;\n}\n\nsup {\n\ttop: -.5em;\n}\n\naudio,\nvideo {\n\tdisplay: inline-block;\n}\n\naudio:not([controls]) {\n\tdisplay: none;\n\theight: 0;\n}\n\nimg {\n\tborder-style: none;\n}\n\nsvg:not(:root) {\n\toverflow: hidden;\n}\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n\tfont: inherit;\n\tmargin: 0;\n}\n\nbutton,\ninput {\n\toverflow: visible;\n}\n\nbutton,\nselect {\n\ttext-transform: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n\t-webkit-appearance: button;\n\tdisplay: inline-block;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n\tborder-style: none;\n\tpadding: 0;\n}\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n\toutline: 1px dotted ButtonText;\n}\n\ninput[type=date]::-webkit-inner-spin-button,\ninput[type=date]::-webkit-clear-button {\n\tdisplay: none;\n}\n\nfieldset {\n\tborder: 1px solid #c0c0c0;\n\tmargin: 0 2px;\n\tpadding: .35em .625em .75em;\n}\n\nlegend {\n\tcolor: inherit;\n\tborder: 0;\n\tpadding: 0;\n\tmax-width: 100%;\n}\n\ntextarea {\n\toverflow: auto;\n}\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n\tbox-sizing: border-box;\n\tpadding: 0;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n\theight: auto;\n}\n\n[type=\"search\"] {\n\t-webkit-appearance: textfield;\n\toutline-offset: -2px;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n\t-webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n\t-webkit-appearance: button;\n\tfont: inherit;\n}\n\ndetails,\nmenu {\n\tdisplay: block;\n}\n\nsummary {\n\tdisplay: list-item;\n}\n\n[hidden], template {\n\tdisplay: none;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntd, th {\n\tpadding: 2px;\n}\n\n/** -------------- Adminer.css ---------------*/\n\nhtml {\n\tfont-size: 14px\n}\n\n*, :after, :before {\n\tbox-sizing: border-box\n}\n\nbody, html {\n\tmargin: 0;\n\tpadding: 0\n}\n\nh1, h2, h3 {\n\tmargin: 0\n}\n\nbody {\n\tbackground: #eef0f0;\n\tfont: 14px/1.36 Verdana, Arial, Helvetica, sans-serif;\n\tfont-size: inherit;\n}\n\na, a:visited {\n\tcolor: #2980b9;\n\ttext-decoration: none;\n\tpadding: 3px 1px\n}\n\nh1 {\n\tfont-size: 1.5em;\n\tfont-weight: normal;\n\tbackground: #fff;\n\tcolor: #1e5eb6;\n\tborder-bottom: 1px solid #55708b;\n\tpadding: 20px\n}\n\n.error, .message, h2, h3, th a {\n\tfont-weight: bold\n}\n\nh2, h3 {\n\tfont-size: 1.7em;\n\tbackground: 0 0;\n\tcolor: #34495e;\n\tborder-bottom: 1px solid #f4f4f4;\n\tpadding: 10px 0\n}\n\nfieldset {\n\tpadding: 5px;\n\tborder: 1px solid #dedede\n}\n\ninput, select, textarea {\n\tborder: 1px solid #dedede;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tpadding: 5px\n}\n\ninput[type=submit] {\n\tbackground: #27ae60;\n\tcursor: pointer\n}\n\ninput[type=submit]:hover {\n\tbackground: #2c3e50\n}\n\ninput[type=checkbox] {\n\tmargin-right: 5px\n}\n\ninput[type=image] {\n\tborder: 1px solid #d0cdc4\n}\n\ninput[type=checkbox], input[type=radio] {\n\tborder: 1px solid #e5e5e5;\n\tpadding: 2px 5px\n}\n\ninput[name*=length], input[name=limit] {\n\twidth: 5em;\n}\n\ninput[name=text_length] {\n\twidth: 5em\n}\n\ncode {\n\tbackground: #f0ffe1;\n\tborder: 1px dashed #d5f1b9;\n\tpadding: 2px 4px;\n\tfont-family: Monaco, \"Courier New\", monospace;\n}\n\ncode a:hover {\n\tbackground: 0 0\n}\n\ntable {\n\tmargin: 10px 0;\n\tborder: 1px solid #e6e6e6;\n\tbackground-color: #fff;\n\tposition: relative;\n\tbox-shadow: 0 0 10px rgba(119, 119, 119, .2)\n}\n\ntd, th {\n\tborder: 1px solid #e9e9e9;\n\tpadding: 3px 6px;\n\tvertical-align: top;\n}\n\nth {\n\tbackground: #fff\n}\n\nth a {\n\tpadding-bottom: 0;\n\ttext-shadow: 1px 1px 1px #fff\n}\n\ntbody tr:hover td, tbody tr:hover th {\n\tbackground: #edf4ff\n}\n\nthead {\n\ttop: 34px;\n}\n\nthead td, thead th {\n\ttext-align: center;\n\tvertical-align: middle;\n\tfont-weight: bold;\n\twhite-space: nowrap;\n\tborder-right: 1px solid #fff;\n\tbackground: #31587d;\n\tcolor: #fff;\n\tpadding: 7px 2px;\n}\n\nthead td abbr, thead td sup, thead th acronym, thead th sup {\n\tcolor: #cdf\n}\n\n.odds tbody tr:nth-child(2n) {\n\tbackground: #fcfaf5\n}\n\n.nowrap td, .nowrap th, td.nowrap, p.nowrap {\n\twhite-space: nowrap;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\n.error, .message {\n\tpadding: 0;\n\tbackground: 0 0;\n}\n\n.error {\n\tcolor: #c00;\n}\n\n.message {\n\tcolor: #090;\n}\n\n.logout {\n\ttop: 28px;\n\tbackground-color: #31587d;\n\tbox-shadow: 0 0 3px 3px #31587d;\n}\n\n.js .column {\n\tbackground: #ecf0f1\n}\n\na:hover {\n\ttext-decoration: underline\n}\n\ninput[name=logout] {\n\tcolor: #fce2e2;\n\tbackground: #d73e3e\n}\n\ninput[name=drop] {\n\tbackground-color: #c0392b\n}\n\ninput[name=logout]:hover {\n\tbackground: #ea0202\n}\n\ninput[type=submit] {\n\tborder-radius: 2px;\n\tborder: 0;\n\tpadding: 5px 15px;\n\ttext-decoration: none;\n\tbackground-color: #65adc3;\n\tcolor: #fff;\n\ttext-shadow: 0 1px 0 #287ace;\n\tbox-shadow: inset 0 0 0 0 #cae3fc\n}\n\ninput[type=submit]:hover {\n\tbackground-color: #34495e;\n\ttext-shadow: 0 1px 0 #000\n}\n\ninput[type=submit]:active {\n\tposition: relative;\n\ttop: 1px\n}\n\ntable tbody input[name*=check] {\n\tdisplay: block;\n\tfloat: left\n}\n\ntable thead a[href*=\"&modify\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC) right bottom no-repeat;\n\tpadding-right: 18px\n}\n\ntable thead input ~ a[href*=\"&modify\"] {\n\twidth: 0;\n\tdisplay: inline-block;\n\theight: 16px;\n\toverflow: hidden;\n\ttext-decoration: none;\n\tpadding: 0 0 0 18px;\n\tbackground-position: 2px bottom\n}\n\ntable tbody a[href*=\"&edit=\"][href*=\"&where\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC) right bottom no-repeat;\n\tpadding-right: 18px\n}\n\ntable tbody input ~ a[href*=\"&edit=\"][href*=\"&where\"] {\n\twidth: 0;\n\tdisplay: inline-block;\n\theight: 16px;\n\toverflow: hidden;\n\ttext-decoration: none;\n\tpadding: 0 0 0 18px;\n\tbackground-position: 2px bottom\n}\n\n#schema .table {\n\tpadding: 5px;\n\tbackground: #fcfaf5;\n\tborder: 1px solid #d0cdc4\n}\n\n#schema .table b {\n\tcolor: #006aeb;\n\tfont-weight: bold;\n\ttext-decoration: underline;\n}\n\n#schema .table b:hover {\n\tcolor: #fff\n}\n\n#dbs input[name=db] {\n\tbackground: inherit;\n\tcolor: #fff;\n\tpadding: 3px;\n\twidth: 10rem;\n}\n\n#dbs input[name=db] + input {\n\tpadding: 5px;\n}\n\n#dbs span {\n\tcolor: #fff\n}\n\n#breadcrumb, #breadcrumb a {\n\tfont-weight: bold;\n\tcolor: #ecf0f1\n}\n\n#breadcrumb, #lang {\n\tz-index: 2;\n\tpadding: 5px\n}\n\n#lang {\n\tposition: fixed;\n\tline-height: 1;\n\tfont-size: 11px;\n\tleft: auto;\n\ttop: 0;\n\tright: calc(100% - 20rem + 3px);\n\tcolor: #fff;\n}\n\n#lang select {\n\tfont-size: inherit\n}\n\n#breadcrumb {\n\tleft: 21.5rem;\n\tbackground: #31587d;\n\tright: 0;\n\theight: auto;\n\tposition: fixed;\n\ttop: 0;\n}\n\n#logins, #tables {\n\tpadding: 0 0 0 5px;\n\tmargin: 0;\n\tlist-style: none;\n}\n\n#menu {\n\tbackground: #213d58;\n\tposition: fixed;\n\ttop: 0;\n\tcolor: #fff;\n\tpadding: 0;\n\tbottom: 0;\n\toverflow: auto;\n\tleft: 0;\n\twidth: 20rem;\n\tmargin: 0;\n}\n\n#menu h1 {\n\tpadding: 0 10px;\n\tbackground: 0 0\n}\n\n#menu .links {\n\tpadding: 5px;\n\tline-height: 1;\n\ttext-align: center;\n\tfont-size: 11px;\n}\n\n#menu a, #logins a, #tables .select {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-right: 5px\n}\n\n#menu select {\n\tbackground: inherit;\n\tcolor: #fff;\n\tpadding: 3px;\n}\n\n#menu select option {\n\tbackground: #fff;\n\tcolor: #000;\n}\n\n#menu p {\n\tborder-bottom: 1px solid #55708b;\n\tpadding: .8em .5em\n}\n\n#menu a {\n\tcolor: #fff;\n}\n\n.tables-filter {\n\tpadding: .8em .5em;\n}\n\n.tables-filter input {\n\tcolor: #fff;\n\tbackground: transparent;\n}\n\n.tables-filter input::placeholder {\n\tcolor: #fff;\n}\n\n#logins a, #tables a {\n\tbackground: 0 0\n}\n\n.logout {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tz-index: 5;\n\tcolor: #fff;\n\tmargin: 2px 8px;\n}\n\n#logout {\n\tcolor: #fff;\n\ttext-decoration: none\n}\n\n#logout:hover {\n\tcolor: red\n}\n\n#version, .version {\n\tfont-size: 50%\n}\n\n#h1:hover {\n\tcolor: #fff\n}\n\n#tables .select {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=) left center no-repeat;\n\theight: 15px;\n\tpadding: 0;\n\toverflow: hidden;\n\twidth: 15px;\n\ttext-decoration: none;\n\tline-height: 1;\n\tcolor: transparent;\n\tmargin-right: 0;\n}\n\n/* editor */\n#tables .select[title] {\n\theight: auto;\n\tpadding: 3px 20px;\n\toverflow: visible;\n\twidth: auto;\n\ttext-decoration: none;\n\tline-height: inherit;\n\tcolor: white;\n}\n\n#tables .structure {\n\tmin-width: calc(100% - 5px - 25px);\n\tpadding-left: 5px;\n}\n\n#tables .structure.active, #tables .select.active + .structure {\n\tbackground-color: #1a5fa5;\n}\n\n#menu a[href$=\"sql=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC) left center no-repeat;\n\tdisplay: inline-block;\n\tcolor: transparent;\n\toverflow: hidden;\n\twidth: 18px;\n}\n\n#menu a[href$=\"import=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=) left center no-repeat;\n\tdisplay: inline-block;\n\tpadding-left: 20px;\n\tvertical-align: middle;\n}\n\n#menu a[href*=\"dump=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC) left center no-repeat;\n\tdisplay: inline-block;\n\tpadding-left: 20px;\n\tvertical-align: middle;\n}\n\n#menu a[href$=\"&create=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC) left center no-repeat;\n\tdisplay: inline-block;\n\tcolor: transparent;\n\toverflow: hidden;\n\tvertical-align: middle;\n\twidth: 18px;\n}\n\n#content {\n\tmargin: 0 0 0 20rem;\n\tpadding: 35px 5px 20px .5rem;\n}\n\n#content table thead a.text:hover {\n\ttext-decoration: none\n}\n\n#content table thead a, #content table thead span {\n\tfont-weight: bold;\n\tcolor: #fff;\n\ttext-shadow: 0 1px 0 #000;\n\tbackground: 0 0;\n\twhite-space: nowrap;\n\tposition: static\n}\n\n#content table thead a:hover {\n\tbackground: 0 0;\n\ttext-decoration: underline;\n\tcolor: #000\n}\n\n#content tbody tr.checked td, .odds tbody tr.checked:nth-child(2n) td {\n\tbackground: #fbe2e2;\n\tcolor: red\n}\n\n#content p a[href*=\"&select=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=) left center no-repeat;\n\tpadding-left: 22px\n}\n\n#content p a[href*=\"&page=\"] {\n\tbackground-image: none;\n\tpadding-left: 0\n}\n\n#content p a[href$=\"?database=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==) 2px bottom no-repeat;\n\tpadding-left: 22px\n}\n\n#content p a[href*=\"&edit=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==) left center no-repeat;\n\tpadding-left: 22px\n}\n\n#content p a[href*=\"&table=\"].jush-custom {\n\tfont-weight: bold\n}\n\n#content p.links a[href*=\"&table=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC) left center no-repeat;\n\tpadding-left: 22px\n}\n\n#content p.links a[href*=\"&create=\"],\n#content p.links a[href*=\"&view=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC) left center no-repeat;\n\tpadding-left: 22px;\n}\n\n#content a[href*=\"&database=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=) 2px bottom no-repeat;\n\tpadding-left: 22px\n}\n\n#content p a[href*=\"&schema=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC) 2px bottom no-repeat;\n\tpadding-left: 22px\n}\n\n#content p a[href*=\"&sql=\"] {\n\tbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=) 2px bottom no-repeat;\n\tpadding-left: 24px\n}\n\n#table input {\n\tpadding: 3px 5px;\n}\n\n#edit-fields tbody th, #edit-fields tbody td {\n\tborder: 0;\n\tborder-right: 1px solid #213d58;\n\tpadding: 1px;\n\tvertical-align: top;\n\ttext-align: center;\n}\n\n#edit-fields tbody th:last-child, #edit-fields tbody td:last-child {\n\tborder-right: 0;\n}\n\n#edit-fields .icon {\n\tpadding: 2px;\n}\n\n#partition-table.hidden {\n\tdisplay: none;\n}\n\n#partition-table td {\n\tpadding: 1px;\n}\n\n.footer {\n\tborder-top: 1px solid #dedede;\n\tborder-bottom: 1px solid #dedede;\n\tborder-image: none;\n\tmargin: .5rem 0;\n\tmargin-right: initial;\n}\n\n.footer > div {\n\tpadding: 5px;\n}\n"
  },
  {
    "path": "designs/nette/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/nette/screenshot.png)\n"
  },
  {
    "path": "designs/nette/adminer.css",
    "content": "/* Theme \"Nette\" for Adminer, (c) David Grudl */\r\n\r\n/*\r\nit is based on some parts of:\r\n- Nette Framework design - http://api.nette.org\r\n- CSS by Brade - http://www.bradezone.com\r\n- Silk icon set 1.3 by Mark James - http://www.famfamfam.com/lab/icons/silk\r\n- CSS icons by Hever - http://hev.cz\r\n*/\r\n\r\nhtml {\r\n\t--fg: #333;\r\n}\r\n\r\nbody {\r\n\tbackground: #FFF;\r\n\tcolor: #333;\r\n\tfont: 13px/18px Helvetica, Arial, sans-serif;\r\n}\r\n\r\n/* generic */\r\na, a:visited {\r\n\tpadding: 3px 2px;\r\n\tcolor: #006AEB;\r\n\ttext-decoration: none;\r\n}\r\n\r\na:hover, a:link:hover {\r\n\tbackground-color: #006AEB !important;\r\n\tborder-bottom: 1px solid #006AEB;\r\n\tcolor: #FFF;\r\n}\r\n\r\np {\r\n\tmargin-bottom: 4px;\r\n\tpadding-bottom: 4px;\r\n}\r\n\r\nh1 {\r\n\tbackground: none;\r\n\tborder: none;\r\n\tcolor: #666;\r\n\tfont-size: 18px;\r\n\tfont-weight: bold;\r\n\theight: 40px;\r\n\tpadding: 0 0 8px;\r\n}\r\n\r\nh2 {\r\n\tbackground: transparent;\r\n\tborder: none;\r\n\tcolor: #333;\r\n\tfont: 32px Georgia,serif;\r\n\tmargin: 0;\r\n\tpadding: 10px 0 8px;\r\n}\r\n\r\nh3 {\r\n\tfont-size: 18px;\r\n\tfont-weight: bold;\r\n\tmargin: 0;\r\n\tpadding: 4px 0;\r\n}\r\n\r\nfieldset {\r\n\tborder: 1px solid #CCC;\r\n\tfloat: left;\r\n\tmargin-bottom: 8px;\r\n\tmargin-right: 4px;\r\n\tmin-height: 48px;\r\n\tpadding: 0 4px 4px;\r\n}\r\n\r\nfieldset div {\r\n\tmargin-top: 4px;\r\n}\r\n\r\ninput, select, textarea {\r\n\tborder: 1px solid #CCC;\r\n\tcolor: #555;\r\n\tfont: 13px Helvetica,Arial,sans-serif;\r\n\tpadding: 3px;\r\n}\r\n\r\nselect {\r\n\tpadding: 2px;\r\n}\r\n\r\ntextarea, .sqlarea {\r\n\tfont-family: Consolas,monospace;\r\n\theight: 500px;\r\n}\r\n\r\ninput[type=submit] {\r\n\tbackground: #4890E7;\r\n\tcolor: white;\r\n\tcursor: pointer;\r\n\tpadding: 3px;\r\n\tborder: none;\r\n}\r\n\r\ninput[type=submit]:hover {\r\n\tbackground-color: #006AEB;\r\n}\r\n\r\ninput[type=image], input[type=checkbox] {\r\n\tborder: none;\r\n\tpadding: 0;\r\n\tvertical-align: middle;\r\n}\r\n\r\nlabel input[type=checkbox], td input[type=radio], td span select {\r\n\tmargin-right: 4px;\r\n}\r\n\r\nfieldset select {\r\n\tmargin-right: 4px;\r\n}\r\n\r\noption {\r\n\tpadding: 0 5px;\r\n}\r\n\r\noptgroup {\r\n\tfont-size: 11px;\r\n}\r\n\r\ncode {\r\n\tbackground: #EEE;\r\n\tfont-family: Consolas,monospace;\r\n\tpadding: 2px 4px;\r\n}\r\n\r\ncode a:hover {\r\n\tbackground-color: transparent !important;\r\n}\r\n\r\ntable {\r\n\tborder: 1px solid #D0CDC4;\r\n\tfont-size: inherit;\r\n\tmargin: 4px 0 8px;\r\n}\r\n\r\ntbody tr:hover td, tbody tr:hover th {\r\n\tbackground: #EDF4FF;\r\n}\r\n\r\nth, td {\r\n\tbackground: inherit;\r\n\tborder: 1px dotted #CCC;\r\n\tborder-width:0 0 0 1px;\r\n\tfont-weight: normal;\r\n\tmargin: 0;\r\n\tpadding: 3px 5px;\r\n\ttext-align: left;\r\n\tvertical-align: top;\r\n}\r\n\r\n.odds tbody tr:nth-child(2n) {\r\n\tbackground: #FCFAF5;\r\n}\r\n\r\n.js .checked th, .js .checked td {\r\n\tbackground: #CEE0FC;\r\n}\r\n\r\nthead {\r\n\ttop: 40px;\r\n}\r\n\r\nthead th, thead td {\r\n\tbackground: #F2EEE1;\r\n\tborder-color: #D0CDC4;\r\n\tfont-weight: bold;\r\n\twhite-space: nowrap;\r\n}\r\n\r\nthead tr:hover td, thead tr:hover th,\r\n.js thead .checked th, .js thead .checked td {\r\n\tbackground: #F2EEE1;\r\n}\r\n\r\nth:first-child, td:first-child {\r\n\tborder-color: transparent;\r\n\twhite-space: nowrap;\r\n}\r\n\r\ntd[align=right] {\r\n\ttext-align: right;\r\n}\r\n\r\ntable code {\r\n\tfont-size: 13px;\r\n\tline-height: 18px;\r\n}\r\n\r\n.hidden {\r\n\tdisplay: none;\r\n}\r\n\r\n.error, .message {\r\n\tbackground: transparent;\r\n\tfont-weight: bold;\r\n\tpadding: 0;\r\n}\r\n\r\n.error {\r\n\tcolor: #C00;\r\n}\r\n\r\n.message {\r\n\tcolor: #090;\r\n}\r\n\r\n/* specific */\r\n\r\n#content {\r\n\theight: 100%;\r\n\tmargin: 40px 0 0 300px;\r\n\tpadding: 20px;\r\n\tbackground: white;\r\n\tz-index: 1;\r\n}\r\n\r\n#content:after {\r\n\tclear: both;\r\n\tcontent: \"\";\r\n\tdisplay: table;\r\n}\r\n\r\n#content > h2:before {\r\n\tdisplay: block;\r\n\tcontent: \"\";\r\n\tcolor: #FF9;\r\n\tfont-size: 13px;\r\n\tbackground: #333;\r\n\tline-height: 40px;\r\n\tmargin: 0;\r\n\tpadding: 0 0 0 20px;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 300px;\r\n\twidth: 100%;\r\n\theight: 40px;\r\n\r\n}\r\n\r\n#content > #breadcrumb + h2:before {\r\n\tdisplay: none;\r\n}\r\n\r\n#content > p {\r\n\tclear: left;\r\n}\r\n\r\n#lang {\r\n\tbackground: #333;\r\n\tcolor: #FFF;\r\n\theight: 40px;\r\n\tline-height: 40px;\r\n\tpadding: 0 0 0 40px;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\twidth: 260px;\r\n}\r\n\r\n#lang select {\r\n\tborder: none;\r\n\tbackground: #5F5F5F;\r\n\tcolor: white;\r\n}\r\n\r\n#menu {\r\n\tbackground: #FCFAF5;\r\n\tborder-right: 5px solid #E4E2DA;\r\n\tbottom: 0;\r\n\tmargin: 0;\r\n\toverflow: auto;\r\n\tpadding: 10px 15px;\r\n\tposition: fixed;\r\n\ttop: 40px;\r\n\twidth: 240px;\r\n}\r\n\r\n#menu a {\r\n\tcolor: #333;\r\n\tborder: none;\r\n\tmargin-right: 4px;\r\n}\r\n\r\n#logins a, #tables a {\r\n\tpadding: 1px 2px;\r\n}\r\n\r\n#menu a:hover {\r\n\tcolor: #FFF;\r\n}\r\n\r\n#menu p, #logins, #tables {\r\n\tborder: none;\r\n\tmargin: 0 0 4px;\r\n\tpadding: 0 0 4px;\r\n}\r\n\r\n#breadcrumb {\r\n\tbackground: #333;\r\n\tcolor: #FFF;\r\n\tline-height: 40px;\r\n\tmargin: 0;\r\n\tpadding: 0 0 0 20px;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 300px;\r\n\twidth: 100%;\r\n\theight: 40px;\r\n}\r\n\r\n#breadcrumb a {\r\n\tcolor: #FF9;\r\n}\r\n\r\n#breadcrumb a:hover {\r\n\tbackground: transparent;\r\n\tborder-color: #FF9;\r\n\tcolor: #FF9;\r\n}\r\n\r\n#schema .table {\r\n\tbackground: #F3F3F3;\r\n\tpadding: 4px 8px;\r\n}\r\n\r\n#logins a, #tables a {\r\n\tbackground: transparent;\r\n}\r\n\r\n/* IE hacks */\r\n* + html th:first-child, * + html td:first-child {\r\n\tborder-color: inherit;\r\n\twhite-space: inherit;\r\n}\r\n\r\n* html #lang, * html #menu, * html #breadcrumb {\r\n\tposition: absolute;\r\n}\r\n\r\n* html #lang {\r\n\theight: 30px;\r\n\tpadding-top: 10px;\r\n}\r\n\r\n* html form#form {\r\n\theight: 100%;\r\n}\r\n\r\n#content > p.tabs + *:after {\r\n\tdisplay: table;\r\n\tclear: both;\r\n\tcontent: \"\";\r\n}\r\n\r\n\r\n\r\n/* icons */\r\n.error {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC\") no-repeat scroll 0.8em center #FFEEEE;\r\n\tpadding-left: 38px;\r\n}\r\n\r\n.message, #menu p.message {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==\") no-repeat scroll 0.8em center #EEFFEE;\r\n\tpadding-left: 38px;\r\n}\r\n\r\na[href$=\"sql=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC\") no-repeat scroll left bottom;\r\n\tpadding-left: 22px;\r\n}\r\n\r\na[href*=\"dump=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\na[href$=\"dump=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC\") no-repeat scroll 2px center\t;\r\n\tpadding-left: 22px;\r\n}\r\n\r\nselect[name=\"db\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left center white;\r\n\tpadding-left: 16px;\r\n}\r\n\r\nselect[name=\"db\"] option {\r\n\tpadding-left: 18px;\r\n}\r\n\r\n#menu p a[href*=\"&select=\"] {\r\n\tdisplay: inline-block;\r\n\tmargin-right: 8px;\r\n\toverflow: hidden;\r\n\tpadding-left: 0;\r\n\ttext-decoration: none;\r\n\twidth: 16px;\r\n\theight: 16px;\r\n}\r\n\r\n#menu p a[href*=\"&select=\"]:before {\r\n\tcontent: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\");\r\n\tpadding-right: 5px;\r\n\tdisplay: inline-block;\r\n\tmargin-top: 2px;\r\n}\r\n\r\n#menu p a[href*=\"&table=\"], #menu p a[href*=\"&view=\"] {\r\n\tdisplay: inline-block;\r\n\ttext-decoration: none;\r\n}\r\n\r\n.tables-filter {\r\n\tpadding: 0;\r\n\tmargin: 8px 0;\r\n}\r\n\r\na[href*=\"&create=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\na[href$=\"&create=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\na[href*=\"&default=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ7SURBVHjabFPfa1JhGH6OR88odSKDaTEzS9i0jejXBtVuBzGooOgqoquu+heii27aRUTUaKx1nbAYDCqqm4raoBZDZrqhaCw31janm3r0eOb8+t4PFXW98Jz3O985z/P++j6JMQZJkroAODhk/Mfs/nZrJpLN8eUGxx/OqdQ/kgC3M7qub5fL5T1ujHtGvrYmlEolFggEnvB/j3IYiCe4VYF+IheLRaZpGiNPyOfzLJfLsXQ6zVKZDZZKpfaJkEkkQNEoCs9EeBJSVVUIZDIZkQ3tFQoFNjk5KURE+VWBczyD75VKBaFQCLu7uwJ8T4DWQ0ND1CtUewZZlgc4b65JQKQjSfXe8KggUfIEbf0zMnOvIFv6oKa+gBVWbhsbu03kSCRSj1xDTcSHWTj7bsLmOYXt391Y+jgx0iRAUf1+f+uEBFmNP4TZegHp+CIUSYe13QlLxxGbsTE6WSwWE4RaZIJbmYL9+CWU1gJQDkpYDi5BK5R2VDU3YGw9NF6vt+k9u3gPNu9laKtjMChlmCxumNkKnk0v3B19F48aG9OlLJLJZL1m685LdPZe5eTnMJjK0LMepGaDcA6PYPRWb5R4hsYSSMTlcuGAxhuZGEfniWHofycgKwylrBubM/M4fG0MbY6eeob7pvDz/TgsUhJlfj3WQk9h71SgpV3Y+hGGfP4+TLZDTSUaGodAj+Vfr+G/eAdtyW+ITs8g+CGN6Kcguq48gtt3thaoUi2b0XkmIi+7UiQfS2xCD7+B5+QgzOZurIcS8N14DKXDIzIkMrcCTVeIVZvnql5nw/VB+9fTxxxyf48H+T114cVU+MHb+a3VlmEReYNzk/8EGADOaaVGDf2TtwAAAABJRU5ErkJggg==\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\n#content p a[href*=\"&select=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\n#content p a[href*=\"&page=\"] {\r\n\tbackground-image: none;\r\n\tpadding: .2em .5em;\r\n}\r\n\r\n#content p a[href*=\"&edit=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\n#content p a[href*=\"&table=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\n#content p a[href*=\"&database=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\n#content p a[href*=\"&schema=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll 2px center;\r\n\tpadding-left: 22px;\r\n}\r\n\r\n#content p a[href*=\"&sql=\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=\") no-repeat scroll 2px center;\r\n\tpadding-left: 24px;\r\n}\r\n\r\ntable tbody input[type=\"checkbox\"] {\r\n\tdisplay: block;\r\n\tfloat: left;\r\n}\r\n\r\ntable a[href*=\"&edit=\"][href*=\"&where\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC\") no-repeat scroll right center;\r\n\tpadding-right: 18px;\r\n}\r\n\r\ntable input + a[href*=\"&edit=\"][href*=\"&where\"] {\r\n\tclear: right;\r\n\tdisplay: block;\r\n\tfloat: left;\r\n\tline-height: 15px;\r\n\tmargin-right: 8px;\r\n\toverflow: hidden;\r\n\tpadding: 0;\r\n\ttext-decoration: none;\r\n\twidth: 16px;\r\n}\r\n\r\ntable input + a[href*=\"&edit=\"][href*=\"&where\"]:before {\r\n\tcontent: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC\");\r\n\tpadding-right: 5px;\r\n}\r\n\r\ntable input + a[href*=\"&edit=\"][href*=\"&where\"]:hover {\r\n\tbackground: #FFC;\r\n\tcolor: white;\r\n\tmargin-left: 19px;\r\n\tmargin-top: -1px;\r\n\toverflow: visible;\r\n\tpadding: 1px 2px;\r\n\tposition: absolute;\r\n\twidth: auto;\r\n}\r\n\r\ntable a[href*=\"&clone=\"] {\r\n\tclear: right;\r\n\tdisplay: block;\r\n\tfloat: left;\r\n\tline-height: 15px;\r\n\tmargin-right: 8px;\r\n\toverflow: hidden;\r\n\tpadding-top: 0;\r\n\ttext-decoration: none;\r\n\twidth: 16px;\r\n}\r\n\r\ntable a[href*=\"&clone=\"]:before {\r\n\tcontent: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADHSURBVCjPdZFNbsIwFAa/5B5FuQPCOQ9HQuqCq3SHUAtrrgFCSKQk8Y80XTjYJqiajRfj55GftNBKJtGoRiXSytlAZORzM1ckExjouHEm0LPdqHkTRnruXAgEPGpVq1JVCJ6RB3dOfHFEa7W5RzLx3kjPDse8ZxKisue9JwkByzevPQGZQnD8kHuunEvB43EcyD0dt/kEzzGdLD2/k9Ckb261zs9ZhiggVRO12jzN4Z5C+tQq90T+ETK20/J1tU2xeCOjpT7+APfbTaDnTb/mAAAAAElFTkSuQmCC\");\r\n\tpadding-right: 5px;\r\n}\r\n\r\ntable a[href*=\"&clone=\"]:hover {\r\n\tbackground: #FFC;\r\n\tborder: 1px solid #CCC;\r\n\tcolor: white;\r\n\tfont-size: .9em;\r\n\tmargin-left: 42px;\r\n\tmargin-top: -2px;\r\n\toverflow: visible;\r\n\tpadding: 1px 2px;\r\n\tposition: absolute;\r\n\twidth: auto;\r\n}\r\n\r\ninput[name=\"delete\"], input[name=\"drop\"] {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC\") no-repeat scroll left center;\r\n\tborder: none;\r\n\tcursor: pointer;\r\n\tfont-size: .9em;\r\n\tpadding: 1px 5px 1px 18px;\r\n\tcolor: #999;\r\n}\r\n\r\ninput[name=\"delete\"]:hover, input[name=\"drop\"]:hover {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==\") no-repeat scroll left center;\r\n\tcolor: red;\r\n}\r\n\r\n.logout {\r\n\tcolor: #fff;\r\n\tbackground-color: #333;\r\n\tbox-shadow: 0 0 4px 4px #333;\r\n\tmargin-top: 0.7em;\r\n}\r\n\r\n#logout {\r\n\tbackground: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC\") no-repeat scroll left center;\r\n\tborder: none;\r\n\tcursor: pointer;\r\n\tmargin-left: 6px;\r\n\toverflow: hidden;\r\n\ttext-indent: 18px;\r\n\twidth: 16px;\r\n}\r\n\r\n\r\n/* paginator */\r\n.pages {\r\n\tmargin: 1em 0;\r\n\tfont-size: 90%;\r\n}\r\n\r\n.pages a[href*=\"&page=\"] {\r\n\tmargin: .2em;\r\n\tpadding: .2em .5em;\r\n\tborder: 1px solid #9AAFE5;\r\n\ttext-decoration: none;\r\n}\r\n"
  },
  {
    "path": "designs/ng9/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/ng9/screenshot.png)\n"
  },
  {
    "path": "designs/ng9/adminer.css",
    "content": "* {\r\n\tfont: 13px/1.5 Verdana, 'Geneva CE', lucida, sans-serif;\r\n\tcolor:#333333;\r\n\tmargin:0px;\r\n\tpadding:0px;\r\n}\r\n\r\na,a:visited {\r\n\tcolor:#006aeb;\r\n\ttext-decoration:none;\r\n\tpadding:3px 1px;\r\n}\r\n\r\n#content table thead span, #content table thead a {\r\n\tfont-weight:bold;\r\n\tcolor:black;\r\n}\r\n\r\n#content table thead a:hover {\r\n\tbackground:none;\r\n\ttext-decoration:underline;\r\n\tcolor:black;\r\n}\r\n\r\na:hover, a:link:hover {\r\n\tcolor:white;\r\n\tbackground:#006aeb;\r\n}\r\n\r\nh1 {\r\n\tfont-size:1.9em;\r\n\tfont-weight:normal;\r\n\tbackground:white;\r\n\tcolor:#1e5eb6;\r\n\tborder-bottom:1px solid #f4f4f4;\r\n\r\n\tpadding:20px;\r\n\tmargin:0px;\r\n}\r\n\r\n#menu h1 {\r\n\tpadding:0px 0px 5px 20px;\r\n\tbackground:none;\r\n}\r\n\r\nh2,h3 {\r\n\tfont-size:1.5em;\r\n\tfont-weight:normal;\r\n\tbackground:white;\r\n\tcolor:#1e5eb6;\r\n\tborder-bottom:1px solid #f4f4f4;\r\n\r\n\tpadding:20px 0px;\r\n\tmargin:0px;\r\n}\r\n\r\nfieldset {\r\n\tpadding:5px;\r\n\tborder:1px solid #f4f4f4;\r\n}\r\n\r\ninput,select,textarea {\r\n\tborder:1px solid #e5e5e5;\r\n\tmargin:1px;\r\n\tpadding:3px;\r\n}\r\n\r\ninput[type=submit] {\r\n\tcolor:white;\r\n\tbackground:#3390e6;\r\n\tpadding:3px 10px;\r\n\tcursor:pointer;\r\n\tborder:0px solid;\r\n}\r\n\r\ninput[type=submit]:hover{\r\n\tbackground:blue;\r\n}\r\n\r\ninput[type=checkbox]{\r\n\tmargin-right:5px;\r\n}\r\n\r\ninput[type=image] {\r\n\tborder:1px solid #d0cdc4;\r\n}\r\n\r\ninput[type=checkbox],input[type=radio]{\r\n\tborder:1px solid #e5e5e5;\r\n\tpadding:2px 5px;\r\n}\r\n\r\ncode{\r\n\tbackground:#f0ffe1;\r\n\tborder:1px dashed #d5f1b9;\r\n\tpadding:2px 4px;\r\n\tfont-family:\"Courier New\";\r\n}\r\ncode a:hover{background:transparent}\r\n\r\ntable{\r\n\tmargin:10px 0px;\r\n\tborder:1px solid #d0cdc4;\r\n\tborder-collapse:collapse;\r\n}\r\n\r\ntbody tr:hover td,tbody tr:hover th{\r\n\tbackground:#edf4ff\r\n}\r\n\r\nthead {\r\n\ttop: 46px;\r\n}\r\n\r\nthead th, thead td {\r\n\ttext-align:center;\r\n\tvertical-align:middle;\r\n\tfont-weight:bold;\r\n\twhite-space:nowrap;\r\n\tbackground:#f2eee1;\r\n\tcolor:#808080;\r\n}\r\n\r\nth,td{\r\n\tborder:1px solid #d0cdc4;\r\n\tpadding:3px 6px;\r\n\tvertical-align:top;\r\n}\r\n\r\nth a {\r\n\tfont-weight:bold;\r\n\tpadding-bottom:0px;\r\n}\r\n\r\nth {\r\n\tbackground:white;\r\n}\r\n\r\n.odds tbody tr:nth-child(2n) {\r\n\tbackground:#fcfaf5;\r\n}\r\n\r\n#content tbody tr.checked td, .odds tbody tr:nth-child(2n).checked td {\r\n\tbackground:#fbe2e2;\r\n\tcolor:red;\r\n}\r\n\r\n.hidden{\r\n\tdisplay:none\r\n}\r\n\r\n.error,.message{\r\n\tpadding:0px;\r\n\tbackground:transparent;\r\n\tfont-weight:bold\r\n}\r\n\r\n.error{\r\n\tcolor:#c00\r\n}\r\n\r\n.message{\r\n\tcolor:#090\r\n}\r\n\r\n#content{\r\n\tmargin:0px 0px 0px 320px;\r\n\tpadding:50px 20px 40px 0px;\r\n\theight:100%;\r\n}\r\n\r\n#lang {\r\n\tbackground:#f2eee1;\r\n\tcolor:#808080;\r\n\tposition:fixed;\r\n\ttop:0px;\r\n\tleft:0px;\r\n\twidth:100%;\r\n\tpadding:10px 20px;\r\n\tz-index:1;\r\n}\r\n\r\n#breadcrumb {\r\n\tposition:fixed;\r\n\ttop:0px;\r\n\tleft:300px;\r\n\tbackground:#f2eee1;\r\n\tz-index:2;\r\n\twidth:100%;\r\n\tpadding:10px;\r\n}\r\n\r\n#menu {\r\n\tbackground:#fcfaf5;\r\n\tposition:fixed;\r\n\ttop:-10px;\r\n\tpadding:20px;\r\n\tpadding-top:40px;\r\n\tbottom:0px;\r\n\toverflow:auto;\r\n\tleft:0px;\r\n\twidth:240px;\r\n\tborder-right:5px solid #f2eee1;\r\n}\r\n\r\n#schema .table {\r\n\tpadding:5px;\r\n\tbackground:#fcfaf5;\r\n\tborder:1px solid #d0cdc4;\r\n}\r\n\r\n#schema .table b {\r\n\tcolor:#006aeb;\r\n\tfont-weight:bold;\r\n\ttext-decoration:underline;\r\n}\r\n\r\n#schema .table b:hover {\r\n\tcolor:white;\r\n}\r\n\r\n#logout {\r\n\tcolor:#fce2e2;\r\n\tbackground:#d73e3e;\r\n}\r\n\r\n#logout:hover {\r\n\tbackground:#ea0202;\r\n}\r\n\r\n#logins a, #tables a {\r\n\tbackground:none;\r\n}\r\n\r\n#logins a:hover, #tables a:hover {\r\n\tbackground:#006aeb;\r\n}\r\n\r\n.logout {\r\n\tz-index: 5;\r\n\tbackground-color: #f2eee1;\r\n\tbox-shadow: 0 0 4px 4px #f2eee1;\r\n}\r\n\r\n.js .column {\r\n\tbackground:#f2eee1;\r\n}\r\n\r\n#content table thead a.text:hover {\r\n\ttext-decoration:none;\r\n}\r\n\r\n#version, .version {\r\n\tfont-size:50%;\r\n}\r\n\r\n#h1:hover {\r\n\tcolor:white;\r\n}\r\n"
  },
  {
    "path": "designs/nicu/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/nicu/screenshot.png)\n"
  },
  {
    "path": "designs/nicu/adminer.css",
    "content": "/* CSS by Nicu I. - www.nicu.me */\n@import url('//fonts.googleapis.com/css?family=Roboto:400,700,300');\nbody {\n    font: 16px/1.25 'Roboto', Verdana, Arial, Helvetica, sans-serif;\n    margin: 0;\n    color: #000;\n    background: #fff;\n}\na {\n    text-decoration: none;\n    color: #246db3;\n}\na:visited {\n    color: #225584;\n}\na:link:hover,\na:visited:hover {\n    text-decoration: underline;\n    color: #f44;\n}\na.text:hover {\n    text-decoration: none;\n}\na.jush-help:hover {\n    color: inherit;\n}\nh1 {\n    font-size: 150%;\n    font-weight: normal;\n    margin: 0;\n    padding: 1.6em .7em 0;\n    color: #f44;\n    border-bottom: 0 solid #999;\n    background: transparent;\n}\nh2 {\n    font-size: 29px;\n    font-weight: 300;\n    margin: 0 0 20px -18px;\n    padding: .5em .6em;\n    color: #000;\n    border-bottom: 0 solid #000;\n    background: transparent;\n}\nh3 {\n    font-size: 130%;\n    font-weight: normal;\n    margin: 1em 0 0;\n}\nform {\n    margin: 0;\n}\ntd table {\n    width: 100%;\n    margin: 0;\n}\ntable {\n    font-size: 90%;\n    margin: 1em 20px 0 0;\n    border: 0;\n    border-top: 1px solid #d2d2d2;\n    border-left: 0 solid #d2d2d2;\n}\ntd {\n    padding: .2em .3em;\n    border: 0;\n    border-right: 0 solid #d2d2d2;\n    border-bottom: 1px solid #d2d2d2;\n}\nth {\n    padding: .2em .3em;\n    border: 0;\n    border-right: 1px solid #d2d2d2;\n    border-bottom: 1px solid #d2d2d2;\n}\nth {\n    text-align: left;\n    background: #eaeaea;\n}\nthead td {\n    padding: .2em .5em;\n    text-align: center;\n    border-right: 1px solid #d2d2d2;\n    border-left: 1px solid #d2d2d2;\n}\nthead td,\nthead th {\n    background: #eaeaea;\n}\nfieldset {\n    display: inline;\n    margin: .8em .5em 0 0;\n    padding: .5em .8em;\n    vertical-align: top;\n    border: 1px solid #999;\n}\np {\n    margin: .8em 20px 0 0;\n}\nimg {\n    vertical-align: middle;\n    border: 0;\n}\ntd img {\n    max-width: 200px;\n    max-height: 200px;\n}\ncode {\n    font-size: 14px;\n    padding: 1px;\n    background: #eee;\n}\ntbody tr:hover td,\ntbody tr:hover th {\n    background: #eee;\n}\npre {\n    margin: 1em 0 0;\n}\npre,\ntextarea,\ninput,\nselect {\n    font: 14px/1.25 'Roboto', Verdana, Arial, Helvetica, sans-serif;\n}\ninput[type=image] {\n    vertical-align: middle;\n}\ninput.default {\n    box-shadow: 1px 1px 1px #777;\n}\ninput.required {\n    box-shadow: 1px 1px 1px red;\n}\n.block {\n    display: block;\n}\n.version {\n    font-size: 67%;\n    padding: 0 3px;\n    color: #777;\n}\n.js .hidden,\n.nojs .jsonly {\n    display: none;\n}\n.js .column {\n    position: absolute;\n    margin-top: -.27em;\n    padding: .27em 1ex .3em 0;\n    background: #ddf5ff;\n}\n.nowrap td,\n.nowrap th,\ntd.nowrap {\n    white-space: pre;\n}\n.wrap td {\n    white-space: normal;\n}\n.error {\n    color: red;\n    background: #fee;\n}\n.error b {\n    font-weight: normal;\n    background: #fff;\n}\n.message {\n    color: green;\n    background: #efe;\n}\n.error,\n.message {\n    margin: 1em 20px 0 0;\n    padding: .5em .8em;\n}\n.char {\n    color: #007f00;\n}\n.date {\n    color: #7f007f;\n}\n.enum {\n    color: #007f7f;\n}\n.binary {\n    color: red;\n}\n.odds tbody tr:nth-child(2n) {\n    background: transparent;\n}\n.js .checkable .checked td,\n.js .checkable .checked th {\n    background: #ddf;\n}\n.time {\n    font-size: 70%;\n    color: silver;\n}\n.function {\n    text-align: right;\n}\n.number {\n    text-align: right;\n}\n.datetime {\n    text-align: right;\n}\n.type {\n    width: 15ex;\n    width: auto\\9;\n}\n.options select {\n    width: 20ex;\n    width: auto\\9;\n}\n.view {\n    font-style: italic;\n}\n.active {\n    font-weight: bold;\n}\n.sqlarea {\n    width: 98%;\n}\n.icon {\n    width: 18px;\n    height: 18px;\n    background-color: navy;\n}\n.icon:hover {\n    background-color: red;\n}\n.size {\n    width: 6ex;\n}\n.help {\n    cursor: help;\n}\n.pages {\n    position: fixed;\n    bottom: 0;\n    left: 21em;\n    padding: 5px;\n    border: 1px solid #999;\n    background: #f1f1f1;\n}\n.links a {\n    margin-right: 20px;\n    white-space: nowrap;\n}\n.logout {\n    position: absolute;\n    top: 0;\n    right: 0;\n    margin-top: .5em;\n}\n.loadmore {\n    margin-left: 1ex;\n}\n#menu {\n    position: absolute;\n    top: -1em;\n    left: 0;\n    width: 19em;\n    margin: 10px 0 0;\n    padding: 0 0 30px 0;\n    background: #f1f1f1;\n}\n#menu p, #logins, #tables {\n    margin: 0;\n    padding: .8em 1em;\n    border-bottom: 1px solid #c7c7c7;\n}\n#dbs {\n    overflow: hidden;\n}\n#logins,\n#tables {\n    overflow: auto;\n    white-space: nowrap;\n}\n#logins a,\n#tables a,\n#tables span {\n    background: transparent;\n}\n#content {\n    margin: 2em 0 0 21em;\n    padding: 10px 20px 20px 0;\n}\n#lang {\n    line-height: 1.8em;\n    position: absolute;\n    top: 0;\n    left: 0;\n    padding: .3em 1em;\n}\n#breadcrumb {\n    font-size: 12px;\n    line-height: 1.8em;\n    position: absolute;\n    top: 8px;\n    left: 27em;\n    height: 2em;\n    margin: 0 0 0 0;\n    padding: 0 1em;\n    white-space: nowrap;\n    background: transparent;\n}\n#h1 {\n    font-style: normal;\n    text-decoration: none;\n    color: #f44;\n}\n#version {\n    font-size: 67%;\n    color: red;\n}\n#schema {\n    position: relative;\n    margin-left: 60px;\n    -webkit-user-select: none;\n       -moz-user-select: none;\n}\n#schema .table {\n    position: absolute;\n    padding: 0 2px;\n    cursor: move;\n    border: 1px solid silver;\n}\n#schema .references {\n    position: absolute;\n}\n#help {\n    font-family: monospace;\n    position: absolute;\n    z-index: 1;\n    padding: 5px;\n    border: 1px solid #999;\n    background: #eee;\n}\n.rtl h2 {\n    margin: 0 -18px 20px 0;\n}\n.rtl p,\n.rtl table,\n.rtl .error,\n.rtl .message {\n    margin: 1em 0 0 20px;\n}\n.rtl .logout {\n    right: auto;\n    left: 0;\n}\n.rtl #content {\n    margin: 2em 21em 0 0;\n    padding: 10px 0 20px 20px;\n}\n.rtl #breadcrumb {\n    right: 21em;\n    left: auto;\n    margin: 0 -18px 0 0;\n}\n.rtl #lang,\n.rtl #menu {\n    right: 0;\n    left: auto;\n}\n@media all and (max-width: 800px) {\n    .pages {\n        left: auto;\n    }\n    #menu {\n        position: static;\n        width: auto;\n    }\n    #content {\n        margin-left: 10px;\n    }\n    #lang {\n        position: static;\n        border-top: 1px solid #999;\n    }\n    #breadcrumb {\n        left: auto;\n    }\n    .rtl #content {\n        margin-right: 10px;\n    }\n    .rtl #breadcrumb {\n        right: auto;\n    }\n}\n@media print {\n    #lang,\n    #menu {\n        display: none;\n    }\n    #content {\n        margin-left: 1em;\n    }\n    #breadcrumb {\n        left: 1em;\n    }\n    .nowrap td,\n    .nowrap th,\n    td.nowrap {\n        white-space: normal;\n    }\n}\n.jush {\n    color: black;\n}\n.jush-htm_com,\n.jush-com,\n.jush-com_code,\n.jush-one,\n.jush-php_doc,\n.jush-php_com,\n.jush-php_one,\n.jush-js_one,\n.jush-js_doc {\n    color: gray;\n}\n.jush-php,\n.jush-php_new,\n.jush-php_fun {\n    color: #003;\n    background-color: #fff0f0;\n}\n.jush-php_quo,\n.jush-quo,\n.jush-quo_one,\n.jush-php_eot,\n.jush-apo,\n.jush-sql_apo,\n.jush-sqlite_apo,\n.jush-sql_quo,\n.jush-sql_eot {\n    color: green;\n}\n.jush-php_apo {\n    color: #009f00;\n}\n.jush-php_quo_var,\n.jush-php_var,\n.jush-sql_var {\n    font-style: italic;\n}\n.jush-php_apo .jush-php_quo_var,\n.jush-php_apo .jush-php_var {\n    font-style: normal;\n}\n.jush-php_halt2 {\n    color: black;\n    background-color: white;\n}\n.jush-tag_css,\n.jush-att_css .jush-att_quo,\n.jush-att_css .jush-att_apo,\n.jush-att_css .jush-att_val {\n    color: black;\n    background-color: #ffffe0;\n}\n.jush-tag_js,\n.jush-att_js .jush-att_quo,\n.jush-att_js .jush-att_apo,\n.jush-att_js .jush-att_val,\n.jush-css_js {\n    color: black;\n    background-color: #f0f0ff;\n}\n.jush-tag,\n.jush-xml_tag {\n    color: navy;\n}\n.jush-att,\n.jush-xml_att,\n.jush-att_js,\n.jush-att_css,\n.jush-att_http {\n    color: teal;\n}\n.jush-att_quo,\n.jush-att_apo,\n.jush-att_val {\n    color: purple;\n}\n.jush-ent {\n    color: purple;\n}\n.jush-js_key,\n.jush-js_key .jush-quo,\n.jush-js_key .jush-apo {\n    color: purple;\n}\n.jush-js_reg {\n    color: navy;\n}\n.jush-php_sql .jush-php_quo,\n.jush-php_sql .jush-php_apo,\n.jush-php_sqlite .jush-php_quo,\n.jush-php_sqlite .jush-php_apo,\n.jush-php_pgsql .jush-php_quo,\n.jush-php_pgsql .jush-php_apo,\n.jush-php_mssql .jush-php_quo,\n.jush-php_mssql .jush-php_apo,\n.jush-php_oracle .jush-php_quo,\n.jush-php_oracle .jush-php_apo {\n    background-color: #ffbbb0;\n}\n.jush-bac,\n.jush-php_bac,\n.jush-bra,\n.jush-mssql_bra,\n.jush-sqlite_quo {\n    color: red;\n}\n.jush-num,\n.jush-clr {\n    color: #007f7f;\n}\n.jush a {\n    color: navy;\n}\n.jush a.jush-help {\n    cursor: help;\n}\n.jush-sql a,\n.jush-sql_code a,\n.jush-sqlite a,\n.jush-pgsql a,\n.jush-mssql a,\n.jush-oracle a,\n.jush-simpledb a {\n    font-weight: bold;\n}\n.jush-php_sql .jush-php_quo a,\n.jush-php_sql .jush-php_apo a {\n    font-weight: normal;\n}\n.jush-tag a,\n.jush-att a,\n.jush-apo a,\n.jush-quo a,\n.jush-php_apo a,\n.jush-php_quo a,\n.jush-php_eot2 a {\n    color: inherit;\n    color: expression(parentNode.currentStyle.color);\n}\na.jush-custom:link,\na.jush-custom:visited {\n    font-weight: normal;\n    color: inherit;\n    color: expression(parentNode.currentStyle.color);\n}\n.jush p {\n    margin: 0;\n}\n"
  },
  {
    "path": "designs/pappu687/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/pappu687/screenshot.png)\n"
  },
  {
    "path": "designs/pappu687/adminer.css",
    "content": "/*\r\nFLAT UI Flavored Adminer Theme by M. Mahbubur Rahman (mahbub@mahbubblog.com)\r\nScreenshot : http://d.pr/i/cznH\r\nBased on work by : Lukáš Brandejs\r\nhttps://raw.github.com/vrana/adminer/master/designs/ng9/adminer.css\r\n*/\r\n/*\r\n * add at last;\r\n * https://github.com/vrana/adminer\r\n *\r\n * adminer.php :allow in iframe(  if($b->headers()){header(\"X-Frame-Options: deny\");header(\"X-XSS-Protection: 0\");} )\r\n */\r\nhtml {\r\n\t--fg: #555;\r\n}\r\n\r\n::-webkit-scrollbar-track-piece{\r\n    background-color: rgba(180,180,180,0.06);\r\n    border-radius:3px;\r\n}\r\n::-webkit-scrollbar{width:10px;height:10px;}\r\n::-webkit-scrollbar-thumb{background-color:rgba(180,180,180,0.2);;border-radius: 12px;\r\n    background-clip:padding-box;border:1px solid rgba(180,180,180,0.4);min-height: 28px;}\r\n::-webkit-scrollbar-thumb:hover{background-color:rgba(180,180,180,0.4);border:1px solid rgba(180,180,180,0.7);}\r\n\r\n\r\n* {margin:0px;padding:0px;}\r\nbody{\r\n    font: 13px/1.7 'Source Sans Pro',\"Helvetica Neue\", \"Microsoft Yahei\", \"微软雅黑\", STXihei, \"WenQuanYi Micro Hei\",\"Proxima Nova Rg\",\"Droid Sans\",Arial,Helvetica, sans-serif;\r\n    color:#555;\r\n\r\n}\r\n\r\n\r\n\r\nbody{\r\n    background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAMAAAD8CC+4AAAB11BMVEX3+Pj39/f2+Pj1+Pj29/b29vf29vb29/f29/j19/f19/b19/X09/bz9/f09/f19ff19fb19fXz9vX19vX19vf09vf09vb09vX09vTz9vb19vb09fX09fT09Pb09PX09PT09fb09ff19PTz9fbz9fXz9fTz9fPy9fXy9fTz9PPz8/Xz8/Tz8/Pz9Pbz9PTz9PXy9PXy9PTy9PPw9PPw9PTy8/Py8/Ly8vTy8vPy8vLy8/Tv8/Pv8/Ly8/Xw8/Tw8/Pw8/Lw8vTw8vPw8vLv8vPv8vLv8vDu8/Pu8vDu8vLw8vDw8PLw8PDw8PPv8PPv8PDv8PLv8O/v7/Lu8O/u7/Lt8PDt8O/v7/Dv7+/u8PDu8PLu7/Du7+/u7+7u7vDu7u/u7u7s7+/t7/Dt7+/t7+7s7+7t7u/t7u7t7u3t7e/t7e7t7e3u7fDt7vDs7u/s7u7s7u3r7u7r7u3s7ezs7O7s7O3s7Ozs7e/s7e3s7e7r7e/r7e7r7e3r7ezq7ezq7e3r7Ozr7Ovr6+3r6+zr6+vr7O3r7O7q7O3q7Ozq7Ovp7Ozp7Ovq6uzq6uvq6urq6+3q6+vq6+zp6+zp6+vp6+rn6+vp6urp6erp6uzn6uvn6urp6uvn6erAHzXDAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH3gwCEQA7J/bSFgAAIABJREFUeNrUvY1zHddxJ3o3SsxFaou2nhK4SIgiqwIXFZkPMCRdUwRsjojLYZErSDOhLJGje8uWNBLvOq4YcirrhV6wDmrfMsGu86pEaZ9rd/3+2J3z0ed09+nzMRegs69tkfgigDt9Tn/++teT6XTadRUR9q4k+J90b+yAdMGXdZ36sP/ybteI/ht/6U6JdOz9dyKyDzIfZH9/oWR3d3j75iDqY/pHHir5Bks/yOnp8WoyD0R99Iksp6ddzyT8omfP5H8M3/9p2/ofG/tBDwc5tPLwof7YZJqSpjEPt9Wi32Ra3dmZV8Uinab1sYr3x2t9/aNy2W3b5SCtl6OoHDoZrfknz0FOz/fb/fazyXR9fXiGfW+vRvB0h6cz3Emrcf24/XXDV3p4V523vc3NzVoJ+5z/evb9N7000yn5VFOgfH9RZrPDGRN1we8SOTzcX5oXekrl+AySvGlReTZI6T+MXfknT7788suSH4YMyjffVJNqY6MadVeHf4dVmjL8OVkv/9JA2w8eXLhwYVBsb424MuP7c2fXe2Tf1afU+/Cy71jLex7SaTnkgkyqF/EWU4dwzjbC+QEj6s3f/OY3g9L1018XrbvzxeCJd5umwfevWkF2zlPwA9tnevby5ImyPebtZSBf5VUbKnAIALruSyWSevMyLxZsTZTejPaInVFHr9BTKNmZgG3tuuuDRO9pJ36mU/83Nj8X+DlnEZyVMvUGZ+3C1iDtSDk8bI1v/2oQpsaRXjyhp2dP/jeWbw7/fPLngwyX+iI80I8+Atc96v6iL+9rIq9K36hXf1wC37u+jt/dHP5vA4PaHMjhL/0ZHL9vaEmo1+hY3/xdGtN9IckKpn2w4V9yaVv/9nna6ITtNtYgsA/MVCD5Nyp6X1/XD359XbqbJXZ8+NIWX8pNGk9t1oJst22xEQdrpNWO5Vvq2xtHvdsVyvn4chNDCVo3mlfCPyh+6ZmOw5fSj4idDfer7+xM/BNcW6vOKp1NzBOHpXPxAZOmAc1ekr+5vv6bTHR8NpyhvjcRnf6jevJE++/P3n1XfRxSk+FktAk3+/UgpS65LD5HD/301D954TZqUd+4tV/wPDK/U/O73749uW1k3Up9XuI13p35LAVh/mUnWtH2DuvUUpTlUv9OxiagRO2TT05tEjwyQ4O/T5/8/0ZcWqpverOlZU3Zefd05yY25mZ+R8rjhz/vj3b/EF/bG+tPy5YXbuJrYwlm6172P/10H7IxyNbU1Vcv037D5btKhiO+f/jf/tvfW3Hh25elspovJkGfSZpG5mjoV2DOxDkX5UrKg/fvfnfy3UD4nd00ulqc9brq4G0uWe1Bk7F/ZE0+M+qzGdz02bE6PIv9fcl979K7b9RMw/biVNxJ/jBEAipn481H9Vn4w1gK8nLqtbXJ2lSHckbM2/v7UsZlS7HD/1prBGwMF3XhKKJf7BPZ3HRlXUnGZHQqJR/+u3PHq8Um61WlXjAk7m+ZCO4kKv1pKCj4cxUOrtl8beR0NdW6g9mqu5xOFckn/tMgzsao7/QVluECTbSq15Hi19dXCuF2o2JOS6JOoyo+DY/QwMybvA2yt4OD4ZabbG0DnEC7n5H+rqrHPsVSVmy7c2cRl4QRleO08yq5+YpqUUz5jMpyh0TvTkwtriMXlkZj3auvvmrv6vBCrG93Tp65fLjUupan3tk9l/KcVf3G8Px10c2Iq7+6Ypy57aPLq6YXSFK9s+hu8APnkxKExqQoIvGvbLg6E9LwWEf12Llzv5fEELyLxebdG2/oIO3996+7uEDM7eEgxDPzwQJcp0ICPS06bjMSL9X8dlSNVB8XZ6P0t/4bLP8CsbdQDPBv+Yp/Vvn/76fDPZlsCDLkSL763tGLK4XvSl7Flbf5XD2yqLPWN2e7xkW3IVZb7aJvqO+l2uQLVah58kRK2/6jl2w+pvrJqNGA5csVxTraedLap77Bw1TdPgjQcY9eCFOGiz3xIXLgVU0VFcfxtt/StijLGlW6AS9/jj2Xc6zBmRc0uAMTd36uxWT3Q+YXSqhEIbEKM6xoeU7OChKNGB0m9gnBkap5jZVSOoTsNIBXojEoIXbB3m8RKUNV/AaSYh26eoyNKNdz9/1eVA5de2X5X3Ly2Wefud9bFasePXrkz4x9o4KQ+CFU3R8+fJg0qW0b/cT5uvZEZk41368N6dpkfeaTX1P2UH9fvOghFK0LxsCS25ua6MnMqSvQz+w2FfhAt8r1voxELsHtq/hNOO9w4vkd30b/Wr29XatQ4fCBEqUKX9EbI8/DvRefDhEesqF9uuqIbG4JsramNOdj2HRRlcRsYSPWvz/HX75Zh+V0LXI1dt0aIRKBfDqIbryoMpzCUQyZ+3J5+7ayfTllK0Fe+623vC9jHsK9GQVZOeCEu/3/klVXk58p+eYb6CQqFOAmjt5dcXNqjPxFe9l1M3KnFzPzsU5daN9FW3ijkRQ6P3NJln0jg4jSAeX2tjZnOnJTBkj/c2QzlsvhijudP78bzHSmfjgBUPz0DGU4J68rmThfvrmZiudWEXOxIxUTyAXZVY7WYuv6UkyG1Hy4X7aSchMXUNKZGRxpA5zc9R0b1rk5hG7N8Odwo0kob/Tho7hkEO5ANn+A7kpEZpssT988f72L50CQx648IFzzTv8Si+l0KyIBPEbl2n3/T3HpB9Nlqi/qjmstourhbnFz3tVtDGzpGP6KY5/kwg6Csj0vrZubPrzGixcnFy/qZ33xYlWtrVGXDnG8apbclkSHenW9kpWP91cEg88N+oUL6qPg1DXMleDen1AsnOmxWGy7Ccq2deC2vf3OCBn+5aiToMN8sSM7n+scepQWtUERk3HB3fz2t/oFh9ZNK3QCidq6yZLUAdgMWlu2RjMa7iqW8MqddVP4dQrEbnqqt+fH9rrb8+3qEyRq2zY6d8Z8txVb8UiFJ+NL8P9ifXNRTDDbrambPdmKmPRIHaSqnuRHGaKtD5vNxRowTC5d4jDdy9b4DLccErbhg5fffVe/XITQYuGL1X9/k8ncVNgD8A+O2sChmwymr4uu+d85+d9E5/YJGD1Cw+WixkspxJR0Av614NuH9+/e/fBDWnlpTHreshJ7HgDXaHOdiOc24mL0jFBTh+Hrff/99+lldu/t7t67d085d20DkmBkpll7QJ4PVJ0C2zCiKi3Oh8Vi17DLdnGnOJrLQSWha4oNxZtOuu6NphlRovO1GH3jtQwfflFLtuwqWR2wz4CVl6rtGfE/srjFLl3N8n/xrPy2yxnb9wdpUJ5uLakynhtw53SU59rsBuLeCDqJYqq6M0UBXl4kEtx7ogoObk722udG3frOv6aFe/NigO25mOaC6YenT3ndr7x/eE3L5FpCtF/FQjvqtsXG6yvsBLDqXMEBWIysyV7Y/uyz/d52VknY9hMlGMrhjbsW+SAAvM52WvRfxQdAp10/RfL0eftwGdwuFx91lX1tQvM0k6ut+Qe6vr5e2OsK6mT72QwfoDG0x0og8zp3CFwN9+qfanGNsUFUkqZtuPcob3722S4qFWEE14KZ/RLtut9bQW1XrdJly/Umex/jMVKR3LaRif1726VuTKa+7Yaw5kRSMGjUcS/tp3YoePOaL6keBUAIr84nM0Es+kJCWNU2cLfhu3/P/EVK80dHJJRgYZjQfC3unJ9Ffq8kyNKVLqeTqYQ2Pe/q3A9+kLzs+r7j702j9wtXtZgvFOP3ypwqE7kOd94YbzzF+CTq1U0ot3wPBIfnakTr8JB118SkTXk1h3CO+HhtiZ/OEyONT1OAiKwEUXtg3u1FnvhMeH09LHDCfZ/RoZIRQjuu8ziFwUa+z6J/pQsXLuDf0HgF10HVKuy1kdbROPXnxLcPb4txXUQqeJRh0ham6enJs7kbHD6v8WSWjrtyc1TpQ1zuW23RG267cNosRmvqPmjrAC4XkVw8d6kkQffy0Ue6uwncA/TQddvbEVy9ZNhVQ3Hw0ouIb7cW3nbYrVOncr5mOpA28BlOqWLL1+v8HXvDJ8iLT30KbEMfgK+I1ZBAtrF0RaH6+nrToFDrzRAbTU167AhYjUwXC6RKm3r7ApxpmUclkY4rLgbk27XSZ17NwdGIqKtNIWYOVx2kk2pvIrTfdlLWJltjBEFRIVx3Wupy44xsDKKLjDE2zWZhJc50C7Tcvt3tQiKmKIV2d39qAzJzF1tt6U0zDf2iip3EZXCyxp0n1/GbUTmejOtr/wUYXDOyCJdDwUpzsCPE3HQzwVRZJooKxe2u0G0mIKqYvVd+M/TXGvxoVN2Vsw2h4m/T2J8uKz12DIZHIljqfIi5K049Hh4qve3ZLN1l7DY/08GdVXB3BuHOHjt6UU5Fm17KoPFVDxd2AsOL0+kapGzg2IMQTgm6966O2jQjSinmAvHpCpncCvosoujSLHxOXXQTiWlDjk+WGXFcLBLxuynHWsUaveJBV3eDbQ7nrrOyFUxm6KI/KwjARrJIIAg0Zh86LRFX75hsriz198Q6PErNwWYLzVB9wfTRsfUYc8vTlTcVutOsTSvcOvXhOw6hRPfWWwY8pcqryWGnnhJP3XVI5/r4uA4TsiEfd3ApXq/r06jJFbstYXQ/aM4V+uz3fha53sK934dC3GS4r2t5Z762hrSdIJ4DZLvBIKe6MRp6N26sgZp5Flm6RMz8CqpnHtRdFrPtsMkGZ/MDJIUVOajF9XUvK/0PAX40woM9ydhbD97oLtvql72rnpesm9Za9eKLFemvDfItKzP7MdVu29gYzPPjx3w42txozSmVKSd4+1wlVT1E8XtatPnXFt534Y9DGJV2vrjD/pDF8z8XJWYAlNcH138K1BKl4jJvB4wcMnAdw62tjQrnbcHtB/NRKh1u2OtWOimPs1FcyW8Al/3Ro+k+KcA5yIRhEcz22mLia3BVzcDvEOXVGiNfGrnlS/BzmTUoqs2ybss9YJlZm6ylrfqaZHAvKo9ujor5wP37QEWhmBtpu0Qq3YjQt4ZEezn7HmTq2k6b2N+MqBeIGYtQSlfarHkwDiFL7+Gw9Gnbj+uDUHVHDx6U6lwgG3xoiVvT04shm0ix+KmWFQM5dji6wqb5XAgD1ta64BwIPXQqQEWhvoHL5aq58tTbpvaKC688DXfITt1MV58fnrueZAEtGu0S+FQ1wt9nqrS0M6NL8pygLleYWYHg1N+iSTR+ujiIvazrgchNmHCoIcU8GEFGecTrhQvKYZujwcP2CGZKCVzjn4mJuYZEIozza6/JlfZ4Bl5FvT4q0+AmvKqFtoVzayK1RIxGcpx4fZ0hZUP1FC3CoGI7sjtjuUmU6iK6taaFpewqnLutKWD1bNzc1vs08M1iYfyg2ntctnI31vZOz1E8Waus9LO1zdNZulf6DJM2DW+mu9i8yT1bRbaJ60ccIyuWDRIyKP6118wtpWOKgjg/PUaJPa7FureF6ux5SJw35ySldVsUKbzpJYBWdUGjHdWiFQJFwKicff/s3XfftQmYj8xRe/XHP9b190e63Q5f8ZkRFL059dXRLnpVLZd7eyEO3tqG0CmYEvrf/V0HtfQzJ+eKBa/cp6NOhemnk5q7lLbJzF6Ri9YHquz5dKtWgztNizffXKVOAwmG/R3nvgZnIa77NjTfxopE8gQTwzO1jZIqH7yRQO5c6jHPWEdXgsr4wvtXO9lATsjU4Omu7Uj1HJSn6ZpmdNx4zA3fGCXmwGmyGwucmZeEEPos4IcHxnjPdNV8nV0aXEYQG+i8Ek2QtP7cqnbfGD48ymP9z//MDT/huBaV7vz5xmhBjtm8qcJj1R63IR7d1iLF8PAdzLmJFw5USH8hEubRW+wWd6jePpmwF/q/q+Zeq6drbtYxGptLn9P4qdOVZIFAkBOOgZwicx8p3FhoPI79QA+4Vb2o8lPoEaFxOZ1yUOmbEa76R4M4Pz5o2zwoA5CYa4JBJ8PbBrkFNt3fxRpwMYfoZo5V+dEDIuyzf/u3Z6R3XUFqoNhEgdyZSvDmhirw4l1JRvL9hlWBddRf9d1W2nIdPuZ6OMa+qC8D1Psu9Fh2SclwxqIwX2FzhTbUSCMFWFunY0gKG69/8sknNPrvoVaLQLsYRxOrw5UxDWQa6nrOCaOaHAQ6A5GjKpY9ugEzJF23Lq/GHXsEKzPxhRms5fALmyYJnxjStt3dHg017BLWKNYs9zqEPH10ul5VR0cVNiH188jTovI/kfq/h2SC36EEy6lcvYkEcgasXI+ae3PX28DkLpQ3WQKVY+AVdHmHjy4WYZVAqx2hG2tVPZcGGnqSg+t/UWrvtcajjZingI11m3XIYMzTpxLuyaC8VzDv2mfLFbn0ZoWUccdOXYNghawcnQATVq2T2sz18aJcu4v0fWSmy6ysxm+hkiScKwjSkIKr3kFhfQcGYyhq14VxgaPp1g45/ZDU46y+YpGduKdHmLdeeauU19ZBovZulI0C5Yi/RSm+ihOuitW38hDOhY/+Bl+NCvQCnQ2wxZj53LZS6PjacBA8DXzNamUE7AoFB12EsbY5uN5iiIe/8YgByPTM4ih940TNTXHapmg1pvaeabkIbfaww1bZhgcZXgvWsvg00HvwGTMrJKhH9r03Edv29uFhCHccMjcNgraQ2WLpNWwi8QXG29sWrLroCXtPjknpkq6Ts4lWPzF6gHt3EfHU0Yq5e33rFgfKTtnMG7nVBBeP2ATNMBvjNaAFPXk8Ecdv6dkHVHP52c8ixRircv12upQeIiZUjQYiMhksI30jA7xD321sSHcOuyKNHm9pHSqioYsXx/I1Jjz7BsPMvf7669E2SFDFzfXudX/VJmvTxMxDdychrkzX20VPtWN+jURwVc4YIJMeu+aqTnV0xIt2VfWhkQRG8lyWS30wPLB1VntHtxf4hvDNJrSx5JK7+kvvXLJXuGed6OjYelAdi82mkrLfZu4rfMqWk7m379X5F+NGy3EcDitvgBxfmiGXE0gJ4JG+8EJZwC63WhgTe+7ZX7o0u3Tp0kiUjm//kHKseXNRMkaJK3FK7b0FQhXh3LCHTsEna5r7n5zoqlAvW4P4hOrp+Ug9POpZCkSRL77z8QWXAEWAk9yqZwfWpVmWXPJuh1lbVIKL3fObN2+mxo7jFASDFiPVVWvdV77slFhykKdJ+f8yo4pcNhpsnydB9rWekIoDpVSdRuVOMIyUEN7j2OVtmGg3J4qfCT7+thacpQEsjo0lv2+kwuGWD7N8c0yV44T0Dk05LWP4GhYGmmiOfACX/2oMkqSlGGrTM1iJT4z8/ldUqBonik3oIvTRp42sc0s5RE7ENAjosRi85Ouvj+iybBSOJSdu/r17QFoNm9+GdD2EP0dwZx8w4bmWj+dN/RzNKdsAjRwd+0WEwaLYtJw5dKPe/yKJ1yewHnWVknsIlZIqKFE26P+jSQwwcSDcjRuu2TJFrReWrQe+RLTvy+VdYdS0SqrEo6FJWS6o09fLPRf1F+IpOXjOHsKvvjLfJtj/PB74bnn8rdqHlE0CUKzVUnbmQ/mpL8wPysGqfMnf86Rj53lbuqpeLo7a16KeLRmoAdI4ORrhx2vdJh08Zh0P6ollPxa+j8JgLL3aj9F3OWJu4ek4kdaBRzgDCyDQO5nanK7KpqdNQ3curczN9/Zikxj4jNy6hfv5BDQzd/Nq3a7pr6tbeiRgXDOlU+zYR6Alx/Xj9VU/j9ycKf2FF1BFLgjfzCdKQZFdd8NLE2imC/UuWlwouM4YuHmGP1KKmYpIHw6uBVLFYE2V+3gl9OMqALifPWk/t4KMCHnHKduMxW3rceYZX7dRO5gHezooe1oi8xDgTopwTVFqxniGuASTioc6uIM5WvX2fRBScB2Zo68s8rW3sxVmYVRR5o1T+DGlmVTDhVx78jFzXRUb/FqJujHcRYRQ+J8Dak00zms/61AClAuDufl8T4Azp6usFSRbz+UUIOMwNXifTxDi9Vwu+qxQ6ShYb6QUziorOsmAVO3rstevD2r3s4kNmH/OMVE2MRtJ4TJVQIebWOJWao9Q7rVcbidxm7Hj5zT4UgVAH5hfWWWYRVK6Xtjgq+2uOIMxjjOs16B5TvnmXO0V12ckZiKgfNsMYKnsBzCKmSpCSgAASjPpZubeBikrvp//fV3dnauw8xZgPiy8b/mVQTir4syvfvUrKSsbkbzx61I+y4a78DxHh6vMrjYwQEVtfx7iPisO5reQI9F23E6mPnp08yaaeCmkmFjSPV2VSBwma1/vcfNY+geqmxZXuEZnhpZSDyicUxjX8Ws7cQpI0QZGs6oHD9Re3qAUl+QwQE2aS5eGUFCw0htnKc15K/kx8uWpsB0S8sJADJXY4gGgcgHGhyxZxV4WgOaqfEg/yOL1sHnuZ9qowj69Xgn3bJroM4aikAfN9MWfzy1n5Hy+0ih8Lrh/fWFWQu8uFhrlG2Kj3IQa/nhtKq99jDdob2/PpW69AVJ1wvBbbb42039Xv+hjI2L96mNd6tBF9FVceM66b022+DHIRXacHywTvTcN6J29vlcHUde+VJ0eQCMdKrKxy0416Wbb0t10fdl7Vjnp/oACRbSPjOfewoduNlNGYQsxJ0ynvux2Tll6QUWOTrRtivyxQtzOKu/hwvOtWmitVWZmxnx7Hs1Pw+n01PGAFpuuyDo2Ctd7O3LPFQYPdEfdLoJxd9aF+ay0vvRB/xGrvNl/FPH+jiDIlNZtzHbjBsrWGjeDYScxTs8EgZVLM4mUzYbkRVZ+Ok564IQQZGytXda5ppe4rYmgTdPNtda5d8X0MXY2RY2nOBYS/dfREQfOxus5RcOKxJjTO4OiuuEtAnhfNY5bW9sJlB69MU22Km9gE8ycN6+/jqMx870SDViotI3vpIpOvfo0RxqG58h1pnW0YpZme+KepEZzwzNqaIFCagRTvhkzVm22r78mO5nyDGJ+zIECWhuyPz0CdbUfYP92Jlp2Hs0ZXrCgSKdcunpJig5uitcvpUZjE5+7HKzWpjTDmlOQBN44a6pSpDLaAoCpt73zojOhDbM8kSrrN7jpWtRPVKU5N9i0wmyLphxA0wGTkghOB/fDY8fA6IUL5XRstjVeanUmCNlrdeHCiDj9gsQbG+xuAuTMfSR+QsU4YmXlq2IEZNUV8hdEh08bTXvmSjFWdIHLRsaNj5AbtRpW1dpFUHsSSuc2pjfFZdhSUKS/27U18BlLboN4BcecXS712nW5nx8u+ve/P2dbJJ5HnE5b7ByxFkfEDA7wdXXajI5RvC6c1uEkCKo+GQl5p0HYZB02sA3BerJGkwLMuKh9tlHXfuLIDzvNUlhG8iGR81n5l5EkCWGFqzbzpyhGsyPJZ0E5W9PMhoo9S7vsbpEZ92PV6rYMmfu0o5PUw1/qWyL4zApzDtRbT6YrTTYo40Qu9GIBoXnBFg6iY7+7WYrWRgdzDZlzAf6Zf/fvahxSO/yaL6lVo3UN3y7ghVOI1gjZ/n//76D0rCzsxddvP11FIgkboRQLQLFTCQtpZs8O8niZct/sL7zk08f4eV7e2h4uz6CitwCHGuRRltK7Eqea8AAqG3dSnbAVBDols6vRlE2e9+xOfBgX5RLCtELeMAgPqDiQk+y7n3Cwf5Vk6U3kRMhM/rQvf/lyQ/9FeETcRNvcJenUp7rsSg0Q25hck9rSUTO3mgvifWce1CV/UkDjmtizJl9s79OFz//SSSxd+yYw/aB0rreJx5jdMoOKdJOPMbuS3GISNtTzl70eEasLjEMxFA3KcrX+DZo5YH6CVlpYnU9A4Qoo+vPUMa74MuNvJWS12ZZOoPXOL+5JcoHXtWlte+vOEvXZeEIJHYgJM8ruqKLRdPm7lPN6UwmbadE1XKUi88W0KdlSRdmpcCBWKsfuR5S+5kleFSY+OuMSjdxNGSaOlzJ+qSCPG3s6EkmbJYm0BAXlUuHZZKzw2OWmwZNjcE5vZosFb3YXkvSJxdQWBwpw8CjOD3ieIw2XHBPsJos2EPR4eAuNMjZx4NzwpfFG7Apifw84Ju+wrR203GbDtAcPTpIzJ5gfgnjq+SpCu53wjHBXbYrf0Up219z+PeKG/06VCn7/+9/7Gqotqw0PagKuexphFVmTJkYRRoo1VxeBerPXutm5cDUlFPgYW6ysFI9ryYPSVAOH77c37nqP1OR8Dz0owh4fZ6lB5mWunA6R6p8N3jDm0Rd6unb4ogN845/JEtDTmBL9YkuO3gsEXXL3VBsDde/lu3wgbEndwmi6ZOpmyEjPcPGpl4R9K2r3ir7ZyEnrXtsnrrmWZoQQ2VqDHbrS3i2DWoaCaU+LcVNdeVtAOVMp+mDaOUI8/TG3OQPqroU0wBuJPL24CqcqMxwKiQrFW89ZLhgMpLEi0S/xpGK2bZobJ4vygZyBujdFyt+wME0X3rSyDw6M6vUj7V3JTr/X91tb3YgBZdVt+VMr2HcnlT7DCZynqqiCEWPDBCzaqGCaPcfyPDKUkxWvdzboIEzPobHNqWloS2RtDtm7off5FAm66RiUXFKSW8yW4tb3f4qJoHREvzabAcR5YvTpJ1nXstNsNU2GaX5sTMBWcuaBC1rtmy6oZ8hHCPmMvusOFuOxcDXl74Q153Z5TrAfp1RGxNM5tS+YDQAYjZ8f+KdyETU4IS2z5BZtPOkQZfDPRG3JWp2YJyb5COqYORiSc9MRwA3QqjoOmlilG2rdetuHqxn7b74hxTLTP8shKFCRznU49HvFMfwc99EdzHG11up0JUl7a8tpllJ4bhFj2Gc74gt1Pv+8JrQPhylK3sxuVEbVLQbw/MfY8P1A+W6DjMNt1fj1hzxuYW5WYl06kZlIMDKR2UdQVOZ2swHapole2d4V5SJZW+FROI/EfTDuFrv8gR2pkTJxo7O2UO25pO3p065wzc5gqx8/fsy1avWvKzEWlkCgVS7Wn07dKSJ99nB0cX1KB0+R0mfjYBPOlfu3cUclX1m7pabJzS0t27OLslP4AAAgAElEQVQ4/mDUtWpOOORqhJzTkPAG7ZKHI/Wv4r9slk5XYMYqcgURnu5e63wzD5XSYAY1yoapHseb971AVmmohhp0i9yFXtv4i/7kSeUBDitmX+FVfvbs2ZOCDWn0NETW6GjFpe05kymG1wyX/auvshVZCM+JBhcTmf5zGs6pss0NZWtyESk7Ks4Q8rLVCrH1FtA/A0MNa8Tx232GZTlnlrD3NZzJXgA9o7JH0+z4+WWscwjuptPl8htdU0rc9Bfw/L/T7qSA3D27ge2qTB/IhxllMFOY3YVx/HQ6Tafp4SfiQ0XkFh+WxnTzefGevIjSSWMGwAg18uNe+cYC9E7/5g1/BODr/iEjtdwhnfDtLCZrLyikOBfuJ5waT0SSitUC5Q9va/R0eR6e1/8ZLqa3zOqvhw+fPaPk+7SAw4vzIn97IKY+nCvOzHLZvJCZY4MykxckT2J1mIwXPtjC4Vwkmm+aDVS361Z2+eVwOUQzBe2wsMQWD76NjjhkAqdpp/N4oH/601B+K7ra3/++V/2WhndPQ70b8OHjx87qc8js11+TKQgqMP3P9DKxplSRtCqJLS63bkEvUB4pIp0AfKaGWeUIfIp8g3pEOtfGHoQqvB2WX/t3aWR2HF5uc/cjqBrWGPGMMXqOQevz1i1bc/MQpOFEwBHQZRyk5Bs31DHohq8raLdGfPRkxelkOs4iFxK14U6W3yL5XdNcKhY4GXzZdhuvrj18eHx8LDrs0wL3HFrtIJz373wTrcVqVmLnq2+4aqucpPV0yZSC1AGyLsEZ3AG1yPXr1xuTb9tADmPiDnCwZxqca64448vyi0CFaqitG1mSqzejpfnhAfwZFfVjy7M3BdJ6SpPnL89BzliRD3O2RaWH1evUnBND05lCrAWnqSLdtIsyk8RG0Ccj51lQH2swuwQ/cY5tVe2+LgO6daXZ1T85zzbp2bO1sGwCHZSGm8jFdDoNhl0wI00D/xY+aWuubrgR7IsEY9fIGXCZ5lF5olAPqrqoggGMe+29rwZ+CeekG9PW7Awa6irFMDY+bk9iZa56hipjvIsxU8gQzPAlGyJlY4iH299mGmF1PQTXq5uDh8nPeqUjFMV0yvRsZt205VceH4rIUX8aKc7F7tSEAl/D8F7zB4fm/LzbLSKIeYWijXcA1bENu+IJ+dh2y8p3XRwbR/xxnax8IbYfgj+xVif2VXH8ZN7S2lQ7XNB+VVeM2wrTd/XvSOgupWjY3i9syn45iLLod5dgVcafvcJl1MF5spIbFm7nyqfCMcH9s5LD3ypx5+xgSu/548ePlZeHoge991M4AtHcXUDRRPkFJmNG2XA5xVXg9B8dsspSrS2rIen0HBz4wJKt242X6Jx1v1qPMcotQ7rqEDxal/Nxu8esxbx5ZNBMVVGn5HZPgVkxlQ6x0k3fb/lKPbcoO2OVvgjhDMahZ3mFULFOpITGrdYmjqoYHsng1Xb9Ht0pTtKrrXiUB7X8/b9RUtQZH9VAxbW2UsizwPO1Q0gpJKC7jIqXSnbGIvw9E94vd/OKtvYu2fLpOon8MtoWWMXce7icGiWoIVSBDZpyN3pfwb//TUpGZmanIYlIfpcaJQuIunQixsIdHMg9NwOZbHjg1xgwOkvTo4C3SaIOI48KxQcTTcUIcPsCq1xYLDWr+8RWTI+n4qbhWCMecLRvsobsCFi6L69lv97cbzzzED8+KZicMpuWjmJq9L1Fg7Oo+1agWDR1gHpwTRC8i2y/k7DkdjnFIMl+fjA0yGjeafPscmDqVYsmN3BM2y9xzmBYtuuUXv/852etrkRXZ41amihm6qYGZdVIKjK6BruIdWEqFNuDWTCizg+C0UyjQ4gT8TN1ChbXCFFhNz2TSBpHTcYVkRRNgGY5dfhG4RDMy3HN2WJPCXmnNon6fk8955EeatHue4qiezTzNGhZLNxAjd6fMq+7x6Oid7kzlwzTRouL64IpGAQTucAm1s3frPcWNNtcYaZdpdiC/1XKFJiQrRXLM9/Ei+87pqzmeuTD+yZUXoShmucUrvjmygWL8Z2R6eNcoJPE6vSL+AvNyrO3kTeBqjtK2g8iR6E0tZ7PvdanlnFJ/zC55ZujJIkH5U9XAUM8exYP1IPYoYDpy5TabElVEcV6vDOEdWGg3hNnIAkMbJmDr6w+xUHOrk+u8+Vbco0+2e5PNNxQNNeMqNHNcdlXB7V/+qcYVGm/ZcgxRrxArbWB+dxWglMUZHOg9uPj4hUsLlq314eCY9FUoB50clVbCHGZ19ejHPbtz/QOvy85cTvqp8tE/tOLdlmbzex++EN/A2kRRX0si9/8HhKoxEAMHp+BAXNmX93lHNid+HOdDaTzMbaY/rmC4oS+ZxwwY0cZMflUhz282gKwtLh+Omliy3aLIY5DTPtesSYsngh3+uLFYCA9u4UrrM6fudXWmXMO1Sr4iXZmo6jd9pOVg/YzSdGWvMYkuYoQ2GVnRQjoBL5qgYqyZF0HBUGmWqsvxMx8b12t1c3BgWcCnx4cyJAJsNWl9DMmuAHwXUNa74beAjXgKl/XIWfgcLw8/2sODW+Eci7hniF4WDCFpEgDMfyWJsxDoOZMcYaYeE8eLBHsboxmfx4l4qEfm7TRpaWYVsLT+o0fZzJRXXmGHuKf1b//RL3GLatKGEWf8mobMHBC4L6cNrQFT/DRkPM4UT21VEWuGRK0wbRTmqCZv+BSnT3VaG2C2kxGy/ymTwV6rW99y3EI64U9QSWOnQsoQ7Po7DiOdorEe4M2S1O94sVZqB+uXn+hCc9+ydKltAQ5YS6+H1X2EnJLyeOmXUDgDv8ADo0DWcAZSrTX0gyARBCCSr221GSz+nN4tngCORAB7xbnF1Cf1V9TRhJYRM+s4E84Lo7yxOJP70SwF96xf3eQuN8ugkvB/qhp18XUkht+2XC7XtjQg2WCnq6nOziw12bh1gHQIp3+LmHDtdVmvP15Us41iCtZfXqoW+vLBBBGD6jeYrX4yCVfMtB0SL2IWSXUF+mbrnzKSqMt7h47V3TGOqzs3d3ybSWjqGje/YPH7uXLN/Al9qWZKRACf0zWjiP2XV+uvXWLhHI6HSjJiyal0CXUTfHvmRhji6zTTnROm8D8quZ3nfmpfc+p1ZJNQTryMPjzhw+PMzMOEukIEwygTsf6pPKa8+mqxn7AxamREFEsOKvoAh8KutfQPwCUsaH5dB3jrZN8bsaCfIHAPUDKhLzQkoWeyYV2v34lYVlU0cJ2IUYAePsI7J2FbaNZ4Z6OztjEdWmh41aIuc5eZ0s/FIXQLGyn1bbfKswo9K/+1U4WOaMi9+goY8f+UYkRX4zouHDaAgyENlaNXIO+L59Ud7PoXZSTIIZ3Yabg6fxpYBNCjccLAA4g91u0KygOdk/EccYEIGe+QJvQkIwN5GbrHjZzK5SNXIklpt+i0vsUz+MKJkN9/HJWTNkGI5sy3RTdTykKznOVmSBZj624hthriofPdfK2YLd6+CJTklZ/0NhdKHV/73sX3AzROr6uDi5FOZ7CUXVjz6WQXPLDmSTS0QiHxDEGRWPHKra3kxnpAthGs1B4ctvac5tfwV0cZxii4fo35AMOHNkpmNHVsuprisBgkBcFUQ80ftNnK8ftviPEk7jUKGNdM5O+HkNZDuZdof0drgBlsYzOdGoHI/AeIDqyfDYEzQq191z4fmthI/Ke1F4W1Lzbnvu0YzPsyMW/nBNWzZyg+4YYAvkTjUnRzKpO44MqKiHwFeTevZwFKcLS5BCtpXDXYz70yPt04zdoTS3ECdBHqRkWrGeleTTPuJ2SA2nGYCKPtDgKcFRvDVAzI6TjkxB5mbv5uPgTwIt9wqqiAXRm6ZtlxXuFHx+XYiyefc7st7BShSbqQ1A6NagZZsu36ll8isCNwTVS/JYO52Z4h4u4qlavLc0i3UGxEWRV5yOxMFxT5yo5yNjAMlp9zJ3FM0+phDN0FYjbCKizlZdfXoGAX+9VFnBPwzvm8XlHvph52khfpk3Es4yOk2Thk2bqbjZo0RXo12erXGnJB2wgMiqkH/+b6cbdd5Bwqns9o8t5tao4ZHKG7PsxXZVFoBOnp2dET6h/bkzTfKTODXAGatwG8z5127qmdGvbFuOnqMrmOtGFnkGrdTaZ8VQNhGNeBwd0wwOWO2GorQsu/xCbXkWmKVv8a8OB5Uz3iXbQpccwz5XbjldnEGLLckv6qjiBMyVNj3ZcYICYwkuqB+6sgS7GAheBUG/9Xiiu9kIPyERFVBejfv2WJB0rAoPmtRWmZdQztdQbDgKD2TlSyMj21B1nJu+72ARuNKYdHRgOMjgMZsRTgfx02sX7pgsHj0QdJ9tY1xe9dDMhvdUKeDRZk2HOOztreQpf13TDvAQNOYSN8B3y5f7WImYi1dx+ikCj2dZBaWJO1uFCbJa74/gB5Ll6yTatSEkODvMCF9wXkRD29ddDb84/Fs6tTApS9MFE9wjqhC4wYRGLiT8FXdD7dPQE4nYI3F0Ox7Ldc5aKsYhr4T9YOc9OmlG53wCLVZZz5f7iC+4KZaesW+78XH9rFbZFqvRY20ouu48gl8LdGXhNqbwfZ1vt9wdpmiaxnQ4dfqlMI4202SxsdW07I1GLs1v2KJI95wqMLIJrYlubLB5a/YBFQRhTtnuW1l4m6zLVuvlIjUusW4FtDyj+1XZdcdStrjdQnl62N9Ucb8LKQYkyzcd0nJN6yfd+NchqUXlE0Gb2rusIZNvyTYeLdXyQF3TUuRNb+K1cdCp1arO01S55QP0dKN5w82YKKny8vBvBKudoB/1UrGeZM0OyJm4RNgnYEQECHQwHWt3D+eVYkaagWtdiMy/1lh/X75Q5fEw6youiML7dCLBBFvCtB/RzEwShxBUvtVYL6KRsEtmhc30LHXKW3gUoNx3TjeaY8oduiB4eP56GSAO4+NesCAySJDojFdbR118wtrhahiONpggbqZrhuMDmtrJtScPK6xkJzMB45Ew9vihDjb0bRExSeqK0CyU/0CfIQMIXSXy0ufB2KU9ACYreM5yeqVrcf0W0EXUOYuSWvjECfoBAw1U/mOb5F1fGf4csnRD1TKZ02wOy83xe7WpdF0CrCKJmQ9zvksFUeIfZ8Ip943aQLkJGdOCaAYHJiMvV2IEHMaWjCWe8iWwhfX6XX0SU0m+UDq/09eoaF1urM9ywWKmb8ryWsAXUeVevmvuGTD/k64qkZhopyh7n9iHnu62s7UGGhu2HJV2lIBQQyZl81MCDGnusw4v+3XOSyqzdbByLnFr7MLJoBs6+0UwGIlLWBXDsn+5448N+MWmgJjPx4xN2P8Vq5iEu7Oy4rtnTAk45VqT9J3PMVp0v65PomfmOiIZC7L+dDu4iTRVrEO1b9HM3bvDui7/WExy1Q1dmffrcpeim3/OiHkFdIBAmkAfgqP1DvtZW0LZs1pFlE4hx4sMoKRMv8cDSXasqUUG6G/744Q/5UqtkaMf2363hQE6O3aOIt5JKnBFVJ43HPqYSs729TQKVmkdGmh0d2VQ32U0aUdrcCIHc5enK1ZjVJ0jRAvR4/mYdQ9exafzO4dnRkFFqx32Ba2crumawYK/Uq1sna9yusKatd6YdlS6m3Uq+324w8x5UEd43WwlYGUKJbfBMnYDcLGGsAKI4Vjt6hi96i0gjsh3al0UfDoM1R5urSUMhmsQLF+IwmZTOwzx9besgCPYaYVzFQbPHYaZWMP/r62+9dfmtTkEHKejTx1MNW1DoviR8xZ86KZ9MZhw7pbAfn2AQiUZy4RDblDYVtKbp5gMw9hp4EEtUmUsnZVg15s9GlafxC79IYmeCh6N/0QcPrqIS1iDhdj6c9AGUb/jt/+0gsJhIvAyOl5puswsieHG75sOE+sVX2YiD9DTfAPhD0CuVcsIvvxT6yGi3Kt0uPm73dGoh+kQeTzclCFeK6LrunAM5O1jMuj1DAtDyWocw3IcGO7Xf48OeAS1RPaoKW9e04GKrG1tsMBdDm6S+yxTT8t+48eTJfx3kcye2JLcgHEJe8Vtbf0wvunLtf/In8BGh5HbhQrpG+z33rAX6ETfM1Lgnbze6L1ZT8EKeYZ3B4OorryCOQJuhefK6Be0qLxZ44/ANgy3Z6iBe5ISDVkYBYXxbeaM0btsQplR0lQaHHn8vTivrQ8vreWM2j6YmPoT6TJ0swwbpEN6Wjb6A0Xuea9LGOufEhxPGvcpAgxeRmuXD4wx9r2287ifYUBMZi/O+H36IAg6ouHgJqwLKik75EiZhxfBE3/NBhp/2rW996y9lYtTXiTi1c3c9uQheHttZukq1DgaXWLC+4gInfsjUODnlr9LKsOyppMU6mB7XeUTD+n4ewj8Pf3hi6HWQ/VXEVaRM7XdhuR5phc4bq1Dts6LiW9J/Ix2HcFj+gYsX83zvdmQRplRDxrirEGUyCBvJbTpJ7fvGiro1QWl7A2/DXCMgh2HlwSzgWcVAOZUV/1QUi5TSrd1bCcGY66rLPjDGAthV3RTIH9FuXEfx6+766N23nElTEG6YJjdGSRkCPuDKKYvtEBYCnu8i02VbBG1J8yM9jsyWIzMgOdEedaRX1KDKM0WUNFVA3jmLzxfPMBtR8ILQjnuhBrNWuMgoJgemiy5i5Baku1ZTP36W7BsNoaL4um1TF4avtNGsDGJ7Y4bc/pR1dOfHdNqQxm4OxNnkD3f0GOufp4loG99QFiaVhoOKd64mu6djM7Vs5D7zA4zIz4dN1RC5Z+1tqu0m53iNG5yhcdDrUcHhW1HXmXzMP734aEvZOT2geH6f1lhPIlPVwzYGLr3brWNf1WDvZwUVtoiqKf15vtE6KRhVXandKrqFblQ4b5vqXuMf464aZOk8VFrQAQko5ytS55ZBJ54K0Hx6j3vcIi+SxyBVuvtmLHw/BaU74/bHkhTQL4yQSRRAqUKiRHTF3lUw6Yj6beCGXzJ0WChk3w7dGlXhCFnvl0V9CI+QE1qSU0vaYcQ9S5HaG++TWOAuQSzrYE4fM1/DiRaB2j7ndAfoiQLK+srMd5+vQHNlug7IGbd8V/1RmKpsIMeuJrJuWK8GPJX1xkZ2pt0+JZiiNuNs77xD6G4ay4O8YI0IVIoDimTRzIs04MiRc3zXVqKX41LW5BoLi+Br6G5x9Wv2YT3+HSUBkUrOigd1+KTYIcb1N5Wsh+SB6gA4liq6uKHrisP44KvNqyanINi3RhnjWQqA+UjSvA29Mdh6+WuHyry1H2k77eMnMDGTibqEsSl9FOmhX1piQgS1p6cOpNRs9vzMu30VQPMbs9qcjERj5Bq5opfar5x74shewu6QxcIiht3SIDvsGR6ECxempKdunQrv8kcCcqgWHcgpaqPbvwwLOl0uZZAHO2+H9SptUisxU76//2JUhlde65sOD1+fOWLDhe25uv8CKj0LVEZUvnWz4ar1KrKRjHTXQgpsRDznKJ1w1UcnVZukUyI100i9J1J70GPHcEToKKKYYdrGIdTToKhmCixjxlfy8y4yBPqP/mgTEz4LcHZr23oxoBlXf1Xop8txfuDLwcPk0Rued2lQ1SQAIDwGqng9i6IW208z+yd8F6ewOAVu27eV/W41MutnftewmRGHhp+vzLLmHVJQfcY3eBqaFx7foDqJBGFMMf2HXV0ftPXu6S79td+CIaAbJHHe2PhlGa4j00VW3zj+2V5Tx2CGIJt0uNhSFQqsLVos3n77Wk6y2vyjv2RS6tNheCJaWu0ipdZwlNjzxLJwzO7YVnMHYe3JWZeXjIDFBz8TlmC2gq3iW3H2MWSQ4ezt5PZQ4d++8KxfNeXL0HVLyYs1QF5oo4waZoSKgAaLLbiPcgQhiMJV6ma4b5ShciOYZlo/FUherWQdf4NPrr16ZhadQmgWpAa3YOMGhmbP4aqkTn9a69ps0CMPBkigWrvqDDacQnvIHbpnwX5hF3LsFApg1P8MyyrRe7iGq1hsY6QJciyjbETVO3zMV0WaH2IJwbHtGEJC200lOk8V0OxhphABeIepVgVuxGkXouQaIAsz5Ri2MTf4/Vaw6SvPN2lzbnDvm5G9HUUW7SrmlbEXiqJK2FhYfZVInHumVc98C4Em3JUns4vTBQmoYcJxTIdPmaloHyX+bcinoLDRAEsvCuGVxnH41njj3kGtjE4gvCQ1StWPUaS/7FMh0h9EARKJ6AVtkwKCyKJe6kL66kbd2yUXYddXEktDhkDwNsop7cKg36gJo3JxQ2w6TU9oWpygttV6W/0FXM/CBG/UPJlCdOEEMpPVlpAijo5JJCeuhCozW7MqPM1QfkbEFkB19WGeT1j4SJvQagPt21NHvOX169drDnKM9BGaaSY+5SelQRDJ0Byw3HFB7/xi8aNBtj3XY7v7b5xIDBFmMx4K88LpJmUFLlwgBBOROG6GArkZIBFRPnVGxCua28TjQiEx/yy1iHPqEzKHDbYWfOYJBRVjhy6ELaPMuWM3y4m1Avwxtv37xVibt3d4so+hT7itDqCrvuFKLJ5Bfw7Z+gzl6YCeWBBnPapEzRLWqKRnnFRJjtSjyTNsIousmrLWjvMhtDxiNNp1kVTFRX0+DbmVE5efT6HQ0KBKoorVbNR0RQN/hzek/WkRHoJiFb8dydsm8g4HM+2dit/qwHJubta2IaqgIQiFpiEi7r1V0LHmWUPflE16av66ZJlI4A5Nj+A0LAHFTEudq+Aq172IseUGSxmQ66H5+W7b0rK70IGRt8V7dvcSBpKwOFOcKqIGjDxnenR0lASWv/xyZOcivu6Xkfe84Wuu4ryX71xHDFLXFZSHHQB4pAeTzoVbgx4VqmTebNlMrLpWMqZg+zblAL+kZHLJS3QfcvxZ2TEY+0v8rEDGI+AtF3AKHil8hpjqF+XDEIvdYosF0e1v6DATajva34gl4wpLYyz/blbYLTc/8BwTddJPl5We3a+w8Mc+T8NmumgtBDC45hppvFbyPV0s0DSlKYccXNVEpe4MFqTp1LjblhBr69nWokC0kJjUdKipx2TvFr/U2sEjDL1z5nS+nByCMwdzQZ6utJywZnH+mMKpoQqiyDD9FH/icCR0pWXhFqkbdEfTBI1Wseq/CrWG6/X44qut3eHFwi6b3BFMlt1+jRqDsUowFaizXrw4XUOHad3ZmQJ7/nb2tuPa+1XhhlMGTBa9uRf+FC8ySk4PGR5qOPE+ljHfKALejROO+H1O03xGJpTW3O1s5Fw9u3NsnAwvuauuXJHgZ8NHN89XZrMLEbjVBPtOOWK3tqxjj8Vb3biKw4t+OYjZlMJ/8hNu9PCSX/Czbg8hC+akQuKGP50IuFVSXsQ5OR9fKzUleg7LtVrMnsS/injwKOpfbU1j8dyKwy//9vtuhuKFF4R1Hsh2KYxr9ux+Mk62Q59mbr1vtgak1q0ktl3fiH1cuTF/HvWmwur8YPOtK8LIGV18+3FEVC2+QVH1Jb9PUeSRoZMwF1Q1rhgoOYHF6nQk3Rty9B791PBn1HPHbj50jkc+1b4vJdgLCwpSb4gH6WJZQKFiUfmWMOQJ+BkeGJCZrgOb3JErzvvpTi5evFhVTvkH07BqUyx5xsg6vB3x6GM+/8dBEDNTSRhngHvvZNbwBbqwv4NBsgNzHE6b0IncolBMAaG5Wd5Ryt3wLRvhRa4/msbwxq3hfC2WJpEnLRaXjleoRpVfnrFdms04iKKokqk+Urg/nu9SOEMR34hGnu40zc6oWlITYNUbAvT0n2jy85ldANPM7tSazf5ikEdW6+70aXPPvJ39KyDk1qONa3miKYDfqFH2sq3KdZDbUo5O3eEZu/Pi2M+EuyQX84aVrnVu0DCTHJ+7memtTMi92ZTG5Q5vgSnQbYutQ0Ua9A2VCVKGWyeS5pfeLRN9Isx0qr2D2ECTjoxZc+V7avQ+682oBbh36HFQVEDw+FlnnG5BypGtqqGX7e1HjwrHovWZVVPjAmkYvp9NoHQXj/Cu+gZrseOz4/CazTjbT66Jaw6a0Usj5DJDoV0M5F8bLWurYGkn9uJFUTHkI/mQLeXR94unb1ufprfSfIgchvAtoOSLkNuPJ/NQ3svO0djHY8pEO3QUiJFQRMbCaExXXJMtlZIJl3iTEJ4Hc9YSD1du53jpaq4UNzAnvYjh0DvPWKn/LEgRZpt7exEb1/FzYg4G/xVRDqlIsDIGAjz8dlThLmPHyArN4or26CV1v7/vB1+Y0sM1yWSkYzZL8G8BAaM4/k2VvhEueKjZha0NbfBlu+dhY+O9jbAmmBqWEh1+QxwzNhVdNPPWxk8j7szAfY2otlDFx1MFDhcfceXJ/TQI3xaL73OxWVw0HJVrbiQMp9n87GpUJixu33DTvY3FIS8ShHuUW/fnabEFOFaOIldF/fkwF8mPmEwYWVCFSZCSlM6la03c1Xfd92Vpmtu3yXPoOh/MLRYIJTlc6mBnnvqjFDKtRDTvqMZODdY777zzJdtPW1yHMVP/T/0/thPODrXDGysvuS9oouPwdgDap50F8UEeIzXi5Hj/0tfp8p7usMlWey5F7fV205jYTBUc4wYbanIsgvOlOnjL7meT6IcmetG4LJg9d6UltURGsacQMElNtpN29DcA/gFyNSngoLR5HyOKA/hWQPSPTxGkc34tqbu9RcJtIBp6uVzcYrlOxczCmEbLGiIYm7h55wjILVd/CRdKJ6txIKaPJ2zP2wgRwS1wMaXWWI7Y1pHjjE+UC7BnJFmOsub06ETd82A/ozzOQWdd2IQLZN3gu8eH9hMKkXNDg8WiZkGtIKvuUHGO5EWslRUaVa41d81POv0+LFMtVnty0bGXigyjqKaZur0yqAORV9Jf/qOPCMRdFWJREsIgU1GeqarCCAsgEyG+Hvy4cvt8dcO3jNhBsQmfefzLwoIL+6qHSvjXqI9BjrfRtteutWZajIKcETYXddaw6Tn8A8udO3eAKny4dYpfYLnc3yfhim71aWCUkmkAACAASURBVKssi9MFRz1C1S3hZEQbAJ9Od1hnnNffllEjU6tWjjIihGtlhp/Ertx3NWl3259Vi0ejpM0Jt3buE7ruiOgtf+Cl9jdZQFFIVZoXikx1LoCPmHeITR4NEuPN9bgYzZur380uJEXSNGSP7ne+U0wJrOT877J1D5EAdRcWZcOVLpJl64MxFTar5+miNH7h7+VDOzL1wnj6jX3HvfcKm3Oyv4W24k0gh9eidIF/HrFp+JTlcXB+TnMMfSnOfx0O4SUoTjMlSs3KyclJdCJDy+EhrEXfNwZeX0x4OjdvqrgQUY0yGtYFAz2TuZZQWgCOZcSpVtiRO6X79QgSA9Z3TGqdIKWKbVq+MWn6fAQ0ii7AuXx5uroYbZ8YUtWerDYs0agP1KBTFD8us8GFW0Lo4corTxRc6S9kKE+Uyziel7a7fyDBpY8/+ZPJCYyVtiOs4+itR3ilA0lI9l955b333qOAWPUlmFu73fL394z2XDoYcHqUflKzcFZofD9cbgi2hViEtM6ZsMCm2S6RCP/YuLStnsAdsI0w7a6FQHz80kocz0lTdGw41cS7EeMWL/0n1UzCs647obq2b6j/YNDSaNLuZnJy86a16lAD6uu+NyeSs2pHd0jGstPVL69ZnbhOffZsM8j2qML1C5y4wI1RI2djMxaePxPJ1E91FDgYl3fffdcM6uFdusIpHPK6ayHXWCLULgjXI5dcKNqkKjf637wL7t7SsiXG5bakDTSxexobhTgDPI7dfz/NslxOOGNA3lSzuN6F9HMW93t+a5Ovmnae4iEllV+dlhPjGDrI+vh4nNJXtP+hqp177+Fy+8PaFAx050iKcHlXV+Ct3N0WDkDkCEAXJp2uGWarmXqRzrxzNYZJWyui4MRa7Niye6toDs3tly9Nmcu23vmDzNbyDwbpnXHX8iN13ofLXCVqj6suCRZUzeZVvdL1207NhoCmsigX5pgJ+39Bim5aFHt7fW1u+rNnc0qBT0PykvoclCYk8b01W2I0H2jlvgOqyfko4LkW4D4KhYbsO+oPshileAgzQpPkb3DMZXcF4BnfQx/iycu0p8aDN120tmd60oGd9D3zh0NeNH9ybqIbp+oSf/e7s41g7Q0gPAjpOK0/D19Hr+kgK/RZEm6/iYp57F6JwsCwb+HGUT9TP2ypGCnFqZbmraSIcw+VK817dGQT3nMUrSgnNsFFD+60z6Bpe3zUaix5U+E4yfvwZPKd7bkZhw5+He5+ppLkuHrCyUn0Ui1x8XRKF0uVSAieuihgJIY32Apl/xV2ioU5Kqf00zNqOS7YeLN89p1Szyg4DZ994ZD8q6/G6tyFsA8e2A9RRJdXLQETFq9ZIQUcQ4i0AM5iYcoLIeMNw5u5qy8UBunhPh4nSOlogzvy69a78211/iPxwJ7+K71kcBWhTw4UI6VeR6uLGLCJJHMwJKy8qM/Tkkrn4xphO/b94b8rVzR9YHybAgRzFRllW+c1WNi5RsxAVelikzFfh7U1ZtWE7POGPKvw0hdNubxs/PV+YsDqj9N3RS0/oBiKTKmtvDxnyuuK4sCJ3jziUBJRJvwxy6rcaeIM1oNvSahb995aXYdBNYuZ/S3gg+vxobU+PNHV4oTcdHa1V3HiUn/N4Z/e2TqD8LTrHLJ0WJKn5WQRbH3ZOcvvizKPl19m+xwwpWnZqfnzQdBChPWimg2PSQFphvJ0I7gxHIdEjRFo7PNcxc29G+B1LrI7lS7y0ZmEXoHjY3PdK7tdMWOxdZNyGsDeRUoLiObI9u9iMcn66HJctNwwvExt3tXkOFh4uZp66itsGjXx0El6gJFuatjYQKkZjo+aeDGOOfXliCjdrzokWR6sq5dzNY/OzXaAJc/f2HBEXkXjZItwIxmSrGSl/QA76yDM90124+qnvW0HeaflbJrO05ndPOfQHcrsIDmzOKdL2XytgjdPlJy1ICN+JjcDG/tEYNhxVZ5yzgTHbMyYo1CwIfBfu+eV32+zVEZfGm7etYX3VZqHD30B/SkP5I99CS/aq/Gbfc/YEO6ShdWVdf/ACHpzEE0RuHNGkfhuLEXOwjByydNy2wwhad7JkgT7NQ1NXibiQ0w3Wc4P7A6xjSvM+T47S4ZaD1iVPXQpVsYk58ydo3feiAl01Taidbd0DX7w8m7TN2aynlrKLCBMcg32V155JSxd6vJaqi5r+mh1EsE8Ic9QO8DztO75mZMhHLocNFlD194M1nyRkVgKp3vnKCaoEm2VCJFklijcf/DyTERVGAC1Sd9KKG01gPKK/T2uXPFv0/7k8GUWJ6eem01CfbtQn3BbuxaLMz5tO2PAznU+P5uhNN/EhJvnIdq1gd6PkkonhbmxTJeUKZytmiKcaKKRNyMRcqNdFLxLwb5tLZl6XX2/Z8VG71z6FSTCA2uWp8r7G8Ink6jNHmfFOepvxMq8EUBDEEWjlmp0sZhMpH01KTEUTeNXc7oBu2Yqo2zkEAfX4qCNVjtAQO/35Tj4Bzb4ok9Xke2XKwnN8GfZ5QHmiQ6ZHZq2IEbRV5fi+Da5HCdX52p/DewTSl70BQxVguaTjrveSpCZbblYzll2BcejCwAqVTiNpuzrMTF4XVVaxKFK6LyOEkp3CKoU+pXX5qVWS7YVYV14gRlAP+ksQEjv9freb1qAsgwJ2slFr2R7bif4I2sjaRZXPXqk9b1DbPsBFgjE3B8zhEGIDLi9sPkxCFuK5Tw7PwiTlMEMsTTFBVl15T9SeJh0et5iWupZqmXVSGNnY3VvLSB6IjqwQw6QzqcZgvdgzIwGcxRakQj49BOEvTPLkPRUEyB0lG2F/mg6lGq1bjqED47VCxtegWsUg/pNYEeid9+K/MoKnU8rtuvBDFyrBj3KsvCSJTrwk84wwmQHnbNDmY7PX6VqxKtXbrcxGzOcae3DxZ/NLkuvxq1m7Bwd/MLs+eTsiIeHcmeOzzSQynqxTM4L2Y5Elz91YWZFgpngXyh08SpQR/D5wx/uAqB9x+r94SQcNRTbMCi7S4UgY351koLUo4Rui9emIhiJac3UwoMHS2TWaxO6+HCuAhvX6w5rnTDvbTu+24LdwPdzMk7z/YhRJR3cEZAv1N0sVsY8CxTA0Tvu3a6uyzRCrUbfd3wWKpG5J4hiMkSDusvnDyCP5nlPxflu4sZx8KL/77J288mJfURh3jZmaimHmImKLs17I/lObK5jSFR5IXZUH72ufVsNxzlHRzqIXoJ3D0WfAcScgpB8Y5m4x4sNMMX8Mcz4cRDn/Pqhf9Fg5PpJLyn81JbmfKBOCu40iHcod/uRZ77s/tJbb4ETFIk9+DCX3y8ryHG5fPCBzeZA5cwWlFbkMqa9HmXph8f98st0AC4o1CgaC/Lu9MBXa/GT8ud2qY6u9EoMyl0KYSbdCW1YfTV82TMjEYDE8+CYKWALWp5BwIGr+yx2mF3WZgZ4dxCnAAau8sKcD9zLYfCu8q7GcRcOU9GbIo1mvm3wSmBWrdXYKfDYVS5kkxFhvrVKQ3gteGhMSNyPjxPjqzUHNzMDmZ5jlR5XEIyP7bDj+M08NkBGAjrSrQ4efln5sg+/9GI6HQ1/p0DghbjJDd7KclU6N65fDYDCcXFdElSVmuDBTVfhslf9WdsSix50WJXiUbMKfbjNJWWZso1a6HNu1ASpZ4BM/x4Rq+X+R0wELrOGmPzEeBsFx1JKA6CYXMpjdETpOG47TFxuBJ3AxbrJ8B++3OUjyizUY3m7vxsvvrj/8ssvqwE2bQ/bdmNIZnPXBCAFLbLvSexTwrKb0F2Lq77bJ7m3d+SQBcO1dwqHRJ3Q+1WPHj26zaSglcD58OjIiwHFN3r/B0JYQP99BxfvrOYpqFMVX7uRMig9BkH4ZoW5ZCds845HStEOho6K6zIW8M9LRJi2wgJBnavGqQPh7waliwqN+1yvfh3bYhP3zCG9wyWkq4QBRUvwd12YZa4gk5O0jMrVUL8NVxDiIOf5mIf1KWOfOOlzVGHe5EFpBjJVU3y3l17PLmJzKqidHgE/TLKS/nnNPcRQ3XBBPBCvLdw6MoYiqHrSRe/rFZSeKMEr/phClEXqcdgBRRkwrM2A3QWw4bsMwwcuzI9DeGNK3idScgOqYrEkstKMSzNud4E0CY8RtdIX5F9JGm0yWSz+KSdSxy3ZYHtWbz0PGT+lVlJol/Xe+aWpTgafrj4DaicHdvx+J8jL3LKXnR116VHr7caNTgfzdge7sLJ6b4/2VqAiV0OUytqLyxgwMnLV3RtFexYZ8sBBvV6mMjj0EUoPZhj5aJOOXc3nnc9GmfrSl96MSI0WxgNpQjji6hM8KU3hMDNWubB4aoHmICRY1b//9wUNlso30XcyDZevVkmJzliYadNcyZfb7//xdMGw70x42gERea26zEvb01IfOLIR794ePjaANwF59dVXtTs19KaigZ+/vSlAIc0gxExWeCMudOtgmWijf0XA0JjBZhPSLxZkv+jMMijUpeYLwWmM0nnuk+6s4wS9rBg3Z3MMbd7rxSYeyodXfET0i1/Uxc/GZ2IIhIoumBDb20KTiUbEcXW6RJIsWFdB2WrrO1Xxq0atI9NJt/j2JZwJy9+hfIADjpixplj0JkNpEuSBKH6XWSba1MrwFKUesJ/3X/F2mkwcBz1U3nDCfQgPpBBd+jwH5mx3mQuD9jobX4/x0g+e+pafknWlWZuTkfCtr12XEe/SqdzL5kUnmsWL0bv9IjGEYy03f+VTEw7PWtYpEU7AiuvZSgIQMZB1vcU9jyZhmKK+r6oR8TtUntztSwFAphJ3Ca6xk9LrIrtj0gfiOpz7gErG1+sybP/114lnKDdak13XGVkQhgWX4VsRLJPMcdjIKsXERHHxuoZV+1tOzL+rXQ6nwfav4KwG3N6s+yKJONPEXgXkpgv9TU0GrpUuHBYDmwzaq5WueXYi8pFDfSs45bVrN076kzLJcT57Eea/cunqKjmb0E9X4G0Ahi3Fhpo+6G+mIl7bQd+JXm63jSsYjLDVxoouCk4sdB2BpYGq3MJtq9d5yIPVKnLH4yRWfUeG3/WjvD27zHf0nEuinm2oLs3ZPzpyk5udWwIS2so3BfHBevQQXLliO3MbI18N2wyEqTBiwy/+yqvGZ4VS8Qq59AASu/RuTJuBMUontvyU3TE8kW5aqnhTz/4UNm/pVP3u3bshH1reeCr9leCdiXVHactRrMHMR5ZVsqab6eanclff3w76rcXdVhrAF62IFoZiPES5ChHeLGjBaJpaTtnKJUDHOZRUO+ZWYwiYokJKfGk3LoYbHDV00SGNcYhgdBn2UHFGvsxdUV02MgSDMLOUzQTfXHDr5SlcrGUcqTPadG74UcO/m4zceiKNPByTwYfh1DdSzsX4VPxLz+LK3GOqs1XXGqx6VwWDPb4GYxqpPOBLYfnuaaFmx/w1n+9//rl5PaPdFdzjnR3wMlvWquCpB38SFGkQRoSLUJkjAAnFkTWTZzkZWY2DavSMHHR+I8KhvCZPLXd5dhLnIthL1NmPz6Pb4rCy6GMQPGxvL1ZpunEmGrP7yVrw5YzOPEEb1j5GA09Ccnw8pp8O1Rmho64FWtVffVWytSugGLFJWgwd6khJZrOXXtIfeSmudg16FDkI1DCmKMq2P0ByfGwfkroS+tKbe4/5n7FZ2oTCrDkVhBMahLr3MXd9uNsc6T7zcabN56OYqbDZAv/xthMbYPzd735XaOF/qyUzCVGFTRbSZqE2/uVAtOUv5pjCFDJEjuRsrWSuRXLsXUUjyidPfvQhKoEFLwf5LCi622QmoNIpHHvQd55MPtjuJz+BiP8yftO/sfKrjDinfpwca/S7pCAmd6hSY8T/MpTymlwc1L5CturvKY7i5nMXuQm12OHR6zCYlX+2V0YEAtIZ0VOY/CG82qx8byCL0E2B6ByNKVvfTuK9Sv83+Yc4eCKY/Cb5m/rj4cOHuQEHvloe0veVhp0o6QQljhl8a3MWsSV1JPfv3+cpYy4aUNELvFAD7ZdPr0B/7Npog8nfOjiYiskajnzQY3d6H45k5RweAYEieop+bHFmMKQpj5481PolXosICgT2oyiqBSdMOEnBuxO3mwW8oLpecOog3i8G8BVgdjRcMYNNz0WkOLEPdKpnVztUju+DW69/ATOCUHHfbv4Wu+u2VhlsdlilnY6se4xnawT371YiVW+keLOOzDBofeZv+BGeaBK8enBm6hrDzgffYuZ06LSO6MEtmkpnnzUjqMCYxxAVv1iE3Rp304wZJ8QD6VswSVJzcVh0jmrufOFRMJz94osKQK2Dg+PY/jQEdD4MKaNEPgY5jkNlQX33g5/Vew9qiXadMfgwXqspgcpthVVXylrirTuGQve4yMo+EsPInRZJDlMxV1MQZoERayPOcQonWjvDoJHLcbUyKPGI0nUq8c7RUcGTqj3fd3jFHUkTJ4Z3uLPNTb8RvY1ZutyyF0pDskCIKQang3OysWFnj6iqMVNaaNa6M5Rhs9vXos5MFdibl19e9fKT0dSaI//wGbd0HJZDDAEDyTCvjwg0Nsp6Zdp2rcSDgiS9m0MqzM7sG3ZxSSjyHHOIn3GBHMzr1c79JCx8DPcuhvDkqqMb7wszPkEXb/VlaXcZhY/F6ZRZIfbBgzJcoEe+2yK8D3nwelUHzaOCj1KMIB78QqyGa6d2402YRXpmHd5Q4+pbD9BDQ169RkPohyiqk5X+H7Miuvu2kFV1xHhfUdImFmPIFFdFKD/tLBMmFDO4Yf+YdEHO3fHYETqKeg61M3nkAk3elVtMic8mrJJ494cy7qa3ro085nGrOSwAnfr/3NNsY1KIoTiRmCra1g40evJfysIyaq3udKpNBPmInf6gSleQoIobdGiioZJUaSSnPQDMilBqhxpDqG21Q8/D4DtE2EBK1X/ZNZLsdIceZS1usukdBOwRdLjRZH0fOammJDvrJz2fWizagvL1118HHr22juqVV7DaDIX2S/iyB43XP3Yd9Y2Q88E3JdWnVFAJrlUnZAYe8UFEIkrXrfUckgzTepz4dx44vwLX/a6Sawgpn7nXETE2HF/5vjdlLYBU6GgeR/2xqJoKhUIbJoqT0YInBP3bbvWG4IyD6vSZwTO+q1BLYaoz1CcnkfNwhgFAKm7RTq0vu/kPUYFJbXYpqtFDbZ4yeErKb+rt8L4vl5bVS6GcewhZ+j452XNUT/4LFqBP5SlaShzvmCsqvjRqwCf12UePQux7knjBD/JZxx62m3hnouK7jFxtVbr9jMgHL+M0O1dwcY4sQ48vBhjkHUEoRsokcbjZjgP4HpEs1KZNR1hiac4xvgwrpeuDa1fVx02RPTE7yxKTdlfi3ExF6v71YTaCnlbQiqcfjmL5Pxoz6HsC0rbwfh69u7HM4O7fwggiwhK8gOEnpe2PcUjX+Mola/CW99NFxPvoWuws8MJSL5UyrdptHwoPXYyvkr0vYlCDetnZ7fbRkcvtXNNdTtlauzK0fY3IcDLI+2mqksa3yjVOMkoR62fVde0W41O18o37wtX4GqrHhw9GRO8AqpBGwc0Mgg7DkAB7y8tmWdFwCgKSZAR+RrssLqv9nN8NiJOth1usJGyvhTX3Jrcz295UeY9gC+uARxtVYnvExVkHW7V076acHRPk8SCu/uZftGkFxaJ4qetFyBElwzY5HeO/EzNudC8oTc7aNs0X2LaYKZsgQzBk+YrhgjibVFCj1Ie1JtiTfI2Hd6bx7j6r9itXrjhSVy3d+vr6D0kdKhLKibT/GdohZN35b02aDycJ3PuKwNj2r/eDXUwsZFHMQS8Fb3KJVpG23h1keIJYccFoZgAFFmqmctFWvYhKABJ6cMIyOuHMh9x2bco+fp3BYiGpeHHjxsKT/6dqsf4AhMbOnINjXZiafCM3xrnL/n9gviGyEEC3WFxGPYZ0S2llb2+4dHSXzhB4VyFI4TO/wt43Poj3GsL7jK038GH4OWyQXYJTmsgQFfiwfRj+Noszr5k/Y9sUbZe9icy5KdnPi3HmPvW5OmO1Eud9GAUubhfVk+SEcrFwDLgZW/NdxhajqN57b2fnI78jy4dNNaXg7/sALaZfCjmNVVXAoae++wObtx3H+upHdv4DinRm526WzWLs3qlCRpK+T5fkHLSUaVzifO9ZSjLpyrSaid2RwX7JijnCqsMCFamFhQ0PahNcqDBw2kEoYBF228mKE6TwPhBQGW6YmdekeGtvd3TdbpDAVdZUOjN0RXtxtURFx+ven5OKbGzpl7jxY1pUivUk8vPTU7Ma8VDY8NBJgZwMfNZvlF709ruCuPVymcEL7kONbn70ox/ZfTSDXHNj4zozWpJ6DG+o6IbY2ORMC55i98V879fRDQpJajpI29r22jUBN9/3uAklL/VCKHiCmXBMsaGPHIUDtUUrvLhHytXwrpRoC6ZhNAPqd39SVZ9yQVwJjBuHJcCD53XtafU02x33ZuoQFeq3iuj8CBX0wLzThgsPCocv43zmrrLUtozIWs2ruAGQGAiQoV9THZeOUMu5sS4g1zEH0pVlzUWodNluIhKwyRYdoFPBV862Ef3h8J0L6txVdxzfR+Cvh21xhxhFa77lfNwBHUek8mjazRKGWmV7P1DXvzCij6k9rwHrvr3tu9icdwCOCSO4ysS+tnN2VUC9ywb/qjHvjQPQOKmzeefk+BwEdHtyQhrZvpufQTvQ4OwjaecYvmYq/K71vgJHrDJ8TuWse2GRTtcnzU1VX7YMAh2ev8FyANt2R86/tgfCJgHBdAuuyLTBL29+rjT0KNFJLvQdtiuj4LSgogBfDQMSVI849b96JRoN+/Xh4e9+dx4VGqGdR3ArOD2qSNCltXf//v1wySp2i3DMP//8c8aTiDQYGT/OYGK1PMiyNB26SSh4qq/VQtdAiNigj4JNfmzOdRbdzyhwsuQ9Wh1OuAjB+FdlzGI20pMfo2O9gKdzGCtwm2f4ReMbLeSioBlHtXu4dESxikOgf/GLN136ikO+4w9YfIlsQrSvCoY9tR2YxHMVBo7Gmgt8P9wiM7XsWolffPEFOcvV6kwUUcc/RA98RCxRBKuRpukQfb/b6FJWpjhhjEQblaMkTk7qnalzccRpBj/55BOhqeMOCqp73tRitWSmNrBIxZrjut5KAsiQOzg6svfZ1eQ9pghIZaef8gKN3VnzQPPpCQXOSQGJXLoss8S2zsMy+2wzP1XMDKm3ddBugOgaqbJckkIcPmmV/Z3kvO1IuLkmS/9qwTbziQY+LM24OJ3fT/3Zjz76CO8CMi2jVIXmwCEN2CBTDHvAOWCqHI/gWQO5e/dGpMQxN2ti9GvXSGkjEPydbn6IZLBwPsf2I7t0VZMMnpXM0Z5wO1CPHu9cPyTdtQAeRz/QvPqqD2xsQc1PtspkNErw9ihYfmMiuiaYasNhFYpEWXlh8g+BpLX8u9/xLh4JgU/YpqgIYoFU34Q4fYiP8AffRdLjtC2OS5a2HSS+1rWOYM8CtveHY4uwrXf0rSOu2SFTFGUMRJCz29kmbftNeTvSddGSK9IoHrn+N1oM4HHUPY/jGcDQu4lZxn3j1oTVV5zAQzETjW17jThHc3zR/osqWmW38RtZbAFZmwyEcA5uPzyfb/oNWKR9sfQ+3ZzWSBiHiCwGA+GHX8VxRljkKM+o43VvAEaoc1W5ym8WNtv4bHHGdczGASS9AeH1qjCUq8UPWdHxzpUrxidekZtUzTmLh7x+jOVBIHq48QzdFhpqmmhFmxDSiY7Bg9QVxzB4ZdVffJEFD8FIp+i/3OOerLYyW99z69lkYKEnK4zNWRgzqH8L0HNfxUEnT1T4hs8BsGSScUJfJl8aWxOwoWOeOf2nvNcJHpJE5OMDBTtmvR8jqrl2za77WVj8B7wa89BCaiXbm1wUN1zC+gwpllQSMe7qgVx+iQhAFKPprQraaha9xSI5/a2iqdoQXaFiWUzchZVKsDESeJaI1vg2ZbiJSBgHwFf12K9fvw6j3bGZPWPAEVRMBf6zGFLhH/+RuXVaFmUmdtKvipdatd9x//59p0d2K67ZAN7Fc07j29vu5QyhXL+PV1uZ8RTa8HQxht9jFk0g6b6nGmfj2In3ynAhrg+CeQcgJDupOAC9fr1jI7Hmj43oZKt1+wQkiCb4cQZHdicCKNqEMIiKBB5Llkfu90pQ8A49lkO6gh6l6p4qgEAJB4Oo8x2jbtV9zHPyQa2jh8FCMO2Rcm9S3myOjjAYwx38cFsjY9lERINuCbv+2tl2cD63xRnW4acjMWhmG1gkeutG5Xyc6SrL19W7j2RhsZRd9FFPnq4kAv6qK4FdJ1CisagITYnBrJj5qftng6+LtiH8tw5CJ37+Naxw2/iFbahZ7JPVg0wYDZvY3N629GBIL63OIrz26I7GyAPTpp0TfhBjXxEalNq7AuKht8k0EErRjZ28wp/PPj5l5LKPuO4VR7VTf4cNvO6t1GRyxAdEYOhreqN1aU6D370n39wkzaZaIjaJ7HnZWSyKaUPhJbjiHH7Z/zkYdojlYzLu1SLiXPE8yW5D6rEBgEjxN8WvAf1Ci2gEnWtLP99H4yyI+J7jga3bDikM1Ls7Kk0VA75qEfES5L0rV1SuaRNP4WWEVO0S20XE+EWJpQQJFqftya3jwwg3bC6Ee9swVu0x4KJ8s8w1H02za3xdJNcdJAAB2utZhp2xdfmKVWY4asrecJLHqccIfa1ZyHa6jSFyJDVnbQXfKgfgcwAiXsxGJG7BujwamjhbsBqIwq8tpDEP1Ty5+NE9KH7aD56Yr8tZ3UOpzn6rO3d6g5e6eRNnoLBEsY+02I7d2LJ6xEFqlwzlfP0wsGW3b9/u/W+v/ZPxXHBYDw4A0o6jcL0caMFsfAgcN3f7wGVs5HM+xrcLkhy24Snbg7y3p5ptFboRk64bp3MLFcevv0o103jPf5ulYtqNR8I3Cjrp9c2Assxifzi9WeedmD/9tQAAIABJREFUq8x7vf/619H0fk9s0RgovMZAJipz77/vXsP162a6OERMuu0NTO4JUAphpt3v7dJNZ1s/40ub69q1iyeFfZbV0nP/232bzPyA4tuW6LUWNjUZc5AP0YqAcLXAPBNZ/4QNPEnxK5PwVmSn1+3bosoXdL3XXNwP4VuBfswvHG7C4+pmfpW5x3CNkts253Jp85G9yQo1GRM8dfnFvm8Fwjvk9Doj/EmrP7obAVHfufOZXJira6mPbgmfMdadYbeWJUW5OGwmBZ7xcZpnmXZbfLXrM2Me1paxGjzyCmrlrm6yGfJBZx7CsbY02EeZ9xHZuYRo9HzjDLsUaBtnN4icpaW9CVbuMDFxm5RkJl0IeScb2GvoAaaXHOYqr53Zd1mw6UuXf3S4bbaP+2osp5jzGrbHIsWWfD8ik8KI3dzyN988GnEJbFFtf/8afywt6DrfqHKY4sEvDfm6qHWXXOvjPqQVUSWRcxrSDTnURZKJxsencym/bBmFuI1kwds1O+E5QEO13/nOdyjT0oGvxJoyjEFDWvZh1FqXhzPpgFg/GgLN+DiPHPiuoOEokS7l8ITUQP5EEA1PQ6+PkN9LqJjK2fToPCsG20QRN8S+l72GHb0L3WrOhBjXIQbb3/9sEDHyxZBXFLxjAA0IDtmT6OQoY2QygrOZxrEtx5H2s2ub1MRfX5Ha5Dqu29S9Rxqu25rddlCDxeVYAeaG30srTNcN66PoPpiCrThJJaNtzNbE64d/PUbk/5mfia0dVeLw1kIs7wj5+sa+D9spWzKw5TkvP0lNLIUtZpuz6ucr8xyUnHqxJ2HW+6CeleHv0EVtULNs24OBIxSjadrX4OIHwR5z6mAI0GhbTZBh+k04ozC3WG+jaJQW0zYtCMQBacQgHkVntAbPC3LNRsIedIriL8k1NgEF/4//kcTN4MQngk6D3XThbb4Svq2sgX215kl5fAE5Nz7Jed/Ivm5kKDyk1/qDB0PKjLez1b6fdpzGzxwfN4ltfgjliw6ApbeJlRJdrc0mNzvZWA74o1AdOOD/L13bxaSSAvlCn94kmNoKI9Tx4mFzT2zxwTRfbLvFlWkSDDMxOTaTH0l+Cl1q3isBbYsxjJrBfxX2/YQlGXfeX9XCIwxhftkMucKfrBbfE3zk6SmYePJdR9GEJnAxJjAMXo0Mk8gEdpiADX3UavtnP/vZ8HHbXlPlENtgFw2YQ++JdMgVm4uXEhVcXNbgHwEo9xo4o078xaNXoSOB+54VuwvYPtXpBWn4QbD/6lezH1su1WvncAqKpFFgmklm+R6QwCIitqOCdJV3TkbI/fs3iSh6vsM2n6mj6RPojEgja3gPtdpbvzg5UZ8QjXsfYVK3r3u+T6JP9beLRlpNC60rZ+/b7A2BQPADevLGo0ePhC0SHZp/hpRNQ65Q2Z179fj6BdJumCyyLP81B7jWBoHhKbPHcQI6dMG1CJcqG2oJLmeVxOT1eC8Z9GMwmiCxx1HqutQ2HkSzFJ4eVKlXytmgfKx13+recGZN85NgwrN1HG1Qgb+ammdUB+KXoYRliBJg5CydtXTdNeeBzUGvEeLRBGNii1w27Yh5XcufeRwFgZxkYTrEiRkaQNd8J5Tg+SXNvMGUyFMgezc/yl3merOxcArcSRdtvv55MNgL48w8O9vgzfUFrHpR8iQpJWjY6GCocGbnDvlP4BIti8mtXiGeH648TINpzkWdm2HDYP30TY2cmDv88/7cxnOFFWdmLoZoeS992ZeGV7CsCNsZfqnqWgYjtRn45x+ELttliHYhuQ3p8yt+RfslkgdyETbXAsPukauBSKQBAiqwZTUXpVgx3OXmMYSTggynVY7eyjsO0IUxZ3+5Ut/FVJjZjGobAcDsNI6Qwo3vmXHMUHt//dd/7Y08QlKK2Bke7clrMRmEMcculSpG9aK+kBVO6hOOAoNNcOgkncJkg8lqDknLZ1FRYXyF2PqrPl57lY07g19V4k2/FgQnTXPdbmn1QRrsZ7je92/HhZ1lM8oKc8kOThEcAXsw9LY2pvRgW9OiuK1GG4rqQew6DKhUau+k1FuGw/UppSvTbobA48MOapvICP4JlMYdBdW46JU/Qp2XVHVheE0B7Vtow1WRDrrxZG3zDqs3AL2o67YmxHJyP01SpU5gB3og//NELHOQ4eF0eUKLQKkWhj8EQEVEXVb/nAgIVtdoMl1XZQ2mI/qr1nsd+a7LEYZ/es6yz+tsPwnfet90AzCvikv4Ll9vPmw4Z1u8fmqR327n0N33+L+i4gvJieJMZJA8V14na0zCke2QZiC8Ky74fwVFNQwKaX/SoVI8Yqmo0w7d33D4MqWEkz4WtEd3Ex/D5OU1jvzBkIC4bGY+bwGZNr8cHopiiFap+c4O2uMDVh16bta+C8TQn3yCnh0J5EjxvRrVVVJg78FgpapsqeOBOGYQZ2D9yl9RuUMxSj0ZcIqhKI4MxAmhWnvLF4aF13KHJ6Cafz0mKxXrpOq393HJfomEN5vlcKFFRsFaerdfnvzctFYLIriSSb2WYAeuCDmso5RAjVMgxpePFH3l2nnbPM03DX/w0Ikd0i1ezxKltZb6C+g7xwuNHa2/Cg+uNx5cf0r9936kZ8NA6/LmM7qIM9Z18V1W89Yk9SWKTG3PwLvdThqTplzJjSd0eS9Ae2nyV6VIhVpcnN0V0DRLtJ8ueG09x8gJqj9DP30XAd77GQLILxZvvKFiMX8cHj0S9yuHdMW15SCIrDG08pOf/MTc2dPTBDeskJxTn0jZT6m62swLNwPcLq8pkG8b4GwKPqFEx3QqqNfELz0Qkii0wHiQXOTOc6LiyrKRKLFU/qaJPvym5CI2P/gB3qLnYzcr77//froxa7HR1in5LRK8BxNaeuPTw0t87949840q3mXzLGGuyk6qah2Gru7GKs7hmWgNzgB0KXEpOkQCrvEQvpGU7LYIL0LHkgmXnMZ8+XUHJyWgaTS+jHeThT0FjIkjKd2HEfZuHNAt20tip91LgJnAXdXZDIZZm2OYe2CxnNfpRIBIrUBm3pp6e4+AEG2GbEmiwzYNCnD92ypdaAtFle3FnXyA7asRp2jJxoewllOjGs/+KgIcKupvHAd0kbYkJ0JBVl29M1x0MfKPsIf40fFJPIZDU+LgcruE0sN8/CGeYrlWEgsyONU9SZY2XNn//HNI2219BibUHLWrQ/rHC7LDy13mxZASEBxBbDxjm/cjCGIiJzAspYY3Njc3DUjEDK/AZm201UGUl+toqwXaw5NgPXoLhWVJTVfkZmmf6ZGzoYAhGLziwJBg25HRd03pUKKFcDyLT4KwKjqtTo+6rG3zLULQ9O2UdFXaY4fZ0MJ5catRQx1nMzCL1FkEk2yNKcwzuknkyYPbboozw58hzlmgf0GwVjualC9GtYXBO6rZ0yaGvqWuDKdOl5/CfHL37nB6d/kaplXmHCBNE7SOmFvovIwfx2DViXv3Nje77o0hRrcZG2ialsmVurA57fBCRmv19cjIkTEuR0d+sVmEf84CqraSfVXl3iaM1v0uk2vXans348PjYUIe4QXjoJHB+BG4iQaceFHttP3DQ+a6Q+Xp9c4YJYVcdu1mTm0W6tx7MMfmT0LBgrcf4HNPz/jSpeiK8uR7kbYpKc9ZP/7oUWWmYsw93zGDLT1HvTfmRsPUG599u1oDgCLUubGKE2LaO7UjbYddxU7qkrllg3XQO9Wffu21IArslL2Gf6Wur83RgzWVsan0v9ayb3vqGCE3+L47GURFhOQwQPnG13ipY+J6nCFaV0q7OoXq3t8fwklMD2sv8euvkyXpZFn64kdYMAucy9HQPCOP6/+DlgiCYrgAJJCrvx27vFKGFai6jmpvN4H3zkrXDSpWl96oOt1iMWHe7CjPHGisuyu6Ji93JSAoYmCwN6yYQOf990NjV2NMKarxviGJxs/pX4TW4pyunfKRLfi5klg0ZynFrEQzNAZV9CIa8CtiYCu7fntayNITO+3QPD85qnCHfVnUV+UL6D391bVrrnPQqUcv1JHfxCmacKx54PtxQFGiL7mvtgpDzUA/ONsIuGK5TOCNr79eLn80hKtWBePENVGHPxmWhGYBLvVnNp005uzb5lTCrup8pm5LXVYquqwPaM0gA0uC4ngIb5gne6l+0dqEtcWLCDC+odNBXSB6B/IQ6LvT0MB/pseOA3y1aGz4HW5MY+UZjqZIwWKJ0p1QdpDd+f41rEN3f0lIx5ig7FRfl4v30j1oLup7H+bA0KOC965I5XUYDpg7tX++slkfNcrPX7+uGCX5EsIl9d0CdqpBB0FDKX4aE1eGhQ+cnHimEFI4K1x5TvBQWvuGK1DXp3EZxgZ1ri+teJ7xlIAnD1OEYvu5nCzSkgzHNl0K79ppyTWykXHV9FPwFUZlttTPuHQpSgZGtBtxABU47MZ79UV0eZey76eJtG2C9+9UlnwlB42gndLkCg4CMngtzuFfGxJJJF9+qbOzXROlD79YO0KgjGb2otLVankIrIyTM/mfnW0ROEE9NR4M/bx/rpYAA9xZm1Ul6C66bwKGYA19g/2MNW2tGsjr3w8iOIs/c0OZBfinMBS8zw2Aj/0ZwkwCEqjo3cfvFDCl/yIfIjzXR1mKISK/ThAOIYnOZqB8GsBGptYGrrsBrlAYb+u669ffZy96c1PiC9/x0UI/zUiYdhKf7jcjQ9P+K3W4NUUKrss5anb9fheMGvOYvOQsdDYG3MFeofVWX2F6bWUz3dle7EeG2pLiu+jK2EdX9C1RqcdlWleioQiMJSs1/dVf/VXU93+cLsO/KkgNO3+4Q58ZrtEmoXQ/4UYaLtTyYX9SBIoA/As4awyPkQ+BNReBDWAlrKoy4Ya5xDUYXKpmFEeKd3kPtcoKDXuEVGyQV6wAPXFQc+wQQWC+EIEhjlW1vr4Of0+n6/pPGsGh9Q6+t657uREGeD6qPvnNb+RbMJi5GN+fiGG37aXeR2fb22GlkhQsW19+NccqxBMqNQXe2g0qO5nf0RFfLy6T5mskErRSyTF1tEdAjkLUy/+RrNe+hjn0LjGfkpJKXvtS1y6uw2shdnYSnATzifBJRf2qZTAaw+vaXUGYXfDrq6TylMSYLQ3NeUKxO3fmq+ZtlDsjxMahd4IZVjhLAH2i5clg8rx2RXhKD7W5krgJdcM75efaNm6BmLaLgcYy2kirZtNHnTiGwS8bYWrblleuGcyL4JIdGFaO7FoUFSCrIAT5AuFSd67CxzxOIiShspCBSXO1RPpfMYnaWEmMhXcifePgx+nDYdnIonHc6cSm59GRiP3/00iapZkchZs3x7ZagwPVnkWO6IJHaJLCfld+xxOg2EiuLuSwEd7ftTVzQIze9FvO7So9bmwU3/TUVm2JZJI20h/CPVf3eXKcCm9V1ebTT3czsBlURS0HWBEIHd3I5mL3/s6qegeKKEwJzud1gBQ0t1/bDq9K4YHBiOk3Devf90qUtx4RF8fBCVlfDzDPbLcyVGvRNLNd/bNBfuVBl4kyrO/4etPWEnJ+x3Ts9iJimkxO6K6+dA69CTrxdQW6ciE9dtfdjICOKdE/yc/1HHNyuTMGOy2jJNChAAGpL/Bst1lGjaTmDw6QssEQuHfo++oj5qFNS6Sx6Njm70ECAz8Jm+yhAXSMnm2sJtNKnxpZwLHfR+iwiVeZ7B58773WDjn1/a6/iyEW0tn9k25UBG85DGwUGMI+hcB6LTgB5FAMCuVHQemKWoUNybJLLAUb8WUPoUyY2aIbP9Cn9E8nuGcxqTYh27VwgQE26W3e4VsqAvNnEMvfvElTdPtbmr+LdoorZHTCi8uDbfbJhAHckLI3jd6jePGiduWCRp3oE6He4OZ9BgEbPSDmX3lIBbHr7v43zQ4cAKPy19v2uKTLVrOtHCaCf2xErpibAl2NijDbYnO2bYM5dDb9oJF34M+lyZZlOLoilt0tHTSsmVx6Qo86th7SQaYw+Tff/OEejFJae4VOXW9snYesKZFzupql51tRoJz7GgEvJSidXO2QV5VPZ11jS/SGI7B7RnHMM7qPDhWYJ0/2iS+nd1xPrEqBnNm4YZsMmvUBHejYENtRdF7dOQzbOO5eW01iao0FfjZL/14Rf+DGRueqsUX99Ahi1D2f4XuOddDJ+k0Mj3MzAXrJk8Qal+vzrEqcVY6mZu4dYfzNXAXmiz4SgqnBSjfWZgc5XJ5UbW1NuMHAIb1FJh7Cf4yq8qa71obUFBOJnsTAfCUz92MtbbvN0pY01QTnI4FG3Y7s0FU/zf3Eu1mhVTihxzoEYal5loKMDWX4VT8zEPDXXgPL7i6ZGE276jkKyNdwbjaE5pe0zGYXE0ehC6J3ioxsWCOm0XDiEuSMIyc1h1qwcUPidcUpuI0gCLDTj29XTDWPoWNqeKT2+361fB2RC+Q1ndlF6Q2JTlOxQ2dbkdUz9zf6oqRK3YxDUsCq2OHRxaLsbf7sWSR6DywYJ3amXk6N3GnXlPTKXSI8V0mZA9C0liP4Goy3mrOgK9x+UNwa8d3zLczq735UIF13gqYXc1Qj3DBnnTavv8qld7bEiRRnFoyPzuPzjIU/PHz48KEvz6FV2rITDS/73b/4i8QVlex7afwWVmDFKF6t2L1zZ+7X4AD/jBGCo0vygil261//OomboATYGiFnSl5hN/hMYbs3C6kor5gP+iqvxWaAkSpzQ7u2pS5kfeWKlIAF/IdwDtzQ5iY9BXHSxc7B5PYjYy0sdNMDD6TDrhd77JnBZUiyzYT28Heo3dPTRG0Of6HqPDKfhWx7I5ODNFMdnTX2Lo8v5amYYTwX+IwX2Z8+pUqvEqwdgcHLXV1jvrNENa0Eu8IYKaXGO1Q7xPNbNQuwmTvk15de2q9/3TTju+phbSZojnEXD3nzJS/IRIsZWuyOT4vF2P1cIIfH7117Kqp5k4614gY9ulNtN0I02BaNMq3SbHnPiOMPnB2WSqBpudFi5mnpq43sQJ/Guisqol+bKsAzlXgc14XbGafkWjOmCvV3OKVOlA6YIjRhN1wQbWL1bB9SuL1ywYCusclRXZr+qd/CFbv/6E6bEP7H6uaqNV/qdS/0sCrnk4PZNvuefttW4Gp2XxnxfZ4ykkFiS6sUUr2NdFxteyUVvZPmesUKr6D8pgmKchQol0rZhqtd0UO9NLuZbPAeFKZ3BMiEu79zbMSLwDY7eMgvLru78oJ4XdaBMzA33KF1X5fRTuQIKRCWYtev5DH62EpzfKH7PlNtVTEE8kA4ZgzQB/XlLcnXultelB8XGSNlPt0E3syJ6a3KYJqofPvb0hd7X5DWeSwf3/ctVoBSffEF/ofKkGVrMPnL7thxnK6RP5/NNGmzpPMqC5Oh7XQr3LNrvIS4VBsufNNcJZNughebUHaeyi8w0aFuEP2wp6DaOaXIibIv68zOmwp101Rod/MjkMNDP9e2KyE/dmmqx3ejI1dFs/QyvXts18ZGkKUBN7uPvJw6kxpfLy3TJKjEgo27mzOy10Uy76vS7HVVNH2LRWxmP/YVOe8zt/XTTz/dR4t5XJOFYWUFYvDDBKGc2bJ0OGZ4UbjtNGZvMFCJ3nOCXl7PdlaSRR22po+rXJ+IA2ER9/RvYkqXmNPxALUe3Eyd/cIazC6bjmmlJTcsK3sfbXBxUVvPR7uHjBT2mVPQtMLLEaWjPmr9ayuF6r57V9GxaVdkTXKMfH1UN9W/TbouPHEPcROxGklAC+2nmwKf7jcdeRYPaKp+IAtAZnUlLoYgau0sH2XtN4sarwWFDmRdbFv1CdO4+thdbQDy6Zvm0NHEMd7Av/12JjWLBvR2pGCQy0zJ6r3Lly9j8Ct9/Mogl64u2gzL8mvSqKry4l1neGicyS/Z1jYx1WSVweUMfHa2qy3w4zkEpS6u+tUN2tLDCpfeAY2NMQA6DXePbyrcVFQCYrgTCw95fJL3YtB6DWcUvJrHXfoDVHYZDYbNzMzgCn2E7x0LZrs2S1TTjt1dAgKm0AhKXFiNbhhXXRRk+3u7aU9plDBhs9HFgv6aIZLU0SY27nU/drWDKcMqN6CewTUsK1r3tVgvxmoK+nIrFN0FCQs0E0cnuDplslZ9K5SQwvy8her7NQ+vhS6lq8zb5YrtuYo0rnpykivKUHumTkcJNmZ876X0ng/pmicx8WhIMguH1u/qr4hF78/QFYC2xODZl6PC+E7axjFS5oRBDpULnjzRe+Et6NZEjz1twCPeOWcX7Der8W7slWJ2+yINwN3OiEKWtkL4RpDuNjfng+cUI//m8Hynq0k0ZUMrlykY0K+tcRPj0XqG24iMB9lFAoII16ZR3MxOKBj/rZy3VaFYmsfN10PI5cXBthAONJKbwHuxZuVoPXvTZzMNjoRxh/Xq4kVl7ptmI7O+JYRT2SJhTun2bn3yCVpeqaJ3z+yQFD/Zd02mpbgWpaIwXOhq21owkoqr7L3Nzb/4Qp5oKmSKzI8yRaKXQiU266QgM4sCHs11prgqM/FEv/gqhjfn2+lmEOYgUoIflG6n1R/owUyTrekV65wO1VaxcgUrlIPpRvq1FOBiSPRatPEptiM9xwBtqnfKsvfCFje/YvYXv4itLntSZuWlQD0n6eqrtvGXBCFKJyTQjBDaFuTNmxJDcBIjV/HlNhHaZDUGF2fb00fUmPkasVhsyxTxlpPLL3XiHAO6N35HBD3KBwC+gfmTOKpqeUbZdx3zGY2x9Mdv4ePAeullgZv14YJhsAPITJrkaXOVglj0ztBSPR4NQri5amF3a6eq1WgkMZKoMUoDsPj6ZiKLjkaAF2oonYCczzTb6GWMhbfOa1vbXt5vaTYUbT9uoLg1qRhgEfZiplMGeX7hhZTn0He6jn2uNp9iAEm2qW3Ca6+uOp0Dl8VhZab7FlKfR6bf7t9n+IldVHbVqgfPYWI7ZcR7tJharVMHugLt9u96OO2+OMgo8RCIwTotRty9e1UQ3VPZKIfIxebVC0p1IhGstK9pCmfAdtq+/LJtB7UDz8zk+Pg4S8jDuNIL7gRz3vjeE1rxJFtgQUvVrk6vdQ3PdWhUYc9AJKP8QxEQpHCY3UEQDWxeyUgdl40Yh+DNfFiRmxGLPzj+SGFdV2ZRhOE8PGc/EX16QGKfWEgcroKQ6hkGJJXY0Oh3sVFEZGRqoTyqK4DCryT+UkZudYNwkeEnz9CU4QEbcIs2sqc37l731ztDSpKYWvUJOnjyQ78EMIKmOIkPdcd37+JB1g4QVPr8L5c3P/wQ0zX1IX2UBcaY1nhwPg4lei40i+tew0kBXZyLXgZ/XlJt5ZZW3+ucOb6IJdl8Ibyzfr6l2YhX4U0UWScnXPDsfo+5dcxTk646W1SKPppkGrx//761+RQSKRuam5Q8zLrrO49SouBTy+U7SnSNcU8oxxQDJWdJ0Ivpo289T0FHeAu/NTjtg1ih5obbyCnf9IJlGJWEonEjvuyK2NhLr/7YLiQn8GBm9fYu534dArjDm0aTfu5+f/8zCog2f9uKnrfmvgo7BkThieREFiD9aA8C9YxRJU7iZpSK5CLhBO3xtx1U3ZXR01mhL2vi0F+UuwHK1ObKg1XUJTmxMBeBnOmljVeu0L4q1OfUDFNtN/Sohrvp8j4v0YSIUoPNmqik9jeL7Hl5SMdkTY22cOu+Fkyvar0v6Lx4RwM8cAC48672R5AZF9JarUpoUUdWOFDtvU2MMn+77vvQE1veh08x2gs+ezyNxXs4lPvlL/VfrndzNF66p0/PDpCJSxm/2GIR5uoYnpkrzH7q5D+RPF006WAajXmvIvlusjmF+DRd8RXQcR0dUN5/bvf8+Nh2jQ5XEBe11xF3q2sw7jisdj5qxi2k6ccCAjnAyXi37t6EwvxVaWFbHwZyKMZV4BKYYKVEFIuicJesX7dRXXQRa2mSTnDvbWv+9vzPpDMjd2q++ILtZshVHJDO/Xxx2nY3f4Bgjswqj4FShIEcpUF/AFN/Fhztc7miVptk4zUeLqzAYirxxJIOeyrj99htfhiEcVKgQnyaL++EnV0HqBl7ax9rtNzG+elaTcaksz5DVbFFmIJZ6c5DI58+najxZVe2IAqN7hHLXRWhftM0PyYSgmCrgECKu2uBzdKhbKDnSsYfzqc8gxzreWmxiegNAyxu3UKxvPm9xd55AyhatQYsWqMdPvH06XCBkXk3trxCOfpyaQOp1SFUvOJjDBMeb7TU8QRUsTSUInDl0Pbc/YAbUO6444/s/+3fzmYL9Q0tLWJeOMHUTvaKZdS72t1uAipJnrFH5h2iel8ueZfNrWY/ijVUYzqX+i2RO4PK70b/jqApGYPpFXwRJnyTRto1L+EhOEv91Zh555CmZ1L+OFYxXaeDLO7iFM2/bYxfawfxp2d+9q1VGGuoYK+HTmu91uk1GeHZUUTEntTDhwoPr7X+UVQKCb6Tx+YLbT0KZxR5l3jXtEhssLb1/GUtZKBKD6e7sdVOrswYT0Bbq099Dkc3VSLIlPq7ktZWFjM2mT48+U0k1NzSYxwZwNH9kjMLnTOlu2xJJtj8MuK2o9DzMhpZanRFTjfLoWceN/DJQs3wTekHRhby/JoHn7qT/Zwuh3/5ZTbswFx3xJZL9dij0YE8rFfFkMkZVhK13rdvLwyJusG59u4MIELg/XkQot8RLv9Z+mrCeGlpsQVNvVD+95KqHZ9ZTg0odyqCv7VhNd6ZXQ+NW875sqf7n5BB5WjgZnM6XypTaMkSKjaholc9D/qJlVAzCVGh6Fls9IJ0aKrkAWHEvleLirnFrNACFHoC7KB1aiWx7UvuaTT8Hoak56l0Q3GrmJVdl3Z3iKTf0aOh2IP3zRoSxy5qWvrhktXS31SD/V58seEWt65LFjJUGwVIGvjWTUOtAjUBrqe6RbJw3V3jI41dRc/Qiy++WOO6baSfXgcdtwpf6BpXaqzWS3GlqbVmzBaEhANgymFzGbLkby0WqvNGoneUds0/AAAgAElEQVRGRLaPp57Tgn7hOLa1KknahX962cUFYyOAwW5vNM3G7ExyVZ97G8gdm2kxfWvzV+7YgSrsXyuhUGjvpVvdYC9xABBiKudos5Pq4P3fVj4eJP0bJl21RDTg3XVRd+3MbXW49PLq1WYn3OplaIceupTtrNSLR0cjM+CFwAs630cqem5+fZmhkALuePrL+WRdGjN5aZDhJp9fRoe+tyH+JhG5faMm4XquOIM29E2EvLuq6BI7Ft4FQKRUupuM6KqiME6RbNthdbd+k9Tg0Pe8o9d3AUbS9WA8UQGuHgSvA5Ec/OpXo5ciG4Xo1STPCzgTcr13bg13Y79KRHbYA+GLM6te7zpy6RtWd+9yg2Hbz+lOH2mnpVhmDw/v4sP22f9q7tp647iSc7/mNQEIcBlYAZaGCCegTEuEtMMs2xTd3iVMo8dSLKU1vYnltklk8zDI2wiZOHoRQmBfrCXgAM6fTZ9LnVNVp86lh+MgBV/ImeGImjqnrl99BaA5Belar9vgb/FEna3Hmo54mytyf+UoSX71SUJaYb2XC+D8hb8Q++jRmt0wuI0XVbSijk+/bbbhMW9AObAuzcSJEYp1dDD209VdzDfBRS2XFwQtRZ9zcnKCGTY00n42TaPGBYz+88FndxIpI2CVF7E6yHHQEj/JV18FjJGM2dxh07AR1xmb0Tfuxk2d/sQxMuRTKggXSqpLinA3zFfuzDXwKzB6yy6zhdEx6gBajL3k5ubGMA33vaItBCQ9Xb3H2OwHEqBodJijriCx5VPrh866MyewKl5yHPufxiXeVpN8vPPpRoPC4rICWVuFmd6UaVCVh/BA4fgFCFoTVgLVJIfz65zgrjDNSm30AiWI8XP+DyWGebNA9Jl8kHmRw/bHCw6GelUsRRSLr9CJ0y+aCrx6927CB4tXVqXNZUyGcPqdB5KNVN33VFdohU4NOWa0cOyskGHJQ2+bOcxKNPTAgXqMxmpKN67h9/Y7wRbASygBl1Hi3L7fwlkGN+y1EN4q5CDJTaq3+mbTXGCB+umwGVzfMIVn8B81Dm65njy65kKiDwe/ULs6T8nJsitsz7e5V7UPaESQr1gKEalh858hnKW4c079VwO4ZvRWAluyQfnOyQ2eOYyPD2QWT0nNCt1xx0Skf1nfZB0Gcf/mQEefXEjvo32FnamK99iuZGrwoDR3kRKIAq5NURchsVZigmBnbDwA2/ReUCeAdgUH3m4vPCQ1/e7fjMAa2z4bw52ensKXJkj56KMAcfTAnR1KhAgPL7KtcTbW/MEH0s1Pk9S+evVqTNlelQrJa9EnrAmrzVl8PYp78mSw0f3JiTHZaASy8+rx78S9hlIrWHz8lA/liKGGuiKix+q0PUdB2kD58ZDoNp5+B6WDGyPYygaX0F/dGf2gEGMwWP6+NPPTzDqtm/0yl9buS2abuPVH7u7zeJnLui4KJme6bLVcfMG+r6akXOYFflVc0+zubn3xdc2cyYCchrv+yNoQ58NbRm5Mbx0+7P9Gdtm0laySOOX/IurYn2KvPWfxGl5oOpdTRccZ2zOCeGk5GyrQ8QLt4v17iTEyIif6AKTtD9S59PUs1a/90B+J7mPlkytj513ZYFUUkcXjCIwKILNTasTZyE8NWVY++m/twsne2Zcvz4w6GR0GI76yRPHyfnXlzU1RSIv62fCKFpFN6snlLK1c9SY3skauQmQHgTsMYcQU7HJtsK0effTQNHnPexQ5KuZC8xDR3OAmnqI3A6k0DQMF3flkw6kNUEg2q0ZNnR7FaB7AD2VGIQWzuZt9xyKrP7Fx3u4lNC9zw4bi6M6Cq01o+Y36/TFRHhUGX+MBIGvWDkQrnpN8QzfhDXszpfwAYrHZElE1riLGQ7zxUOiNknYUG80eQIdRaUlUsmhL+dVGRHT2K39I8K894KmHitvImmoEw5ZJ0X8vWuIVNRQ2N5LZekP3m0K9F5IsKTFY+vCPbJlC0zv8z21yOl93QlDNIB14xTheNol7h0ENz/0EavhTmZSRI9KjPKWoaa22iIP14gLinMP5/GgTMbfebgNRqnoNgZeUEGtGv8aHaU2Bn461CwKgzMS6LBwO3C1qSkUiRcRicRyczFK7B/g1wl4ohjKLDHyeuqSLa4SjpqqrhsW+/vfMLBrokIFZLOz7K1Dzmn+UfG9lnfnkWbNzoGSWuHLuQvlgBTSOz6T353WmMZxSf5Hr61l3g2U8O6dy+HWOCyuTejPSCnbRiaOc28wfM23eR3Q1LJ/yiR0qzqi/6V/N55UhwjcXBZ2r3fzMu53KR7+DTB5TRHfgFcnU6vVrkn/0Den0NMA1McR20TCSNFbi9TjbgNrfSZFGCcVtoj9jYwIV+vcBr/delOKbRWj8Yl5eRte0uulH49NDyvFyay42AxAdHcR0KhrilXsHuWOlv1jFlix3b+zGmQ3itNIwTnv1w7lePWUHZkPUh626OlCW8+wB22ks1GOL/X6Tkl//2sRraI/fdPdbofW+5xLjtOe8crZDWxE4aNyznZsKgiyZXB1lUOR04FVqirn2wk5coPiMxwG128hG3Ba02FNiXnJ7a1/7RSCHRtu/NQf7Y905c8mYasUqIj3u8t3dBMilK+EvFh/P5fgpQwC8gwN6Kbp36tL33KOuqvGb7LbP8sGpXytRh4LWR/2o87WlM7HKyl05qLsqVWdDOQ/X3uyGm8Zn96c/UeTPA1JGIf77+fPfzmfzuP2WHryK33Mj0BpBNbVDfbwweGrfXDxRP9nLXpHv+oxhCEwBqzvgt3KSYajbsqwmZvGED1U105c/KlF3XP/vxyXtaUOX9cmi0HGDek0T1XxNSBj+NiHxznj85ue1XoUPXcq7ZILg1YDwD3hu4iNJ4JSeWlqp4xF+WDms620fm2C4/gnNtl2sqvtlQACvz0Ik595mxc3d99QeoFYzS0fvfhX/QSi3gi7BmHSUZxgqFpFSvGuIEX46AV+5Ihah/uabk5MT2J+XAeTD0xAO/O53K7VEGy0ZlBsxAR7yyXgfXyMxWVvn6i/GlqHtujYBTzbOrs7OhunngBAKYfjrpIJs8U2fJjLIw2+Qy16rxvRdKRLTRHLNQJLwiMKBhmrA1AqR+6+iv9evm7AWhzC0wU3X61XR32980Wh5VSinRbdg1Jnoe3TXTSr2QM7te1ewj04j1lE62KgNgEC+bSPbXsePNan0PrkF1seXM6hHi5FEzzw7n4uiSsW5Odrq3QRtUlhFMFi4T0ML+e4UDHzeWr/clWYZwtf+yW9DiVY0e5KJje8RLZQSoiTw6AKnd2ROLRCHYogyxydyuQoOhwfV25m5oKpfLEFNtkws7JrkbSdoJ249JTZYrS7cfjGcDvqDRU+ey6QlYN+rEK9oETD23poFNM71LzSxZd9Tmh/zE4oNFyfmbj5K04UpnLtdjt36o2ANfJsz34LyfxnzrhprCXBmoNrE8PtqdccQrHbYq1UDF/76ujZAWFbD0/5g7TcSKarZszOG9HtvRXtv5ZzxpoHTSKUS748MkRSkEtNSa+4aokAAHGGciE0/xpY5+nfV/9+t7HdOgxD17e7uJhR9yTzQ0dHnIOGZyOnIGmqgLDPdNu8KrHlflZ4J3cJhHsTEk9fICYz/OTm5NkSUT9G+AO7QzRF5YsUp7J9HwdU51GFTWwnmFhJJp3d02P/kSXvqxZTTkwNo4dBzK0buvbf7LgaX/XNVgMpodQRPTHfPGsz7ZEhDFfdc/c5VTCb0z+qiZz1nCfRQEw4AvdJTkA4AkUqx2bt1srFKu4U7GRpUoDSn8a19c5/eFcRlbX4kkegEfuDoaIM8XW6msTINWDJsPnx+Z0S864A9t+7b68EDLx3oiiFbcEyGIq8lAWNLi0gGCoh0b6vXz85nCz8QCS490HpzR7E3vcWXtNvjCJfiVKx7Mk30gXAeoxLb8chO+HadcgOdVzt0UrVPkL2b4+IglXekdJdG1+RCAoLm2jbKIblDqsYFdDwvv2wKecyhnsoIjdYRUeungBPDDcpCZ1VPJY1p2HMtUnNl4aHSo0U/lHbcizwCbBfbeEg6N9UGlXW0xvHEB++4NiMWZ7iLaMWN3oIA6pe03TRE30DzHUtOzqkPTQLMCob3wsd7db2UNjdAVjYIAEn5JHiNn0WydCPzedk8Yy9Gb4up1bcuvXlLv2RaXoUvZhVyze11nWYe5qxGOrprdneFE2l3445/N2bVdgiMSsPmMEsZsd+juSUzT+dF/blyYciMARFYeLqS9xH57rvvvpgmumpjO2/hbOq+wcmkCUMPLwu4IHemA2dNa9XfcW3aDd20sR7uKWVIWdqnPqUJZ61k0qS2SIlSxNS2S+83Mek+brYgiKWd8b35p8xDHWPqn15sPYq+ZAt5upHRmT3EuYiVXarzVVF4Xh7IU9WT6ZYC0ebpH40AzYUddQgNPLS/tT978GXcoP/hD8b8mXRNhfP4AzEw1T1+HwpUm55XOj7uUezlZ2AAFKHN+443732RVv+C3nDe9ofvRYCfEd98aTiDOBp1w3e3LjsB2VHUmv+ssfRKNZ5hWjnf/1TyVpS5XUUBCZd7L2XGUfXJDtkbhPw1Y3Asu7qmCtN12WpsvgInpvQVq7bycg6UjgWwdUaMr7kW6jSmYI7BbeO3G1Tj8j8yaEgVwcVB4GcXq5vv3DretwkpC+SiDXWBGcJb+T2j5zZBRIV2sHF8pAEz6VNAci1w1DqS34sGcjJWKg6QMxe+Few6F31u+tE3BhcOzS3hdkzDR1IY7DWNzVh3A6q/mIJMwTl6lxAMZkaUdR4Wi4FRwFy3ITuNXKYxe7eSq3VFtNP04gyq+IKRSiPi/bgLfVgvmvJlmeN8cRajVwcKp16KaR9gJc3LcZlfmFi3yfYM5VUmZovl6muFhfOtdd95Qcvi8LTiN9/4jyRYjUip3lKu+o798zZER1f7kXWfYrsOOROSq+ku+ryg61bUdvOJe4BZh0J6iI9oYKyNZf3NFMzc27c5+26gMovFxGvb4eKX1HklC3IFiqA66v5Rb+1ES1KDRul4EkY90OcAdp116qbI3HUT+65gfRMfPErWdY0VCrW5CN5b/1zI7ziNiBwvbpIyZ92TgCFGraYpp+20PMHA4Bw21hFNIASD9B0IUjKiZtqTgYZLu2E/NaNta1BYjKnnLYZA79KAAiONsSwhg5t5wMMuCpn1S6DjgrZLL+2V8s1GtNudNZh1SI7y8ra9VwCVKBPzMd/H8Lb794Mpdh+lKfMeTMOo54I2XRNWfrqDg3gZQgjnUXEOIvkpHCFxOOsgzCbjiRkbE5g/yC4uWliuEGCgVGn6TUb6GeUA6h35DB1oRGACHXRvR7fnsLDd1OS9/M2nn35qrTX1wecRr13lByTQq6GIKFZ0Zdnd3WU9Xb4pDOOjmjiywrbJbSvmOsJOzir5dOpZJweuG6LXRDzWg8RW3mfkmowjPu1hyRDBv6FpdqH3REkfSY+8nYKFRWufaNDcBtF8mH1Vaj8My/WJqo0VcDY9kZQBa66CVHhuJLcGOg2siCZg67VXiiaYN+qEM6N/bgUkNt6rowOA9lXUL16gE8eN0/LWtVQjoVyYgvX9KRpdhvuuw3T00SM/7muw7t5Okyz6fScLZKtocL9PDL0ikiE/9Py5/+GuJIazPNlH5XCakH/WkpYWFGpWmNPuguwIFpCv1sj7w5OO3d8qA0+QMGjGGHl4+8kxBk+5SnlZhKQYwzy7oqMLP102+ZhQBCrO7NTThmJCHkNblNWACkNd2ff54/DixYt6YttkFUNM1cl0gMbtsbq9pk7JOfUbaUeYJpWwH0Z75BEGKdtMY6OiNVv3lG2wnh3VutvsBEykDOsOqDAY5YgtYhkYnmRiT758iWoDuyiUc5MQFKgINRiBEu7addIx85glmZNpZVINnBnZ+mDuvG625AL4Y5GlHhdbz/dc0EVj7LbdK8u9cfk1hqHqIJ2DD+gACQrNz4F+igRyJpaPXuxsQz48AGXZ+o7isATKKJOQOxgUWuWca7gAMdB4LGoxBWObYBaacxet5AWjpbaIrfPCkL+Lp1sRY3vRzed5UvgJ0gWeLb3TUisEpWhVUG5zHgm5pYaPJBcLigJtnqjdQBfpsIcb30xvpqCmVhteGo+RNJugcz+WW+V0q+QNmmF98AC6M3TohbO2Q+4+XvgJzrwVHIIyxH8XiqsOHE+VKizSeTaL1Mx769otvtNqChOzmYVBz6UJmx3rM+IgqnT31M08W+3iaXY7CqWmIljvVn+n9Jogilc+W705+G8ZDO25ItX/1GT5g4nAxlxfvCB364JjovirLAnNTrD3m3dai0EU3rTLkZ1oWTqrYZ+zUwdTzAlkI7jacNNRB47CvCZVrrWbnowbttscz15YGTX47yA//fRGkPHCL39WZbkFZZZTniFIX03ALS/dUXNL8imxva2yyrYO3Bs5678zBDpAQb46MGoOqMRE++52UTT7QfFPIZCXE5E0d5mPmcF2Zq99/xXccLtaWYvk1SkHjW+fKnCh1htXpBlY2lLJtSA70w3ybSj9888/14GLK6s3++Iuin3k5wo7MBGseg5AtVrZGZjzLWEnBf0azf/8M8dN0ZXd0v4sScewSYVfbLRWC7ezTeciA4sMut7Usuycn9v3e/To0Y6O5c7HxypWnY04ETS+gJO0o8WivqskMZJFZfmaUaINlMq/vt5KtwWhoX2RQn2FSqvjv20pmvE4X2dry2Oz2J9qM3IWyKGf29ViOi3nqSnF9qDJLa9oJqhdZAGDRoqs5TijkEATN3BGfMkR0ZCdhe9Lw0lixWo9gpeqVcDOS6x7LNtif7iEnbh3T36CFWPMyLNcq0N5GamEe7hUF4LkUgFbNp3vkkU+wl+zlaYo7PHxTEZIHj9+DHUUTy//FC/dQ2r+n6KrjgQa367PSu9Wm7+mBLDcFrZbDgVf76Lm3d0To3HXh/GNGVJ7b3e1kSos0USoR7rgi78UFhQoa+Ix9X4qnTNA6uHSXjMLN6TRvpFY7MQs4FqfzzOtFiINh7O1x4k1iuk8us0bdClJD/N18BcFSVgFpdZgzNVI64YjrX2fxw4BKcybmK8DE1KCyejechDbCZk7lGdWJmr9jDA426vfFHRbErjYPV4no+RfKKtqyMP5zuoQdfstenfDNgjfHskwuWnRe+iACdC9IKdc1JQJpZVGc4g7d8OIePwo9NU1N/ECMjqIEx0VmGMeMN/eFK6bUk4d6omHdiu9QsE4SAz9C7ZtqjvK7XVD9arjQnxK3AFqpQ/SH7ZLlBSPFzeZsrVSZ8Zc1DntxCTaaH20IZO/7OWVucatfTFb3AOeQnxEoKUy/quWbqOHlJwt2NrdkhJ8VzJ1qsKpCciItjzyF6CVlq3mq6/Ygh9dXt0hzrXaP9kAISelXZGX2Se6/NvQjAvhHZuyXWpwqR9tVtoJJaP3417rFVYhOvIh4Tir8FrPGA9ax+a6xuiIWJn2MphLg1ffC83+ZbSrivE1FeKMQw6hbdtkT/0omGqyebtP4IMFkRw45buLsDciP7Lmy251CQ+wWKXDhRVXj4vqlpv38SGFlhsFBiD+2v8V+01QMErRKMGLGNDjorDQGP0cKiLr038/CnXdfb0N2dmhx6p7+PChJyxAtIO2q6IN9r8aaYKVTZ4S3vFYNAo8s3w1E5UO5t5ygT391oDgigs0z5+P/1HvAWtCmw/IljS/GNdFbMEKexLPtWIfNYRcgAPoCgAyUXRMhedPAjGT1tbh1v8Hcn1xsVq5G4/2/7h03LNUEToCYejJdcXwtl7HIH9FHn+TlNvbIJ7zBFT2/1rTv2HY5AJ0W8I4WEcv5mn+7ZDCo+BUNq9SRUZY6PRKtJredQcHB1/a1jlhBsaIsUWmGt95y7+9SXOxTih2hdSutumCvYOedTNLUOT11rHQi44yHPoefFi8P3RJH0NZkqxQPZyYcDO5W3VUNNxqLH2EKw5V6n6vfuXZDJf5ZEx11J0owsATi2OfRCa8nrS1hTF+rzcUo3N2CoRyi0AB5xJ1bbFbgmqWDklZp663aUAMA6GT9srcb1V0byKl13RJvTM1P7S/RgjkdaXSnslcEPHtt+fnwS5cBomsQ/pu58rNdYb1n4B2xTd8zMz1cLLP5Uwztagi5zAWN/iiU85BP5sQS9C7bu/yMsLu6z8qfwgGsbXWssAdZ3wc2ohH0Qtbq4uSdlpXFsDtRODaiC7PbwHwHFSNREg0aguTfxoYjaU3MMGcvKecyWozmcMVlwKBoE0CQ6uSe58a+/SGtWAvlvR74IKus5odHHpeXUkF3DINwsPt77emVNCenk6mLipkjQ0tvrdJaEo5lpI9UlyyprtWB9PIljT8s88+03d9npUUaKLUxqsd1SDwzPlklrgOKMMIfWALBc3Ly+PCIQhKV2FBjpaqoLJPNAFT4DzTaxHd9d37rCaIv05tQC+koRlfGdGxp3C00+VvtX3HuXiRrtc2Z8vI+Pl+OAoYfU4UFzsNl5eXE2pyHUQHMp3kZORMZFWwPhh3SM9wzqAPooVo70PTe/Ckvn6VIiq0hozwmEVaAXlevPBckE+vrz1MnXZdvX6C6YbsDVdfPHumz4q/5SqcH/995o6ROmo6k99TuyvDycR4JRcuO5pipJHblFJtuxPQj1DSzyS7zXQs9KCxOg5oa7aD7u1hWnLMYOEZXO3UQt3F1zcOhH8OKICFDXEzgnnOksdlZBA8efLKax8aH0kFckiRsiC2wYO09MY3iBkCfO+rSAe2FOlEUreIgc9kgvKSgZ4saoFYzTBFwz3XxAuytXc4Nhq5uz3J1gKYmO6/vGycqyuX7h575x28yd/t69vSnkonjqAm5DJKDi7UYapzsrlxR6QtIcuYskFcxwngSYwgJ4+S8PtLkexRX06noZTwzeZ6thiabetR/+7uFmn6p58ixTnkJTJe3tXQuBPnqfyezDzhuqtBOUA4VD5UhuCqmsYs2oXnod5iWZ7C9Jd230bIMeNLa7QIC/9EqnGooYqDk3Tz3O7rkgI8eLOrDSQXf7cS9PEQ13PCF2j3QDc4hitY2vv3K4eRCS+sv6tdR294h/oxQtS+nxpzSircZPIodYvc7FW7Yf1tBSYfGfloR61c0go2JzWp+Hsbw17hbtvmSGJqnUbvNR1EEfljtMaEdE11x0ZZLOy8pKExoLW3KAUZit5hnSflPoT5RmzqT9DgY+OHmzYgMbGLzMXWub7n4r1HspCE1+emX/kAPxvs2HXFdsR349f+UJbKw0sl+AOuWMDeBwzuGCAxdx7agAMS/uCgoETTpvhODNdVXxNmIQks5R7wjdaB4ZyvCAM3s/8DteFTsnWk6qu7iGlliliJovn1CQAlBKI4PCydTMi8IDuVm1ojJNRsJwyv1ChBJ5Krx90ks/Mkpka86tK5WK9BwV9+Gb/x9xK4KzsHN6T7LULqvxMwDVRSqJ7O3cZTle2ulzffd8IDa6yU3TqmYLIbtVZjhfbggeX6jrIQ9v3oRzVGnliPNxnJM/3z7q2p2vLiaxRMsWeid9XLjtFNjEpAR2A+/0R/J3j7SeMu6UpA0OJ9LojhRtxoCcBjiN4hmsP397+DQVVZ1um7fgdr78c+CwjGus1glJXnr2yQO3cF2OS8izgoJTWOJnkc/abjIWQ4WTb4tFzWxbf9+toPHSGcxpyOOdytp450jc8Nu+nFuscO3ZhV3VcjcEu5XS6t42TDjdWhJY0+F3Zjo0Ibqa1MYqIIrvt08G2Wzv3rrwXMzbxQRl0gdw7qyXIODaaER1pBQBjNmm7I2y+CkxK39XJQVEw3dhnd2lfRKQtjUxl7VLRCxyE01NV33SefoFcTBlomlCM+RPr03S8ntJ6+4V1fawcuBXS+FIt4xSeY+9gOgCY2RRWdKMl02RZBJmCM+dzPqE/rnbfT0QKMFSUOV28Q7+Bjx/n5/ffmhC2XpCZLi3H6S8tEwC9yceK2iEmiliO+Pn7lm4BdMgzm2IB8Q1+Vb63qegtiCtrGOLLi/gg0SkZXNcMRVONIJ08/TejfBwEFOb7A7VZA7K+w85ZUX7+H9XhbcOk+GZsq0eOijhJ/MeNP13GeIglPzEN22UDu0Q67oqnhtIx2gyzDBx0b+XTbbL1uXL/coOjOufJXL2OOm7bjzSibXs/lym2vtxDI0XvP7uuzUd68id5+9fSzILvjkf2eFNebS56ariLcvPsVG3rS14pUUvgaTbpjdX+CFRhQKhaJ54X8ftfl84pk0jVbhmCkSaM91F02bbWZXqITELu7vcinugN7lUNKTNd90GIL7fWo/Tm19DE/YXY7414tQspEvLpDVxM34Je7nNuGS76wGkbjkph3e/4cQjubIZUi5vSBUIudyQgUbIn7e4eYaYa78IXr47rQiKmPuglImZS+gwHHd+/m83/JyWSPYA+N3aBawnWQh0vN51EG9+i6lpmz3XHsJhRE9R7yJvLyIhPPNvcAwGYYTk//QQletjBbLv1CRFf3iLOO4FLM7e2t45jK4yWfifEXXOb5m4nyTHw/PozzueWXOOyPpe0QlLvE8cwpqRTfnKcLJMFTPljre7boQxsgPZU2ZQwKV2IwCMhFce7Ifp0UH5cPsANXAylrtpp15V+3HdMeD+hupsd3N4n2rJUffnBenk+nq3Vf6J63iUBuamsnptMOB22yeeHqLrjn6I0kv5ey4y+8fiEYoM2Wrak8SNFdfWZt557Ik1ur2zocTrlUrkaar67ljPKc5fnODuhzME8v9oprXM1QO9j+fW3Mg4L7mRWcmOEv0FAySeDGlODWVtjlMeUpap9PAVa8mYSqvEn9mLH8ITuljeZs+k5veqshNV1RU9WfgIMDzDXVEfopPW7gBXuO/TvON48ZB0XOuc45zDCVDDegTO76x21d83iZxt5vTlhXHrkhhPYQlxC27FszrWTeJw8i6w9amNTnxnsAAAJASURBVGb0PZrUCQqI5T0TFl/Vva+HvMt3u0nLt6LdmHK1FmCmFuGoy8YNuA1++MYq3hTU5S6dIZ+oCips9nMO2uVboIuUbzNqsO3bASyM9Wu+01LXeAji6twtWBnIjhW7btFu0GXVOgkx8+c/v379mj9RcCxMbeXNRhL3BombnYZgfWjKMhJhcMXYr+LWXZxSVkbfdT8T0IsESmMTN58jj+ZTDsrZ+4gOEZVtIUmHxBxaKv90V8HvwKxGfp6CdOVj/Zho9E4Kq47h/cMPo9W3rhBH0+GKYHzjO9HxIy4d436HElyp+Cz9RwN53IJ1n9YwD034+/eiKb+5Q1wvAapscaZnhXJXZCXQNmIGrq7McjaZQJTkc7Fc4DAl+ZOw9IRiViB9m71CMhNBUmgYipdezBC6J/sfbkrlakuCJ98Z2wUkfPPieo/6DGi93lXkLphgW7x/N/LxZJEmsvOvFFmBNJ6I0IEh9FUoN9uT4RcSIDdxhn5NzgHp48bOgsvn7FWrDo84PL2zUPaHD81ctK30DKJKHwayCYY2cyDaR3m2QbJ+6emCIYBeIqn9uq5NJ9IpUhYHc1sbk4CSfjIJFNs08vtheHC1T/mECCqOheeC7nz8tgFAUmSHnmDnX41n2/7SKFiXIEYLxBU5uJc+/eMfIxDn/w9iA8Noxmnvf9f98IMK+YhPWKfiOx29T8BGdMlr6Vx7OYRO8ufNTh5Tg+76TB/Nl1Pk8eO+P7ueILe3FB5bVq0htVffb9+e998Ubvu/BqI/jy8ssTMAAAAASUVORK5CYII=); /* https://github.com/pappu687/adminer-theme/blob/master/adminer-bg.png */\r\n}\r\n\r\na,a:visited {\r\n    color:#2980b9;\r\n    text-decoration:none;\r\n    padding:3px 1px;\r\n}\r\n#dbs span{\r\ncolor:white;\r\n}\r\n\r\n#content table thead span, #content table thead a {\r\n    font-weight:bold;\r\n    color:#FFF;\r\n    text-shadow:0px 01px 0px #000;\r\n}\r\n\r\n#content table thead a:hover {\r\n    background:none;\r\n    text-decoration:underline;\r\n    color:black;\r\n}\r\n\r\na:hover {\r\n    text-decoration:underline;\r\n}\r\n\r\nh1 {\r\n    font-size:1.9em;\r\n    font-weight:normal;\r\n    background:white;\r\n    color:#1e5eb6;\r\n    border-bottom:1px solid rgb(85, 112, 139);\r\n    padding:20px;\r\n    margin:0px;\r\n}\r\n\r\n#menu h1 {\r\n    padding:0px 0px 5px 20px;\r\n    background:none;\r\n}\r\n\r\nh2,h3 {\r\n    font-size:1.7em;\r\n    font-weight:bold;\r\n    background:transparent;\r\n    color:#34495e;\r\n    border-bottom:1px solid #f4f4f4;\r\n    padding:10px 0px;\r\n    margin:0px;\r\n}\r\n\r\nfieldset {\r\n    padding:5px;\r\n    border:1px solid #DEDEDE;\r\n}\r\ninput,select,textarea {\r\n    border:1px solid #e5e5e5;\r\n    margin:1px;\r\n    padding:0px;\r\n}\r\nselect{\r\n    padding:7px 4px;\r\n    background-color:#FFFFFF;\r\n}\r\n\r\ninput[type=submit] {\r\n    color:white;\r\n    background:#27ae60;\r\n    padding:4px 10px;\r\n    cursor:pointer;\r\n    border:0px solid;\r\n}\r\n\r\ninput[type=submit]:hover{\r\n    background:#2c3e50;\r\n}\r\n\r\ninput[type=checkbox]{\r\n    margin-right:5px;\r\n}\r\n\r\ninput[type=image] {\r\n    border:1px solid #d0cdc4;\r\n}\r\n\r\ninput[type=checkbox],input[type=radio]{\r\n    border:1px solid #e5e5e5;\r\n    padding:2px 5px;\r\n}\r\n\r\ncode{\r\n    background:#f0ffe1;\r\n    border:1px dashed #d5f1b9;\r\n    padding:2px 4px;\r\n    font-family:\"Monaco\",\"Courier New\";\r\n}\r\ncode a:hover{background:transparent}\r\n\r\ntable{\r\n\tmargin:10px 0px;\r\n\tborder:1px solid #E6E6E6;\r\n\tbackground-color:#FFFFFF;\r\n}\r\n\r\ntbody tr:hover td,tbody tr:hover th{\r\n    background:#edf4ff\r\n}\r\n\r\nthead {\r\n\ttop: 50px;\r\n}\r\n\r\nthead th, thead td {\r\n    text-align:center;\r\n    vertical-align:middle;\r\n    font-weight:bold;\r\n    white-space:nowrap;\r\n    background:#34495e;\r\n    color:#FFFFFF;\r\n    padding-right:10px;\r\n}\r\nthead th acronym, thead td acronym, thead th sup, thead td sup{\r\n    color:#CCDDFF;\r\n}\r\n\r\nth,td{\r\n    border:1px solid rgba(233,233,233,.3);\r\n    padding:3px 6px;\r\n    vertical-align:top;\r\n}\r\n\r\nth a {\r\n    font-weight:bold;\r\n    padding-bottom:0px;\r\n    text-shadow:1px 1px 1px #FFF;\r\n}\r\n\r\nth {\r\n    background:white;\r\n}\r\n\r\n.odds tbody tr:nth-child(2n) {\r\n    background:#fcfaf5;\r\n}\r\n\r\n.footer {\r\n\tborder-image: linear-gradient(rgba(242, 242, 242, 0), #f2f2f2) 100% 0;\r\n}\r\n\r\n.footer div {\r\n\tbackground: #f2f2f2;\r\n}\r\n\r\n#content tbody tr.checked td {\r\n    background:#fbe2e2;\r\n    color:red;\r\n}\r\n\r\n.hidden{\r\n    display:none\r\n}\r\n\r\n.error,.message{\r\n    padding:0px;\r\n    background:transparent;\r\n    font-weight:bold\r\n}\r\n\r\n.error{\r\n    color:#c00\r\n}\r\n\r\n.message{\r\n    color:#090\r\n}\r\n\r\n#content{\r\n    margin:0px 0px 0px 320px;\r\n    padding:50px 20px 40px 0px;\r\n    height:100%;\r\n}\r\n\r\n#lang {\r\n    background:#ecf0f1;\r\n    color:#808080;\r\n    position:fixed;\r\n    top:0px;\r\n    left:0px;\r\n    width:100%;\r\n    padding:10px 20px;\r\n    border: none !important;\r\n    z-index:1;\r\n}\r\n\r\n#breadcrumb {\r\n    position:fixed;\r\n    top:0px;\r\n    left:300px;\r\n    background:#48A5BF;\r\n    z-index:2;\r\n    width:100%;\r\n    color:#ecf0f1;\r\n    padding:10px;\r\n    font-size:15px;\r\n    font-weight:bold;\r\n}\r\n#breadcrumb a{\r\n    color:#ecf0f1;\r\n    font-size:15px;\r\n    font-weight:bold;\r\n}\r\n\r\n#menu {\r\n    background:#34495e;\r\n    position:fixed;\r\n    top:5px;\r\n    color:#FFF;\r\n    padding:20px;\r\n    padding-top:40px;\r\n    bottom:0px;\r\n    overflow:auto;\r\n    left:0px;\r\n    width:240px;\r\n    border-right:2px solid #34495e;\r\n}\r\n\r\n#menu p{\r\n    border-bottom:1px solid rgb(85, 112, 139);\r\n}\r\n\r\n#menu a{\r\n    color:#FFF;\r\n}\r\n\r\n#schema .table {\r\n    padding:5px;\r\n    background:#fcfaf5;\r\n    border:1px solid #d0cdc4;\r\n}\r\n\r\n#schema .table b {\r\n    color:#006aeb;\r\n    font-weight:bold;\r\n    text-decoration:underline;\r\n}\r\n\r\n#schema .table b:hover {\r\n    color:white;\r\n}\r\n\r\ninput[name=logout] {\r\n    color:#fce2e2;\r\n    background:#d73e3e;\r\n}\r\n\r\ninput[name=drop] {\r\n    background-color:#c0392b;\r\n}\r\n\r\ninput[name=logout]:hover {\r\n    background:#ea0202;\r\n}\r\n\r\n#logins a, #tables a {\r\n    background:none;\r\n}\r\n\r\n#logins a:hover, #tables a:hover {\r\n}\r\n\r\n#logout {\r\n    color:#FFF;\r\n    text-decoration:none;\r\n}\r\n\r\n#logout:hover {\r\n\tcolor:red;\r\n}\r\n\r\n.logout {\r\n\tposition: fixed;\r\n\tz-index:3;\r\n\tbackground-color: #48A5BF;\r\n\tbox-shadow: 0 0 4px 4px #48A5BF;\r\n}\r\n\r\n.logout form {\r\n\tcolor: #fff;\r\n}\r\n\r\n.js .column {\r\n    background:#ecf0f1;\r\n}\r\n\r\n#content table thead a.text:hover {\r\n    text-decoration:none;\r\n}\r\n\r\n#version, .version {\r\n    font-size:50%;\r\n}\r\n\r\n#h1:hover {\r\n    color:white;\r\n}\r\n\r\n\r\ninput[type=submit] {\r\n\tfont-size:13px;\r\n\tfont-weight:normal;\r\n\t-moz-border-radius:1px;\r\n\t-webkit-border-radius:1px;\r\n\tborder-radius:1px;\r\n\tborder:0px solid #469df5;\r\n\tpadding:4px 12px;\r\n\ttext-decoration:none;\r\n\tbackground-color:#65ADC3;\r\n\tcolor:#ffffff;\r\n\tdisplay:inline-block;\r\n\ttext-shadow:0px 01px 0px #287ace;\r\n \t-webkit-box-shadow:inset 0px 0px 0px 0px #cae3fc;\r\n \t-moz-box-shadow:inset 0px 0px 0px 0px #cae3fc;\r\n \tbox-shadow:inset 0px 0px 0px 0px #cae3fc;\r\n}\r\ninput[type=submit]:hover {\r\n\tbackground-color:#34495e;\r\n\ttext-shadow:0px 1px 0px #000;\r\n}\r\ninput[type=submit]:active {\r\n    position:relative;\r\n    top:1px;\r\n}\r\n\r\n\r\ntable\r\n{\r\n  position: relative;\r\n}\r\ntable:before, table:after\r\n{\r\n  z-index: -1;\r\n  position: absolute;\r\n  content: \"\";\r\n  bottom: 15px;\r\n  left: 10px;\r\n  width: 50%;\r\n  top: 80%;\r\n  max-width:300px;\r\n  background: #777;\r\n  -webkit-box-shadow: 0 15px 10px #777;\r\n  -moz-box-shadow: 0 15px 10px #777;\r\n  box-shadow: 0 15px 10px #777;\r\n  -webkit-transform: rotate(-3deg);\r\n  -moz-transform: rotate(-3deg);\r\n  -o-transform: rotate(-3deg);\r\n  -ms-transform: rotate(-3deg);\r\n  transform: rotate(-3deg);\r\n}\r\ntable:after\r\n{\r\n  -webkit-transform: rotate(3deg);\r\n  -moz-transform: rotate(3deg);\r\n  -o-transform: rotate(3deg);\r\n  -ms-transform: rotate(3deg);\r\n  transform: rotate(3deg);\r\n  right: 10px;\r\n  left: auto;\r\n}\r\n\r\n\r\n/* ==================add by warlee==================*/\r\n\r\n\r\n#lang {\r\n    top: 0;\r\n    left: 170px;\r\n    z-index: 10;\r\n    color: #485b6e;\r\n    width: 50px;\r\n    background: rgba(0, 0, 0, 0);\r\n}\r\n#lang select{\r\n    position: absolute;\r\n    left: 0px;\r\n    right: 0px;\r\n    top: 13px;\r\n    color: #677d8e;\r\n    width: 100%;\r\n    background: #4e6175;\r\n    border: none;\r\n    -webkit-appearance: none;\r\n    background: rgba(0, 0, 0, 0);\r\n}\r\n\r\n#menu {\r\n    top:-23px;padding:0;\r\n    bottom: 0;\r\n    width: 272px;\r\n    border-right:none;\r\n}\r\n#menu h1{\r\n    padding: 16px 0 5px 28px;\r\n    background: #3f576f;\r\n    border: none;\r\n}\r\n#menu h1:before {\r\n    content: \"Adminer \";\r\n    line-height: 40px;\r\n    color: #fff;\r\n    font-style: italic;\r\n}\r\n#menu h1 a {\r\n    display: none;\r\n}\r\n#menu h1 #h1{\r\n    font-size:24px;\r\n}\r\n.version {color: #677d8e;font-size:14px;}\r\n#breadcrumb {left: 290px;padding-left: 20px;}\r\n#breadcrumb a {\r\n    color: #ecf0f1;\r\n    font-size: 15px;\r\n    text-decoration: none;\r\n    font-weight: bold;\r\n    border-bottom: 2px solid rgba(255,255,255,0.5);\r\n    padding-bottom: 4px;\r\n    margin: 0 5px;\r\n}\r\n#breadcrumb a:hover{\r\n    color: #FFEB3B;\r\n    border-color: #FFEB3B;\r\n}\r\n\r\n#menu #logins{\r\n    padding: 15px 0;\r\n}\r\n#menu #logins a{\r\n    background: none;\r\n    padding: 4px 10px;\r\n    display: block;\r\n    text-decoration:none;\r\n    color: #b3d3f3;\r\n}\r\n#menu #logins a:hover{\r\n    background:#3f576f;\r\n}\r\n#menu #logins br{display:none;}\r\n\r\n\r\n#content {\r\n    margin: 0px 0px 0px 295px;\r\n}\r\n.links a{margin-right: 10px;}\r\n#menu p {\r\n    padding: 15px 0px 15px 20px;\r\n    border-bottom: 1px solid #41566b;\r\n}\r\n#menu #dbs{\r\n\tpadding: 10px 13px;\r\n    border: none;\r\n    background: #527290;\r\n    color: #3c5165;\r\n}\r\n#menu #dbs span{display:none;}\r\n#menu #dbs::before,\r\n#menu #dbs::after {\r\n    content: none;\r\n}\r\n#menu select{\r\n    background-color: #456079;\r\n    border: none;\r\n    color: #fff;\r\n    border-radius: 4px;\r\n    height: 23px;\r\n    line-height: 23px;\r\n\tmargin: 0;\r\n}\r\n#menu select:hover{background-color:#31475f;}\r\n\r\n#menu .links{\r\n    border: none;\r\n    background: #445f77;\r\n    padding: 0;\r\n    text-align: center;\r\n    display: table;\r\n\twidth: 100%;\r\n    overflow: hidden;\r\n    z-index: 99999;\r\n}\r\n#menu .links:last-of-type {\r\n    border-bottom-left-radius: 4px;\r\n    border-bottom-right-radius: 4px;\r\n}\r\n#menu .links .separator {\r\n    display: none;\r\n}\r\n#menu .links a {\r\n    padding: 6px 1px;\r\n    margin: 0;\r\n    display: table-cell;\r\n    font-size: 12px;\r\n    text-decoration: none;\r\n    color: #b3d3f3;\r\n}\r\n#menu .links a:hover{background: #507394;}\r\n#menu .links a:active{background: #5f83a5;}\r\n\r\n#menu #tables{\r\n    margin: 5px -15px !important;\r\n    position: absolute;\r\n    left: 15px;\r\n    right: 15px;\r\n    bottom: 0;\r\n    top: 180px;\r\n    overflow-y: auto !important;\r\n}\r\n\r\n#menu #tables li {\r\n    display: flex;\r\n    align-items: center;\r\n    width: 100%;\r\n    justify-content: space-between;\r\n    flex-direction: row-reverse;\r\n}\r\n\r\n#menu #tables li a.select {\r\n    width: auto;\r\n    background: none;\r\n    font-size: 11px;\r\n    padding: 5px 8px;\r\n    text-transform: capitalize;\r\n}\r\n#menu #tables li a.select:hover {\r\n    background: #253d56;\r\n    color: #fff;\r\n}\r\n\r\n#menus #tables a[title]:hover,\r\n#menus #tables a.active,\r\n#menus #tables a.select:hover+a,\r\n#menus #tables a.select.active+a {\r\n    border-radius: 6px;\r\n}\r\n\r\n#menu #tables li a.structure {\r\n    width: 100%;\r\n    text-overflow: ellipsis;\r\n    overflow: hidden;\r\n}\r\n\r\n.tables-filter input {\r\n\tmargin: 0 !important;\r\n\tbackground-color: #456079;\r\n\tborder-color: transparent;\r\n\tcolor: #fff;\r\n}\r\n\r\n.tables-filter input::placeholder {\r\n\tcolor: #fff;\r\n}\r\n\r\na,input,button{transition:all .168s;}\r\n.pages {\r\n    left: 290px;\r\n    bottom: 5px;\r\n    background: #feffff;\r\n    color: #666;\r\n    border-color: #acc6ce;\r\n}\r\n.pages a{\r\n    display: inline-block;\r\n    padding: 2px 6px;\r\n    color:#48A5BF;\r\n}\r\n.pages a:hover{\r\n    color:#fff;\r\n    text-decoration: none;\r\n    background: #48A5BF;\r\n}\r\n\r\n#ajaxstatus + .links{\r\n    /* border-bottom:1px solid #ccc; */\r\n}\r\n#ajaxstatus ~ .links .separator{\r\n    display:none;\r\n}\r\n#ajaxstatus ~ .links a {\r\n    border: 1px solid #ccc;\r\n    display: inline-block;\r\n    padding: 4px 1.5em;\r\n    border-radius:0px;\r\n    font-weight: bold;\r\n    color: #555;\r\n    letter-spacing: 1px;\r\n    text-decoration:none;\r\n    margin-right: -5px;\r\n    margin-bottom: -1px;\r\n    background: #f3f3f3;\r\n}\r\n#ajaxstatus ~ .links a.active,\r\n#ajaxstatus ~ .links a:hover {\r\n    background: #48a5bf;\r\n    color: #fff;\r\n    border: 1px solid #48a5bf;\r\n}\r\n#ajaxstatus ~ .links a.active + a{border-left-color:#48a5bf;}\r\ntextarea:focus,pre:focus,input:focus {\r\n    border-color: #75a1f0;\r\n    outline: none;\r\n    box-shadow: 0 0 4px #75a1f0;\r\n}\r\n\r\n#menu p#tables{padding:0;margin-top: 10px;border:none;}\r\n#tables a[title] {\r\n    float: none;\r\n    display: block;\r\n    color: #b9cbdc;\r\n    z-index: 1;\r\n}\r\n#tables a[title]:hover,\r\n#tables a.active,\r\n#tables a.select:hover + a,\r\n#tables a.select.active + a {\r\n    background-color: #3c536b;\r\n    font-weight: normal;\r\n}\r\n#tables br {display: none;}\r\n#tables a {\r\n    float: right;\r\n    text-decoration: none;\r\n    padding: 5px 16px;\r\n    line-height: 17px;\r\n    color: #48a5bf;\r\n    font-size: 13px;\r\n    position: relative;\r\n    z-index: 999;\r\n}\r\n#tables a.select:hover {\r\n    color:#FFC107;\r\n    background-color:#425b75;\r\n}\r\n#schema .table a b:hover{color:#f30;}\r\n\r\n\r\nselect, input[type=file]{\r\n    height: 27px;line-height: 27px;\r\n    background-color: #f6f6f6;\r\n    border: 1px solid #ddd;\r\n    border-radius: 3px;\r\n    cursor: pointer;\r\n    padding: 0;\r\n    padding-left: 10px;\r\n    outline: none;\r\n}\r\nselect:hover{background: #ddd;}\r\n\r\n\r\nthead th, thead td{position:relative;}\r\n.js .column {\r\n    position: absolute;\r\n    padding: 0;\r\n    z-index: 9;\r\n    left: 0px;\r\n    top: 30px;\r\n    background: #fff;\r\n    min-width: 60px;\r\n    width: 100%;\r\n    border: 1px solid #48a5bf;\r\n    border-top:none;\r\n}\r\n.js .column a {\r\n    text-align: center;\r\n    color: #fff;\r\n    font-weight: bold;\r\n    background:#48A5BF;\r\n    display: inline-block;\r\n    float: left;\r\n    height: 25px;\r\n    line-height: 25px;\r\n    width: 50%;\r\n    padding: 0;\r\n    border:none;\r\n    font-size: 15px;\r\n    font-weight: normal;\r\n}\r\n.js .column a:hover{\r\n    background:#34495e !important;\r\n    color:#fff !important;\r\n}\r\n\r\ninput:not([type]), input[type=\"color\"],\r\ninput[type=\"email\"],\r\ninput[type=\"number\"],\r\ninput[type=\"password\"],\r\ninput[type=\"tel\"],\r\ninput[type=\"url\"],\r\ninput[type=\"text\"],\r\ninput[type=\"search\"] {\r\n    padding: 5px 5px;\r\n    height: 27px;\r\n    border-radius: 3px;\r\n    margin: 0 4px;\r\n    box-sizing: border-box;\r\n}\r\ninput[type=\"radio\"] {\r\n    border: none;\r\n    display: inline-block;\r\n    margin: 5px;\r\n}\r\ntable input[type=\"radio\"]{margin:0;}\r\ninput[type=checkbox], input[type=radio] {\r\n    width: 14px;\r\n    height: 14px;\r\n}\r\n\r\ninput[type=submit] {\r\n    padding: 6px 14px;\r\n    border-radius:3px;\r\n}\r\nlabel { margin: 0 8px;}\r\nthead td, thead th{color:#fff;}\r\n\r\n#content tbody .odds tbody tr:nth-child(2n).checked td, .odds tbody tr:nth-child(2n).checked td {\r\n    background: #c8edff;\r\n    color: #03A9F4;\r\n}\r\npre, textarea {\r\n    font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\r\n    background:#fff;\r\n}\r\n.size {width: 9ex;}\r\n#help {\r\n    border: 1px solid #ffd149;\r\n    background: #fdedbc;\r\n    padding: 4px 8px;\r\n    color: #888;\r\n    border-radius: 2px;\r\n}\r\n#help a.jush-help{\r\n    color: #bb7103;\r\n}\r\n\r\n#schema + .links a{\r\n    position: fixed;\r\n    top: 66px;\r\n    right: 10px;\r\n    padding: 4px 8px;\r\n    background: #48a5bf;\r\n    color: #fff;\r\n}\r\n\r\n\r\ninput[type=image]{border:none;}\r\nh2, h3 {\r\n    font-size: 1.5em;\r\n    padding: 15px 0 0 0;\r\n    margin: 0px;\r\n    border-bottom: 1px solid #ddd;\r\n}\r\n.icon {\r\n    width: 23px;\r\n    height: 23px;\r\n    background-color: #48a5bf;\r\n}\r\n.logout {\r\n    z-index: 999;\r\n    position: fixed;\r\n}\r\n\r\n.js .checkable .checked td,\r\n.js .checkable .checked th {\r\n    background: #2196f3;\r\n}\r\n.footer > div{padding-left:10px;}\r\n"
  },
  {
    "path": "designs/paranoiq/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/paranoiq/screenshot.png)\n"
  },
  {
    "path": "designs/paranoiq/adminer.css",
    "content": "/**\r\n * Alternative style for Adminer. Zrobeno 7.4.2011\r\n * @author Vlasta Neubauer [@paranoiq]\r\n */\r\n\r\n/* -- fonts ----------------------------------------------------------------- */\r\nbody {\r\n    font-size: 11pt; }\r\nbody, select, option, optgroup, button {\r\n    font-family: Calibri, Arial, Helvetica, sans-serif; } /* IE6 */\r\ninput[type='submit'], input[type='reset'], input[type='button'], input[type='file'],\r\ninput[name$='[comment]'], input[name='Comment'] {\r\n    font-family: Calibri, Arial, Helvetica, sans-serif; }\r\ninput, textarea, pre, code, samp, kbd, var {\r\n    font-family: Consolas, \"Courier New\", monospace;\r\n    font-size: 10pt; } /* FF3 */\r\n\r\n\r\n/* -- links ----------------------------------------------------------------- */\r\na {\r\n    color: #007; }\r\na:visited {\r\n    color: #707; }\r\na:hover, input[name='logout']:hover {\r\n    color: #700;\r\n    text-decoration: none; }\r\nh1 a:visited {\r\n    color: #007; }\r\ninput[name='logout'] {\r\n    position: absolute;\r\n    bottom: 10px;\r\n    left: 33%; }\r\ninput[name='logout'] { /* IEx */\r\n    %position: static;\r\n    %background: transparent;\r\n    %text-decoration: underline;\r\n    %font-weight: bold;\r\n    %cursor: pointer;\r\n    %border: none;\r\n    %margin: 0;\r\n    %padding: 0;\r\n    %color: #007;\r\n}\r\n\r\n\r\n/* -- tables ---------------------------------------------------------------- */\r\ntable {\r\n    margin: 12px 12px 12px 0;\r\n    border: 1px #DDD solid;\r\n    border-collapse: collapse; }\r\ntd, th {\r\n    background-color: #FFF;\r\n    padding: 1px 2px;\r\n    border-left: 1px #DDD dotted;\r\n    border-width: 1px 0px 0px 1px; }\r\nth {\r\n    text-align: left !important; }\r\ntr:first-child td, tr:first-child th {\r\n    border-top-width: 0; }\r\ntd:first-child, th:first-child {\r\n    border-left-width: 0; }\r\nthead {\r\n\ttop: -1px; }\r\nthead td, thead th {\r\n    background-color: #EEE;\r\n    border: none;\r\n    border-bottom: 1px #DDD solid; }\r\n.nowrap tr:nth-child(2n) td, .nowrap tr:nth-child(2n) th {\r\n    background-color: #DEF; }\r\n.odds tbody tr:nth-child(2n) {\r\n    background-color: #DEF; } /* IEx */\r\ntr.selected td, tr.selected th {\r\n    background-color: #ABC !important; }\r\ntr:hover td, tr:hover th {\r\n    background-color: #BCD !important; } /* WTF? */\r\nthead tr:hover td, thead tr:hover th {\r\n    background-color: #EEE !important; }\r\n\r\n\r\n/* -- forms ----------------------------------------------------------------- */\r\nfieldset {\r\n    background-color: #DEF;\r\n    border: none;\r\n    %padding-left: 8px;\r\n    %border: 1px #DDD solid; /* IEx */\r\n    %background-repeat: repeat-x; /* IE8 */\r\n    %background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAIAAAC0tAIdAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAACJJREFUKFNj/P//PwPxAKiaeMBAvFKQK0ZVY4TAaJhgJgoAj5t2py3lrtoAAAAASUVORK5CYII='); }\r\nlegend {\r\n    color: #000;\r\n    background-color: #FFF;\r\n    %background-color: transparent; /* IEx */\r\n    padding: 0px 4px; }\r\nlegend a:visited {\r\n    color: #000; } /* IE6+7 */\r\ninput[name='limit'], input[name*='length'] {\r\n    width: 3em; }\r\ninput[name='text_length'] {\r\n    width: 5em; } /* ~FF3 */\r\nselect + input, select + select {\r\n    margin-left: 2px; }\r\ninput + label input, select + label input {\r\n    margin-left: 4px; }\r\ntd input[type='checkbox']:first-child, td input[type='radio']:first-child {\r\n    margin-left: 2px; }\r\nlabel:hover {\r\n    text-decoration: underline; }\r\nfieldset div {\r\n    margin-bottom: 2px; }\r\ninput[name='Comment'] { /* !!! */\r\n    width: 24em; }\r\ninput[name='Auto_increment'] { /* !!! */\r\n    width: 6em; }\r\ntextarea[name='definition'] {\r\n    height: 480px; }\r\ninput[name$='[comment]'] {\r\n    width: 24em; }\r\ninput[type='text'], textarea {\r\n    border: 1px #DDD solid; }\r\ninput[type='submit'], input[type='reset'], input[type='submit'], button, input[type='checkbox'], label, select, option {\r\n    cursor: pointer; }\r\n.minifieldset {\r\n    display: inline-block;\r\n    padding: 2px 4px;\r\n    background-color: #DEF;\r\n    -moz-border-radius: 5px;\r\n    -webkit-border-radius: 5px;\r\n    border-radius: 5px; }\r\n.minifieldset * {\r\n    margin: 0; }\r\n\r\n\r\n/* -- other ----------------------------------------------------------------- */\r\n.error {\r\n    padding: 8px; }\r\n.message {\r\n    padding: 8px;\r\n    color: #000;\r\n    background: #DDD; }\r\n.jush-sql {\r\n    padding: 2px 4px;\r\n    margin-right: 4px;\r\n    outline: 1px #BBB dashed;\r\n    font-size: 9pt; }\r\ncode {\r\n    background: transparent; }\r\n.nowrap td i {\r\n    color: #AAA; }\r\n\r\n/* -- structure ------------------------------------------------------------- */\r\n#content {\r\n    margin: 28px 0 0 192px;\r\n    padding: 10px 20px 20px 0; }\r\nh3 {\r\n\tmargin: 20px 0; }\r\n\r\n#lang {\r\n    height: 23px;\r\n    width: 180px;\r\n    display: block;\r\n    padding: 1px 0px;\r\n    text-align: center;\r\n    background-color: #EEE;\r\n    line-height: 1.25em; }\r\n#lang select {\r\n    font-size: 8pt; }\r\n\r\n#breadcrumb {\r\n    margin: 0;\r\n    height: 21px;\r\n    display: block;\r\n    left: 192px;\r\n    background-color: #DDD;\r\n    padding: 2px 12px;\r\n    line-height: 1.25em; }\r\n\r\n#menu {\r\n    margin: 0;\r\n    padding-bottom: 50px;\r\n    top: 38px;\r\n    width: 180px;\r\n    background-color: #DEF; }\r\n#menu p, #logins, #tables {\r\n    padding-left: 8px;\r\n    font-size: 10pt;\r\n    border-bottom: none; }\r\n#logins a, #tables a, #tables span {\r\n    background: #DEF;\r\n}\r\n\r\n.tables-filter {\r\n\tpadding-left: 8px;\r\n}\r\n\r\nh1 {\r\n    margin-top: 8px;\r\n    color: #000;\r\n    padding: 5px;\r\n    text-align: center;\r\n    font-size: 14pt;\r\n    border-bottom: none;\r\n    background: transparent;\r\n    font-style: italic;\r\n    text-shadow: #FFF 2px 2px 0px; }\r\nh1 #h1 {\r\n    color: #000;\r\n    font-weight: bold; }\r\nh1 #h1:hover {\r\n    text-decoration: underline; }\r\nh1 #h1:visited {\r\n    color: #000; }\r\n\r\nh2 {\r\n    margin: 0;\r\n    margin-bottom: 12px;\r\n    padding: 6px 18px;\r\n    background-color: #CDE;\r\n    border-bottom: none;\r\n    color: #000;\r\n    text-shadow: #FFF 0px 0px 4px; }\r\n\r\n#schema {\r\n    margin: 1.5em 0 0 220px; }\r\n#schema .table {\r\n    border: 1px solid #DDD;\r\n    background-color: #DEF;\r\n    padding: 0 2px; }\r\n\r\n\r\n/* -- GUI adjustments ------------------------------------------------------- */\r\nlegend a {\r\n    color: #000;\r\n    text-decoration: none;\r\n    cursor: default; }\r\nlegend a:hover {\r\n    color: black; }\r\n\r\nselect[name^=\"columns\"] optgroup:last-child option:nth-child(3)::before {\r\n    content: \"count \"; }\r\ninput[name$=\"[collation]\"] {\r\n    max-width: 120px; }\r\n\r\n.logout a:first-child, p a {\r\n    margin-right: 8px; }\r\n#tables a, #breadcrumb a, p.pages a, p code + a {\r\n    margin-right: 0; }\r\n.logout a::before, p a::before {\r\n    content: '» '; }\r\n#tables a::before, #breadcrumb a::before, p.pages a::before, p code + a::before {\r\n    content: ''; }\r\n#form + p a:first-child::before {\r\n    content: ''; }\r\n\r\n\r\n/* -- eye candy ------------------------------------------------------------- */\r\nfieldset, legend, h2, .error, .message {\r\n    -moz-border-radius: 5px;\r\n    border-radius: 5px; }\r\n#breadcrumb, #lang, #menu {\r\n    -moz-border-radius-bottomright: 5px;\r\n    border-bottom-right-radius: 5px; }\r\n#breadcrumb {\r\n    -moz-border-radius-bottomleft: 5px;\r\n    border-bottom-left-radius: 5px; }\r\n#menu {\r\n    -moz-border-radius-topright: 5px;\r\n    border-top-right-radius: 5px; }\r\nfieldset, h2, .error, #breadcrumb, #lang, #menu, #breadcrumb, #menu {\r\n    x-moz-box-shadow: 1px 1px 3px #DDD;\r\n    xbox-shadow: 1px 1px 3px #DDD; }\r\nfieldset table {\r\n    x-moz-box-shadow: none;\r\n    xbox-shadow: none; }\r\n\r\n\r\n/* -- printing -------------------------------------------------------------- */\r\n@media print {\r\n\t#lang, #menu {\r\n        display: none; }\r\n\t#content {\r\n        margin-left: 1em; }\r\n\t#breadcrumb {\r\n        left: 1em;\r\n        background: none;\r\n        border-bottom: 1px silver dashed;\r\n        box-shadow: none; }\r\n\th2 {\r\n        background: none;\r\n        box-shadow: none; }\r\n\tp.tabs {\r\n        display: none; }\r\n}\r\n"
  },
  {
    "path": "designs/pepa-linha/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/pepa-linha/screenshot.png)\n"
  },
  {
    "path": "designs/pepa-linha/adminer.css",
    "content": "/*\n * Theme by Pepa Linha [http://webdream.cz]\n * JUSH color syntax inspired by NetBeans\n */\n\nhtml,\nbody {\n\theight: 100%;\n}\n\nbody {\n\tfont-family: \"Segoe UI\", Arial, sans-serif;\n}\n\nh1 {\n\tmargin: 0;\n\tpadding: 0;\n\tbackground: none;\n\tborder: 0;\n}\n\nh2 {\n\tmargin: 0;\n\tpadding: 0;\n\tbackground: none;\n\tborder: 0;\n\tfont-family: \"Segoe UI Light\", \"Segoe UI\", Arial, sans-serif;\n\tfont-size: 32px;\n\tfont-weight: normal;\n\tcolor: #34567c;\n\tborder-bottom: 1px solid #ebebeb;\n\tpadding-bottom: 6px;\n\tmargin-bottom: 40px;\n}\n\n.rtl h2 {\n\tmargin: 0;\n\tmargin-bottom: 40px;\n}\n\nh3 {\n\tfont-size: 22px;\n\tmargin: 0 0 10px;\n\tborder-bottom: 1px solid #ebebeb;\n\tpadding: 0;\n\tpadding-bottom: 6px;\n}\n\np {\n\tmargin: 0;\n\tmargin-bottom: 15px;\n}\n\na {\n\tcolor:#2e84e4;\n\ttext-decoration:none;\n}\n\na:visited {\n\tcolor: #34567c;\n}\n\na:link:hover,\na:visited:hover {\n\tcolor: #2e84e4;\n\ttext-decoration:underline;\n}\n\n/* otravuje pri prochazeni formulare klavesama */\na[href*=charsets] {\n\tdisplay: none;\n}\n\ntable {\n\tborder: 0;\n\tmargin: 0;\n\tmargin-top: 15px;\n}\n\nth, td {\n\tborder: 0;\n\tpadding: 6px;\n}\n\nth {\n\tbackground: none;\n\tcolor: #34567c;\n\tfont-weight: normal;\n}\n\ntbody tr:hover td,\ntbody tr:hover th {\n\tbackground: none;\n}\n\nthead td,\nthead th {\n\tbackground: #34567c;\n}\n\nthead td,\nthead td a,\nthead td a:link:hover,\nthead td a:visited,\nthead td a:visited:hover,\nthead th,\nthead th a,\nthead th a:link:hover,\nthead th a:visited,\nthead th a:visited:hover {\n\tcolor: #fff;\n}\n\ntable.checkable,\np.links + table,\npre + table,\n#edit-fields,\np + table,\nh3 + table {\n\tborder: 1px solid #bbb;\n\tmargin-bottom: 15px;\n}\n\ntable.checkable tbody tr:hover td,\ntable.checkable tbody tr:hover th {\n\tbackground: #ffffd9;\n}\n\n.js .checkable .checked td,\n.js .checkable .checked th {\n\tbackground: #fbfabc;\n}\n\n.js .checkable thead .checked td,\n.js .checkable thead .checked th {\n\tbackground: #bfb008;\n}\n\n.odds tbody tr:nth-child(2n) {\n\tbackground: #f5f5f5;\n}\n\nfieldset {\n\tdisplay: inline-block;\n\tpadding: 15px;\n\tpadding-top: 5px;\n\tmargin: 0 0 15px;\n\tborder: 0;\n\tbackground: #f5f5f5;\n}\n\nfieldset select {\n\tmargin-right: 5px;\n}\n\nfieldset input[type=button],\nfieldset input[type=submit],\nfieldset p {\n\tmargin-bottom: 0;\n}\n\nfieldset div p {\n\tmargin-top: 10px;\n}\n\nlegend {\n\tdisplay: inline-block;\n\tpadding: 6px 15px;\n\tmargin: 0 0 0 -15px;\n\tbackground: #f5f5f5;\n\tfont-family: \"Segoe UI Semibold\", \"Segoe UI\", Arial, sans-serif;\n}\n\nlegend a,\nlegend a:link:hover {\n\tcolor: #000;\n\ttext-decoration: underline;\n}\n\ncode {\n\tbackground: none;\n}\n\np code,\npre code,\npre[contenteditable=true] {\n\tpadding: 10px 15px;\n\tdisplay: block;\n\tfont-size: 17px;\n\tmargin-bottom: 15px;\n}\n\np code + a,\np code + a:link:hover,\np code + a:visited:hover {\n\tmargin-left: 15px;\n\tposition: relative;\n\ttop: -20px;\n\tcolor: #000;\n\tfont-size: 12px;\n\ttext-decoration: underline;\n\ttext-transform: lowercase;\n}\n\n#content {\n\tmargin: 0;\n\tmargin-left: 400px;\n\tmargin-right: 54px;\n\tpadding: 0;\n\tpadding-top: 50px;\n}\n\n#content > p {\n\tmargin-bottom: 15px;\n}\n\n.rtl #content {\n\tmargin: 0;\n\tmargin-left: 54px;\n\tmargin-right: 400px;\n\tpadding: 0;\n\tpadding-top: 50px;\n}\n\n#menu {\n\twidth: 347px;\n\tborder-right: 1px solid #dae8fa;\n\tbox-shadow: inset -1px 0 0 #fff;\n\tmargin: 0;\n\tpadding: 0;\n\ttop: 0;\n\tbackground: #f4f8fd;\n\tbottom: 0;\n\tposition: fixed;\n\tpadding: 0 15px;\n\tbox-sizing: border-box;\n}\n\n#menu h1 {\n\tline-height: 50px;\n\tpadding-top: 9px;\n\ttext-transform: lowercase;\n\tmargin: 25px 0 10px 16px;\n}\n\n#menu h1 a {\n\tfont-style: normal;\n}\n\n#menu h1 .version {\n\tcolor: #2e84e4;\n}\n\n#menu a {\n\tcolor: #34567c;\n}\n\n#menu p, #tables {\n\tborder: 0;\n\tpadding: 0;\n}\n\n#menu #dbs {\n\tbackground: #fff;\n\tpadding: 0;\n\tborder: 1px solid #dae8fa;\n\tborder-bottom: 0;\n\tbox-sizing: border-box;\n\tcolor: #fff;\n}\n\n#menu #dbs select {\n\toutline: 0;\n\tborder-color: rgba(0, 0, 0, 0.1);\n}\n\n#menu p.links {\n\tmargin: 0 0 15px;\n\tborder: 1px solid #dae8fa;\n\tborder-top: 0;\n\ttext-align: center;\n\tdisplay: table;\n\twidth: 100%;\n\tbox-sizing: border-box;\n}\n\n#menu p.links a {\n\tpadding: 8px;\n\tmargin: 0;\n\tdisplay: table-cell;\n\tfont-size: 12px;\n}\n\n#menu p.links a:hover {\n\tcolor: #2e84e4;\n}\n\n#menu p.links a.active {\n\tfont-weight: normal;\n\tbackground: #fff;\n\tcolor: #000;\n}\n\n.tables-filter {\n\tpadding: 0;\n\tmargin-top: 32px;\n}\n\n#content p.links {\n\tmargin: -10px 0 15px;\n}\n\n#content p.links a {\n\tpadding: 8px;\n\tmargin: 0;\n\tdisplay: table-cell;\n\tborder: 1px solid #fff;\n}\n\n#content p.links a,\n#content p.links a:visited,\n#content p.links a:hover {\n\tcolor: #2e84e4;\n}\n\n#content p.links a.active {\n\tfont-weight: normal;\n\tborder: 1px solid #2e84e4;\n\tbackground: #f4f8fd;\n}\n\n#tables {\n\tmax-height: 100%;\n\tmargin: 32px -15px !important;\n\tposition: absolute;\n\tleft: 15px;\n\tright: 15px;\n\tbottom: 0;\n\ttop: 220px;\n\toverflow: hidden !important;\n\toverflow-y: auto !important;\n}\n\n.rtl #tables {\n\toverflow: hidden !important;\n\toverflow-y: auto !important;\n}\n\n#tables a {\n\tfloat: right;\n\tpadding: 6px 15px;\n}\n\n.rtl #tables a {\n\tfloat: none;\n}\n\n#tables .structure, #tables .view {\n\tfloat: none;\n\tdisplay: block;\n}\n\n.rtl #tables a:first-child,\n.rtl #tables br + a {\n\tfloat: left;\n\tdisplay: block;\n\tmargin-left: 15px;\n}\n\n#tables a:hover,\n#tables a:hover + a,\n#tables a.active,\n#tables a.active + a {\n\tbackground: #fff;\n\tcolor: #2e84e4;\n}\n\n#tables br {\n\tdisplay: none;\n}\n\n.js .column {\n\tbackground: #2e84e4;\n}\n\n.js .checked .column {\n\tbackground: #7b7105;\n}\n\n.pages {\n\tleft: 400px;\n\tbackground: #34567c;\n\tcolor: #fff;\n\tfont-weight: bold;\n\tborder: 0;\n\tdisplay: inline-block;\n\tposition: static;\n}\n\n.pages a,\n.pages a:link,\n.pages a:link:hover,\n.pages a:visited,\n.pages a:visited:hover {\n\tcolor: #fff;\n\tfont-weight: normal;\n}\n\n#breadcrumb {\n\tmargin: 0;\n\tleft: 400px;\n\tbackground: none;\n\tpadding: 0;\n\tpadding-top: 25px;\n\tfont-size: 12px;\n}\n\n#breadcrumb a {\n\tcolor: #aeaeae;\n\ttext-decoration: underline;\n}\n\n#breadcrumb,\n#breadcrumb a:hover {\n\tcolor: #666;\n}\n\n.rtl #breadcrumb {\n\tmargin: 0;\n\tpadding: 0;\n\tpadding-top: 25px;\n\tright: 400px;\n}\n\n.logout,\n.rtl .logout {\n\ttop: 30px;\n\tright: 54px;\n\tmargin: 0;\n}\n\n.rtl .logout {\n\tright: auto;\n\tleft: 54px;\n}\n\ninput:not([type]),\ninput[type=\"color\"],\ninput[type=\"email\"],\ninput[type=\"number\"],\ninput[type=\"password\"],\ninput[type=\"tel\"],\ninput[type=\"url\"],\ninput[type=\"text\"],\ninput[type=\"search\"] {\n\tborder: 1px solid #bbbbbb;\n\tpadding: 6px;\n\tmargin: 0;\n\tbox-sizing: border-box;\n}\n\ntable:not(#table) input:not([type]),\ntable:not(#table) input[type=\"color\"],\ntable:not(#table) input[type=\"email\"],\ntable:not(#table) input[type=\"number\"],\ntable:not(#table) input[type=\"password\"],\ntable:not(#table) input[type=\"tel\"],\ntable:not(#table) input[type=\"url\"],\ntable:not(#table) input[type=\"text\"],\ntable:not(#table) input[type=\"search\"] {\n\tmin-width: 280px;\n}\n\ninput[type=submit],\ninput[type=button] {\n\tborder: 0;\n\tpadding: 7px 12px;\n\tcursor: pointer;\n\toutline: 0;\n\tbox-shadow: none;\n\tbackground: #2e84e4;\n\tcolor: #fff;\n\tfont-weight: bold;\n\tmargin-bottom: 5px;\n\ttransition: background .4s ease;\n}\n\ninput[type=submit][disabled],\ninput[type=button][disabled] {\n\tbackground: #aeaeae !important;\n\tcolor: #e9e9e9;\n\tcursor: not-allowed;\n}\n\ninput[type=submit]:hover,\ninput[type=button]:hover,\ninput[type=submit]:focus,\ninput[type=button]:focus {\n\tbackground: #34567c;\n}\n\n.logout input[type=submit] {\n\tbackground: #f40204;\n}\n\n.logout input[type=submit]:hover {\n\tbackground: #d50204;\n}\n\ninput.default,\ninput.default {\n\tbox-shadow: none;\n\tbackground: #2e84e4;\n\tcolor: #fff;\n\tfont-weight: bold;\n}\n\nselect {\n\tbox-sizing: border-box;\n\tmargin: 0;\n\tpadding: 6px;\n\tborder: 1px solid #bbbbbb;\n}\n\nlabel {\n\tcursor: pointer;\n\tmargin-right: 6px;\n}\n\n.error,\n.message {\n\tmargin: 0;\n\tmargin-bottom: 15px;\n}\n\n#logins a,\n#tables a,\n#tables span {\n\tbackground: none;\n}\n\n#form > p {\n\tmargin-bottom: 15px;\n}\n\n#schema .table {\n\tpadding: 6px;\n}\n\n#schema .table a {\n\tdisplay: block;\n\tmargin: -6px;\n\tmargin-bottom: 6px;\n\tpadding: 6px;\n\tcolor: #fff;\n\tbackground: #34567c;\n}\n\n#schema .table br {\n\tdisplay: none;\n}\n\n#schema .table span {\n\tdisplay: block;\n\tmargin-bottom: 1px solid #f5f5f5;\n}\n\n#lang {\n\tposition: fixed;\n\ttop: 55px;\n\tright: 100%;\n\tz-index: 10;\n\tmargin-right: -340px;\n\tline-height: normal;\n\tpadding: 0;\n\tleft: auto;\n\tfont-size: 0;\n}\n\n#lang select {\n\tfont-size: 12px;\n\tpadding: 0;\n\ttext-align: right;\n\tborder: 0;\n\tbackground: none;\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\tcursor: pointer;\n\toutline: 0;\n}\n\n#lang select option {\n\ttext-align: right;\n}\n\n.rtl #lang {\n\tmargin-right: 0;\n\tleft: 100%;\n\tmargin-left: -261px;\n\tright: auto;\n}\n\n.jush {\n\tcolor: #000;\n}\n\n.jush a {\n\tcolor: #3939f2;\n}\n\n.jush-sql a,\n.jush-sql_code a,\n.jush-sqlite a,\n.jush-pgsql a,\n.jush-mssql a,\n.jush-oracle a,\n.jush-simpledb a {\n\tfont-weight: normal;\n}\n\n.jush-bac,\n.jush-php_bac,\n.jush-bra,\n.jush-mssql_bra,\n.jush-sqlite_quo {\n\tcolor: #009900;\n}\n\n.jush-php_quo,\n.jush-quo,\n.jush-quo_one,\n.jush-php_eot,\n.jush-apo,\n.jush-sql_apo,\n.jush-sqlite_apo,\n.jush-sql_quo,\n.jush-sql_eot {\n\tcolor: #ce7b00;\n}\n\n.jush-num,\n.jush-clr {\n\tcolor: #000;\n}\n\n@media print {\n\t.logout {\n\t\tdisplay: none;\n\t}\n\n\t#breadcrumb {\n\t\tposition: static;\n\t}\n\n\t#content {\n\t\tmargin: 0;\n\t}\n}\n"
  },
  {
    "path": "designs/pokorny/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/pokorny/screenshot.png)\n"
  },
  {
    "path": "designs/pokorny/adminer.css",
    "content": "/**\r\n * Alternative style for Adminer.\r\n * Created by Miroslav Pokorný [http://fuch.cz].\r\n * Icons by Yusuke Kamiyamane [http://p.yusukekamiyamane.com/] (some of them were modified).\r\n * Slightly inspired by themes created by Martin Hořínek and Klemens Häckel.\r\n */\r\n\r\n/*** Fonts ***/\r\n@import url(//fonts.googleapis.com/css?family=Ubuntu:300&subset=latin,latin-ext);\r\n@import url(//fonts.googleapis.com/css?family=Ubuntu+Mono&subset=latin,latin-ext);\r\n* {\r\n    font-family: 'Ubuntu', sans-serif\r\n}\r\ntextarea, pre, code, samp, kbd, var {\r\n    font-family: 'Ubuntu Mono', Consolas, 'Courier New', monospace\r\n}\r\n/*** Icons ***/\r\n/* Error message */\r\nhtml>/**/body .error {\r\n    background: #FFEEEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlpJREFUeNqkU8tu2lAQHT8wtlEQcUKUIjVVgaiCVkhIlSq1isSKTdRNuu5P8AX5Alb9g+6zqZR8QNWmC3ZRa1UJIm0hAWpeNthg/OiMechl00UtHXvuvXPOnbn3mPF9H/7n4en1nmGAwy+BAUghTjB8iThY5v1EfMatzhB3Lg4Ib3FzfkPwdUSSKulCIZs6PFSkeFykCi1dL95dXx81rq7e2JZVxbwPf1WwIkuJxOmL4+Ocz/PSzHHgvtEIFhRFkfdzOTmZTu/ULi5OJ6MRrERYemFZKU4UK8VyOTcyTWk4HEKr1YLC+XkAimluPJ1Kz0qlHBuNVoizFsB+Tg7y+ezAMKQRqhuGAaZprkujmOZ0XQcDRfYymay7OKdFCw7Aq61kUtH6/TVpPB5Dp9MJSLfYiue6i555Hna3txXi4PDdSuChx7Kig3278zkYgwGYkwk0m02IRCLA4jy3Usb1qWmKxAlXAA4u2FQ6VuHjbhGcI3IsFgNh47Q5zHXCtzAH+GV0u0Vf02QpZCy1VAq+8Y27ntv2lDjrQ0S1T912u7eF/ck4lheGgpKqQrleD2I5BN2y+sQJC5zd9np1YFlLRldSUhQhCEKwYzRE9jzPas9mN8RZC3hoz4nrVi81TcUFS0KRJM5/yWQCUCwhbCTXxmPV9LwqcYjLkFUZJDzCwXN042OWreQEIftEEJQEx4mUNHTd6Xfb7qu2fdNAcg1d+IMMSNylAB3mDmIX7bWfBzjaA3iKV/dgabT7LsDXbwAfcVsM4TdCQ66zEmBDbfL/+IPJURMyKHK9PwIMAA7iHkoee771AAAAAElFTkSuQmCC\") no-repeat 0.8em center;\r\n    padding-left: 38px;\r\n}\r\n/* Ok message */\r\nhtml>/**/body .message, html>/**/body #menu p.message {\r\n    background: #EEFFEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnZJREFUeNqkk01PE0EYx/+zu/TNanTbGCjWhrCmlp6MGl94kUQ9eOCC8chHMDG9mHjiE/QjePGOJsR4QQ8Q0UOJHqgVA6kiKQXa0th97+4OM1tq25MHJ/lvdmae3z/PzDMPoZTif4bEP+RVHBAJE5+QBAjm2d9dpsuncbtM66BYAqUVuGzmUtCFWsegb8yFpEAuPZpWUvGkHA1GQzw/zVSv/aztTm9Vfjy22laeLS0PZNCFzwXPLs5mZzISpLBjO1BttbsXGZfHIkn5Umy1uLbYMvx130TwtykSQSGQm746mbE0K6yqKkzTHFC1WoXe1MK3lVuZABnKcaZn4NL5K8PjiqmaYV3XYRjGgOr1OtZn3mJh5Akcox1OxZIKZ3oGDp2MR+Nyq9VCs9mEZVloqS0cHB6gXC7jdfol9vb28GhoFpvFTXiGJ3OmdwcOTQoQQpqmYePhCpQ3N6HbOii76Y17K36IKIqYeDfpV8q0zRBn+jOA67p4rjzFzs4Ovtz/ACp2YEmSfGXfTwFRFhtm4ZLjMz2DNv1d047MZ6UX/vT4+Bgbd/rgVQZf4LXoyCaWyZn+DD5Wj/Yboixi6vvcX9CHPzH4Yg/mMv/oDc70Gyw1d+vbAohBRgmubz7owAUGjw7CnucaVlXf5kzPwKMVV3Py9c/7Jep4BkkRZL8yONU5c1ee7RhqoVHydC/PGb8NeDMRwvogxa73hjAnjIm5QOaMEkhHZPG8FPKfSdMx7S29YZe0ba/s5lHwlvHLhc+eGvByxpjiSJBhTJBpdu4sK9lI56FhH4co4htdQ4UespUjphpjna6B0HdS6R8dzHtRY9IZ650IMACI9kBqNfbjbgAAAABJRU5ErkJggg==\") no-repeat scroll 0.8em center; padding-left:38px;\r\n}\r\n/* Sql */\r\nhtml>/**/body a[href$=\"sql=\"] {\r\n    background: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARpJREFUeNrE0z9LQlEYx/Fr/gXdJILegSQJEk13yrUxxDFwUhqagyAEF8E34BsIFKlozpqao8K9WVrCJSWu30d+F44SOjj4wId77nPOeTjn3HMjQRB4m8SOt2Fsv0CE8HleYoRdnGEPF8jhB4+4xw0ONLc7R4E7VJBX23JNtJBFSflD9YXjrT3fQhxpfKqqRQEf+MaLxuTVF3e3bo02yjjBrTMojD+9R52+sO3F8KxC13YmeELCHbT0vtBnE6ua1EfDGZRQO7qiQNEK1LiNRzynSKpjCJ+8fY1T5d/VZ+2Y5nQs8YVXPW01+zjGg3JvuFK+q1yoZ3tOaVnJpcOzqOtwzzF28rbaX0zWXbQMBvqc/r83cet/40yAAQCHjz1eQkhXqAAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Dump */\r\nhtml>/**/body #dump {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqMU8+LElEc/8w4qeM4urvsCgqpEO7VYu/9YAmkNqiDRNdOQtC5k3QIL127BF78G+rQqegQlBRRhz24S0jWuumOrs74c2be9H2jkuJi+4XPvMe87/f73ufzPk/IZrOYxh1CFOeLOuEVn0izP6PRKFosFl/2ej0MBgNYlo1m06A5g98vQ1VVhEIhhMMh5HL3H3k8Hiw04GFZFjqdDjRNcxs0GjqGIwZFUWHZFkSPiIAiLxxFXHlQAXBocAQ2ASY4fwNKnxQ602LbxXzMU/hSKBRep9PpPcYY+v3+lIpFGvgRDAaJfxiVSuUN5X4+q8FOPp/fmxexcdJFbziG1+dFUFUQJhFv3r6XeZx7yG+g/F8R/5x00BuPIZNwJltD9WAffUNHq9VyeM5Sg2UR/3Fngo3uaRuZBxm6xhzX7grh60oRGbPAzCH6py38qlRgmia0Yw2H2uELWr7OaQszJ5KRduLx+NN5EU3bxPrWOhKXEohejCKgBhY2SG2mnkg8ebIbWxLx5+9jNNtNHOz/wLdP3zEaDLF7dxeRWATbW9t5QRDei7VaDbquwzAMZyZivV4nHKHV0WBYA1zYUJC4nMKYBJ0WP6M93xI+iuVyGdVqlSsvrTQTQVkLovi8iGQy2ZZl+YNt2+4tyGQONRaLBSRJcs3i9XpdCh6fjMCwC9EnQAnKuHrrmuuFUqkk0IkjVKuT27FBiFHHG47jbPKuNE5fAoimwD8QRZGPDp/TepN0ekfrR38FGAASfDL3E+dZ1QAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Modified adminer logo */\r\nhtml>/**/body h1 {\r\n    box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;\r\n    font-size: 1em;\r\n    padding: 6px 6px 5px 1em;\r\n}\r\n/* Logout */\r\nhtml>/**/body input[name=\"logout\"], #logout {\r\n    background: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqMU01rE1EUPZkMaGI+JEMkXyaNiKINzSJLBSEEaRbRVf6Ai1Jw68K9O3dCN3ZR/AUxC0UCwW4k4KKoGKVioGATg4kNY2aSTDqZifdOmmmKFr1weG/e3HPeue++59i4BTgceAogg3/H6+kUm+YUDdMEaIRICyBkvPeeZVwul5XlIEVBEGyMXz7C8vJ1HHz/ttT49C4/UPqvKG2T0BANcybNZEmSTpCdTqeFPcqp1Wr8X1q5eVtSep3w14/v8yoJCSwwF/kbmedsN5lMotlsol6vo6eMpBurd1OmgawwMQDGnCzLMkajkU3mkTeYUp2hUAjRaBStVgu6rmNC6yKTOex6x2MLPA8EAhBF0RIwyQaL8Oj1emEYBoF4X4SLIOwwiS3yj2KxiG63i06nYzngTRYFZmWZMwcfxgE2sLNRKNi9GgwGKNB3uVxGIpGwHbC4oihQVdWas7AY1/aZkymVSrZALpdDtVpFPB7/w8H+Txnp+1uYvHkyK+EqeiBkgsEgUqmUpVypVBCLxRCJRGaHuCDAF+fFwzvHDvSjQ+REPjCPx2PdBxbgNe7O5KgEjnjkAiT/udkZsMBYPxZgsIv5nMkM6pjVWo65EDvgzYXnbUBWcKLvi2SO/hDw+/3QNM3CXECldfHHIc7vKdh9vJo97QEJ7rP4PD1wp69cuxT2+XxSu922nPQHJEAJ2lsdDzjx1Dd4iNG6PJS2t+trZ1zu/Ep6KUxuJZWqcuA/Yz0O/KIdlSEuazrWqIIsNWT3twADAMZTN2W0KIqPAAAAAElFTkSuQmCC\") no-repeat 2px bottom;\r\n    border: none;\r\n    cursor: pointer;\r\n    height: 18px;\r\n    line-height: 18px;\r\n    overflow: hidden;\r\n    padding: 0;\r\n    position: absolute;\r\n    right: 8px;\r\n    text-indent: 18px;\r\n    top: 5px;\r\n    width: 18px;\r\n}\r\n/* Alter table */\r\nhtml>/**/body a[href*=\"&create=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAl1JREFUeNqck19IU1Ecx7/3drfrXVpJf6BEx53bjK02UaLIJdQsiOrJJvVaL/UePgS52LvPKdRe68GCQOohg4gYmGTZnEzndNPWXpqbNPfH3T+dc3BrDp888OP8zv2d7+/3+f24h/P5/bcAnMT+VlrQNO3URCAwth/17ZGRB4KmqpxODte+Abqu14wkZqbTvf68E//qPQKq5VVV5ekFuq52cmwfsPz3vcT3ynrte9WnGqoVVEXhVJaAw4e4DotQIp0VWOUBiVRMa+BInPpazSdi/RCoVlAUZReB9quIR45Wdp5ZWsI5u535oUgEF51O5n+emyMEHaDaOgIwAq8IfF9ZYf0ebGrCdDTKem6WJHwJh5lPF9VQLU+zqORy/QzOmM1wyTK2SiX02GzoJRT5YhHnHQ5cIBQiocn5fDi7uGhnLTQSzCeTjEASRczGYqyqidIsLCC3sYHc6io83d3oGR29ziuVSq2FKsHp9nY4CEWxXIarsxNuqxUFQmM/+gfq5ibuDg/j2fY2ptzuqV1DrBJE19cZgWg04mc8zgiMlXn8CI3hZr8HjwMzGBwaQjCRWKYEfCOBra0NXYSiTKo4ySzMLWlk4+PwEvHkuxA8fTIsZC5UK5RLpQONBLFUihHQFQ5PIJ98gSuX+vDq9Ue0Wu+h+UQv+5GoVshmMqLBYECwK7/zh4u1t1XIxPB7+SUTvyWV3Zf9OGbuZzGqoVpOkuWHvMnUsddjueNMeZ4Hpz1Pn7jW3oePhyLpw4n6uFYorNGmJWItxIQ9cqTu3+Ams1sYf/NJn22IKcT+/hNgALjZYbRNSSf5AAAAAElFTkSuQmCC\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Create table */\r\nhtml>/**/body a[href$=\"&create=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi9JREFUeNqck8trE1EUxr+ZTjKZ+kB31UwtSUiVRFykRsGFKGkEF7qqe5e6FARdtVBc+B+0brTg1pU7dSGIWm2sMebRkDQNTVMSoUWC2qZmHp57kkzTuFB64HK/MzPfub9z517pxtTUNQDHsL+oKZZlHX82PT27H/fE5OQtxTJNyabkyiJg27YzqDAPW8y9eef9QuwIhFc2TVMWH4iIBySex/27OkY65rOd510tPMKrmIYhmVxAwquSDb/SpM62eOVxjVasWZDovdCWo8lsH4bwKoZh7CGwqtu4GzrKeaJQQHR0lPX7bBYXwmHWb1IpIjgB4e0hABPEVCC5ssL9HvB48DGf554PahreptOsRQiPQ2DSx7sEwOmREc6/lEqIBINtGip0PhRiPZ/JQHiYgAv0EWRWV5lAU1V8LhZ51UFBk8vtIWgXaLWcFroEp4aHOc+UyzgTCLBO0n483ZlDspGGbul4EnoE4ZV7N1EQiMivrSFHFKrbja/URmp5GR6ieVddwNnoGAq/ivwbuwRyP0HQ6+V8iYqEfT7cSdzDfP0TBqlIw2wALQvxF1dRCX+bUHaazQGrbw+K6+u8ByKy1MaHSgLeeLvohrEB76XOAuUlXfm+uam6XC48Pvmzc8LVv+7WuWoUqZfJ9gm8LEN+TQdKorniriuNWq3uj0Qe/s/l2b5evTl0UR+q56t17bk+J2+5KuLAazQO0VD+WeG2+wH9vzEMSIuY+X2fnvz4I8AAYtpfN5Cu7WwAAAAASUVORK5CYII=\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Create new database */\r\nhtml>/**/body #content a[href*=\"&database=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjpJREFUeNqUkr+LE1EQx7/7g93sJptERPFSbCGSJkUKK20CinB4d8UVQWytAqIiWEoKi4CVlYJwWNwfoMVZCIJWFhcuTQiCORFDJN5tNtns5TY/Nm93fW8TNcHTOwdmZ1hm5s18Zrh8Po+ZrFFdwsnkO9Ut5og//4zH46WNjY3njuNgOByCEA/t9iH1fUQiCjRNQzweRyIRR6Fw47YgCFgowIQQAtu20el0wgKG0cdo7CMa1UA8Al7goUaVhVb4fzbKAQE1AedPFVM9eQEaPk0MZsleqPMyP0KlVCq9zmazq77vYzAYzEYhlEEEsViMzp9AvV5/Q2N3jipwsVgsrs5DNMwDOCMXkiwhpkWRoBCvrawv3y3cYhsoHwtx37ThuC4UCm7iJylEQFHl/4H4e3af845lcPQWfm3Aw2PjCb7sNWDl2jdPm/FnxCcQMplMGOt5HqrVaoraNBuh1WrhW+MreoYBx+rB6fawxb1F7moOH5rbg70znafmqR5ERpwJtX9CpEn20MGL4SZ2x7tQeQW2Z0MccCqRgx3aVkVsNptIJpNwXTdYhEiwb1mwXQe1UQ3n1y6ED5nExKX1yzp19fcv30Esl8tIp9OQZVn82zHpQQqNV58hiiKk5Sg+bdaak4hnUEYVlqTQ49BSqZTKAtixSJIUjiDICtTRAe7LdxCNKbi3/QBdrwv/kHB42L9Oc/thAapnLctydV1/xGAGQTDbATgq7AOe5zG54q/4ZZzj2sFHlsNO54cAAwDujTg3Gh40tQAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Privileges */\r\nhtml>/**/body #content a[href*=\"&privileges=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlNJREFUeNp8U11Ik1EYfr795kynaBBLglbtqiyRSMiMunCCF0FgBP14U5d1JdHFJAKD8rKrEAIjqMlGF/0hTHKLSpi15ZoMjdZgbi23ydzn3PZ93/b1nuFkK7cXHs457/s8z/ee853DybKMckxbVNAowSkUOELLXoJhqxQlfCwW4RcKkAfGpG2NCtXBSUUMtuw1DR3qGeqVtXqjkOUh55LBlW/TPalY0EactwR5R4O8KHe27Tt86fjgyOWvTmvg15LbUShKMHTs7zh5+sI173ubcu13KEzUhbJGUWmQE3Cus/+G2ee2BoMRhx369WFla2Y4lg7Y/QuvgkdPDZgZp1JT1cGmgANNzXvao8n5sEoHM6XM5dqfjdB6d4PKyDi1DfIynxdyOXP/eFdBkpBKxZHhk9BpJOzWyhAEMcc4lZrqLYj47PnkWCySOJ9OYy0WRTwSBJ8IoyDl4fniW2Scmh3QIc7MvrEbE6ur+WMn+kxaXWN7g6SHCCnhdLqXAz6/leMwU7MD5lEo4rF37oNl8tGYq7GlFSq1Bi+fT7m+e/0WVmOcegYsRMIsQc0WSnVpUG/lxH/JVVsQpf9rticT72gYLSfpNqJmB+xWV4BjuSs3b5+l+QOWY+KfsToG9+zAcgTIZkso/a6Jh+OvaX4nswk8dQGTrjoGLF7MAUsrQJpHjq1v3R29yPMY+UHGofgOJ8ZeYxnsMRE0hKar3bBGPfdlGqf6DuI85fSEXeyjlRqu8jlzHMc60hGauww4Y2rD9UAcz3wxzFOObSlN2CDN9nH/FWAAi5Yew8BvpusAAAAASUVORK5CYII=\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Process list */\r\nhtml>/**/body #content a[href*=\"&processlist=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAj5JREFUeNp0k8FrE0EUxr/ZrNvEWlqITdKqTS/ai6AWTyIWFHsTETx4KF49KR68+Q8IHqwgQr2pBasVBEUFL6KtejBLQRDEoiKShBpzWGya3ZnsjG92Z9co6cCPN/Ptm5n33r5huD8MM3acP3LOqbfWWC6Xw93lewFpVf2BnfmFzYaFUMFQ7nQ6E5zzCW1pPa51triR+B4mFo0dM/NRG0IlDnuFECPtdls5jgPS66S9gUy/XyROEw+NZVr85wAuxG7f91U2m2Wkr0ZqmEbLelkbXCYOewTn+4IgAEUC0q34gPSC68Qj4hpRjtIHijaC1GF7KGUpDENQDUB6VEB1zAF76uvpa0MyTsVF1BEYlIyjkfKvxp75yYZDxGMznzLzKRu/KUknTosLDs/z4hQCk1ohvfF7V/6XiBPEExs+OQrSMwyNnw00m83YxY9/rxphYLso3R+SmbzRbS0ozJFjBQ3ekRk6rI/2ZSgqWke6/r4zunjcbNT2KvFcW8Yu9LnTZ09OSqVQ9Wqoe3WUBooobBumFpBYWnjhkuNBdkP07MQMDlgbX9xP5dzk4Gg9oN7JAuushdCRWLm97EJilr2XH1BTR8l/LmlvGg+IlzqFeQg5+/HmOzdfzAODwFBhCKu3XFfrqKp5VKKCXiamjf0WXZ4WtUT2uDWDGatS/rxfaRutS6w72qUedkyfsgXr9Di+qhb60fJW1vJ0/gJeqbek90fdGlMj7hBXCMc0kstMKAPE1v/qo18BN3Q2e85/BBgADNADzS2n40UAAAAASUVORK5CYII=\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Variables */\r\nhtml>/**/body #content a[href*=\"&variables=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNqMU0FoE0EUfTvZlArmFpR4L0jT3HvoKR6EQG6eC5bQeuwhIAhpYREUDz2IYKG0SEvoxbOtBIVC793oRTCQQyOlFGNNUrK72Z3x/8nOpkUQP/z9uzv/vX3vz6z1aG0NHJZllank8O/4LKVsySiCUgrfjo9h8w0H1Xu76+ubAS2OOKVERGtm3XVd7DYaT/hblN/53f2FBQhmi9OSDBqNdAaeh+HVFQaDAfr9vq7vHWeT+h4QdsZIsiMCx2ExtaBrOpWaiA5DhETc7Xbxpl5HcXb27et6vUYrzzWBnBAIBgtNg79IisWitpPJZPDRdX8loJAI4qQ5jgnarRb2trbQabfhk/QP+/vwyI4Vk3OvwYmI2ONMLDQODvB4ZQWfDg+RzWbh+z7SQsCmZBLuNTibLzcsUBMD+P56nSJLU7aN1JhATCzwkMYpjIJSuYwXjoOHpRJ+XlzAox0Z9HqYTqf1bLjX4OxwokDPgLNQKCA/NwfeVkmDe1qr6cqZIoWEsRIFZt8pEwVfm01UV1e1nebJCZ5Vq/hCB4nXtAXqNbibFlgBn+dcLvH/bnsbrzY2sLezo58tvasTC+L32ZkhSHaBIwgCbYcrK9E13mbuZQxjRevoCN1Oh4+tHQ8CndNTjEjeD3pfWV7G0uIiliqVRAH3MoaxHLco79ydn3fUtaCBqUhKRcdY0c+l6CdTXhgqn565lzGMtQ1B7/z88nY+/xL/EXI4vIwJwj8CDAAVoIrz1xox8QAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Status */\r\nhtml>/**/body #content a[href*=\"&status=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAftJREFUeNqkU7+LE0EU/mZ2d3bD7pqckhQqB4YDuQRsTj2t1ULESkgnWKloYRMQizQ2dhZXxkq8fyCFjdrYCAqCCIIgLCgWIkQ0m+Q2+9P3ZnMrNsJ5Ax/zivd973vvzYiiKLCfY/Z6vTbdmwR/j9yQ8NrMsuxsv9+/12q1ulmWIk0zQoIk4ThFnucoTRoQwtQwTYXxePxhOHz4wKSEA7PZrBsEgU5mkKjGv2JCdzQauaZlWflgMECz2dS+eCZl1aKKGUmSIIpiSMkOTO1Sz4BsCiZ3Op2qCltfnFpD9vK9Jk4mIWGOet3X9hnz+aQSkFyJSbtgUnH0EFWMiDil5BiW5RBKMrmmnOiPgBACcRxr4i6c1RbCcIbFIoNt15ZEtXRgUTzVApKSJdvmaumZ4/pm8CEdeJ02jmzdROPSaS1k2w6UsrWIdkCVjdqFk0g3T2Dx6Su8+9eqRXvrx9C4dRE/7j6Bf/083HNXcLi2go2VNh5fvVMJSPHiLSbvPush/nz6Su/dXV/DwduXEQ6fwXUbyLbfIC1yBAIIiMhtVw4cx9F98wC5HaU8qG8LTB89h/M9gUG9S2n89Qx3dsoZmPSILKVUtffyWDTAMYyPvxARUUqxrCgqgSgKaa11T/i+f8MwjNX/+Ujk9gtL1pYfydwjP+UPJfb7nX8LMAC+uy+OK4sAWgAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Alter database */\r\nhtml>/**/body #content a[href*=\"&database=\"][href*=\"&db=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAltJREFUeNqMks1rE1EUxc98kMlkMkkqbaXRhaEStCAhaDeuKii2JBWFtiqCYFcBof+BKW6yU3FpyUJxU1Eo2IKtXdRFV7EiFMG0pVAsxnRmYpPWSTLT+fDNpGpCwfbC4T1m7rvvnt991PDwMPZjkKgLR4sfRNPOhv3zRdO0rmw2+0xVVdRqNRiGCVn+RfYWvF4eoigiEAggGAwglbp5n2EYtBRwwjAMVCoVlEolt4Ak7aKuWRAEEYZpgGZo+AS+pRX6v41SgE0Wm7IaQkNHL0DSGwft/cOmq+ZotvApk8nMxGKxpGVZqFar+1YMwsALv99P/Aexuro6S3KXTisKhhYXWwqcT6fTyWaIkrIDta7Dw3ngFwUECcQriRv9Y6nR6f58PncoxC2lAlXXwRNwe1aIQAR4H4ceWY5EFGWqCDw9BOI/7xbV8C/JRewwzJnI+Ph1GXjIHjqFvxMwsacuYX2Dw6P5+eTV7u4nt2179sgQ620S9rhF3LmWQDwen5Dq9ecjwDLrJDtB1oMQf5ZRqang6RWYpfe43JfA1NsPuHBOqC6vnFzOt7eD3dzcRCgUgq7rditEA1vb29C1zzCNOQwODGDyzRy6e8fw/dWLfEcHjYVyGWwul0M0GgXHcQd4UHoRgvYOg8kEXk7OoLPnHtpO9JILHjNOl2tra+4YefI4xHA47GNZ1n0sHo/HtVBan8Stu6+RnRjB8bOj6Dx1EQxLQ1EUvlAodJKzu4QzjhGFeZ6/ZNt2u2mScdm22wCx8WCoj/76ZYP5uFFkvlEUZRM5/2XSwQLJKfwWYAAtt0zt3hIutwAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Database schema */\r\nhtml>/**/body #content a[href*=\"&schema=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcZJREFUeNqkU7tOAkEUvfuABIgsyksTAkgBtISS0kIbYk/sTKgt7PgF/QEK/QMaSDREjQmFNhu0oLEglISHbniEAAE8l8AG2O2Y5OTOnT1z7rk7M8JisaB9hkh7DjmXyx2KoniGuRvozufz19ls9lev13VSJBIhSZJMeVI8Hr/MZDLXwI3T6VQqlUq/2+3W8FEXGA6HNJ1ODbzRaFSTG43GMUTOmcQR+ZOiKNlNm+PxmFqtlm2Xx9/gTIp5PB4lEAiclkqlt2Kx+Gmz2R5kWVYnk0kSnHy/31exwcDTNO1bgB0P7KZB9AEtCBbRayeRSHABdpKvVquEnk15MhY76O9x07LX66XBYKDnbrebms2mgQcBks2OxmKxEGzrOaxTNBpdblgPOCL+0QYBq9VKvV5vay0YDBIu3BE2XbAe0EH+jPhLDoeD/+RWdZzCGlm73U4+n49SqdRVuVx+QdUFR84BEkyvJ/cmL82lUemEJ+Fw+EBV1bs1J5lM3iLcS2YC/D64P1j+wVxdIeb3+12hUChcKBTecYwf7Xb7a9MBz1mQS1u5m1VcAq5cAN8LF6BBXAXquwLC6oFJJhA3wLwp33Jh3+f8L8AAZ3ntkRsbeCkAAAAASUVORK5CYII=\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Refresh */\r\nhtml>/**/body #content a[href*=\"&refresh=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt9JREFUeNqkU0tPE1EUPtOZQh9QSVsKtAgB5A3RWDRaU+PCR4RUDSZGSTeuiDvjD3DRhJ1xYeI/MJi4wMRHosTEuJCNEqJBQQtFaAuhb0amnee9nlsLNW5cOMk3c+fc8333nO/McJRS+J9LYLfjD1ZBMJtBEAQw8byX47hxDAcQPZW874g5PGyGELLJ83wY34Nvb3omhb8EQwJPI4cO2tytjRanwybYWFAs6v2JtByMrktXCaVzhq5f2COY9qmUhqy1MHXltOdIm9PSyulgK5UMUBSCZXK2dpeldeyk+4yO5PCY14/PaguUEC/PkchYoGk4tVmCkqrLK1tSMpEuFth+h8/ecKzf1ZVNy3D9vM+/k1dBU9VqBbqqjnf5rO6tuAjZ/K785kPiy3qycBeFRzRZHonGcq+mX0bnPS1WWI/mQNd00BWlKqAqyim3w+zcyRfhayybRPX7aNi0JIpsL4w4cSs86BfzJWhwWcBiFVi82gKe0s1znE2SNUhuFwo4iWlD0wAdZ94E2ajvPZyb/9NtnNT8vgBTkxQdJIOU18QwwDB0qLVY2XgnmRDrGUn+kcPt9c1NdfT568X1aguyHN0uyEXJJIDjgLUBPZlQSzLkUinIZzKwg8Aqj9bV1ZzDnKF4erdRUxTzvgC+vF+LZ3KiUAstvW0+PO0Olj1R2cMu6CjGrnn72lswh9tIZFWM71YFVHVmbflHhtitkODtlqHRwKCnrTGCU/iIeIfr20MXAwNJcz1lORvRuIScbNkLZpAj/Jj1HeLttinX5dHhkk7BbubAUVPWF0WVJCWNxqwCt5J9+mLBKMmzaPSW+OjGbwE0B0yePjD1XgqZfMMRc0+3m+vscBKni33KoimXjdHV2JIWjX4mycUn5NuzGEktQ5lbEWDTcCHcnGegmes8GwRn9yDw5k6MSaDLC5BZ+kRXZpdpfu0nxtKIDHL1PQFWq60C4R9/sFEWBSgil/wSYABg+JOXZhLaRAAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Show structure */\r\nhtml>/**/body .tabs a[href*=\"&table=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoJJREFUeNqkU01oE1EQnk02iTFQE7QihUKRkKTF1iU9+FdQCoWYgAcPegkIeiiIWiHgwUvpQXs1Ggo99OYlFwUhWAhYhZJWUmhMxJbYYk1LFDcmJraSv911vjQbevPgg9kZ5vu+eW9n3hM0TaP/WSI+gUCADAYDmUwmEgSBUNRoNJ5jaKjNSyuKsqRjjUaDVFWlWCy2X0BfDJ5nd5r9KxZI0Wh0BuRgMHibcznGrrD/wD6hawwHxBdcLte12dnZGYfDcYOFhkJBpnL5F3Y0IAcMHHB1nYAj+Xw+xHeZ8FSWf1BPTw+trqY2JElyAkilUhsej8dZKhWpu/s4jY+P3+P0s/n5+f0TVCoVqlarL0Oh0KTZbCZZlmlgoN+pqgrBEO/u/iZg4IALTecX+BQX6/X69Xw+v8e7bYqiSMvLy+t+f2AGhhg5YOCAC43+7+T1eh+srCS1hYU32tJSQkun09rg4NA0TwLTIMTIAQMHXGigbU2hVqsZq9UaNZsKKYrKoxRZKDYwKizEyAEDB1xoOk3kzo6xP4PExMT9WyMjl/q2t7+npqYevkBucvLx1d7eE9Li4tutcPjJXEsoCO+z2WxcP0GcC3zmDt8ZHj7bVyyWyO32SLHYOwl4ufyTdna+ELCuriN2nlSEC2x1mshdRZGbkchcSJaLfCOtFI+//prLbRIMMXLAwAEXmk4T+ZLALo+Ojj1PJtc1t7s/bLfbHyUSGQ2GGDlg4IALTesd6Y8JY7JarX6bzTZtsVhOwq+tfdMymZx2MAcOuPrmrSYKaDHRUbZjbIcA8sM6xQ9sADFP4xNf54/t21tnk9kKrG3qBdCLw20T//GCFbY9tj+sVf8KMAACOoVxz9PPRwAAAABJRU5ErkJggg==\") no-repeat 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Edit row */\r\nhtml>/**/body table a[href*=\"&edit=\"][href*=\"&where\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=\") no-repeat 5px bottom;\r\n    display: block;\r\n    float: left;\r\n    height: 16px;\r\n    overflow: hidden;\r\n    padding-left: 24px;\r\n}\r\n/* Select data */\r\nhtml>/**/body #tables a[href*=\"&select=\"], html>/**/body .tabs a[href*=\"&select=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqck8tO21AQhn8bB8ehRe0SUEBOlIsSVFGqqlK3oey6K+9A96wTKU/RFU/AG7CrKhAg7gmKiJKIplFWqItWIQEfuzOT2LmsSo408j+2/5lvjo+1rULhM4AFTLfahuu6i3vF4rdp3F/y+W3DVUrzKNk8BTzPC4IKS3h8Hc0Hz49zr8BeXSml8wu8PsU1uW7EhjpHOmd7wX1fs4e9hnIcTUkBDfs1DzGjS5N1pPOGRR3bLjR6ztoNNJm9ebDXcBxnjMD99YCdzGvJT25v8T6ZFH1QLuNjNiv6++UlESyDvSMEEIKcCZzX6zLvXDiMo0pFZn5hWfhxfS2aF3sCAkUvDwmA1ZUVyS9qNawnEn0aKvQhkxF9WCqBPUIgBSYISnd3QmCZJs6qVekaYZqbmzGCfoGnp2AEnyAdjUpeajTwJh4XfU778S6d7tNQISlA3rFN9AkqzaYQmLOzuKIxuGuYaE4H++F/RvbqVEVXE+cgsbSEFFH0Hh+RtW2sxmLo9npYoy/yNpUajkBeo9ftzkwSVFstIeBVpjH8rhc0xigBe43f9/dmKBTCburv4ISb//VvsYe9mmXbX/VIZHman8ntdH7y0BbFSwrjmX6H4s8/AQYAQChL+KIinhAAAAAASUVORK5CYII=\") no-repeat left bottom\r\n}\r\nhtml>/**/body #tables a[href*=\"&select=\"] {\r\n    display: block;\r\n    float: left;\r\n    height: 18px;\r\n    margin-right: 5px;\r\n    overflow: hidden;\r\n    padding-left: 16px;\r\n    text-decoration: none;\r\n    width: 0;\r\n}\r\nhtml>/**/body .tabs a[href*=\"&select=\"] {\r\n    background-position: 2px bottom;\r\n    padding-left: 22px;\r\n}\r\n/* Edit Sql */\r\nhtml>/**/body #content a[href*=\"&sql=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY1Mjg3MUE5NEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY1Mjg3MUFBNEQwOTExRTFBMTlFQjAzMEMzRTgwNzJGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjUyODcxQTc0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjUyODcxQTg0RDA5MTFFMUExOUVCMDMwQzNFODA3MkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67SGPfAAABvElEQVR42sTTSyhEURgH8O94jRqTJg1lo6YsptGIpEzKa2FhRGhY2chCWZDSbHATmkgkC81CInklpCxGmlGy8QqTopnFJEXyiGsadDv+p87UbKwsfPXr3PP67nncyzjn9JdIoD/G/ydgiFKUXfAIJmiCLOgEC7zBNmyCAlabwZAx9f6uTybqFRk2oAXy5LNoG4ZRyIAq2W7bXWBkNBq9DRbLClcUvsXYvtgCEpEeArAqV5YPl8v9/AmlX47Jw4WVmUym7MXTU2e1xzPxzPmwSDAOTqiEJZkgObZH7zxpot7iIGvkg3rP/Y1Ws9m8fhyNzqHDm4ROnzzMPnEmsAcpkBhLUlJAmeXF5Kiuc9mUAfdrmi4xFInoL2K30CYnrcOgnJMi0ecXVTgqKKe1zWWbnXH7dvx0FwxrN5qmUTtjhSJBB77GIpTfoJMJrqD0IED2+wca6+5xGacn3SeqykcCQYqiL0lVVTHHIwaH4VCWYjXZUAxbtXb2ytVrrnSyUH0VNctDDsdZE3tOlcvVxR8eIhPOakrY0+0jDV0E+RHqX2JX8AGq9GukQS4cwAvUQLq88lT5sgT273/jjwADAGLJkFFBwODaAAAAAElFTkSuQmCC\") no-repeat 2px bottom;\r\n    margin-left: 10px;\r\n    padding-left: 22px;\r\n}\r\n/* Inline plus */\r\nhtml>/**/body #content .icon-plus {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAelJREFUeNqkU81qFEEQ/tr50UncrI4iwq6oRJCIIV6zxFxE9iCIbxHwXXwA32CPXgRFEZFgPGgiIcfNn0hgYU1mnV070zPTbXXP7Mwke4hgNzVT3f3VV9VV1Uwphf8ZDJ2r9GUXSVuhdZvEP8PmkOQtFF5CqaFttpRauXN99vmDmwtNz7ngVtGnI+QxF9/3Nme3ezt6+cJGavbbCzfmm+JP5ApEBXgwGJh/vV6vcrj3G/ea2wc77ZzAePAtWG54HBaoMAzxefm10VufnqBWqxVnnue5ZGeuaiPJQoyiCJzzAiSEOKFXzxhjGNsVBBpUJdF6v9836/0f+5BSZga2Dd/3JwniOMZoNMK3x+/R6/UwHA4NgeM4+PronTHUMvemhTAKJwnSNAVPOLrdrsm8BmvjseFYQDVKnKRCEGfKkThC4AR4uPU0uyhhNpY+GKP5j8samY0ZcsaodPGpCAIrgJoifWpccJReL+vUl3WUNCciENQBOIcqqiQ4j5JYNxfNMoLIZPcwllQGD2UXkse59VamN072suSSSiZ1S8PCLt3nFq5Jnt61G+40m2aWua+dvwo/13MhnDj+MviZHkQddMQaM5AZdhtL7BmuYJHWl854TAF+YQ2r6hV+q12Wp6eGMs//OhLd8X8FGACYiuElnjs9iAAAAABJRU5ErkJggg==\") no-repeat left center;\r\n    height: 16px;\r\n}\r\n/* Inline up */\r\nhtml>/**/body #content .icon-up {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi1JREFUeNqkUz2IE0EYfZOZ3WySi9FAPLU4fwjEw8IUhyjXxUYrK8FOG8FWQQst7OxEUE7wOq200qv0GguR4+BEMIpwGDxNBE8vcMZcsv87fjPJrkl1iB885s238958M/Mtk1Lif0KI6iINLAfGzhOpEXZto9kkvISUDwHZE4OcvFA9svfS7LH9ZSttWOPrJeIi1Wg7vrO08rVS//idUWpOIArVt9qJmaly51ff6oxIO53BrFAojDpaM0f3lesfvtUGBlIbFFNMWo7jjO399HZFj+eufxnLm2bGIl1R8ZSugOB5LmzbTvD41oFEoPjoN9t2EOuEDAO1hjmOB9d1teDF/arm3W5XC6Iowr3LOZy8+AZccJRKRSogYMMKyCAKmO/7CMMQC3em0Ww28Wyxjna7TZV5eLfaBeccrx/N0pUK9Pu+1ihtbIAgCGG7ARqNBpberuPm/AYMw6B3Frh2t4n3n3qaCzMLyUzEOoHhEbb6EXoex9kb6+D0kkZmx0BAUPzq3AZCvwUzUwDjVP3wCEI7kYEdmjDSeQ0VvttLDISRpXxuvD2i2CD0tQFSalH6b/tQ1yQGZjYxTiL0hwaBp9vT86UrrInEgThOX/mseb50aEzr9Xsu6VRLg8Ndpf0PTwaOU9m5ZypnWBMixQ0oZPK7NeK5gu/Y7trKq9bWz9YT/H6wrMooghUPgp86AzZ5nNy2+ZnkJuSPZYTPF4iuKYOMqlIf599C3X73jwADAG6CADM79TwjAAAAAElFTkSuQmCC\") no-repeat left center;\r\n    height: 16px;\r\n}\r\n/* Inline down */\r\nhtml>/**/body #content .icon-down {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqkU01oE1EQ/l72vWTTZps22B+ltCiBRItYsYhSBIkXxUMv9qzgQaH04kEFe/WsIh486s1jDyJePIhIoRepogjRYipoNRBjmuz/Pue9dJf0VKQDHzP7Zr5vZ97sMikl9mKcT78kx/rB2GUKKoShXTgNwitI+QSQbd49k1emp/Zfnz05WTQzwtxZLxE3qbzt+M7b1W+ltY8/GB094ohClaucnpkoNv90zGYPtdnsPuXz+V5Fc+bYgeLah++VroDUAoUUk6bjOElVq9XC84dHdXxx8T0sy0py6XTWJF5B38F2B/A8F7ZtJ0We5+2Ie3NCUPfbPC7DQHnmOB5c102KFKFer2tfq9UQRd2LMLiB4eECNRCoO0AKEQlEAfN9H2EYYvneYSxeMvG73tAC6u0SBh7cnsKbp7MUc3Q6vuYoLtcCZEEQwnYDVKtVTI5I3F0Yp1YF7Znj/s0SThwZ1DFP90EygZiXghqB2tnqRGh7Bubv/NSFx8sDXQIhJp+5+g7CtMBEVnMUNxnBDtMQGQu5oXHML9UTcoyz1z7pXJoEDJFLRqAOaJ7QZ0j1aQGFgX2HMHdrMyGfW/iiz+K8guYQlyPQ62p4vnS5mcvEW8iPlXHhxtck7jWv03aJ19BbgfuZllgeDRynNDg20S/MHE8ZAgpZa0QjflbwHdtdX329sfVr4xn+Pl5RuyyAFQ7COD8HNnqK1Hb5mWQDcnMF4YtlCteVAF0pLP1V/p+pPbb+CTAAmwfytdL1/44AAAAASUVORK5CYII=\") no-repeat left center;\r\n    height: 16px;\r\n}\r\n/* Inline cross */\r\nhtml>/**/body #content .icon-cross {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqkk89KG1EUxr+ZubnUjJaipgtNtTZKxE1AVIi4yM5tF30Hoe/iA3TnQkTBRbZFKApCAl1142CJqLR0ZUNJJpPJZP70nJvcEK0SpAPfzD3n5vedM2dujCRJ8D+XODIMGMA4aYfibdLkCKZO+kxlP5FcwRla7MytrHxcLhazMp2WT5HcbeB5gVOp5H44Dqd2RdTb217a2Mi6vi/h+6O6lu9WV7M3jsPd7ppsQJqMTVO6rgtWdn8fev1YrpskkhlmzZBuLJ8qN5tNLJfLqgw/OX4sxyaaE2G/L8/z0Gq1cLy4iA+1mjKcOzhQ+RrFpmniy9oaUqkUMpkMNDcwCIIAYRhiwraxNz2NwskJLMtSgJQSZwSr6Xa7aDca/xowHFB7Xr0OO47vwazx4W9PJpozu2xK6hCY3N1hLIqQPz29BwshULq8RJp+x5JUTHODIRpkkKbv/GYI/ra+jq+FgjJgbV5dKYMX1KHmBh1ImgFv3pZKCr4geJZiVjWfV+2e53K9LqiQ5kSnfzwjmuIY+cxT8J3g+aF35nWVYJ1rx3HQ6R1pWNd0ewu8bkdRfkYI2zYMi/8M4oF0juGq7//8FUWHh0DF4L2XwMIW8H4KKFL8asRR/vObwHOg3ACu2YA6x0S/wHMunmHzrwADAPb07huzEp/RAAAAAElFTkSuQmCC\") no-repeat left center;\r\n    height: 16px;\r\n}\r\n/* Delete */\r\nhtml>/**/body input[name=\"delete\"], html>/**/body input[name=\"drop\"] {\r\n    background: transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE0RDRCQjlFNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE0RDRCQjlGNENFRDExRTFCRkZGOUEzNzI5RTFCODEwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTRENEJCOUM0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTRENEJCOUQ0Q0VEMTFFMUJGRkY5QTM3MjlFMUI4MTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zX5oGAAAB3klEQVR42qRSvU7CUBS+LQXaBgIpgSiJEpIuxMlVwgMwuOAb8Ah9AgZnJmfeABYegMHoGxiW6qAJJg3UEJAWaIvfKW1TjamDJ/l6b+893/n57uEOhwP7jwn0GQwGjOM4H7Aq0AGugPPA7xV4BEbAjJISut3uMUDMrgVB0CqViqrAstmsSI673e7SNM2WYRg3juP04Tf+VkFIBqGnqmoDlUie5zHLssI7GfHkYrFY0nW9t91uWRiEDxyqqVRKq9frDWSTiEhOcdAZ3dVqtQbP81rQ6rEClNkpl8uqbdsSSkwUDYkkVKLO53PS6S4M0JQkSdlsNpGj67qU0QftCUEAJsuyQpx4gDMsIjm12222XC4ZqvFfJZPJMGjjE8mGwyHb7/diwIla8DPggkFpf0+En2RfNP4oWzg/fgAo/obyLxFAnkwmf2lA/jZx4hU8rNfrJjLKwTAlGpKZxImeET8j9P0MsoVBYkmA4UUtnTjxADOaMPQ/xd6iPn8DtLEWi8UUa584UQuYLiaK4rhQKNCzafl8XgWUdDot0j20sVerlQnoKL+Pasf0SvFRFnBQAl6g+m0ul2tBjwucnwb37wj8BJ3uMZUG/k+AOeCEATzgk7qBwwcwTdDQDXyJw74EGAC1PioqQ6UN2AAAAABJRU5ErkJggg==\") no-repeat left center;\r\n    border: 0;\r\n    cursor: pointer;\r\n    font-size: .9em;\r\n    padding: 1px 5px 1px 18px;\r\n}\r\nhtml>/**/body input[name=\"delete\"]:hover, html>/**/body input[name=\"drop\"]:hover {\r\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqkU0tPE1EUPvPoOHdaSSkUsYkY2xLTmpCQmJBAumBNZIFLoz+CX8Av6MpfoHHLhgXsTTWE7ohtDRhEkrGpQy0M7e3ceXnO2Db1BQtv8s3cx/m+87pXCsMQ/meo9HktSaDgnyABZBAbOF1GzA3sviDeoatthOnjgvAcnau/CT6JMbaZXVjIZ+bnU2xiQqcI+eXlonl0VDo5PHwqOC+j3c4vEQzJLJncWlpbK4SqyhzPA+fiYnhmzBYKRjqbnaru7m51f+5HIhJ5eCVJmVu6/mZ5fX2Juy4LguCv+UqYqhqG/GBvb184zrMXYWhGEWA+G3PFYv67bTPHca4tWiwWYzO5XP60VqM6vYwEPICV2+l0ymq3R4au60Kv240ghAAPU4pyVlWYnpxMEWdc4F4gyzoZlSoVME0TOp0OKIoC8XgcEokEaJoWCezkctDv9XTijIpI2h56FLYNjUYj8oah/kGmwajdaOuNd8EFOLNbrcXQsozG6uq1NUiQvRB94oxHUGk1myt3VNUwUP2mccZ5mzg0lwcC25/Pzz+BLHMDW2VQ4/8BbDFvOs4xcUYC2HWz6/vl95ZVxwPOUIQN8h2HQHL16qreC4IycUYXiS7IfVw8xtv4QJY3C5qWf6hpqaSi6GTU8f3+RyHadSGOT5BcxWac4n7EHQhQLaYQ0xmA2SJAaQbgET6uu4OL9rUF8KEG8Bbd4hS+ISzkekMBeSxN9YYa0kPsInrIDX4IMADJaAE/Me2jPAAAAABJRU5ErkJggg==\");\r\n    color: red;\r\n}\r\n/* New item */\r\nhtml>/**/body #content p a[href*=\"&edit=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqUU01LG1EUPW/yQsigUmOISZSkYxdVwW2lm4KkFrpwV6F/QGj3Lrpy4a9oN/0FBcFNQYWIuFHoIsRSWxzFkjZCsKaZNElN5r3eOzMOtEg1F87MvTPvnHfu+xDPVlYghFgAkEH/UZVaaxCy71ZXX/fLpslfSOW6nAtNjycfgEAQSqkQ19X7hTsgrpCuL2AozRIC8/cENo6091aKQL83bKBgsYiPrWOAxxPXkG6v5zlwA4FNW2NCdqC//4Lm2QiP40Q8UxDKB9euHgJxhez5AoED+DNX2lieToS97h0eYnZyMqx3SiVykANxDfnz4QkGd3Pf2MFisgs0NKxhidNaLVwPK5PBcbUa1plkEjzec3A53NQXD+w5l6y9+fz01jtQTL/3HbQc5xSmU2RFyjH1aOZG8qedsufAE2icn+cHOqk5+lCkHHtr27dy4Al0u0IatbgY+mg9V0sarwoHoC4xEWnDku2w53/BoQIHRrI0zUmeFdfrcbQTJsoOkE0kMDYygnFasEaziVwqhfzoKO6m0/hRr185MOTvTocFI1fbyOegEAO+VCrhyeMo2/ZfNY8nbkReUN8UsWg0irf3m0GHpIDsf9eAxxM3JmJkyzDNl4Rcv5dJtVpfRZCbhEFupQ8+XyLnjwADAJgWSEmnMNKYAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;\r\n}\r\n/* Create view */\r\nhtml>/**/body #content a[href*=\"&view=\"] {\r\n    background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkVJREFUeNqkU89rE1EQns1udhOCrk2KlxIhaaGHFPfQBFJYxFbc+gtvkQq5+uPoQfAPEHJQemnFIAFFzCFYycGLGEgVElgMRhG7OTRiKiaVKCkYSTTbbF5nYuJBDxYy8LFv3sw384b5lmOMwShmgxFt5AIcWv8wGOUg4jhCQ/gR7kHeDuIjIoN4iWgOecMCHBY4L0nSJU3TpqLR6GHDMFz5fF6koKqqZiAQaCWTya+ZTOZDp9NJIO8p9aURHIhroVDoRi6XU9Pp9LRlWWNer1dstdpAQJJIdxSjHMolTp/L8/wp7Lper9c77XabEbLZLCNLJO4zVZ1nmnaO4avYME65xCGugFWWwuGwG58vmqbZnysWi2FnC1ZX431/cnIGqtUSDOOUSxxstEQFHhYKhbFmszntQKMEn88H2awOc3Mn+wSHQwK73fenwC805HwiLm+z2b5UKpWerutWMBgcl2X5AM4LhvEe/H4FZNmN3Q1YWDgG8e4juLm5vLvyPP7ZePD2Dm2Fx1EtPGzUarXtVCr1vVwuNxRF4Z1Ou1gqvRIbjS1QlMAPj8ezdbt6Vzhz+qwrV9W/Iedq77qrSzvkEYcQHlyNG180gd8j6MuDDYF12bnIpvhxEDgzcjHiX3uyZgDPdVGGBW6gRkp0Imjv3D9yW5GfzUdOHP37+kV6/Q33X60uSqhL6R4wmCV35oIyu/H4XfG3DKEo7EvwDK5AF6W+y17vWKjqnz0AOxfEkUDY919TxxV2WXH71iYgsUhkmJBgT4ABAOtC+bduhTyuAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;\r\n}\r\n/*** Messages ***/\r\n.error {\r\n    border: red 1px solid\r\n}\r\n.message {\r\n    border: green 1px solid\r\n}\r\n.error, .message {\r\n    margin: 1em 0 0 0\r\n}\r\n/*** Content ***/\r\n#breadcrumb {\r\n    background: #fbfbfb;\r\n    border-radius: 2px !important;\r\n    box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;\r\n    margin-left: 0em;\r\n}\r\nh2 {\r\n    display: none\r\n}\r\n#content {\r\n    margin: 2em 0 0 21em\r\n}\r\n.tabs {\r\n    margin: 12px auto 10px auto\r\n}\r\n#form + p {\r\n    margin: 20px 0\r\n}\r\n/*** Tables ***/\r\nhtml>/**/body table tbody input[name*=\"check\"] {\r\n    display: block;\r\n    float: left;\r\n}\r\ntable {\r\n    border-radius: 2px !important;\r\n    box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;\r\n}\r\nthead td, thead th {\r\n    background: #eee\r\n}\r\ntable tbody td:first-child {\r\n    white-space: normal\r\n}\r\ntd, th {\r\n    border-color: #bbb;\r\n    border-width: 0 1px 1px 0;\r\n}\r\n#logins a, #tables a {\r\n    height: 18px;\r\n    line-height: 18px;\r\n}\r\n#tables li {\r\n    clear: left;\r\n}\r\n/*** Links ***/\r\na:hover {\r\n    color: #3b82ca\r\n}\r\na, a:visited {\r\n    color: #385a75\r\n}\r\n/*** Sidebar ***/\r\n#h1 {\r\n    color: #222;\r\n    font-style: normal;\r\n}\r\n#menu {\r\n    background-color: #fafafa;\r\n    box-shadow: 0px 0px 3px rgba(0,0,0,0.30) !important;\r\n    margin: 0;\r\n    padding-bottom: 0;\r\n    top: 0;\r\n}\r\n#logins a, #tables a, #tables span {\r\n    background: #fafafa;\r\n}\r\n/*** Forms ***/\r\nfieldset {\r\n    border-radius: 1px !important\r\n}\r\n/*** Others ***/\r\n#lang {\r\n    font-size: 0.8em;\r\n    left: auto;\r\n    right: 6px;\r\n}\r\n.sqlarea {\r\n    width: 99%\r\n}\r\n.jush-sql {\r\n    padding: 1px 2px\r\n}\r\np {\r\n    margin: 0.8em 0 0 0\r\n}\r\n"
  },
  {
    "path": "designs/price/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/price/screenshot.png)\n"
  },
  {
    "path": "designs/price/adminer.css",
    "content": "/**\r\n * @package    Adminer.css - v1.0.0 - January 08, 2013\r\n * @author     James Price\r\n * @version    $Id$\r\n * @copyright  Copyright � 2013 Neurotechnics Pty Ltd. http://www.neurotechnics.com/\r\n * @license    MIT: http://mit-license.org/\r\n *             Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n *             this software and associated documentation files (the �Software�), to deal in\r\n *             the Software without restriction, including without limitation the rights to use,\r\n *             copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the\r\n *             Software, and to permit persons to whom the Software is furnished to do so,\r\n *             subject to the following conditions:\r\n *\r\n *             The above copyright notice and this permission notice shall be\r\n *             included in all copies or substantial portions of the Software.\r\n *\r\n *             THE SOFTWARE IS PROVIDED �AS IS�, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\n *             INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n *             PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\n *             HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n *             OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n *             SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n */\r\n\r\nhtml {\r\n\t--bg: #eee;\r\n}\r\n\r\n/* IE doesn't support inline images - So, we use a hack that IE cannot interpret */\r\nhtml/*\\*/>/*/*/body .error {background:#FFEEEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC\") no-repeat scroll 0.8em center; padding-left:38px;}\r\nhtml/*\\*/>/*/*/body .message, #menu p.message {background:#EEFFEE url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==\") no-repeat scroll 0.8em center; padding-left:38px;}\r\nhtml/*\\*/>/*/*/body a[href$=\"dump=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body select[name=\"db\"] {background:white url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:16px;}\r\nhtml/*\\*/>/*/*/body select[name=\"db\"] option {padding-left:18px;}\r\nhtml/*\\*/>/*/*/body a[href$=\"&create=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #menu p a[href*=\"&select=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding:1px 0 0 16px; overflow:hidden; width:0; text-decoration:none; }\r\nhtml/*\\*/>/*/*/body #menu p a[href*=\"&table=\"], html/*\\*/>/*/*/body #menu p a[href*=\"&view=\"] {margin:0; line-height:18px; padding-bottom:1px; text-decoration:none;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&create=\"] {padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href$=\"?database=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content a[href*=\"&database=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&schema=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&tbsdesc=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll 2px bottom; padding-left:22px;}\r\nhtml/*\\*/>/*/*/body #content p a[href*=\"&sql=\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=\") no-repeat scroll 2px bottom; padding-left:24px;}\r\nhtml/*\\*/>/*/*/body table tbody input[name*=\"check\"] {display:block; float:left;}\r\nhtml/*\\*/>/*/*/body table a[href*=\"&edit=\"][href*=\"&where\"] {background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC\") no-repeat scroll right bottom; padding-right:18px;}\r\nhtml/*\\*/>/*/*/body table input + a[href*=\"&edit=\"][href*=\"&where\"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom; margin-left:5px;}\r\nhtml/*\\*/>/*/*/body table tbody td:first-child {white-space:normal;}\r\nhtml/*\\*/>/*/*/body table thead input {margin-right: 5px;}\r\nhtml/*\\*/>/*/*/body input[name=\"delete\"], html/*\\*/>/*/*/body input[name=\"drop\"] {background:transparent url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC\") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}\r\nhtml/*\\*/>/*/*/body input[name=\"delete\"]:hover, html/*\\*/>/*/*/body input[name=\"drop\"]:hover {color:red; background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==\")}\r\nbody{background-color:#eee}\r\nform{margin:0;overflow:auto}\r\n#breadcrumb{position:absolute;top:0;left:0;height:2.6em;margin:0;padding:5px 5px 0 22em;width:-moz-available!important;width: -webkit-fill-available !important;width:100%;line-height:1.6em;border:1px solid #444;white-space:nowrap;color:#fff;background:#7abcff;background:-moz-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7abcff),color-stop(44%,#60abf8),color-stop(100%,#4096ee));background:-webkit-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-o-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-ms-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:linear-gradient(to bottom,#7abcff 0,#60abf8 44%,#4096ee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7abcff',endColorstr='#4096ee',GradientType=0)}\r\n#menu,#content{background-color:#fff;border-radius:10px;border:1px solid #444;box-shadow:0 0 5px #999;margin:5em 1em 2em 0}\r\n#menu{position:absolute;top:0;left:0;margin-left:1em;padding:0 0 30px;width:19em}\r\n#content{border:1px solid #444;margin-left:21.5em;padding:10px 10px 30px 30px}\r\n#menu h1,#content h2{line-height:44px;margin:0;padding:0 20px;border-bottom:1px solid #000;border-radius:9px 9px 0 0;display:block;color:#FFF;background:#1e5799;background:-moz-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#1e5799),color-stop(50%,#2989d8),color-stop(51%,#207cca),color-stop(100%,#7db9e8));background:-webkit-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-o-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:-ms-linear-gradient(top,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);background:linear-gradient(to bottom,#1e5799 0,#2989d8 50%,#207cca 51%,#7db9e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#1e5799',endColorstr='#7db9e8',GradientType=0)}\r\n#menu h1,#menu h1 a,#menu h1 span{color:#fff}\r\n#menu h1{line-height:41px}\r\n#content h2{font-weight:normal;position:relative;left:-30px;top:-10px;height:44px;width:100%}\r\ntable{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:#999 -moz-use-text-color -moz-use-text-color #999;border-image:none;border-right:0 none;border-style:solid none none solid;border-width:1px 0 0 1px;font-size:90%;margin:1em 20px 0 0}\r\ntd,th{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:-moz-use-text-color #999 #999 -moz-use-text-color;border-image:none;border-style:none solid solid none;border-width:0 1px 1px 0;padding:.2em .3em}\r\nthead td,thead th{background:#eee;background:-moz-linear-gradient(top,#eee 0,#ccc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#eee),color-stop(100%,#ccc));background:-webkit-linear-gradient(top,#eee 0,#ccc 100%);background:-o-linear-gradient(top,#eee 0,#ccc 100%);background:-ms-linear-gradient(top,#eee 0,#ccc 100%);background:linear-gradient(to bottom,#eee 0,#ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee',endColorstr='#cccccc',GradientType=0)}\r\ntd{background-color:#f4f8ff}\r\n.odds tbody tr:nth-child(2n){background-color:#fff}\r\ntbody tr:hover td,tbody tr:hover th{background-color:#FFE}\r\np.tabs{margin:0 20px 0 0}\r\n.jush-sql{background:0}\r\nfieldset{border:1px solid #999;border-radius:5px;display:inline;margin:.8em .5em 0 0;padding:.5em .8em;vertical-align:top}\r\na{color:#369}\r\na:hover{color:#28c}\r\n.logout{background:transparent;box-shadow:none}\r\n#logout,#logins a,#logins a:link,#breadcrumb a,#breadcrumb a:link,.logout a,.logout a:link,.tabs a,.tabs a:link{display:inline-block;border:1px solid #667eac;border-radius:4px;padding:3px 8px;margin:2px 0;vertical-align:middle;text-decoration:none;color:#fff;background:#7abcff;background:-moz-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7abcff),color-stop(44%,#60abf8),color-stop(100%,#4096ee));background:-webkit-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-o-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:-ms-linear-gradient(top,#7abcff 0,#60abf8 44%,#4096ee 100%);background:linear-gradient(to bottom,#7abcff 0,#60abf8 44%,#4096ee 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7abcff',endColorstr='#4096ee',GradientType=0)}\r\n.logout a,.logout a:link,#logout{padding:3px 4px}\r\n#logout:hover,#logins a:hover,#tables a:hover,#breadcrumb a:hover,.logout a:hover,.tabs a:hover{color:#fff;text-decoration:none;background:#93c9ff;background:-moz-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#93c9ff),color-stop(44%,#79b8f7),color-stop(100%,#57a2ed));background:-webkit-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-o-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:-ms-linear-gradient(top,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);background:linear-gradient(to bottom,#93c9ff 0,#79b8f7 44%,#57a2ed 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#93c9ff',endColorstr='#57a2ed',GradientType=0)}\r\n#breadcrumb a,#breadcrumb a:link{border:1px solid #246;padding:2px 6px;margin:1px auto;line-height:1.6em}\r\n#logins a,#tables a{background:none repeat scroll 0 0 #fff;padding:2px 6px;margin:1px 0;font-size:.8em}\r\n#lang{top:-4.5em;}\r\na[title='Show structure'],#tables a[title='Show structure']{border:0;background:0;color:#369}\r\n.jush a{border:0;background:0;margin:0;padding:0}\r\na.active,a.active:link,a.active:hover{text-decoration:underline}\r\n"
  },
  {
    "path": "designs/rmsoft/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/rmsoft/screenshot.png)\n"
  },
  {
    "path": "designs/rmsoft/adminer.css",
    "content": "/*!\n * @package    Adminer.css - Theme CSS for Adminer   ---   [theme light]   gray - orange    B  (with icons)\n * @version    5.1.1.1\n * @date       Thu, 03 Apr 2025 13:24:32 +0100\n * @author     Robert Mesaros\n * @copyright  Copyright 2025 Robert Mesaros, rmSOFT, Slovakia\n * @web        https://www.rmsoft.sk\n * @link       https://www.rmsoft.sk/en/portfolio/programming-work/web-services/theme-for-adminer\n *\n * @donate     https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BB4D8Y28YZDH6\n *\n * @license    MIT: https://mit-license.org/\n *             Permission is hereby granted, free of charge, to any person obtaining a copy of\n *             this software and associated documentation files (the \"Software\"), to deal in\n *             the Software without restriction, including without limitation the rights to use,\n *             copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the\n *             Software, and to permit persons to whom the Software is furnished to do so,\n *             subject to the following conditions:\n *\n *             The above copyright notice and this permission notice shall be\n *             included in all copies or substantial portions of the Software.\n *\n *             THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n *             INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n *             PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n *             HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n *             OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n *             SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @code       text/css; charset=UTF-8\n *\n *   Default Silk icon set 1.3 by Mark James - https://opengameart.org/content/application-silk-icon-set-13\n *   Modified icons by Robert Mesaros\n *\n */\n#menu{padding:0 0 30px 0}\n.ltr .logout{right:0;left:auto;margin-top:.5em}\n.rtl .logout{left:0;right:auto;margin-top:.5em}\nhtml{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;--bg:#f0f0f0;--fg:#000}\n*:before,*:after{box-sizing:inherit}\nbody{color:#000;background:#f0f0f0;font-family:Verdana,Arial,Helvetica,sans-serif;font-weight:normal;cursor:default;margin:0}\na{color:#c60;text-decoration:none}\na:visited{color:#844200}\na:link:hover,a:visited:hover{color:#d00808;text-decoration:underline}\n#menu #h1{margin-left:10px}\n.rtl table.layout tbody td{display:flex}\n.rtl table.layout~table thead th:first-child,.rtl table.layout~table tbody td:first-child{text-align:right !important}\n.rtl table.layout~table thead th:last-child,.rtl table.layout~table tbody td:last-child{text-align:left !important}\nh1{padding:.6em;background:#c60;border:1px solid #894501;text-align:left}\n#h1{color:#fff}\n.version{color:#ddd;margin-left:8px}\nh2{padding:13px 16px 14px;color:#000;background:#b8b8b8;border-bottom:1px solid #000}\n.ltr h2{margin:0 0 20px -16px}\n.rtl h2{margin:0 -16px 20px 0}\nh3{margin:1.4em 0 0}\nfieldset{font-size:90%;background:#dcdcdc;border-top:1px solid #fff;border-right:1px solid #909090;border-bottom:1px solid #909090;border-left:1px solid #fff}\n.ltr fieldset{margin:1.6em .5em .5em 0}\n.rtl fieldset{margin:1.6em 0 .5em .5em}\nfieldset legend{background:#dcdcdc;padding:0 .5em;border-top:1px solid #fff;border-right:1px solid #909090;border-left:1px solid #fff}\nfieldset legend span{font-size:80%;color:#a2a2a2}\n.ltr fieldset legend span{margin:0 0 0 1em}\n.rtl fieldset legend span{margin:.2em 1em 0 0}\n.ltr fieldset select{font-size:95%;margin:0 6px 0 0}\n.rtl fieldset select{font-size:95%;margin:0 0 0 3px}\nfieldset label{margin:0}\nfieldset input{font-size:95%}\n.size{width:8ex}\ndiv.footer fieldset:first-child{color:#d00808}\ndiv.footer fieldset:first-child legend,div.footer fieldset:first-child div,div.footer fieldset:first-child label{color:#000}\na sup{margin:0 .3em}\n#help{background:#f5e1ce}\n#help a{color:#844000}\n#help a:visited{color:#844000}\n.icon{width:18px;height:18px;background-color:#844200}\n.ltr .icon{margin-left:3px}\n.rtl .icon{margin-right:3px}\n.icon:hover{background-color:#d1394e}\n#tables a{background:#f0f0f0}\ntbody a{color:#c60}\ntbody a:visited{color:#840000}\n#menu p,#menu ul{padding:.8em 1em;margin:0;border-bottom:1px solid #b3b3b3}\n#menu .links a{display:block;width:fit-content;margin:0;font-size:93%}\n#menu h1{border:1px solid #894501}\n.rtl #menu h1{direction:ltr}\n#menu p.error{margin:10px 0;padding:.5em .8em;border-bottom:1px solid #e76f6f}\n#menu p.message{margin:10px 0;padding:.5em .8em;border-bottom:1px solid #7fbd7f}\n.ltr p.links{margin:.8em 20px 8px 0}\n.rtl p.links{margin:.8em 0 8px 20px}\n.links a{margin:0}\n.ltr .links a{margin-right:20px}\n.rtl .links a{margin-left:20px}\ncode{font-size:100%;background:#f0d6d6;padding:.2em .5em}\ntable code{font-size:130%;background:#f5e8ce;padding:.1em .3em}\ncode.jush-sql{background:#f0e8d6}\n.rtl p code.jush-sql{background-position:right;clear:right;float:right}\npre{background:#e0e0e0 !important;padding:5px}\ntextarea{font-size:120%}\n.ltr p.count{font-size:90%;margin:.8em 20px 8px 0}\n.rtl p.count{font-size:90%;margin:.8em 0 8px 20px}\n#breadcrumb{background:#e0e0e0;color:#000;font-size:90%}\n.ltr #breadcrumb{left:23em;margin:0 0 0 -12px}\n.rtl #breadcrumb{right:23em;margin:0 -12px 0 0}\n#breadcrumb a{color:#c00}\n#breadcrumb a:visited{color:#840000}\n#breadcrumb a:link:hover,#breadcrumb a:visited:hover{color:#d00808;text-decoration:underline}\n#logins{font-size:90%}\n#logins a{color:#c00;background:#f0f0f0}\n#logins a:visited{color:#844200}\n#logins a:link:hover,#logins a:visited:hover{color:#d00808;text-decoration:underline}\n#lang,#dbs{font-size:90%}\n#dbs select{margin-top:.3em}\ntable{border-spacing:0}\ntable,td,th{border:0;border-collapse:separate}\n.ltr table{margin:1.9em 0 0 0}\n.rtl table{margin:1.9em 0 0 0}\n.rtl table tbody td,.rtl table tbody th{text-align:right !important}\n.ltr table thead td:first-child,.ltr table thead th:first-child{border-left:1px solid #999}\n.rtl table thead td:first-child,.rtl table thead th:first-child{border-right:1px solid #999}\ntable thead td,table thead th{height:1.6em;border-top:1px solid #999;border-bottom:1px solid #999}\n.ltr table thead td,.ltr table thead th{border-right:1px solid #999}\n.rtl table thead td,.rtl table thead th{border-left:1px solid #999}\ntable tbody tr:first-child td,table tbody tr:first-child th{border-top:1px solid #999}\n.ltr table tbody td:first-child,.ltr table tbody th:first-child{border-left:1px solid #999}\n.rtl table tbody td:first-child,.rtl table tbody th:first-child{border-right:1px solid #999}\ntable tbody td,table tbody th{border-bottom:1px solid #bebebe}\n.ltr table tbody td,.ltr table tbody th{border-right:1px solid #bebebe}\n.rtl table tbody td,.rtl table tbody th{border-left:1px solid #bebebe}\n.ltr table tbody td:last-of-type,.ltr table tbody th:last-of-type{border-right:1px solid #999}\n.rtl table tbody td:last-of-type,.rtl table tbody th:last-of-type{border-left:1px solid #999}\ntable tbody tr:last-child td,table tbody tr:last-child th{border-bottom:1px solid #999}\ntable tbody td[id*=null] i{color:dimgray}\nthead th{padding:.2em .3em}\nthead th a{color:#b35a00}\nthead th a:link:hover,thead th a:visited:hover{color:#d00808}\nthead th a:visited{color:#844200}\ntd{background:#ebebeb}\n.odds tbody tr:nth-child(2n) td{background:#e0e0e0}\n.odds tbody tr:nth-child(2n) th{background:#ebebeb}\ntbody{font-size:90%}\ntbody td{padding:.15em .3em}\npre[id^=sql]+table tbody td{padding:.2em .3em}\nthead th,thead td{color:#000;background:#c2c2c2}\nthead th{text-align:center}\n.ltr thead td{text-align:left}\n.rtl thead td{text-align:right}\n.js .checkable thead .checked td{background:#c2c2c2}\n.js .checkable thead .checked th{background:#bfbfbf}\n.js .checkable .checked td{background:#f5e1ce}\n.js .checkable .checked th{background:#f4deca}\n.js .checkable.odds tr.checked:nth-child(2n) td{background:#efd6bf}\n.js .checkable.odds tr.checked:nth-child(2n) th{background:#eed4bb}\ntbody tr:hover td{background:#fff9eb !important}\ntbody tr:hover th{background:#fff7e6 !important}\ntbody tr.checked:hover td{background:#fff7e3 !important}\ntbody tr.checked:hover th{background:#fff6e1 !important}\nth{background:#eee}\ncode.jush-sqlset th,code.jush-sqlstatus th{background:#bbb}\n#edit-fields tbody tr:hover td,#edit-fields tbody tr:hover th{background:#c6c6c6 !important}\n.js .column{position:absolute;background:#dcdcdc;border:1px solid #c98027;opacity:.9;margin-top:1.4em}\n.ltr .column{padding:.27em 1ex .3em 0;margin-left:-2.6em}\n.rtl .column{padding:.27em 0 .3em 1ex;margin-right:-2.6em}\na.text:hover{text-decoration:none}\n#schema{font-size:85%}\n#schema .table{background:#dcdcdc;border:1px solid #c92727;padding:0 3px 3px;cursor:move;position:absolute}\n#schema a{color:#975807}\n#schema i>span{color:#c16509}\n#schema .table>span[title*=int]{color:#a17446}\n#schema .table>span[title*=decimal]{color:#bf8e5c}\n#schema .binary{color:#d71111}\n#schema .date{color:#7f007f}\n#schema .char{color:#007f00}\n#schema .enum{color:#007f7f}\nspan.jush{font-size:110%}\nspan.jush-bac{color:#d22929}\nspan.jush a:visited{color:#000}\ncode.jush-sqlset span.jush,code.jush-sqlstatus span.jush{color:#000}\ncode.jush-sqlset span.jush a,code.jush-sqlstatus span.jush a{color:#b75c00}\ncode.jush-sqlset span.jush a:hover,code.jush-sqlstatus span.jush a:hover{color:#ea7500}\na.jush-help:hover,a.jush-custom:hover{color:#002240}\n.message{font-size:90%;width:fit-content;border:1px solid #7fbd7f}\n.message .time{color:#a6a6a6}\n.message a{color:#840000}\n.message a:visited{color:#840000}\n.message a:link:hover,.message a:visited:hover{color:#d00808;text-decoration:underline}\n.error{font-size:90%;border:1px solid #e76f6f}\n.error .time{color:#c63}\n.error a{color:#840000}\n.error a:visited{color:#840000}\n.error a:link:hover,.error a:visited:hover{color:#d00808;text-decoration:underline}\np label{font-size:90%}\n.ltr p label{margin-left:10px}\n.rtl p label{margin-right:10px}\n.ltr p label input{margin-right:7px}\n.rtl p label input{margin-left:7px}\n.ltr.js p input[name=Collation]{margin-right:7px}\n.rtl.js p input[name=Collation]{margin-left:7px}\nlabel.block{margin:0}\n#fieldset-history input{margin:10px 0 0 0}\n#table tbody input{vertical-align:unset}\n.ltr fieldset select+script+label{margin-left:4px}\n.rtl fieldset select+script+label{margin-right:4px}\n.ltr fieldset label input{margin-right:7px}\n.rtl fieldset label input{margin-left:7px}\n.footer{border-top:20px solid rgba(240,240,240,.7);border-image:linear-gradient(rgba(240, 240, 240, 0.2), #f0f0f0) 100% 0}\n.footer>div{background:#f0f0f0;padding:0 0 .5em}\n.ltr .footer{margin-right:-20px}\n.rtl .footer{margin-left:-20px;margin-right:0}\n.loadmore,.footer+div{font-size:90%;margin-left:0}\n.footer+div input,.footer+div select{font-size:95%}\n#menu #tables{font-size:75%}\n#menu #tables a.view{margin:0 15px}\n#menu #tables a.select.active+.structure,#menu #tables a.active.structure{color:#d00808}\n.ltr #logout{margin-left:.5em}\n.rtl #logout{margin-right:.5em}\n#sum-Data_length{background:#dcdcdc;color:#890606}\n#sum-Index_length{background:#dcdcdc;color:#890606}\n#sum-Data_free{background:#dcdcdc;color:#890606}\n.ltr #fieldset-history a[href*=\"&sql=&history=all\"]{padding:0 0 0 18px}\n.rtl #fieldset-history a[href*=\"&sql=&history=all\"]{padding:0 18px 0 0}\n#version{font-size:85%;color:#ff0}\n.ltr #version{margin-left:4px}\n.rtl #version{margin-left:4px}\ndiv#ajaxstatus+.message a:first-child{color:red}\ntable.checkable thead a[href*=\"&refresh=\"],table.checkable thead a[href*=\"&dbsize=\"]{color:#900}\ntable.checkable tbody tr.checked,table.checkable tbody tr.checked a{color:#d00808}\ntable.checkable tbody tr.checked a{color:#ed0909}\nthead{position:-webkit-sticky;position:sticky;top:0}\nthead tr{height:32px}\n.time{color:#a2a2a2}\n.ltr p a[href*=\"&dump=\"]{padding-left:5px}\n.rtl p a[href*=\"&dump=\"]{background-position:right;padding-right:6px}\ntd a[href*=\"&user=\"]{line-height:19px}\n@media only screen and (min-width: 1024px){\n\t#form~form .scrollable+p{position:-webkit-sticky;position:sticky}\n\t#form~form .footer{position:-webkit-sticky;position:sticky;clear:both}\n\t#form~form .footer+div{position:-webkit-sticky;position:sticky;clear:both;padding-bottom:2em}\n}\n@media only screen and (min-width: 1024px)and (max-width: 3840px){#form~form .footer{width:3823px}}\n@media only screen and (min-width: 1024px)and (max-width: 3072px){#form~form .footer{width:3055px}}\n@media only screen and (min-width: 1024px)and (max-width: 2560px){#form~form .footer{width:2543px}}\n@media only screen and (min-width: 1024px)and (max-width: 1920px){#form~form .footer{width:1903px}}\n@media only screen and (min-width: 1024px)and (max-width: 1680px){#form~form .footer{width:1663px}}\n@media only screen and (min-width: 1024px)and (max-width: 1600px){#form~form .footer{width:1583px}}\n@media only screen and (min-width: 1024px)and (max-width: 1536px){#form~form .footer{width:1519px}}\n@media only screen and (min-width: 1024px)and (max-width: 1440px){#form~form .footer{width:1423px}}\n@media only screen and (min-width: 1024px)and (max-width: 1366px){#form~form .footer{width:1349px}}\n@media only screen and (min-width: 1024px)and (max-width: 1360px){#form~form .footer{width:1343px}}\n@media only screen and (min-width: 1024px)and (max-width: 1280px){#form~form .footer{width:1263px}}\n@media only screen and (min-width: 1024px)and (max-width: 1152px){#form~form .footer{width:1135px}}\n@media only screen and (min-width: 1024px)and (max-width: 1024px){#form~form .footer{width:1007px}}\n@media only screen and (min-width: 1024px){\n\t.ltr #form~form .scrollable+p{float:left;left:16px}\n\t.ltr #form~form .footer{float:left;left:0;margin-left:-16px}\n\t.ltr #form~form .footer+div{float:left;left:16px}\n\t.ltr #form~form .footer fieldset:first-child{margin-left:16px}\n}\n@media only screen and (min-width: 1024px){\n\t.rtl #form~form .scrollable+p{float:right;right:16px}\n\t.rtl #form~form .footer{float:right;right:0;margin-right:-16px}\n\t.rtl #form~form .footer+div{float:right;right:16px}\n\t.rtl #form~form .footer fieldset:first-child{margin-right:16px}\n}\n@media only screen and (min-width: 1440px){\n\t#content{border-top:#b3b3b3 3px solid}\n\t.ltr #content{margin:3.2em 0 0 21em;padding:14px 20px 20px 0}\n\t.rtl #content{margin:3.2em 21em 0 0;padding:14px 0 20px 20px}\n\t#content h2{position:fixed;bottom:5px;font-size:20px;padding:5px 20px;z-index:10}\n\t.ltr #content h2{right:20px;margin:0 20px 20px 0}\n\t.rtl #content h2{left:20px;margin:0 0 20px 20px}\n}\ninput[type=submit]{border:thin solid #000;border-radius:3px}\ninput[type=submit]:enabled{cursor:pointer}\ninput[type=submit]:disabled{cursor:not-allowed;border-color:#666}\ninput[type=submit]:enabled:hover{background-color:#ffe0c2}\n#menu li a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAFKSURBVHjapJJNK8RRFIefmfmLyEZeFmNjIZEkaSI+A2lKkZ0s7a3EwgdRShQ1+QiI+AQiFgozpPGWae55saCZ/8iC3Drdzrnd5/zOr5Nwd/5zIoCN/eKyOwvq1mlmqIGYoWqoOaIWC0XFUbPTtbnuTARg7ovZTHPrXzqvbF0MVBSoWStA7nIdMUFUCCYEDdVbpfK2NLpGCFofA3z6MNs3/6vubyUhiFY9UDUANg8KvwJMDLdQjgPkCwAwM97O9mGe6bGOSm3nOE92pJo/PJdqFQQ1zJ0oBTtHBVKpJLvHBRJJSH59yp0UwJ26CHrTjZTDtxEciFIJpjJt5E7umcy01yiI5xc3z4hYFZAvviLSxnhPM7eP7wx1NXJ191rZg/50A2fXTzU+NERuMQV+uLp5PlhWawqiBFFUjKCGqPxoZPGltAeQ+O8qfwwAxOXQjeCbPgEAAAAASUVORK5CYII=\") no-repeat scroll bottom;height:12px;width:0;display:block;overflow:hidden;text-decoration:none}\n.ltr #menu li a[href*=\"&select=\"]{background-position:right;clear:left;float:left;margin:0 8px 0 0;padding:1px 0 0 20px}\n.rtl #menu li a[href*=\"&select=\"]{background-position:left;clear:right;float:right;margin:0 0 0 8px;padding:1px 20px 0 0}\ntable thead #all-page~a{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKhSURBVDjLpZNZSJRRFMd/937fN58zqWPpjBWamYmtlG0YLW+RVEQPLQ9JVNBCENR7UEhFJPUSZZAR0UsLCEE9VGQLLVCG5kJm2CZajjg2rjPfzHdvD4NTRj31h/NwDvf++Z17zxFaa/5HJkDFkVtn3ITYHh5x04ZifzmlxqdeGzK9XKmt2nbYBHCVqDi+b3EgGAgIIUw0oFP3BFqD1mO5xk047K68txNIGoSHXDuQExAHzl5jan4WtqFwtQ3SjxQkQwoMKfja1syJw/uJu0KkWhiJgZQmxUXTmVe2EkMaaO2CMEEIpBAIIZFSYhkSpf54g7E2bTuNNG96kvcvyuivY5NzmcGnL6la+MTfdOHYjnEGcSdKPDoKQqC1QmkXpSQCyB68S3GkAe/8CvyFpfz4VELb/ZrTKQOtoTfSTV8oQlwlUNplINaD4+ZRqB4xL6+DzOIVhDve4REOGZmTSc+e5h9n8L3Hh9UZ/VXQAQrMZ6yb1U7WjLXEvl3H4xN8aWwjMqy1dPoXyDF8rUEaHqRhJ8NMo8DTSEXJW7KK1hHtvoSw+rHSM/CqPi5+WDK89GBtu/yd4HcFBx6wJf8V/pkbiXZVI604zsB0OuveYJQdpcvJcQEkgFYKAYQ+t9LZ+hLZWk355BaCc9fjfK/B8GhiAwV0Pa7nWHMpMrsk9ZVmctaSE3b+5BF6Gm4S0IoEeXxrPsfEoIdoOJ++122I8stUbp4COClSCZDplRGViDLF5xBqqmHOyr3Ync9ov/2cxnth3j9sxL/mBLnBbHJ9cSzpYFtCpwgm2PLGnpMPl4/E9fxV0ZDfab1D4YJVRHr76Kh/r+/4Dg33VLW40AKAbYHX5CqA+HOdt66eNLpoRq65bHYh2oq9GA317tpwqunjv9b5J0pAFDVe4XHbAAAAAElFTkSuQmCC\") no-repeat scroll bottom;height:16px;width:0;display:inline-block;overflow:hidden;text-decoration:none;margin:0 0 -4px 0}\n.ltr table thead #all-page~a{background-position:right;padding:0 0 0 18px}\n.rtl table thead #all-page~a{background-position:left;padding:0 18px 0 0}\n#table thead tr td a.edit-all,#fieldset-history a.edit-all{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKhSURBVDjLpZNZSJRRFMd/937fN58zqWPpjBWamYmtlG0YLW+RVEQPLQ9JVNBCENR7UEhFJPUSZZAR0UsLCEE9VGQLLVCG5kJm2CZajjg2rjPfzHdvD4NTRj31h/NwDvf++Z17zxFaa/5HJkDFkVtn3ITYHh5x04ZifzmlxqdeGzK9XKmt2nbYBHCVqDi+b3EgGAgIIUw0oFP3BFqD1mO5xk047K68txNIGoSHXDuQExAHzl5jan4WtqFwtQ3SjxQkQwoMKfja1syJw/uJu0KkWhiJgZQmxUXTmVe2EkMaaO2CMEEIpBAIIZFSYhkSpf54g7E2bTuNNG96kvcvyuivY5NzmcGnL6la+MTfdOHYjnEGcSdKPDoKQqC1QmkXpSQCyB68S3GkAe/8CvyFpfz4VELb/ZrTKQOtoTfSTV8oQlwlUNplINaD4+ZRqB4xL6+DzOIVhDve4REOGZmTSc+e5h9n8L3Hh9UZ/VXQAQrMZ6yb1U7WjLXEvl3H4xN8aWwjMqy1dPoXyDF8rUEaHqRhJ8NMo8DTSEXJW7KK1hHtvoSw+rHSM/CqPi5+WDK89GBtu/yd4HcFBx6wJf8V/pkbiXZVI604zsB0OuveYJQdpcvJcQEkgFYKAYQ+t9LZ+hLZWk355BaCc9fjfK/B8GhiAwV0Pa7nWHMpMrsk9ZVmctaSE3b+5BF6Gm4S0IoEeXxrPsfEoIdoOJ++122I8stUbp4COClSCZDplRGViDLF5xBqqmHOyr3Ync9ov/2cxnth3j9sxL/mBLnBbHJ9cSzpYFtCpwgm2PLGnpMPl4/E9fxV0ZDfab1D4YJVRHr76Kh/r+/4Dg33VLW40AKAbYHX5CqA+HOdt66eNLpoRq65bHYh2oq9GA317tpwqunjv9b5J0pAFDVe4XHbAAAAAElFTkSuQmCC\") no-repeat scroll bottom;height:16px;width:0;display:inline-block;overflow:hidden;text-decoration:none;margin:0 0 -4px 0}\n.ltr #table thead tr td a.edit-all,.ltr #fieldset-history a.edit-all{background-position:right;padding:0 0 0 18px}\n.rtl #table thead tr td a.edit-all,.rtl #fieldset-history a.edit-all{background-position:left;padding:0 18px 0 0}\ntable a[href*=\"&edit=\"][href*=\"&where\"],#fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAFOSURBVHjapNIxSAIBGAVg19bCoEVcchJEsMlFjoZoSKElB8NosCJpCNxaahKhjCMw0C1LjSTIBgWDtOjOE65CIjktrguLsAY7uVOS1yYEegc2vO3/+OHxNAA0g0T14DVjGuIS9o8C6ehQwRncR0zPTwcTY6qwHHPgMboCiachCwwKewRym+ak2jeIpSPI/DVaQhEtoQiJy4IO2juKSP7MQ36JoZpchchGIbJRSFwWDDkrKaIf8QzN8hK+2TXcRpyoHq+D3rWjZzl/UMUN8WES7a9t1FIulHes6Nlq2m9Ao3ahirowtKjXp/0G8MwpqLhHFXUh6dWhwVNov93hfMOC/L4ZlSsv2PA0brYs6DsA0qtDS2BQTyzgPWRDzqNFwj2KlM8IxeU4iWGUwi402UPU2TguA1OKqAvnbCOYJ7QIL48j5TMiE7Ce/Hur/fI7AMEYQUPA30tTAAAAAElFTkSuQmCC\") no-repeat scroll right bottom;display:inline-block;overflow:hidden}\n.ltr table a[href*=\"&edit=\"][href*=\"&where\"]{background-position:right;padding:0 20px 0 8px}\n.rtl table a[href*=\"&edit=\"][href*=\"&where\"]{background-position:left;padding:0 8px 0 20px}\n.ltr table input[type=checkbox]~a[href*=\"&edit=\"][href*=\"&where\"],.ltr #fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){height:14px;width:0;text-decoration:none;padding:0 0 0 16px}\n.rtl table input[type=checkbox]~a[href*=\"&edit=\"][href*=\"&where\"],.rtl #fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){background-position:left;height:14px;width:0;text-decoration:none;padding:0 16px 0 0}\n#menu #dbs span{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu #dbs span{padding-left:22px}\n.rtl #menu #dbs span{background-position:right;padding:0 20px 0 0}\n#menu p a[href$=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAGxSURBVHjapJO9a1VBEMV/73JBVFAMSZ5apjeghaCFYvAjARVBm6CIsbCx8H+wsLcQbAQRxCAIIiha+AEWloGANoKIhSYxIAqRvLs7cyxm38uTvFRZWHbZ3TPnzMzZliQ2M+pbD7/JTKTsNFl0ktNpnNUkmuS4C3NwldWFufByVruLiQO7Atw4q42TTJiJbAGyPlA/+PmHZapsIuVga3KA4iG4gtGdMmMvCSmCVCmXAFmcPTzEhaPDhVlcPjnKzFQbl3CJK5NtJOGlbO5QJxNNds4cGuLxu2WyiX1j2xgf2869F4uYi2und3Pn6Q+2bql6YAglVcpOk+I08hNzn1cKQ0iOx+s74IKqk0R2MfvmJ9MTI1w6MYoVGi95xl4DA9QpO1aq/eDVEubi6lR7TZE2ViApFLjg4vERrPR6/stKD3RkfMeGJnInfGAm7r9cYmYymO8+W+D9/B+un9uzDnTj/F4Abj/5jiRa0zc/6tTB4ZKGsP7el34f27+TxV+JT1///hfs0esFatea0waBAd7O/R6YggS1eViyWzAz9XyvPv93Xdl1oBT3rc3+xopNjn8DAEzJiOP473VxAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href$=\"&sql=\"]{padding-left:22px}\n.rtl #menu p a[href$=\"&sql=\"]{background-position:right;padding-right:24px}\n#menu p a[href$=\"&import=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAJ9SURBVHjapNPPT9NwGAZwEg+cvMrB/8CL8eC/4NEYFHGAooboRb0QvMlRCPsRyZQdwJA5BLvgBqVtvtCVlZWiLpGwLOkC2WjaEr6wLVBDOzIGPN7EZRAPPsl7ePImn9vTBKDpf66uSJLULElSmyiKsfn5eY0QUiOEVAVB+MlxHMOy7K2ZmZlL5wKSJF1LJBKZTCaD3d1dHBwc4OTkBMfHx9jb24NhGFAUBfF4XInFYlcbAFEUk6Zp4vT0FBelVqthbW0N0Wg0fB5QrFar/wRKpRIYhik2AISQ4uHhISilsG0blUoFtVoNR0dHsG0buq5jeXkZlFJMTk42AoIgFCuVCsrlMnRdRy6Xg6ZpyGazUFUVi4uLWFpawvb2NiYmJs4HXNfF/v4+KKWwLAuUUhiGgdXVVSiKAkVRYFkWwuFwI8BxXNFxHJRKJZimic3NTWxtbUHXdaTTaSSTSciyDNM0MT4+3giwLFt0HAc7OzsoFArY2NiAYRjI5/NQVRULCwtIJBIwTRNjY2P1wDOhCz1cJ56yHjyOP8Cjr/ehaRoKhQLW19eRSqXA8zwIITAMA6FQqB7o4TpbnnPdeP/djw8/AuiK3kM2m0U+n0cul4Msy2BZFjzPQ9d1DA8PnwE9cx0tT2c9v/ql13gr9+OdOoSOL611QCqVQjqdBqUUKysr8Pl8Z8CTWU/5jdSH4DcfeoWX8Ey1ov3zHbiuC9d14TgObNuGZVkQRRFer5cODAzc/AN0x9rn+sgr9PIv8HCqnUQikY9tn24jEolgenoaDMMgFAohEAhQr9c7NDg4eKVhTJ3MXeKZao39/RgdHb08MjJyIxgMXvf7/c0Xzfn3ACuyH7V6hJHQAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href$=\"&import=\"]{padding-left:22px}\n.rtl #menu p a[href$=\"&import=\"]{background-position:right;padding-right:24px}\n#menu p a[href*=\"&dump=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAKMSURBVHjajNPPT9NwGAbw3Th59e7Vi/HgP+HBGCLiDyLGqFzARAnGiyReANkPJVN2GErm5mQLU6xdLXRlZcumLhGyLOsy0vFNW0KhkFHSdjgGPJ4Ul0Himzy35/ncXgcAx//mPtOFu/RN3KGu4/ana7gVu9pc4Hm+jef5Do7jPs7OzoosyzZYlq0zDPOTpunI2y/+zh66G6++u/H6hwdd0StN47OJRCKfz+exsbEB0zRxcHCA/f19VKtViJUieqhuDPKPMSQM4mVmFDem2o8AjuOSiqLg8PAQx13f13t4yg/A+82FfqYP1z+0o/P95SZAr9frJwIvss8xwD5Af7wXD6d6fwFwdLy7dASwLKvv7u5C0zQYhoFarYZGo4G9vT0YhgFCCJ58foQh7hnC4bD+Z/cXYBhGr9Vq2NraAiEEpVIJoiiiUCggk8lgfn4eCwsLWFtbQygUOh6wbRvb29vQNA2qqkLTNMiyjMXFRaTTaaTTaaiqikAg0ArQNK1bloXNzU0oioKVlRWsrq6CEIJcLodkMglBEKAoCiYnJ1sBiqJ0y7Kwvr6OSqWC5eVlyLIMSZKQyWQwNzeHRCIBRVEwMTHRCszMzOimaUJVVZTLZYiiiEqlgnK5jFQqhXg8DpZlIcsyfD5fKxCLxfSdnR0QQlAsFlEoFCBJEkqlEgRBAEVRiMfjIIRgbGysFYhGozohBKZpQpKkJiCVSiGXy0HTNGSzWbhcrlYgEolcDIfD1tLSEqrVKmzbhm3bsCwLhmFAVVVwHAen06kNDw9faAEAOEKh0JlgMPgmEAgYwWAQ09PTiEQi8Pl88Hg8mtPpHB0ZGTn97+bE1/X7/afGx8fPe73ec263u+2k3u8BANRmJnJM+MxYAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href*=\"&dump=\"]{padding-left:22px}\n.rtl #menu p a[href*=\"&dump=\"]{background-position:right;padding-right:24px}\np a[href$=\"&database=\"]:not([href*=\"&db=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&database=\"]:not([href*=\"&db=\"]){padding-left:22px}\n.rtl p a[href$=\"&database=\"]:not([href*=\"&db=\"]){background-position:right;padding-right:22px}\np a[href$=\"&privileges=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK/SURBVDjLjdJZSNMBHAfw1UMPhfTUQ5bgkfWQSodmYplroiAkXkvXcnOVipqsWhLKXEvnUEHUOecU72tec8vEVgQamUfeUzzThcc2QUqd+09b+u0pMxTz4fv04/d5+PIlASAdFG6wJWsk3351ofoMZstszKVs22I/V9tjf+4HPrN9z1I0lTZbizWnsTsFsXbZhwKKmadEi03O0KoiQHRnQit3x6LMCqP5dj8OBUiCT2bqhlRY/SyBeagchk4JFgZb0ZZyWXMoIND3buRY1bPtteFGbI03wTiqhK5dhGSGp3xfIJJsz8pj3V4VhZEhCaeYo0Mc+0QvYn/q5BzMv34FXXMSOqSP4RRxsdUl3uHEPwDT/Rwlj+W1lU0nY3dKstjILRAgQ8yFMtcf4y001CjC4ci7UHaJc/74DpAVcqWjMNofTfyHGKvhoppDhSiMAmmUF0qHuGh5Q8VyDxtmQw/mP9xHRhUNbtEukh1AHGLXMN0m21OYLJEMueoelj6GwbxSiZVRPpa7eJioCMBQmsf/C0tPCUanwg+b3+uwoeVhQ1+IlWEeiDk+pqSef4GjV3MSxAlxewpzoD5HRYkP1mfSQXyLgWmOA0LDBDFFRT/fzUQCQDriXvsokNNvaNcDwno5kkpkiBeVobZtAL3VUVDLQw1rkwwQ034wzdBhnKCin+9kqgi1ppFsfKVUKrvF2Dy+BcEYEPEFYLQDwvoWfCoLBzFXAOPXIBCT3ujLdl0fTHHRqwXX9DKGdRAAEkktcP7V15gLjkIHpgpgKrdBl22jqy4GG9pyrKmvgxjzwYD4Bgrodg9UQZYW7Qwri50haXJuaRtTn4LG60bke4D1FmAogS4FG5tLQhgn76A7xwO9wpvYb62kycoot9bkwERXapXS+UkvyDw1yLwRpKW+RHdRAN4Jvc1FcV4Ns6U0+n7Ab/dSu26WPRQHAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&privileges=\"]{padding-left:22px}\n.rtl p a[href$=\"&privileges=\"]{background-position:right;padding-right:22px}\n#breadcrumb a[href$=\"&privileges=\"]{background-image:none;padding-left:0}\np a[href$=\"&user=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK5SURBVDjLjZBbSNNxHMVXDz3UQ0892AVSs4Q0shQRA5uzCFGL5Rxqc1u5mZpNnWNN533eaDr976blZeFllc7mMLMl6IOGqdOpS4vAPaRbb6FiQjpPm5QahvmFw5cfP87nezgkAKS9JI4+zp5Wey3Ot57AnMZ9rYnn0RAV6HHoz/+eZl74SYq12d2x0OaGnapL9azeF6CBeYxY6PSHrZeDH8OVsOmCsaA9BYva8/u+AKroo5V2cy8Wh1RYMz/D8nsV5id60F/sZ90XgBoew51pydxYmuyAY7YTKxY97AMEihKu6v4J4JK92Ep26CLBIEPFoqwl033HCGHqT7uOj69dhbAbcjFY+wAXOOd7AgQ+R/4CMIPPUJTsMEd1PBk71SjjQV4nQYUiF/lSAbo+tqCkvwi+eec0F/lnD28BZPRLg0+Sb6Gz4B5m2sRo5dNAMCioTQpDk1kM9bgQVaYMlJsy0f6pAen6NAQlB6i2AAq6Z/uXfu2uwrTZZMjGH6HCJEDxaDpyRlMg+pACtoqFOVXU/wurKI6GYkKEfMN9pKvjwK26ibjSUFAl12B7GrENOHi5RqQQpe0qzIeWBW5dDArb2ei2KGG2GSF7lwK6zBcMoffrTfOB4OeJVL5peeAbUPpSh9xGLQSEBvUjqxAo5hFfcn29a7oaXTMEXCPt40DWl4TAVLdVknt4LY3G614xzDogmQE4I0DCABDTDdC1ADEEROT4ocdSj51jmFK6ACBNSfzXxzrk4L+yg9kLMPUbiNdugKZxIFINRModuPLwNB4b76LMyNo0l71lbSew1oTYOkoyEJs3DK4RYL9xJtADDANwx5WifA6xvCjclnqj0pi4edm1XW8nQEr63JwU1FNEzQ6ktej900dBzptyahpk8SRCsk3wvPHCKs9KLEgQehuchiVX7N+73NXfL+Zkqi9OGtlWAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&user=\"]{padding-left:22px}\n.rtl p a[href$=\"&user=\"]{background-position:right;padding-right:22px}\np a[href$=\"&processlist=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGQSURBVBgZpcG9alRhFIbR5/tRA0Fbbe0tp4tFsHFKLSaNjSIGJlapDIq12BgIxJRaCGIK8QaUNN6BmEJBLNIGCcko55z9bs8WpxlECLNWcnfmkW6uv7l/dXnw9HDii+6AhEuYDJcjF26G3HEzTOLC2fZkf//gwdtnK9t1sDTYOrOwmC8ucBqLJxPbArbrpPU8OTzmtH62ngkPX33xf3n0+qv/z90n771HdRdhvAcjfaBpGobDIVOHx7+wzrHOMReNOZcvncdkhIo7YWeZ3jVm1VJJyUjFKcrUzgnqjFBNRhjvwfUf72jbltFoxFTJkFOhJrDkWBZBJkJ1OWFnmd4NZpUESuAJyImiQpCMUCUjLL2Ae+klTdOwurrKVKqZKiGHDCjxhyRC7dqW8PEOvdvMyvRypgDmTk5O6NqOUN1EuLIJa+eec3R0xMbGBlM5JYKAkhIuEVwiVEmET+v01phVUiIU/iqFIHdCPfj2fXe82a7IDJkwMyRhbcutx5+ROy7DzZELl5AIu/SSuzOPzJx+AwKoFtIrwFHLAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&processlist=\"]{padding-left:22px}\n.rtl p a[href$=\"&processlist=\"]{background-position:right;padding-right:22px}\ntd code.jush-sql+a[href*=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJFSURBVDjLpZPNS1RhFMZ/5733zkzjR/ZBCUpoJdUiBCkll4m0CUKJIGpVSLjyL2gntDFop6shAolWbcSNIW0ircHBUHCloo3VjNY0jjP3831bWA5ai8Bnfc7vPOfhHDHGcBjZAENji7N1cSj7IcdqY2zkKoiC2qSFNsKPYoXpTPbBynj/4j8BlbLL9c4L3OqoZWLmM4/vXdpX9OJtHq0lBXQdBIgxhvtPZmZ7ui+yspZrjwKfWExxtMbh66YLAgj4geZnyd2YzmT7Vsb75/c5UEqwDLgVl55r57hxuYY3c18Y6mtDgO1KSBBETMwV0VpeA2f3ARKOwvUCcgWX9bzH0NhqvC4Okx9zBzNpPdGQ4OHIrJnOZLtWxvs/2AChNnhRiFIKy8j/ZjILiALYLgc4YnO8zsJSIWUv4Pt2CMBU+tteoxtC0YN8wUdEV1eItMHCIdSagru5l0kQaZ4OdqC1wQAWhqQNnudR3PGrANu2aGmE9FJATSxJwinhegHDr1ZRAmGk0ZHGAMYYMJB0dh0ogOVs6VNqcoGtosYv1+9lYikHERvBQsQCozBGCMIQ3w+rDtKjvQMAd4bfL59vFqYzQasjNoM36wi1vzvHgBFNwo4x8nKNreJOFfBHy9nSXGpyoSPSYOGgqZCae8TJ5BkERb68zsDVZygSlD3/b0B6tPf2byempRFO127T095JQ6wJFBTcJk7VhCRjYItUT/mgrgxOvWtrPtLdEG8gYdcT6gDRGjERWsosrS2TKwbMP78rcth3/gX/0SEvLZFG1QAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr td code.jush-sql+a[href*=\"&sql=\"]{padding-left:22px}\n.rtl td code.jush-sql+a[href*=\"&sql=\"]{background-position:right;padding-right:22px}\np a[href$=\"&variables=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIbSURBVDjLjVPPaxNREJ79Qena1EO6u/GQ9CiFouCp5FQQET0KQvBQbA/tqf+BCEXoyauCl7KFHkoOvYimUpToRTyISVtsliImpCwkLUGqxvzY3bfOvO2+bOgljx32vdn5Zr4336wUBAGUy+V7f96/3PVaDnjNKty17DkYbZ1KpVLppu/7n5nbnVDAh7NXK3Bn4/tIaFVV59R8Pm9ns9nV8aOClZhCbwDguu5QIGMMiGn8rGlamCSXy80ggxfMXAAFPPj9qXipkizLHBQtSZJEQsFg7KBgTZroZGEArWc7TSAchXIA4w+sPdQH1xAMDGQgeXD+4aNIQODZjHaRILT9Wpt/Q8wwA3X/rXVVD3glkQD3h7V/vGrA8Bvz0Rf2AK/F7zRQoY8qIAPn+TLczx/xRPF709nzPOFHayeTyfkBg29vrEkj5BkFPdlu4NtHugH4wYUSqNBaziQGE5hXifXgMVfh115RdHr90TUOIkPNBZtutwvVahUURZFlYuA4zmqzsAl/v24BFhQSRXJFDYvAlUoFUqkU+VmMwSLIyKC1W4ypwISRr9PpgG3bkMlkQNf1YRXkL6+thIlN8y9PIDGgygROp9NgGMZgqOIqEIPa0yV4sPeDgwlIne/1etBoNHhV0zTjExn+Cxh041bl3c8rSY0PCzWIgGQRCxpnSlKv1/m+3++HSaKGLV2fmp9OjN122u7JxnHrYNTf+T+76nzVPsi2lQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&variables=\"]{padding-left:22px}\n.rtl p a[href$=\"&variables=\"]{background-position:right;padding-right:22px}\np a[href$=\"&status=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH2SURBVBgZpcE/SJRxHMfx9+/uuT8qlgR6mvTHqyGwKMWpbmhvskFa2spFRJxaGlprKBQcKmhqcWloaQ2ixcFaDhUKLDDJSFHvT+fzfD/ffJC2Go5er+Du/I8wPrs4Vbk+9nC74V3ugIRLmAyXIxduhtxxM0ziWD6ur6xs3Hv1eGIhGrs2Np8rdmVKRdrRVW/YPLAQNWLPNLZrtKsZe4ZDkZtz/+Yg7Zqe+0IqchfujpNycCAEPiwv8y+jIyOYjFSEO2bG5Nw6fzyfOUuqUqnwN7VaDSVGKjIZcufp9BkIDh6QO0ecd9UNtvaa1FoFCrmI4x3i6lABmUhFLkcmQgAXhxyCMzw8zNuP69TVxeWhE0S5LFu7B+zst1j6XEMyUhnJkIzEDJMhGUpEtVrlR7NIudTJTiuwuWckIctgXzfbzYAkUlESx5gZM8++88fcZIlUrXlAPp8jaSXIoZU4xShL4hFJnJCK3IQkntzpA5yUJFKdhRwHsREbJHJSHqBRr+MSqUgSkgMiAM6RcvkcvzZj9ptGd0eeljlRJrC5HeM/1zifXSMVxmcXF0unTk7IDJkwMyRhcUwuH9Hf18PoxdPIYbfWwrZWqPR+Y/fT++Tr6tLt4O604/WDG3f7B/of9Q5d6VldetMI7k67Xk5duDVQvvRCSjp+A5XMMGcdZp9aAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&status=\"]{padding-left:22px}\n.rtl p a[href$=\"&status=\"]{background-position:right;padding-right:22px}\np a[href$=\"&replication=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI3SURBVDjLfZM7aFRBGIW/mXt3swmuaMjGBwqCBlQsRPCB2GknCIpgJSKKkNZGxM7CQrSw0Ngp2vsoLBS0srERUSMiKkFRYkLMO7t778x/LO7VxFdOMWc4//xn5j8wThL/wqnz9w6BrgIrhQNBuSzEQMp/odtnjm7t6m00cC5FQG4OK2rEkHHuyuP+/xpIdDV6GvRfvsWGvr5feuIdn96+4sLpfkxikReA9yl969exZecuEp/gkwreeyqJxwzMFjEwCQM6OmrUOpfAH1kJEU2k7x5sf1Fbunmzc/73sg4QDJ6/HmZUQ4UaiwQ+v/nKsb0QzEid/Ma1e25UnFuQtHPEh3eQwCdVfNJRBlBSpYaAEIyUoBaWdbSHB4hZAn4pztUJ0UAwMjT413gjQ4Og/eTRSMmdl2XErIpMWPMT+ew3zm4bofnsETePGDBUZmBYFsl2V5vgOkM0UpxqFppkc6Bslnx6ivrGY1Qbq1ixehnOuWIsqeCkzucnJ5KKz2KMmkzJPWlnL8s2nQQMJISxJP/I+8EHxDCLxRkUZpA1qfYe58uHMS7dvT8uOJySS4otbO4lipMoTqMwQbfGWd49CWGi1KdQnKVzTUqlNmwPrx1tAKS0kSxg+SgKk8XhMFHux1GYKpsLAylAez7QlExyRBS+l43ljb/MpuebrVWMGRYYKLPxMDfWlc9U61jdSxWwOqgHxTaQIV+w85HYakmZtecNWu2LH68f3IHYh6O+2N9AgHuaYbr9U/oB0sFcUlVzMrwAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&replication=\"]{padding-left:22px}\n.rtl p a[href$=\"&replication=\"]{background-position:right;padding-right:22px}\np a[href*=\"&refresh=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI/SURBVDjLjZPbS9NhHMYH+zNidtCSQrqwQtY5y2QtT2QGrTZf13TkoYFlzsWa/tzcoR3cSc2xYUlGJfzAaIRltY0N12H5I+jaOxG8De+evhtdOP1hu3hv3sPzPO/z4SsBIPnfuvG8cbBlWiEVO5OUItA0VS8oxi9EdhXo+6yV3V3UGHRvVXHNfNv6zRfNuBZVoiFcB/3LdnQ8U+Gk+bhPVKB3qUOuf6/muaQR/qwDkZ9BRFdCmMr5EPz6BN7lMYylLGgNNaKqt3K0SKDnQ7us690t3rNsxeyvaUz+8OJpzo/QNzd8WTtcaQ7WlBmPvxhx1V2Pg7oDziIBimwwf3qAGWESkVwQ7owNujk1ztvk+cg4NnAUTT4FrrjqUKHdF9jxBfXr1rgjaSk4OlMcLrnOrJ7latxbL1V2lgvlbG9MtMTrMw1r1PImtfyn1n5q47TlBLf90n5NmalMtUdKZoyQMkLKlIGLjMyYhFpmlz3nGEVmFJlRZNaf7pIaEndM24XIjCOzjX9mm2S2JsqdkMYIqbB1j5C6yWzVk7YRFTsGFu7l+4nveExIA9aMCcOJh6DIoMigyOh+o4UryRWQOtIjaJtoziM1FD0mpE4uZcTc72gBaUyYKEI6khgqINXO3saR7kM8IZUVCRDS0Ucf+xFbCReQhr97MZ51wpWxYnhpCD3zOrT4lTisr+AJqVx0Fiiyr4/vhP4VyyMFIUWNqRrV96vWKXKckBoIqWzXYcoPDrUslDJoopuEVEpIB0sR+AuErIiZ6OqMKAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&refresh=\"]{padding-left:22px}\n.rtl p a[href*=\"&refresh=\"]{background-position:right;padding-right:22px}\np a[href$=\"&create=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&create=\"]{padding-left:22px}\n.rtl p a[href$=\"&create=\"]{background-position:right;padding-right:22px}\n.rtl #media p a[href$=\"&create=\"]{background-position:right;padding-right:24px}\np a[href*=\"&db=\"][href$=\"&database=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&db=\"][href$=\"&database=\"]{padding-left:20px}\n.rtl p a[href*=\"&db=\"][href$=\"&database=\"]{background-position:right;padding-right:22px}\np a[href*=\"&schema=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&schema=\"]{padding-left:22px}\n.rtl p a[href*=\"&schema=\"]{background-position:right;padding-right:22px}\np a[href$=\"&view=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHTSURBVDjLY/j//z8DJRhMxE8+VwjEE4D4DBD/j5989l/8pLP/4yec+Z8IpJMnn/2fOPH0//i+0+9TJp063b3uxv/uNdf/Ixsw+z+JoHPVNRQDboB4c468hePZeDAIJPYc+4EwYOLZDzADDt76AsaHbmPHMAMiWg7+gxsQN+HML5DgbAI2I7sgvHEfwguxfaf/kRoGoXV7EAbE9JwCC4bU7/nvU7vrv1fNLjD/3tMPWDFYbc1OhAHRXSfAgg5l2/83L7v436J4G9yA1++/oWCYAcEV2xAGRHUcBwsa5235X7f0wn+9nE0oBjx78/X/moMr/5fMTPif1uf/P7HL679veRGSC9qOgjXopK//X7rg7H/tlLUoBizfu/h/4+rE/1uuTP1/4dmu//27s/6H9+v+N8+W7IG4oO0I3ICS+ZgGgGzceHnC/43XJoHFe/ak/u/fkw4y4DvYgIimQ/9gBoA0IxsAwj7Vhv+3XZmDEgubLk0FGQDJEKENB+7hizL7QqX/3buS/rfvSgDz23cmoLogtHZff0jN3q3B1XveBVfu+h9Yvu1/YNmW/wElG//7F63975wX/z+4R+N/764UsM0gGsSHhwExGKi4A4g/gZwNpTtA4gDRWxxGCQ/RXQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&view=\"]{padding-left:22px}\n.rtl p a[href$=\"&view=\"]{background-position:right;padding-right:22px}\np a[href$=\"&procedure=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVBgZBcFNiJVVGADg5z3fmTujY5NZBANBIVkZ2J9IKkZFGKRuglq1KaqVtoqoVbSKFi1LoY2QEVSbcqiFWWJqPxL044wUGESQVqJOKerce7/z9jyRmba++tXTy2YmnyphPaYQIJBBNuPWfls8l1/EfxdeOrJnxxAgMtO2148d2ffC+rWlxMqkkwBkQjp7aeT97xf99cfS5ZPzv6w6umfHElQoXdw+qN3KhX90JYIgG30243G6Muo9tOYa999WfdfOLs92x4UHd3163eG3ti8ViIgVmdkNumKiUIOu0AURFIFmdmZgx4ZZt9w6uazOTO+FAklAQQlKhBKhRCgRShfOnL/i5hUjd64Kz2+6XjfRPQkVIJPaEUJGaH1SQu0YZHHqXBq2sdaGHlg9KWoZQ4VMEjWKlBJRQiAb2RUGlBZa66RCFFAh0RBBCIlENiY6QBTRhyypIROo0MZk0hDITFAKWqhdkkGSQt/oG1ChtZSZJCkBSCCEE79+Yv7UnIuXLxiNR8rwnsomFfpGn2SjAUjQkuPzHzp98XMPb9ngplVrHFr42OX5ubpx1943K7Rxaple+2EopBZkBo2MNL3wnie2P6ovvbtntzp48iMb1232+6n9OyuMx72+Z3Zmwn03Fi3pkz5oyWffnjERKzy29lnw4iPvmDuxG/unKoyXWhu3lsNefPNnr0VKAVpy/tK/Fk5/7afTR72yda83DjxjqpuEqxVGV/u/pwfdDS+vG05nZpE0wLXLqn2Lzzn287s237XF3IndBlEd/fEwvB2ZacPOgzvHo3w8Iu5NuRxAkkhpovug1u5Q5SoGfWurDxzf/eW2/wEnITFm/fHryQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&procedure=\"]{padding-left:22px}\n.rtl p a[href$=\"&procedure=\"]{background-position:right;padding-right:22px}\np a[href$=\"&function=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK9SURBVBgZBcHLi1VlAADw3/edc+fRmOP4YEzERxQYZGaQaQ8qRDCK+gPcGC1rYbjRWtqiTaAULWrRItwVVAaFBUIvhqjAyixIE41JB8fxzsy9c+855ztfv1/IOYPDH1/bg5N3rxnb169b/bpVt62Vpu1iCTeRsIB5fIizJUDbNI/s2rhq39EnNwCAXtVO9qt2cmGQNlc1S8Pkys1lX1zqHcCREqBtmunVIwFcu510QlAGipLRTrRlNCpi1CnYvXncpsmJte//OPtWBEh1vXqipGlZqoJuze0h3QHdAfMrzC0ncPz0Vfu2T7h/fWdDCZDqeu2dI1FvSG+QxBiUKApiQSEoAi1CWjRzecEvV7uzJUCqqunJ8UJ3pdEfZjFmRSSmoIgUsqJALtxYHDr11d+LOFwCNFW1dXp1R3eQNZApUhAzEoWszFGbSZ2kqZrtn7762K0IkKrh1o2To3pVFiJFCCIiAiBkcqYZDqVqmKCEgye+HC+LODLaiaqURBlZRhJAQIzUKVnu9RssQgnNsNowMTEmBlrIhEAU5EwIXLx0xl+XP7fUXzAV+0V3+cbrHHyjhFQN7ygnRpSRIgapDeSsRQj8+udH5vtfe/rxh21ee69zFz4JM79fP7H3lU1r4hNHTq9vqurEnh1bXF/MrtxIbi0lvYqUsxCyny6c9uCOXVJMdt11QAq1vTsfhZfLVFX78ezPF/+xsFJaHmZ1yoZ1UDWtJrWWuv/phFWeue8lcHT/e8789i4+GytTXT/0wlMPjL92aC8ASJk6ZVXD88e7Lsz+4Pzsd44d+MCbZ180VozCoNi48+A9U5MTz80v1a7O9cwtDiz2a3WTFTEa6QQpDX3zxxnbpre52f9Xtzfn+/PfWrw9PBV2Hzq5HkewFeuwDlOYwuTYSKczNtYRRs5ZSTPaPEDok9+eeWf22P/PLlOL9Py8xgAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&function=\"]{padding-left:22px}\n.rtl p a[href$=\"&function=\"]{background-position:right;padding-right:22px}\np a[href$=\"&event=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVDjLpZNNSJRBGMd/s7q50ZoWISZSRAgF5VpELFJ0CK9RneokEl1qO3URpFNCXqIO0aFLEF0iiAj6JBB0WYwOoikRJiXUYqbsumv7zvu+M/N02BV30YPgc5h5GPh/zMz/USLCVirCFqt+tZGfb8UUFxEJEBMiNkRMgBgfsT6EGms0YjwINU0Xn6haAmuIHrm0TkEEFFQWQCD3/PJ6B37+N9tFEOeVDxSIOEAhrDGoSAMSehtcwRhcMI8pfgLnIxKUdxeA04jTiPPYtucCLixtQGB9wCBOg4QVUDVYI64EYpBgAwdmZalsuUbZwzldIfHAeWUR8289gbMaPTOK8b+DDUAMVheI7W8pKzuNWA/E1byBWg3S4oteibZ0EO86DzhcMEdx/BkN+3aBlBie1YzMOZY9j6CU489K/tabOxOD9VVMhAuT5D6m2dl9FaUUTkKQEu+/FZny45w5fYL23R0MT79kbGr0djLV1hyp/u/Gk72E+b/kR+5VwBqxmtdfc3QdSmAjlsTeHqwKSR7tBri+FmWjUXURdhy/gphmiplX1MUSxFr7WCgsEVVxzh2+AcDNs4842NIJEKvKgSb37j5iNBJ6BN4XmM1Q+vyUQiFgOpthIpumv+cxQx/6iNU1AGi1mWlMptoG2w80DXR3nqKj9Rgz8+NkJtP8+rF8V212nJOptiHgGtAIFIGHYw+y/f8B3ntD1Kp2NbQAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&event=\"]{padding-left:22px}\n.rtl p a[href$=\"&event=\"]{background-position:right;padding-right:22px}\np a[href*=\"&foreign=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVDjLjZLta5JRGMZH/0X0DzhG0Wy1PdVG6aIGtYI+9CVhRSt6gT4Vgavl2vI9LVIWrWL0KZTYpBqpFMUMZ03aMpXVMttLpPX47qPT7eqck2NWzjpwcXjOc67ffZ37nBoANdU0M9RqJkJJ5j///5e5mPvEVAnyb3PGi3z0LgrJZ2R5iUFCFslAVUC5OfdVj/z3weXqoCM0yMFt4p5XA7DI1CzMXkLu200i5y+IVYKlIo/pfjGDrAqgkamZaU7BIIWEE6kpLTLTbVjMvcCUcSNWTyC8JwnUKxAG6kHSvxtxbxM53kP4u2ormtfQHkRGzxLDZSQmmpH5IEM2dBKpwAHExhtQiPXB310L+9WG4N/3bduFiOs8FngrqcYR8z5SvRNJ73bExsTMHFDUwaHa7PutidS8VEyQczqQnZUjPilCxteI7OcrmHnQghHXRZy7dRjHr+2HrHfHYtuFDV0MUP7S8hELUsF2UqkOKX8zhLAGHo2Y16ulvMJyBI98Jrydt8PgOIVDhvVoPL1WV6ocJ5GHkA5KwbtFSAd2Qviixmut+IdN1XRfpmwVht8ZMey/wd6BztkJg/MEBQgUkFyIOUizOPAuEbIf24m5Dx6tmH+s5W7TmHvl9XjiG0D5sE2aKKB05+lXSPilpGF7kAn3wK2qj4/ouf7l/nBn1gla+1Eo7R3MrHzasZIgbJWMC9FRZMPdEObvYUwjjtmNW6+XXy3Z2HtQJ4LefoxVpjP9Zj3w3GmRT5i3zL0xborSM780bVNWelxks4ooSWOXZhVd/wllWOl+7RbUkgAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&foreign=\"]{padding-left:22px}\n.rtl p a[href*=\"&foreign=\"]{background-position:right;padding-right:22px}\ntd a[href*=\"&foreign=\"][href*=\"&name=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAKsSURBVHjahJJZSJRRGIaf/3f+UZomK21UzMxWDSuiTaKgZZQugjLaLiLqQknvjK6im67aCIrMCZEuWqBIaypNSNBpMyqUSKKyXHAc3EdHnfnHf5nThQtGWQc+OB+87/u933uOJITgX6fzSXYJUDDRuhburSn8DSCEmLG8bmeJ1+0URrhVGOFW4XU7hdftLJmO+T852CjG+m4JfbhWCBERXrdTtD3cWTaJk/62wqTtpOxLGMN1SEo8vW/uALBwbw3tt7fQM4pnc2H9jpkERNLuUozBxwgzgKQ4gHT63l0AI0LyvnLaypz0mdEeeabwhNaOMAPjd2MA+Ia0/CTBMQctVS5GlHjmGaHtMwpISgJSlG1CzUTXkxn6WEXi6qMs23mc1I35BMLxyH+xLwMuf0MpIqKiDdQRCK6i42Uly3flovq/ora/xz4nkZgFiyNTGUy9tywRHbeOuRmbCHdfIWI/h+/VA9JzTzDWdR91QKL3e4jQaFBXVXW2ZdrwguQ9FZjBD+gjHkKdZ5HjbuDz3CN9fx5h301kq4EyOxWb6KT42eeVN563aJbpP033v0Dz38EItBCynWew9i4ZB/IJ+1zIioE2nEZ//SeW5FVKx7rXU1wlsIxPLscY9qD1Xkcf8mGNTaL//VMyD51A6y4jyioIB1Lpf9tIYk4KHy6vn7JtAUaMkY921XsRc3SQmIQVtDVnQoKDrqbrzHNYCftTGGr4RlJOCpgd0vTQLYBdUmygzCLaEUtlRZCDBfl8v3+a5tf1RC9aixwaIKuoWhJmALXtCJm5DmYtqwZAjhiRRkONoNi2ItsO86O1D+1LJWlrt2GzraSnqYWsomoJoLF4F8AUGcDSEzAeDT08lahrplXoQv7ys3f+1VIXGzPSsC9dQ+6ZWgmg4dqGP8gAvwYAN7Z8lOPI6HwAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&foreign=\"][href*=\"&name=\"]{padding-left:22px}\n.rtl td a[href*=\"&foreign=\"][href*=\"&name=\"]{background-position:right;padding-right:22px}\np a[href*=\"&trigger=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJlSURBVDjLpZNbaM9hGMc/v8NsTqF2yMhZKIexmpFyRZIiblwouZDauLYoTVEryg2uXIoIOUU5zJkh4e9QDmtJbWxrbUzz/72/9/m6+P3HLslbT9/3ufm+n/f7Pm8gif9ZMcDxe717JLZ62UQzwxukZnhveBOptyHl8anwZk/3b5pZEwOYtGNDzejSfzm58dTH+b8JvFkpwMizdSCBT8E8OJftkzy4BPIOnONHQzPO+eIhBoM5CCrLwNKslBZM8uDykCbwtgMAl/o/GXhvBYMA2rtAlpGYZSR+UIGKCgCSggGSOHy1Q/0DTifufZUknbr/RZJ0+mHWn3mU9edbMu3qG9DmQ08lKSNw3jCJOIKzjzqJopBzLZ3EEVx40smDr/u4e96QGUXPGpkzYQSJywjCwSsIiKOADUvKiUNYX1tOUQhra8oJg4hZ02cQhhGrqyuyp03tTwbOGzKIQ7j8rIsn3Qd4fEVIIn6+kzAMaH35Fn37wbZD68gnCUl+EbAkI3CpIYmiCNZUlwEwbfIUgiBg1cIyJqbzGFPiWbl8GXUb66mqnkrJ2IvUbq88GEI2dQBRGHDjZTcAbZ8+ERDQnOvm+fszVM1egA89C8avwAeO2nlLAeqRxK7j79TzPa/mXJck6darTG8XdM3uhbry+piGrou5I1pcP17h7wwk5k4aRUfPANMrhtP2pZ8J44bx7nMfff29vGl/SNP1LQA0XdtCa2cO4GdhkPRg78kPVYm3kS71uNTjU8N5I/UpxSWracndZOn8ZVx6dZRhQcz9F3cAjgR/+51rt1c2AXXAaOA7cLTlcHvDL6y6kIpO9lqsAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&trigger=\"]{padding-left:22px}\n.rtl p a[href*=\"&trigger=\"]{background-position:right;padding-right:22px}\n#content p a[href*=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAJ+SURBVHjapJPLS1RRHMc/M86M5GtoSMcKMq2ITI0kgh5USJmGhYsIogh1IUgrIfoLwtq1iDBQS3qAtJLoCRGFYGTgq0WWpBiYjk6ao6Mz995zfi3O9UG468DhHA6/7+P3OB4R4X+Wr+nJT1FKsB2N5QhJW5O0NAlbsGyN1oLSoMU9taC0oN03n9ZCWelGA7Y0CUtjK0EpwVEGpNaA1oJffIzidZRgO0bNcgzIBIIWo6g17jZ3EUHEkHhtxyVwhHOHQ5w/vslVFq6U51BbGUaLoEWoqQgjImi3bFqDz1aC5WjOHgrx9H0URwnFBWmUFKTT9jKC0kJ9VS53OyfYkOqlurCPxd7HpGQUc6LoAz7b0Vi2oTT5CX3DcUoK0lcsA4iAnZzFP9FFbvFlgvn7+TO6G1/SFhwtdLyb5mJZNgD3X0WMRTdPgJzMJRZGWgjtOsLMj68EPBaZWbnGgXKr/fDNFEoLdZXhVUcCyp7n1OZ2gttPk5zoIJDmYax/iNgieJO2Cbp0Mhvl9npwJL5iO5S2ROzbTYI7zpD41YLHP4s/I5N0maFx8KqZA6WE9tdT1FYY5XvPJukajJEVWKAs1EZwZzWJ8Wa8fgcrlk+0u59Pec2ITBuC5X63PJ9EuXkHA3EO+FvJ2VuFNdlKSkBIzOUR7e6jJ7+FqZipkVfL6qQplyjdO0+p5wGW2sLElztoEsRntvK7Z4jPLng5RZ/SZiRXCqaEmlAjhQ1tfOu4xveublK37WMuMs4juc1YbwTtTqKI4FnvN96oL7Kv1zX48Cr633YyNjq8EMwOHS1vGhj4N3ZdggvHQkulBWHfwT35iD/ZvTQ1XVt1a3Bkve/8dwDixMULwcWPDAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr #content p a[href*=\"&sql=\"]{background-position:left;padding-left:22px;margin-left:10px}\n.rtl #content p a[href*=\"&sql=\"]{background-position:right;padding-right:22px;margin-right:10px}\nh2~p a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr h2~p a[href*=\"&select=\"]{padding-left:22px}\n.rtl h2~p a[href*=\"&select=\"]{background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&table=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&table=\"]{padding-left:22px}\n.rtl #content h2~p a[href*=\"&table=\"]{background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){padding-left:22px}\n.rtl #content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJeSURBVDjLpZNLSNRRFIe/O81o+WjISM0epuarEHuDqIFEDyoqEFtFD4gWQVDQoo0QhFARbowKNNpKi0DJRYVGqRmY5oPUBs3S1GnMcdR0/v8Z554WM44RGURne7nf+X6cc5SI8D9lBTh79/0VIBkoAHaCCIJCCxaLwqJAa40O4LFZpT9z/cpdaOFqcZZCRDhT0V4p/1i3HveIiAQNgEKAh83usNrfgp3Pj6NvyGOGI6AlceExPT4SAKX+/PnjNxMAr+GPCANEJGqhq8NlLtk53myk0FlN/0QO19a+Ul33Lp4OArRYF9SWqrmxWqb7WliRcwp7ynY8g5n0Pa+6vQBQACXX6zG0RgvU3djP4OhUMI7nBXZ6iEvPxz3QS4TyEbsykZjVG+0hgAbgu9fPvm1J1LWNhDtH+1qxSRf21IOYY9VERCm+dPQxPatQvolcS8gAgBkjgF+EOXM+OImpZmw/GrCnHcYYrUTZJrHFxBItbh4N5bH70hOHBUCFDEzTj9cfIGD4cfbWEjX7GvvmYxgj97HY/PimN+Fq7GTNgTKchh2AoMEvUxeBnKgOPF+bid96BJ+zimURgjmdzHhTO6qonOUJ2YjMLwL0vA4ThluqKT0UwBdIYqy7Ao3BrHsdrre9qKJyVHQCodgSBgS0/gzQ/eAExWntbCm4QORwE46aZjqeuXG87GTD8TukZmSRkmQPmcrk4iYGdE1JaUOGiOTlulyrfB+ekpJbyNT4BANtDupjLzNe9g6R1lBIPQOWXgD1+zmf3Bvn3ZGaYN2TnYLYzDde1/i5oze7Pi21YD8BVSdMJ0n4cQkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){padding-left:22px}\n.rtl #content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){background-position:right;padding-right:22px}\np a[href*=\"&edit=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weRgoI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEsNBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKBgIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJxmAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxhB1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvrkn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&edit=\"]{padding-left:22px}\n.rtl p a[href*=\"&edit=\"]{background-position:right;padding-right:22px}\np a[href*=\"&indexes=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&indexes=\"]{padding-left:22px}\n.rtl p a[href*=\"&indexes=\"]{background-position:right;padding-right:22px}\n.error{background:#efdada url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAIySURBVHjapNNPSJNxGMDx77t/7zbdu02dUzJKpX+6JOzfUrNgeegghB08RKcuURBBERQRQUF2bpJ0ESGCDkKeU4gOVlB0ik4WhWQ69842bbq97+/pMBOiWYLP5ffwex4+D88PfpqIsJnQJhKJsoVot+2JVs1mbcuxMmdWR1KT7kK5Psd6suHPvQvsbdKDsQbD686PrNdXFqg7Wmw2Ks1WT3wYd+wGNb5Uf+RQvnnDQKgyM+ltO67hdOIIb8G3v0OrcGXHNgTUdy/3G96FWv3wIGr6Kmouid5xn7Aj3Rppz/b/F6gOzI94us4hBRNz6AXm4BiyPIW/5yxBzEf/BLYeyyUD22t0T9s1ih96EQERsD5exnPwEuGdNUZtLJUsC0Q7C9HqitQFd/sVpDANNqAElCC2QhZfo3depKqYOh9sMaN/AYa+8Na/74DmrG/H/noPEFx17tWqYE/dxb0thhHf4/Qu5Z79AUSP5BNBPdOgdw0huVfIj/cABE6EqOw2QADbwp55gL83STg9G/c3fEusAVW++TE93gd2BpUeLS0OZB6nWHyZBUqrqJk34MwQ6EsQyKSfADivn4ncjjS6e3wnh1GZUeT789WJgr5bx7tLR3NpaCKAIOlxvD3DyMTTikXHvKbN3Wm0QqdvOV07ToFaLk0DcGilU7F6p9beA4eP/PhDvgwMFLTPN1umQprZJJYgRQFL8TuXFUEt2aifCsnbKFuhLIUohSjBNEKftM1+518DAEJB6cbyeH5EAAAAAElFTkSuQmCC\") no-repeat scroll .8em center;padding-left:40px}\n.ltr .error{padding-left:40px}\n.rtl .error{background-position:99%;padding-right:40px}\n.ltr #menu .error{padding-left:40px}\n.rtl #menu .error{background-position:95%;padding-right:40px}\n.message{background:#efe url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjvYm7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//dv9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bottSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQcb5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcDmHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZaUrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLRbOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC\") no-repeat scroll .8em center}\n.ltr .message{padding-left:40px}\n.rtl .message{background-position:99%;padding-right:40px}\n.ltr #menu .message{padding-left:40px}\n.rtl #menu .message{background-position:95%;padding-right:40px}\ntd a[href*=\"&user=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKjSURBVDjLjZJbSNNhGMZXF912FZEVpOaVFFSCmhe2/iNqhYVsmo1tDXUiJjNnrC0RMxVFxTm3ecJDeSrblorpSFAJzxptOrfFzJnuUJDplG2ZrqchtaSGePFcffx+vN/zviQApL2STQvgzFaFOCytx7HQFLjVyAuqjwkPOvTnfU+YRz1BmJsDPda2Y9idmrRg8b4E9ewjEqsqDDZ1MlzjZbApo2BtPwldVfDqvgRy2uEyu0YNx4gcW5qn2BiVw/K+F4NPzpn3JYilxnH1LZk/17UKeAwqOHWdsA9JkMe6pPQr4JJDODLOZYeESYb8LrGVGn9mWiJI+2FX8rHc9RiWrmQYW2/D1FUATf0VaGWhLB/MjjpNyDgUj5hBxu40lPNQWZOPF01M2AcEWJvpATasWJ1RYLT06hefoDz+/HBt6i2ochOhb8tGK58OCZNAdQoFr8dY+DqXg83lbu8XSuCaVWF7cRiahuRtn0AaH/zSNNj+X2Hqkkis6LLhcQ3D9fEeVibTYWhOxGQdEyZZzN6FWfoz8W1WCI97DM55NtxLDKzrRZiroyCjPA62uht/BQcvVAilwnRfYYZnDNinBL9hFtyf7sChewS9nACn8KLtATc3d6ExgbEDH4h6nhTLf7cx9Bko7FBCLBNC15flHfst3OZEfF9iYs07iUlGuIylEad2b44USK2m03k9zm6DB/l6QNTSjrleEbR9Ylgm6HCaGVjRPIRWTHEZyyKC/r0V0kx+2Pa0ohL8V3aw1UBHMQGsL8JYS8OAKAAj1dcwUEDGvJQKf8dGMldE2xQF95GQMw7uGyCPexabY1JsTlRgwgu2cUNQnCXYKcyv4ENzSmRvXqwonN7SGZYxBVr0URSyQ9FfdB0NRUmIuFm1XJmVtFOYP8EvH33H/9EvkWcAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&user=\"]{padding-left:22px}\n.rtl td a[href*=\"&user=\"]{background-position:right;padding-right:22px}\ntd a[href*=\"&procedure=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK5SURBVBgZBcFPaJZ1HADwz+95n3e6uTnREGdljRKtGCYiHTLxkIUmQeeCOnXzVnQIoi5BQV08TMo6GIiHiKI6ZEWgszzEmtpqSDP7s9ycm9NN977vnuf37fNJEWH/G6df6l676vki2YXVSCAhEpFVOU8uzMX36daNV88MH+oApIhw8O2zZz45vOuhokjrgoYAIALC7NKKEz8vmP67fee3XyfWjwwfakMJRSNt6yob68avaRQpkYhMHVlVheWV2r6tffYPjNi4eLyncWCodf7jI1Jr6sUSUkq9EdHoajQkIZALZOpEIWlPf27r4jndQy/oH9xp4c9tJk4de7eEIEGBlAgJREqKRP/yKXVcsH7r4+Ynf9eVOvrWbtK7YUt/CRBB2SBJIiW5Doqkd3nEllWj+gef1r56UldP8tfYhJt3UhTtuR0FRBAoU6FISYFGkaxePG1LfKv/gYNa/30oNW9o9vbpzvOOXj+wsvvwZ5cKCGSkRJGSIiWtK19af/uU/gef1ZoaVjRXdG7db+bMed173zJVD2QoIFdEkBG4fflrPYs/2vjIMzrTxzS6QvvWfWZGRs3tGZY2bFdnoICcQ0QQTI+e1L3wk5W82dWLR2Qtt+fvNnNuwuLeo1LvgNXNpK4CFFBn6iAysxc/8vCel636Z8SlL84a+2be+Hdjlh57R9WzWaDZKFSdCpSQq5AjvPlLx9DkrM74VwZ3POHm7JzJsUk/7PvU9Sv3yipwYlPTSjuDEqqqVtcMrG0a/+Oa9z8Ytnv7oOXNOyw9edyjffeIIIIL1yqRw0qrAiVU7ZyrnKNTS+te/9flFCYlkJdIS5UcRJEUOSnLlKs6V1DCSqueWdPVuOu1oc6aiCgEGdDfXYIIuptJSnKzkRbrKk9BCSnFe0+9cvq5lNLOED0AgkAIIEAr5zxaFk7A/5IUWNTkV3l/AAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&procedure=\"]{padding:0 6px 0 22px}\n.rtl td a[href*=\"&procedure=\"]{background-position:right;padding:0 22px 0 6px}\ntd a[href*=\"&function=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMCSURBVDjLTdBNaFxVGMbx/zn33plOZjIT8zmGOnFM1VoNJYFWYi2CtVSMdKUbK+LKhSAGXYhd2m6FQkEXLbiwETcWiq3WpiiSBLRqTa122pEmMZPmw8lkMt93zrnnXhdJbB54l++Ph0cEQQDAm1/l9gOnHmnbMVzXPnXto32fhueXgAqwChigCBSAz4ErNpvxPe/pvcnY8PvPdbE9NeUn6spPFF2zU2moNA1zq1W+vVs7DIxuB3riIQFAbt3gCIEtwLIh7EhSYYklJY4Fgzsj9Cai7WeuLX4stwCjdTxqg+dDRQlKGtabUHI3rtCAf6sGgA/H5hlOR3mq0+mytwHtrSFJrQk11yClwAYsC6QFFgJLgA8IU+anmSLX50uL9wGlehIRi1LDo94MkDLAkiCNwJJgEbCj/AN/j3/G250D1CZ/5BWdHPsf8JTq64k7lNwADyAAywhksLF9vPI17WvXiAy8TiI9yPrs4zSunH1jW4NmXzIRJrNiEBIkG88SaKlcJuX8SezRA6zdzRASitZ4klhHKmEDvHjicsS2ZCjsSJQxSAIgIADCtSnS9i8k0kdoLn1JqEXwz/RttKsKbqP6jATwmqorLEBujkQAAohUJtglrpLofwl38QzCKeLEWtHVRV+Xl17Y9875rNys32LjY0uwpAAhMfOXSJmrJHYdxb33KdLRqPLDrEzc4PTC4dtD741PA8iDo2OdnlIn9u9OsVwOmFsxlLKXSOqf6X5yBLV8FisU0Cz3kZ/8ndzAR2Sq3TNb29lGqUPAyG+ZWYoNG2fhG14dyOP5vSzdPM0D3SHctYfITd1CHvqEhZyLUSq/BUij9dDLB56IfHF8hJOvPcYeLrLn2bcI5ybJXphi+rs17nx/g4n2D4i09VKp1jFaF+430Hp2ebXEufEMbbEI2Zk86q+LpPcepJQvcO/mDM8fv8CDoX7CNuTXKhitF7YAMXjsVCcwCvQBHf25k0eG0l1i3+60mFPR4HxuSLhOB/FohLZ4C3/cyWWBY9fPvfsrwH+7HFmMUqkOrwAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&function=\"]{padding:0 6px 0 22px}\n.rtl td a[href*=\"&function=\"]{background-position:right;padding:0 22px 0 6px}\n#fieldset-history input{vertical-align:unset}\n#fieldset-history a[href*=\"&history=all\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVBgZpcHda81xHMDx9+d3fudYzuYw2RaZ5yTWolEiuZpCSjGJFEktUUr8A6ZxQZGHmDtqdrGUXHgoeZqSp1F2bLFWjtkOB8PZzvmd7+djv5XaBRfL6yVmxv+QjQeu7l25uuZYJmtxM0AVU8Wpw9RQU8w51AxzDqfKhFjwq6Mjdbj1RN0Zv2ZFzaloUdwrL2Is4r+y7hRwxs8G5mUzPxmrwcA8hvnmjIZtcxmr3Y09hHwzJZQvOAwwNZyCYqgaThVXMFzBCD7fJfv8MpHiKvaV3ePV2f07fMwIiSeIGeYJJoao4HmCiIeIQzPXifY+paJqO4lZi/nWPZ/krabjvlNHyANMBAQiBiqgakQMCunbxHJviM9bQeZdBzHJUzKhguLJlQnf1BghAmZ4gImAgAjk++8jP56QmL2GXG8zsfFCz8skA1mQXKbaU3X8ISIgQsgDcun7FL7cJjFnLUMfLyLRr0SLS4hbhiup5Szd19rpFYKAESKICCERoS95neyHmyTmbmAodQ4vGpAfmEn6YTtTahv4ODiRkGdOCUUAAUSE/uQNfqTaKFu4jvynJiIxIzcwg/SjF1RsOk9R+QJMlZCvqvwhQFdbM4XvrynIVHpfn2ZSWYyhzHS+PUtSueUC0cQ0QmpGyE9197TUnwzq1DnUKbXSxOb6S7xtPkjngzbGVVbzvS/FjaGt9DU8xlRRJdTCMDEzRjuyZ1FwaFe9j+d4eecaPd1dPxNTSlfWHm1v5y/EzBitblXp4JLZ5f6yBbOwaK5tsD+9c33jq/f8w2+mRSjOllPhkAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr #fieldset-history a[href*=\"&history=all\"]{background-position:left;padding-left:22px;margin-left:10px}\n.rtl #fieldset-history a[href*=\"&history=all\"]{background-position:right;padding-right:22px;margin-right:10px}\ntd a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&select=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&select=\"]{background-position:left bottom;padding:0 8px 0 20px}\nth a[href*=\"&table=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr th a[href*=\"&table=\"]{background-position:left bottom;padding-left:22px}\n.rtl th a[href*=\"&table=\"]{background-position:right bottom;padding-right:22px}\ntd a[href*=\"&create=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&create=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&create=\"]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&view=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJeSURBVDjLpZNLSNRRFIe/O81o+WjISM0epuarEHuDqIFEDyoqEFtFD4gWQVDQoo0QhFARbowKNNpKi0DJRYVGqRmY5oPUBs3S1GnMcdR0/v8Z554WM44RGURne7nf+X6cc5SI8D9lBTh79/0VIBkoAHaCCIJCCxaLwqJAa40O4LFZpT9z/cpdaOFqcZZCRDhT0V4p/1i3HveIiAQNgEKAh83usNrfgp3Pj6NvyGOGI6AlceExPT4SAKX+/PnjNxMAr+GPCANEJGqhq8NlLtk53myk0FlN/0QO19a+Ul33Lp4OArRYF9SWqrmxWqb7WliRcwp7ynY8g5n0Pa+6vQBQACXX6zG0RgvU3djP4OhUMI7nBXZ6iEvPxz3QS4TyEbsykZjVG+0hgAbgu9fPvm1J1LWNhDtH+1qxSRf21IOYY9VERCm+dPQxPatQvolcS8gAgBkjgF+EOXM+OImpZmw/GrCnHcYYrUTZJrHFxBItbh4N5bH70hOHBUCFDEzTj9cfIGD4cfbWEjX7GvvmYxgj97HY/PimN+Fq7GTNgTKchh2AoMEvUxeBnKgOPF+bid96BJ+zimURgjmdzHhTO6qonOUJ2YjMLwL0vA4ThluqKT0UwBdIYqy7Ao3BrHsdrre9qKJyVHQCodgSBgS0/gzQ/eAExWntbCm4QORwE46aZjqeuXG87GTD8TukZmSRkmQPmcrk4iYGdE1JaUOGiOTlulyrfB+ekpJbyNT4BANtDupjLzNe9g6R1lBIPQOWXgD1+zmf3Bvn3ZGaYN2TnYLYzDde1/i5oze7Pi21YD8BVSdMJ0n4cQkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&view=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&view=\"]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&edit=\"][id^=Data_free-]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weRgoI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEsNBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKBgIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJxmAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxhB1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvrkn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&edit=\"][id^=Data_free-]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&edit=\"][id^=Data_free-]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&indexes=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&indexes=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&indexes=\"]{background-position:left bottom;padding:0 8px 0 20px}\nselect,input[type=checkbox],input[type=radio],input[type=range],progress{accent-color:#c97e1e}\ninput[type=radio]{margin-bottom:5px}\n.ltr input[type=checkbox],.ltr input[type=radio],.ltr input[type=range],.ltr progress{margin-right:5px}\n.rtl input[type=checkbox],.rtl input[type=radio],.rtl input[type=range],.rtl progress{margin-left:5px}\n.ltr input[type=submit]{margin-right:10px}\n.rtl input[type=submit]{margin-left:10px}\n.ltr table.layout label,.ltr label.jsonly{margin-left:8px}\n.rtl table.layout label,.rtl label.jsonly{margin-right:8px}\n.sqlarea{background:#e0e0e0;font-size:105%}\nfieldset a{line-height:unset}\ninput[type=submit]{padding:2px 6px}\n"
  },
  {
    "path": "designs/rmsoft_blue/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/rmsoft_blue/screenshot.png)\n"
  },
  {
    "path": "designs/rmsoft_blue/adminer.css",
    "content": "/*!\n * @package    Adminer.css - Theme CSS for Adminer   ---   [theme light]   blue    B  (with icons)\n * @version    5.1.1.1\n * @date       Thu, 03 Apr 2025 13:24:32 +0100\n * @author     Robert Mesaros\n * @copyright  Copyright 2025 Robert Mesaros, rmSOFT, Slovakia\n * @web        https://www.rmsoft.sk\n * @link       https://www.rmsoft.sk/en/portfolio/programming-work/web-services/theme-for-adminer\n *\n * @donate     https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BB4D8Y28YZDH6\n *\n * @license    MIT: https://mit-license.org/\n *             Permission is hereby granted, free of charge, to any person obtaining a copy of\n *             this software and associated documentation files (the \"Software\"), to deal in\n *             the Software without restriction, including without limitation the rights to use,\n *             copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the\n *             Software, and to permit persons to whom the Software is furnished to do so,\n *             subject to the following conditions:\n *\n *             The above copyright notice and this permission notice shall be\n *             included in all copies or substantial portions of the Software.\n *\n *             THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n *             INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n *             PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n *             HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n *             OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n *             SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @code       text/css; charset=UTF-8\n *\n *   Default Silk icon set 1.3 by Mark James - https://opengameart.org/content/application-silk-icon-set-13\n *   Modified icons by Robert Mesaros\n *\n */\n#menu{padding:0 0 30px 0}\n.ltr .logout{right:0;left:auto;margin-top:.5em}\n.rtl .logout{left:0;right:auto;margin-top:.5em}\nhtml{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;--bg:#82a7c0;--fg:#000}\n*:before,*:after{box-sizing:inherit}\nbody{color:#000;background:#82a7c0;font-family:Verdana,Arial,Helvetica,sans-serif;font-weight:normal;cursor:default;margin:0}\na{color:#f0f9ff;text-decoration:none}\na:visited{color:#fff1d0}\na:link:hover,a:visited:hover{color:#0b3a5a;text-decoration:underline}\n#menu #h1{margin-left:10px}\n.rtl table.layout tbody td{display:flex}\n.rtl table.layout~table thead th:first-child,.rtl table.layout~table tbody td:first-child{text-align:right !important}\n.rtl table.layout~table thead th:last-child,.rtl table.layout~table tbody td:last-child{text-align:left !important}\nh1{padding:.6em;background:#1d5377;border:1px solid #f2ddaf;text-align:left}\n#h1{color:#fff}\n.version{color:#ddd;margin-left:8px}\nh2{padding:13px 16px 14px;color:#000;background:#527d9a;border-bottom:1px solid #000}\n.ltr h2{margin:0 0 20px -16px}\n.rtl h2{margin:0 -16px 20px 0}\nh3{margin:1.4em 0 0}\nfieldset{font-size:90%;background:#769eb8;border-top:1px solid #dbe5ec;border-right:1px solid #334f62;border-bottom:1px solid #334f62;border-left:1px solid #dbe5ec}\n.ltr fieldset{margin:1.6em .5em .5em 0}\n.rtl fieldset{margin:1.6em 0 .5em .5em}\nfieldset legend{background:#769eb8;padding:0 .5em;border-top:1px solid #dbe5ec;border-right:1px solid #334f62;border-left:1px solid #dbe5ec}\nfieldset legend span{font-size:80%;color:silver}\n.ltr fieldset legend span{margin:0 0 0 1em}\n.rtl fieldset legend span{margin:.2em 1em 0 0}\n.ltr fieldset select{font-size:95%;margin:0 6px 0 0}\n.rtl fieldset select{font-size:95%;margin:0 0 0 3px}\nfieldset label{margin:0}\nfieldset input{font-size:95%}\n.size{width:8ex}\ndiv.footer fieldset:first-child{color:#0b3a5a}\ndiv.footer fieldset:first-child legend,div.footer fieldset:first-child div,div.footer fieldset:first-child label{color:#000}\na sup{margin:0 .3em}\n#help{background:#c7e8fe}\n#help a{color:#062a42}\n#help a:visited{color:#062a42}\n.icon{width:18px;height:18px;background-color:#062a42}\n.ltr .icon{margin-left:3px}\n.rtl .icon{margin-right:3px}\n.icon:hover{background-color:#d1394e}\n#tables a{background:#82a7c0}\ntbody a{color:#32729c}\ntbody a:visited{color:#39749b}\n#menu p,#menu ul{padding:.8em 1em;margin:0;border-bottom:1px solid #32729c}\n#menu .links a{display:block;width:fit-content;margin:0;font-size:93%}\n#menu h1{border:1px solid #f2ddaf}\n.rtl #menu h1{direction:ltr}\n#menu p.error{margin:10px 0;padding:.5em .8em;border-bottom:1px solid #e76f6f}\n#menu p.message{margin:10px 0;padding:.5em .8em;border-bottom:1px solid #7fbd7f}\n.ltr p.links{margin:.8em 20px 8px 0}\n.rtl p.links{margin:.8em 0 8px 20px}\n.links a{margin:0}\n.ltr .links a{margin-right:20px}\n.rtl .links a{margin-left:20px}\ncode{font-size:100%;background:#93b3c8;padding:.2em .5em}\ntable code{font-size:130%;background:#bfd9eb;padding:.1em .3em}\ncode.jush-sql{background:#d8e9f4}\n.rtl p code.jush-sql{background-position:right;clear:right;float:right}\npre{background:#aac6d8 !important;padding:5px}\ntextarea{font-size:120%}\n.ltr p.count{font-size:90%;margin:.8em 20px 8px 0}\n.rtl p.count{font-size:90%;margin:.8em 0 8px 20px}\n#breadcrumb{background:#aac6d8;color:#000;font-size:90%}\n.ltr #breadcrumb{left:23em;margin:0 0 0 -12px}\n.rtl #breadcrumb{right:23em;margin:0 -12px 0 0}\n#breadcrumb a{color:#32729c}\n#breadcrumb a:visited{color:#39749b}\n#breadcrumb a:link:hover,#breadcrumb a:visited:hover{color:#0b3a5a;text-decoration:underline}\n#logins{font-size:90%}\n#logins a{color:#f0f9ff;background:#82a7c0}\n#logins a:visited{color:#fff1d0}\n#logins a:link:hover,#logins a:visited:hover{color:#0b3a5a;text-decoration:underline}\n#lang,#dbs{font-size:90%}\n#dbs select{margin-top:.3em}\ntable{border-spacing:0}\ntable,td,th{border:0;border-collapse:separate}\n.ltr table{margin:1.9em 0 0 0}\n.rtl table{margin:1.9em 0 0 0}\n.rtl table tbody td,.rtl table tbody th{text-align:right !important}\n.ltr table thead td:first-child,.ltr table thead th:first-child{border-left:1px solid #0e344e}\n.rtl table thead td:first-child,.rtl table thead th:first-child{border-right:1px solid #0e344e}\ntable thead td,table thead th{height:1.6em;border-top:1px solid #0e344e;border-bottom:1px solid #0e344e}\n.ltr table thead td,.ltr table thead th{border-right:1px solid #0e344e}\n.rtl table thead td,.rtl table thead th{border-left:1px solid #0e344e}\ntable tbody tr:first-child td,table tbody tr:first-child th{border-top:1px solid #527d9a}\n.ltr table tbody td:first-child,.ltr table tbody th:first-child{border-left:1px solid #527d9a}\n.rtl table tbody td:first-child,.rtl table tbody th:first-child{border-right:1px solid #527d9a}\ntable tbody td,table tbody th{border-bottom:1px solid #82abc7}\n.ltr table tbody td,.ltr table tbody th{border-right:1px solid #82abc7}\n.rtl table tbody td,.rtl table tbody th{border-left:1px solid #82abc7}\n.ltr table tbody td:last-of-type,.ltr table tbody th:last-of-type{border-right:1px solid #527d9a}\n.rtl table tbody td:last-of-type,.rtl table tbody th:last-of-type{border-left:1px solid #527d9a}\ntable tbody tr:last-child td,table tbody tr:last-child th{border-bottom:1px solid #527d9a}\ntable tbody td[id*=null] i{color:#4d7c9b}\nthead th{padding:.2em .3em}\nthead th a{color:#f0f9ff}\nthead th a:link:hover,thead th a:visited:hover{color:#0b3a5a}\nthead th a:visited{color:#fff1d0}\ntd{background:#e4f2fc}\n.odds tbody tr:nth-child(2n) td{background:#d8e9f4}\n.odds tbody tr:nth-child(2n) th{background:#ebebeb}\ntbody{font-size:90%}\ntbody td{padding:.15em .3em}\npre[id^=sql]+table tbody td{padding:.2em .3em}\nthead th,thead td{color:#f0f9ff;background:#32729c}\nthead th{text-align:center}\n.ltr thead td{text-align:left}\n.rtl thead td{text-align:right}\n.js .checkable thead .checked td{background:#32729c}\n.js .checkable thead .checked th{background:#316f98}\n.js .checkable .checked td{background:#b7d3e6}\n.js .checkable .checked th{background:#b3d1e5}\n.js .checkable.odds tr.checked:nth-child(2n) td{background:#aac9de}\n.js .checkable.odds tr.checked:nth-child(2n) th{background:#a6c7dd}\ntbody tr:hover td{background:#fff9eb !important}\ntbody tr:hover th{background:#fff7e6 !important}\ntbody tr.checked:hover td{background:#fff7e3 !important}\ntbody tr.checked:hover th{background:#fff6e1 !important}\nth{background:#eee}\ncode.jush-sqlset th,code.jush-sqlstatus th{background:#bbb}\n#edit-fields tbody tr:hover td,#edit-fields tbody tr:hover th{background:#7098b3 !important}\n.js .column{position:absolute;background:#3a84b5;border:1px solid #2d526b;opacity:.9;margin-top:1.4em}\n.ltr .column{padding:.27em 1ex .3em 0;margin-left:-2.6em}\n.rtl .column{padding:.27em 0 .3em 1ex;margin-right:-2.6em}\na.text:hover{text-decoration:none}\n#schema{font-size:85%}\n#schema .table{background:#769eb8;border:1px solid #4e7189;padding:0 3px 3px;cursor:move;position:absolute}\n#schema a{color:#1f4169}\n#schema i>span{color:#c4c6ed}\n#schema .table>span[title*=int]{color:#4a525b}\n#schema .table>span[title*=decimal]{color:#5c6671}\n#schema .binary{color:#a00}\n#schema .date{color:#7f007f}\n#schema .char{color:#086108}\n#schema .enum{color:#0d6f6f}\nspan.jush{font-size:110%}\nspan.jush-bac{color:#d22929}\nspan.jush a:visited{color:#fff}\ncode.jush-sqlset span.jush,code.jush-sqlstatus span.jush{color:#3977c0}\ncode.jush-sqlset span.jush a,code.jush-sqlstatus span.jush a{color:#1c3a5d}\ncode.jush-sqlset span.jush a:hover,code.jush-sqlstatus span.jush a:hover{color:#102136}\na.jush-help:hover,a.jush-custom:hover{color:#002240}\n.message{font-size:90%;width:fit-content;border:1px solid #7fbd7f}\n.message .time{color:#a6a6a6}\n.message a{color:#32729c}\n.message a:visited{color:#39749b}\n.message a:link:hover,.message a:visited:hover{color:#0b3a5a;text-decoration:underline}\n.error{font-size:90%;border:1px solid #e76f6f}\n.error .time{color:#c63}\n.error a{color:#32729c}\n.error a:visited{color:#39749b}\n.error a:link:hover,.error a:visited:hover{color:#0b3a5a;text-decoration:underline}\np label{font-size:90%}\n.ltr p label{margin-left:10px}\n.rtl p label{margin-right:10px}\n.ltr p label input{margin-right:7px}\n.rtl p label input{margin-left:7px}\n.ltr.js p input[name=Collation]{margin-right:7px}\n.rtl.js p input[name=Collation]{margin-left:7px}\nlabel.block{margin:0}\n#fieldset-history input{margin:10px 0 0 0}\n#table tbody input{vertical-align:unset}\n.ltr fieldset select+script+label{margin-left:4px}\n.rtl fieldset select+script+label{margin-right:4px}\n.ltr fieldset label input{margin-right:7px}\n.rtl fieldset label input{margin-left:7px}\n.footer{border-top:20px solid rgba(130,167,192,.7);border-image:linear-gradient(rgba(130, 167, 192, 0.2), #82a7c0) 100% 0}\n.footer>div{background:#82a7c0;padding:0 0 .5em}\n.ltr .footer{margin-right:-20px}\n.rtl .footer{margin-left:-20px;margin-right:0}\n.loadmore,.footer+div{font-size:90%;margin-left:0}\n.footer+div input,.footer+div select{font-size:95%}\n#menu #tables{font-size:75%}\n#menu #tables a.view{margin:0 15px}\n#menu #tables a.select.active+.structure,#menu #tables a.active.structure{color:#0b3a5a}\n.ltr #logout{margin-left:.5em}\n.rtl #logout{margin-right:.5em}\n#sum-Data_length{background:#a2c4da;color:#0b3a5a}\n#sum-Index_length{background:#a2c4da;color:#0b3a5a}\n#sum-Data_free{background:#a2c4da;color:#0b3a5a}\n.ltr #fieldset-history a[href*=\"&sql=&history=all\"]{padding:0 0 0 18px}\n.rtl #fieldset-history a[href*=\"&sql=&history=all\"]{padding:0 18px 0 0}\n#version{font-size:85%;color:#ff0}\n.ltr #version{margin-left:4px}\n.rtl #version{margin-left:4px}\ndiv#ajaxstatus+.message a:first-child{color:red}\ntable.checkable thead a[href*=\"&refresh=\"],table.checkable thead a[href*=\"&dbsize=\"]{color:#e2d588}\ntable.checkable tbody tr.checked,table.checkable tbody tr.checked a{color:#0b3a5a}\ntable.checkable tbody tr.checked a{color:#0e4c75}\nthead{position:-webkit-sticky;position:sticky;top:0}\nthead tr{height:32px}\n.time{color:silver}\n.ltr p a[href*=\"&dump=\"]{padding-left:5px}\n.rtl p a[href*=\"&dump=\"]{background-position:right;padding-right:6px}\ntd a[href*=\"&user=\"]{line-height:19px}\n@media only screen and (min-width: 1024px){\n\t#form~form .scrollable+p{position:-webkit-sticky;position:sticky}\n\t#form~form .footer{position:-webkit-sticky;position:sticky;clear:both}\n\t#form~form .footer+div{position:-webkit-sticky;position:sticky;clear:both;padding-bottom:2em}\n}\n@media only screen and (min-width: 1024px)and (max-width: 3840px){#form~form .footer{width:3823px}}\n@media only screen and (min-width: 1024px)and (max-width: 3072px){#form~form .footer{width:3055px}}\n@media only screen and (min-width: 1024px)and (max-width: 2560px){#form~form .footer{width:2543px}}\n@media only screen and (min-width: 1024px)and (max-width: 1920px){#form~form .footer{width:1903px}}\n@media only screen and (min-width: 1024px)and (max-width: 1680px){#form~form .footer{width:1663px}}\n@media only screen and (min-width: 1024px)and (max-width: 1600px){#form~form .footer{width:1583px}}\n@media only screen and (min-width: 1024px)and (max-width: 1536px){#form~form .footer{width:1519px}}\n@media only screen and (min-width: 1024px)and (max-width: 1440px){#form~form .footer{width:1423px}}\n@media only screen and (min-width: 1024px)and (max-width: 1366px){#form~form .footer{width:1349px}}\n@media only screen and (min-width: 1024px)and (max-width: 1360px){#form~form .footer{width:1343px}}\n@media only screen and (min-width: 1024px)and (max-width: 1280px){#form~form .footer{width:1263px}}\n@media only screen and (min-width: 1024px)and (max-width: 1152px){#form~form .footer{width:1135px}}\n@media only screen and (min-width: 1024px)and (max-width: 1024px){#form~form .footer{width:1007px}}\n@media only screen and (min-width: 1024px){\n\t.ltr #form~form .scrollable+p{float:left;left:16px}\n\t.ltr #form~form .footer{float:left;left:0;margin-left:-16px}\n\t.ltr #form~form .footer+div{float:left;left:16px}\n\t.ltr #form~form .footer fieldset:first-child{margin-left:16px}\n}\n@media only screen and (min-width: 1024px){\n\t.rtl #form~form .scrollable+p{float:right;right:16px}\n\t.rtl #form~form .footer{float:right;right:0;margin-right:-16px}\n\t.rtl #form~form .footer+div{float:right;right:16px}\n\t.rtl #form~form .footer fieldset:first-child{margin-right:16px}\n}\n@media only screen and (min-width: 1440px){\n\t#content{border-top:#32729c 3px solid}\n\t.ltr #content{margin:3.2em 0 0 21em;padding:14px 20px 20px 0}\n\t.rtl #content{margin:3.2em 21em 0 0;padding:14px 0 20px 20px}\n\t#content h2{position:fixed;bottom:5px;font-size:20px;padding:5px 20px;z-index:10}\n\t.ltr #content h2{right:20px;margin:0 20px 20px 0}\n\t.rtl #content h2{left:20px;margin:0 0 20px 20px}\n}\ninput[type=submit]{border:thin solid #000;border-radius:3px}\ninput[type=submit]:enabled{cursor:pointer}\ninput[type=submit]:disabled{cursor:not-allowed;border-color:#666}\ninput[type=submit]:enabled:hover{background-color:#c5dff1}\n#menu li a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAFKSURBVHjapJJNK8RRFIefmfmLyEZeFmNjIZEkaSI+A2lKkZ0s7a3EwgdRShQ1+QiI+AQiFgozpPGWae55saCZ/8iC3Drdzrnd5/zOr5Nwd/5zIoCN/eKyOwvq1mlmqIGYoWqoOaIWC0XFUbPTtbnuTARg7ovZTHPrXzqvbF0MVBSoWStA7nIdMUFUCCYEDdVbpfK2NLpGCFofA3z6MNs3/6vubyUhiFY9UDUANg8KvwJMDLdQjgPkCwAwM97O9mGe6bGOSm3nOE92pJo/PJdqFQQ1zJ0oBTtHBVKpJLvHBRJJSH59yp0UwJ26CHrTjZTDtxEciFIJpjJt5E7umcy01yiI5xc3z4hYFZAvviLSxnhPM7eP7wx1NXJ191rZg/50A2fXTzU+NERuMQV+uLp5PlhWawqiBFFUjKCGqPxoZPGltAeQ+O8qfwwAxOXQjeCbPgEAAAAASUVORK5CYII=\") no-repeat scroll bottom;height:12px;width:0;display:block;overflow:hidden;text-decoration:none}\n.ltr #menu li a[href*=\"&select=\"]{background-position:right;clear:left;float:left;margin:0 8px 0 0;padding:1px 0 0 20px}\n.rtl #menu li a[href*=\"&select=\"]{background-position:left;clear:right;float:right;margin:0 0 0 8px;padding:1px 20px 0 0}\ntable thead #all-page~a{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKhSURBVDjLpZNZSJRRFMd/937fN58zqWPpjBWamYmtlG0YLW+RVEQPLQ9JVNBCENR7UEhFJPUSZZAR0UsLCEE9VGQLLVCG5kJm2CZajjg2rjPfzHdvD4NTRj31h/NwDvf++Z17zxFaa/5HJkDFkVtn3ITYHh5x04ZifzmlxqdeGzK9XKmt2nbYBHCVqDi+b3EgGAgIIUw0oFP3BFqD1mO5xk047K68txNIGoSHXDuQExAHzl5jan4WtqFwtQ3SjxQkQwoMKfja1syJw/uJu0KkWhiJgZQmxUXTmVe2EkMaaO2CMEEIpBAIIZFSYhkSpf54g7E2bTuNNG96kvcvyuivY5NzmcGnL6la+MTfdOHYjnEGcSdKPDoKQqC1QmkXpSQCyB68S3GkAe/8CvyFpfz4VELb/ZrTKQOtoTfSTV8oQlwlUNplINaD4+ZRqB4xL6+DzOIVhDve4REOGZmTSc+e5h9n8L3Hh9UZ/VXQAQrMZ6yb1U7WjLXEvl3H4xN8aWwjMqy1dPoXyDF8rUEaHqRhJ8NMo8DTSEXJW7KK1hHtvoSw+rHSM/CqPi5+WDK89GBtu/yd4HcFBx6wJf8V/pkbiXZVI604zsB0OuveYJQdpcvJcQEkgFYKAYQ+t9LZ+hLZWk355BaCc9fjfK/B8GhiAwV0Pa7nWHMpMrsk9ZVmctaSE3b+5BF6Gm4S0IoEeXxrPsfEoIdoOJ++122I8stUbp4COClSCZDplRGViDLF5xBqqmHOyr3Ync9ov/2cxnth3j9sxL/mBLnBbHJ9cSzpYFtCpwgm2PLGnpMPl4/E9fxV0ZDfab1D4YJVRHr76Kh/r+/4Dg33VLW40AKAbYHX5CqA+HOdt66eNLpoRq65bHYh2oq9GA317tpwqunjv9b5J0pAFDVe4XHbAAAAAElFTkSuQmCC\") no-repeat scroll bottom;height:16px;width:0;display:inline-block;overflow:hidden;text-decoration:none;margin:0 0 -4px 0}\n.ltr table thead #all-page~a{background-position:right;padding:0 0 0 18px}\n.rtl table thead #all-page~a{background-position:left;padding:0 18px 0 0}\n#table thead tr td a.edit-all,#fieldset-history a.edit-all{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKhSURBVDjLpZNZSJRRFMd/937fN58zqWPpjBWamYmtlG0YLW+RVEQPLQ9JVNBCENR7UEhFJPUSZZAR0UsLCEE9VGQLLVCG5kJm2CZajjg2rjPfzHdvD4NTRj31h/NwDvf++Z17zxFaa/5HJkDFkVtn3ITYHh5x04ZifzmlxqdeGzK9XKmt2nbYBHCVqDi+b3EgGAgIIUw0oFP3BFqD1mO5xk047K68txNIGoSHXDuQExAHzl5jan4WtqFwtQ3SjxQkQwoMKfja1syJw/uJu0KkWhiJgZQmxUXTmVe2EkMaaO2CMEEIpBAIIZFSYhkSpf54g7E2bTuNNG96kvcvyuivY5NzmcGnL6la+MTfdOHYjnEGcSdKPDoKQqC1QmkXpSQCyB68S3GkAe/8CvyFpfz4VELb/ZrTKQOtoTfSTV8oQlwlUNplINaD4+ZRqB4xL6+DzOIVhDve4REOGZmTSc+e5h9n8L3Hh9UZ/VXQAQrMZ6yb1U7WjLXEvl3H4xN8aWwjMqy1dPoXyDF8rUEaHqRhJ8NMo8DTSEXJW7KK1hHtvoSw+rHSM/CqPi5+WDK89GBtu/yd4HcFBx6wJf8V/pkbiXZVI604zsB0OuveYJQdpcvJcQEkgFYKAYQ+t9LZ+hLZWk355BaCc9fjfK/B8GhiAwV0Pa7nWHMpMrsk9ZVmctaSE3b+5BF6Gm4S0IoEeXxrPsfEoIdoOJ++122I8stUbp4COClSCZDplRGViDLF5xBqqmHOyr3Ync9ov/2cxnth3j9sxL/mBLnBbHJ9cSzpYFtCpwgm2PLGnpMPl4/E9fxV0ZDfab1D4YJVRHr76Kh/r+/4Dg33VLW40AKAbYHX5CqA+HOdt66eNLpoRq65bHYh2oq9GA317tpwqunjv9b5J0pAFDVe4XHbAAAAAElFTkSuQmCC\") no-repeat scroll bottom;height:16px;width:0;display:inline-block;overflow:hidden;text-decoration:none;margin:0 0 -4px 0}\n.ltr #table thead tr td a.edit-all,.ltr #fieldset-history a.edit-all{background-position:right;padding:0 0 0 18px}\n.rtl #table thead tr td a.edit-all,.rtl #fieldset-history a.edit-all{background-position:left;padding:0 18px 0 0}\ntable a[href*=\"&edit=\"][href*=\"&where\"],#fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAFOSURBVHjapNIxSAIBGAVg19bCoEVcchJEsMlFjoZoSKElB8NosCJpCNxaahKhjCMw0C1LjSTIBgWDtOjOE65CIjktrguLsAY7uVOS1yYEegc2vO3/+OHxNAA0g0T14DVjGuIS9o8C6ehQwRncR0zPTwcTY6qwHHPgMboCiachCwwKewRym+ak2jeIpSPI/DVaQhEtoQiJy4IO2juKSP7MQ36JoZpchchGIbJRSFwWDDkrKaIf8QzN8hK+2TXcRpyoHq+D3rWjZzl/UMUN8WES7a9t1FIulHes6Nlq2m9Ao3ahirowtKjXp/0G8MwpqLhHFXUh6dWhwVNov93hfMOC/L4ZlSsv2PA0brYs6DsA0qtDS2BQTyzgPWRDzqNFwj2KlM8IxeU4iWGUwi402UPU2TguA1OKqAvnbCOYJ7QIL48j5TMiE7Ce/Hur/fI7AMEYQUPA30tTAAAAAElFTkSuQmCC\") no-repeat scroll right bottom;display:inline-block;overflow:hidden}\n.ltr table a[href*=\"&edit=\"][href*=\"&where\"]{background-position:right;padding:0 20px 0 8px}\n.rtl table a[href*=\"&edit=\"][href*=\"&where\"]{background-position:left;padding:0 8px 0 20px}\n.ltr table input[type=checkbox]~a[href*=\"&edit=\"][href*=\"&where\"],.ltr #fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){height:14px;width:0;text-decoration:none;padding:0 0 0 16px}\n.rtl table input[type=checkbox]~a[href*=\"&edit=\"][href*=\"&where\"],.rtl #fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){background-position:left;height:14px;width:0;text-decoration:none;padding:0 16px 0 0}\n#menu #dbs span{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu #dbs span{padding-left:22px}\n.rtl #menu #dbs span{background-position:right;padding:0 20px 0 0}\n#menu p a[href$=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAGxSURBVHjapJO9a1VBEMV/73JBVFAMSZ5apjeghaCFYvAjARVBm6CIsbCx8H+wsLcQbAQRxCAIIiha+AEWloGANoKIhSYxIAqRvLs7cyxm38uTvFRZWHbZ3TPnzMzZliQ2M+pbD7/JTKTsNFl0ktNpnNUkmuS4C3NwldWFufByVruLiQO7Atw4q42TTJiJbAGyPlA/+PmHZapsIuVga3KA4iG4gtGdMmMvCSmCVCmXAFmcPTzEhaPDhVlcPjnKzFQbl3CJK5NtJOGlbO5QJxNNds4cGuLxu2WyiX1j2xgf2869F4uYi2und3Pn6Q+2bql6YAglVcpOk+I08hNzn1cKQ0iOx+s74IKqk0R2MfvmJ9MTI1w6MYoVGi95xl4DA9QpO1aq/eDVEubi6lR7TZE2ViApFLjg4vERrPR6/stKD3RkfMeGJnInfGAm7r9cYmYymO8+W+D9/B+un9uzDnTj/F4Abj/5jiRa0zc/6tTB4ZKGsP7el34f27+TxV+JT1///hfs0esFatea0waBAd7O/R6YggS1eViyWzAz9XyvPv93Xdl1oBT3rc3+xopNjn8DAEzJiOP473VxAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href$=\"&sql=\"]{padding-left:22px}\n.rtl #menu p a[href$=\"&sql=\"]{background-position:right;padding-right:24px}\n#menu p a[href$=\"&import=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAJ9SURBVHjapNPPT9NwGAZwEg+cvMrB/8CL8eC/4NEYFHGAooboRb0QvMlRCPsRyZQdwJA5BLvgBqVtvtCVlZWiLpGwLOkC2WjaEr6wLVBDOzIGPN7EZRAPPsl7ePImn9vTBKDpf66uSJLULElSmyiKsfn5eY0QUiOEVAVB+MlxHMOy7K2ZmZlL5wKSJF1LJBKZTCaD3d1dHBwc4OTkBMfHx9jb24NhGFAUBfF4XInFYlcbAFEUk6Zp4vT0FBelVqthbW0N0Wg0fB5QrFar/wRKpRIYhik2AISQ4uHhISilsG0blUoFtVoNR0dHsG0buq5jeXkZlFJMTk42AoIgFCuVCsrlMnRdRy6Xg6ZpyGazUFUVi4uLWFpawvb2NiYmJs4HXNfF/v4+KKWwLAuUUhiGgdXVVSiKAkVRYFkWwuFwI8BxXNFxHJRKJZimic3NTWxtbUHXdaTTaSSTSciyDNM0MT4+3giwLFt0HAc7OzsoFArY2NiAYRjI5/NQVRULCwtIJBIwTRNjY2P1wDOhCz1cJ56yHjyOP8Cjr/ehaRoKhQLW19eRSqXA8zwIITAMA6FQqB7o4TpbnnPdeP/djw8/AuiK3kM2m0U+n0cul4Msy2BZFjzPQ9d1DA8PnwE9cx0tT2c9v/ql13gr9+OdOoSOL611QCqVQjqdBqUUKysr8Pl8Z8CTWU/5jdSH4DcfeoWX8Ey1ov3zHbiuC9d14TgObNuGZVkQRRFer5cODAzc/AN0x9rn+sgr9PIv8HCqnUQikY9tn24jEolgenoaDMMgFAohEAhQr9c7NDg4eKVhTJ3MXeKZao39/RgdHb08MjJyIxgMXvf7/c0Xzfn3ACuyH7V6hJHQAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href$=\"&import=\"]{padding-left:22px}\n.rtl #menu p a[href$=\"&import=\"]{background-position:right;padding-right:24px}\n#menu p a[href*=\"&dump=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAKMSURBVHjajNPPT9NwGAbw3Th59e7Vi/HgP+HBGCLiDyLGqFzARAnGiyReANkPJVN2GErm5mQLU6xdLXRlZcumLhGyLOsy0vFNW0KhkFHSdjgGPJ4Ul0Himzy35/ncXgcAx//mPtOFu/RN3KGu4/ana7gVu9pc4Hm+jef5Do7jPs7OzoosyzZYlq0zDPOTpunI2y/+zh66G6++u/H6hwdd0StN47OJRCKfz+exsbEB0zRxcHCA/f19VKtViJUieqhuDPKPMSQM4mVmFDem2o8AjuOSiqLg8PAQx13f13t4yg/A+82FfqYP1z+0o/P95SZAr9frJwIvss8xwD5Af7wXD6d6fwFwdLy7dASwLKvv7u5C0zQYhoFarYZGo4G9vT0YhgFCCJ58foQh7hnC4bD+Z/cXYBhGr9Vq2NraAiEEpVIJoiiiUCggk8lgfn4eCwsLWFtbQygUOh6wbRvb29vQNA2qqkLTNMiyjMXFRaTTaaTTaaiqikAg0ArQNK1bloXNzU0oioKVlRWsrq6CEIJcLodkMglBEKAoCiYnJ1sBiqJ0y7Kwvr6OSqWC5eVlyLIMSZKQyWQwNzeHRCIBRVEwMTHRCszMzOimaUJVVZTLZYiiiEqlgnK5jFQqhXg8DpZlIcsyfD5fKxCLxfSdnR0QQlAsFlEoFCBJEkqlEgRBAEVRiMfjIIRgbGysFYhGozohBKZpQpKkJiCVSiGXy0HTNGSzWbhcrlYgEolcDIfD1tLSEqrVKmzbhm3bsCwLhmFAVVVwHAen06kNDw9faAEAOEKh0JlgMPgmEAgYwWAQ09PTiEQi8Pl88Hg8mtPpHB0ZGTn97+bE1/X7/afGx8fPe73ec263u+2k3u8BANRmJnJM+MxYAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href*=\"&dump=\"]{padding-left:22px}\n.rtl #menu p a[href*=\"&dump=\"]{background-position:right;padding-right:24px}\np a[href$=\"&database=\"]:not([href*=\"&db=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&database=\"]:not([href*=\"&db=\"]){padding-left:22px}\n.rtl p a[href$=\"&database=\"]:not([href*=\"&db=\"]){background-position:right;padding-right:22px}\np a[href$=\"&privileges=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK/SURBVDjLjdJZSNMBHAfw1UMPhfTUQ5bgkfWQSodmYplroiAkXkvXcnOVipqsWhLKXEvnUEHUOecU72tec8vEVgQamUfeUzzThcc2QUqd+09b+u0pMxTz4fv04/d5+PIlASAdFG6wJWsk3351ofoMZstszKVs22I/V9tjf+4HPrN9z1I0lTZbizWnsTsFsXbZhwKKmadEi03O0KoiQHRnQit3x6LMCqP5dj8OBUiCT2bqhlRY/SyBeagchk4JFgZb0ZZyWXMoIND3buRY1bPtteFGbI03wTiqhK5dhGSGp3xfIJJsz8pj3V4VhZEhCaeYo0Mc+0QvYn/q5BzMv34FXXMSOqSP4RRxsdUl3uHEPwDT/Rwlj+W1lU0nY3dKstjILRAgQ8yFMtcf4y001CjC4ci7UHaJc/74DpAVcqWjMNofTfyHGKvhoppDhSiMAmmUF0qHuGh5Q8VyDxtmQw/mP9xHRhUNbtEukh1AHGLXMN0m21OYLJEMueoelj6GwbxSiZVRPpa7eJioCMBQmsf/C0tPCUanwg+b3+uwoeVhQ1+IlWEeiDk+pqSef4GjV3MSxAlxewpzoD5HRYkP1mfSQXyLgWmOA0LDBDFFRT/fzUQCQDriXvsokNNvaNcDwno5kkpkiBeVobZtAL3VUVDLQw1rkwwQ034wzdBhnKCin+9kqgi1ppFsfKVUKrvF2Dy+BcEYEPEFYLQDwvoWfCoLBzFXAOPXIBCT3ujLdl0fTHHRqwXX9DKGdRAAEkktcP7V15gLjkIHpgpgKrdBl22jqy4GG9pyrKmvgxjzwYD4Bgrodg9UQZYW7Qwri50haXJuaRtTn4LG60bke4D1FmAogS4FG5tLQhgn76A7xwO9wpvYb62kycoot9bkwERXapXS+UkvyDw1yLwRpKW+RHdRAN4Jvc1FcV4Ns6U0+n7Ab/dSu26WPRQHAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&privileges=\"]{padding-left:22px}\n.rtl p a[href$=\"&privileges=\"]{background-position:right;padding-right:22px}\n#breadcrumb a[href$=\"&privileges=\"]{background-image:none;padding-left:0}\np a[href$=\"&user=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK5SURBVDjLjZBbSNNxHMVXDz3UQ0892AVSs4Q0shQRA5uzCFGL5Rxqc1u5mZpNnWNN533eaDr976blZeFllc7mMLMl6IOGqdOpS4vAPaRbb6FiQjpPm5QahvmFw5cfP87nezgkAKS9JI4+zp5Wey3Ot57AnMZ9rYnn0RAV6HHoz/+eZl74SYq12d2x0OaGnapL9azeF6CBeYxY6PSHrZeDH8OVsOmCsaA9BYva8/u+AKroo5V2cy8Wh1RYMz/D8nsV5id60F/sZ90XgBoew51pydxYmuyAY7YTKxY97AMEihKu6v4J4JK92Ep26CLBIEPFoqwl033HCGHqT7uOj69dhbAbcjFY+wAXOOd7AgQ+R/4CMIPPUJTsMEd1PBk71SjjQV4nQYUiF/lSAbo+tqCkvwi+eec0F/lnD28BZPRLg0+Sb6Gz4B5m2sRo5dNAMCioTQpDk1kM9bgQVaYMlJsy0f6pAen6NAQlB6i2AAq6Z/uXfu2uwrTZZMjGH6HCJEDxaDpyRlMg+pACtoqFOVXU/wurKI6GYkKEfMN9pKvjwK26ibjSUFAl12B7GrENOHi5RqQQpe0qzIeWBW5dDArb2ei2KGG2GSF7lwK6zBcMoffrTfOB4OeJVL5peeAbUPpSh9xGLQSEBvUjqxAo5hFfcn29a7oaXTMEXCPt40DWl4TAVLdVknt4LY3G614xzDogmQE4I0DCABDTDdC1ADEEROT4ocdSj51jmFK6ACBNSfzXxzrk4L+yg9kLMPUbiNdugKZxIFINRModuPLwNB4b76LMyNo0l71lbSew1oTYOkoyEJs3DK4RYL9xJtADDANwx5WifA6xvCjclnqj0pi4edm1XW8nQEr63JwU1FNEzQ6ktej900dBzptyahpk8SRCsk3wvPHCKs9KLEgQehuchiVX7N+73NXfL+Zkqi9OGtlWAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&user=\"]{padding-left:22px}\n.rtl p a[href$=\"&user=\"]{background-position:right;padding-right:22px}\np a[href$=\"&processlist=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGQSURBVBgZpcG9alRhFIbR5/tRA0Fbbe0tp4tFsHFKLSaNjSIGJlapDIq12BgIxJRaCGIK8QaUNN6BmEJBLNIGCcko55z9bs8WpxlECLNWcnfmkW6uv7l/dXnw9HDii+6AhEuYDJcjF26G3HEzTOLC2fZkf//gwdtnK9t1sDTYOrOwmC8ucBqLJxPbArbrpPU8OTzmtH62ngkPX33xf3n0+qv/z90n771HdRdhvAcjfaBpGobDIVOHx7+wzrHOMReNOZcvncdkhIo7YWeZ3jVm1VJJyUjFKcrUzgnqjFBNRhjvwfUf72jbltFoxFTJkFOhJrDkWBZBJkJ1OWFnmd4NZpUESuAJyImiQpCMUCUjLL2Ae+klTdOwurrKVKqZKiGHDCjxhyRC7dqW8PEOvdvMyvRypgDmTk5O6NqOUN1EuLIJa+eec3R0xMbGBlM5JYKAkhIuEVwiVEmET+v01phVUiIU/iqFIHdCPfj2fXe82a7IDJkwMyRhbcutx5+ROy7DzZELl5AIu/SSuzOPzJx+AwKoFtIrwFHLAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&processlist=\"]{padding-left:22px}\n.rtl p a[href$=\"&processlist=\"]{background-position:right;padding-right:22px}\ntd code.jush-sql+a[href*=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJFSURBVDjLpZPNS1RhFMZ/5733zkzjR/ZBCUpoJdUiBCkll4m0CUKJIGpVSLjyL2gntDFop6shAolWbcSNIW0ircHBUHCloo3VjNY0jjP3831bWA5ai8Bnfc7vPOfhHDHGcBjZAENji7N1cSj7IcdqY2zkKoiC2qSFNsKPYoXpTPbBynj/4j8BlbLL9c4L3OqoZWLmM4/vXdpX9OJtHq0lBXQdBIgxhvtPZmZ7ui+yspZrjwKfWExxtMbh66YLAgj4geZnyd2YzmT7Vsb75/c5UEqwDLgVl55r57hxuYY3c18Y6mtDgO1KSBBETMwV0VpeA2f3ARKOwvUCcgWX9bzH0NhqvC4Okx9zBzNpPdGQ4OHIrJnOZLtWxvs/2AChNnhRiFIKy8j/ZjILiALYLgc4YnO8zsJSIWUv4Pt2CMBU+tteoxtC0YN8wUdEV1eItMHCIdSagru5l0kQaZ4OdqC1wQAWhqQNnudR3PGrANu2aGmE9FJATSxJwinhegHDr1ZRAmGk0ZHGAMYYMJB0dh0ogOVs6VNqcoGtosYv1+9lYikHERvBQsQCozBGCMIQ3w+rDtKjvQMAd4bfL59vFqYzQasjNoM36wi1vzvHgBFNwo4x8nKNreJOFfBHy9nSXGpyoSPSYOGgqZCae8TJ5BkERb68zsDVZygSlD3/b0B6tPf2byempRFO127T095JQ6wJFBTcJk7VhCRjYItUT/mgrgxOvWtrPtLdEG8gYdcT6gDRGjERWsosrS2TKwbMP78rcth3/gX/0SEvLZFG1QAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr td code.jush-sql+a[href*=\"&sql=\"]{padding-left:22px}\n.rtl td code.jush-sql+a[href*=\"&sql=\"]{background-position:right;padding-right:22px}\np a[href$=\"&variables=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIbSURBVDjLjVPPaxNREJ79Qena1EO6u/GQ9CiFouCp5FQQET0KQvBQbA/tqf+BCEXoyauCl7KFHkoOvYimUpToRTyISVtsliImpCwkLUGqxvzY3bfOvO2+bOgljx32vdn5Zr4336wUBAGUy+V7f96/3PVaDnjNKty17DkYbZ1KpVLppu/7n5nbnVDAh7NXK3Bn4/tIaFVV59R8Pm9ns9nV8aOClZhCbwDguu5QIGMMiGn8rGlamCSXy80ggxfMXAAFPPj9qXipkizLHBQtSZJEQsFg7KBgTZroZGEArWc7TSAchXIA4w+sPdQH1xAMDGQgeXD+4aNIQODZjHaRILT9Wpt/Q8wwA3X/rXVVD3glkQD3h7V/vGrA8Bvz0Rf2AK/F7zRQoY8qIAPn+TLczx/xRPF709nzPOFHayeTyfkBg29vrEkj5BkFPdlu4NtHugH4wYUSqNBaziQGE5hXifXgMVfh115RdHr90TUOIkPNBZtutwvVahUURZFlYuA4zmqzsAl/v24BFhQSRXJFDYvAlUoFUqkU+VmMwSLIyKC1W4ypwISRr9PpgG3bkMlkQNf1YRXkL6+thIlN8y9PIDGgygROp9NgGMZgqOIqEIPa0yV4sPeDgwlIne/1etBoNHhV0zTjExn+Cxh041bl3c8rSY0PCzWIgGQRCxpnSlKv1/m+3++HSaKGLV2fmp9OjN122u7JxnHrYNTf+T+76nzVPsi2lQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&variables=\"]{padding-left:22px}\n.rtl p a[href$=\"&variables=\"]{background-position:right;padding-right:22px}\np a[href$=\"&status=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH2SURBVBgZpcE/SJRxHMfx9+/uuT8qlgR6mvTHqyGwKMWpbmhvskFa2spFRJxaGlprKBQcKmhqcWloaQ2ixcFaDhUKLDDJSFHvT+fzfD/ffJC2Go5er+Du/I8wPrs4Vbk+9nC74V3ugIRLmAyXIxduhtxxM0ziWD6ur6xs3Hv1eGIhGrs2Np8rdmVKRdrRVW/YPLAQNWLPNLZrtKsZe4ZDkZtz/+Yg7Zqe+0IqchfujpNycCAEPiwv8y+jIyOYjFSEO2bG5Nw6fzyfOUuqUqnwN7VaDSVGKjIZcufp9BkIDh6QO0ecd9UNtvaa1FoFCrmI4x3i6lABmUhFLkcmQgAXhxyCMzw8zNuP69TVxeWhE0S5LFu7B+zst1j6XEMyUhnJkIzEDJMhGUpEtVrlR7NIudTJTiuwuWckIctgXzfbzYAkUlESx5gZM8++88fcZIlUrXlAPp8jaSXIoZU4xShL4hFJnJCK3IQkntzpA5yUJFKdhRwHsREbJHJSHqBRr+MSqUgSkgMiAM6RcvkcvzZj9ptGd0eeljlRJrC5HeM/1zifXSMVxmcXF0unTk7IDJkwMyRhcUwuH9Hf18PoxdPIYbfWwrZWqPR+Y/fT++Tr6tLt4O604/WDG3f7B/of9Q5d6VldetMI7k67Xk5duDVQvvRCSjp+A5XMMGcdZp9aAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&status=\"]{padding-left:22px}\n.rtl p a[href$=\"&status=\"]{background-position:right;padding-right:22px}\np a[href$=\"&replication=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI3SURBVDjLfZM7aFRBGIW/mXt3swmuaMjGBwqCBlQsRPCB2GknCIpgJSKKkNZGxM7CQrSw0Ngp2vsoLBS0srERUSMiKkFRYkLMO7t778x/LO7VxFdOMWc4//xn5j8wThL/wqnz9w6BrgIrhQNBuSzEQMp/odtnjm7t6m00cC5FQG4OK2rEkHHuyuP+/xpIdDV6GvRfvsWGvr5feuIdn96+4sLpfkxikReA9yl969exZecuEp/gkwreeyqJxwzMFjEwCQM6OmrUOpfAH1kJEU2k7x5sf1Fbunmzc/73sg4QDJ6/HmZUQ4UaiwQ+v/nKsb0QzEid/Ma1e25UnFuQtHPEh3eQwCdVfNJRBlBSpYaAEIyUoBaWdbSHB4hZAn4pztUJ0UAwMjT413gjQ4Og/eTRSMmdl2XErIpMWPMT+ew3zm4bofnsETePGDBUZmBYFsl2V5vgOkM0UpxqFppkc6Bslnx6ivrGY1Qbq1ixehnOuWIsqeCkzucnJ5KKz2KMmkzJPWlnL8s2nQQMJISxJP/I+8EHxDCLxRkUZpA1qfYe58uHMS7dvT8uOJySS4otbO4lipMoTqMwQbfGWd49CWGi1KdQnKVzTUqlNmwPrx1tAKS0kSxg+SgKk8XhMFHux1GYKpsLAylAez7QlExyRBS+l43ljb/MpuebrVWMGRYYKLPxMDfWlc9U61jdSxWwOqgHxTaQIV+w85HYakmZtecNWu2LH68f3IHYh6O+2N9AgHuaYbr9U/oB0sFcUlVzMrwAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&replication=\"]{padding-left:22px}\n.rtl p a[href$=\"&replication=\"]{background-position:right;padding-right:22px}\np a[href*=\"&refresh=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI/SURBVDjLjZPbS9NhHMYH+zNidtCSQrqwQtY5y2QtT2QGrTZf13TkoYFlzsWa/tzcoR3cSc2xYUlGJfzAaIRltY0N12H5I+jaOxG8De+evhtdOP1hu3hv3sPzPO/z4SsBIPnfuvG8cbBlWiEVO5OUItA0VS8oxi9EdhXo+6yV3V3UGHRvVXHNfNv6zRfNuBZVoiFcB/3LdnQ8U+Gk+bhPVKB3qUOuf6/muaQR/qwDkZ9BRFdCmMr5EPz6BN7lMYylLGgNNaKqt3K0SKDnQ7us690t3rNsxeyvaUz+8OJpzo/QNzd8WTtcaQ7WlBmPvxhx1V2Pg7oDziIBimwwf3qAGWESkVwQ7owNujk1ztvk+cg4NnAUTT4FrrjqUKHdF9jxBfXr1rgjaSk4OlMcLrnOrJ7latxbL1V2lgvlbG9MtMTrMw1r1PImtfyn1n5q47TlBLf90n5NmalMtUdKZoyQMkLKlIGLjMyYhFpmlz3nGEVmFJlRZNaf7pIaEndM24XIjCOzjX9mm2S2JsqdkMYIqbB1j5C6yWzVk7YRFTsGFu7l+4nveExIA9aMCcOJh6DIoMigyOh+o4UryRWQOtIjaJtoziM1FD0mpE4uZcTc72gBaUyYKEI6khgqINXO3saR7kM8IZUVCRDS0Ucf+xFbCReQhr97MZ51wpWxYnhpCD3zOrT4lTisr+AJqVx0Fiiyr4/vhP4VyyMFIUWNqRrV96vWKXKckBoIqWzXYcoPDrUslDJoopuEVEpIB0sR+AuErIiZ6OqMKAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&refresh=\"]{padding-left:22px}\n.rtl p a[href*=\"&refresh=\"]{background-position:right;padding-right:22px}\np a[href$=\"&create=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&create=\"]{padding-left:22px}\n.rtl p a[href$=\"&create=\"]{background-position:right;padding-right:22px}\n.rtl #media p a[href$=\"&create=\"]{background-position:right;padding-right:24px}\np a[href*=\"&db=\"][href$=\"&database=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&db=\"][href$=\"&database=\"]{padding-left:20px}\n.rtl p a[href*=\"&db=\"][href$=\"&database=\"]{background-position:right;padding-right:22px}\np a[href*=\"&schema=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&schema=\"]{padding-left:22px}\n.rtl p a[href*=\"&schema=\"]{background-position:right;padding-right:22px}\np a[href$=\"&view=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHTSURBVDjLY/j//z8DJRhMxE8+VwjEE4D4DBD/j5989l/8pLP/4yec+Z8IpJMnn/2fOPH0//i+0+9TJp063b3uxv/uNdf/Ixsw+z+JoHPVNRQDboB4c468hePZeDAIJPYc+4EwYOLZDzADDt76AsaHbmPHMAMiWg7+gxsQN+HML5DgbAI2I7sgvHEfwguxfaf/kRoGoXV7EAbE9JwCC4bU7/nvU7vrv1fNLjD/3tMPWDFYbc1OhAHRXSfAgg5l2/83L7v436J4G9yA1++/oWCYAcEV2xAGRHUcBwsa5235X7f0wn+9nE0oBjx78/X/moMr/5fMTPif1uf/P7HL679veRGSC9qOgjXopK//X7rg7H/tlLUoBizfu/h/4+rE/1uuTP1/4dmu//27s/6H9+v+N8+W7IG4oO0I3ICS+ZgGgGzceHnC/43XJoHFe/ak/u/fkw4y4DvYgIimQ/9gBoA0IxsAwj7Vhv+3XZmDEgubLk0FGQDJEKENB+7hizL7QqX/3buS/rfvSgDz23cmoLogtHZff0jN3q3B1XveBVfu+h9Yvu1/YNmW/wElG//7F63975wX/z+4R+N/764UsM0gGsSHhwExGKi4A4g/gZwNpTtA4gDRWxxGCQ/RXQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&view=\"]{padding-left:22px}\n.rtl p a[href$=\"&view=\"]{background-position:right;padding-right:22px}\np a[href$=\"&procedure=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVBgZBcFNiJVVGADg5z3fmTujY5NZBANBIVkZ2J9IKkZFGKRuglq1KaqVtoqoVbSKFi1LoY2QEVSbcqiFWWJqPxL044wUGESQVqJOKerce7/z9jyRmba++tXTy2YmnyphPaYQIJBBNuPWfls8l1/EfxdeOrJnxxAgMtO2148d2ffC+rWlxMqkkwBkQjp7aeT97xf99cfS5ZPzv6w6umfHElQoXdw+qN3KhX90JYIgG30243G6Muo9tOYa999WfdfOLs92x4UHd3163eG3ti8ViIgVmdkNumKiUIOu0AURFIFmdmZgx4ZZt9w6uazOTO+FAklAQQlKhBKhRCgRShfOnL/i5hUjd64Kz2+6XjfRPQkVIJPaEUJGaH1SQu0YZHHqXBq2sdaGHlg9KWoZQ4VMEjWKlBJRQiAb2RUGlBZa66RCFFAh0RBBCIlENiY6QBTRhyypIROo0MZk0hDITFAKWqhdkkGSQt/oG1ChtZSZJCkBSCCEE79+Yv7UnIuXLxiNR8rwnsomFfpGn2SjAUjQkuPzHzp98XMPb9ngplVrHFr42OX5ubpx1943K7Rxaple+2EopBZkBo2MNL3wnie2P6ovvbtntzp48iMb1232+6n9OyuMx72+Z3Zmwn03Fi3pkz5oyWffnjERKzy29lnw4iPvmDuxG/unKoyXWhu3lsNefPNnr0VKAVpy/tK/Fk5/7afTR72yda83DjxjqpuEqxVGV/u/pwfdDS+vG05nZpE0wLXLqn2Lzzn287s237XF3IndBlEd/fEwvB2ZacPOgzvHo3w8Iu5NuRxAkkhpovug1u5Q5SoGfWurDxzf/eW2/wEnITFm/fHryQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&procedure=\"]{padding-left:22px}\n.rtl p a[href$=\"&procedure=\"]{background-position:right;padding-right:22px}\np a[href$=\"&function=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK9SURBVBgZBcHLi1VlAADw3/edc+fRmOP4YEzERxQYZGaQaQ8qRDCK+gPcGC1rYbjRWtqiTaAULWrRItwVVAaFBUIvhqjAyixIE41JB8fxzsy9c+855ztfv1/IOYPDH1/bg5N3rxnb169b/bpVt62Vpu1iCTeRsIB5fIizJUDbNI/s2rhq39EnNwCAXtVO9qt2cmGQNlc1S8Pkys1lX1zqHcCREqBtmunVIwFcu510QlAGipLRTrRlNCpi1CnYvXncpsmJte//OPtWBEh1vXqipGlZqoJuze0h3QHdAfMrzC0ncPz0Vfu2T7h/fWdDCZDqeu2dI1FvSG+QxBiUKApiQSEoAi1CWjRzecEvV7uzJUCqqunJ8UJ3pdEfZjFmRSSmoIgUsqJALtxYHDr11d+LOFwCNFW1dXp1R3eQNZApUhAzEoWszFGbSZ2kqZrtn7762K0IkKrh1o2To3pVFiJFCCIiAiBkcqYZDqVqmKCEgye+HC+LODLaiaqURBlZRhJAQIzUKVnu9RssQgnNsNowMTEmBlrIhEAU5EwIXLx0xl+XP7fUXzAV+0V3+cbrHHyjhFQN7ygnRpSRIgapDeSsRQj8+udH5vtfe/rxh21ee69zFz4JM79fP7H3lU1r4hNHTq9vqurEnh1bXF/MrtxIbi0lvYqUsxCyny6c9uCOXVJMdt11QAq1vTsfhZfLVFX78ezPF/+xsFJaHmZ1yoZ1UDWtJrWWuv/phFWeue8lcHT/e8789i4+GytTXT/0wlMPjL92aC8ASJk6ZVXD88e7Lsz+4Pzsd44d+MCbZ180VozCoNi48+A9U5MTz80v1a7O9cwtDiz2a3WTFTEa6QQpDX3zxxnbpre52f9Xtzfn+/PfWrw9PBV2Hzq5HkewFeuwDlOYwuTYSKczNtYRRs5ZSTPaPEDok9+eeWf22P/PLlOL9Py8xgAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&function=\"]{padding-left:22px}\n.rtl p a[href$=\"&function=\"]{background-position:right;padding-right:22px}\np a[href$=\"&event=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVDjLpZNNSJRBGMd/s7q50ZoWISZSRAgF5VpELFJ0CK9RneokEl1qO3URpFNCXqIO0aFLEF0iiAj6JBB0WYwOoikRJiXUYqbsumv7zvu+M/N02BV30YPgc5h5GPh/zMz/USLCVirCFqt+tZGfb8UUFxEJEBMiNkRMgBgfsT6EGms0YjwINU0Xn6haAmuIHrm0TkEEFFQWQCD3/PJ6B37+N9tFEOeVDxSIOEAhrDGoSAMSehtcwRhcMI8pfgLnIxKUdxeA04jTiPPYtucCLixtQGB9wCBOg4QVUDVYI64EYpBgAwdmZalsuUbZwzldIfHAeWUR8289gbMaPTOK8b+DDUAMVheI7W8pKzuNWA/E1byBWg3S4oteibZ0EO86DzhcMEdx/BkN+3aBlBie1YzMOZY9j6CU489K/tabOxOD9VVMhAuT5D6m2dl9FaUUTkKQEu+/FZny45w5fYL23R0MT79kbGr0djLV1hyp/u/Gk72E+b/kR+5VwBqxmtdfc3QdSmAjlsTeHqwKSR7tBri+FmWjUXURdhy/gphmiplX1MUSxFr7WCgsEVVxzh2+AcDNs4842NIJEKvKgSb37j5iNBJ6BN4XmM1Q+vyUQiFgOpthIpumv+cxQx/6iNU1AGi1mWlMptoG2w80DXR3nqKj9Rgz8+NkJtP8+rF8V212nJOptiHgGtAIFIGHYw+y/f8B3ntD1Kp2NbQAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&event=\"]{padding-left:22px}\n.rtl p a[href$=\"&event=\"]{background-position:right;padding-right:22px}\np a[href*=\"&foreign=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVDjLjZLta5JRGMZH/0X0DzhG0Wy1PdVG6aIGtYI+9CVhRSt6gT4Vgavl2vI9LVIWrWL0KZTYpBqpFMUMZ03aMpXVMttLpPX47qPT7eqck2NWzjpwcXjOc67ffZ37nBoANdU0M9RqJkJJ5j///5e5mPvEVAnyb3PGi3z0LgrJZ2R5iUFCFslAVUC5OfdVj/z3weXqoCM0yMFt4p5XA7DI1CzMXkLu200i5y+IVYKlIo/pfjGDrAqgkamZaU7BIIWEE6kpLTLTbVjMvcCUcSNWTyC8JwnUKxAG6kHSvxtxbxM53kP4u2ormtfQHkRGzxLDZSQmmpH5IEM2dBKpwAHExhtQiPXB310L+9WG4N/3bduFiOs8FngrqcYR8z5SvRNJ73bExsTMHFDUwaHa7PutidS8VEyQczqQnZUjPilCxteI7OcrmHnQghHXRZy7dRjHr+2HrHfHYtuFDV0MUP7S8hELUsF2UqkOKX8zhLAGHo2Y16ulvMJyBI98Jrydt8PgOIVDhvVoPL1WV6ocJ5GHkA5KwbtFSAd2Qviixmut+IdN1XRfpmwVht8ZMey/wd6BztkJg/MEBQgUkFyIOUizOPAuEbIf24m5Dx6tmH+s5W7TmHvl9XjiG0D5sE2aKKB05+lXSPilpGF7kAn3wK2qj4/ouf7l/nBn1gla+1Eo7R3MrHzasZIgbJWMC9FRZMPdEObvYUwjjtmNW6+XXy3Z2HtQJ4LefoxVpjP9Zj3w3GmRT5i3zL0xborSM780bVNWelxks4ooSWOXZhVd/wllWOl+7RbUkgAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&foreign=\"]{padding-left:22px}\n.rtl p a[href*=\"&foreign=\"]{background-position:right;padding-right:22px}\ntd a[href*=\"&foreign=\"][href*=\"&name=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAKsSURBVHjahJJZSJRRGIaf/3f+UZomK21UzMxWDSuiTaKgZZQugjLaLiLqQknvjK6im67aCIrMCZEuWqBIaypNSNBpMyqUSKKyXHAc3EdHnfnHf5nThQtGWQc+OB+87/u933uOJITgX6fzSXYJUDDRuhburSn8DSCEmLG8bmeJ1+0URrhVGOFW4XU7hdftLJmO+T852CjG+m4JfbhWCBERXrdTtD3cWTaJk/62wqTtpOxLGMN1SEo8vW/uALBwbw3tt7fQM4pnc2H9jpkERNLuUozBxwgzgKQ4gHT63l0AI0LyvnLaypz0mdEeeabwhNaOMAPjd2MA+Ia0/CTBMQctVS5GlHjmGaHtMwpISgJSlG1CzUTXkxn6WEXi6qMs23mc1I35BMLxyH+xLwMuf0MpIqKiDdQRCK6i42Uly3flovq/ora/xz4nkZgFiyNTGUy9tywRHbeOuRmbCHdfIWI/h+/VA9JzTzDWdR91QKL3e4jQaFBXVXW2ZdrwguQ9FZjBD+gjHkKdZ5HjbuDz3CN9fx5h301kq4EyOxWb6KT42eeVN563aJbpP033v0Dz38EItBCynWew9i4ZB/IJ+1zIioE2nEZ//SeW5FVKx7rXU1wlsIxPLscY9qD1Xkcf8mGNTaL//VMyD51A6y4jyioIB1Lpf9tIYk4KHy6vn7JtAUaMkY921XsRc3SQmIQVtDVnQoKDrqbrzHNYCftTGGr4RlJOCpgd0vTQLYBdUmygzCLaEUtlRZCDBfl8v3+a5tf1RC9aixwaIKuoWhJmALXtCJm5DmYtqwZAjhiRRkONoNi2ItsO86O1D+1LJWlrt2GzraSnqYWsomoJoLF4F8AUGcDSEzAeDT08lahrplXoQv7ys3f+1VIXGzPSsC9dQ+6ZWgmg4dqGP8gAvwYAN7Z8lOPI6HwAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&foreign=\"][href*=\"&name=\"]{padding-left:22px}\n.rtl td a[href*=\"&foreign=\"][href*=\"&name=\"]{background-position:right;padding-right:22px}\np a[href*=\"&trigger=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJlSURBVDjLpZNbaM9hGMc/v8NsTqF2yMhZKIexmpFyRZIiblwouZDauLYoTVEryg2uXIoIOUU5zJkh4e9QDmtJbWxrbUzz/72/9/m6+P3HLslbT9/3ufm+n/f7Pm8gif9ZMcDxe717JLZ62UQzwxukZnhveBOptyHl8anwZk/3b5pZEwOYtGNDzejSfzm58dTH+b8JvFkpwMizdSCBT8E8OJftkzy4BPIOnONHQzPO+eIhBoM5CCrLwNKslBZM8uDykCbwtgMAl/o/GXhvBYMA2rtAlpGYZSR+UIGKCgCSggGSOHy1Q/0DTifufZUknbr/RZJ0+mHWn3mU9edbMu3qG9DmQ08lKSNw3jCJOIKzjzqJopBzLZ3EEVx40smDr/u4e96QGUXPGpkzYQSJywjCwSsIiKOADUvKiUNYX1tOUQhra8oJg4hZ02cQhhGrqyuyp03tTwbOGzKIQ7j8rIsn3Qd4fEVIIn6+kzAMaH35Fn37wbZD68gnCUl+EbAkI3CpIYmiCNZUlwEwbfIUgiBg1cIyJqbzGFPiWbl8GXUb66mqnkrJ2IvUbq88GEI2dQBRGHDjZTcAbZ8+ERDQnOvm+fszVM1egA89C8avwAeO2nlLAeqRxK7j79TzPa/mXJck6darTG8XdM3uhbry+piGrou5I1pcP17h7wwk5k4aRUfPANMrhtP2pZ8J44bx7nMfff29vGl/SNP1LQA0XdtCa2cO4GdhkPRg78kPVYm3kS71uNTjU8N5I/UpxSWracndZOn8ZVx6dZRhQcz9F3cAjgR/+51rt1c2AXXAaOA7cLTlcHvDL6y6kIpO9lqsAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&trigger=\"]{padding-left:22px}\n.rtl p a[href*=\"&trigger=\"]{background-position:right;padding-right:22px}\n#content p a[href*=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAJ+SURBVHjapJPLS1RRHMc/M86M5GtoSMcKMq2ITI0kgh5USJmGhYsIogh1IUgrIfoLwtq1iDBQS3qAtJLoCRGFYGTgq0WWpBiYjk6ao6Mz995zfi3O9UG468DhHA6/7+P3OB4R4X+Wr+nJT1FKsB2N5QhJW5O0NAlbsGyN1oLSoMU9taC0oN03n9ZCWelGA7Y0CUtjK0EpwVEGpNaA1oJffIzidZRgO0bNcgzIBIIWo6g17jZ3EUHEkHhtxyVwhHOHQ5w/vslVFq6U51BbGUaLoEWoqQgjImi3bFqDz1aC5WjOHgrx9H0URwnFBWmUFKTT9jKC0kJ9VS53OyfYkOqlurCPxd7HpGQUc6LoAz7b0Vi2oTT5CX3DcUoK0lcsA4iAnZzFP9FFbvFlgvn7+TO6G1/SFhwtdLyb5mJZNgD3X0WMRTdPgJzMJRZGWgjtOsLMj68EPBaZWbnGgXKr/fDNFEoLdZXhVUcCyp7n1OZ2gttPk5zoIJDmYax/iNgieJO2Cbp0Mhvl9npwJL5iO5S2ROzbTYI7zpD41YLHP4s/I5N0maFx8KqZA6WE9tdT1FYY5XvPJukajJEVWKAs1EZwZzWJ8Wa8fgcrlk+0u59Pec2ITBuC5X63PJ9EuXkHA3EO+FvJ2VuFNdlKSkBIzOUR7e6jJ7+FqZipkVfL6qQplyjdO0+p5wGW2sLElztoEsRntvK7Z4jPLng5RZ/SZiRXCqaEmlAjhQ1tfOu4xveublK37WMuMs4juc1YbwTtTqKI4FnvN96oL7Kv1zX48Cr633YyNjq8EMwOHS1vGhj4N3ZdggvHQkulBWHfwT35iD/ZvTQ1XVt1a3Bkve/8dwDixMULwcWPDAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr #content p a[href*=\"&sql=\"]{background-position:left;padding-left:22px;margin-left:10px}\n.rtl #content p a[href*=\"&sql=\"]{background-position:right;padding-right:22px;margin-right:10px}\nh2~p a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr h2~p a[href*=\"&select=\"]{padding-left:22px}\n.rtl h2~p a[href*=\"&select=\"]{background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&table=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&table=\"]{padding-left:22px}\n.rtl #content h2~p a[href*=\"&table=\"]{background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){padding-left:22px}\n.rtl #content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJeSURBVDjLpZNLSNRRFIe/O81o+WjISM0epuarEHuDqIFEDyoqEFtFD4gWQVDQoo0QhFARbowKNNpKi0DJRYVGqRmY5oPUBs3S1GnMcdR0/v8Z554WM44RGURne7nf+X6cc5SI8D9lBTh79/0VIBkoAHaCCIJCCxaLwqJAa40O4LFZpT9z/cpdaOFqcZZCRDhT0V4p/1i3HveIiAQNgEKAh83usNrfgp3Pj6NvyGOGI6AlceExPT4SAKX+/PnjNxMAr+GPCANEJGqhq8NlLtk53myk0FlN/0QO19a+Ul33Lp4OArRYF9SWqrmxWqb7WliRcwp7ynY8g5n0Pa+6vQBQACXX6zG0RgvU3djP4OhUMI7nBXZ6iEvPxz3QS4TyEbsykZjVG+0hgAbgu9fPvm1J1LWNhDtH+1qxSRf21IOYY9VERCm+dPQxPatQvolcS8gAgBkjgF+EOXM+OImpZmw/GrCnHcYYrUTZJrHFxBItbh4N5bH70hOHBUCFDEzTj9cfIGD4cfbWEjX7GvvmYxgj97HY/PimN+Fq7GTNgTKchh2AoMEvUxeBnKgOPF+bid96BJ+zimURgjmdzHhTO6qonOUJ2YjMLwL0vA4ThluqKT0UwBdIYqy7Ao3BrHsdrre9qKJyVHQCodgSBgS0/gzQ/eAExWntbCm4QORwE46aZjqeuXG87GTD8TukZmSRkmQPmcrk4iYGdE1JaUOGiOTlulyrfB+ekpJbyNT4BANtDupjLzNe9g6R1lBIPQOWXgD1+zmf3Bvn3ZGaYN2TnYLYzDde1/i5oze7Pi21YD8BVSdMJ0n4cQkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){padding-left:22px}\n.rtl #content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){background-position:right;padding-right:22px}\np a[href*=\"&edit=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weRgoI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEsNBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKBgIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJxmAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxhB1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvrkn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&edit=\"]{padding-left:22px}\n.rtl p a[href*=\"&edit=\"]{background-position:right;padding-right:22px}\np a[href*=\"&indexes=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&indexes=\"]{padding-left:22px}\n.rtl p a[href*=\"&indexes=\"]{background-position:right;padding-right:22px}\n.error{background:#efdada url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAIySURBVHjapNNPSJNxGMDx77t/7zbdu02dUzJKpX+6JOzfUrNgeegghB08RKcuURBBERQRQUF2bpJ0ESGCDkKeU4gOVlB0ik4WhWQ69842bbq97+/pMBOiWYLP5ffwex4+D88PfpqIsJnQJhKJsoVot+2JVs1mbcuxMmdWR1KT7kK5Psd6suHPvQvsbdKDsQbD686PrNdXFqg7Wmw2Ks1WT3wYd+wGNb5Uf+RQvnnDQKgyM+ltO67hdOIIb8G3v0OrcGXHNgTUdy/3G96FWv3wIGr6Kmouid5xn7Aj3Rppz/b/F6gOzI94us4hBRNz6AXm4BiyPIW/5yxBzEf/BLYeyyUD22t0T9s1ih96EQERsD5exnPwEuGdNUZtLJUsC0Q7C9HqitQFd/sVpDANNqAElCC2QhZfo3depKqYOh9sMaN/AYa+8Na/74DmrG/H/noPEFx17tWqYE/dxb0thhHf4/Qu5Z79AUSP5BNBPdOgdw0huVfIj/cABE6EqOw2QADbwp55gL83STg9G/c3fEusAVW++TE93gd2BpUeLS0OZB6nWHyZBUqrqJk34MwQ6EsQyKSfADivn4ncjjS6e3wnh1GZUeT789WJgr5bx7tLR3NpaCKAIOlxvD3DyMTTikXHvKbN3Wm0QqdvOV07ToFaLk0DcGilU7F6p9beA4eP/PhDvgwMFLTPN1umQprZJJYgRQFL8TuXFUEt2aifCsnbKFuhLIUohSjBNEKftM1+518DAEJB6cbyeH5EAAAAAElFTkSuQmCC\") no-repeat scroll .8em center;padding-left:40px}\n.ltr .error{padding-left:40px}\n.rtl .error{background-position:99%;padding-right:40px}\n.ltr #menu .error{padding-left:40px}\n.rtl #menu .error{background-position:95%;padding-right:40px}\n.message{background:#efe url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjvYm7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//dv9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bottSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQcb5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcDmHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZaUrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLRbOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC\") no-repeat scroll .8em center}\n.ltr .message{padding-left:40px}\n.rtl .message{background-position:99%;padding-right:40px}\n.ltr #menu .message{padding-left:40px}\n.rtl #menu .message{background-position:95%;padding-right:40px}\ntd a[href*=\"&user=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKjSURBVDjLjZJbSNNhGMZXF912FZEVpOaVFFSCmhe2/iNqhYVsmo1tDXUiJjNnrC0RMxVFxTm3ecJDeSrblorpSFAJzxptOrfFzJnuUJDplG2ZrqchtaSGePFcffx+vN/zviQApL2STQvgzFaFOCytx7HQFLjVyAuqjwkPOvTnfU+YRz1BmJsDPda2Y9idmrRg8b4E9ewjEqsqDDZ1MlzjZbApo2BtPwldVfDqvgRy2uEyu0YNx4gcW5qn2BiVw/K+F4NPzpn3JYilxnH1LZk/17UKeAwqOHWdsA9JkMe6pPQr4JJDODLOZYeESYb8LrGVGn9mWiJI+2FX8rHc9RiWrmQYW2/D1FUATf0VaGWhLB/MjjpNyDgUj5hBxu40lPNQWZOPF01M2AcEWJvpATasWJ1RYLT06hefoDz+/HBt6i2ochOhb8tGK58OCZNAdQoFr8dY+DqXg83lbu8XSuCaVWF7cRiahuRtn0AaH/zSNNj+X2Hqkkis6LLhcQ3D9fEeVibTYWhOxGQdEyZZzN6FWfoz8W1WCI97DM55NtxLDKzrRZiroyCjPA62uht/BQcvVAilwnRfYYZnDNinBL9hFtyf7sChewS9nACn8KLtATc3d6ExgbEDH4h6nhTLf7cx9Bko7FBCLBNC15flHfst3OZEfF9iYs07iUlGuIylEad2b44USK2m03k9zm6DB/l6QNTSjrleEbR9Ylgm6HCaGVjRPIRWTHEZyyKC/r0V0kx+2Pa0ohL8V3aw1UBHMQGsL8JYS8OAKAAj1dcwUEDGvJQKf8dGMldE2xQF95GQMw7uGyCPexabY1JsTlRgwgu2cUNQnCXYKcyv4ENzSmRvXqwonN7SGZYxBVr0URSyQ9FfdB0NRUmIuFm1XJmVtFOYP8EvH33H/9EvkWcAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&user=\"]{padding-left:22px}\n.rtl td a[href*=\"&user=\"]{background-position:right;padding-right:22px}\ntd a[href*=\"&procedure=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK5SURBVBgZBcFPaJZ1HADwz+95n3e6uTnREGdljRKtGCYiHTLxkIUmQeeCOnXzVnQIoi5BQV08TMo6GIiHiKI6ZEWgszzEmtpqSDP7s9ycm9NN977vnuf37fNJEWH/G6df6l676vki2YXVSCAhEpFVOU8uzMX36daNV88MH+oApIhw8O2zZz45vOuhokjrgoYAIALC7NKKEz8vmP67fee3XyfWjwwfakMJRSNt6yob68avaRQpkYhMHVlVheWV2r6tffYPjNi4eLyncWCodf7jI1Jr6sUSUkq9EdHoajQkIZALZOpEIWlPf27r4jndQy/oH9xp4c9tJk4de7eEIEGBlAgJREqKRP/yKXVcsH7r4+Ynf9eVOvrWbtK7YUt/CRBB2SBJIiW5Doqkd3nEllWj+gef1r56UldP8tfYhJt3UhTtuR0FRBAoU6FISYFGkaxePG1LfKv/gYNa/30oNW9o9vbpzvOOXj+wsvvwZ5cKCGSkRJGSIiWtK19af/uU/gef1ZoaVjRXdG7db+bMed173zJVD2QoIFdEkBG4fflrPYs/2vjIMzrTxzS6QvvWfWZGRs3tGZY2bFdnoICcQ0QQTI+e1L3wk5W82dWLR2Qtt+fvNnNuwuLeo1LvgNXNpK4CFFBn6iAysxc/8vCel636Z8SlL84a+2be+Hdjlh57R9WzWaDZKFSdCpSQq5AjvPlLx9DkrM74VwZ3POHm7JzJsUk/7PvU9Sv3yipwYlPTSjuDEqqqVtcMrG0a/+Oa9z8Ytnv7oOXNOyw9edyjffeIIIIL1yqRw0qrAiVU7ZyrnKNTS+te/9flFCYlkJdIS5UcRJEUOSnLlKs6V1DCSqueWdPVuOu1oc6aiCgEGdDfXYIIuptJSnKzkRbrKk9BCSnFe0+9cvq5lNLOED0AgkAIIEAr5zxaFk7A/5IUWNTkV3l/AAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&procedure=\"]{padding:0 6px 0 22px}\n.rtl td a[href*=\"&procedure=\"]{background-position:right;padding:0 22px 0 6px}\ntd a[href*=\"&function=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMCSURBVDjLTdBNaFxVGMbx/zn33plOZjIT8zmGOnFM1VoNJYFWYi2CtVSMdKUbK+LKhSAGXYhd2m6FQkEXLbiwETcWiq3WpiiSBLRqTa122pEmMZPmw8lkMt93zrnnXhdJbB54l++Ph0cEQQDAm1/l9gOnHmnbMVzXPnXto32fhueXgAqwChigCBSAz4ErNpvxPe/pvcnY8PvPdbE9NeUn6spPFF2zU2moNA1zq1W+vVs7DIxuB3riIQFAbt3gCIEtwLIh7EhSYYklJY4Fgzsj9Cai7WeuLX4stwCjdTxqg+dDRQlKGtabUHI3rtCAf6sGgA/H5hlOR3mq0+mytwHtrSFJrQk11yClwAYsC6QFFgJLgA8IU+anmSLX50uL9wGlehIRi1LDo94MkDLAkiCNwJJgEbCj/AN/j3/G250D1CZ/5BWdHPsf8JTq64k7lNwADyAAywhksLF9vPI17WvXiAy8TiI9yPrs4zSunH1jW4NmXzIRJrNiEBIkG88SaKlcJuX8SezRA6zdzRASitZ4klhHKmEDvHjicsS2ZCjsSJQxSAIgIADCtSnS9i8k0kdoLn1JqEXwz/RttKsKbqP6jATwmqorLEBujkQAAohUJtglrpLofwl38QzCKeLEWtHVRV+Xl17Y9875rNys32LjY0uwpAAhMfOXSJmrJHYdxb33KdLRqPLDrEzc4PTC4dtD741PA8iDo2OdnlIn9u9OsVwOmFsxlLKXSOqf6X5yBLV8FisU0Cz3kZ/8ndzAR2Sq3TNb29lGqUPAyG+ZWYoNG2fhG14dyOP5vSzdPM0D3SHctYfITd1CHvqEhZyLUSq/BUij9dDLB56IfHF8hJOvPcYeLrLn2bcI5ybJXphi+rs17nx/g4n2D4i09VKp1jFaF+430Hp2ebXEufEMbbEI2Zk86q+LpPcepJQvcO/mDM8fv8CDoX7CNuTXKhitF7YAMXjsVCcwCvQBHf25k0eG0l1i3+60mFPR4HxuSLhOB/FohLZ4C3/cyWWBY9fPvfsrwH+7HFmMUqkOrwAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&function=\"]{padding:0 6px 0 22px}\n.rtl td a[href*=\"&function=\"]{background-position:right;padding:0 22px 0 6px}\n#fieldset-history input{vertical-align:unset}\n#fieldset-history a[href*=\"&history=all\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVBgZpcHda81xHMDx9+d3fudYzuYw2RaZ5yTWolEiuZpCSjGJFEktUUr8A6ZxQZGHmDtqdrGUXHgoeZqSp1F2bLFWjtkOB8PZzvmd7+djv5XaBRfL6yVmxv+QjQeu7l25uuZYJmtxM0AVU8Wpw9RQU8w51AxzDqfKhFjwq6Mjdbj1RN0Zv2ZFzaloUdwrL2Is4r+y7hRwxs8G5mUzPxmrwcA8hvnmjIZtcxmr3Y09hHwzJZQvOAwwNZyCYqgaThVXMFzBCD7fJfv8MpHiKvaV3ePV2f07fMwIiSeIGeYJJoao4HmCiIeIQzPXifY+paJqO4lZi/nWPZ/krabjvlNHyANMBAQiBiqgakQMCunbxHJviM9bQeZdBzHJUzKhguLJlQnf1BghAmZ4gImAgAjk++8jP56QmL2GXG8zsfFCz8skA1mQXKbaU3X8ISIgQsgDcun7FL7cJjFnLUMfLyLRr0SLS4hbhiup5Szd19rpFYKAESKICCERoS95neyHmyTmbmAodQ4vGpAfmEn6YTtTahv4ODiRkGdOCUUAAUSE/uQNfqTaKFu4jvynJiIxIzcwg/SjF1RsOk9R+QJMlZCvqvwhQFdbM4XvrynIVHpfn2ZSWYyhzHS+PUtSueUC0cQ0QmpGyE9197TUnwzq1DnUKbXSxOb6S7xtPkjngzbGVVbzvS/FjaGt9DU8xlRRJdTCMDEzRjuyZ1FwaFe9j+d4eecaPd1dPxNTSlfWHm1v5y/EzBitblXp4JLZ5f6yBbOwaK5tsD+9c33jq/f8w2+mRSjOllPhkAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr #fieldset-history a[href*=\"&history=all\"]{background-position:left;padding-left:22px;margin-left:10px}\n.rtl #fieldset-history a[href*=\"&history=all\"]{background-position:right;padding-right:22px;margin-right:10px}\ntd a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&select=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&select=\"]{background-position:left bottom;padding:0 8px 0 20px}\nth a[href*=\"&table=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr th a[href*=\"&table=\"]{background-position:left bottom;padding-left:22px}\n.rtl th a[href*=\"&table=\"]{background-position:right bottom;padding-right:22px}\ntd a[href*=\"&create=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&create=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&create=\"]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&view=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJeSURBVDjLpZNLSNRRFIe/O81o+WjISM0epuarEHuDqIFEDyoqEFtFD4gWQVDQoo0QhFARbowKNNpKi0DJRYVGqRmY5oPUBs3S1GnMcdR0/v8Z554WM44RGURne7nf+X6cc5SI8D9lBTh79/0VIBkoAHaCCIJCCxaLwqJAa40O4LFZpT9z/cpdaOFqcZZCRDhT0V4p/1i3HveIiAQNgEKAh83usNrfgp3Pj6NvyGOGI6AlceExPT4SAKX+/PnjNxMAr+GPCANEJGqhq8NlLtk53myk0FlN/0QO19a+Ul33Lp4OArRYF9SWqrmxWqb7WliRcwp7ynY8g5n0Pa+6vQBQACXX6zG0RgvU3djP4OhUMI7nBXZ6iEvPxz3QS4TyEbsykZjVG+0hgAbgu9fPvm1J1LWNhDtH+1qxSRf21IOYY9VERCm+dPQxPatQvolcS8gAgBkjgF+EOXM+OImpZmw/GrCnHcYYrUTZJrHFxBItbh4N5bH70hOHBUCFDEzTj9cfIGD4cfbWEjX7GvvmYxgj97HY/PimN+Fq7GTNgTKchh2AoMEvUxeBnKgOPF+bid96BJ+zimURgjmdzHhTO6qonOUJ2YjMLwL0vA4ThluqKT0UwBdIYqy7Ao3BrHsdrre9qKJyVHQCodgSBgS0/gzQ/eAExWntbCm4QORwE46aZjqeuXG87GTD8TukZmSRkmQPmcrk4iYGdE1JaUOGiOTlulyrfB+ekpJbyNT4BANtDupjLzNe9g6R1lBIPQOWXgD1+zmf3Bvn3ZGaYN2TnYLYzDde1/i5oze7Pi21YD8BVSdMJ0n4cQkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&view=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&view=\"]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&edit=\"][id^=Data_free-]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weRgoI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEsNBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKBgIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJxmAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxhB1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvrkn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&edit=\"][id^=Data_free-]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&edit=\"][id^=Data_free-]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&indexes=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&indexes=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&indexes=\"]{background-position:left bottom;padding:0 8px 0 20px}\nselect,input[type=checkbox],input[type=radio],input[type=range],progress{accent-color:#4f7d9c}\ninput[type=radio]{margin-bottom:5px}\n.ltr input[type=checkbox],.ltr input[type=radio],.ltr input[type=range],.ltr progress{margin-right:5px}\n.rtl input[type=checkbox],.rtl input[type=radio],.rtl input[type=range],.rtl progress{margin-left:5px}\n.ltr input[type=submit]{margin-right:10px}\n.rtl input[type=submit]{margin-left:10px}\n.ltr table.layout label,.ltr label.jsonly{margin-left:8px}\n.rtl table.layout label,.rtl label.jsonly{margin-right:8px}\n.sqlarea{background:#aac6d8;font-size:105%}\nfieldset a{line-height:unset}\ninput[type=submit]{padding:2px 6px}\n"
  },
  {
    "path": "designs/rmsoft_blue-dark/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/rmsoft_blue-dark/screenshot.png)\n"
  },
  {
    "path": "designs/rmsoft_blue-dark/adminer.css",
    "content": "/*!\n * @package    Adminer.css - Theme CSS for Adminer   ---   [theme dark]   blue    B  (with icons)\n * @version    5.1.1.1\n * @date       Thu, 03 Apr 2025 13:24:32 +0100\n * @author     Robert Mesaros\n * @copyright  Copyright 2025 Robert Mesaros, rmSOFT, Slovakia\n * @web        https://www.rmsoft.sk\n * @link       https://www.rmsoft.sk/en/portfolio/programming-work/web-services/theme-for-adminer\n *\n * @donate     https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=BB4D8Y28YZDH6\n *\n * @license    MIT: https://mit-license.org/\n *             Permission is hereby granted, free of charge, to any person obtaining a copy of\n *             this software and associated documentation files (the \"Software\"), to deal in\n *             the Software without restriction, including without limitation the rights to use,\n *             copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the\n *             Software, and to permit persons to whom the Software is furnished to do so,\n *             subject to the following conditions:\n *\n *             The above copyright notice and this permission notice shall be\n *             included in all copies or substantial portions of the Software.\n *\n *             THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n *             INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n *             PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n *             HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n *             OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n *             SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @code       text/css; charset=UTF-8\n *\n *   Default Silk icon set 1.3 by Mark James - https://opengameart.org/content/application-silk-icon-set-13\n *   Modified icons by Robert Mesaros\n *\n */\n#menu{padding:0 0 30px 0}\n.ltr .logout{right:0;left:auto;margin-top:.5em}\n.rtl .logout{left:0;right:auto;margin-top:.5em}\nhtml{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;--bg:#002240;--fg:#829bb0}\n*:before,*:after{box-sizing:inherit}\nbody{color:#829bb0;background:#002240;font-family:Verdana,Arial,Helvetica,sans-serif;font-weight:normal;cursor:default;margin:0}\na{color:#829bb0;text-decoration:none}\na:visited{color:#517fa8}\na:link:hover,a:visited:hover{color:#9bc0e1;text-decoration:underline}\n#menu #h1{margin-left:10px}\n#menu h1{background-color:#1d4e78}\n.rtl table.layout tbody td{display:flex}\n.rtl table.layout~table thead th:first-child,.rtl table.layout~table tbody td:first-child{text-align:right !important}\n.rtl table.layout~table thead th:last-child,.rtl table.layout~table tbody td:last-child{text-align:left !important}\nh1{padding:.6em;background:#1d4e78;border:1px solid #f2ddaf;text-align:left}\n#h1{color:#fff}\n.version{color:#ddd;margin-left:8px}\nh2{padding:13px 16px 14px;color:#000;background:#3c678d;border-bottom:1px solid #b9cbda}\n.ltr h2{margin:0 0 20px -16px}\n.rtl h2{margin:0 -16px 20px 0}\nh3{margin:1.4em 0 0}\nfieldset{font-size:90%;background:#0f395e;border-top:1px solid #16548a;border-right:1px solid #000;border-bottom:1px solid #000;border-left:1px solid #16548a}\n.ltr fieldset{margin:1.6em .5em .5em 0}\n.rtl fieldset{margin:1.6em 0 .5em .5em}\nfieldset legend{background:#0f395e;padding:0 .5em;border-top:1px solid #16548a;border-right:1px solid #000;border-left:1px solid #16548a}\nfieldset legend span{font-size:80%;color:#4f6980}\n.ltr fieldset legend span{margin:0 0 0 1em}\n.rtl fieldset legend span{margin:.2em 1em 0 0}\n.ltr fieldset select{font-size:95%;margin:0 6px 0 0}\n.rtl fieldset select{font-size:95%;margin:0 0 0 3px}\nfieldset label{margin:0}\nfieldset input{font-size:95%}\n.size{width:8ex}\ndiv.footer fieldset:first-child{color:#868d46}\ndiv.footer fieldset:first-child legend,div.footer fieldset:first-child div,div.footer fieldset:first-child label{color:#829bb0}\na sup{margin:0 .3em}\n#help{background:#c7e4fe}\n#help a{color:#062642}\n#help a:visited{color:#062642}\n.icon{width:18px;height:18px;background-color:#062642}\n.ltr .icon{margin-left:3px}\n.rtl .icon{margin-right:3px}\n.icon:hover{background-color:#d1394e}\n#tables a{background:#002240}\ntbody a{color:#7ea8cd}\ntbody a:visited{color:#396d9b}\n#menu p,#menu ul{padding:.8em 1em;margin:0;border-bottom:1px solid #326b9c}\n#menu .links a{display:block;width:fit-content;margin:0;font-size:93%}\n#menu h1{border:1px solid #f2ddaf}\n.rtl #menu h1{direction:ltr}\n#menu p.error{margin:10px 0;padding:.5em .8em;border-bottom:1px solid #e76f6f}\n#menu p.message{margin:10px 0;padding:.5em .8em;border-bottom:1px solid #7fbd7f}\n.ltr p.links{margin:.8em 20px 8px 0}\n.rtl p.links{margin:.8em 0 8px 20px}\n.links a{margin:0}\n.ltr .links a{margin-right:20px}\n.rtl .links a{margin-left:20px}\ncode{font-size:100%;background:#81a0bc;padding:.2em .5em}\ntable code{font-size:130%;background:#154167;padding:.1em .3em}\ncode.jush-sql{background:#92afc9}\n.rtl p code.jush-sql{background-position:right;clear:right;float:right}\npre{background:#92afc9 !important;padding:5px}\ntextarea{font-size:120%}\n.ltr p.count{font-size:90%;margin:.8em 20px 8px 0}\n.rtl p.count{font-size:90%;margin:.8em 0 8px 20px}\n#breadcrumb{background:#9cb9d3;color:#000;font-size:90%}\n.ltr #breadcrumb{left:23em;margin:0 0 0 -12px}\n.rtl #breadcrumb{right:23em;margin:0 -12px 0 0}\n#breadcrumb a{color:#326b9c}\n#breadcrumb a:visited{color:#2b6190}\n#breadcrumb a:link:hover,#breadcrumb a:visited:hover{color:#0b3559;text-decoration:underline}\n#logins{font-size:90%}\n#logins a{color:#f0f8ff;background:#002240}\n#logins a:visited{color:#517fa8}\n#logins a:link:hover,#logins a:visited:hover{color:#9bc0e1;text-decoration:underline}\n#lang,#dbs{font-size:90%}\n#dbs select{margin-top:.3em}\ntable{border-spacing:0}\ntable,td,th{border:0;border-collapse:separate}\n.ltr table{margin:1.9em 0 0 0}\n.rtl table{margin:1.9em 0 0 0}\n.rtl table tbody td,.rtl table tbody th{text-align:right !important}\n.ltr table thead td:first-child,.ltr table thead th:first-child{border-left:1px solid #1e5687}\n.rtl table thead td:first-child,.rtl table thead th:first-child{border-right:1px solid #1e5687}\ntable thead td,table thead th{height:1.6em;border-top:1px solid #1e5687;border-bottom:1px solid #1e5687}\n.ltr table thead td,.ltr table thead th{border-right:1px solid #1e5687}\n.rtl table thead td,.rtl table thead th{border-left:1px solid #1e5687}\ntable tbody tr:first-child td,table tbody tr:first-child th{border-top:1px solid #1e5687}\n.ltr table tbody td:first-child,.ltr table tbody th:first-child{border-left:1px solid #1e5687}\n.rtl table tbody td:first-child,.rtl table tbody th:first-child{border-right:1px solid #1e5687}\ntable tbody td,table tbody th{border-bottom:1px solid #0e416d}\n.ltr table tbody td,.ltr table tbody th{border-right:1px solid #0e416d}\n.rtl table tbody td,.rtl table tbody th{border-left:1px solid #0e416d}\n.ltr table tbody td:last-of-type,.ltr table tbody th:last-of-type{border-right:1px solid #1e5687}\n.rtl table tbody td:last-of-type,.rtl table tbody th:last-of-type{border-left:1px solid #1e5687}\ntable tbody tr:last-child td,table tbody tr:last-child th{border-bottom:1px solid #1e5687}\ntable tbody td[id*=null] i{color:#4e789c}\nthead th{padding:.2em .3em}\nthead th a{color:#8e7d16}\nthead th a:link:hover,thead th a:visited:hover{color:#a49019}\nthead th a:visited{color:#6f6211}\ntd{background:#062846}\n.odds tbody tr:nth-child(2n) td{background:#042541}\n.odds tbody tr:nth-child(2n) th{background:#103556}\ntbody{font-size:90%}\ntbody td{padding:.15em .3em}\npre[id^=sql]+table tbody td{padding:.2em .3em}\nthead th,thead td{color:#a8b05f;background:#011d35}\nthead th{text-align:center}\n.ltr thead td{text-align:left}\n.rtl thead td{text-align:right}\n.js .checkable thead .checked td{background:#011d35}\n.js .checkable thead .checked th{background:#011a30}\n.js .checkable .checked td{background:#10395c}\n.js .checkable .checked th{background:#0f3658}\n.js .checkable.odds tr.checked:nth-child(2n) td{background:#0d3558}\n.js .checkable.odds tr.checked:nth-child(2n) th{background:#0c3254}\ntbody tr:hover td{background:#133553 !important}\ntbody tr:hover th{background:#12324f !important}\ntbody tr.checked:hover td{background:#1a4870 !important}\ntbody tr.checked:hover th{background:#11304b !important}\nth{background:#11385a}\ncode.jush-sqlset th,code.jush-sqlstatus th{background:#010304}\n#edit-fields tbody tr:hover td,#edit-fields tbody tr:hover th{background:#5287b5 !important}\n.js .column{position:absolute;background:#011d35;border:1px solid #316592;opacity:.9;margin-top:1.4em}\n.ltr .column{padding:.27em 1ex .3em 0;margin-left:-2.6em}\n.rtl .column{padding:.27em 0 .3em 1ex;margin-right:-2.6em}\na.text:hover{text-decoration:none}\n#schema{font-size:85%}\n#schema .table{background:#093459;border:1px solid #4e6e8a;padding:0 3px 3px;cursor:move;position:absolute}\n#schema a{color:#ad8f49}\n#schema i>span{color:#a0b082}\n#schema .table>span[title*=int]{color:#829bb0}\n#schema .table>span[title*=decimal]{color:#667989}\n#schema .binary{color:#e15d5d}\n#schema .date{color:#a34ba3}\n#schema .char{color:#0f9f0f}\n#schema .enum{color:#07a5a5}\nspan.jush{font-size:110%}\nspan.jush-bac{color:#d22929}\nspan.jush a:visited{color:#000}\ncode.jush-sqlset span.jush,code.jush-sqlstatus span.jush{color:#060a0d}\ncode.jush-sqlset span.jush a,code.jush-sqlstatus span.jush a{color:#7198bb}\ncode.jush-sqlset span.jush a:hover,code.jush-sqlstatus span.jush a:hover{color:#94b1cb}\na.jush-help:hover,a.jush-custom:hover{color:#002240}\n.message{font-size:90%;width:fit-content;border:1px solid #7fbd7f}\n.message .time{color:#a6a6a6}\n.message a{color:#326b9c}\n.message a:visited{color:#396d9b}\n.message a:link:hover,.message a:visited:hover{color:#0b355a;text-decoration:underline}\n.error{font-size:90%;border:1px solid #e76f6f}\n.error .time{color:#c63}\n.error a{color:#326b9c}\n.error a:visited{color:#396d9b}\n.error a:link:hover,.error a:visited:hover{color:#0b355a;text-decoration:underline}\np label{font-size:90%}\n.ltr p label{margin-left:10px}\n.rtl p label{margin-right:10px}\n.ltr p label input{margin-right:7px}\n.rtl p label input{margin-left:7px}\n.ltr.js p input[name=Collation]{margin-right:7px}\n.rtl.js p input[name=Collation]{margin-left:7px}\nlabel.block{margin:0}\n#fieldset-history input{margin:10px 0 0 0}\n#table tbody input{vertical-align:unset}\n.ltr fieldset select+script+label{margin-left:4px}\n.rtl fieldset select+script+label{margin-right:4px}\n.ltr fieldset label input{margin-right:7px}\n.rtl fieldset label input{margin-left:7px}\n.footer{border-top:20px solid rgba(0,34,64,.7);border-image:linear-gradient(rgba(0, 34, 64, 0.2), #002240) 100% 0}\n.footer>div{background:#002240;padding:0 0 .5em}\n.ltr .footer{margin-right:-20px}\n.rtl .footer{margin-left:-20px;margin-right:0}\n.loadmore,.footer+div{font-size:90%;margin-left:0}\n.footer+div input,.footer+div select{font-size:95%}\n#menu #tables{font-size:75%}\n#menu #tables a.view{margin:0 15px}\n#menu #tables a.select.active+.structure,#menu #tables a.active.structure{color:#868d46}\n.ltr #logout{margin-left:.5em}\n.rtl #logout{margin-right:.5em}\n#sum-Data_length{background:#062845;color:#a0bed9}\n#sum-Index_length{background:#062845;color:#a0bed9}\n#sum-Data_free{background:#062845;color:#a0bed9}\n.ltr #fieldset-history a[href*=\"&sql=&history=all\"]{padding:0 0 0 18px}\n.rtl #fieldset-history a[href*=\"&sql=&history=all\"]{padding:0 18px 0 0}\n#version{font-size:85%;color:#ff0}\n.ltr #version{margin-left:4px}\n.rtl #version{margin-left:4px}\ndiv#ajaxstatus+.message a:first-child{color:red}\ntable.checkable thead a[href*=\"&refresh=\"],table.checkable thead a[href*=\"&dbsize=\"]{color:#8e7d16}\ntable.checkable tbody tr.checked,table.checkable tbody tr.checked a{color:#868d46}\ntable.checkable tbody tr.checked a{color:#99a150}\nthead{position:-webkit-sticky;position:sticky;top:0}\nthead tr{height:32px}\n.time{color:#4f6980}\n.ltr p a[href*=\"&dump=\"]{padding-left:5px}\n.rtl p a[href*=\"&dump=\"]{background-position:right;padding-right:6px}\ntd a[href*=\"&user=\"]{line-height:19px}\n@media only screen and (min-width: 1024px){\n\t#form~form .scrollable+p{position:-webkit-sticky;position:sticky}\n\t#form~form .footer{position:-webkit-sticky;position:sticky;clear:both}\n\t#form~form .footer+div{position:-webkit-sticky;position:sticky;clear:both;padding-bottom:2em}\n}\n@media only screen and (min-width: 1024px)and (max-width: 3840px){#form~form .footer{width:3823px}}\n@media only screen and (min-width: 1024px)and (max-width: 3072px){#form~form .footer{width:3055px}}\n@media only screen and (min-width: 1024px)and (max-width: 2560px){#form~form .footer{width:2543px}}\n@media only screen and (min-width: 1024px)and (max-width: 1920px){#form~form .footer{width:1903px}}\n@media only screen and (min-width: 1024px)and (max-width: 1680px){#form~form .footer{width:1663px}}\n@media only screen and (min-width: 1024px)and (max-width: 1600px){#form~form .footer{width:1583px}}\n@media only screen and (min-width: 1024px)and (max-width: 1536px){#form~form .footer{width:1519px}}\n@media only screen and (min-width: 1024px)and (max-width: 1440px){#form~form .footer{width:1423px}}\n@media only screen and (min-width: 1024px)and (max-width: 1366px){#form~form .footer{width:1349px}}\n@media only screen and (min-width: 1024px)and (max-width: 1360px){#form~form .footer{width:1343px}}\n@media only screen and (min-width: 1024px)and (max-width: 1280px){#form~form .footer{width:1263px}}\n@media only screen and (min-width: 1024px)and (max-width: 1152px){#form~form .footer{width:1135px}}\n@media only screen and (min-width: 1024px)and (max-width: 1024px){#form~form .footer{width:1007px}}\n@media only screen and (min-width: 1024px){\n\t.ltr #form~form .scrollable+p{float:left;left:16px}\n\t.ltr #form~form .footer{float:left;left:0;margin-left:-16px}\n\t.ltr #form~form .footer+div{float:left;left:16px}\n\t.ltr #form~form .footer fieldset:first-child{margin-left:16px}\n}\n@media only screen and (min-width: 1024px){\n\t.rtl #form~form .scrollable+p{float:right;right:16px}\n\t.rtl #form~form .footer{float:right;right:0;margin-right:-16px}\n\t.rtl #form~form .footer+div{float:right;right:16px}\n\t.rtl #form~form .footer fieldset:first-child{margin-right:16px}\n}\n@media only screen and (min-width: 1440px){\n\t#content{border-top:#326b9c 3px solid}\n\t.ltr #content{margin:3.2em 0 0 21em;padding:14px 20px 20px 0}\n\t.rtl #content{margin:3.2em 21em 0 0;padding:14px 0 20px 20px}\n\t#content h2{position:fixed;bottom:5px;font-size:20px;padding:5px 20px;z-index:10}\n\t.ltr #content h2{right:20px;margin:0 20px 20px 0}\n\t.rtl #content h2{left:20px;margin:0 0 20px 20px}\n}\ninput[type=submit]{border:thin solid #829bb0;border-radius:3px}\ninput[type=submit]:enabled{cursor:pointer}\ninput[type=submit]:disabled{cursor:not-allowed}\ninput[type=submit]:enabled:hover{background-color:#c5dcf1}\n#menu li a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAFKSURBVHjapJJNK8RRFIefmfmLyEZeFmNjIZEkaSI+A2lKkZ0s7a3EwgdRShQ1+QiI+AQiFgozpPGWae55saCZ/8iC3Drdzrnd5/zOr5Nwd/5zIoCN/eKyOwvq1mlmqIGYoWqoOaIWC0XFUbPTtbnuTARg7ovZTHPrXzqvbF0MVBSoWStA7nIdMUFUCCYEDdVbpfK2NLpGCFofA3z6MNs3/6vubyUhiFY9UDUANg8KvwJMDLdQjgPkCwAwM97O9mGe6bGOSm3nOE92pJo/PJdqFQQ1zJ0oBTtHBVKpJLvHBRJJSH59yp0UwJ26CHrTjZTDtxEciFIJpjJt5E7umcy01yiI5xc3z4hYFZAvviLSxnhPM7eP7wx1NXJ191rZg/50A2fXTzU+NERuMQV+uLp5PlhWawqiBFFUjKCGqPxoZPGltAeQ+O8qfwwAxOXQjeCbPgEAAAAASUVORK5CYII=\") no-repeat scroll bottom;height:12px;width:0;display:block;overflow:hidden;text-decoration:none}\n.ltr #menu li a[href*=\"&select=\"]{background-position:right;clear:left;float:left;margin:0 8px 0 0;padding:1px 0 0 20px}\n.rtl #menu li a[href*=\"&select=\"]{background-position:left;clear:right;float:right;margin:0 0 0 8px;padding:1px 20px 0 0}\ntable thead #all-page~a{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKhSURBVDjLpZNZSJRRFMd/937fN58zqWPpjBWamYmtlG0YLW+RVEQPLQ9JVNBCENR7UEhFJPUSZZAR0UsLCEE9VGQLLVCG5kJm2CZajjg2rjPfzHdvD4NTRj31h/NwDvf++Z17zxFaa/5HJkDFkVtn3ITYHh5x04ZifzmlxqdeGzK9XKmt2nbYBHCVqDi+b3EgGAgIIUw0oFP3BFqD1mO5xk047K68txNIGoSHXDuQExAHzl5jan4WtqFwtQ3SjxQkQwoMKfja1syJw/uJu0KkWhiJgZQmxUXTmVe2EkMaaO2CMEEIpBAIIZFSYhkSpf54g7E2bTuNNG96kvcvyuivY5NzmcGnL6la+MTfdOHYjnEGcSdKPDoKQqC1QmkXpSQCyB68S3GkAe/8CvyFpfz4VELb/ZrTKQOtoTfSTV8oQlwlUNplINaD4+ZRqB4xL6+DzOIVhDve4REOGZmTSc+e5h9n8L3Hh9UZ/VXQAQrMZ6yb1U7WjLXEvl3H4xN8aWwjMqy1dPoXyDF8rUEaHqRhJ8NMo8DTSEXJW7KK1hHtvoSw+rHSM/CqPi5+WDK89GBtu/yd4HcFBx6wJf8V/pkbiXZVI604zsB0OuveYJQdpcvJcQEkgFYKAYQ+t9LZ+hLZWk355BaCc9fjfK/B8GhiAwV0Pa7nWHMpMrsk9ZVmctaSE3b+5BF6Gm4S0IoEeXxrPsfEoIdoOJ++122I8stUbp4COClSCZDplRGViDLF5xBqqmHOyr3Ync9ov/2cxnth3j9sxL/mBLnBbHJ9cSzpYFtCpwgm2PLGnpMPl4/E9fxV0ZDfab1D4YJVRHr76Kh/r+/4Dg33VLW40AKAbYHX5CqA+HOdt66eNLpoRq65bHYh2oq9GA317tpwqunjv9b5J0pAFDVe4XHbAAAAAElFTkSuQmCC\") no-repeat scroll bottom;height:16px;width:0;display:inline-block;overflow:hidden;text-decoration:none;margin:0 0 -4px 0}\n.ltr table thead #all-page~a{background-position:right;padding:0 0 0 18px}\n.rtl table thead #all-page~a{background-position:left;padding:0 18px 0 0}\n#table thead tr td a.edit-all,#fieldset-history a.edit-all{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKhSURBVDjLpZNZSJRRFMd/937fN58zqWPpjBWamYmtlG0YLW+RVEQPLQ9JVNBCENR7UEhFJPUSZZAR0UsLCEE9VGQLLVCG5kJm2CZajjg2rjPfzHdvD4NTRj31h/NwDvf++Z17zxFaa/5HJkDFkVtn3ITYHh5x04ZifzmlxqdeGzK9XKmt2nbYBHCVqDi+b3EgGAgIIUw0oFP3BFqD1mO5xk047K68txNIGoSHXDuQExAHzl5jan4WtqFwtQ3SjxQkQwoMKfja1syJw/uJu0KkWhiJgZQmxUXTmVe2EkMaaO2CMEEIpBAIIZFSYhkSpf54g7E2bTuNNG96kvcvyuivY5NzmcGnL6la+MTfdOHYjnEGcSdKPDoKQqC1QmkXpSQCyB68S3GkAe/8CvyFpfz4VELb/ZrTKQOtoTfSTV8oQlwlUNplINaD4+ZRqB4xL6+DzOIVhDve4REOGZmTSc+e5h9n8L3Hh9UZ/VXQAQrMZ6yb1U7WjLXEvl3H4xN8aWwjMqy1dPoXyDF8rUEaHqRhJ8NMo8DTSEXJW7KK1hHtvoSw+rHSM/CqPi5+WDK89GBtu/yd4HcFBx6wJf8V/pkbiXZVI604zsB0OuveYJQdpcvJcQEkgFYKAYQ+t9LZ+hLZWk355BaCc9fjfK/B8GhiAwV0Pa7nWHMpMrsk9ZVmctaSE3b+5BF6Gm4S0IoEeXxrPsfEoIdoOJ++122I8stUbp4COClSCZDplRGViDLF5xBqqmHOyr3Ync9ov/2cxnth3j9sxL/mBLnBbHJ9cSzpYFtCpwgm2PLGnpMPl4/E9fxV0ZDfab1D4YJVRHr76Kh/r+/4Dg33VLW40AKAbYHX5CqA+HOdt66eNLpoRq65bHYh2oq9GA317tpwqunjv9b5J0pAFDVe4XHbAAAAAElFTkSuQmCC\") no-repeat scroll bottom;height:16px;width:0;display:inline-block;overflow:hidden;text-decoration:none;margin:0 0 -4px 0}\n.ltr #table thead tr td a.edit-all,.ltr #fieldset-history a.edit-all{background-position:right;padding:0 0 0 18px}\n.rtl #table thead tr td a.edit-all,.rtl #fieldset-history a.edit-all{background-position:left;padding:0 18px 0 0}\ntable a[href*=\"&edit=\"][href*=\"&where\"],#fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAFOSURBVHjapNIxSAIBGAVg19bCoEVcchJEsMlFjoZoSKElB8NosCJpCNxaahKhjCMw0C1LjSTIBgWDtOjOE65CIjktrguLsAY7uVOS1yYEegc2vO3/+OHxNAA0g0T14DVjGuIS9o8C6ehQwRncR0zPTwcTY6qwHHPgMboCiachCwwKewRym+ak2jeIpSPI/DVaQhEtoQiJy4IO2juKSP7MQ36JoZpchchGIbJRSFwWDDkrKaIf8QzN8hK+2TXcRpyoHq+D3rWjZzl/UMUN8WES7a9t1FIulHes6Nlq2m9Ao3ahirowtKjXp/0G8MwpqLhHFXUh6dWhwVNov93hfMOC/L4ZlSsv2PA0brYs6DsA0qtDS2BQTyzgPWRDzqNFwj2KlM8IxeU4iWGUwi402UPU2TguA1OKqAvnbCOYJ7QIL48j5TMiE7Ce/Hur/fI7AMEYQUPA30tTAAAAAElFTkSuQmCC\") no-repeat scroll right bottom;display:inline-block;overflow:hidden}\n.ltr table a[href*=\"&edit=\"][href*=\"&where\"]{background-position:right;padding:0 20px 0 8px}\n.rtl table a[href*=\"&edit=\"][href*=\"&where\"]{background-position:left;padding:0 8px 0 20px}\n.ltr table input[type=checkbox]~a[href*=\"&edit=\"][href*=\"&where\"],.ltr #fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){height:14px;width:0;text-decoration:none;padding:0 0 0 16px}\n.rtl table input[type=checkbox]~a[href*=\"&edit=\"][href*=\"&where\"],.rtl #fieldset-history a[href*=\"&sql=&history\"]:not([href*=\"&sql=&history=all\"]){background-position:left;height:14px;width:0;text-decoration:none;padding:0 16px 0 0}\n#menu #dbs span{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu #dbs span{padding-left:22px}\n.rtl #menu #dbs span{background-position:right;padding:0 20px 0 0}\n#menu p a[href$=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAGxSURBVHjapJO9a1VBEMV/73JBVFAMSZ5apjeghaCFYvAjARVBm6CIsbCx8H+wsLcQbAQRxCAIIiha+AEWloGANoKIhSYxIAqRvLs7cyxm38uTvFRZWHbZ3TPnzMzZliQ2M+pbD7/JTKTsNFl0ktNpnNUkmuS4C3NwldWFufByVruLiQO7Atw4q42TTJiJbAGyPlA/+PmHZapsIuVga3KA4iG4gtGdMmMvCSmCVCmXAFmcPTzEhaPDhVlcPjnKzFQbl3CJK5NtJOGlbO5QJxNNds4cGuLxu2WyiX1j2xgf2869F4uYi2und3Pn6Q+2bql6YAglVcpOk+I08hNzn1cKQ0iOx+s74IKqk0R2MfvmJ9MTI1w6MYoVGi95xl4DA9QpO1aq/eDVEubi6lR7TZE2ViApFLjg4vERrPR6/stKD3RkfMeGJnInfGAm7r9cYmYymO8+W+D9/B+un9uzDnTj/F4Abj/5jiRa0zc/6tTB4ZKGsP7el34f27+TxV+JT1///hfs0esFatea0waBAd7O/R6YggS1eViyWzAz9XyvPv93Xdl1oBT3rc3+xopNjn8DAEzJiOP473VxAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href$=\"&sql=\"]{padding-left:22px}\n.rtl #menu p a[href$=\"&sql=\"]{background-position:right;padding-right:24px}\n#menu p a[href$=\"&import=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAJ9SURBVHjapNPPT9NwGAZwEg+cvMrB/8CL8eC/4NEYFHGAooboRb0QvMlRCPsRyZQdwJA5BLvgBqVtvtCVlZWiLpGwLOkC2WjaEr6wLVBDOzIGPN7EZRAPPsl7ePImn9vTBKDpf66uSJLULElSmyiKsfn5eY0QUiOEVAVB+MlxHMOy7K2ZmZlL5wKSJF1LJBKZTCaD3d1dHBwc4OTkBMfHx9jb24NhGFAUBfF4XInFYlcbAFEUk6Zp4vT0FBelVqthbW0N0Wg0fB5QrFar/wRKpRIYhik2AISQ4uHhISilsG0blUoFtVoNR0dHsG0buq5jeXkZlFJMTk42AoIgFCuVCsrlMnRdRy6Xg6ZpyGazUFUVi4uLWFpawvb2NiYmJs4HXNfF/v4+KKWwLAuUUhiGgdXVVSiKAkVRYFkWwuFwI8BxXNFxHJRKJZimic3NTWxtbUHXdaTTaSSTSciyDNM0MT4+3giwLFt0HAc7OzsoFArY2NiAYRjI5/NQVRULCwtIJBIwTRNjY2P1wDOhCz1cJ56yHjyOP8Cjr/ehaRoKhQLW19eRSqXA8zwIITAMA6FQqB7o4TpbnnPdeP/djw8/AuiK3kM2m0U+n0cul4Msy2BZFjzPQ9d1DA8PnwE9cx0tT2c9v/ql13gr9+OdOoSOL611QCqVQjqdBqUUKysr8Pl8Z8CTWU/5jdSH4DcfeoWX8Ey1ov3zHbiuC9d14TgObNuGZVkQRRFer5cODAzc/AN0x9rn+sgr9PIv8HCqnUQikY9tn24jEolgenoaDMMgFAohEAhQr9c7NDg4eKVhTJ3MXeKZao39/RgdHb08MjJyIxgMXvf7/c0Xzfn3ACuyH7V6hJHQAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href$=\"&import=\"]{padding-left:22px}\n.rtl #menu p a[href$=\"&import=\"]{background-position:right;padding-right:24px}\n#menu p a[href*=\"&dump=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAKMSURBVHjajNPPT9NwGAbw3Th59e7Vi/HgP+HBGCLiDyLGqFzARAnGiyReANkPJVN2GErm5mQLU6xdLXRlZcumLhGyLOsy0vFNW0KhkFHSdjgGPJ4Ul0Himzy35/ncXgcAx//mPtOFu/RN3KGu4/ana7gVu9pc4Hm+jef5Do7jPs7OzoosyzZYlq0zDPOTpunI2y/+zh66G6++u/H6hwdd0StN47OJRCKfz+exsbEB0zRxcHCA/f19VKtViJUieqhuDPKPMSQM4mVmFDem2o8AjuOSiqLg8PAQx13f13t4yg/A+82FfqYP1z+0o/P95SZAr9frJwIvss8xwD5Af7wXD6d6fwFwdLy7dASwLKvv7u5C0zQYhoFarYZGo4G9vT0YhgFCCJ58foQh7hnC4bD+Z/cXYBhGr9Vq2NraAiEEpVIJoiiiUCggk8lgfn4eCwsLWFtbQygUOh6wbRvb29vQNA2qqkLTNMiyjMXFRaTTaaTTaaiqikAg0ArQNK1bloXNzU0oioKVlRWsrq6CEIJcLodkMglBEKAoCiYnJ1sBiqJ0y7Kwvr6OSqWC5eVlyLIMSZKQyWQwNzeHRCIBRVEwMTHRCszMzOimaUJVVZTLZYiiiEqlgnK5jFQqhXg8DpZlIcsyfD5fKxCLxfSdnR0QQlAsFlEoFCBJEkqlEgRBAEVRiMfjIIRgbGysFYhGozohBKZpQpKkJiCVSiGXy0HTNGSzWbhcrlYgEolcDIfD1tLSEqrVKmzbhm3bsCwLhmFAVVVwHAen06kNDw9faAEAOEKh0JlgMPgmEAgYwWAQ09PTiEQi8Pl88Hg8mtPpHB0ZGTn97+bE1/X7/afGx8fPe73ec263u+2k3u8BANRmJnJM+MxYAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #menu p a[href*=\"&dump=\"]{padding-left:22px}\n.rtl #menu p a[href*=\"&dump=\"]{background-position:right;padding-right:24px}\np a[href$=\"&database=\"]:not([href*=\"&db=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&database=\"]:not([href*=\"&db=\"]){padding-left:22px}\n.rtl p a[href$=\"&database=\"]:not([href*=\"&db=\"]){background-position:right;padding-right:22px}\np a[href$=\"&privileges=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK/SURBVDjLjdJZSNMBHAfw1UMPhfTUQ5bgkfWQSodmYplroiAkXkvXcnOVipqsWhLKXEvnUEHUOecU72tec8vEVgQamUfeUzzThcc2QUqd+09b+u0pMxTz4fv04/d5+PIlASAdFG6wJWsk3351ofoMZstszKVs22I/V9tjf+4HPrN9z1I0lTZbizWnsTsFsXbZhwKKmadEi03O0KoiQHRnQit3x6LMCqP5dj8OBUiCT2bqhlRY/SyBeagchk4JFgZb0ZZyWXMoIND3buRY1bPtteFGbI03wTiqhK5dhGSGp3xfIJJsz8pj3V4VhZEhCaeYo0Mc+0QvYn/q5BzMv34FXXMSOqSP4RRxsdUl3uHEPwDT/Rwlj+W1lU0nY3dKstjILRAgQ8yFMtcf4y001CjC4ci7UHaJc/74DpAVcqWjMNofTfyHGKvhoppDhSiMAmmUF0qHuGh5Q8VyDxtmQw/mP9xHRhUNbtEukh1AHGLXMN0m21OYLJEMueoelj6GwbxSiZVRPpa7eJioCMBQmsf/C0tPCUanwg+b3+uwoeVhQ1+IlWEeiDk+pqSef4GjV3MSxAlxewpzoD5HRYkP1mfSQXyLgWmOA0LDBDFFRT/fzUQCQDriXvsokNNvaNcDwno5kkpkiBeVobZtAL3VUVDLQw1rkwwQ034wzdBhnKCin+9kqgi1ppFsfKVUKrvF2Dy+BcEYEPEFYLQDwvoWfCoLBzFXAOPXIBCT3ujLdl0fTHHRqwXX9DKGdRAAEkktcP7V15gLjkIHpgpgKrdBl22jqy4GG9pyrKmvgxjzwYD4Bgrodg9UQZYW7Qwri50haXJuaRtTn4LG60bke4D1FmAogS4FG5tLQhgn76A7xwO9wpvYb62kycoot9bkwERXapXS+UkvyDw1yLwRpKW+RHdRAN4Jvc1FcV4Ns6U0+n7Ab/dSu26WPRQHAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&privileges=\"]{padding-left:22px}\n.rtl p a[href$=\"&privileges=\"]{background-position:right;padding-right:22px}\n#breadcrumb a[href$=\"&privileges=\"]{background-image:none;padding-left:0}\np a[href$=\"&user=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK5SURBVDjLjZBbSNNxHMVXDz3UQ0892AVSs4Q0shQRA5uzCFGL5Rxqc1u5mZpNnWNN533eaDr976blZeFllc7mMLMl6IOGqdOpS4vAPaRbb6FiQjpPm5QahvmFw5cfP87nezgkAKS9JI4+zp5Wey3Ot57AnMZ9rYnn0RAV6HHoz/+eZl74SYq12d2x0OaGnapL9azeF6CBeYxY6PSHrZeDH8OVsOmCsaA9BYva8/u+AKroo5V2cy8Wh1RYMz/D8nsV5id60F/sZ90XgBoew51pydxYmuyAY7YTKxY97AMEihKu6v4J4JK92Ep26CLBIEPFoqwl033HCGHqT7uOj69dhbAbcjFY+wAXOOd7AgQ+R/4CMIPPUJTsMEd1PBk71SjjQV4nQYUiF/lSAbo+tqCkvwi+eec0F/lnD28BZPRLg0+Sb6Gz4B5m2sRo5dNAMCioTQpDk1kM9bgQVaYMlJsy0f6pAen6NAQlB6i2AAq6Z/uXfu2uwrTZZMjGH6HCJEDxaDpyRlMg+pACtoqFOVXU/wurKI6GYkKEfMN9pKvjwK26ibjSUFAl12B7GrENOHi5RqQQpe0qzIeWBW5dDArb2ei2KGG2GSF7lwK6zBcMoffrTfOB4OeJVL5peeAbUPpSh9xGLQSEBvUjqxAo5hFfcn29a7oaXTMEXCPt40DWl4TAVLdVknt4LY3G614xzDogmQE4I0DCABDTDdC1ADEEROT4ocdSj51jmFK6ACBNSfzXxzrk4L+yg9kLMPUbiNdugKZxIFINRModuPLwNB4b76LMyNo0l71lbSew1oTYOkoyEJs3DK4RYL9xJtADDANwx5WifA6xvCjclnqj0pi4edm1XW8nQEr63JwU1FNEzQ6ktej900dBzptyahpk8SRCsk3wvPHCKs9KLEgQehuchiVX7N+73NXfL+Zkqi9OGtlWAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&user=\"]{padding-left:22px}\n.rtl p a[href$=\"&user=\"]{background-position:right;padding-right:22px}\np a[href$=\"&processlist=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGQSURBVBgZpcG9alRhFIbR5/tRA0Fbbe0tp4tFsHFKLSaNjSIGJlapDIq12BgIxJRaCGIK8QaUNN6BmEJBLNIGCcko55z9bs8WpxlECLNWcnfmkW6uv7l/dXnw9HDii+6AhEuYDJcjF26G3HEzTOLC2fZkf//gwdtnK9t1sDTYOrOwmC8ucBqLJxPbArbrpPU8OTzmtH62ngkPX33xf3n0+qv/z90n771HdRdhvAcjfaBpGobDIVOHx7+wzrHOMReNOZcvncdkhIo7YWeZ3jVm1VJJyUjFKcrUzgnqjFBNRhjvwfUf72jbltFoxFTJkFOhJrDkWBZBJkJ1OWFnmd4NZpUESuAJyImiQpCMUCUjLL2Ae+klTdOwurrKVKqZKiGHDCjxhyRC7dqW8PEOvdvMyvRypgDmTk5O6NqOUN1EuLIJa+eec3R0xMbGBlM5JYKAkhIuEVwiVEmET+v01phVUiIU/iqFIHdCPfj2fXe82a7IDJkwMyRhbcutx5+ROy7DzZELl5AIu/SSuzOPzJx+AwKoFtIrwFHLAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&processlist=\"]{padding-left:22px}\n.rtl p a[href$=\"&processlist=\"]{background-position:right;padding-right:22px}\ntd code.jush-sql+a[href*=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJFSURBVDjLpZPNS1RhFMZ/5733zkzjR/ZBCUpoJdUiBCkll4m0CUKJIGpVSLjyL2gntDFop6shAolWbcSNIW0ircHBUHCloo3VjNY0jjP3831bWA5ai8Bnfc7vPOfhHDHGcBjZAENji7N1cSj7IcdqY2zkKoiC2qSFNsKPYoXpTPbBynj/4j8BlbLL9c4L3OqoZWLmM4/vXdpX9OJtHq0lBXQdBIgxhvtPZmZ7ui+yspZrjwKfWExxtMbh66YLAgj4geZnyd2YzmT7Vsb75/c5UEqwDLgVl55r57hxuYY3c18Y6mtDgO1KSBBETMwV0VpeA2f3ARKOwvUCcgWX9bzH0NhqvC4Okx9zBzNpPdGQ4OHIrJnOZLtWxvs/2AChNnhRiFIKy8j/ZjILiALYLgc4YnO8zsJSIWUv4Pt2CMBU+tteoxtC0YN8wUdEV1eItMHCIdSagru5l0kQaZ4OdqC1wQAWhqQNnudR3PGrANu2aGmE9FJATSxJwinhegHDr1ZRAmGk0ZHGAMYYMJB0dh0ogOVs6VNqcoGtosYv1+9lYikHERvBQsQCozBGCMIQ3w+rDtKjvQMAd4bfL59vFqYzQasjNoM36wi1vzvHgBFNwo4x8nKNreJOFfBHy9nSXGpyoSPSYOGgqZCae8TJ5BkERb68zsDVZygSlD3/b0B6tPf2byempRFO127T095JQ6wJFBTcJk7VhCRjYItUT/mgrgxOvWtrPtLdEG8gYdcT6gDRGjERWsosrS2TKwbMP78rcth3/gX/0SEvLZFG1QAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr td code.jush-sql+a[href*=\"&sql=\"]{padding-left:22px}\n.rtl td code.jush-sql+a[href*=\"&sql=\"]{background-position:right;padding-right:22px}\np a[href$=\"&variables=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIbSURBVDjLjVPPaxNREJ79Qena1EO6u/GQ9CiFouCp5FQQET0KQvBQbA/tqf+BCEXoyauCl7KFHkoOvYimUpToRTyISVtsliImpCwkLUGqxvzY3bfOvO2+bOgljx32vdn5Zr4336wUBAGUy+V7f96/3PVaDnjNKty17DkYbZ1KpVLppu/7n5nbnVDAh7NXK3Bn4/tIaFVV59R8Pm9ns9nV8aOClZhCbwDguu5QIGMMiGn8rGlamCSXy80ggxfMXAAFPPj9qXipkizLHBQtSZJEQsFg7KBgTZroZGEArWc7TSAchXIA4w+sPdQH1xAMDGQgeXD+4aNIQODZjHaRILT9Wpt/Q8wwA3X/rXVVD3glkQD3h7V/vGrA8Bvz0Rf2AK/F7zRQoY8qIAPn+TLczx/xRPF709nzPOFHayeTyfkBg29vrEkj5BkFPdlu4NtHugH4wYUSqNBaziQGE5hXifXgMVfh115RdHr90TUOIkPNBZtutwvVahUURZFlYuA4zmqzsAl/v24BFhQSRXJFDYvAlUoFUqkU+VmMwSLIyKC1W4ypwISRr9PpgG3bkMlkQNf1YRXkL6+thIlN8y9PIDGgygROp9NgGMZgqOIqEIPa0yV4sPeDgwlIne/1etBoNHhV0zTjExn+Cxh041bl3c8rSY0PCzWIgGQRCxpnSlKv1/m+3++HSaKGLV2fmp9OjN122u7JxnHrYNTf+T+76nzVPsi2lQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&variables=\"]{padding-left:22px}\n.rtl p a[href$=\"&variables=\"]{background-position:right;padding-right:22px}\np a[href$=\"&status=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH2SURBVBgZpcE/SJRxHMfx9+/uuT8qlgR6mvTHqyGwKMWpbmhvskFa2spFRJxaGlprKBQcKmhqcWloaQ2ixcFaDhUKLDDJSFHvT+fzfD/ffJC2Go5er+Du/I8wPrs4Vbk+9nC74V3ugIRLmAyXIxduhtxxM0ziWD6ur6xs3Hv1eGIhGrs2Np8rdmVKRdrRVW/YPLAQNWLPNLZrtKsZe4ZDkZtz/+Yg7Zqe+0IqchfujpNycCAEPiwv8y+jIyOYjFSEO2bG5Nw6fzyfOUuqUqnwN7VaDSVGKjIZcufp9BkIDh6QO0ecd9UNtvaa1FoFCrmI4x3i6lABmUhFLkcmQgAXhxyCMzw8zNuP69TVxeWhE0S5LFu7B+zst1j6XEMyUhnJkIzEDJMhGUpEtVrlR7NIudTJTiuwuWckIctgXzfbzYAkUlESx5gZM8++88fcZIlUrXlAPp8jaSXIoZU4xShL4hFJnJCK3IQkntzpA5yUJFKdhRwHsREbJHJSHqBRr+MSqUgSkgMiAM6RcvkcvzZj9ptGd0eeljlRJrC5HeM/1zifXSMVxmcXF0unTk7IDJkwMyRhcUwuH9Hf18PoxdPIYbfWwrZWqPR+Y/fT++Tr6tLt4O604/WDG3f7B/of9Q5d6VldetMI7k67Xk5duDVQvvRCSjp+A5XMMGcdZp9aAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&status=\"]{padding-left:22px}\n.rtl p a[href$=\"&status=\"]{background-position:right;padding-right:22px}\np a[href$=\"&replication=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI3SURBVDjLfZM7aFRBGIW/mXt3swmuaMjGBwqCBlQsRPCB2GknCIpgJSKKkNZGxM7CQrSw0Ngp2vsoLBS0srERUSMiKkFRYkLMO7t778x/LO7VxFdOMWc4//xn5j8wThL/wqnz9w6BrgIrhQNBuSzEQMp/odtnjm7t6m00cC5FQG4OK2rEkHHuyuP+/xpIdDV6GvRfvsWGvr5feuIdn96+4sLpfkxikReA9yl969exZecuEp/gkwreeyqJxwzMFjEwCQM6OmrUOpfAH1kJEU2k7x5sf1Fbunmzc/73sg4QDJ6/HmZUQ4UaiwQ+v/nKsb0QzEid/Ma1e25UnFuQtHPEh3eQwCdVfNJRBlBSpYaAEIyUoBaWdbSHB4hZAn4pztUJ0UAwMjT413gjQ4Og/eTRSMmdl2XErIpMWPMT+ew3zm4bofnsETePGDBUZmBYFsl2V5vgOkM0UpxqFppkc6Bslnx6ivrGY1Qbq1ixehnOuWIsqeCkzucnJ5KKz2KMmkzJPWlnL8s2nQQMJISxJP/I+8EHxDCLxRkUZpA1qfYe58uHMS7dvT8uOJySS4otbO4lipMoTqMwQbfGWd49CWGi1KdQnKVzTUqlNmwPrx1tAKS0kSxg+SgKk8XhMFHux1GYKpsLAylAez7QlExyRBS+l43ljb/MpuebrVWMGRYYKLPxMDfWlc9U61jdSxWwOqgHxTaQIV+w85HYakmZtecNWu2LH68f3IHYh6O+2N9AgHuaYbr9U/oB0sFcUlVzMrwAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&replication=\"]{padding-left:22px}\n.rtl p a[href$=\"&replication=\"]{background-position:right;padding-right:22px}\np a[href*=\"&refresh=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI/SURBVDjLjZPbS9NhHMYH+zNidtCSQrqwQtY5y2QtT2QGrTZf13TkoYFlzsWa/tzcoR3cSc2xYUlGJfzAaIRltY0N12H5I+jaOxG8De+evhtdOP1hu3hv3sPzPO/z4SsBIPnfuvG8cbBlWiEVO5OUItA0VS8oxi9EdhXo+6yV3V3UGHRvVXHNfNv6zRfNuBZVoiFcB/3LdnQ8U+Gk+bhPVKB3qUOuf6/muaQR/qwDkZ9BRFdCmMr5EPz6BN7lMYylLGgNNaKqt3K0SKDnQ7us690t3rNsxeyvaUz+8OJpzo/QNzd8WTtcaQ7WlBmPvxhx1V2Pg7oDziIBimwwf3qAGWESkVwQ7owNujk1ztvk+cg4NnAUTT4FrrjqUKHdF9jxBfXr1rgjaSk4OlMcLrnOrJ7latxbL1V2lgvlbG9MtMTrMw1r1PImtfyn1n5q47TlBLf90n5NmalMtUdKZoyQMkLKlIGLjMyYhFpmlz3nGEVmFJlRZNaf7pIaEndM24XIjCOzjX9mm2S2JsqdkMYIqbB1j5C6yWzVk7YRFTsGFu7l+4nveExIA9aMCcOJh6DIoMigyOh+o4UryRWQOtIjaJtoziM1FD0mpE4uZcTc72gBaUyYKEI6khgqINXO3saR7kM8IZUVCRDS0Ucf+xFbCReQhr97MZ51wpWxYnhpCD3zOrT4lTisr+AJqVx0Fiiyr4/vhP4VyyMFIUWNqRrV96vWKXKckBoIqWzXYcoPDrUslDJoopuEVEpIB0sR+AuErIiZ6OqMKAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&refresh=\"]{padding-left:22px}\n.rtl p a[href*=\"&refresh=\"]{background-position:right;padding-right:22px}\np a[href$=\"&create=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&create=\"]{padding-left:22px}\n.rtl p a[href$=\"&create=\"]{background-position:right;padding-right:22px}\n.rtl #media p a[href$=\"&create=\"]{background-position:right;padding-right:24px}\np a[href*=\"&db=\"][href$=\"&database=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&db=\"][href$=\"&database=\"]{padding-left:20px}\n.rtl p a[href*=\"&db=\"][href$=\"&database=\"]{background-position:right;padding-right:22px}\np a[href*=\"&schema=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&schema=\"]{padding-left:22px}\n.rtl p a[href*=\"&schema=\"]{background-position:right;padding-right:22px}\np a[href$=\"&view=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHTSURBVDjLY/j//z8DJRhMxE8+VwjEE4D4DBD/j5989l/8pLP/4yec+Z8IpJMnn/2fOPH0//i+0+9TJp063b3uxv/uNdf/Ixsw+z+JoHPVNRQDboB4c468hePZeDAIJPYc+4EwYOLZDzADDt76AsaHbmPHMAMiWg7+gxsQN+HML5DgbAI2I7sgvHEfwguxfaf/kRoGoXV7EAbE9JwCC4bU7/nvU7vrv1fNLjD/3tMPWDFYbc1OhAHRXSfAgg5l2/83L7v436J4G9yA1++/oWCYAcEV2xAGRHUcBwsa5235X7f0wn+9nE0oBjx78/X/moMr/5fMTPif1uf/P7HL679veRGSC9qOgjXopK//X7rg7H/tlLUoBizfu/h/4+rE/1uuTP1/4dmu//27s/6H9+v+N8+W7IG4oO0I3ICS+ZgGgGzceHnC/43XJoHFe/ak/u/fkw4y4DvYgIimQ/9gBoA0IxsAwj7Vhv+3XZmDEgubLk0FGQDJEKENB+7hizL7QqX/3buS/rfvSgDz23cmoLogtHZff0jN3q3B1XveBVfu+h9Yvu1/YNmW/wElG//7F63975wX/z+4R+N/764UsM0gGsSHhwExGKi4A4g/gZwNpTtA4gDRWxxGCQ/RXQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&view=\"]{padding-left:22px}\n.rtl p a[href$=\"&view=\"]{background-position:right;padding-right:22px}\np a[href$=\"&procedure=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ1SURBVBgZBcFNiJVVGADg5z3fmTujY5NZBANBIVkZ2J9IKkZFGKRuglq1KaqVtoqoVbSKFi1LoY2QEVSbcqiFWWJqPxL044wUGESQVqJOKerce7/z9jyRmba++tXTy2YmnyphPaYQIJBBNuPWfls8l1/EfxdeOrJnxxAgMtO2148d2ffC+rWlxMqkkwBkQjp7aeT97xf99cfS5ZPzv6w6umfHElQoXdw+qN3KhX90JYIgG30243G6Muo9tOYa999WfdfOLs92x4UHd3163eG3ti8ViIgVmdkNumKiUIOu0AURFIFmdmZgx4ZZt9w6uazOTO+FAklAQQlKhBKhRCgRShfOnL/i5hUjd64Kz2+6XjfRPQkVIJPaEUJGaH1SQu0YZHHqXBq2sdaGHlg9KWoZQ4VMEjWKlBJRQiAb2RUGlBZa66RCFFAh0RBBCIlENiY6QBTRhyypIROo0MZk0hDITFAKWqhdkkGSQt/oG1ChtZSZJCkBSCCEE79+Yv7UnIuXLxiNR8rwnsomFfpGn2SjAUjQkuPzHzp98XMPb9ngplVrHFr42OX5ubpx1943K7Rxaple+2EopBZkBo2MNL3wnie2P6ovvbtntzp48iMb1232+6n9OyuMx72+Z3Zmwn03Fi3pkz5oyWffnjERKzy29lnw4iPvmDuxG/unKoyXWhu3lsNefPNnr0VKAVpy/tK/Fk5/7afTR72yda83DjxjqpuEqxVGV/u/pwfdDS+vG05nZpE0wLXLqn2Lzzn287s237XF3IndBlEd/fEwvB2ZacPOgzvHo3w8Iu5NuRxAkkhpovug1u5Q5SoGfWurDxzf/eW2/wEnITFm/fHryQAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&procedure=\"]{padding-left:22px}\n.rtl p a[href$=\"&procedure=\"]{background-position:right;padding-right:22px}\np a[href$=\"&function=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK9SURBVBgZBcHLi1VlAADw3/edc+fRmOP4YEzERxQYZGaQaQ8qRDCK+gPcGC1rYbjRWtqiTaAULWrRItwVVAaFBUIvhqjAyixIE41JB8fxzsy9c+855ztfv1/IOYPDH1/bg5N3rxnb169b/bpVt62Vpu1iCTeRsIB5fIizJUDbNI/s2rhq39EnNwCAXtVO9qt2cmGQNlc1S8Pkys1lX1zqHcCREqBtmunVIwFcu510QlAGipLRTrRlNCpi1CnYvXncpsmJte//OPtWBEh1vXqipGlZqoJuze0h3QHdAfMrzC0ncPz0Vfu2T7h/fWdDCZDqeu2dI1FvSG+QxBiUKApiQSEoAi1CWjRzecEvV7uzJUCqqunJ8UJ3pdEfZjFmRSSmoIgUsqJALtxYHDr11d+LOFwCNFW1dXp1R3eQNZApUhAzEoWszFGbSZ2kqZrtn7762K0IkKrh1o2To3pVFiJFCCIiAiBkcqYZDqVqmKCEgye+HC+LODLaiaqURBlZRhJAQIzUKVnu9RssQgnNsNowMTEmBlrIhEAU5EwIXLx0xl+XP7fUXzAV+0V3+cbrHHyjhFQN7ygnRpSRIgapDeSsRQj8+udH5vtfe/rxh21ee69zFz4JM79fP7H3lU1r4hNHTq9vqurEnh1bXF/MrtxIbi0lvYqUsxCyny6c9uCOXVJMdt11QAq1vTsfhZfLVFX78ezPF/+xsFJaHmZ1yoZ1UDWtJrWWuv/phFWeue8lcHT/e8789i4+GytTXT/0wlMPjL92aC8ASJk6ZVXD88e7Lsz+4Pzsd44d+MCbZ180VozCoNi48+A9U5MTz80v1a7O9cwtDiz2a3WTFTEa6QQpDX3zxxnbpre52f9Xtzfn+/PfWrw9PBV2Hzq5HkewFeuwDlOYwuTYSKczNtYRRs5ZSTPaPEDok9+eeWf22P/PLlOL9Py8xgAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&function=\"]{padding-left:22px}\n.rtl p a[href$=\"&function=\"]{background-position:right;padding-right:22px}\np a[href$=\"&event=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAITSURBVDjLpZNNSJRBGMd/s7q50ZoWISZSRAgF5VpELFJ0CK9RneokEl1qO3URpFNCXqIO0aFLEF0iiAj6JBB0WYwOoikRJiXUYqbsumv7zvu+M/N02BV30YPgc5h5GPh/zMz/USLCVirCFqt+tZGfb8UUFxEJEBMiNkRMgBgfsT6EGms0YjwINU0Xn6haAmuIHrm0TkEEFFQWQCD3/PJ6B37+N9tFEOeVDxSIOEAhrDGoSAMSehtcwRhcMI8pfgLnIxKUdxeA04jTiPPYtucCLixtQGB9wCBOg4QVUDVYI64EYpBgAwdmZalsuUbZwzldIfHAeWUR8289gbMaPTOK8b+DDUAMVheI7W8pKzuNWA/E1byBWg3S4oteibZ0EO86DzhcMEdx/BkN+3aBlBie1YzMOZY9j6CU489K/tabOxOD9VVMhAuT5D6m2dl9FaUUTkKQEu+/FZny45w5fYL23R0MT79kbGr0djLV1hyp/u/Gk72E+b/kR+5VwBqxmtdfc3QdSmAjlsTeHqwKSR7tBri+FmWjUXURdhy/gphmiplX1MUSxFr7WCgsEVVxzh2+AcDNs4842NIJEKvKgSb37j5iNBJ6BN4XmM1Q+vyUQiFgOpthIpumv+cxQx/6iNU1AGi1mWlMptoG2w80DXR3nqKj9Rgz8+NkJtP8+rF8V212nJOptiHgGtAIFIGHYw+y/f8B3ntD1Kp2NbQAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href$=\"&event=\"]{padding-left:22px}\n.rtl p a[href$=\"&event=\"]{background-position:right;padding-right:22px}\np a[href*=\"&foreign=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVDjLjZLta5JRGMZH/0X0DzhG0Wy1PdVG6aIGtYI+9CVhRSt6gT4Vgavl2vI9LVIWrWL0KZTYpBqpFMUMZ03aMpXVMttLpPX47qPT7eqck2NWzjpwcXjOc67ffZ37nBoANdU0M9RqJkJJ5j///5e5mPvEVAnyb3PGi3z0LgrJZ2R5iUFCFslAVUC5OfdVj/z3weXqoCM0yMFt4p5XA7DI1CzMXkLu200i5y+IVYKlIo/pfjGDrAqgkamZaU7BIIWEE6kpLTLTbVjMvcCUcSNWTyC8JwnUKxAG6kHSvxtxbxM53kP4u2ormtfQHkRGzxLDZSQmmpH5IEM2dBKpwAHExhtQiPXB310L+9WG4N/3bduFiOs8FngrqcYR8z5SvRNJ73bExsTMHFDUwaHa7PutidS8VEyQczqQnZUjPilCxteI7OcrmHnQghHXRZy7dRjHr+2HrHfHYtuFDV0MUP7S8hELUsF2UqkOKX8zhLAGHo2Y16ulvMJyBI98Jrydt8PgOIVDhvVoPL1WV6ocJ5GHkA5KwbtFSAd2Qviixmut+IdN1XRfpmwVht8ZMey/wd6BztkJg/MEBQgUkFyIOUizOPAuEbIf24m5Dx6tmH+s5W7TmHvl9XjiG0D5sE2aKKB05+lXSPilpGF7kAn3wK2qj4/ouf7l/nBn1gla+1Eo7R3MrHzasZIgbJWMC9FRZMPdEObvYUwjjtmNW6+XXy3Z2HtQJ4LefoxVpjP9Zj3w3GmRT5i3zL0xborSM780bVNWelxks4ooSWOXZhVd/wllWOl+7RbUkgAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&foreign=\"]{padding-left:22px}\n.rtl p a[href*=\"&foreign=\"]{background-position:right;padding-right:22px}\ntd a[href*=\"&foreign=\"][href*=\"&name=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAKsSURBVHjahJJZSJRRGIaf/3f+UZomK21UzMxWDSuiTaKgZZQugjLaLiLqQknvjK6im67aCIrMCZEuWqBIaypNSNBpMyqUSKKyXHAc3EdHnfnHf5nThQtGWQc+OB+87/u933uOJITgX6fzSXYJUDDRuhburSn8DSCEmLG8bmeJ1+0URrhVGOFW4XU7hdftLJmO+T852CjG+m4JfbhWCBERXrdTtD3cWTaJk/62wqTtpOxLGMN1SEo8vW/uALBwbw3tt7fQM4pnc2H9jpkERNLuUozBxwgzgKQ4gHT63l0AI0LyvnLaypz0mdEeeabwhNaOMAPjd2MA+Ia0/CTBMQctVS5GlHjmGaHtMwpISgJSlG1CzUTXkxn6WEXi6qMs23mc1I35BMLxyH+xLwMuf0MpIqKiDdQRCK6i42Uly3flovq/ora/xz4nkZgFiyNTGUy9tywRHbeOuRmbCHdfIWI/h+/VA9JzTzDWdR91QKL3e4jQaFBXVXW2ZdrwguQ9FZjBD+gjHkKdZ5HjbuDz3CN9fx5h301kq4EyOxWb6KT42eeVN563aJbpP033v0Dz38EItBCynWew9i4ZB/IJ+1zIioE2nEZ//SeW5FVKx7rXU1wlsIxPLscY9qD1Xkcf8mGNTaL//VMyD51A6y4jyioIB1Lpf9tIYk4KHy6vn7JtAUaMkY921XsRc3SQmIQVtDVnQoKDrqbrzHNYCftTGGr4RlJOCpgd0vTQLYBdUmygzCLaEUtlRZCDBfl8v3+a5tf1RC9aixwaIKuoWhJmALXtCJm5DmYtqwZAjhiRRkONoNi2ItsO86O1D+1LJWlrt2GzraSnqYWsomoJoLF4F8AUGcDSEzAeDT08lahrplXoQv7ys3f+1VIXGzPSsC9dQ+6ZWgmg4dqGP8gAvwYAN7Z8lOPI6HwAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&foreign=\"][href*=\"&name=\"]{padding-left:22px}\n.rtl td a[href*=\"&foreign=\"][href*=\"&name=\"]{background-position:right;padding-right:22px}\np a[href*=\"&trigger=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJlSURBVDjLpZNbaM9hGMc/v8NsTqF2yMhZKIexmpFyRZIiblwouZDauLYoTVEryg2uXIoIOUU5zJkh4e9QDmtJbWxrbUzz/72/9/m6+P3HLslbT9/3ufm+n/f7Pm8gif9ZMcDxe717JLZ62UQzwxukZnhveBOptyHl8anwZk/3b5pZEwOYtGNDzejSfzm58dTH+b8JvFkpwMizdSCBT8E8OJftkzy4BPIOnONHQzPO+eIhBoM5CCrLwNKslBZM8uDykCbwtgMAl/o/GXhvBYMA2rtAlpGYZSR+UIGKCgCSggGSOHy1Q/0DTifufZUknbr/RZJ0+mHWn3mU9edbMu3qG9DmQ08lKSNw3jCJOIKzjzqJopBzLZ3EEVx40smDr/u4e96QGUXPGpkzYQSJywjCwSsIiKOADUvKiUNYX1tOUQhra8oJg4hZ02cQhhGrqyuyp03tTwbOGzKIQ7j8rIsn3Qd4fEVIIn6+kzAMaH35Fn37wbZD68gnCUl+EbAkI3CpIYmiCNZUlwEwbfIUgiBg1cIyJqbzGFPiWbl8GXUb66mqnkrJ2IvUbq88GEI2dQBRGHDjZTcAbZ8+ERDQnOvm+fszVM1egA89C8avwAeO2nlLAeqRxK7j79TzPa/mXJck6darTG8XdM3uhbry+piGrou5I1pcP17h7wwk5k4aRUfPANMrhtP2pZ8J44bx7nMfff29vGl/SNP1LQA0XdtCa2cO4GdhkPRg78kPVYm3kS71uNTjU8N5I/UpxSWracndZOn8ZVx6dZRhQcz9F3cAjgR/+51rt1c2AXXAaOA7cLTlcHvDL6y6kIpO9lqsAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&trigger=\"]{padding-left:22px}\n.rtl p a[href*=\"&trigger=\"]{background-position:right;padding-right:22px}\n#content p a[href*=\"&sql=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAJ+SURBVHjapJPLS1RRHMc/M86M5GtoSMcKMq2ITI0kgh5USJmGhYsIogh1IUgrIfoLwtq1iDBQS3qAtJLoCRGFYGTgq0WWpBiYjk6ao6Mz995zfi3O9UG468DhHA6/7+P3OB4R4X+Wr+nJT1FKsB2N5QhJW5O0NAlbsGyN1oLSoMU9taC0oN03n9ZCWelGA7Y0CUtjK0EpwVEGpNaA1oJffIzidZRgO0bNcgzIBIIWo6g17jZ3EUHEkHhtxyVwhHOHQ5w/vslVFq6U51BbGUaLoEWoqQgjImi3bFqDz1aC5WjOHgrx9H0URwnFBWmUFKTT9jKC0kJ9VS53OyfYkOqlurCPxd7HpGQUc6LoAz7b0Vi2oTT5CX3DcUoK0lcsA4iAnZzFP9FFbvFlgvn7+TO6G1/SFhwtdLyb5mJZNgD3X0WMRTdPgJzMJRZGWgjtOsLMj68EPBaZWbnGgXKr/fDNFEoLdZXhVUcCyp7n1OZ2gttPk5zoIJDmYax/iNgieJO2Cbp0Mhvl9npwJL5iO5S2ROzbTYI7zpD41YLHP4s/I5N0maFx8KqZA6WE9tdT1FYY5XvPJukajJEVWKAs1EZwZzWJ8Wa8fgcrlk+0u59Pec2ITBuC5X63PJ9EuXkHA3EO+FvJ2VuFNdlKSkBIzOUR7e6jJ7+FqZipkVfL6qQplyjdO0+p5wGW2sLElztoEsRntvK7Z4jPLng5RZ/SZiRXCqaEmlAjhQ1tfOu4xveublK37WMuMs4juc1YbwTtTqKI4FnvN96oL7Kv1zX48Cr633YyNjq8EMwOHS1vGhj4N3ZdggvHQkulBWHfwT35iD/ZvTQ1XVt1a3Bkve/8dwDixMULwcWPDAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr #content p a[href*=\"&sql=\"]{background-position:left;padding-left:22px;margin-left:10px}\n.rtl #content p a[href*=\"&sql=\"]{background-position:right;padding-right:22px;margin-right:10px}\nh2~p a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr h2~p a[href*=\"&select=\"]{padding-left:22px}\n.rtl h2~p a[href*=\"&select=\"]{background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&table=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&table=\"]{padding-left:22px}\n.rtl #content h2~p a[href*=\"&table=\"]{background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){padding-left:22px}\n.rtl #content h2~p a[href*=\"&create=\"]:not([href$=\"&create=\"]){background-position:right;padding-right:22px}\n#content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJeSURBVDjLpZNLSNRRFIe/O81o+WjISM0epuarEHuDqIFEDyoqEFtFD4gWQVDQoo0QhFARbowKNNpKi0DJRYVGqRmY5oPUBs3S1GnMcdR0/v8Z554WM44RGURne7nf+X6cc5SI8D9lBTh79/0VIBkoAHaCCIJCCxaLwqJAa40O4LFZpT9z/cpdaOFqcZZCRDhT0V4p/1i3HveIiAQNgEKAh83usNrfgp3Pj6NvyGOGI6AlceExPT4SAKX+/PnjNxMAr+GPCANEJGqhq8NlLtk53myk0FlN/0QO19a+Ul33Lp4OArRYF9SWqrmxWqb7WliRcwp7ynY8g5n0Pa+6vQBQACXX6zG0RgvU3djP4OhUMI7nBXZ6iEvPxz3QS4TyEbsykZjVG+0hgAbgu9fPvm1J1LWNhDtH+1qxSRf21IOYY9VERCm+dPQxPatQvolcS8gAgBkjgF+EOXM+OImpZmw/GrCnHcYYrUTZJrHFxBItbh4N5bH70hOHBUCFDEzTj9cfIGD4cfbWEjX7GvvmYxgj97HY/PimN+Fq7GTNgTKchh2AoMEvUxeBnKgOPF+bid96BJ+zimURgjmdzHhTO6qonOUJ2YjMLwL0vA4ThluqKT0UwBdIYqy7Ao3BrHsdrre9qKJyVHQCodgSBgS0/gzQ/eAExWntbCm4QORwE46aZjqeuXG87GTD8TukZmSRkmQPmcrk4iYGdE1JaUOGiOTlulyrfB+ekpJbyNT4BANtDupjLzNe9g6R1lBIPQOWXgD1+zmf3Bvn3ZGaYN2TnYLYzDde1/i5oze7Pi21YD8BVSdMJ0n4cQkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr #content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){padding-left:22px}\n.rtl #content h2~p a[href*=\"&view=\"]:not([href$=\"&view=\"]){background-position:right;padding-right:22px}\np a[href*=\"&edit=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weRgoI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEsNBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKBgIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJxmAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxhB1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvrkn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&edit=\"]{padding-left:22px}\n.rtl p a[href*=\"&edit=\"]{background-position:right;padding-right:22px}\np a[href*=\"&indexes=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr p a[href*=\"&indexes=\"]{padding-left:22px}\n.rtl p a[href*=\"&indexes=\"]{background-position:right;padding-right:22px}\n.error{background:#efdada url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAIcKAACMCgABCaAAAHkXAABTlgABDrYAADr6AAATiGV4+hEAAAIySURBVHjapNNPSJNxGMDx77t/7zbdu02dUzJKpX+6JOzfUrNgeegghB08RKcuURBBERQRQUF2bpJ0ESGCDkKeU4gOVlB0ik4WhWQ69842bbq97+/pMBOiWYLP5ffwex4+D88PfpqIsJnQJhKJsoVot+2JVs1mbcuxMmdWR1KT7kK5Psd6suHPvQvsbdKDsQbD686PrNdXFqg7Wmw2Ks1WT3wYd+wGNb5Uf+RQvnnDQKgyM+ltO67hdOIIb8G3v0OrcGXHNgTUdy/3G96FWv3wIGr6Kmouid5xn7Aj3Rppz/b/F6gOzI94us4hBRNz6AXm4BiyPIW/5yxBzEf/BLYeyyUD22t0T9s1ih96EQERsD5exnPwEuGdNUZtLJUsC0Q7C9HqitQFd/sVpDANNqAElCC2QhZfo3depKqYOh9sMaN/AYa+8Na/74DmrG/H/noPEFx17tWqYE/dxb0thhHf4/Qu5Z79AUSP5BNBPdOgdw0huVfIj/cABE6EqOw2QADbwp55gL83STg9G/c3fEusAVW++TE93gd2BpUeLS0OZB6nWHyZBUqrqJk34MwQ6EsQyKSfADivn4ncjjS6e3wnh1GZUeT789WJgr5bx7tLR3NpaCKAIOlxvD3DyMTTikXHvKbN3Wm0QqdvOV07ToFaLk0DcGilU7F6p9beA4eP/PhDvgwMFLTPN1umQprZJJYgRQFL8TuXFUEt2aifCsnbKFuhLIUohSjBNEKftM1+518DAEJB6cbyeH5EAAAAAElFTkSuQmCC\") no-repeat scroll .8em center;padding-left:40px}\n.ltr .error{padding-left:40px}\n.rtl .error{background-position:99%;padding-right:40px}\n.ltr #menu .error{padding-left:40px}\n.rtl #menu .error{background-position:95%;padding-right:40px}\n.message{background:#efe url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGrSURBVDjLvZPZLkNhFIV75zjvYm7VGFNCqoZUJ+roKUUpjRuqp61Wq0NKDMelGGqOxBSUIBKXWtWGZxAvobr8lWjChRgSF//dv9be+9trCwAI/vIE/26gXmviW5bqnb8yUK028qZjPfoPWEj4Ku5HBspgAz941IXZeze8N1bottSo8BTZviVWrEh546EO03EXpuJOdG63otJbjBKHkEp/Ml6yNYYzpuezWL4s5VMtT8acCMQcb5XL3eJE8VgBlR7BeMGW9Z4yT9y1CeyucuhdTGDxfftaBO7G4L+zg91UocxVmCiy51NpiP3n2treUPujL8xhOjYOzZYsQWANyRYlU4Y9Br6oHd5bDh0bCpSOixJiWx71YY09J5pM/WEbzFcDmHvwwBu2wnikg+lEj4mwBe5bC5h1OUqcwpdC60dxegRmR06TyjCF9G9z+qM2uCJmuMJmaNZaUrCSIi6X+jJIBBYtW5Cge7cd7sgoHDfDaAvKQGAlRZYc6ltJlMxX03UzlaRlBdQrzSCwksLRbOpHUSb7pcsnxCCwngvM2Rm/ugUCi84fycr4l2t8Bb6iqTxSCgNIAAAAAElFTkSuQmCC\") no-repeat scroll .8em center}\n.ltr .message{padding-left:40px}\n.rtl .message{background-position:99%;padding-right:40px}\n.ltr #menu .message{padding-left:40px}\n.rtl #menu .message{background-position:95%;padding-right:40px}\ntd a[href*=\"&user=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKjSURBVDjLjZJbSNNhGMZXF912FZEVpOaVFFSCmhe2/iNqhYVsmo1tDXUiJjNnrC0RMxVFxTm3ecJDeSrblorpSFAJzxptOrfFzJnuUJDplG2ZrqchtaSGePFcffx+vN/zviQApL2STQvgzFaFOCytx7HQFLjVyAuqjwkPOvTnfU+YRz1BmJsDPda2Y9idmrRg8b4E9ewjEqsqDDZ1MlzjZbApo2BtPwldVfDqvgRy2uEyu0YNx4gcW5qn2BiVw/K+F4NPzpn3JYilxnH1LZk/17UKeAwqOHWdsA9JkMe6pPQr4JJDODLOZYeESYb8LrGVGn9mWiJI+2FX8rHc9RiWrmQYW2/D1FUATf0VaGWhLB/MjjpNyDgUj5hBxu40lPNQWZOPF01M2AcEWJvpATasWJ1RYLT06hefoDz+/HBt6i2ochOhb8tGK58OCZNAdQoFr8dY+DqXg83lbu8XSuCaVWF7cRiahuRtn0AaH/zSNNj+X2Hqkkis6LLhcQ3D9fEeVibTYWhOxGQdEyZZzN6FWfoz8W1WCI97DM55NtxLDKzrRZiroyCjPA62uht/BQcvVAilwnRfYYZnDNinBL9hFtyf7sChewS9nACn8KLtATc3d6ExgbEDH4h6nhTLf7cx9Bko7FBCLBNC15flHfst3OZEfF9iYs07iUlGuIylEad2b44USK2m03k9zm6DB/l6QNTSjrleEbR9Ylgm6HCaGVjRPIRWTHEZyyKC/r0V0kx+2Pa0ohL8V3aw1UBHMQGsL8JYS8OAKAAj1dcwUEDGvJQKf8dGMldE2xQF95GQMw7uGyCPexabY1JsTlRgwgu2cUNQnCXYKcyv4ENzSmRvXqwonN7SGZYxBVr0URSyQ9FfdB0NRUmIuFm1XJmVtFOYP8EvH33H/9EvkWcAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&user=\"]{padding-left:22px}\n.rtl td a[href*=\"&user=\"]{background-position:right;padding-right:22px}\ntd a[href*=\"&procedure=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAK5SURBVBgZBcFPaJZ1HADwz+95n3e6uTnREGdljRKtGCYiHTLxkIUmQeeCOnXzVnQIoi5BQV08TMo6GIiHiKI6ZEWgszzEmtpqSDP7s9ycm9NN977vnuf37fNJEWH/G6df6l676vki2YXVSCAhEpFVOU8uzMX36daNV88MH+oApIhw8O2zZz45vOuhokjrgoYAIALC7NKKEz8vmP67fee3XyfWjwwfakMJRSNt6yob68avaRQpkYhMHVlVheWV2r6tffYPjNi4eLyncWCodf7jI1Jr6sUSUkq9EdHoajQkIZALZOpEIWlPf27r4jndQy/oH9xp4c9tJk4de7eEIEGBlAgJREqKRP/yKXVcsH7r4+Ynf9eVOvrWbtK7YUt/CRBB2SBJIiW5Doqkd3nEllWj+gef1r56UldP8tfYhJt3UhTtuR0FRBAoU6FISYFGkaxePG1LfKv/gYNa/30oNW9o9vbpzvOOXj+wsvvwZ5cKCGSkRJGSIiWtK19af/uU/gef1ZoaVjRXdG7db+bMed173zJVD2QoIFdEkBG4fflrPYs/2vjIMzrTxzS6QvvWfWZGRs3tGZY2bFdnoICcQ0QQTI+e1L3wk5W82dWLR2Qtt+fvNnNuwuLeo1LvgNXNpK4CFFBn6iAysxc/8vCel636Z8SlL84a+2be+Hdjlh57R9WzWaDZKFSdCpSQq5AjvPlLx9DkrM74VwZ3POHm7JzJsUk/7PvU9Sv3yipwYlPTSjuDEqqqVtcMrG0a/+Oa9z8Ytnv7oOXNOyw9edyjffeIIIIL1yqRw0qrAiVU7ZyrnKNTS+te/9flFCYlkJdIS5UcRJEUOSnLlKs6V1DCSqueWdPVuOu1oc6aiCgEGdDfXYIIuptJSnKzkRbrKk9BCSnFe0+9cvq5lNLOED0AgkAIIEAr5zxaFk7A/5IUWNTkV3l/AAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&procedure=\"]{padding:0 6px 0 22px}\n.rtl td a[href*=\"&procedure=\"]{background-position:right;padding:0 22px 0 6px}\ntd a[href*=\"&function=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMCSURBVDjLTdBNaFxVGMbx/zn33plOZjIT8zmGOnFM1VoNJYFWYi2CtVSMdKUbK+LKhSAGXYhd2m6FQkEXLbiwETcWiq3WpiiSBLRqTa122pEmMZPmw8lkMt93zrnnXhdJbB54l++Ph0cEQQDAm1/l9gOnHmnbMVzXPnXto32fhueXgAqwChigCBSAz4ErNpvxPe/pvcnY8PvPdbE9NeUn6spPFF2zU2moNA1zq1W+vVs7DIxuB3riIQFAbt3gCIEtwLIh7EhSYYklJY4Fgzsj9Cai7WeuLX4stwCjdTxqg+dDRQlKGtabUHI3rtCAf6sGgA/H5hlOR3mq0+mytwHtrSFJrQk11yClwAYsC6QFFgJLgA8IU+anmSLX50uL9wGlehIRi1LDo94MkDLAkiCNwJJgEbCj/AN/j3/G250D1CZ/5BWdHPsf8JTq64k7lNwADyAAywhksLF9vPI17WvXiAy8TiI9yPrs4zSunH1jW4NmXzIRJrNiEBIkG88SaKlcJuX8SezRA6zdzRASitZ4klhHKmEDvHjicsS2ZCjsSJQxSAIgIADCtSnS9i8k0kdoLn1JqEXwz/RttKsKbqP6jATwmqorLEBujkQAAohUJtglrpLofwl38QzCKeLEWtHVRV+Xl17Y9875rNys32LjY0uwpAAhMfOXSJmrJHYdxb33KdLRqPLDrEzc4PTC4dtD741PA8iDo2OdnlIn9u9OsVwOmFsxlLKXSOqf6X5yBLV8FisU0Cz3kZ/8ndzAR2Sq3TNb29lGqUPAyG+ZWYoNG2fhG14dyOP5vSzdPM0D3SHctYfITd1CHvqEhZyLUSq/BUij9dDLB56IfHF8hJOvPcYeLrLn2bcI5ybJXphi+rs17nx/g4n2D4i09VKp1jFaF+430Hp2ebXEufEMbbEI2Zk86q+LpPcepJQvcO/mDM8fv8CDoX7CNuTXKhitF7YAMXjsVCcwCvQBHf25k0eG0l1i3+60mFPR4HxuSLhOB/FohLZ4C3/cyWWBY9fPvfsrwH+7HFmMUqkOrwAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&function=\"]{padding:0 6px 0 22px}\n.rtl td a[href*=\"&function=\"]{background-position:right;padding:0 22px 0 6px}\n#fieldset-history input{vertical-align:unset}\n#fieldset-history a[href*=\"&history=all\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVBgZpcHda81xHMDx9+d3fudYzuYw2RaZ5yTWolEiuZpCSjGJFEktUUr8A6ZxQZGHmDtqdrGUXHgoeZqSp1F2bLFWjtkOB8PZzvmd7+djv5XaBRfL6yVmxv+QjQeu7l25uuZYJmtxM0AVU8Wpw9RQU8w51AxzDqfKhFjwq6Mjdbj1RN0Zv2ZFzaloUdwrL2Is4r+y7hRwxs8G5mUzPxmrwcA8hvnmjIZtcxmr3Y09hHwzJZQvOAwwNZyCYqgaThVXMFzBCD7fJfv8MpHiKvaV3ePV2f07fMwIiSeIGeYJJoao4HmCiIeIQzPXifY+paJqO4lZi/nWPZ/krabjvlNHyANMBAQiBiqgakQMCunbxHJviM9bQeZdBzHJUzKhguLJlQnf1BghAmZ4gImAgAjk++8jP56QmL2GXG8zsfFCz8skA1mQXKbaU3X8ISIgQsgDcun7FL7cJjFnLUMfLyLRr0SLS4hbhiup5Szd19rpFYKAESKICCERoS95neyHmyTmbmAodQ4vGpAfmEn6YTtTahv4ODiRkGdOCUUAAUSE/uQNfqTaKFu4jvynJiIxIzcwg/SjF1RsOk9R+QJMlZCvqvwhQFdbM4XvrynIVHpfn2ZSWYyhzHS+PUtSueUC0cQ0QmpGyE9197TUnwzq1DnUKbXSxOb6S7xtPkjngzbGVVbzvS/FjaGt9DU8xlRRJdTCMDEzRjuyZ1FwaFe9j+d4eecaPd1dPxNTSlfWHm1v5y/EzBitblXp4JLZ5f6yBbOwaK5tsD+9c33jq/f8w2+mRSjOllPhkAAAAABJRU5ErkJggg==\") no-repeat scroll left bottom}\n.ltr #fieldset-history a[href*=\"&history=all\"]{background-position:left;padding-left:22px;margin-left:10px}\n.rtl #fieldset-history a[href*=\"&history=all\"]{background-position:right;padding-right:22px;margin-right:10px}\ntd a[href*=\"&select=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&select=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&select=\"]{background-position:left bottom;padding:0 8px 0 20px}\nth a[href*=\"&table=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr th a[href*=\"&table=\"]{background-position:left bottom;padding-left:22px}\n.rtl th a[href*=\"&table=\"]{background-position:right bottom;padding-right:22px}\ntd a[href*=\"&create=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&create=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&create=\"]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&view=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJeSURBVDjLpZNLSNRRFIe/O81o+WjISM0epuarEHuDqIFEDyoqEFtFD4gWQVDQoo0QhFARbowKNNpKi0DJRYVGqRmY5oPUBs3S1GnMcdR0/v8Z554WM44RGURne7nf+X6cc5SI8D9lBTh79/0VIBkoAHaCCIJCCxaLwqJAa40O4LFZpT9z/cpdaOFqcZZCRDhT0V4p/1i3HveIiAQNgEKAh83usNrfgp3Pj6NvyGOGI6AlceExPT4SAKX+/PnjNxMAr+GPCANEJGqhq8NlLtk53myk0FlN/0QO19a+Ul33Lp4OArRYF9SWqrmxWqb7WliRcwp7ynY8g5n0Pa+6vQBQACXX6zG0RgvU3djP4OhUMI7nBXZ6iEvPxz3QS4TyEbsykZjVG+0hgAbgu9fPvm1J1LWNhDtH+1qxSRf21IOYY9VERCm+dPQxPatQvolcS8gAgBkjgF+EOXM+OImpZmw/GrCnHcYYrUTZJrHFxBItbh4N5bH70hOHBUCFDEzTj9cfIGD4cfbWEjX7GvvmYxgj97HY/PimN+Fq7GTNgTKchh2AoMEvUxeBnKgOPF+bid96BJ+zimURgjmdzHhTO6qonOUJ2YjMLwL0vA4ThluqKT0UwBdIYqy7Ao3BrHsdrre9qKJyVHQCodgSBgS0/gzQ/eAExWntbCm4QORwE46aZjqeuXG87GTD8TukZmSRkmQPmcrk4iYGdE1JaUOGiOTlulyrfB+ekpJbyNT4BANtDupjLzNe9g6R1lBIPQOWXgD1+zmf3Bvn3ZGaYN2TnYLYzDde1/i5oze7Pi21YD8BVSdMJ0n4cQkAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&view=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&view=\"]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&edit=\"][id^=Data_free-]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGSSURBVDjLlZO7S8NQGMVb/weRgoI4iIuCVuoiuBfBwUFwaosPqJODk5OLBVutSlMsuDg4OVWkYO3o4Cha/BNS+qLP9K3HnEtT07f94HATcs8v33eSawBgUGtSlVmVZYimVY3Ro8nQBJgrlUq2Xq9/NxoN9JL6HD6f76oTogEsNBeLRSiK0lIul0Mmk0E8HheQWCwGSZLaICwjAdxQLpdRrVbFShUKBWSzWSQSCQEolUrgSwKBgIB0AWjWRAAN+XweyWSya6RmJsY2gDpGawOvObc2SiqVEp3Istwf0Ck9hJ0wj3Q6/X+AHsJxmAlBIwGoWq0mciGEGhnALkJvDzgK2LB3sQH7mRWrjtmbgQCaNAVf73HyYMdTVMK7HIb3xYkt7zxWDkyeoQC273BbEfy8RPDrGixPZBfeyD4B5aFfgVo/XkQoegt9PX5IBEAP+OmXwdrhDNxhB1xhmzC7nm1/HTR/x2U1ZUXd3PMw+YOn2PTM4Ty8I97MlfcigyZgipBBR3lhe/zO4jQpbJvrkn3CT+8vh7avwsYhJlIAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&edit=\"][id^=Data_free-]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&edit=\"][id^=Data_free-]{background-position:left bottom;padding:0 8px 0 20px}\ntd a[href*=\"&indexes=\"]{background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhZHfT1JhHMb9F7ptXXXR2lw/Llp3blnNZauLtmwtp15oWsu6oJZ5bKyFQiGIEIRIKoEsJtikWM1JmiQhtpieo3ISUoEINiJNE2SgT5x3ZiVZ3+15v3t/PJ89+755APJ4PJ64s7MzZDKZYDabYbFY0NvbSzq35867u7uh1WpjfD5fwXl+iixqtXoi2xfw/0ppNJrPOQC9Xp/O9vXTvCf4l7jKJkUOgIvH1bmGPlQ1D6Na+gY1Micut77FFcUoapVj5I4rnU6XCzAYDJuAmqz50hbzNdUvQJfu8d8BmUwGMzMz8Hq9oGkaHo8HbrcbTqcTDocDQ0ND+B62gzWeh8/ahPGOIkyo8ssJYCMWmXxLSwtYloXRaIRYLCag6I3rmKUKERmswyJtA5bDWKAtcElORAmgo4MMBqFQCIFAAH6/Hz6fj6RhGAasuw3xqTtIhZ4h8roZCeYpMvMjYLqqkwSgaW8nAKvVCrlcjmAwSNLIZDLM0ibEJ29jLTGCxMdaxMeuwmuoBK0t+zKmOLOHAFQqFQFEo1FEIhGEw2GSZp4x4ytTj7WkCyv+CiSDpViapjCnORJ9Lz1+cHOIcrmCAGw2G5RKJYHY9HxE3tVtmMuRDFzAt8kGsKoifJAcPvTHLzRLJAQQi8WI2FEjpvtvZmM7kJyrxGqwDIvZJH7NSTyUCnK/USgUpocdjnW73Y6+R3xMvaAw8bIVn9wlWJkrRXz8FrzqUxgZ6FsXikSJHABFUYxA0LgiFIrQc/8YsDQPtv0sBqmdcLYVY0BQgAfCetwVNK5m37pyAL9LcDE/nXIpkXLL4W4qRE/VruX++v0Htr7bFlBSsCMpqtibfnWvOG2XHh1+Xrdv93ZmTj8Aff0H4WdEl0kAAAAASUVORK5CYII=\") no-repeat scroll left bottom}\n.ltr td a[href*=\"&indexes=\"]{background-position:right bottom;padding:0 20px 0 8px}\n.rtl td a[href*=\"&indexes=\"]{background-position:left bottom;padding:0 8px 0 20px}\nselect,input:not([type=submit],[type=file],[type=image]){background-color:#b4c8da !important}\ninput,button,select,.sqlarea{border-radius:3px}\nselect,input[type=checkbox],input[type=radio],input[type=range],progress{accent-color:#0061b5}\ninput[type=radio]{margin-bottom:5px}\n.ltr input[type=checkbox],.ltr input[type=radio],.ltr input[type=range],.ltr progress{margin-right:5px}\n.rtl input[type=checkbox],.rtl input[type=radio],.rtl input[type=range],.rtl progress{margin-left:5px}\n.ltr input[type=submit]{margin-right:10px}\n.rtl input[type=submit]{margin-left:10px}\n.ltr table.layout label,.ltr label.jsonly{margin-left:8px}\n.rtl table.layout label,.rtl label.jsonly{margin-right:8px}\n.sqlarea{background:#92afc9;font-size:105%}\nfieldset a{line-height:unset}\ninput[type=submit]{padding:2px 6px}\n"
  },
  {
    "path": "designs/win98/README.md",
    "content": "## Screenshot\n![screenshot](https://www.adminer.org/static/designs/win98/screenshot.png)\n"
  },
  {
    "path": "designs/win98/adminer.css",
    "content": "/* inspired by https://github.com/jdan/98.css */\n\n:root {\n    --text-color: #222222;\n    --button-face: #dfdfdf;\n    --window-frame: #0a0a0a;\n    --dialog-blue-light: #1084d0;\n    --link-blue: #0000ff;\n}\n\nbody {\n    background: teal;\n    color: var(--text-color);\n    font-family: Arial, Helvetica, sans-serif;\n}\n\nbutton, input[type=reset], input[type=submit] {\n    background: silver;\n    border: none;\n    border-radius: 0;\n    box-shadow: inset -1px -1px var(--window-frame), inset 1px 1px white, inset -2px -2px grey, inset 2px 2px var(--button-face);\n    box-sizing: border-box;\n    color: transparent;\n    font-size: 12px;\n    min-height: 23px;\n    min-width: 75px;\n    padding: 0 12px;\n    text-shadow: 0 0 var(--text-color);\n}\n\nbutton.default, input[type=reset].default, input[type=submit].default {\n    box-shadow: inset -2px -2px var(--window-frame), inset 1px 1px var(--window-frame), inset 2px 2px white, inset -3px -3px grey, inset 3px 3px var(--button-face);\n}\n\nbutton:not(:disabled):active, input[type=reset]:not(:disabled):active, input[type=submit]:not(:disabled):active {\n    box-shadow: inset -1px -1px white, inset 1px 1px var(--window-frame), inset -2px -2px var(--button-face), inset 2px 2px grey;\n    text-shadow: 1px 1px var(--text-color);\n}\n\nbutton.default:not(:disabled):active, input[type=reset].default:not(:disabled):active, input[type=submit].default:not(:disabled):active {\n    box-shadow: inset 2px 2px var(--window-frame), inset -1px -1px var(--window-frame), inset -2px -2px white, inset 3px 3px grey, inset -3px -3px var(--button-face);\n}\n\nbutton:focus, input[type=reset]:focus, input[type=submit]:focus {\n    outline: 1px dotted black;\n    outline-offset: -4px;\n}\n\nbutton::-moz-focus-inner, input[type=reset]::-moz-focus-inner, input[type=submit]::-moz-focus-inner {\n    border: 0;\n}\n\n:disabled, :disabled + label, input[readonly], input[readonly] + label, input[type=submit]:disabled, input[type=reset]:disabled, input[type=submit]:disabled {\n    color: grey;\n}\n\n:disabled + label, button:disabled, input[type=reset]:disabled, input[type=submit]:disabled {\n    text-shadow: 1px 1px 0 white;\n}\n\n#content, #menu, .footer, #breadcrumb {\n    background: silver;\n    box-shadow: inset -1px -1px var(--window-frame), inset 1px 1px var(--button-face), inset -2px -2px grey, inset 2px 2px white;\n    padding: 16px;\n}\n\n#content h2 {\n    align-items: center;\n    background: linear-gradient(90deg, navy, var(--dialog-blue-light));\n    color: white;\n    display: flex;\n    font-size: 120%;\n    font-weight: normal;\n    justify-content: space-between;\n    letter-spacing: 0;\n    margin: -13px -13px 16px -13px;\n    padding: 3px 2px 3px 3px;\n}\n\nfieldset {\n    border-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='5' height='5' fill='gray' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h5v5H0V2h2v1h1V2H0' fill='%23fff'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h4v4H0V1h1v2h2V1H0'/%3E%3C/svg%3E\") 2;\n    margin: 0;\n    padding: 10px;\n    padding-block-start: 8px;\n}\n\nlegend {\n    background: silver;\n}\n\ninput[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input:not([type]) {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    border: none;\n    border-radius: 0;\n}\n\ninput[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], select, input:not([type]) {\n    background-color: white;\n    box-shadow: inset -1px -1px white, inset 1px 1px grey, inset -2px -2px var(--button-face), inset 2px 2px var(--window-frame);\n    box-sizing: border-box;\n    padding: 3px 4px;\n}\n\nselect, textarea {\n    border: none;\n}\n\ntextarea {\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    appearance: none;\n    background-color: white;\n    border-radius: 0;\n    box-shadow: inset -1px -1px white, inset 1px 1px grey, inset -2px -2px var(--button-face), inset 2px 2px var(--window-frame);\n    box-sizing: border-box;\n    padding: 3px 4px;\n}\n\ninput[type=email], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=number], select {\n    min-height: 21px;\n}\n\ninput[type=search]::-ms-clear, input[type=search]::-ms-reveal {\n    display: none;\n    height: 0;\n    width: 0;\n}\n\ninput[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration, input[type=search]::-webkit-search-results-button, input[type=search]::-webkit-search-results-decoration {\n    display: none;\n}\n\ninput[type=email]:disabled, input[type=email]:read-only, input[type=number]:disabled, input[type=number]:read-only, input[type=password]:disabled, input[type=password]:read-only, input[type=search]:disabled, input[type=search]:read-only, input[type=tel]:disabled, input[type=tel]:read-only, input[type=text]:disabled, input[type=text]:read-only, textarea:disabled {\n    background-color: silver;\n}\n\nselect {\n    appearance: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M15 0H0v16h1V1h14V0z' fill='%23DFDFDF'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M2 1H1v14h1V2h12V1H2z' fill='%23fff'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 17H0v-1h15V0h1v17z' fill='%23000'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M15 1h-1v14H1v1h14V1z' fill='gray'/%3E%3Cpath fill='silver' d='M2 2h12v13H2z'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 6H4v1h1v1h1v1h1v1h1V9h1V8h1V7h1V6z' fill='%23000'/%3E%3C/svg%3E\");\n    background-position: top 2px right 2px;\n    background-repeat: no-repeat;\n    border-radius: 0;\n    padding-right: 32px;\n    position: relative;\n}\n\ninput[type=email]:focus, input[type=number]:focus, input[type=password]:focus, input[type=search]:focus, input[type=tel]:focus, input[type=text]:focus, select:focus, textarea:focus {\n    outline: none;\n}\n\nselect:focus {\n    background-color: navy;\n    color: white;\n}\n\nselect:focus option {\n    background-color: white;\n    color: black;\n}\n\nselect:active {\n    background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h16v17H0V0zm1 16h14V1H1v15z' fill='gray'/%3E%3Cpath fill='silver' d='M1 1h14v15H1z'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 7H5v1h1v1h1v1h1v1h1v-1h1V9h1V8h1V7z' fill='%23000'/%3E%3C/svg%3E\")\n}\n\na {\n    color: var(--link-blue);\n}\n\na:focus {\n    outline: 1px dotted var(--link-blue);\n}\n\npre {\n    border-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='5' height='5' fill='gray' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h5v5H0V2h2v1h1V2H0' fill='%23fff'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0 0h4v4H0V1h1v2h2V1H0'/%3E%3C/svg%3E\") 2;\n    border-style: solid;\n    border-width: 1px;\n    margin: 0;\n    padding: 12px 8px;\n}\n\ntable {\n    background-color: white;\n}\n\ntable > thead > tr > * {\n    background: silver;\n    box-shadow: inset -1px -1px var(--window-frame), inset 1px 1px white, inset -2px -2px grey, inset 2px 2px var(--button-face);\n}\n\ntable.interactive > tbody > tr {\n    cursor: pointer;\n}\n\n#fieldset-sort > div:not(:last-of-type), #fieldset-search > div:not(:last-of-type), #fieldset-select > div:not(:last-of-type) {\n    margin-bottom: .5em;\n}\n\n#fieldset-partition p {\n    margin: 0;\n}\n\n.icon {\n    min-height: 0;\n    min-width: 0;\n}\n\n.links {\n    margin: 1em 0;\n}\n\n#logins a, #tables a, #tables span {\n    background: none;\n}\n\n.jush-autocomplete, .jush-autocomplete:active {\n    background: none;\n    height: auto;\n}\n\n.logout {\n    box-shadow: none;\n    margin-top: .8em;\n}\n\n#breadcrumb {\n    height: auto;\n    margin: 0;\n    padding: 2px 16px;\n    top: calc(1.5em - 14px);\n}\n\ncode {\n    background: none;\n}\n\n#menu {\n    margin: 0;\n    top: 3em;\n    width: 18em;\n}\n\n#menu h1 {\n    background: none;\n    margin: 0;\n    padding: 0;\n}\n\n#menu h1 a {\n    color: var(--text-color);\n}\n\n#menu .links a {\n    display: block;\n}\n\n#lang {\n    top: -2.8em;\n}\n\n#lang label {\n    color: white;\n}\n\n#content {\n    margin-top: 3em;\n}\n\n.footer {\n    margin: 1em 0;\n}\n\n.footer > div {\n    background: none;\n}\n\n.js .column {\n    background: silver;\n    border: none;\n    border-radius: 0;\n    box-shadow: inset -1px -1px var(--window-frame), inset 1px 1px var(--button-face), inset -2px -2px grey, inset 2px 2px white;\n    margin-top: -.4em;\n    padding: 4px;\n}\n\n@media all and (max-width: 800px) {\n    .js .logout {\n        box-shadow: none;\n        top: 0;\n    }\n\n    #lang label {\n        color: initial;\n    }\n}\n"
  },
  {
    "path": "developing.md",
    "content": "# Notes for Developers\n\nJakub Vrána\n\n## Request Lifecycle\n\nThe request lifecycle is straightforward.\nAdminer loads a database driver based on a URL parameter (e.g., `pgsql=`).\nThe drivers live in [adminer/drivers/](/adminer/drivers/) and [plugins/drivers/](/plugins/drivers/).\nThe driver consists of the class [`Driver`](/adminer/include/driver.inc.php) and a set of functions that ideally belong in `Driver` but remain separate due to historical reasons.\n\nA driver also creates the [`Db`](https://github.com/vrana/adminer/blob/v5.0.6/adminer/drivers/mysql.inc.php#L62) class based on available PHP extensions.\nThere is no `DriverMysql` or `DbMysqlPdo`; there is always up to one `Driver` and one `Db`.\n\nIf the URL contains `username=`, Adminer attempts to authenticate that user.\nIf authentication fails, a login form is displayed at the same URL, and POST data is stored in hidden form fields.\nIf the user authenticates using the same credentials, the action is performed.\n\nAll state-changing actions (primarily data modifications, as well as language change or logout) are performed using POST with a CSRF token present.\nAdminer sets cookies as SameSite which adds a second protection but not for vulnerabilities on the same site.\nIf a POST action succeeds, Adminer redirects the browser to a GET request to prevent accidental re-submission.\nAn unsuccessful POST displays the same page with pre-filled form fields.\nRefreshing the page attempts the action again, which is useful when errors were resolved in another browser tab.\n\nThen, the request is routed based on other URL parameters.\nFor example, if the URL contains `indexes=`, then [adminer/indexes.inc.php](/adminer/indexes.inc.php) is loaded.\nThe table name is extracted from this parameter, resulting in simpler URLs (e.g., `indexes=customers` instead of `action=indexes&table=customers`).\n\nThe PHP session is stopped before rendering begins.\nThis prevents modifying `$_SESSION` later in the code but allows multiple Adminer pages to be opened simultaneously, even if one has a long-running query.\n\nDatabase identifiers, such as column names, can be arbitrary, so they are never transferred in URLs or POST requests directly.\nThey are always wrapped (e.g., `fields[col]`), and any `[` in the name is escaped.\n\nAdminer often checks for empty strings using `$table != \"\"` instead of `!$table`, since table names can be `0`, and `!$table` would fail in such cases.\n\n## Classes, Functions, Variables, Constants\n\nThere are 4 main classes: `Driver`, `Db`, `Adminer` and `Plugins`.\nThey are described in other sections.\n\nAdminer defines many functions which are namespaced to prevent collisions.\n\nThere are no global variables.\nSome data is stored in static class variables.\nThese variables are minified during compilation into random strings, making them inaccessible externally (e.g., by plugins).\nPlugins can access some of them using helper functions like `Adminer\\driver()`.\n\nAdminer also defines constants in its namespace.\nA key example is `JUSH`, which represents a syntax highlighting ID (e.g., `pgsql` for PostgreSQL).\nSimple conditional checks may use `JUSH`, but for complex logic, methods in `Driver` are preferred.\n\n## Backwards Compatibility\n\nAdminer is highly conservative regarding PHP version requirements.\nSource codes require PHP 7.4 to take advantage of type declarations.\nThese type declarations are stripped during compilation to be compatible with PHP 5.3.\nPHP 5.3 is still supported because some users cannot upgrade their servers.\nCompatibility is periodically [checked](https://github.com/vrana/adminer/blob/v5.0.6/phpcs.xml#L121).\nThe required PHP version is only increased if it significantly improves the code.\nOlder PHP versions had bugs that required workarounds, but modern versions primarily introduce new features.\n\nThe same philosophy applies to database systems.\nEven unsupported database versions are still supported because they remain in use.\nSupport for an old version is only dropped if maintaining it would overly complicate the code.\nFor instance, MySQL 4 lacks `information_schema`, making generated column support impractical, so support for MySQL 4 was removed.\n\nAdminer aims for backward compatibility, particularly for plugins.\nOnly significant improvements, such as adding namespaces, justify breaking changes.\n\n## Extending Functionality\n\nBesides driver classes, Adminer provides the [`Adminer`](/adminer/include/adminer.inc.php) class for customization.\nThis class enables Adminer and Adminer Editor (which lacks DDL support) to share functionality.\nDevelopers can extend this class to implement customizations, as I do for my projects.\n\nA more common method for extending Adminer is the [`Plugins`](/adminer/include/plugins.inc.php) class.\nA plugin is simply a class defining any methods from [`Adminer`](/adminer/include/adminer.inc.php).\nThe `Plugins::__call` method calls all registered plugins until one of them returns non-null.\n\n## Code Style\n\nAdminer follows a strict [coding style](/phpcs.xml), though some choices may seem unusual.\nFor instance, doc-comments are not indented by one space because some editors (e.g., VS Code) insert a space when pressing Enter after `*/`.\n\nThere is no enforced rule on `\"` vs. `'`.\nMost code uses `\"` because it's more flexible (e.g., embedding variables).\nEven in cases where variable interpolation is unlikely (e.g., `$_GET[\"table\"]`), I still use `\"` due to an existing editor snippet.\n`'` is primarily used for regular expressions and is required for extracting translations in `lang()`.\n\nI avoid `\"{$var}\"` because it is longer.\nIn rare cases where `$var` cannot be used directly within a string, I prefer splitting the string (`\"prefix$var\" . \"suffix\"`).\n\nNever use `$_REQUEST`.\nDecide where the parameter belongs and access it accordingly.\n\nI am not entirely satisfied with the naming style.\nPHP global functions use `snake_case`, so I use it for functions and variables.\nMySQLi’s `Db` class extends `mysqli`, so it also uses `snake_case`.\nHowever, I prefer `camelCase` for method names and parameters so I use it in other classes.\nThis inconsistency sometimes results in passing `$table_status` to a method expecting `$tableStatus`.\nThe best approach would be to use single-word names, though this is impractical.\nSome pages use uppercase for main object (e.g., `$TABLE`), but I dislike this despite its visibility.\nReturn values of functions are usually constructed into variables named `$return`.\n\nCode within `if` statements and loops must always be wrapped in `{}` blocks.\nThese are removed during minification.\n`else if` is forbidden; use `elseif` instead.\n\nI use empty lines sparingly to separate code blocks.\nMy editor shortcut jumps between empty lines, I use it primarily for navigating functions.\nLines containing only `}` naturally divide the code visually.\n\nWell-used ternary operators enhance readability, but they are sometimes overused in Adminer.\n\n```php\n// Preferred\n$title = ($update\n    ? lang('Save and continue edit')\n    : lang('Save and insert next')\n);\n\n// Less desirable\nif ($update) {\n    $title = lang('Save and continue edit');\n} else { // If you change else to elseif in the future then $title may stay uninitialized\n    $title = lang('Save and insert next');\n}\n```\n\nAdminer has an excessive line length limit of 250 characters.\nWhile all lines fit my screen, I prefer shorter lines.\nA limit of 150 would be more reasonable, but wrapping lines at arbitrary points is unacceptable.\nProper line wrapping often requires refactoring, which has caused bugs in the past, so I hesitate to make changes purely for line length.\n\n## Comments\n\nAll functions have doc-comments, but redundancy is avoided.\nFor example, `Db` methods are documented only in [`db.inc.php`](/adminer/include/db.inc.php), not in the drivers.\n`@param` tags include only params with type [more specific](https://phpstan.org/writing-php-code/phpdoc-types) than the native type declaration or with a comment.\nThe doc-comments use [aliases](/phpstan.neon) for complex arrays.\nDoc-comments are imperative (\"Get\" instead of \"Gets\"), start with a capital letter, and do not end with a period.\n\nInline comments are useful for linking specifications but are generally avoided for explaining self-explanatory code.\nThey start with a lowercase letter and do not end with a period, though I am not entirely happy with this convention.\n\nComments starting with `//!` mean TODO.\nComments starting with `//~` are meant for debugging.\n\n## Error Handling\n\nAdminer strictly initializes all variables before use, which is [verified](/phpstan.neon).\nHowever, Adminer relies on the default value of uninitialized array items.\nThis approach leads to more readable code.\nConsider the following examples:\n\n```php\n// Adminer style\nif (extension_loaded(\"mysqli\") && $_GET[\"ext\"] != \"pdo\")\n\n// Explicit isset\nif (extension_loaded(\"mysqli\") && (!isset($_GET[\"ext\"]) || $_GET[\"ext\"] != \"pdo\"))\n\n// Possible since PHP 7.0\nif (extension_loaded(\"mysqli\") && ($_GET[\"ext\"] ?? \"\") != \"pdo\")\n\n// With idx() explained later\nif (extension_loaded(\"mysqli\") && idx($_GET, \"ext\") != \"pdo\")\n```\n\nTreating undefined variables as empty was a significant improvement over the C language, where they contained random data.\nUnfortunately, developers abused this feature, leading PHP to issue first notices and later warnings.\nAdminer [silences](/adminer/include/errors.inc.php) these errors.\nIn projects where I am required to check array key existence before usage, I quickly create a function like this:\n\n```php\nfunction idx($array, $key, $default = null) {\n    // Note: isset() cannot be used here because idx(array(null), 0, '') would return an incorrect value.\n    return array_key_exists($key, $array) ? $array[$key] : $default;\n}\n```\n\nAlthough it would be possible to use such a function in Adminer, the code would still be less readable than the current approach.\nUsing `isset` can introduce bugs, such as in this case: `isset($rw[\"name\"])`.\nHere, I intended to check if `$row` contains `name`, but a typo in the variable name is silently ignored.\nThe same is true for `??`.\n`empty()` is even worse and should be avoided in most cases.\n\nAdminer uses `@` only where an error is unavoidable, such as when writing to files.\nEven if you check whether a file is writable, a race condition exists between the check and the actual write operation.\n\n## Escaping\n\nAdminer does not implement automatic escaping.\nWhen printing untrusted data (including e.g. table names), you must use `h()`, which is a shortcut for `htmlspecialchars` that also escapes `\"` and `'`.\nWhile a templating system would be useful, it would need to support streaming.\nAdminer prints data immediately to display partial results when a query is slow.\n\nWhen constructing SQL queries, use `q()` for strings and `idf_escape()` for identifiers.\nAdminer requires full control when constructing queries, making the use of additional helpers challenging.\n\n## Minimalism\n\nAdminer is minimalist in every aspect - if something is unnecessary, it should not be included.\nThis philosophy extends to the UI, which remains as uncluttered as possible.\nFor example, index names are usually irrelevant compared to the columns they reference, so Adminer displays index names only in `title=\"\"`.\nThe same principle applies to the code; for instance, `public` visibility is the default, so it does not need to be explicitly specified.\nMany closing HTML tags are optional (e.g., `</li>` or `</html>`) and Adminer obviously doesn't print them.\n\nIf a feature can be implemented as a plugin, it is only added to the core if it benefits almost everyone.\nFor example, [sticky table headers](https://github.com/vrana/adminer/issues/918) are useful to all users and have been included, whereas a [dark mode switcher](https://github.com/vrana/adminer/issues/926) would clutter the UI and is only useful for some, so it remains a plugin.\n\n## Dependencies\n\nAdminer uses [Git submodules](https://git-scm.com/docs/git-submodule) for dependencies, predating [Composer](https://getcomposer.org/) and other package managers.\nSubmodules simplify development - for example, I can add a feature to the syntax highlighter, commit the change, and immediately use it in Adminer.\nAdminer commits simply reference the current HEAD of the submodule, avoiding the need for frequent version releases, lock file updates, or other package management tasks.\n\n## Tests\n\nAdminer does not include unit tests but has extensive [end-to-end tests](/tests/).\nThese tests verify correct behavior, including UI functionality, which is otherwise difficult to test.\nThe tests take about 10 minutes to run, which is acceptable before a release.\nThey help detect even JavaScript errors in real-world use cases.\n\n## JavaScript\n\nAdminer functions without JavaScript but is more user-friendly when JavaScript is enabled.\nIt does not rely on any framework but includes simple helpers like `qsa()`, a shorthand for `document.querySelectorAll()`, along with small functions that call these helpers.\n\nPreviously, these functions were bound directly in HTML (`<a onclick=\"tableClick()\">`), but strict CSP enforcement made this impossible.\nNow, Adminer registers event handlers using a short `<script>` element immediately following the relevant tag, typically using `qsl()` (query selector last).\nThis ensures handlers are available immediately.\nThe only exception is handlers registered in a loop, where bulk registration is more efficient.\n\nJavaScript code is split into [functions.js](/adminer/static/functions.js) (common utilities) and [editing.js](/adminer/static/editing.js) (specific to Adminer or Adminer Editor).\nThese files are concatenated during compilation since they depend on each other.\n\nJavaScript code follows the coding style defined in [eslint.config.mjs](/eslint.config.mjs), but because ESLint requires additional dependencies, I run it externally.\n\n## Styles\n\nAdminer generates simple HTML and styles it with basic CSS, respecting user preferences for dark mode.\nUsers can customize styles via `adminer.css`.\nIf styling an element without a class name is difficult, I generally accept patches that add meaningful class names.\n\n## Translations\n\nAll user-visible strings should be translatable using `lang('')`.\nThis extracts them for translation and applies translations if available.\n\nTranslations are updated via [lang.php](/lang.php), which also checks for style consistency, such as matching punctuation.\nPlurals are stored as arrays, with selection logic handled in [lang.inc.php](/adminer/include/lang.inc.php).\n\nPlugins extending [`Adminer\\Plugin`](/adminer/include/plugin.inc.php) can use `$this->lang()` and store translations in `$translations = array('en' => array('' => 'Plugin description'))`.\n\nThe website translations are managed at https://www.adminer.org/en/translations/.\n\n## Compilation\n\nAdminer’s source code is divided into a manageable number of reasonably small files.\nFor simpler deployment, these files are bundled into a single `*.php` file by inlining `include` files.\nStatic files (`*.js`, `*.css`) are also inlined and served via the `?file=` route.\n\nIncludes in Adminer start with `./` to bypass `include_path`, which is unrelated to compilation.\n\nCompilation also [shrinks](https://github.com/vrana/PhpShrink) PHP code by removing whitespace, comments, and shortening variable names.\nThis prevents plugins from overwriting Adminer’s variables.\nThe compiled file is binary, which is valid PHP but not valid UTF-8 - a debatable choice.\n\nTranslations used to occupy a large portion of the compiled file.\nIn the source code, translations map English strings to localized versions.\nDuring compilation, identifiers are converted to numbers, and translations are LZW-compressed to save space.\nThis data is decompressed into a session variable at runtime to improve performance.\nA single-language compilation is also possible to create even smaller files.\n\n`compile.php` outputs the compiled file to the current directory, but it does not need to be run from Adminer’s directory.\nI often run it from a separate directory to prepare releases (29 files) or test versions of Adminer.\n\n## Version Check\n\nAdminer checks for new versions via [adminer.org/version/](https://www.adminer.org/version/), using a signed response to prevent tampering with the version file on the server where an instance of Adminer runs.\nHowever, this means that adminer.org has access to the IP addresses of Adminer installations.\nI do not review logs with this information, and no one else has access to the server.\nA [plugin](/plugins/version-noverify.php) disables version checks, but users should verify versions by other means to ensure security updates.\nThere's also a [plugin](/plugins/version-github.php) checking for new versions [from GitHub](https://github.com/vrana/adminer/releases).\n\n## Commits\n\nEvery commit should do only one thing and be as small as possible.\nAn [example](https://github.com/peterpp/jush/commit/2de4bac) of a poor commit in a related project describes one useful change in the description but actually does three things:\n\n- Adds dark mode, which is desired.\n- Randomly changes some colors in light mode.\n- Changes indentation in some files, making them inconsistent with everything else.\n\nThis commit should be split into three, and I would accept only the change that is actually described.\n\nI try to honor authorship whenever possible, but I don’t want commits introducing an incorrect state into the repository’s history.\nThis means that I often amend pull requests.\nPlease don’t be offended by this - your proposed change will still be there under your name, but the code might be slightly different.\nThis is simpler for me than requesting changes to such pull requests.\n\nIf a change modifies Adminer’s behavior for end users, it should be documented in [CHANGELOG](/CHANGELOG.md) in the same commit.\nThis is quite important - I have a keyboard shortcut to blame the current line and another shortcut to open GitHub for the returned SHA.\nI often blame lines in the changelog to see what they actually modified.\nChanges that are invisible to users (such as refactorings) shouldn’t be documented here; the commit log is sufficient for them.\n\nCommit messages should start with a capital letter, and the first line shouldn’t end with a period.\nThere is no strict line length limit, but be reasonable.\nIf the commit is specific to a particular area (e.g., SQLite or CSS), the message should be formatted as `Area: Message`.\nA detailed description is rarely used, except when linking to other commits (use the first seven characters of the SHA in this case).\n\nIf a commit addresses a bug, it should be marked as `(bug #n)` or `(fix #n)` if it fixes the bug.\n\nAlways diff your changes before committing.\nThis helps catch errors, such as forgotten debug code.\n"
  },
  {
    "path": "editor/db.inc.php",
    "content": "<?php\nnamespace Adminer;\n\npage_header(lang('Server'), \"\", false);\n\nif (adminer()->homepage()) {\n\techo \"<form action='' method='post'>\\n\";\n\techo \"<p>\" . lang('Search data in tables') . \": <input type='search' name='query' value='\" . h($_POST[\"query\"]) . \"'> <input type='submit' value='\" . lang('Search') . \"'>\\n\";\n\tif ($_POST[\"query\"] != \"\") {\n\t\tsearch_tables();\n\t}\n\techo \"<div class='scrollable'>\\n\";\n\techo \"<table class='nowrap checkable odds'>\\n\";\n\techo script(\"mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});\");\n\techo '<thead><tr class=\"wrap\">';\n\techo '<td><input id=\"check-all\" type=\"checkbox\" class=\"jsonly\">' . script(\"qs('#check-all').onclick = partial(formCheck, /^tables\\[/);\", \"\");\n\techo '<th>' . lang('Table');\n\techo '<td>' . lang('Rows');\n\techo \"</thead>\\n\";\n\n\tforeach (table_status() as $table => $row) {\n\t\t$name = adminer()->tableName($row);\n\t\tif ($name != \"\") {\n\t\t\techo '<tr><td>' . checkbox(\"tables[]\", $table, in_array($table, (array) $_POST[\"tables\"], true));\n\t\t\techo \"<th><a href='\" . h(ME) . 'select=' . urlencode($table) . \"'>$name</a>\";\n\t\t\t$val = format_number($row[\"Rows\"]);\n\t\t\techo \"<td align='right'><a href='\" . h(ME . \"edit=\") . urlencode($table) . \"'>\" . ($row[\"Engine\"] == \"InnoDB\" && $val ? \"~ $val\" : $val) . \"</a>\";\n\t\t}\n\t}\n\n\techo \"</table>\\n\";\n\techo \"</div>\\n\";\n\techo \"</form>\\n\";\n\techo script(\"tableCheck();\");\n\tadminer()->pluginsLinks();\n}\n"
  },
  {
    "path": "editor/example.php",
    "content": "<?php\nfunction adminer_object() {\n\tclass AdminerCds extends Adminer\\Adminer {\n\n\t\tfunction name() {\n\t\t\t// custom name in title and heading\n\t\t\treturn 'CDs';\n\t\t}\n\n\t\tfunction credentials() {\n\t\t\t// ODBC user with password ODBC on localhost\n\t\t\treturn array('localhost', 'ODBC', 'ODBC');\n\t\t}\n\n\t\tfunction database() {\n\t\t\t// will be escaped by Adminer\n\t\t\treturn 'adminer_test';\n\t\t}\n\n\t\tfunction login($login, $password) {\n\t\t\t// username: 'admin', password: anything\n\t\t\treturn ($login == 'admin');\n\t\t}\n\n\t\tfunction tableName($tableStatus) {\n\t\t\t// tables without comments would return empty string and will be ignored by Adminer\n\t\t\treturn Adminer\\h($tableStatus[\"Comment\"]);\n\t\t}\n\n\t\tfunction fieldName($field, $order = 0) {\n\t\t\tif ($order && preg_match('~_(md5|sha1)$~', $field[\"field\"])) {\n\t\t\t\treturn \"\"; // hide hashes in select\n\t\t\t}\n\t\t\t// display only column with comments, first five of them plus searched columns\n\t\t\tif ($order < 5) {\n\t\t\t\treturn Adminer\\h($field[\"comment\"]);\n\t\t\t}\n\t\t\tforeach ((array) $_GET[\"where\"] as $key => $where) {\n\t\t\t\tif ($where[\"col\"] == $field[\"field\"] && ($key >= 0 || $where[\"val\"] != \"\")) {\n\t\t\t\t\treturn Adminer\\h($field[\"comment\"]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t}\n\t}\n\n\treturn new AdminerCds;\n}\n\ninclude \"./index.php\";\n"
  },
  {
    "path": "editor/include/adminer.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nclass Adminer {\n\tstatic $instance;\n\tpublic $error = '';\n\tprivate $values = array();\n\n\tfunction name() {\n\t\treturn \"<a href='https://www.adminer.org/editor/'\" . target_blank() . \" id='h1'><img src='../adminer/static/logo.png' width='24' height='24' alt='' id='logo'>\" . lang('Editor') . \"</a>\";\n\t}\n\n\t//! driver, ns\n\n\tfunction credentials() {\n\t\treturn array(SERVER, $_GET[\"username\"], get_password());\n\t}\n\n\tfunction connectSsl() {\n\t}\n\n\tfunction permanentLogin($create = false) {\n\t\treturn password_file($create);\n\t}\n\n\tfunction bruteForceKey() {\n\t\treturn $_SERVER[\"REMOTE_ADDR\"];\n\t}\n\n\tfunction serverName($server) {\n\t}\n\n\tfunction database() {\n\t\tif (connection()) {\n\t\t\t$databases = adminer()->databases(false);\n\t\t\treturn (!$databases\n\t\t\t\t? get_val(\"SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1)\") // username without the database list\n\t\t\t\t: $databases[(information_schema($databases[0]) ? 1 : 0)] // first available database\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction operators() {\n\t\treturn array(\"<=\", \">=\");\n\t}\n\n\tfunction schemas() {\n\t\treturn schemas();\n\t}\n\n\tfunction databases($flush = true) {\n\t\treturn get_databases($flush);\n\t}\n\n\tfunction pluginsLinks(): void {\n\t}\n\n\tfunction queryTimeout() {\n\t\treturn 5;\n\t}\n\n\tfunction afterConnect() {\n\t}\n\n\tfunction headers() {\n\t}\n\n\tfunction csp($csp) {\n\t\treturn $csp;\n\t}\n\n\tfunction head($dark = null) {\n\t\treturn true;\n\t}\n\n\tfunction bodyClass(): void {\n\t\techo \" editor\";\n\t}\n\n\tfunction css() {\n\t\t$return = array();\n\t\tforeach (array(\"\", \"-dark\") as $mode) {\n\t\t\t$filename = \"adminer$mode.css\";\n\t\t\tif (file_exists($filename)) {\n\t\t\t\t$file = file_get_contents($filename);\n\t\t\t\t$return[\"$filename?v=\" . crc32($file)] = ($mode\n\t\t\t\t\t? \"dark\"\n\t\t\t\t\t: (preg_match('~prefers-color-scheme:\\s*dark~', $file) ? '' : 'light')\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction loginForm() {\n\t\techo \"<table class='layout'>\\n\";\n\t\techo adminer()->loginFormField('username', '<tr><th>' . lang('Username') . '<td>', input_hidden(\"auth[driver]\", \"server\") . '<input name=\"auth[username]\" autofocus value=\"' . h($_GET[\"username\"]) . '\" autocomplete=\"username\" autocapitalize=\"off\">');\n\t\techo adminer()->loginFormField('password', '<tr><th>' . lang('Password') . '<td>', '<input type=\"password\" name=\"auth[password]\" autocomplete=\"current-password\">');\n\t\techo \"</table>\\n\";\n\t\techo \"<p><input type='submit' value='\" . lang('Login') . \"'>\\n\";\n\t\techo checkbox(\"auth[permanent]\", 1, $_COOKIE[\"adminer_permanent\"], lang('Permanent login')) . \"\\n\";\n\t}\n\n\tfunction loginFormField($name, $heading, $value) {\n\t\treturn $heading . $value . \"\\n\";\n\t}\n\n\tfunction login($login, $password) {\n\t\treturn true;\n\t}\n\n\tfunction tableName($tableStatus) {\n\t\treturn h(isset($tableStatus[\"Engine\"])\n\t\t\t? ($tableStatus[\"Comment\"] != \"\" ? $tableStatus[\"Comment\"] : $tableStatus[\"Name\"])\n\t\t\t: \"\" // ignore views\n\t\t);\n\t}\n\n\tfunction fieldName($field, $order = 0) {\n\t\treturn h(preg_replace('~\\s+\\[.*\\]$~', '', ($field[\"comment\"] != \"\" ? $field[\"comment\"] : $field[\"field\"])));\n\t}\n\n\tfunction selectLinks($tableStatus, $set = \"\") {\n\t\t$TABLE = $tableStatus[\"Name\"];\n\t\tif ($set !== null) {\n\t\t\techo '<p class=\"tabs\"><a href=\"' . h(ME . 'edit=' . urlencode($TABLE) . $set) . '\">' . lang('New item') . \"</a>\\n\";\n\t\t}\n\t}\n\n\tfunction foreignKeys($table) {\n\t\treturn foreign_keys($table);\n\t}\n\n\tfunction backwardKeys($table, $tableName) {\n\t\t$return = array();\n\t\tforeach (\n\t\t\tget_rows(\"SELECT TABLE_NAME, CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_COLUMN_NAME\nFROM information_schema.KEY_COLUMN_USAGE\nWHERE TABLE_SCHEMA = \" . q(adminer()->database()) . \"\nAND REFERENCED_TABLE_SCHEMA = \" . q(adminer()->database()) . \"\nAND REFERENCED_TABLE_NAME = \" . q($table) . \"\nORDER BY ORDINAL_POSITION\", null, \"\") as $row\n\t\t) {\n\t\t\t$return[$row[\"TABLE_NAME\"]][\"keys\"][$row[\"CONSTRAINT_NAME\"]][$row[\"COLUMN_NAME\"]] = $row[\"REFERENCED_COLUMN_NAME\"];\n\t\t}\n\t\tforeach ($return as $key => $val) {\n\t\t\t$name = adminer()->tableName(table_status1($key, true));\n\t\t\tif ($name != \"\") {\n\t\t\t\t$search = preg_quote($tableName);\n\t\t\t\t$separator = \"(:|\\\\s*-)?\\\\s+\";\n\t\t\t\t$return[$key][\"name\"] = (preg_match(\"(^$search$separator(.+)|^(.+?)$separator$search\\$)iu\", $name, $match) ? $match[2] . $match[3] : $name);\n\t\t\t} else {\n\t\t\t\tunset($return[$key]);\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction backwardKeysPrint($backwardKeys, $row) {\n\t\tforeach ($backwardKeys as $table => $backwardKey) {\n\t\t\tforeach ($backwardKey[\"keys\"] as $cols) {\n\t\t\t\t$link = ME . 'select=' . urlencode($table);\n\t\t\t\t$i = 0;\n\t\t\t\tforeach ($cols as $column => $val) {\n\t\t\t\t\t$link .= where_link($i++, $column, $row[$val]);\n\t\t\t\t}\n\t\t\t\techo \"<a href='\" . h($link) . \"'>\" . h($backwardKey[\"name\"]) . \"</a>\";\n\t\t\t\t$link = ME . 'edit=' . urlencode($table);\n\t\t\t\tforeach ($cols as $column => $val) {\n\t\t\t\t\t$link .= \"&set\" . urlencode(\"[\" . bracket_escape($column) . \"]\") . \"=\" . urlencode($row[$val]);\n\t\t\t\t}\n\t\t\t\techo \"<a href='\" . h($link) . \"' title='\" . lang('New item') . \"'>+</a> \";\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction selectQuery($query, $start, $failed = false) {\n\t\treturn \"<!--\\n\" . str_replace(\"--\", \"--><!-- \", $query) . \"\\n(\" . format_time($start) . \")\\n-->\\n\";\n\t}\n\n\tfunction rowDescription($table) {\n\t\t// first varchar column\n\t\tforeach (fields($table) as $field) {\n\t\t\tif (preg_match(\"~varchar|character varying~\", $field[\"type\"])) {\n\t\t\t\treturn idf_escape($field[\"field\"]);\n\t\t\t}\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tfunction rowDescriptions($rows, $foreignKeys) {\n\t\t$return = $rows;\n\t\tforeach ($rows[0] as $key => $val) {\n\t\t\tif (list($table, $id, $name) = $this->_foreignColumn($foreignKeys, $key)) {\n\t\t\t\t// find all used ids\n\t\t\t\t$ids = array();\n\t\t\t\tforeach ($rows as $row) {\n\t\t\t\t\t$ids[$row[$key]] = q($row[$key]);\n\t\t\t\t}\n\t\t\t\t// uses constant number of queries to get the descriptions, join would be complex, multiple queries would be slow\n\t\t\t\t$descriptions = $this->values[$table];\n\t\t\t\tif (!$descriptions) {\n\t\t\t\t\t$descriptions = get_key_vals(\"SELECT $id, $name FROM \" . table($table) . \" WHERE $id IN (\" . implode(\", \", $ids) . \")\");\n\t\t\t\t}\n\t\t\t\t// use the descriptions\n\t\t\t\tforeach ($rows as $n => $row) {\n\t\t\t\t\tif (isset($row[$key])) {\n\t\t\t\t\t\t$return[$n][$key] = (string) $descriptions[$row[$key]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction selectLink($val, $field) {\n\t}\n\n\tfunction selectVal($val, $link, $field, $original) {\n\t\t$return = \"$val\";\n\t\t$link = h($link);\n\t\tif (is_blob($field) && !is_utf8($val)) {\n\t\t\t$return = lang('%d byte(s)', strlen($original));\n\t\t\tif (preg_match(\"~^(GIF|\\xFF\\xD8\\xFF|\\x89PNG\\x0D\\x0A\\x1A\\x0A)~\", $original)) { // GIF|JPG|PNG, getimagetype() works with filename\n\t\t\t\t$return = \"<img src='$link' alt='$return'>\";\n\t\t\t}\n\t\t}\n\t\tif (like_bool($field) && $return != \"\") { // bool\n\t\t\t$return = (preg_match('~^(1|t|true|y|yes|on)$~i', $val) ? lang('yes') : lang('no'));\n\t\t}\n\t\tif ($link) {\n\t\t\t$return = \"<a href='$link'\" . (is_url($link) ? target_blank() : \"\") . \">$return</a>\";\n\t\t}\n\t\t// Firefox doesn't support <colgroup>\n\t\tif (preg_match('~date~', $field[\"type\"])) {\n\t\t\t$return = \"<div class='datetime'>$return</div>\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction editVal($val, $field) {\n\t\tif (preg_match('~date|timestamp~', $field[\"type\"]) && $val !== null) {\n\t\t\treturn preg_replace('~^(\\d{2}(\\d+))-(0?(\\d+))-(0?(\\d+))~', lang('$1-$3-$5'), $val);\n\t\t}\n\t\treturn $val;\n\t}\n\n\tfunction config() {\n\t\treturn array();\n\t}\n\n\tfunction selectColumnsPrint($select, $columns) {\n\t\t// can allow grouping functions by indexes\n\t}\n\n\tfunction selectSearchPrint($where, $columns, $indexes) {\n\t\t$where = (array) $_GET[\"where\"];\n\t\techo '<fieldset id=\"fieldset-search\"><legend>' . lang('Search') . \"</legend><div>\\n\";\n\t\t$keys = array();\n\t\tforeach ($where as $key => $val) {\n\t\t\t$keys[$val[\"col\"]] = $key;\n\t\t}\n\t\t$i = 0;\n\t\t$fields = fields($_GET[\"select\"]);\n\t\tforeach ($columns as $name => $desc) {\n\t\t\t$field = $fields[$name];\n\t\t\tif ($field[\"type\"] == \"enum\" || like_bool($field)) { //! set - uses 1 << $i and FIND_IN_SET()\n\t\t\t\t$key = $keys[$name];\n\t\t\t\t$i--;\n\t\t\t\techo \"<div>\" . h($desc) . \":\" . input_hidden(\"where[$i][col]\", $name);\n\t\t\t\t$val = idx($where[$key], \"val\");\n\t\t\t\techo (like_bool($field)\n\t\t\t\t\t? \"<select name='where[$i][val]'>\" . optionlist(array(\"\" => \"\", lang('no'), lang('yes')), $val, true) . \"</select>\"\n\t\t\t\t\t: enum_input(\"checkbox\", \" name='where[$i][val][]'\", $field, (array) $val, lang('empty'))\n\t\t\t\t);\n\t\t\t\techo \"</div>\\n\";\n\t\t\t\tunset($columns[$name]);\n\t\t\t} elseif (is_array($options = $this->foreignKeyOptions($_GET[\"select\"], $name))) {\n\t\t\t\tif ($fields[$name][\"null\"]) {\n\t\t\t\t\t$options[0] = '(' . lang('empty') . ')';\n\t\t\t\t}\n\t\t\t\t$key = $keys[$name];\n\t\t\t\t$i--;\n\t\t\t\techo \"<div>\" . h($desc) . input_hidden(\"where[$i][col]\", $name) . input_hidden(\"where[$i][op]\", \"=\") . \": <select name='where[$i][val]'>\" . optionlist($options, idx($where[$key], \"val\"), true) . \"</select></div>\\n\";\n\t\t\t\tunset($columns[$name]);\n\t\t\t}\n\t\t}\n\t\t$i = 0;\n\t\tforeach ($where as $val) {\n\t\t\tif (($val[\"col\"] == \"\" || $columns[$val[\"col\"]]) && \"$val[col]$val[val]\" != \"\") {\n\t\t\t\techo \"<div><select name='where[$i][col]'><option value=''>(\" . lang('anywhere') . \")\" . optionlist($columns, $val[\"col\"], true) . \"</select>\";\n\t\t\t\techo html_select(\"where[$i][op]\", array(-1 => \"\") + adminer()->operators(), $val[\"op\"]);\n\t\t\t\techo \"<input type='search' name='where[$i][val]' value='\" . h($val[\"val\"]) . \"'>\" . script(\"mixin(qsl('input'), {onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});\", \"\") . \"</div>\\n\";\n\t\t\t\t$i++;\n\t\t\t}\n\t\t}\n\t\techo \"<div><select name='where[$i][col]'><option value=''>(\" . lang('anywhere') . \")\" . optionlist($columns, null, true) . \"</select>\";\n\t\techo script(\"qsl('select').onchange = selectAddRow;\", \"\");\n\t\techo html_select(\"where[$i][op]\", array(-1 => \"\") + adminer()->operators());\n\t\techo \"<input type='search' name='where[$i][val]'></div>\";\n\t\techo script(\"mixin(qsl('input'), {onchange: function () { this.parentNode.firstChild.onchange(); }, onsearch: selectSearchSearch});\");\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\tfunction selectOrderPrint($order, $columns, $indexes) {\n\t\t//! desc\n\t\t$orders = array();\n\t\tforeach ($indexes as $key => $index) {\n\t\t\t$order = array();\n\t\t\tforeach ($index[\"columns\"] as $val) {\n\t\t\t\t$order[] = $columns[$val];\n\t\t\t}\n\t\t\tif (count(array_filter($order, 'strlen')) > 1 && $key != \"PRIMARY\") {\n\t\t\t\t$orders[$key] = implode(\", \", $order);\n\t\t\t}\n\t\t}\n\t\tif ($orders) {\n\t\t\techo '<fieldset><legend>' . lang('Sort') . \"</legend><div>\";\n\t\t\techo \"<select name='index_order'>\" . optionlist(array(\"\" => \"\") + $orders, (idx($_GET[\"order\"], 0) != \"\" ? \"\" : $_GET[\"index_order\"]), true) . \"</select>\";\n\t\t\techo \"</div></fieldset>\\n\";\n\t\t}\n\t\tif ($_GET[\"order\"]) {\n\t\t\techo \"<div style='display: none;'>\" . hidden_fields(array(\n\t\t\t\t\"order\" => array(1 => reset($_GET[\"order\"])),\n\t\t\t\t\"desc\" => ($_GET[\"desc\"] ? array(1 => 1) : array()),\n\t\t\t)) . \"</div>\\n\";\n\t\t}\n\t}\n\n\tfunction selectLimitPrint($limit) {\n\t\techo \"<fieldset><legend>\" . lang('Limit') . \"</legend><div>\"; // <div> for easy styling\n\t\techo html_select(\"limit\", array(\"\", 50, 100), $limit);\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\tfunction selectLengthPrint($text_length) {\n\t}\n\n\tfunction selectActionPrint($indexes) {\n\t\techo \"<fieldset><legend>\" . lang('Action') . \"</legend><div>\";\n\t\techo \"<input type='submit' value='\" . lang('Select') . \"'>\";\n\t\techo \"</div></fieldset>\\n\";\n\t}\n\n\tfunction selectCommandPrint() {\n\t\treturn true;\n\t}\n\n\tfunction selectImportPrint() {\n\t\treturn true;\n\t}\n\n\tfunction selectEmailPrint($emailFields, $columns) {\n\t}\n\n\tfunction selectColumnsProcess($columns, $indexes) {\n\t\treturn array(array(), array());\n\t}\n\n\tfunction selectSearchProcess($fields, $indexes) {\n\t\t$return = array();\n\t\tforeach ((array) $_GET[\"where\"] as $key => $where) {\n\t\t\t$col = $where[\"col\"];\n\t\t\t$op = $where[\"op\"];\n\t\t\t$val = $where[\"val\"];\n\t\t\tif (($key >= 0 && $col != \"\") || $val != \"\") {\n\t\t\t\t$conds = array();\n\t\t\t\tforeach (($col != \"\" ? array($col => $fields[$col]) : $fields) as $name => $field) {\n\t\t\t\t\tif ($col != \"\" || is_numeric($val) || !preg_match(number_type(), $field[\"type\"])) {\n\t\t\t\t\t\t$name = idf_escape($name);\n\t\t\t\t\t\tif ($col != \"\" && $field[\"type\"] == \"enum\") {\n\t\t\t\t\t\t\t$in = array();\n\t\t\t\t\t\t\tforeach ($val as $val1) {\n\t\t\t\t\t\t\t\tif (preg_match('~val-~', $val1)) {\n\t\t\t\t\t\t\t\t\t$in[] = q(substr($val1, 4));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$conds[] = (in_array(\"null\", $val) ? \"$name IS NULL OR \" : \"\") . ($in ? \"$name IN (\" . implode(\", \", $in) . \")\" : \"0\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$text_type = preg_match('~char|text|enum|set~', $field[\"type\"]);\n\t\t\t\t\t\t\t$value = adminer()->processInput($field, (!$op && $text_type && preg_match('~^[^%]+$~', $val) ? \"%$val%\" : $val));\n\t\t\t\t\t\t\t$conds[] = driver()->convertSearch($name, $where, $field) . ($value == \"NULL\" ? \" IS\" . ($op == \">=\" ? \" NOT\" : \"\") . \" $value\"\n\t\t\t\t\t\t\t\t: (in_array($op, adminer()->operators()) || $op == \"=\" ? \" $op $value\"\n\t\t\t\t\t\t\t\t: ($text_type ? \" LIKE $value\"\n\t\t\t\t\t\t\t\t: \" IN (\" . ($value[0] == \"'\" ? str_replace(\",\", \"', '\", $value) : $value) . \")\"\n\t\t\t\t\t\t\t)));\n\t\t\t\t\t\t\tif ($key < 0 && $val == \"0\") {\n\t\t\t\t\t\t\t\t$conds[] = \"$name IS NULL\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$return[] = ($conds ? \"(\" . implode(\" OR \", $conds) . \")\" : \"1 = 0\");\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction selectOrderProcess($fields, $indexes) {\n\t\t$index_order = $_GET[\"index_order\"];\n\t\tif ($index_order != \"\") {\n\t\t\tunset($_GET[\"order\"][1]);\n\t\t}\n\t\tif ($_GET[\"order\"]) {\n\t\t\treturn array(idf_escape(reset($_GET[\"order\"])) . ($_GET[\"desc\"] ? \" DESC\" : \"\"));\n\t\t}\n\t\tforeach (($index_order != \"\" ? array($indexes[$index_order]) : $indexes) as $index) {\n\t\t\tif ($index_order != \"\" || $index[\"type\"] == \"INDEX\") {\n\t\t\t\t$has_desc = array_filter($index[\"descs\"]);\n\t\t\t\t$desc = false;\n\t\t\t\tforeach ($index[\"columns\"] as $val) {\n\t\t\t\t\tif (preg_match('~date|timestamp~', $fields[$val][\"type\"])) {\n\t\t\t\t\t\t$desc = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$return = array();\n\t\t\t\tforeach ($index[\"columns\"] as $key => $val) {\n\t\t\t\t\t$return[] = idf_escape($val) . (($has_desc ? $index[\"descs\"][$key] : $desc) ? \" DESC\" : \"\");\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\t\t}\n\t\treturn array();\n\t}\n\n\tfunction selectLimitProcess() {\n\t\treturn (isset($_GET[\"limit\"]) ? intval($_GET[\"limit\"]) : 50);\n\t}\n\n\tfunction selectLengthProcess() {\n\t\treturn \"100\";\n\t}\n\n\tfunction selectEmailProcess($where, $foreignKeys) {\n\t\treturn false;\n\t}\n\n\tfunction selectQueryBuild($select, $where, $group, $order, $limit, $page) {\n\t\treturn \"\";\n\t}\n\n\tfunction messageQuery($query, $time, $failed = false) {\n\t\treturn \" <span class='time'>\" . @date(\"H:i:s\") . \"</span><!--\\n\" . str_replace(\"--\", \"--><!-- \", $query) . \"\\n\" . ($time ? \"($time)\\n\" : \"\") . \"-->\";\n\t}\n\n\tfunction editRowPrint($table, $fields, $row, $update) {\n\t}\n\n\tfunction editFunctions($field) {\n\t\t$return = array();\n\t\tif ($field[\"null\"] && preg_match('~blob~', $field[\"type\"])) {\n\t\t\t$return[\"NULL\"] = lang('empty');\n\t\t}\n\t\t$return[\"\"] = ($field[\"null\"] || $field[\"auto_increment\"] || like_bool($field) ? \"\" : \"*\");\n\t\t//! respect driver\n\t\tif (preg_match('~date|time~', $field[\"type\"])) {\n\t\t\t$return[\"now\"] = lang('now');\n\t\t}\n\t\tif (preg_match('~_(md5|sha1)$~i', $field[\"field\"], $match)) {\n\t\t\t$return[] = strtolower($match[1]);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tif ($field[\"type\"] == \"enum\") {\n\t\t\treturn (isset($_GET[\"select\"]) ? \"<label><input type='radio'$attrs value='orig' checked><i>\" . lang('original') . \"</i></label> \" : \"\")\n\t\t\t\t. enum_input(\"radio\", $attrs, $field, $value, lang('empty'))\n\t\t\t;\n\t\t}\n\t\t$options = $this->foreignKeyOptions($table, $field[\"field\"], $value);\n\t\tif ($options !== null) {\n\t\t\treturn (is_array($options)\n\t\t\t\t? \"<select$attrs>\" . optionlist($options, $value, true) . \"</select>\"\n\t\t\t\t: \"<input value='\" . h($value) . \"'$attrs class='hidden'>\"\n\t\t\t\t\t. \"<input value='\" . h($options) . \"' class='jsonly'>\"\n\t\t\t\t\t. \"<div></div>\"\n\t\t\t\t\t. script(\"qsl('input').oninput = partial(whisper, '\" . ME . \"script=complete&source=\" . urlencode($table) . \"&field=\" . urlencode($field[\"field\"]) . \"&value='); qsl('div').onclick = whisperClick;\", \"\")\n\t\t\t);\n\t\t}\n\t\tif (like_bool($field)) {\n\t\t\treturn '<input type=\"checkbox\" value=\"1\"' . (preg_match('~^(1|t|true|y|yes|on)$~i', $value) ? ' checked' : '') . \"$attrs>\";\n\t\t}\n\t\t$hint = \"\";\n\t\tif (preg_match('~time~', $field[\"type\"])) {\n\t\t\t$hint = lang('HH:MM:SS');\n\t\t}\n\t\tif (preg_match('~date|timestamp~', $field[\"type\"])) {\n\t\t\t$hint = lang('[yyyy]-mm-dd') . ($hint ? \" [$hint]\" : \"\");\n\t\t}\n\t\tif ($hint) {\n\t\t\treturn \"<input value='\" . h($value) . \"'$attrs> ($hint)\"; //! maxlength\n\t\t}\n\t\tif (preg_match('~_(md5|sha1)$~i', $field[\"field\"])) {\n\t\t\treturn \"<input type='password' value='\" . h($value) . \"'$attrs>\";\n\t\t}\n\t\treturn '';\n\t}\n\n\tfunction editHint($table, $field, $value) {\n\t\treturn (preg_match('~\\s+(\\[.*\\])$~', ($field[\"comment\"] != \"\" ? $field[\"comment\"] : $field[\"field\"]), $match) ? h(\" $match[1]\") : '');\n\t}\n\n\tfunction processInput($field, $value, $function = \"\") {\n\t\tif ($function == \"now\") {\n\t\t\treturn \"$function()\";\n\t\t}\n\t\t$return = $value;\n\t\tif (preg_match('~date|timestamp~', $field[\"type\"]) && preg_match('(^' . str_replace('\\$1', '(?P<p1>\\d*)', preg_replace('~(\\\\\\\\\\\\$([2-6]))~', '(?P<p\\2>\\d{1,2})', preg_quote(lang('$1-$3-$5')))) . '(.*))', $value, $match)) {\n\t\t\t$return = ($match[\"p1\"] != \"\" ? $match[\"p1\"] : ($match[\"p2\"] != \"\" ? ($match[\"p2\"] < 70 ? 20 : 19) . $match[\"p2\"] : gmdate(\"Y\"))) . \"-$match[p3]$match[p4]-$match[p5]$match[p6]\" . end($match);\n\t\t}\n\t\t$return = q($return);\n\t\tif ($value == \"\" && like_bool($field)) {\n\t\t\t$return = \"'0'\";\n\t\t} elseif ($value == \"\" && ($field[\"null\"] || !preg_match('~char|text~', $field[\"type\"]))) {\n\t\t\t$return = \"NULL\";\n\t\t} elseif (preg_match('~^(md5|sha1)$~', $function)) {\n\t\t\t$return = \"$function($return)\";\n\t\t}\n\t\treturn unconvert_field($field, $return);\n\t}\n\n\tfunction dumpOutput() {\n\t\treturn array();\n\t}\n\n\tfunction dumpFormat() {\n\t\treturn array('csv' => 'CSV,', 'csv;' => 'CSV;', 'tsv' => 'TSV');\n\t}\n\n\tfunction dumpDatabase($db) {\n\t}\n\n\tfunction dumpTable($table, $style, $is_view = 0) {\n\t\techo \"\\xef\\xbb\\xbf\"; // UTF-8 byte order mark\n\t}\n\n\tfunction dumpData($table, $style, $query) {\n\t\t$result = connection()->query($query, 1); // 1 - MYSQLI_USE_RESULT\n\t\tif ($result) {\n\t\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t\tif ($style == \"table\") {\n\t\t\t\t\tdump_csv(array_keys($row));\n\t\t\t\t\t$style = \"INSERT\";\n\t\t\t\t}\n\t\t\t\tdump_csv($row);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction dumpFilename($identifier) {\n\t\treturn friendly_url($identifier);\n\t}\n\n\tfunction dumpHeaders($identifier, $multi_table = false) {\n\t\t$ext = \"csv\";\n\t\theader(\"Content-Type: text/csv; charset=utf-8\");\n\t\treturn $ext;\n\t}\n\n\tfunction dumpFooter() {\n\t}\n\n\tfunction importServerPath() {\n\t}\n\n\tfunction homepage() {\n\t\treturn true;\n\t}\n\n\tfunction navigation($missing) {\n\t\techo \"<h1>\" . adminer()->name() . \" <span class='version'>\" . VERSION;\n\t\t$new_version = $_COOKIE[\"adminer_version\"];\n\t\techo \" <a href='https://www.adminer.org/editor/#download'\" . target_blank() . \" id='version'>\" . (version_compare(VERSION, $new_version) < 0 ? h($new_version) : \"\") . \"</a>\";\n\t\techo \"</span></h1>\\n\";\n\t\tswitch_lang();\n\t\tif ($missing == \"auth\") {\n\t\t\t$first = true;\n\t\t\tforeach ((array) $_SESSION[\"pwds\"] as $vendor => $servers) {\n\t\t\t\tforeach ($servers[\"\"] as $username => $password) {\n\t\t\t\t\tif ($password !== null) {\n\t\t\t\t\t\tif ($first) {\n\t\t\t\t\t\t\techo \"<ul id='logins'>\";\n\t\t\t\t\t\t\techo script(\"mixin(qs('#logins'), {onmouseover: menuOver, onmouseout: menuOut});\");\n\t\t\t\t\t\t\t$first = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\techo \"<li><a href='\" . h(auth_url($vendor, \"\", $username)) . \"'>\" . ($username != \"\" ? h($username) : \"<i>\" . lang('empty') . \"</i>\") . \"</a>\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tadminer()->databasesPrint($missing);\n\t\t\tif ($missing != \"db\" && $missing != \"ns\") {\n\t\t\t\t$table_status = table_status('', true);\n\t\t\t\tif (!$table_status) {\n\t\t\t\t\techo \"<p class='message'>\" . lang('No tables.') . \"\\n\";\n\t\t\t\t} else {\n\t\t\t\t\tadminer()->tablesPrint($table_status);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction syntaxHighlighting($tables) {\n\t}\n\n\tfunction databasesPrint($missing) {\n\t}\n\n\tfunction tablesPrint($tables) {\n\t\techo \"<ul id='tables'>\";\n\t\techo script(\"mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});\");\n\t\tforeach ($tables as $row) {\n\t\t\techo '<li>';\n\t\t\t$name = adminer()->tableName($row);\n\t\t\tif ($name != \"\") { // ignore tables without name\n\t\t\t\techo \"<a href='\" . h(ME) . 'select=' . urlencode($row[\"Name\"]) . \"'\"\n\t\t\t\t\t. bold($_GET[\"select\"] == $row[\"Name\"] || $_GET[\"edit\"] == $row[\"Name\"], \"select\")\n\t\t\t\t\t. \" title='\" . lang('Select data') . \"'>$name</a>\\n\"\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t\techo \"</ul>\\n\";\n\t}\n\n\tfunction _foreignColumn($foreignKeys, $column) {\n\t\tforeach ((array) $foreignKeys[$column] as $foreignKey) {\n\t\t\tif (count($foreignKey[\"source\"]) == 1) {\n\t\t\t\t$name = adminer()->rowDescription($foreignKey[\"table\"]);\n\t\t\t\tif ($name != \"\") {\n\t\t\t\t\t$id = idf_escape($foreignKey[\"target\"][0]);\n\t\t\t\t\treturn array($foreignKey[\"table\"], $id, $name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate function foreignKeyOptions($table, $column, $value = null) {\n\t\tif (list($target, $id, $name) = $this->_foreignColumn(column_foreign_keys($table), $column)) {\n\t\t\t$return = &$this->values[$target];\n\t\t\tif ($return === null) {\n\t\t\t\t$table_status = table_status1($target);\n\t\t\t\t$return = ($table_status[\"Rows\"] > 1000 ? \"\" : array(\"\" => \"\") + get_key_vals(\"SELECT $id, $name FROM \" . table($target) . \" ORDER BY 2\"));\n\t\t\t}\n\t\t\tif (!$return && $value !== null) {\n\t\t\t\treturn get_val(\"SELECT $name FROM \" . table($target) . \" WHERE $id = \" . q($value));\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "editor/include/connect.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nconnection()->select_db(adminer()->database());\n"
  },
  {
    "path": "editor/include/editing.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nfunction doc_link(array $paths, string $text = \"\"): string {\n\treturn \"\";\n}\n\n/** Encode e-mail header in UTF-8 */\nfunction email_header(string $header): string {\n\t// iconv_mime_encode requires iconv, imap_8bit requires IMAP extension\n\treturn \"=?UTF-8?B?\" . base64_encode($header) . \"?=\"; //! split long lines\n}\n\n/** Send e-mail in UTF-8\n* @param array{error?:list<int>, type?:list<string>, name?:list<string>, tmp_name?:list<string>} $files\n*/\nfunction send_mail(string $email, string $subject, string $message, string $from = \"\", array $files = array()): bool {\n\t$eol = PHP_EOL;\n\t$message = str_replace(\"\\n\", $eol, wordwrap(str_replace(\"\\r\", \"\", \"$message\\n\")));\n\t$boundary = uniqid(\"boundary\");\n\t$attachments = \"\";\n\tforeach ((array) $files[\"error\"] as $key => $val) {\n\t\tif (!$val) {\n\t\t\t$attachments .= \"--$boundary$eol\"\n\t\t\t\t. \"Content-Type: \" . str_replace(\"\\n\", \"\", $files[\"type\"][$key]) . $eol\n\t\t\t\t. \"Content-Disposition: attachment; filename=\\\"\" . preg_replace('~[\"\\n]~', '', $files[\"name\"][$key]) . \"\\\"$eol\"\n\t\t\t\t. \"Content-Transfer-Encoding: base64$eol$eol\"\n\t\t\t\t. chunk_split(base64_encode(file_get_contents($files[\"tmp_name\"][$key])), 76, $eol) . $eol\n\t\t\t;\n\t\t}\n\t}\n\t$beginning = \"\";\n\t$headers = \"Content-Type: text/plain; charset=utf-8$eol\" . \"Content-Transfer-Encoding: 8bit\";\n\tif ($attachments) {\n\t\t$attachments .= \"--$boundary--$eol\";\n\t\t$beginning = \"--$boundary$eol$headers$eol$eol\";\n\t\t$headers = \"Content-Type: multipart/mixed; boundary=\\\"$boundary\\\"\";\n\t}\n\t$headers .= $eol . \"MIME-Version: 1.0$eol\" . \"X-Mailer: Adminer Editor\"\n\t\t. ($from ? $eol . \"From: \" . str_replace(\"\\n\", \"\", $from) : \"\") //! should escape display name\n\t;\n\treturn mail($email, email_header($subject), $beginning . $message . $attachments, $headers);\n}\n\n/** Check whether the column looks like boolean\n* @param array{type: string, length?: string} $field single field returned from fields()\n*/\nfunction like_bool(array $field): bool {\n\treturn $field[\"type\"] == \"bool\" || (preg_match('~bit|tinyint~', $field[\"type\"]) && $field[\"length\"] == 1);\n}\n"
  },
  {
    "path": "editor/index.php",
    "content": "<?php\n/** Adminer Editor - Compact database editor\n* @link https://www.adminer.org/\n* @author Jakub Vrana, https://www.vrana.cz/\n* @copyright 2009 Jakub Vrana\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\n\nnamespace Adminer;\n\ninclude \"../adminer/include/bootstrap.inc.php\";\nadd_driver(DRIVER, lang('Login'));\n\nif (isset($_GET[\"select\"]) && ($_POST[\"edit\"] || $_POST[\"clone\"]) && !$_POST[\"save\"]) {\n\t$_GET[\"edit\"] = $_GET[\"select\"];\n}\n\nif (isset($_GET[\"download\"])) {\n\tinclude \"../adminer/download.inc.php\";\n} elseif (isset($_GET[\"edit\"])) {\n\tinclude \"../adminer/edit.inc.php\";\n} elseif (isset($_GET[\"select\"])) {\n\tinclude \"../adminer/select.inc.php\";\n} elseif (isset($_GET[\"script\"])) {\n\tinclude \"./script.inc.php\";\n} else {\n\tinclude \"./db.inc.php\";\n}\n\n// each page calls its own page_header(), if the footer should not be called then the page exits\npage_footer();\n"
  },
  {
    "path": "editor/script.inc.php",
    "content": "<?php\nnamespace Adminer;\n\nif ($_GET[\"script\"] == \"kill\") {\n\tconnection()->query(\"KILL \" . number($_POST[\"kill\"]));\n\n} elseif (list($table, $id, $name) = adminer()->_foreignColumn(column_foreign_keys($_GET[\"source\"]), $_GET[\"field\"])) { // complete\n\t$limit = 11;\n\t$result = connection()->query(\"SELECT $id, $name FROM \" . table($table) . \" WHERE \" . (preg_match('~^[0-9]+$~', $_GET[\"value\"]) ? \"$id = $_GET[value] OR \" : \"\") . \"$name LIKE \" . q(\"$_GET[value]%\") . \" ORDER BY 2 LIMIT $limit\");\n\tfor ($i=1; ($row = $result->fetch_row()) && $i < $limit; $i++) {\n\t\techo \"<a href='\" . h(ME . \"edit=\" . urlencode($table) . \"&where\" . urlencode(\"[\" . bracket_escape(idf_unescape($id)) . \"]\") . \"=\" . urlencode($row[0])) . \"'>\" . h($row[1]) . \"</a><br>\\n\";\n\t}\n\tif ($row) {\n\t\techo \"...\\n\";\n\t}\n}\n\nexit; // don't print footer\n"
  },
  {
    "path": "editor/sqlite.php",
    "content": "<?php\n// see ../plugins/editor-setup.php for an easier solution\n\nfunction adminer_object() {\n\tinclude_once \"../plugins/login-password-less.php\";\n\n\tclass AdminerCustomization extends Adminer\\Plugins {\n\t\tfunction loginFormField($name, $heading, $value) {\n\t\t\treturn parent::loginFormField($name, $heading, str_replace(\"value='server'\", \"value='sqlite'\", $value));\n\t\t}\n\t\tfunction database() {\n\t\t\treturn \"PATH_TO_YOUR_SQLITE_HERE\";\n\t\t}\n\t}\n\n\treturn new AdminerCustomization(array(\n\t\t// TODO: inline the result of password_hash() so that the password is not visible in source codes\n\t\tnew AdminerLoginPasswordLess(password_hash(\"YOUR_PASSWORD_HERE\", PASSWORD_DEFAULT)),\n\t));\n}\n\ninclude \"./index.php\";\n"
  },
  {
    "path": "editor/static/editing.js",
    "content": "'use strict'; // Editor specific functions\n\nfunction messagesPrint() {\n}\n\nfunction selectFieldChange() {\n}\n\nlet helpOpen;\n\nfunction helpMouseover() {\n}\n\nfunction helpMouseout() {\n}\n\nfunction helpClose() {\n}\n\n/** Display typeahead\n* @param string\n* @this HTMLInputElement\n*/\nfunction whisper(url) {\n\tconst field = this;\n\tfield.orig = field.value;\n\tfield.previousSibling.value = field.value; // accept number, reject string\n\treturn ajax(url + encodeURIComponent(field.value), xmlhttp => {\n\t\tif (xmlhttp.status && field.orig == field.value) { // ignore old responses\n\t\t\tfield.nextSibling.innerHTML = xmlhttp.responseText;\n\t\t\tfield.nextSibling.style.display = '';\n\t\t\tconst a = field.nextSibling.firstChild;\n\t\t\tif (a && a.firstChild.data == field.value) {\n\t\t\t\tfield.previousSibling.value = decodeURIComponent(a.href.replace(/.*=/, ''));\n\t\t\t\ta.classList.add('active');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/** Select typeahead value\n* @param MouseEvent\n* @return boolean false for success\n* @this HTMLDivElement\n*/\nfunction whisperClick(event) {\n\tconst field = this.previousSibling;\n\tconst el = event.target;\n\tif (isTag(el, 'a') && !(event.button || event.shiftKey || event.altKey || isCtrl(event))) {\n\t\tfield.value = el.firstChild.data;\n\t\tfield.previousSibling.value = decodeURIComponent(el.href.replace(/.*=/, ''));\n\t\tfield.nextSibling.style.display = 'none';\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "eslint.config.mjs",
    "content": "// prepend adminer/include/functions.js to adminer/include/editing.js and editor/include/editing.js, then delete\n\nimport { globalIgnores } from \"eslint/config\";\nimport js from \"@eslint/js\";\nimport globals from \"globals\";\n\nexport default [\n\tglobalIgnores([\"externals/\"]),\n\tjs.configs.recommended,\n\t{\n\t\tlanguageOptions: {\n\t\t\tglobals: {\n\t\t\t\t...globals.browser,\n\t\t\t\tjush: false, jushLinks: false,\n\t\t\t\tofflineMessage: false, thousandsSeparator: false, // include/design.inc.php\n\t\t\t\tindexColumns: false, // select.inc.php\n\t\t\t\ttablePos: false, em: false, // schema.inc.php\n\t\t\t}\n\t\t},\n\t\trules: {\n\t\t\t\"no-var\": \"error\",\n\t\t\t\"prefer-const\": \"error\",\n\t\t\t\"no-unused-vars\": \"off\", //! we want this only on global level\n\t\t},\n\t},\n];\n"
  },
  {
    "path": "lang.php",
    "content": "#!/usr/bin/env php\n<?php\ninclude __DIR__ . \"/adminer/include/errors.inc.php\";\n\nunset($_COOKIE[\"adminer_lang\"]);\n$_SESSION[\"lang\"] = $_SERVER[\"argv\"][1]; // Adminer functions read language from session\nif (isset($_SESSION[\"lang\"])) {\n\tif (isset($_SERVER[\"argv\"][2]) || !file_exists(__DIR__ . \"/adminer/lang/$_SESSION[lang].inc.php\")) {\n\t\techo \"Usage: php lang.php [lang]\\nPurpose: Update adminer/lang/*.inc.php from source code messages.\\n\";\n\t\texit(1);\n\t}\n}\n\n$messages_all = array();\nforeach (glob(__DIR__ . \"/{adminer,adminer/include,adminer/drivers,editor,editor/include}/*.php\", GLOB_BRACE) as $include) {\n\t$file = file_get_contents($include);\n\tif (preg_match_all(\"~[^>]lang\\\\(('(?:[^\\\\\\\\']+|\\\\\\\\.)*')([),])~\", $file, $matches)) { // lang() always uses apostrophes\n\t\t$messages_all += array_combine($matches[1], $matches[2]);\n\t}\n}\n\nforeach (glob(__DIR__ . \"/adminer/lang/\" . ($_SESSION[\"lang\"] ?: \"*\") . \".inc.php\") as $filename) {\n\t$lang = basename($filename, \".inc.php\");\n\tupdate_translations($lang, $messages_all, $filename, '~(\\$translations = array\\(\\n)(.*\\n)(?=\\);)~sU');\n\tif ($lang != \"xx\") {\n\t\tforeach (glob(__DIR__ . \"/plugins/*.php\") as $filename) {\n\t\t\t$file = file_get_contents($filename);\n\t\t\tif (preg_match('~extends Adminer\\\\\\\\Plugin~', $file)) {\n\t\t\t\tpreg_match_all(\"~\\\\\\$this->lang\\\\(('(?:[^\\\\\\\\']+|\\\\\\\\.)*')([),])~\", $file, $matches);\n\t\t\t\t$messages = array(\"''\" => \"\") + array_combine($matches[1], $matches[2]);\n\t\t\t\t$file = preg_replace(\"~(\\\\\\$translations = array\\\\((?!.*'$lang').*?)\\t\\\\);~s\", \"\\\\1\\t\\t'$lang' => array(\\n\\t\\t),\\n\\t);\", $file);\n\t\t\t\tfile_put_contents($filename, $file);\n\t\t\t\tupdate_translations($lang, $messages, $filename, \"~(\\\\\\$translations = array\\\\(.*'$lang' => array\\\\(\\n)(.*)(?=^\\t\\t\\\\),)~msU\", \"\\t\\t\\t\");\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction update_translations($lang, $messages, $filename, $pattern, $tabs = \"\\t\") {\n\t$file = file_get_contents($filename);\n\t$file = str_replace(\"\\r\", \"\", $file);\n\t$start = 0;\n\t$s = preg_replace_callback($pattern, function ($match) use ($lang, $messages, $filename, $file, $tabs, &$start) {\n\t\t$prefix = $match[1][0];\n\t\t$start = $match[2][1];\n\t\tpreg_match_all(\"~^(\\\\s*(?:// [^'].*\\\\s+)?)(?:// )?(('(?:[^\\\\\\\\']+|\\\\\\\\.)*') => (.*[^,\\n])),?~m\", $match[2][0], $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE);\n\t\t$s = \"\";\n\t\t$fullstop = ($lang == 'bn' || $lang == 'hi' ? '।' : (preg_match('~^(ja|zh)~', $lang) ? '。' : ($lang == 'he' ? '[^.]' : '\\.')));\n\t\tforeach ($matches as $match) {\n\t\t\tlist(, list($indent), list($line, $offset), list($en), list($translation)) = $match;\n\t\t\tif (isset($messages[$en])) {\n\t\t\t\t// keep current messages\n\t\t\t\t$s .= \"$indent$line,\\n\";\n\t\t\t\tunset($messages[$en]);\n\t\t\t\t$en_fullstop = (substr($en, -2, 1) == \".\");\n\t\t\t\t//! check in array\n\t\t\t\tif ($en != \"','\" && ($en_fullstop xor preg_match(\"~$fullstop'\\)?\\$~\", $line))) {\n\t\t\t\t\tif ($lang != ($en_fullstop ? \"ja\" : \"he\")) { // fullstop is optional in 'ja', forbidden in 'he'\n\t\t\t\t\t\techo \"$filename:\" . (substr_count($file, \"\\n\", 0, $start + $offset) + 1) . \":Not matching fullstop: $line\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (preg_match('~%~', $en) xor preg_match('~%~', $translation)) {\n\t\t\t\t\techo \"$filename:\" . (substr_count($file, \"\\n\", 0, $start + $offset) + 1) . \":Not matching placeholder.\\n\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// comment deprecated messages\n\t\t\t\t$s .= \"$indent// $line,\\n\";\n\t\t\t}\n\t\t}\n\t\tif ($messages) {\n\t\t\t$start += strlen($s);\n\t\t\tforeach ($messages as $idf => $val) {\n\t\t\t\t// add new messages\n\t\t\t\tif ($val == \",\" && strpos($idf, \"%d\")) {\n\t\t\t\t\t$s .= \"$tabs$idf => array(),\\n\";\n\t\t\t\t} elseif ($lang != \"en\") {\n\t\t\t\t\t$s .= \"$tabs$idf => null,\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn $prefix . $s;\n\t}, $file, -1, $count, PREG_OFFSET_CAPTURE);\n\tif ($s != $file) {\n\t\t$s = str_replace(\"array(\\n\\t\\t\\t'' => null,\\n\\t\\t),\", \"array('' => null),\", $s);\n\t\tfile_put_contents($filename, $s);\n\t\techo \"$filename:\" . (substr_count($s, \"\\n\", 0, $start) + 1) . \":Updated.\\n\";\n\t}\n}\n"
  },
  {
    "path": "phpcs.xml",
    "content": "<?xml version=\"1.0\"?>\n<ruleset name=\"Adminer Coding Standard\">\n\t<description>The coding standard for Adminer.</description>\n\t<arg value=\"s\"/>\n\t<arg name=\"parallel\" value=\"8\"/>\n\n\t<file>.</file>\n\t<exclude-pattern>/externals/</exclude-pattern>\n\t<exclude-pattern>/designs/</exclude-pattern>\n\t<exclude-pattern>/(adminer|editor)[-.]</exclude-pattern>\n\n\t<rule ref=\"PSR12\">\n\t\t<exclude name=\"Generic.WhiteSpace.DisallowTabIndent\"/><!-- Replaced by: Generic.WhiteSpace.DisallowSpaceIndent -->\n\t\t<exclude name=\"PSR1.Files.SideEffects.FoundWithSymbols\"/>\n\t\t<exclude name=\"PSR1.Classes.ClassDeclaration.MultipleClasses\"/>\n\t\t<exclude name=\"PSR2.Classes.ClassDeclaration.OpenBraceNewLine\"/><!-- Replaced by: Generic.Classes.OpeningBraceSameLine -->\n\t\t<exclude name=\"PSR2.Classes.PropertyDeclaration.Underscore\"/>\n\t\t<exclude name=\"PSR2.Methods.MethodDeclaration.Underscore\"/>\n\t\t<exclude name=\"Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine\"/><!-- Replaced by: Generic.Functions.OpeningFunctionBraceKernighanRitchie -->\n\t\t<exclude name=\"PSR12.Properties.ConstantVisibility.NotFound\"/><!-- PHP 7.1 is not required. -->\n\n\t\t<!-- More readable. -->\n\t\t<exclude name=\"PSR12.Files.FileHeader.SpacingAfterBlock\"/>\n\t\t<exclude name=\"PSR12.Classes.OpeningBraceSpace.Found\"/>\n\t\t<exclude name=\"PSR12.Operators.OperatorSpacing.NoSpaceBefore\"/>\n\t\t<exclude name=\"PSR12.Operators.OperatorSpacing.NoSpaceAfter\"/>\n\t\t<exclude name=\"Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose\"/>\n\n\t\t<!-- Saves bytes. -->\n\t\t<exclude name=\"PSR2.Classes.PropertyDeclaration.Multiple\"/>\n\t\t<exclude name=\"PSR2.Classes.PropertyDeclaration.ScopeMissing\"/>\n\t\t<exclude name=\"PSR12.Classes.ClassInstantiation.MissingParentheses\"/>\n\t\t<exclude name=\"Squiz.Scope.MethodScope.Missing\"/>\n\n\t\t<!-- False positives. -->\n\t\t<exclude name=\"Generic.WhiteSpace.ScopeIndent.Incorrect\"/>\n\t\t<exclude name=\"Generic.WhiteSpace.ScopeIndent.IncorrectExact\"/>\n\t</rule>\n\n\t<rule ref=\"Generic.WhiteSpace.ScopeIndent\">\n\t\t<properties>\n\t\t\t<property name=\"ignoreIndentationTokens\" type=\"array\">\n\t\t\t\t<element value=\"T_OPEN_TAG\"/>\n\t\t\t</property>\n\t\t</properties>\n\t</rule>\n\n\t<rule ref=\"PSR1.Methods.CamelCapsMethodName.NotCamelCaps\">\n\t\t<exclude-pattern>adminer/drivers/</exclude-pattern>\n\t\t<exclude-pattern>adminer/include/db.inc.php</exclude-pattern>\n\t\t<exclude-pattern>adminer/include/pdo.inc.php</exclude-pattern>\n\t\t<exclude-pattern>adminer/plugins/foreign-system.php</exclude-pattern>\n\t\t<exclude-pattern>adminer/plugins/drivers/</exclude-pattern>\n\t</rule>\n\n\t<rule ref=\"Generic.Files.LineLength\">\n\t\t<properties>\n\t\t\t<property name=\"lineLimit\" value=\"250\"/>\n\t\t</properties>\n\t\t<exclude-pattern>adminer/lang/</exclude-pattern>\n\t\t<exclude-pattern>plugins/foreign-system.php</exclude-pattern>\n\t</rule>\n\n\t<rule ref=\"PSR1.Classes.ClassDeclaration.MissingNamespace\">\n\t\t<exclude-pattern>plugins/[^/]+\\.php</exclude-pattern>\n\t\t<exclude-pattern>editor/(example|sqlite)\\.php</exclude-pattern>\n\t</rule>\n\n\t<rule ref=\"Generic.Arrays.DisallowShortArraySyntax\"/>\n\t<rule ref=\"Generic.Classes.OpeningBraceSameLine\"/>\n\t<rule ref=\"Generic.CodeAnalysis.EmptyPHPStatement\"/>\n\t<rule ref=\"Generic.CodeAnalysis.EmptyStatement\"/>\n\t<rule ref=\"Generic.CodeAnalysis.ForLoopShouldBeWhileLoop\"/>\n\t<rule ref=\"Generic.CodeAnalysis.JumbledIncrementer\"/>\n\t<rule ref=\"Generic.CodeAnalysis.RequireExplicitBooleanOperatorPrecedence\"/>\n\t<rule ref=\"Generic.CodeAnalysis.UnconditionalIfStatement\"/>\n\t<rule ref=\"Generic.CodeAnalysis.UnnecessaryFinalModifier\"/>\n\t<rule ref=\"Generic.CodeAnalysis.UselessOverridingMethod\"/>\n\t<rule ref=\"Generic.Files.EndFileNewline\"/>\n\t<rule ref=\"Generic.Files.LowercasedFilename\"/>\n\t<rule ref=\"Generic.Formatting.SpaceAfterCast\"/>\n\t<rule ref=\"Generic.Functions.CallTimePassByReference\"/>\n\t<rule ref=\"Generic.Functions.OpeningFunctionBraceKernighanRitchie\"/>\n\t<rule ref=\"Generic.NamingConventions.ConstructorName\"/>\n\t<rule ref=\"Generic.PHP.BacktickOperator\"/>\n\t<rule ref=\"Generic.PHP.DisallowRequestSuperglobal\"/>\n\t<rule ref=\"Generic.PHP.ForbiddenFunctions\"/>\n\t<rule ref=\"Generic.Strings.UnnecessaryHeredoc\"/>\n\t<rule ref=\"Generic.VersionControl.GitMergeConflict\"/>\n\t<rule ref=\"Generic.WhiteSpace.DisallowSpaceIndent\"/>\n\t<rule ref=\"Generic.WhiteSpace.LanguageConstructSpacing\"/>\n\n\t<rule ref=\"Squiz.Arrays.ArrayBracketSpacing\"/>\n\t<rule ref=\"Squiz.Classes.LowercaseClassKeywords\"/>\n\t<rule ref=\"Squiz.Classes.SelfMemberReference\"/>\n\t<rule ref=\"Squiz.CSS.ClassDefinitionNameSpacing\"/>\n\t<rule ref=\"Squiz.CSS.ColonSpacing\"/>\n\t<rule ref=\"Squiz.CSS.DuplicateClassDefinition\"/>\n\t<rule ref=\"Squiz.CSS.DuplicateStyleDefinition\"/>\n\t<rule ref=\"Squiz.CSS.EmptyClassDefinition\"/>\n\t<rule ref=\"Squiz.CSS.EmptyStyleDefinition\"/>\n\t<rule ref=\"Squiz.CSS.ForbiddenStyles\"/>\n\t<rule ref=\"Squiz.CSS.Indentation\"/>\n\t<rule ref=\"Squiz.CSS.MissingColon\"/>\n\t<rule ref=\"Squiz.CSS.Opacity\"/>\n\t<rule ref=\"Squiz.CSS.SemicolonSpacing\"/>\n\t<rule ref=\"Squiz.Functions.FunctionDuplicateArgument\"/>\n\t<rule ref=\"Squiz.Objects.ObjectMemberComma\"/>\n\t<rule ref=\"Squiz.Operators.IncrementDecrementUsage\"/>\n\t<rule ref=\"Squiz.Operators.ValidLogicalOperators\"/>\n\t<rule ref=\"Squiz.PHP.DiscouragedFunctions\"/>\n\t<rule ref=\"Squiz.PHP.Eval\"/>\n\t<rule ref=\"Squiz.PHP.Heredoc\"/>\n\t<rule ref=\"Squiz.PHP.InnerFunctions\"/>\n\t<rule ref=\"Squiz.PHP.LowercasePHPFunctions\"/>\n\t<rule ref=\"Squiz.PHP.NonExecutableCode\"/>\n\t<rule ref=\"Squiz.Scope.StaticThisUsage\"/>\n\t<rule ref=\"Squiz.WhiteSpace.FunctionOpeningBraceSpace\"/>\n\t<rule ref=\"Squiz.WhiteSpace.LogicalOperatorSpacing\"/>\n\t<rule ref=\"Squiz.WhiteSpace.ObjectOperatorSpacing\"/>\n\n\t<!--\n\tThis is slow and has false positives but it's useful occasionally.\n\thttps://github.com/PHPCompatibility/PHPCompatibility\n\t<rule ref=\"PHPCompatibility\"/>\n\t<config name=\"testVersion\" value=\"5.3-\"/>\n\t<rule ref=\"PHPCompatibility.Extensions.RemovedExtensions\">\n\t\t<exclude name=\"PHPCompatibility.Extensions.RemovedExtensions.mysql_DeprecatedRemoved\"/>\n\t\t<exclude name=\"PHPCompatibility.Extensions.RemovedExtensions.ibaseRemoved\"/>\n\t</rule>\n\t<rule ref=\"PHPCompatibility.Constants.RemovedConstants\">\n\t\t<exclude-pattern>adminer/plugins/drivers/firebird.php</exclude-pattern>\n\t</rule>\n\t<rule ref=\"PHPCompatibility.FunctionUse.RemovedFunctions\">\n\t\t<exclude-pattern>adminer/plugins/drivers/firebird.php</exclude-pattern>\n\t</rule>\n\t-->\n</ruleset>\n"
  },
  {
    "path": "phpstan.neon",
    "content": "parameters:\n\tlevel: 6\n\tcheckNullables: true # level 8\n\n\tignoreErrors:\n\t\t# need to fix\n\t\t- \"~^Function Adminer\\\\\\\\fields_from_edit\\\\(\\\\) should return|Adminer\\\\\\\\Driver::\\\\$primary~\" # Mongo and SimpleDB\n\t\t- \"~Adminer\\\\\\\\Result.*mysqli_result~\" # mysqli_result\n\t\t- \"~Function Adminer\\\\\\\\queries\\\\(\\\\) never returns Adminer\\\\\\\\Result~\" # mysqli_result\n\n\t\t# not real problems\n\t\t- identifier: include.fileNotFound # includes in include/ relative from index.php\n\t\t- \"~^Function (set_magic_quotes_runtime|mysql_)~\" # PHP < 7 functions\n\t\t- \"~an unknown class OCI-?Lob~\" # this looks like PHPStan bug\n\t\t- \"~^Variable \\\\$error might not be defined~\" # declared in bootstrap.inc.php\n\t\t- \"~^Constant LANG not found~\" # defined in lang.inc.php\n\t\t- \"~ an undefined \\\\w+ Adminer\\\\\\\\Db::~\" # defined in that versions of Db\n\t\t- \"~^Call to an undefined method Adminer\\\\\\\\Result::seek~\" # defined in MS SQL\n\t\t- \"~^Call to an undefined method Adminer\\\\\\\\Driver::(setUserTypes|tableOid)~\" # defined in PostgreSQL\n\t\t- \"~^Access to an undefined property Adminer\\\\\\\\Driver::\\\\$nsOid~\" # defined in PostgreSQL\n\t\t- \"~expects int, float given~\" # this will work\n\t\t- \"~expects bool~\" # truthy values\n\t\t- \"~fread expects int<1, max>, 100000~\" # 1e6\n\t\t- \"~'strlen' given~\" # used as a bool callback\n\t\t- \"~between int<70100~\" # PHP_VERSION_ID check\n\n\t\t-\n\t\t\tmessage: \"~ type specified~\" # duplicate functions and methods\n\t\t\tpaths:\n\t\t\t\t- adminer/include/pdo.inc.php\n\t\t\t\t- adminer/drivers/*\n\n\t\t# it probably doesn't like $ar[$key] instead of isset($ar[$key]) and thinks that $ar[$key] is always set\n\t\t- identifier: identical.alwaysFalse\n\t\t- identifier: notEqual.alwaysFalse\n\t\t- identifier: notIdentical.alwaysTrue\n\t\t- identifier: booleanNot.alwaysTrue\n\t\t- identifier: booleanNot.alwaysFalse\n\t\t- identifier: booleanAnd.alwaysFalse\n\t\t- identifier: booleanAnd.leftAlwaysTrue\n\t\t- identifier: booleanAnd.rightAlwaysTrue\n\t\t- identifier: booleanAnd.rightAlwaysFalse\n\t\t- identifier: booleanOr.rightAlwaysTrue\n\t\t- identifier: ternary.alwaysTrue\n\t\t- identifier: if.alwaysTrue\n\t\t- identifier: isset.offset\n\t\t- identifier: deadCode.unreachable\n\t\t- \"~Function Adminer\\\\\\\\get_driver\\\\(\\\\) never returns null~\"\n\t\t- \"~on array\\\\{}~\"\n\n\tpaths:\n\t\t- adminer/drivers/mysql.inc.php # other drivers inherit the annotations so we take them from here\n\t\t- adminer/\n\tscanFiles:\n\t\t- compile.php # compile_file()\n\texcludePaths:\n\t\t- adminer/adminer-plugins*\n\t\t- adminer/designs.php\n\t\t- adminer/elastic.php\n\t\t- adminer/sqlite.php\n\n\tphpVersion:\n\t\tmin: 70100\n\t\tmax: 80499\n\n\ttypeAliases:\n\t\tTableStatus: \"array{Name:string, Engine?:?string, Comment?:string, Oid?:numeric-string, Rows?:?numeric-string, Collation?:string, Auto_increment?:?numeric-string, Data_length?:numeric-string, Index_length?:numeric-string, Data_free?:numeric-string, Create_options?:string, partition?:numeric-string, nspname?:string}\"\n\t\tField: \"array{field?:string, full_type:string, type:string, length:?numeric-string, unsigned:string, default?:string, null:bool, auto_increment:bool, collation:string, privileges:int[], comment:string, primary:bool, generated:string, orig?:string, on_update?:string, on_delete?:string, default_constraint?: string}\"\n\t\tFieldType: \"array{type:string, length:numeric-string, unsigned:string, collation:string}\" # subset of RoutineField and Field\n\t\tRoutineField: \"array{field:string, type:string, length:numeric-string, unsigned:string, null:bool, full_type:string, collation:string, inout?:string}\"\n\t\tIndex: \"array{type:string, columns:list<string>, lengths:list<numeric-string>, descs:list<?bool>, algorithm?:string, partial?:string}\"\n\t\tForeignKey: \"array{db?:string, ns?:string, table:string, source:list<string>, target:list<?string>, on_delete:string, on_update?:string, definition?:string, deferrable?:string}\"\n\t\tTrigger: \"array{Trigger?:string, Timing?:string, Event?:string, Of?:string, Type?:string, Statement?:string}\"\n\t\tRoutine: \"array{name?:string, fields:list<RoutineField>, comment:string, returns?:FieldType, definition:string, language?:string}\"\n\t\tPartitions: \"array{partition_by?:string, partition?:string, partitions?:numeric-string, partition_names?:list<string>, partition_values?:list<string>}\"\n\t\tBackwardKey: \"array{name:string, keys:string[][]}\"\n"
  },
  {
    "path": "plugins/README.md",
    "content": "Plugins directory including external plugins: https://www.adminer.org/plugins/\n"
  },
  {
    "path": "plugins/adminer.js.php",
    "content": "<?php\n\n/**\n * Enables auto-detection and inclusion of adminer.js, like adminer.css\n *\n * @author Roy Orbitson, https://github.com/Roy-Orbison\n *\n * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n * @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n */\nclass AdminerDotJs extends Adminer\\Plugin {\n\tconst FILENAME = \"adminer.js\";\n\n\tfunction head($dark = null) {\n\t\tif (file_exists(self::FILENAME)) {\n\t\t\techo Adminer\\script_src(self::FILENAME . \"?v=\" . crc32(file_get_contents(self::FILENAME))), \"\\n\";\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Nahraje adminer.js'),\n\t\t'de' => array('' => 'Laden Sie adminer.js'),\n\t\t'pl' => array('' => 'Wczytuj adminer.js'),\n\t\t'ro' => array('' => 'Încarcă adminer.js'),\n\t\t'ja' => array('' => 'adminer.js を読込み'),\n\t\t'hr' => array('' => 'Učitava adminer.js'),\n\t);\n}\n"
  },
  {
    "path": "plugins/backward-keys.php",
    "content": "<?php\n\n/** Display links to tables referencing current row, same as in Adminer Editor\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerBackwardKeys extends Adminer\\Plugin {\n\t// this is copy-pasted from Adminer Editor\n\n\tfunction backwardKeys($table, $tableName) {\n\t\t$return = array();\n\t\t// we couldn't use the same query in MySQL and PostgreSQL because unique_constraint_name is not table-specific in MySQL and referenced_table_name is not available in PostgreSQL\n\t\tforeach (\n\t\t\tAdminer\\get_rows(\"SELECT s.table_name table_name, s.constraint_name constraint_name, s.column_name column_name, \" . (Adminer\\JUSH == \"sql\" ? \"referenced_column_name\" : \"t.column_name\") . \" referenced_column_name\nFROM information_schema.key_column_usage s\" . (Adminer\\JUSH == \"sql\" ? \"\nWHERE table_schema = \" . Adminer\\q(Adminer\\DB) . \"\nAND referenced_table_schema = \" . Adminer\\q(Adminer\\DB) . \"\nAND referenced_table_name\" : \"\nJOIN information_schema.referential_constraints r USING (constraint_catalog, constraint_schema, constraint_name)\nJOIN information_schema.key_column_usage t ON r.unique_constraint_catalog = t.constraint_catalog\n\tAND r.unique_constraint_schema = t.constraint_schema\n\tAND r.unique_constraint_name = t.constraint_name\n\tAND r.constraint_catalog = t.constraint_catalog\n\tAND r.constraint_schema = t.constraint_schema\n\tAND r.unique_constraint_name = t.constraint_name\n\tAND s.position_in_unique_constraint = t.ordinal_position\nWHERE t.table_catalog = \" . Adminer\\q(Adminer\\DB) . \" AND t.table_schema = \" . Adminer\\q(\"$_GET[ns]\") . \"\nAND t.table_name\") . \" = \" . Adminer\\q($table) . \"\nORDER BY s.ordinal_position\", null, \"\") as $row\n\t\t) {\n\t\t\t$return[$row[\"table_name\"]][\"keys\"][$row[\"constraint_name\"]][$row[\"column_name\"]] = $row[\"referenced_column_name\"];\n\t\t}\n\t\tforeach ($return as $key => $val) {\n\t\t\t$name = Adminer\\adminer()->tableName(Adminer\\table_status1($key, true));\n\t\t\tif ($name != \"\") {\n\t\t\t\t$search = preg_quote($tableName);\n\t\t\t\t$separator = '(:|\\s*-)?\\s+';\n\t\t\t\t$return[$key][\"name\"] = (preg_match(\"(^$search$separator(.+)|^(.+?)$separator$search\\$)iu\", $name, $match) ? $match[2] . $match[3] : $name);\n\t\t\t} else {\n\t\t\t\tunset($return[$key]);\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction backwardKeysPrint($backwardKeys, $row) {\n\t\tforeach ($backwardKeys as $table => $backwardKey) {\n\t\t\tforeach ($backwardKey[\"keys\"] as $cols) {\n\t\t\t\t$link = Adminer\\ME . 'select=' . urlencode($table);\n\t\t\t\t$i = 0;\n\t\t\t\tforeach ($cols as $column => $val) {\n\t\t\t\t\tif (!isset($row[$val])) {\n\t\t\t\t\t\tcontinue 2;\n\t\t\t\t\t}\n\t\t\t\t\t$link .= Adminer\\where_link($i++, $column, $row[$val]);\n\t\t\t\t}\n\t\t\t\techo \"<a href='\" . Adminer\\h($link) . \"'>\" . Adminer\\h(preg_replace('(^' . preg_quote($_GET[\"select\"]) . (substr($_GET[\"select\"], -1) == 's' ? '?' : '') . '_)', '_', $backwardKey[\"name\"])) . \"</a>\";\n\t\t\t\t$link = Adminer\\ME . 'edit=' . urlencode($table);\n\t\t\t\tforeach ($cols as $column => $val) {\n\t\t\t\t\t$link .= \"&set\" . urlencode(\"[\" . Adminer\\bracket_escape($column) . \"]\") . \"=\" . urlencode($row[$val]);\n\t\t\t\t}\n\t\t\t\techo \"<a href='\" . Adminer\\h($link) . \"' title='\" . Adminer\\lang('New item') . \"'>+</a> \";\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/backward-keys.png\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zobrazí odkazy na tabulky odkazující aktuální řádek, stejně jako Adminer Editor'),\n\t\t'de' => array('' => 'Links zu Tabellen anzeigen die auf die aktuelle Zeile verweisen, wie im Adminer Editor'),\n\t\t'ja' => array('' => 'Adminer Editor と同様に、カレント行を参照しているテーブルへのリンクを表示'),\n\t\t'pl' => array('' => 'Wyświetlaj linki do tabel odnoszących się do bieżącego wiersza, tak samo jak w Edytorze administratora'),\n\t\t'hr' => array('' => 'Prikazuje veze na tablice koje referenciraju trenutni redak, kao u Adminer Editoru'),\n\t);\n}\n"
  },
  {
    "path": "plugins/before-unload.php",
    "content": "<?php\n\n/** Display confirmation before unloading page if a form field was changed\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerBeforeUnload extends Adminer\\Plugin {\n\n\tfunction head($dark = null) {\n\t\t?>\n<script <?php echo Adminer\\nonce(); ?>>\n// editChange is declared in functions.js\n// ajaxForm sets editChange to null on success\n\naddEvent(document, 'change', event => {\n\tconst el = event.target;\n\tif (el.form && /post/i.test(el.form.method)) {\n\t\teditChanged = true;\n\t}\n});\n\naddEvent(document, 'submit', () => {\n\teditChanged = null;\n});\n\n// all modern browsers ignore string returned from here\nonbeforeunload = () => editChanged;\n</script>\n<?php\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zobrazí potvrzení před odnahráním stránky, pokud bylo změněno formulářové políčko'),\n\t\t'de' => array('' => 'Zeigt eine Bestätigung an bevor die Seite neu geladen wird, wenn ein Formularfeld geändert wurde'),\n\t\t'ja' => array('' => 'フォームの列が変更された時、ページを再読込みする前に確認を表示'),\n\t\t'pl' => array('' => 'Wyświetlaj potwierdzenie przed rozładowaniem strony, jeśli pole formularza zostało zmienione'),\n\t\t'hr' => array('' => 'Prikazuje potvrdu prije napuštanja stranice ako je polje obrasca promijenjeno'),\n\t);\n}\n"
  },
  {
    "path": "plugins/config.php",
    "content": "<?php\n\n/** Configure options by end-users and store them to a cookie\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerConfig extends Adminer\\Plugin {\n\n\tfunction headers() {\n\t\tstatic $called; // this function is called from page_header() and it also calls page_header()\n\t\tif (isset($_GET[\"config\"]) && !$called && Adminer\\connection()) {\n\t\t\t$called = true;\n\t\t\tif ($_GET[\"config\"]) { // using $_GET allows sharing links between devices but doesn't protect against same-site RF; CSRF is protected by SameSite cookies\n\t\t\t\tAdminer\\save_settings($_GET[\"config\"], \"adminer_config\");\n\t\t\t\tAdminer\\redirect(null, $this->lang('Configuration saved.'));\n\t\t\t}\n\t\t\tAdminer\\page_header($this->lang('Configuration'));\n\t\t\t$config = Adminer\\adminer()->config();\n\t\t\tif (!$config) {\n\t\t\t\t// this plugin itself defines config() so this branch is not currently used\n\t\t\t\techo \"<p>\" . $this->lang('Only some plugins support configuration, e.g. %s.', '<a href=\"https://github.com/vrana/adminer/blob/master/plugins/menu-links.php\"' . Adminer\\target_blank() . '>menu-links</a>') . \"\\n\";\n\t\t\t} else {\n\t\t\t\techo \"<form action=''>\\n\";\n\t\t\t\tAdminer\\hidden_fields_get();\n\t\t\t\techo \"<table>\\n\";\n\t\t\t\tforeach (array_reverse($config) as $title => $html) { // Plugins::$append actually prepends\n\t\t\t\t\techo \"<tr><th>$title<td>$html\\n\";\n\t\t\t\t}\n\t\t\t\techo \"</table>\\n\";\n\t\t\t\techo \"<p><input type='submit' value='\" . Adminer\\lang('Save') . \"'>\\n\";\n\t\t\t\techo \"</form>\\n\";\n\t\t\t}\n\t\t\tAdminer\\page_footer('db');\n\t\t\texit;\n\t\t}\n\t}\n\n\tfunction config() {\n\t\t$options = array(\n\t\t\t'' => $this->lang('Use %s if exists', \"adminer.css\"),\n\t\t\t'builtin' => $this->lang('Use builtin design'),\n\t\t);\n\t\treturn array($this->lang('Design') => Adminer\\html_radios('config[design]', $options, Adminer\\get_setting(\"design\", \"adminer_config\"), \"<br>\"));\n\t}\n\n\tfunction css() {\n\t\tif (Adminer\\get_setting(\"design\", \"adminer_config\") == \"builtin\") {\n\t\t\treturn array();\n\t\t}\n\t}\n\n\tfunction pluginsLinks() {\n\t\t$link = preg_replace('~\\b(db|ns)=[^&]*&~', '', Adminer\\ME);\n\t\techo \"<p><a href='\" . Adminer\\h($link) . \"config='>\" . $this->lang('Configuration') . \"</a>\\n\";\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/config.png\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array(\n\t\t\t'' => 'Konfigurace možností uživateli a jejich uložení do cookie',\n\t\t\t'Configuration' => 'Konfigurace',\n\t\t\t'Configuration saved.' => 'Konfigurace uložena.',\n\t\t\t'Only some plugins support configuration, e.g. %s.' => 'Konfiguraci podporují jen některé pluginy, např. %s.',\n\t\t\t'Design' => 'Vzhled',\n\t\t\t'Use %s if exists' => 'Použít %s, pokud existuje',\n\t\t\t'Use builtin design' => 'Použít vestavěný vzhled',\n\t\t),\n\t\t'pl' => array(\n\t\t\t'Configuration' => 'Konfiguracja',\n\t\t\t'Configuration saved.' => 'Konfiguracja zapisana.',\n\t\t\t'Only some plugins support configuration, e.g. %s.' => 'Tylko niektóre wtyczki obsługują konfigurację, np. %s.',\n\t\t\t'Design' => 'Wygląd',\n\t\t\t'Use %s if exists' => 'Użyj %s, jeśli istnieje',\n\t\t\t'Use builtin design' => 'Użyj wbudowanego wyglądu',\n\t\t),\n\t\t'de' => array(\n\t\t\t'' => 'Optionen durch den Endbenutzer konfigurieren und dies in einem Cookie speichern',\n\t\t\t'Configuration' => 'Konfiguration',\n\t\t\t'Configuration saved.' => 'Konfiguration gespeichert.',\n\t\t\t'Only some plugins support configuration, e.g. %s.' => 'Nur einige Plugins unterstützen die Konfiguration, z.B. %s.',\n\t\t\t'Design' => 'Design',\n\t\t\t'Use %s if exists' => '%s verwenden, falls vorhanden',\n\t\t\t'Use builtin design' => 'Standard Design verwenden',\n\t\t),\n\t\t'ja' => array(\n\t\t\t'' => 'ユーザオプションを設定し cookie に保存',\n\t\t\t'Configuration' => '設定',\n\t\t\t'Configuration saved.' => '設定を保存しました。',\n\t\t\t'Only some plugins support configuration, e.g. %s.' => '設定変更に対応しているのは一部のプラグインのみです。例: %s。',\n\t\t\t'Design' => 'デザイン',\n\t\t\t'Use %s if exists' => 'あれば %s を使う',\n\t\t\t'Use builtin design' => '組込みのデザインを使う',\n\t\t),\n\t\t'hr' => array(\n\t\t\t'' => 'Nikola Radovanović - cobisimo@gmail.com',\n\t\t\t'Configuration saved.' => 'Konfiguracija je spremljena.',\n\t\t\t'Configuration' => 'Konfiguracija',\n\t\t\t'Only some plugins support configuration, e.g. %s.' => 'Samo neki dodaci podržavaju konfiguraciju, npr. %s.',\n\t\t\t'Use %s if exists' => 'Koristi %s ako postoji',\n\t\t\t'Use builtin design' => 'Koristi ugrađeni dizajn',\n\t\t\t'Design' => 'Dizajn',\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/dark-switcher.php",
    "content": "<?php\n\n/** Allow switching light and dark mode\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDarkSwitcher extends Adminer\\Plugin {\n\n\tfunction head($dark = null) {\n\t\t?>\n<script <?php echo Adminer\\nonce(); ?>>\nlet adminerDark;\n\nfunction adminerDarkSwitch() {\n\tadminerDark = !adminerDark;\n\tadminerDarkSet();\n}\n\nfunction adminerDarkSet() {\n\tqsa('link[href*=\"dark.css\"]').forEach(link => link.media = (adminerDark ? '' : 'never'));\n\tqs('meta[name=\"color-scheme\"]').content = (adminerDark ? 'dark' : 'light');\n\tcookie('adminer_dark=' + (adminerDark ? 1 : 0), 30);\n}\n\nconst saved = document.cookie.match(/adminer_dark=(\\d)/);\nif (saved) {\n\tadminerDark = +saved[1];\n\tadminerDarkSet();\n} else {\n\tadminerDark = +matchMedia('(prefers-color-scheme: dark)').matches;\n}\n</script>\n<?php\n\t}\n\n\tfunction navigation($missing) {\n\t\techo \"<big style='position: fixed; bottom: .5em; right: .5em; cursor: pointer;'>☀</big>\"\n\t\t\t. Adminer\\script(\"adminerDarkSet(); qsl('big').onclick = adminerDarkSwitch;\") . \"\\n\"\n\t\t;\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/dark-switcher.gif\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Dovoluje přepínání světlého a tmavého vzhledu'),\n\t\t'de' => array('' => 'Umschalten zwischen hellem und dunklem Design erlauben'),\n\t\t'ja' => array('' => 'ダークモードへの切替え'),\n\t\t'pl' => array('' => 'Zezwalaj na przełączanie trybu jasnego i ciemnego'),\n\t\t'hr' => array('' => 'Omogućuje prebacivanje između svijetlog i tamnog izgleda'),\n\t);\n}\n"
  },
  {
    "path": "plugins/database-hide.php",
    "content": "<?php\n\n/** Hide some databases from the interface - just to improve design, not a security plugin\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDatabaseHide extends Adminer\\Plugin {\n\tprotected $disabled;\n\n\t/**\n\t* @param list<string> $disabled case insensitive database names in values\n\t*/\n\tfunction __construct(array $disabled) {\n\t\t$this->disabled = array_map('strtolower', $disabled);\n\t}\n\n\tfunction databases($flush = true) {\n\t\t$return = array();\n\t\tforeach (Adminer\\get_databases($flush) as $db) {\n\t\t\tif (!in_array(strtolower($db), $this->disabled)) {\n\t\t\t\t$return[] = $db;\n\t\t\t}\n\t\t}\n\t\treturn $return;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Skryje některé databáze z rozhraní – pouze vylepší vzhled, nikoliv bezpečnost'),\n\t\t'de' => array('' => 'Verstecken Sie einige Datenbanken vor der Benutzeroberfläche – nur um das Design zu verbessern, verbessert nicht die Sicherheit'),\n\t\t'pl' => array('' => 'Ukryj niektóre bazy danych w interfejsie – tylko po to, aby ulepszyć motyw, a nie wtyczkę zabezpieczającą'),\n\t\t'ro' => array('' => 'Ascundeți unele baze de date din interfață - doar pentru a îmbunătăți designul, nu un plugin de securitate'),\n\t\t'ja' => array('' => '一部データベースを UI 上で表示禁止 (デザイン的な効果のみでセキュリティ的には効果なし)'),\n\t\t'hr' => array('' => 'Sakriva neke baze podataka iz sučelja – samo radi poboljšanja izgleda, nije sigurnosni dodatak'),\n\t);\n}\n"
  },
  {
    "path": "plugins/designs.php",
    "content": "<?php\n\n/** Allow switching designs\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDesigns extends Adminer\\Plugin {\n\tprotected $designs;\n\n\t/**\n\t* @param list<string> $designs URL in key, name in value\n\t*/\n\tfunction __construct(array $designs) {\n\t\t$this->designs = $designs;\n\t}\n\n\tfunction afterConnect() {\n\t\tif (isset($_POST[\"design\"]) && Adminer\\verify_token()) {\n\t\t\tAdminer\\restart_session();\n\t\t\t$_SESSION[\"design\"] = $_POST[\"design\"];\n\t\t\tAdminer\\redirect($_SERVER[\"REQUEST_URI\"]);\n\t\t}\n\t}\n\n\tfunction css() {\n\t\t$return = array();\n\t\tif (array_key_exists($_SESSION[\"design\"], $this->designs)) {\n\t\t\t$return[$_SESSION[\"design\"]] = (preg_match('~-dark~', $_SESSION[\"design\"]) ? \"dark\" : \"light\");\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction navigation($missing) {\n\t\techo \"<form action='' method='post' style='position: fixed; bottom: .5em; right: .5em;'>\";\n\t\techo Adminer\\html_select(\"design\", array(\"\" => \"(design)\") + $this->designs, $_SESSION[\"design\"], \"this.form.submit();\");\n\t\techo Adminer\\input_token();\n\t\techo \"</form>\\n\";\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/designs.png\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Umožní změnit vzhled'),\n\t\t'de' => array('' => 'Designwechsel ermöglichen'),\n\t\t'pl' => array('' => 'Zezwalaj na przełączanie motywów'),\n\t\t'ro' => array('' => 'Permiteți comutarea designurilor'),\n\t\t'ja' => array('' => 'テーマ設定を有効化'),\n\t\t'hr' => array('' => 'Omogućuje promjenu dizajna'),\n\t);\n}\n"
  },
  {
    "path": "plugins/drivers/README.md",
    "content": "Using drivers: https://www.adminer.org/plugins/#use\n\nDeveloping drivers: https://www.adminer.org/en/drivers/\n\nThe type declarations must be compatible both with source codes and the compiled version (where PHP5-incompatible types are stripped). It means:\n- specify return type if parent specifies it\n- do not specify scalar parameter type\n"
  },
  {
    "path": "plugins/drivers/clickhouse.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"clickhouse\", \"ClickHouse (alpha)\");\n\nif (isset($_GET[\"clickhouse\"])) {\n\tdefine('Adminer\\DRIVER', \"clickhouse\");\n\n\tif (ini_bool('allow_url_fopen')) {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"JSON\";\n\t\t\tpublic $_db = 'default';\n\t\t\tprivate $url;\n\n\t\t\tfunction rootQuery($db, $query) {\n\t\t\t\t$file = @file_get_contents(\"$this->url/?database=$db\", false, stream_context_create(array('http' => array(\n\t\t\t\t\t'method' => 'POST',\n\t\t\t\t\t'content' => $query,\n\t\t\t\t\t'header' => array(\n\t\t\t\t\t\t'Content-Type: application/x-www-form-urlencoded',\n\t\t\t\t\t\t'X-ClickHouse-Format: JSONCompact',\n\t\t\t\t\t),\n\t\t\t\t\t'ignore_errors' => 1,\n\t\t\t\t\t'follow_location' => 0,\n\t\t\t\t\t'max_redirects' => 0,\n\t\t\t\t))));\n\n\t\t\t\tif ($file === false || preg_match('~^HTTP/[0-9.]+ 403~i', $http_response_header[0])) {\n\t\t\t\t\t$this->error = lang('Invalid credentials.');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$return = json_decode($file, true);\n\t\t\t\tif ($return === null) {\n\t\t\t\t\tif (!$this->isQuerySelectLike($query) && $file === '') {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t$this->errno = json_last_error();\n\t\t\t\t\tif (function_exists('json_last_error_msg')) {\n\t\t\t\t\t\t$this->error = json_last_error_msg();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$constants = get_defined_constants(true);\n\t\t\t\t\t\tforeach ($constants['json'] as $name => $value) {\n\t\t\t\t\t\t\tif ($value == $this->errno && preg_match('~^JSON_ERROR_~', $name)) {\n\t\t\t\t\t\t\t\t$this->error = $name;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// 400 == Syntax error\n\t\t\t\t// 404 == Unknown expression identifier\n\t\t\t\t// 500 == Column 'x' is not under aggregate function and not in GROUP BY keys\n\t\t\t\tif (preg_match('~^HTTP/[0-9.]+ [45]~i', $http_response_header[0])) {\n\t\t\t\t\t$this->error = $return['exception'];\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn new Result($return);\n\t\t\t}\n\n\t\t\tfunction isQuerySelectLike($query) {\n\t\t\t\treturn (bool) preg_match('~^\\s*(select|show|with)~i', $query);\n\t\t\t}\n\n\t\t\tfunction query($query, $unbuffered = false) {\n\t\t\t\treturn $this->rootQuery($this->_db, $query);\n\t\t\t}\n\n\t\t\tfunction attach($server, $username, $password): string {\n\t\t\t\tpreg_match('~^(https?://)?(.*)~', $server, $match);\n\t\t\t\t$this->url = ($match[1] ?: \"http://\") . urlencode($username) . \":\" . urlencode($password) . \"@$match[2]\";\n\t\t\t\t$return = $this->query('SELECT 1');\n\t\t\t\treturn ($return ? '' : $this->error);\n\t\t\t}\n\n\t\t\tfunction select_db($database) {\n\t\t\t\t$this->_db = $database;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction quote($string): string {\n\t\t\t\treturn \"'\" . addcslashes($string, \"\\\\'\") . \"'\";\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows, $columns, $meta;\n\t\t\tprivate $rows = array(), $offset = 0;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\tforeach ($result['data'] as $item) {\n\t\t\t\t\t$row = array();\n\t\t\t\t\tforeach ($item as $key => $val) {\n\t\t\t\t\t\t$row[$key] = is_scalar($val) ? $val : json_encode($val, 256); // 256 - JSON_UNESCAPED_UNICODE\n\t\t\t\t\t}\n\t\t\t\t\t$this->rows[] = $row;\n\t\t\t\t}\n\t\t\t\t$this->num_rows = $result['rows'];\n\t\t\t\t$this->meta = $result['meta'];\n\t\t\t\t$this->columns = array_column($this->meta, 'name');\n\t\t\t\treset($this->rows);\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\t$row = current($this->rows);\n\t\t\t\tnext($this->rows);\n\t\t\t\treturn $row === false ? false : array_combine($this->columns, $row);\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\t$row = current($this->rows);\n\t\t\t\tnext($this->rows);\n\t\t\t\treturn $row;\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$column = $this->offset++;\n\t\t\t\t$return = new \\stdClass;\n\t\t\t\tif ($column < count($this->columns)) {\n\t\t\t\t\t$return->name = $this->meta[$column]['name'];\n\t\t\t\t\t$return->type = $this->meta[$column]['type']; //! map to MySQL numbers\n\t\t\t\t\t$return->charsetnr = 0;\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\t\t}\n\t}\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"allow_url_fopen\");\n\t\tstatic $jush = \"clickhouse\";\n\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"~\", \"!~\", \"LIKE\", \"LIKE %%\", \"IN\", \"IS NULL\", \"NOT LIKE\", \"NOT IN\", \"IS NOT NULL\", \"SQL\");\n\t\tpublic $grouping = array(\"avg\", \"count\", \"count distinct\", \"max\", \"min\", \"sum\");\n\n\t\tstatic function connect($server, $username, $password) {\n\t\t\tif (!preg_match('~^(https?://)?[-a-z\\d.]+(:\\d+)?$~', $server)) {\n\t\t\t\treturn lang('Invalid server.');\n\t\t\t}\n\t\t\treturn parent::connect($server, $username, $password);\n\t\t}\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\t$this->types = array( //! arrays\n\t\t\t\tlang('Numbers') => array(\n\t\t\t\t\t\"Int8\" => 3, \"Int16\" => 5, \"Int32\" => 10, \"Int64\" => 19,\n\t\t\t\t\t\"UInt8\" => 3, \"UInt16\" => 5, \"UInt32\" => 10, \"UInt64\" => 20,\n\t\t\t\t\t\"Float32\" => 7, \"Float64\" => 16,\n\t\t\t\t\t'Decimal' => 38, 'Decimal32' => 9, 'Decimal64' => 18, 'Decimal128' => 38,\n\t\t\t\t),\n\t\t\t\tlang('Date and time') => array(\"Date\" => 13, \"DateTime\" => 20),\n\t\t\t\tlang('Strings') => array(\"String\" => 0),\n\t\t\t\tlang('Binary') => array(\"FixedString\" => 0),\n\t\t\t);\n\t\t}\n\n\t\tfunction delete($table, $queryWhere, $limit = 0) {\n\t\t\tif ($queryWhere === '') {\n\t\t\t\t$queryWhere = 'WHERE 1=1';\n\t\t\t}\n\t\t\treturn queries(\"ALTER TABLE \" . table($table) . \" DELETE $queryWhere\");\n\t\t}\n\n\t\tfunction update($table, array $set, $queryWhere, $limit = 0, $separator = \"\\n\") {\n\t\t\t$values = array();\n\t\t\tforeach ($set as $key => $val) {\n\t\t\t\t$values[] = \"$key = $val\";\n\t\t\t}\n\t\t\t$query = $separator . implode(\",$separator\", $values);\n\t\t\treturn queries(\"ALTER TABLE \" . table($table) . \" UPDATE $query$queryWhere\");\n\t\t}\n\t}\n\n\tfunction idf_escape($idf) {\n\t\treturn \"`\" . str_replace(\"`\", \"``\", $idf) . \"`\";\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction explain($connection, $query) {\n\t\treturn '';\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t\t$rows = get_vals(\"SELECT COUNT(*) FROM \" . idf_escape($table_status[\"Name\"]) . ($where ? \" WHERE \" . implode(\" AND \", $where) : \"\"));\n\t\treturn empty($rows) ? false : $rows[0];\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\t$alter = $order = array();\n\t\tforeach ($fields as $field) {\n\t\t\tif ($field[1][2] === \" NULL\") {\n\t\t\t\t$field[1][1] = \" Nullable({$field[1][1]})\";\n\t\t\t} elseif ($field[1][2] === ' NOT NULL') {\n\t\t\t\t$field[1][2] = '';\n\t\t\t}\n\n\t\t\tif ($field[1][3]) {\n\t\t\t\t$field[1][3] = '';\n\t\t\t}\n\n\t\t\t$alter[] = ($field[1]\n\t\t\t\t? ($table != \"\" ? ($field[0] != \"\" ? \"MODIFY COLUMN \" : \"ADD COLUMN \") : \" \") . implode($field[1])\n\t\t\t\t: \"DROP COLUMN \" . idf_escape($field[0])\n\t\t\t);\n\n\t\t\t$order[] = $field[1][0];\n\t\t}\n\n\t\t$alter = array_merge($alter, $foreign);\n\t\t$status = ($engine ? \" ENGINE \" . $engine : \"\");\n\t\tif ($table == \"\") {\n\t\t\treturn queries(\"CREATE TABLE \" . table($name) . \" (\\n\" . implode(\",\\n\", $alter) . \"\\n)$status$partitioning\" . ' ORDER BY (' . implode(',', $order) . ')');\n\t\t}\n\t\tif ($table != $name) {\n\t\t\t$result = queries(\"RENAME TABLE \" . table($table) . \" TO \" . table($name));\n\t\t\tif ($alter) {\n\t\t\t\t$table = $name;\n\t\t\t} else {\n\t\t\t\treturn $result;\n\t\t\t}\n\t\t}\n\t\tif ($status) {\n\t\t\t$alter[] = ltrim($status);\n\t\t}\n\t\treturn ($alter || $partitioning ? queries(\"ALTER TABLE \" . table($table) . \"\\n\" . implode(\",\\n\", $alter) . $partitioning) : true);\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\treturn apply_queries(\"TRUNCATE TABLE\", $tables);\n\t}\n\n\tfunction drop_views($views) {\n\t\treturn drop_tables($views);\n\t}\n\n\tfunction drop_tables($tables) {\n\t\treturn apply_queries(\"DROP TABLE\", $tables);\n\t}\n\n\tfunction get_databases($flush) {\n\t\t$result = get_rows('SHOW DATABASES');\n\n\t\t$return = array();\n\t\tforeach ($result as $row) {\n\t\t\t$return[] = $row['name'];\n\t\t}\n\t\tsort($return);\n\t\treturn $return;\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT \" . ($offset ? \"$offset, \" : \"\") . $limit : \"\");\n\t}\n\n\tfunction limit1($table, $query, $where, $separator = \"\\n\") {\n\t\treturn limit($query, $where, 1, 0, $separator);\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t}\n\n\tfunction logged_user() {\n\t\t$credentials = adminer()->credentials();\n\t\treturn $credentials[1];\n\t}\n\n\tfunction tables_list() {\n\t\t$result = get_rows('SHOW TABLES');\n\t\t$return = array();\n\t\tforeach ($result as $row) {\n\t\t\t$return[$row['name']] = 'table';\n\t\t}\n\t\tksort($return);\n\t\treturn $return;\n\t}\n\n\tfunction count_tables($databases) {\n\t\treturn array();\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$return = array();\n\t\t$tables = get_rows(\"SELECT name, engine FROM system.tables WHERE database = \" . q(connection()->_db) . ($name != \"\" ? \" AND name = \" . q($name) : \"\"));\n\t\tforeach ($tables as $table) {\n\t\t\t$return[$table['name']] = array(\n\t\t\t\t'Name' => $table['name'],\n\t\t\t\t'Engine' => $table['engine'],\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn false;\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn false;\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\tif (in_array($field['type'], array(\"Int8\", \"Int16\", \"Int32\", \"Int64\", \"UInt8\", \"UInt16\", \"UInt32\", \"UInt64\", \"Float32\", \"Float64\"))) {\n\t\t\treturn \"to$field[type]($return)\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\t$result = get_rows(\"SELECT name, type, default_expression FROM system.columns WHERE \" . idf_escape('table') . \" = \" . q($table));\n\t\tforeach ($result as $row) {\n\t\t\t$type = trim($row['type']);\n\t\t\t$nullable = strpos($type, 'Nullable(') === 0;\n\t\t\t$return[trim($row['name'])] = array(\n\t\t\t\t\"field\" => trim($row['name']),\n\t\t\t\t\"full_type\" => $type,\n\t\t\t\t\"type\" => $type,\n\t\t\t\t\"default\" => trim($row['default_expression']),\n\t\t\t\t\"null\" => $nullable,\n\t\t\t\t\"auto_increment\" => '0',\n\t\t\t\t\"privileges\" => array(\"insert\" => 1, \"select\" => 1, \"update\" => 0, \"where\" => 1, \"order\" => 1),\n\t\t\t);\n\t\t}\n\n\t\treturn $return;\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\treturn array();\n\t}\n\n\tfunction foreign_keys($table) {\n\t\treturn array();\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction information_schema($db) {\n\t\treturn false;\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction types(): array {\n\t\treturn array();\n\t}\n\n\tfunction auto_increment() {\n\t\treturn '';\n\t}\n\n\tfunction last_id($result) {\n\t\treturn 0; // ClickHouse doesn't have it\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match(\"~^(columns|sql|status|table|drop_col)$~\", $feature);\n\t}\n}\n"
  },
  {
    "path": "plugins/drivers/elastic.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"elastic\", \"Elasticsearch 7 (beta)\");\n\nif (isset($_GET[\"elastic\"])) {\n\tdefine('Adminer\\DRIVER', \"elastic\");\n\n\tif (ini_bool('allow_url_fopen')) {\n\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"JSON\";\n\t\t\tprivate $url;\n\n\t\t\t/**\n\t\t\t * @return array|false\n\t\t\t */\n\t\t\tfunction rootQuery($path, $content = null, $method = 'GET') {\n\t\t\t\t$file = @file_get_contents(\"$this->url/\" . ltrim($path, '/'), false, stream_context_create(array(\n\t\t\t\t\t//~ 'ssl' => array('verify_peer' => false), // Elasticsearch responses in over 4 s on https://localhost:9200 without this line for me\n\t\t\t\t\t'http' => array(\n\t\t\t\t\t\t'method' => $method,\n\t\t\t\t\t\t'content' => $content !== null ? json_encode($content) : null,\n\t\t\t\t\t\t'header' => $content !== null ? 'Content-Type: application/json' : array(),\n\t\t\t\t\t\t'ignore_errors' => 1,\n\t\t\t\t\t\t'follow_location' => 0,\n\t\t\t\t\t\t'max_redirects' => 0,\n\t\t\t\t\t),\n\t\t\t\t)));\n\n\t\t\t\tif ($file === false) {\n\t\t\t\t\t$this->error = lang('Invalid server or credentials.');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t$return = json_decode($file, true);\n\t\t\t\tif ($return === null) {\n\t\t\t\t\t$this->error = lang('Invalid server or credentials.');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {\n\t\t\t\t\tif (isset($return['error']['root_cause'][0]['type'])) {\n\t\t\t\t\t\t$this->error = $return['error']['root_cause'][0]['type'] . \": \" . $return['error']['root_cause'][0]['reason'];\n\t\t\t\t\t} elseif (isset($return['status']) && isset($return['error']) && is_string($return['error'])) {\n\t\t\t\t\t\t$this->error = $return['error'];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\t/** Perform query relative to actual selected DB */\n\t\t\tfunction query($query, $unbuffered = false) {\n\t\t\t\t// Support for global search through all tables\n\t\t\t\tif ($query[0] == \"S\" && preg_match('/SELECT 1 FROM ([^ ]+) WHERE (.+) LIMIT ([0-9]+)/', $query, $matches)) {\n\t\t\t\t\t$where = explode(\" AND \", $matches[2]);\n\t\t\t\t\treturn driver()->select($matches[1], array(\"*\"), $where, array(), array(), $matches[3]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction attach($server, $username, $password): string {\n\t\t\t\tpreg_match('~^(https?://)?(.*)~', $server, $match);\n\t\t\t\t$this->url = ($match[1] ?: \"http://\") . urlencode($username) . \":\" . urlencode($password) . \"@$match[2]\";\n\t\t\t\t$return = $this->rootQuery('');\n\t\t\t\tif ($return) {\n\t\t\t\t\t$this->server_info = $return['version']['number'];\n\t\t\t\t}\n\t\t\t\treturn ($return ? '' : $this->error);\n\t\t\t}\n\n\t\t\tfunction select_db($database) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction quote($string): string {\n\t\t\t\treturn $string;\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $rows;\n\n\t\t\tfunction __construct($rows) {\n\t\t\t\t$this->num_rows = count($rows);\n\t\t\t\t$this->rows = $rows;\n\t\t\t\treset($this->rows);\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\t$return = current($this->rows);\n\t\t\t\tnext($this->rows);\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\t$row = $this->fetch_assoc();\n\t\t\t\treturn $row ? array_values($row) : false;\n\t\t\t}\n\t\t}\n\t}\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"json + allow_url_fopen\");\n\t\tstatic $jush = \"elastic\";\n\n\t\tpublic $insertFunctions = array(\"json\");\n\t\tpublic $operators = array(\"=\", \"must\", \"should\", \"must_not\");\n\n\t\tstatic function connect($server, $username, $password) {\n\t\t\tif (!preg_match('~^(https?://)?[-a-z\\d.]+(:\\d+)?$~', $server)) {\n\t\t\t\treturn lang('Invalid server.');\n\t\t\t}\n\t\t\tif ($password != \"\" && is_object(parent::connect($server, $username, \"\"))) {\n\t\t\t\treturn lang('Database does not support password.');\n\t\t\t}\n\t\t\treturn parent::connect($server, $username, $password);\n\t\t}\n\n\t\tfunction __construct(Db $connection) {\n\t\t\tparent::__construct($connection);\n\t\t\t$this->types = array(\n\t\t\t\tlang('Numbers') => array(\"long\" => 3, \"integer\" => 5, \"short\" => 8, \"byte\" => 10, \"double\" => 20, \"float\" => 66, \"half_float\" => 12, \"scaled_float\" => 21),\n\t\t\t\tlang('Date and time') => array(\"date\" => 10),\n\t\t\t\tlang('Strings') => array(\"string\" => 65535, \"text\" => 65535),\n\t\t\t\tlang('Binary') => array(\"binary\" => 255),\n\t\t\t);\n\t\t}\n\n\t\tfunction select($table, array $select, array $where, array $group, array $order = array(), $limit = 1, $page = 0, $print = false) {\n\t\t\t$data = array();\n\t\t\tif ($select != array(\"*\")) {\n\t\t\t\t$data[\"fields\"] = array_values($select);\n\t\t\t}\n\n\t\t\tif ($order) {\n\t\t\t\t$sort = array();\n\t\t\t\tforeach ($order as $col) {\n\t\t\t\t\t$col = preg_replace('~ DESC$~', '', $col, 1, $count);\n\t\t\t\t\t$sort[] = ($count ? array($col => \"desc\") : $col);\n\t\t\t\t}\n\t\t\t\t$data[\"sort\"] = $sort;\n\t\t\t}\n\n\t\t\tif ($limit) {\n\t\t\t\t$data[\"size\"] = $limit;\n\t\t\t\tif ($page) {\n\t\t\t\t\t$data[\"from\"] = ($page * $limit);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$fields = null;\n\t\t\tforeach ($where as $val) {\n\t\t\t\tif (preg_match('~^\\((.+ OR .+)\\)$~', $val, $matches)) {\n\t\t\t\t\t$parts = explode(\" OR \", $matches[1]);\n\t\t\t\t\t$terms = array();\n\n\t\t\t\t\tif ($fields === null) {\n\t\t\t\t\t\t$fields = fields($table);\n\t\t\t\t\t}\n\t\t\t\t\tforeach ($parts as $part) {\n\t\t\t\t\t\tlist($col, $op, $val) = explode(\" \", $part, 3);\n\t\t\t\t\t\t$term = array($col => $val);\n\t\t\t\t\t\tif (isset($fields[$col]) && $fields[$col]['full_type'] == 'boolean' && $val !== 'true' && $val !== 'false') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($op == \"=\") {\n\t\t\t\t\t\t\t$terms[] = array(\"term\" => $term);\n\t\t\t\t\t\t} elseif (in_array($op, array(\"must\", \"should\", \"must_not\"))) {\n\t\t\t\t\t\t\t$data[\"query\"][\"bool\"][$op][][\"match\"] = $term;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!empty($terms)) {\n\t\t\t\t\t\t$data[\"query\"][\"bool\"][\"filter\"][][\"bool\"][\"should\"] = $terms;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlist($col, $op, $val) = explode(\" \", $val, 3);\n\t\t\t\t\t$term = array($col => $val);\n\t\t\t\t\tif ($op == \"=\") {\n\t\t\t\t\t\t$data[\"query\"][\"bool\"][\"filter\"][] = array(\"term\" => $term);\n\t\t\t\t\t} elseif (in_array($op, array(\"must\", \"should\", \"must_not\"))) {\n\t\t\t\t\t\t$data[\"query\"][\"bool\"][$op][][\"match\"] = $term;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$query = \"$table/_search\";\n\t\t\t$start = microtime(true);\n\t\t\t$search = $this->conn->rootQuery($query, $data);\n\n\t\t\tif ($print) {\n\t\t\t\techo adminer()->selectQuery(\"$query: \" . json_encode($data), $start, !$search);\n\t\t\t}\n\t\t\tif (empty($search)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$tableFields = ($select == array(\"*\") ? array_keys(fields($table)) : array());\n\n\t\t\t$return = array();\n\t\t\tforeach ($search[\"hits\"][\"hits\"] as $hit) {\n\t\t\t\t$row = array();\n\t\t\t\tif ($select == array(\"*\")) {\n\t\t\t\t\t$row[\"_id\"] = $hit[\"_id\"];\n\t\t\t\t}\n\n\t\t\t\tif ($select != array(\"*\")) {\n\t\t\t\t\t$fields = array();\n\t\t\t\t\tforeach ($select as $key) {\n\t\t\t\t\t\t$fields[$key] = $key == \"_id\" ? $hit[\"_id\"] : $hit[\"_source\"][$key];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tforeach ($tableFields as $key) {\n\t\t\t\t\t\t$fields[$key] = $key == \"_id\" ? $hit[\"_id\"] : $hit[\"_source\"][$key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tforeach ($fields as $key => $val) {\n\t\t\t\t\t$row[$key] = (is_array($val) ? json_encode($val) : $val);\n\t\t\t\t}\n\n\t\t\t\t$return[] = $row;\n\t\t\t}\n\n\t\t\treturn new Result($return);\n\t\t}\n\n\t\tfunction update($table, array $set, $queryWhere, $limit = 0, $separator = \"\\n\") {\n\t\t\t//! use $limit\n\t\t\t$parts = preg_split('~ *= *~', $queryWhere);\n\t\t\tif (count($parts) == 2) {\n\t\t\t\t$id = trim($parts[1]);\n\t\t\t\t$query = \"$table/_update/$id\";\n\t\t\t\t$this->conn->affected_rows = 0;\n\t\t\t\treturn $this->conn->rootQuery($query, array('doc' => $set), 'POST');\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction insert($type, array $record) {\n\t\t\t$query = \"$type/_doc/\";\n\t\t\tif (isset($record[\"_id\"]) && $record[\"_id\"] != \"NULL\") {\n\t\t\t\t$query .= $record[\"_id\"];\n\t\t\t\tunset($record[\"_id\"]);\n\t\t\t}\n\t\t\tforeach ($record as $key => $value) {\n\t\t\t\tif ($value == \"NULL\") {\n\t\t\t\t\tunset($record[$key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$response = $this->conn->rootQuery($query, $record, 'POST');\n\t\t\tif ($response == false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$this->conn->last_id = $response['_id'];\n\n\t\t\treturn $response['result'];\n\t\t}\n\n\t\tfunction delete($table, $queryWhere, $limit = 0) {\n\t\t\t//! use $limit\n\t\t\t$ids = array();\n\t\t\tif (idx($_GET[\"where\"], \"_id\")) {\n\t\t\t\t$ids[] = $_GET[\"where\"][\"_id\"];\n\t\t\t}\n\t\t\tif (isset($_POST['check'])) {\n\t\t\t\tforeach ($_POST['check'] as $check) {\n\t\t\t\t\t$parts = preg_split('~ *= *~', $check);\n\t\t\t\t\tif (count($parts) == 2) {\n\t\t\t\t\t\t$ids[] = trim($parts[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$this->conn->affected_rows = 0;\n\n\t\t\tforeach ($ids as $id) {\n\t\t\t\t$query = \"$table/_doc/$id\";\n\t\t\t\t$response = $this->conn->rootQuery($query, null, 'DELETE');\n\t\t\t\tif (isset($response['result']) && $response['result'] == 'deleted') {\n\t\t\t\t\t$this->conn->affected_rows++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn !!$this->conn->affected_rows;\n\t\t}\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match(\"~table|columns~\", $feature);\n\t}\n\n\tfunction logged_user() {\n\t\t$credentials = adminer()->credentials();\n\n\t\treturn $credentials[1];\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn array(\"elastic\");\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT $limit\" . ($offset ? \" OFFSET $offset\" : \"\") : \"\");\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t\t//\n\t}\n\n\tfunction count_tables($databases) {\n\t\t$return = connection()->rootQuery('_aliases');\n\t\treturn array(\"elastic\" => ($return ? count($return) : 0));\n\t}\n\n\tfunction tables_list() {\n\t\t$aliases = connection()->rootQuery('_aliases');\n\t\tif (empty($aliases)) {\n\t\t\treturn array();\n\t\t}\n\n\t\tksort($aliases);\n\n\t\t$tables = array();\n\t\tforeach ($aliases as $name => $index) {\n\t\t\t$tables[$name] = \"table\";\n\n\t\t\tksort($index[\"aliases\"]);\n\t\t\t$tables += array_fill_keys(array_keys($index[\"aliases\"]), \"view\");\n\t\t}\n\n\t\treturn $tables;\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$stats = connection()->rootQuery('_stats');\n\t\t$aliases = connection()->rootQuery('_aliases');\n\n\t\tif (empty($stats) || empty($aliases)) {\n\t\t\treturn array();\n\t\t}\n\n\t\t$result = array();\n\n\t\tif ($name != \"\") {\n\t\t\tif (isset($stats[\"indices\"][$name])) {\n\t\t\t\treturn array(format_index_status($name, $stats[\"indices\"][$name]));\n\t\t\t} else {\n\t\t\t\tforeach ($aliases as $index_name => $index) {\n\t\t\t\t\tforeach ($index[\"aliases\"] as $alias_name => $alias) {\n\t\t\t\t\t\tif ($alias_name == $name) {\n\t\t\t\t\t\t\treturn array(format_alias_status($alias_name, $stats[\"indices\"][$index_name]));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn array();\n\t\t}\n\n\t\tksort($stats[\"indices\"]);\n\t\tforeach ($stats[\"indices\"] as $name => $index) {\n\t\t\tif ($name[0] == \".\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t$result[$name] = format_index_status($name, $index);\n\n\t\t\tif (!empty($aliases[$name][\"aliases\"])) {\n\t\t\t\tksort($aliases[$name][\"aliases\"]);\n\t\t\t\tforeach ($aliases[$name][\"aliases\"] as $alias_name => $alias) {\n\t\t\t\t\t$result[$alias_name] = format_alias_status($alias_name, $stats[\"indices\"][$name]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $result;\n\t}\n\n\tfunction format_index_status($name, $index) {\n\t\treturn array(\n\t\t\t\"Name\" => $name,\n\t\t\t\"Engine\" => \"Lucene\",\n\t\t\t\"Oid\" => $index[\"uuid\"],\n\t\t\t\"Rows\" => $index[\"total\"][\"docs\"][\"count\"],\n\t\t\t\"Auto_increment\" => 0,\n\t\t\t\"Data_length\" => $index[\"total\"][\"store\"][\"size_in_bytes\"],\n\t\t\t\"Index_length\" => 0,\n\t\t\t\"Data_free\" => $index[\"total\"][\"store\"][\"reserved_in_bytes\"],\n\t\t);\n\t}\n\n\tfunction format_alias_status($name, $index) {\n\t\treturn array(\n\t\t\t\"Name\" => $name,\n\t\t\t\"Engine\" => \"view\",\n\t\t\t\"Rows\" => $index[\"total\"][\"docs\"][\"count\"],\n\t\t);\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn $table_status[\"Engine\"] == \"view\";\n\t}\n\n\tfunction view(string $name): array {\n\t\t$return = connection()->rootQuery(\"_alias/\" . urlencode($name));\n\t\treturn array(\"select\" => implode(\"\\n\", array_keys($return)));\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction information_schema($db) {\n\t\t//\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\treturn array(\n\t\t\tarray(\"type\" => \"PRIMARY\", \"columns\" => array(\"_id\")),\n\t\t);\n\t}\n\n\tfunction fields($table) {\n\t\t$mappings = array();\n\t\t$mapping = connection()->rootQuery(\"_mapping\");\n\n\t\tif (!isset($mapping[$table])) {\n\t\t\t$aliases = connection()->rootQuery('_aliases');\n\n\t\t\tforeach ($aliases as $index_name => $index) {\n\t\t\t\tforeach ($index[\"aliases\"] as $alias_name => $alias) {\n\t\t\t\t\tif ($alias_name == $table) {\n\t\t\t\t\t\t$table = $index_name;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!empty($mapping)) {\n\t\t\t$mappings = $mapping[$table][\"mappings\"][\"properties\"];\n\t\t}\n\n\t\t$result = array(\n\t\t\t\"_id\" => array(\n\t\t\t\t\"field\" => \"_id\",\n\t\t\t\t\"full_type\" => \"text\",\n\t\t\t\t\"type\" => \"text\",\n\t\t\t\t\"null\" => true,\n\t\t\t\t\"privileges\" => array(\"insert\" => 1, \"select\" => 1, \"where\" => 1, \"order\" => 1),\n\t\t\t)\n\t\t);\n\n\t\tforeach ($mappings as $name => $field) {\n\t\t\t$result[$name] = array(\n\t\t\t\t\"field\" => $name,\n\t\t\t\t\"full_type\" => $field[\"type\"],\n\t\t\t\t\"type\" => $field[\"type\"],\n\t\t\t\t\"null\" => true,\n\t\t\t\t\"privileges\" => array(\n\t\t\t\t\t\"insert\" => 1,\n\t\t\t\t\t\"select\" => 1,\n\t\t\t\t\t\"update\" => 1,\n\t\t\t\t\t\"where\" => !isset($field[\"index\"]) || $field[\"index\"] ?: null,\n\t\t\t\t\t\"order\" => $field[\"type\"] != \"text\" ?: null\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn $result;\n\t}\n\n\tfunction foreign_keys($table) {\n\t\treturn array();\n\t}\n\n\tfunction table($idf) {\n\t\treturn $idf;\n\t}\n\n\tfunction idf_escape($idf) {\n\t\treturn $idf;\n\t}\n\n\tfunction convert_field($field) {\n\t\t//\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction fk_support($table_status) {\n\t\t//\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t}\n\n\tfunction auto_increment(): string {\n\t\treturn '';\n\t}\n\n\t/** Alter type\n\t * @return mixed\n\t */\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\t$properties = array();\n\t\tforeach ($fields as $f) {\n\t\t\tif ($f[1]) {\n\t\t\t\t$field_name = trim($f[1][0]);\n\t\t\t\t$field_type = trim($f[1][1] ?: \"text\");\n\t\t\t\t$properties[$field_name] = array(\n\t\t\t\t\t'type' => $field_type\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (!empty($properties)) {\n\t\t\t$properties = array('properties' => $properties);\n\t\t}\n\n\t\tif ($table != '') {\n\t\t\treturn connection()->rootQuery(\"$name/_mapping\", $properties, 'POST');\n\t\t} else {\n\t\t\treturn connection()->rootQuery($name, array('mappings' => $properties), 'PUT');\n\t\t}\n\t}\n\n\tfunction drop_views(array $tables): bool {\n\t\t$return = connection()->rootQuery('_aliases', array('actions' => array_map(function ($table) {\n\t\t\treturn array('remove' => array('index' => '*', 'alias' => $table));\n\t\t}, $tables)), 'POST');\n\t\treturn $return && !$return['errors'];\n\t}\n\n\tfunction drop_tables(array $tables): bool {\n\t\t$return = true;\n\t\tforeach ($tables as $table) { //! convert to bulk api\n\t\t\t$return = $return && connection()->rootQuery(urlencode($table), null, 'DELETE');\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction last_id($result) {\n\t\treturn connection()->last_id;\n\t}\n}\n"
  },
  {
    "path": "plugins/drivers/firebird.php",
    "content": "<?php\n/**\n* @author Steve Krämer\n*/\n\nnamespace Adminer;\n\nadd_driver('firebird', 'Firebird (alpha)');\n\nif (isset($_GET[\"firebird\"])) {\n\tdefine('Adminer\\DRIVER', \"firebird\");\n\n\tif (extension_loaded(\"interbase\")) {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"Firebird\", $_link;\n\n\t\t\tfunction attach($server, $username, $password): string {\n\t\t\t\t$this->_link = ibase_connect($server, $username, $password);\n\t\t\t\tif ($this->_link) {\n\t\t\t\t\t$url_parts = explode(':', $server);\n\t\t\t\t\t$service_link = ibase_service_attach($url_parts[0], $username, $password);\n\t\t\t\t\t$this->server_info = ibase_server_info($service_link, IBASE_SVC_SERVER_VERSION);\n\t\t\t\t\treturn '';\n\t\t\t\t}\n\t\t\t\treturn ibase_errmsg();\n\t\t\t}\n\n\t\t\tfunction quote($string): string {\n\t\t\t\treturn \"'\" . str_replace(\"'\", \"''\", $string) . \"'\";\n\t\t\t}\n\n\t\t\tfunction select_db($database) {\n\t\t\t\treturn ($database == \"domain\");\n\t\t\t}\n\n\t\t\tfunction query($query, $unbuffered = false) {\n\t\t\t\t$result = ibase_query($this->_link, $query);\n\t\t\t\tif (!$result) {\n\t\t\t\t\t$this->errno = ibase_errcode();\n\t\t\t\t\t$this->error = ibase_errmsg();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$this->error = \"\";\n\t\t\t\tif ($result === true) {\n\t\t\t\t\t$this->affected_rows = ibase_affected_rows($this->_link);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn new Result($result);\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $result, $offset = 0;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t\t// $this->num_rows = ibase_num_rows($result);\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\treturn ibase_fetch_assoc($this->result);\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\treturn ibase_fetch_row($this->result);\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$field = ibase_field_info($this->result, $this->offset++);\n\t\t\t\treturn (object) array(\n\t\t\t\t\t'name' => $field['name'],\n\t\t\t\t\t'type' => $field['type'], //! map to MySQL numbers\n\t\t\t\t\t'charsetnr' => 0,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction __destruct() {\n\t\t\t\tibase_free_result($this->result);\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"interbase\");\n\t\tstatic $jush = \"firebird\";\n\n\t\tpublic $operators = array(\"=\");\n\t}\n\n\n\n\tfunction idf_escape($idf) {\n\t\treturn '\"' . str_replace('\"', '\"\"', $idf) . '\"';\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn array(\"domain\");\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\t$return = '';\n\t\t$return .= ($limit ? $separator . \"FIRST $limit\" . ($offset ? \" SKIP $offset\" : \"\") : \"\");\n\t\t$return .= \" $query$where\";\n\t\treturn $return;\n\t}\n\n\tfunction limit1($table, $query, $where, $separator = \"\\n\") {\n\t\treturn limit($query, $where, 1, 0, $separator);\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t}\n\n\tfunction logged_user() {\n\t\t$credentials = adminer()->credentials();\n\t\treturn $credentials[1];\n\t}\n\n\tfunction tables_list() {\n\t\t$query = 'SELECT RDB$RELATION_NAME FROM rdb$relations WHERE rdb$system_flag = 0';\n\t\t$result = ibase_query(connection()->_link, $query);\n\t\t$return = array();\n\t\twhile ($row = ibase_fetch_assoc($result)) {\n\t\t\t\t$return[$row['RDB$RELATION_NAME']] = 'table';\n\t\t}\n\t\tksort($return);\n\t\treturn $return;\n\t}\n\n\tfunction count_tables($databases) {\n\t\treturn array();\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$return = array();\n\t\t$data = ($name != \"\" ? array($name => 1) : tables_list());\n\t\tforeach ($data as $index => $val) {\n\t\t\t$index = trim($index);\n\t\t\t$return[$index] = array(\n\t\t\t\t'Name' => $index,\n\t\t\t\t'Engine' => 'standard',\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn false;\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn preg_match('~InnoDB|IBMDB2I~i', $table_status[\"Engine\"]);\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\t$query = 'SELECT r.RDB$FIELD_NAME AS field_name,\nr.RDB$DESCRIPTION AS field_description,\nr.RDB$DEFAULT_VALUE AS field_default_value,\nr.RDB$NULL_FLAG AS field_not_null_constraint,\nf.RDB$FIELD_LENGTH AS field_length,\nf.RDB$FIELD_PRECISION AS field_precision,\nf.RDB$FIELD_SCALE AS field_scale,\nCASE f.RDB$FIELD_TYPE\nWHEN 261 THEN \\'BLOB\\'\nWHEN 14 THEN \\'CHAR\\'\nWHEN 40 THEN \\'CSTRING\\'\nWHEN 11 THEN \\'D_FLOAT\\'\nWHEN 27 THEN \\'DOUBLE\\'\nWHEN 10 THEN \\'FLOAT\\'\nWHEN 16 THEN \\'INT64\\'\nWHEN 8 THEN \\'INTEGER\\'\nWHEN 9 THEN \\'QUAD\\'\nWHEN 7 THEN \\'SMALLINT\\'\nWHEN 12 THEN \\'DATE\\'\nWHEN 13 THEN \\'TIME\\'\nWHEN 35 THEN \\'TIMESTAMP\\'\nWHEN 37 THEN \\'VARCHAR\\'\nELSE \\'UNKNOWN\\'\nEND AS field_type,\nf.RDB$FIELD_SUB_TYPE AS field_subtype,\ncoll.RDB$COLLATION_NAME AS field_collation,\ncset.RDB$CHARACTER_SET_NAME AS field_charset\nFROM RDB$RELATION_FIELDS r\nLEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME\nLEFT JOIN RDB$COLLATIONS coll ON f.RDB$COLLATION_ID = coll.RDB$COLLATION_ID\nLEFT JOIN RDB$CHARACTER_SETS cset ON f.RDB$CHARACTER_SET_ID = cset.RDB$CHARACTER_SET_ID\nWHERE r.RDB$RELATION_NAME = ' . q($table) . '\nORDER BY r.RDB$FIELD_POSITION';\n\t\t$result = ibase_query(connection()->_link, $query);\n\t\twhile ($row = ibase_fetch_assoc($result)) {\n\t\t\t$return[trim($row['FIELD_NAME'])] = array(\n\t\t\t\t\"field\" => trim($row[\"FIELD_NAME\"]),\n\t\t\t\t\"full_type\" => trim($row[\"FIELD_TYPE\"]),\n\t\t\t\t\"type\" => trim($row[\"FIELD_SUB_TYPE\"]),\n\t\t\t\t\"default\" => trim($row['FIELD_DEFAULT_VALUE']),\n\t\t\t\t\"null\" => (trim($row[\"FIELD_NOT_NULL_CONSTRAINT\"]) == \"YES\"),\n\t\t\t\t\"auto_increment\" => '0',\n\t\t\t\t\"collation\" => trim($row[\"FIELD_COLLATION\"]),\n\t\t\t\t\"privileges\" => array(\"insert\" => 1, \"select\" => 1, \"update\" => 1, \"where\" => 1, \"order\" => 1),\n\t\t\t\t\"comment\" => trim($row[\"FIELD_DESCRIPTION\"]),\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\t$return = array();\n\t\t/*\n\t\t$query = 'SELECT RDB$INDEX_SEGMENTS.RDB$FIELD_NAME AS field_name,\nRDB$INDICES.RDB$DESCRIPTION AS description,\n(RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION + 1) AS field_position\nFROM RDB$INDEX_SEGMENTS\nLEFT JOIN RDB$INDICES ON RDB$INDICES.RDB$INDEX_NAME = RDB$INDEX_SEGMENTS.RDB$INDEX_NAME\nLEFT JOIN RDB$RELATION_CONSTRAINTS ON RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME = RDB$INDEX_SEGMENTS.RDB$INDEX_NAME\nWHERE UPPER(RDB$INDICES.RDB$RELATION_NAME) = ' . q($table) . '\n// AND UPPER(RDB$INDICES.RDB$INDEX_NAME) = \\'TEST2_FIELD5_IDX\\'\nAND RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE IS NULL\nORDER BY RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION';\n\t\t*/\n\t\treturn $return;\n\t}\n\n\tfunction foreign_keys($table) {\n\t\treturn array();\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction information_schema($db) {\n\t\treturn false;\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction types(): array {\n\t\treturn array();\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match(\"~^(columns|sql|status|table)$~\", $feature);\n\t}\n}\n"
  },
  {
    "path": "plugins/drivers/igdb.php",
    "content": "<?php\n/** Driver for https://api-docs.igdb.com/\n* @link https://demo.adminer.org/igdb/?igdb=IGDB&db=api\n* username: your Client-ID\n* password: your access token from https://id.twitch.tv/oauth2/token\n* @link https://www.adminer.org/static/plugins/igdb.png\n*/\n\nnamespace Adminer;\n\nadd_driver(\"igdb\", \"APICalypse\");\n\nif (isset($_GET[\"igdb\"])) {\n\tdefine('Adminer\\DRIVER', \"igdb\");\n\n\tclass Db extends SqlDb {\n\t\tpublic $extension = \"json\";\n\t\tpublic $server_info = \"v4\";\n\t\tprivate $username;\n\t\tprivate $password;\n\n\t\tfunction attach($server, $username, $password): string {\n\t\t\t$this->username = $username;\n\t\t\t$this->password = $password;\n\t\t\treturn '';\n\t\t}\n\n\t\tfunction select_db($database) {\n\t\t\treturn ($database == \"api\");\n\t\t}\n\n\t\tfunction request($endpoint, $query, $method = 'POST') {\n\t\t\t$context = stream_context_create(array('http' => array(\n\t\t\t\t'method' => $method,\n\t\t\t\t'header' => array(\n\t\t\t\t\t\"Content-Type: text/plain\",\n\t\t\t\t\t\"Client-ID: $this->username\",\n\t\t\t\t\t\"Authorization: Bearer $this->password\",\n\t\t\t\t),\n\t\t\t\t'content' => $query,\n\t\t\t\t'ignore_errors' => true,\n\t\t\t)));\n\t\t\t$response = file_get_contents(\"https://api.igdb.com/v4/$endpoint\", false, $context);\n\t\t\t$return = json_decode($response, true);\n\t\t\tif ($http_response_header[0] != 'HTTP/1.1 200 OK') {\n\t\t\t\tif (is_array($return)) {\n\t\t\t\t\tforeach (is_array($return[0]) ? $return : array($return) as $rows) {\n\t\t\t\t\t\tforeach ($rows as $key => $val) {\n\t\t\t\t\t\t\t$this->error .= '<b>' . h($key) . ':</b> ' . (is_url($val) ? '<a href=\"' . h($val) . '\"' . target_blank() . '>' . h($val) . '</a>' : h($val)) . '<br>';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$this->error = htmlspecialchars(strip_tags($response), 0, null, false);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction query($query, $unbuffered = false) {\n\t\t\tif (preg_match('~^SELECT COUNT\\(\\*\\) FROM (\\w+)( WHERE ((MATCH \\(search\\) AGAINST \\((.+)\\))|.+))?$~', $query, $match)) {\n\t\t\t\treturn new Result(array($match[1] == 'dumps' ? array('count' => 50) : $this->request(\"$match[1]/count\", ($match[5] ? 'search \"' . addcslashes($match[5], '\\\\\"') . '\";'\n\t\t\t\t\t: ($match[3] ? 'where ' . str_replace(' AND ', ' & ', $match[3]) . ';'\n\t\t\t\t\t: ''\n\t\t\t\t)))));\n\t\t\t}\n\t\t\tif (preg_match('~^\\s*(GET|POST|DELETE)\\s+([\\w/?=]+)\\s*;\\s*(.*)$~s', $query, $match)) {\n\t\t\t\t$endpoint = $match[2];\n\t\t\t\t$response = $this->request($endpoint, $match[3], $match[1]);\n\t\t\t\tif ($response === false) {\n\t\t\t\t\treturn $response;\n\t\t\t\t}\n\t\t\t\t$return = new Result(is_array($response[0]) ? $response : array($response));\n\t\t\t\t$return->table = $endpoint;\n\t\t\t\tif ($endpoint == 'multiquery') {\n\t\t\t\t\t$return->results = $response;\n\t\t\t\t}\n\t\t\t\treturn $return;\n\t\t\t}\n\t\t\t$this->error = \"Syntax:<br>POST &lt;endpoint>; fields ...;\";\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction store_result() {\n\t\t\tif ($this->multi && ($result = current($this->multi->results))) {\n\t\t\t\techo \"<h3>\" . h($result['name']) . \"</h3>\\n\";\n\t\t\t\t$this->multi->__construct($result['count'] ? array(array('count' => $result['count'])) : $result['result']);\n\t\t\t}\n\t\t\treturn $this->multi;\n\t\t}\n\n\t\tfunction next_result(): bool {\n\t\t\treturn $this->multi && next($this->multi->results);\n\t\t}\n\n\t\tfunction quote($string): string {\n\t\t\treturn $string;\n\t\t}\n\t}\n\n\tclass Result {\n\t\tpublic $num_rows;\n\t\tpublic $table;\n\t\tpublic $results = array();\n\t\tprivate $result;\n\t\tprivate $fields;\n\n\t\tfunction __construct($result) {\n\t\t\t$keys = array();\n\t\t\tforeach ($result as $i => $row) {\n\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t$keys[$key] = null;\n\t\t\t\t\tif (is_array($val) && is_int($val[0])) {\n\t\t\t\t\t\t$result[$i][$key] = \"(\" . implode(\",\", $val) . \")\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tforeach ($result as $i => $row) {\n\t\t\t\t$result[$i] = array_merge($keys, $row);\n\t\t\t}\n\t\t\t$this->result = $result;\n\t\t\t$this->num_rows = count($result);\n\t\t\t$this->fields = array_keys(idx($result, 0, array()));\n\t\t}\n\n\t\tfunction fetch_assoc() {\n\t\t\t$row = current($this->result);\n\t\t\tnext($this->result);\n\t\t\treturn $row;\n\t\t}\n\n\t\tfunction fetch_row() {\n\t\t\t$row = $this->fetch_assoc();\n\t\t\treturn ($row ? array_values($row) : false);\n\t\t}\n\n\t\tfunction fetch_field(): \\stdClass {\n\t\t\t$field = current($this->fields);\n\t\t\tnext($this->fields);\n\t\t\treturn ($field != '' ? (object) array('name' => $field, 'type' => 15, 'charsetnr' => 0, 'orgtable' => $this->table) : false);\n\t\t}\n\t}\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"json\");\n\t\tstatic $jush = \"igdb\";\n\t\tprivate static $docsFilename = __DIR__ . DIRECTORY_SEPARATOR . 'igdb-api.html';\n\n\t\tpublic $delimiter = \";;\";\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"~\");\n\n\t\tpublic $tables = array();\n\t\tpublic $links = array();\n\t\tpublic $fields = array();\n\t\tpublic $foreignKeys = array();\n\t\tpublic $foundRows = null;\n\n\t\tstatic function connect(string $server, string $username, string $password) {\n\t\t\tif (!file_exists(self::$docsFilename)) {\n\t\t\t\treturn \"Download https://api-docs.igdb.com/ and save it as \" . self::$docsFilename; // copy() doesn't work - bot protection\n\t\t\t}\n\t\t\treturn parent::connect($server, $username, $password);\n\t\t}\n\n\t\tfunction __construct($connection) {\n\t\t\tparent::__construct($connection);\n\t\t\tlibxml_use_internal_errors(true);\n\t\t\t$dom = new \\DOMDocument();\n\t\t\t$dom->loadHTMLFile(self::$docsFilename);\n\t\t\t$xpath = new \\DOMXPath($dom);\n\t\t\t$els = $xpath->query('//div[@class=\"content\"]/*');\n\t\t\t$link = '';\n\t\t\tforeach ($els as $i => $el) {\n\t\t\t\tif ($el->tagName == 'h2') {\n\t\t\t\t\t$link = $el->getAttribute('id');\n\t\t\t\t}\n\t\t\t\tif ($el->nodeValue == 'Request Path') {\n\t\t\t\t\t$table = preg_replace('~^https://api.igdb.com/v4/~', '', $els[$i+1]->firstElementChild->nodeValue);\n\t\t\t\t\t$comment = $els[$i-1]->tagName == 'p' ? $els[$i-1]->nodeValue : '';\n\t\t\t\t\tif (preg_match('~^DEPRECATED!~', $comment)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t$this->fields[$table]['id'] = array('full_type' => 'bigint', 'comment' => '');\n\t\t\t\t\t$this->links[$link] = $table;\n\t\t\t\t\t$this->tables[$table] = array('Name' => $table, 'Engine' => 'endpoint', 'Comment' => $comment);\n\t\t\t\t\tforeach ($xpath->query('tbody/tr', $els[$i+2]) as $tr) {\n\t\t\t\t\t\t$tds = $xpath->query('td', $tr);\n\t\t\t\t\t\t$field = $tds[0]->nodeValue;\n\t\t\t\t\t\t$comment = $tds[2]->nodeValue;\n\t\t\t\t\t\tif ($field != 'checksum' && $field != 'content_descriptions' && !preg_match('~^DEPRECATED!~', $comment)) {\n\t\t\t\t\t\t\t$this->fields[$table][$field] = array(\n\t\t\t\t\t\t\t\t'full_type' => str_replace('  ', ' ', $tds[1]->nodeValue),\n\t\t\t\t\t\t\t\t'comment' => str_replace('  ', ' ', $comment),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t$ref = $xpath->query('a/@href', $tds[1]);\n\t\t\t\t\t\t\tif (count($ref) && !in_array($ref[0]->value, array('#game-version-feature-enums', '#tag-numbers'))) {\n\t\t\t\t\t\t\t\t$this->foreignKeys[$table][$field] = substr($ref[0]->value, 1);\n\t\t\t\t\t\t\t} elseif ($field === 'game_id') { // game_time_to_beats, popularity_primitives\n\t\t\t\t\t\t\t\t$this->foreignKeys[$table][$field] = 'game';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tuksort($this->fields[$table], function ($a, $b) use ($table) {\n\t\t\t\t\t\treturn (($b == 'id') - ($a == 'id'))\n\t\t\t\t\t\t\t?: (($b == 'name') - ($a == 'name'))\n\t\t\t\t\t\t\t?: (($a == 'updated_at') - ($b == 'updated_at'))\n\t\t\t\t\t\t\t?: (($a == 'created_at') - ($b == 'created_at'))\n\t\t\t\t\t\t\t?: (!idx($this->foreignKeys[$table], $b) - !idx($this->foreignKeys[$table], $a))\n\t\t\t\t\t\t\t?: ($a < $b ? -1 : 1)\n\t\t\t\t\t\t;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$this->tables['dumps'] = array(\n\t\t\t\t'Name' => 'dumps',\n\t\t\t\t'Engine' => 'dumps',\n\t\t\t\t'Comment' => 'Daily updated CSV Data Dumps which can be used to kick start your projects or keep your data up to date (within 24 hours)',\n\t\t\t);\n\t\t\t$this->links['data-dumps'] = 'dumps';\n\t\t\t$this->fields['dumps'] = array(\n\t\t\t\t's3_url' => array('comment' => 'The download Url is a presigned S3 url that is valid for 5 minutes'),\n\t\t\t\t'endpoint' => array(),\n\t\t\t\t'file_name' => array(),\n\t\t\t\t'size_bytes' => array(),\n\t\t\t\t'updated_at' => array('full_type' => 'datetime'),\n\t\t\t\t'schema_version' => array('full_type' => 'datetime', 'comment' => 'Will change when the schema changes'),\n\t\t\t\t'schema' => array('comment' => 'Reflects the current data structure and data type that the Dump is using'),\n\t\t\t);\n\n\t\t\t$this->tables['webhooks'] = array(\n\t\t\t\t'Name' => 'webhooks',\n\t\t\t\t'Engine' => 'webhooks',\n\t\t\t\t'Comment' => 'Webhooks allow us to push data to you when it is added, updated, or deleted',\n\t\t\t);\n\t\t\t$this->links['webhooks'] = 'webhooks';\n\t\t\t$this->fields['webhooks'] = array(\n\t\t\t\t'endpoint' => array(\n\t\t\t\t\t'full_type' => 'String',\n\t\t\t\t\t'comment' => 'Specify what type of data you want from your webhook',\n\t\t\t\t\t'privileges' => array('insert' => 1),\n\t\t\t\t),\n\t\t\t\t'id' => array('comment' => 'A unique ID for the webhook'),\n\t\t\t\t'url' => array(\n\t\t\t\t\t'full_type' => 'String',\n\t\t\t\t\t'length' => '100',\n\t\t\t\t\t'comment' => 'Your prepared url that is ready to accept data from us',\n\t\t\t\t\t'privileges' => array('select' => 1, 'insert' => 1),\n\t\t\t\t),\n\t\t\t\t'method' => array(\n\t\t\t\t\t'full_type' => 'enum',\n\t\t\t\t\t'length' => \"('create','delete','update')\",\n\t\t\t\t\t'comment' => 'The type of data you are expecting to your url, there are three types of methods',\n\t\t\t\t\t'privileges' => array('insert' => 1),\n\t\t\t\t),\n\t\t\t\t'category' => array('comment' => 'Based on the endpoint you chose'),\n\t\t\t\t'sub_category' => array('comment' => 'Based on your method (can be 0, 1, 2)'),\n\t\t\t\t'active' => array('comment' => 'Is the webhook currently active'),\n\t\t\t\t'api_key' => array('comment' => 'Displays the api key the webhook is connected to'),\n\t\t\t\t'secret' => array(\n\t\t\t\t\t'full_type' => 'String',\n\t\t\t\t\t'comment' => 'Your “secret” password for your webhook',\n\t\t\t\t\t'privileges' => array('select' => 1, 'insert' => 1),\n\t\t\t\t),\n\t\t\t\t'created_at' => array('comment' => 'Created at date'),\n\t\t\t\t'updated_at' => array('comment' => 'Updated at date'),\n\t\t\t);\n\t\t}\n\n\t\tfunction select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {\n\t\t\t$query = '';\n\t\t\t$search = preg_match('~^MATCH \\(search\\) AGAINST \\((.+)\\)$~', $where[0], $match);\n\t\t\tif ($search) {\n\t\t\t\t$query = 'search \"' . addcslashes($match[1], '\\\\\"') . \"\\\";\\n\";\n\t\t\t\tunset($where[0]);\n\t\t\t}\n\t\t\tforeach ($where as $i => $val) {\n\t\t\t\t$where[$i] = str_replace(' OR ', ' | ', $val);\n\t\t\t}\n\t\t\t$columns = ($select != array('*') ? $select : array_keys($this->fields[$table]));\n\t\t\t$common = ($where ? \"\\nwhere \" . implode(\" & \", $where) . \";\" : \"\");\n\t\t\t$method = ($table == 'webhooks' || $table == 'dumps' ? 'GET' : 'POST');\n\t\t\tif ($method == 'POST') {\n\t\t\t\t$query .= \"fields \" . implode(\",\", $select) . \";\"\n\t\t\t\t\t. ($select == array('*') ? \"\\nexclude checksum;\" : \"\")\n\t\t\t\t\t. $common\n\t\t\t\t\t. ($order ? \"\\nsort \" . strtolower(implode(\",\", $order)) . \";\" : \"\")\n\t\t\t\t\t. \"\\nlimit $limit;\"\n\t\t\t\t\t. ($page ? \"\\noffset \" . ($page * $limit) . \";\" : \"\")\n\t\t\t\t;\n\t\t\t}\n\t\t\t$start = microtime(true);\n\t\t\t$multi = (!$search && $method == 'POST' && array_key_exists($table, driver()->tables));\n\t\t\t$realQuery = str_replace(\"*;\\nexclude checksum\", implode(',', $columns), $query); // exclude deprecated columns\n\t\t\t$return = ($multi\n\t\t\t\t? $this->conn->request('multiquery', \"query $table \\\"result\\\" { $realQuery };\\nquery $table/count \\\"count\\\" { $common };\")\n\t\t\t\t: $this->conn->request(($method == 'GET' && $where ? \"$table/\" . reset($_GET[\"where\"]) : $table), $realQuery, $method)\n\t\t\t);\n\t\t\tif ($print) {\n\t\t\t\techo adminer()->selectQuery(\"$method $table;\\n$query\", $start);\n\t\t\t}\n\t\t\tif ($return === false) {\n\t\t\t\treturn $return;\n\t\t\t}\n\t\t\t$this->foundRows = ($multi ? $return[1]['count'] : null);\n\t\t\t$return = ($multi ? $return[0]['result'] : $return);\n\t\t\tif ($table == 'dumps' && $where) {\n\t\t\t\t$return = array($return);\n\t\t\t} elseif ($return && $method == 'POST') {\n\t\t\t\t$return[0] = array_merge(array_fill_keys($columns, null), $return[0]);\n\t\t\t}\n\t\t\treturn new Result($return);\n\t\t}\n\n\t\tfunction insert($table, $set) {\n\t\t\t$content = array();\n\t\t\tforeach ($set as $key => $val) {\n\t\t\t\tif ($key != 'endpoint') {\n\t\t\t\t\t$content[] = urlencode($key) . '=' . urlencode($val);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queries(\"POST $set[endpoint]/$table; \" . implode('&', $content));\n\t\t}\n\n\t\tfunction delete($table, $queryWhere, $limit = 0) {\n\t\t\tpreg_match_all('~\\bid = (\\d+)~', $queryWhere, $matches);\n\t\t\t$this->conn->affected_rows = 0;\n\t\t\tforeach ($matches[1] as $id) {\n\t\t\t\t$result = queries(\"DELETE $table/$id;\");\n\t\t\t\tif (!$result) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$row = $result->fetch_row();\n\t\t\t\tif (!$row[0]) {\n\t\t\t\t\t$this->conn->error = \"ID $id not found.\";\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t$this->conn->affected_rows++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction value($val, $field): ?string {\n\t\t\treturn ($val && in_array($field['full_type'], array('Unix Time Stamp', 'datetime')) ? str_replace(' 00:00:00', '', gmdate('Y-m-d H:i:s', $val)) : $val);\n\t\t}\n\n\t\tfunction tableHelp($name, $is_view = false) {\n\t\t\treturn strtolower(\"https://api-docs.igdb.com/#\" . array_search($name, $this->links));\n\t\t}\n\t}\n\n\tfunction logged_user() {\n\t\treturn $_GET[\"username\"];\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn array(\"api\");\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t}\n\n\tfunction information_schema($db) {\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\t$return = array(array('type' => 'PRIMARY', 'columns' => array($table == 'dumps' ? 'endpoint' : 'id')));\n\t\tif (in_array($table, array('characters', 'collections', 'games', 'platforms', 'themes'))) { // https://api-docs.igdb.com/#search-1\n\t\t\t$return[] = array(\"type\" => \"FULLTEXT\", \"columns\" => array(\"search\"));\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\tforeach (driver()->fields[$table] ?: array() as $key => $val) {\n\t\t\t$type = strtolower(preg_replace('~ .*~', '', $val['full_type']));\n\t\t\t$return[$key] = $val + array(\n\t\t\t\t\"field\" => $key,\n\t\t\t\t\"type\" => ($type == 'reference' ? 'int' : $type), // align right reference columns\n\t\t\t\t\"privileges\" => array(\"select\" => 1) + ($table == 'webhooks' || $table == 'dumps' ? array() : array(\"where\" => 1, \"order\" => 1)),\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn $query;\n\t}\n\n\tfunction idf_escape($idf) {\n\t\treturn $idf;\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction foreign_keys($table) {\n\t\t$return = array();\n\t\tforeach (driver()->foreignKeys[$table] ?: array() as $key => $val) {\n\t\t\t$return[] = array(\n\t\t\t\t'table' => driver()->links[$val],\n\t\t\t\t'source' => array($key),\n\t\t\t\t'target' => array('id'),\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction tables_list() {\n\t\treturn array_fill_keys(array_keys(table_status()), 'table');\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$tables = driver()->tables;\n\t\treturn ($name != '' ? ($tables[$name] ? array($name => $tables[$name]) : array()) : $tables);\n\t}\n\n\tfunction count_tables($databases) {\n\t\treturn array(reset($databases) => count(tables_list()));\n\t}\n\n\tfunction error() {\n\t\treturn connection()->error;\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn false;\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t\treturn driver()->foundRows;\n\t}\n\n\tfunction fk_support($table_status) {\n\t\treturn true;\n\t}\n\n\tfunction last_id($result): string {\n\t\t$row = $result->fetch_assoc();\n\t\treturn (string) $row['id'];\n\t}\n\n\tfunction support($feature) {\n\t\treturn in_array($feature, array('columns', 'comment', 'sql', 'table'));\n\t}\n}\n"
  },
  {
    "path": "plugins/drivers/imap.php",
    "content": "<?php\n/** Experimental driver for IMAP created just for fun. Features:\n* - list mailboxes with number of messages (Rows) and unread messages (Data Free)\n* - creating and dropping mailboxes work, truncate does expunge on all mailboxes\n* - list messages in each mailbox - limit and offset works but there's no search and order\n* - for each message, there's subject, from, to, date and some flags\n* - editing the message shows some other information\n* - deleting marks the message for deletion but doesn't expunge the mailbox\n* - inserting or updating the message does nothing\n* @link https://www.adminer.org/static/plugins/imap.png\n*/\n\nnamespace Adminer;\n\nadd_driver(\"imap\", \"IMAP\");\n\nif (isset($_GET[\"imap\"])) {\n\tdefine('Adminer\\DRIVER', \"imap\");\n\n\tif (extension_loaded(\"imap\")) {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"IMAP\";\n\t\t\tpublic $server_info = \"?\"; // imap_mailboxmsginfo() or imap_check() don't return anything useful\n\t\t\tprivate $mailbox;\n\t\t\tprivate $imap;\n\n\t\t\tfunction attach($server, $username, $password): string {\n\t\t\t\tlist($host, $port) = host_port($server);\n\t\t\t\t$this->mailbox = \"{\" . \"$host:\" . ($port ?: 993) . \"/ssl}\"; // Adminer disallows specifying privileged port in server name\n\t\t\t\t$this->imap = @imap_open($this->mailbox, $username, $password, OP_HALFOPEN, 1);\n\t\t\t\treturn ($this->imap ? '' : imap_last_error());\n\t\t\t}\n\n\t\t\tfunction select_db($database) {\n\t\t\t\treturn ($database == \"mail\");\n\t\t\t}\n\n\t\t\tfunction query($query, $unbuffered = false) {\n\t\t\t\tif (preg_match('~DELETE FROM \"(.+?)\"~', $query)) {\n\t\t\t\t\tpreg_match_all('~\"uid\" = (\\d+)~', $query, $matches);\n\t\t\t\t\treturn imap_delete($this->imap, implode(\",\", $matches[1]), FT_UID);\n\t\t\t\t} elseif (preg_match('~^SELECT COUNT\\(\\*\\)\\sFROM \"(.+?)\"~s', $query, $match)) {\n\t\t\t\t\t$status = table_status1($match[1]);\n\t\t\t\t\treturn new Result(array(array($status[\"Rows\"])));\n\t\t\t\t} elseif (preg_match('~^SELECT (.+)\\sFROM \"(.+?)\"(?:\\sWHERE \"uid\" = (\\d+))?.*?(?:\\sLIMIT (\\d+)(?:\\sOFFSET (\\d+))?)?~s', $query, $match)) {\n\t\t\t\t\tlist(, $columns, $table, $uid, $limit, $offset) = $match;\n\t\t\t\t\timap_reopen($this->imap, $this->mailbox . $table);\n\t\t\t\t\tif ($uid) {\n\t\t\t\t\t\t$return = array((array) imap_fetchstructure($this->imap, $uid, FT_UID));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$count = imap_num_msg($this->imap);\n\t\t\t\t\t\t$range = ($offset + 1) . \":\" . ($limit ? min($count, $offset + $limit) : $count);\n\t\t\t\t\t\t$return = array();\n\t\t\t\t\t\t$fields = fields($table);\n\t\t\t\t\t\t$columns = ($columns == \"*\" ? $fields : array_flip(explode(\", \", $columns)));\n\t\t\t\t\t\t$empty = array_fill_keys(array_keys($fields), null);\n\t\t\t\t\t\tforeach (imap_fetch_overview($this->imap, $range) as $row) {\n\t\t\t\t\t\t\t// imap_utf8 doesn't work with some strings\n\t\t\t\t\t\t\t$row->subject = iconv_mime_decode($row->subject, 2, \"utf-8\");\n\t\t\t\t\t\t\t$row->from = iconv_mime_decode($row->from, 2, \"utf-8\");\n\t\t\t\t\t\t\t$row->to = iconv_mime_decode($row->to, 2, \"utf-8\");\n\t\t\t\t\t\t\t$row->udate = gmdate(\"Y-m-d H:i:s\", $row->udate);\n\t\t\t\t\t\t\t$return[] = array_intersect_key(array_merge($empty, (array) $row), $columns);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn new Result($return);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction quote($string): string {\n\t\t\t\treturn $string;\n\t\t\t}\n\n\t\t\tfunction tables_list() {\n\t\t\t\tstatic $return;\n\t\t\t\tif ($return === null) {\n\t\t\t\t\t$return = array();\n\t\t\t\t\tforeach (imap_list($this->imap, $this->mailbox, \"*\") as $val) {\n\t\t\t\t\t\t$return[substr($val, strlen($this->mailbox))] = \"table\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn array_reverse($return);\n\t\t\t}\n\n\t\t\tfunction table_status($name, $fast) {\n\t\t\t\tif ($fast) {\n\t\t\t\t\treturn array(\"Name\" => $name);\n\t\t\t\t}\n\t\t\t\t$return = imap_status($this->imap, $this->mailbox . $name, SA_ALL);\n\t\t\t\treturn array(\n\t\t\t\t\t\"Name\" => $name,\n\t\t\t\t\t\"Rows\" => $return->messages,\n\t\t\t\t\t\"Auto_increment\" => $return->uidnext,\n\t\t\t\t\t\"Data_length\" => $return->messages, // this is used on database overview\n\t\t\t\t\t\"Data_free\" => $return->unseen,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfunction create($name) {\n\t\t\t\treturn imap_createmailbox($this->imap, $this->mailbox . $name);\n\t\t\t}\n\n\t\t\tfunction drop($name) {\n\t\t\t\treturn imap_deletemailbox($this->imap, $this->mailbox . $name);\n\t\t\t}\n\n\t\t\tfunction expunge() {\n\t\t\t\treturn imap_expunge($this->imap);\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $result;\n\t\t\tprivate $fields;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\t$this->result = $result;\n\t\t\t\t$this->num_rows = count($result);\n\t\t\t\t$this->fields = array_keys(idx($result, 0, array()));\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\t$row = current($this->result);\n\t\t\t\tnext($this->result);\n\t\t\t\treturn $row;\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\t$row = $this->fetch_assoc();\n\t\t\t\treturn ($row ? array_values($row) : false);\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$field = current($this->fields);\n\t\t\t\tnext($this->fields);\n\t\t\t\treturn ($field != '' ? (object) array('name' => $field, 'type' => 15, 'charsetnr' => 0) : false);\n\t\t\t}\n\t\t}\n\t}\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"imap\");\n\t\tstatic $jush = \"imap\";\n\t\tpublic $insertFunctions = array(\"json\");\n\t}\n\n\tfunction logged_user() {\n\t\treturn $_GET[\"username\"];\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn array(\"mail\");\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t}\n\n\tfunction information_schema($db) {\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\treturn array(array(\"type\" => \"PRIMARY\", \"columns\" => array(\"uid\")));\n\t}\n\n\tfunction fields($table) {\n\t\t$return = array();\n\t\tforeach (\n\t\t\tarray( // taken from imap_fetch_overview\n\t\t\t\t'subject' => 'the messages subject',\n\t\t\t\t'from' => 'who sent it',\n\t\t\t\t'to' => 'recipient',\n\t\t\t\t'date' => 'when was it sent',\n\t\t\t\t'message_id' => 'Message-ID',\n\t\t\t\t'references' => 'is a reference to this message id',\n\t\t\t\t'in_reply_to' => 'is a reply to this message id',\n\t\t\t\t'size' => 'size in bytes',\n\t\t\t\t'uid' => 'UID the message has in the mailbox',\n\t\t\t\t'msgno' => 'message sequence number in the mailbox',\n\t\t\t\t'recent' => 'flagged as recent',\n\t\t\t\t'flagged' => 'flagged',\n\t\t\t\t'answered' => 'flagged as answered',\n\t\t\t\t'deleted' => 'flagged for deletion',\n\t\t\t\t'seen' => 'flagged as already read',\n\t\t\t\t'draft' => 'flagged as being a draft',\n\t\t\t\t'udate' => 'the GMT time of the arrival date',\n\t\t\t) as $name => $comment\n\t\t) {\n\t\t\t$return[$name] = array(\n\t\t\t\t\"field\" => $name,\n\t\t\t\t\"type\" => (preg_match('~^(size|uid|msgno)$~', $name) ? \"int\" : \"\"),\n\t\t\t\t\"privileges\" => array(\"select\" => 1),\n\t\t\t\t\"comment\" => $comment,\n\t\t\t);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT $limit\" . ($offset ? \" OFFSET $offset\" : \"\") : \"\");\n\t}\n\n\tfunction idf_escape($idf) {\n\t\treturn '\"' . str_replace('\"', '\"\"', $idf) . '\"';\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction foreign_keys($table) {\n\t\treturn array();\n\t}\n\n\tfunction tables_list() {\n\t\treturn connection()->tables_list();\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$return = array();\n\t\tforeach (($name != \"\" ? array($name => 1) : tables_list()) as $table => $type) {\n\t\t\t$return[$table] = connection()->table_status($table, $fast);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction count_tables($databases) {\n\t\treturn array(reset($databases) => count(tables_list()));\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction is_view($table_status) {\n\t\treturn false;\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t\treturn $table_status[\"Rows\"];\n\t}\n\n\tfunction fk_support($table_status) {\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\treturn connection()->create($name);\n\t}\n\n\tfunction drop_tables($tables) {\n\t\t$return = true;\n\t\tforeach ($tables as $name) {\n\t\t\t$return = $return && connection()->drop($name);\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\treturn connection()->expunge();\n\t}\n\n\tfunction support($feature) {\n\t\treturn false;\n\t}\n}\n"
  },
  {
    "path": "plugins/drivers/mongo.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"mongo\", \"MongoDB (alpha)\");\n\nif (isset($_GET[\"mongo\"])) {\n\tdefine('Adminer\\DRIVER', \"mongo\");\n\n\tif (class_exists('MongoDB\\Driver\\Manager')) {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"MongoDB\", $server_info = MONGODB_VERSION, $last_id;\n\t\t\t/** @var \\MongoDB\\Driver\\Manager */ public $_link;\n\t\t\tpublic $_db, $_db_name;\n\n\t\t\tfunction attach($server, $username, $password): string {\n\t\t\t\t$options = array();\n\t\t\t\tif ($username . $password != \"\") {\n\t\t\t\t\t$options[\"username\"] = $username;\n\t\t\t\t\t$options[\"password\"] = $password;\n\t\t\t\t}\n\t\t\t\t$db = adminer()->database();\n\t\t\t\tif ($db != \"\") {\n\t\t\t\t\t$options[\"db\"] = $db;\n\t\t\t\t}\n\t\t\t\tif (($auth_source = getenv(\"MONGO_AUTH_SOURCE\"))) {\n\t\t\t\t\t$options[\"authSource\"] = $auth_source;\n\t\t\t\t}\n\t\t\t\t$this->_link = new \\MongoDB\\Driver\\Manager(\"mongodb://$server\", $options);\n\t\t\t\t$this->executeDbCommand($options[\"db\"], array('ping' => 1));\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tfunction executeCommand($command) {\n\t\t\t\treturn $this->executeDbCommand($this->_db_name, $command);\n\t\t\t}\n\n\t\t\tfunction executeDbCommand($db, $command) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $this->_link->executeCommand($db, new \\MongoDB\\Driver\\Command($command));\n\t\t\t\t} catch (\\Exception $e) {\n\t\t\t\t\t$this->error = $e->getMessage();\n\t\t\t\t\treturn array();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction executeBulkWrite($namespace, $bulk, $counter) {\n\t\t\t\ttry {\n\t\t\t\t\t$results = $this->_link->executeBulkWrite($namespace, $bulk);\n\t\t\t\t\t$this->affected_rows = $results->$counter();\n\t\t\t\t\treturn true;\n\t\t\t\t} catch (\\Exception $e) {\n\t\t\t\t\t$this->error = $e->getMessage();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction query($query, $unbuffered = false) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction select_db($database) {\n\t\t\t\t$this->_db_name = $database;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tfunction quote($string): string {\n\t\t\t\treturn $string;\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $rows = array(), $offset = 0, $charset = array();\n\n\t\t\tfunction __construct($result) {\n\t\t\t\tforeach ($result as $item) {\n\t\t\t\t\t$row = array();\n\t\t\t\t\tforeach ($item as $key => $val) {\n\t\t\t\t\t\tif (is_a($val, 'MongoDB\\BSON\\Binary')) {\n\t\t\t\t\t\t\t$this->charset[$key] = 63;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$row[$key] =\n\t\t\t\t\t\t\t(is_a($val, 'MongoDB\\BSON\\ObjectID') ? 'MongoDB\\BSON\\ObjectID(\"' . \"$val\\\")\" :\n\t\t\t\t\t\t\t(is_a($val, 'MongoDB\\BSON\\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :\n\t\t\t\t\t\t\t(is_a($val, 'MongoDB\\BSON\\Binary') ? $val->getData() : //! allow downloading\n\t\t\t\t\t\t\t(is_a($val, 'MongoDB\\BSON\\Regex') ? \"$val\" :\n\t\t\t\t\t\t\t(is_object($val) || is_array($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE\n\t\t\t\t\t\t\t$val))))) // MongoMinKey, MongoMaxKey\n\t\t\t\t\t\t;\n\t\t\t\t\t}\n\t\t\t\t\t$this->rows[] = $row;\n\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\tif (!isset($this->rows[0][$key])) {\n\t\t\t\t\t\t\t$this->rows[0][$key] = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$this->num_rows = count($this->rows);\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\t$row = current($this->rows);\n\t\t\t\tif (!$row) {\n\t\t\t\t\treturn $row;\n\t\t\t\t}\n\t\t\t\t$return = array();\n\t\t\t\tforeach ($this->rows[0] as $key => $val) {\n\t\t\t\t\t$return[$key] = $row[$key];\n\t\t\t\t}\n\t\t\t\tnext($this->rows);\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\t$return = $this->fetch_assoc();\n\t\t\t\tif (!$return) {\n\t\t\t\t\treturn $return;\n\t\t\t\t}\n\t\t\t\treturn array_values($return);\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$keys = array_keys($this->rows[0]);\n\t\t\t\t$name = $keys[$this->offset++];\n\t\t\t\treturn (object) array(\n\t\t\t\t\t'name' => $name,\n\t\t\t\t\t'type' => 15,\n\t\t\t\t\t'charsetnr' => $this->charset[$name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\n\n\t\tfunction get_databases($flush) {\n\t\t\t$return = array();\n\t\t\tforeach (connection()->executeCommand(array('listDatabases' => 1)) as $dbs) {\n\t\t\t\tforeach ($dbs->databases as $db) {\n\t\t\t\t\t$return[] = $db->name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction count_tables($databases) {\n\t\t\t$return = array();\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction tables_list() {\n\t\t\t$collections = array();\n\t\t\tforeach (connection()->executeCommand(array('listCollections' => 1)) as $result) {\n\t\t\t\t$collections[$result->name] = 'table';\n\t\t\t}\n\t\t\treturn $collections;\n\t\t}\n\n\t\tfunction drop_databases($databases) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction indexes($table, $connection2 = null) {\n\t\t\t$return = array();\n\t\t\tforeach (connection()->executeCommand(array('listIndexes' => $table)) as $index) {\n\t\t\t\t$descs = array();\n\t\t\t\t$columns = array();\n\t\t\t\tforeach (get_object_vars($index->key) as $column => $type) {\n\t\t\t\t\t$descs[] = ($type == -1 ? '1' : null);\n\t\t\t\t\t$columns[] = $column;\n\t\t\t\t}\n\t\t\t\t$return[$index->name] = array(\n\t\t\t\t\t\"type\" => ($index->name == \"_id_\" ? \"PRIMARY\" : (isset($index->unique) ? \"UNIQUE\" : \"INDEX\")),\n\t\t\t\t\t\"columns\" => $columns,\n\t\t\t\t\t\"lengths\" => array(),\n\t\t\t\t\t\"descs\" => $descs,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction fields($table) {\n\t\t\t$driver = driver();\n\t\t\t$fields = fields_from_edit();\n\t\t\tif (!$fields) {\n\t\t\t\t$result = $driver->select($table, array(\"*\"), array(), array(), array(), 10);\n\t\t\t\tif ($result) {\n\t\t\t\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\t\t$row[$key] = null;\n\t\t\t\t\t\t\t$fields[$key] = array(\n\t\t\t\t\t\t\t\t\"field\" => $key,\n\t\t\t\t\t\t\t\t\"type\" => \"string\",\n\t\t\t\t\t\t\t\t\"null\" => ($key != $driver->primary),\n\t\t\t\t\t\t\t\t\"auto_increment\" => ($key == $driver->primary),\n\t\t\t\t\t\t\t\t\"privileges\" => array(\n\t\t\t\t\t\t\t\t\t\"insert\" => 1,\n\t\t\t\t\t\t\t\t\t\"select\" => 1,\n\t\t\t\t\t\t\t\t\t\"update\" => 1,\n\t\t\t\t\t\t\t\t\t\"where\" => 1,\n\t\t\t\t\t\t\t\t\t\"order\" => 1,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $fields;\n\t\t}\n\n\t\tfunction found_rows($table_status, $where) {\n\t\t\t$where = where_to_query($where);\n\t\t\t$toArray = connection()->executeCommand(array('count' => $table_status['Name'], 'query' => $where))->toArray();\n\t\t\treturn $toArray[0]->n;\n\t\t}\n\n\t\tfunction sql_query_where_parser($queryWhere) {\n\t\t\t$queryWhere = preg_replace('~^\\s*WHERE\\s*~', \"\", $queryWhere);\n\t\t\twhile ($queryWhere[0] == \"(\") {\n\t\t\t\t$queryWhere = preg_replace('~^\\((.*)\\)$~', \"$1\", $queryWhere);\n\t\t\t}\n\n\t\t\t$wheres = explode(' AND ', $queryWhere);\n\t\t\t$wheresOr = explode(') OR (', $queryWhere);\n\t\t\t$where = array();\n\t\t\tforeach ($wheres as $whereStr) {\n\t\t\t\t$where[] = trim($whereStr);\n\t\t\t}\n\t\t\tif (count($wheresOr) == 1) {\n\t\t\t\t$wheresOr = array();\n\t\t\t} elseif (count($wheresOr) > 1) {\n\t\t\t\t$where = array();\n\t\t\t}\n\t\t\treturn where_to_query($where, $wheresOr);\n\t\t}\n\n\t\tfunction where_to_query($whereAnd = array(), $whereOr = array()) {\n\t\t\t$data = array();\n\t\t\tforeach (array('and' => $whereAnd, 'or' => $whereOr) as $type => $where) {\n\t\t\t\tif (is_array($where)) {\n\t\t\t\t\tforeach ($where as $expression) {\n\t\t\t\t\t\tlist($col, $op, $val) = explode(\" \", $expression, 3);\n\t\t\t\t\t\tif ($col == \"_id\" && preg_match('~^(MongoDB\\\\\\\\BSON\\\\\\\\ObjectID)\\(\"(.+)\"\\)$~', $val, $match)) {\n\t\t\t\t\t\t\tlist(, $class, $val) = $match;\n\t\t\t\t\t\t\t$val = new $class($val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!in_array($op, adminer()->operators())) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (preg_match('~^\\(f\\)(.+)~', $op, $match)) {\n\t\t\t\t\t\t\t$val = (float) $val;\n\t\t\t\t\t\t\t$op = $match[1];\n\t\t\t\t\t\t} elseif (preg_match('~^\\(date\\)(.+)~', $op, $match)) {\n\t\t\t\t\t\t\t$dateTime = new \\DateTime($val);\n\t\t\t\t\t\t\t$val = new \\MongoDB\\BSON\\UTCDatetime($dateTime->getTimestamp() * 1000);\n\t\t\t\t\t\t\t$op = $match[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch ($op) {\n\t\t\t\t\t\t\tcase '=':\n\t\t\t\t\t\t\t\t$op = '$eq';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '!=':\n\t\t\t\t\t\t\t\t$op = '$ne';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '>':\n\t\t\t\t\t\t\t\t$op = '$gt';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '<':\n\t\t\t\t\t\t\t\t$op = '$lt';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '>=':\n\t\t\t\t\t\t\t\t$op = '$gte';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase '<=':\n\t\t\t\t\t\t\t\t$op = '$lte';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'regex':\n\t\t\t\t\t\t\t\t$op = '$regex';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tcontinue 2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ($type == 'and') {\n\t\t\t\t\t\t\t$data['$and'][] = array($col => array($op => $val));\n\t\t\t\t\t\t} elseif ($type == 'or') {\n\t\t\t\t\t\t\t$data['$or'][] = array($col => array($op => $val));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $data;\n\t\t}\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"mongodb\");\n\t\tstatic $jush = \"mongo\";\n\n\t\tpublic $insertFunctions = array(\"json\");\n\n\t\tpublic $operators = array(\n\t\t\t\"=\",\n\t\t\t\"!=\",\n\t\t\t\">\",\n\t\t\t\"<\",\n\t\t\t\">=\",\n\t\t\t\"<=\",\n\t\t\t\"regex\",\n\t\t\t\"(f)=\",\n\t\t\t\"(f)!=\",\n\t\t\t\"(f)>\",\n\t\t\t\"(f)<\",\n\t\t\t\"(f)>=\",\n\t\t\t\"(f)<=\",\n\t\t\t\"(date)=\",\n\t\t\t\"(date)!=\",\n\t\t\t\"(date)>\",\n\t\t\t\"(date)<\",\n\t\t\t\"(date)>=\",\n\t\t\t\"(date)<=\",\n\t\t);\n\n\t\tpublic $primary = \"_id\";\n\n\t\tstatic function connect($server, $username, $password) {\n\t\t\tif ($server == \"\") {\n\t\t\t\t$server = \"localhost:27017\";\n\t\t\t}\n\t\t\treturn parent::connect($server, $username, $password);\n\t\t}\n\n\t\tfunction select($table, array $select, array $where, array $group, array $order = array(), $limit = 1, $page = 0, $print = false) {\n\t\t\t$select = ($select == array(\"*\")\n\t\t\t\t? array()\n\t\t\t\t: array_fill_keys($select, 1)\n\t\t\t);\n\t\t\tif (count($select) && !isset($select['_id'])) {\n\t\t\t\t$select['_id'] = 0;\n\t\t\t}\n\t\t\t$where = where_to_query($where);\n\t\t\t$sort = array();\n\t\t\tforeach ($order as $val) {\n\t\t\t\t$val = preg_replace('~ DESC$~', '', $val, 1, $count);\n\t\t\t\t$sort[$val] = ($count ? -1 : 1);\n\t\t\t}\n\t\t\t$limit = min(200, max(1, $limit));\n\t\t\t$skip = $page * $limit;\n\t\t\ttry {\n\t\t\t\treturn new Result($this->conn->_link->executeQuery($this->conn->_db_name . \".$table\", new \\MongoDB\\Driver\\Query($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort))));\n\t\t\t} catch (\\Exception $e) {\n\t\t\t\t$this->conn->error = $e->getMessage();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfunction update($table, array $set, $queryWhere, $limit = 0, $separator = \"\\n\") {\n\t\t\t$db = $this->conn->_db_name;\n\t\t\t$where = sql_query_where_parser($queryWhere);\n\t\t\t$bulk = new \\MongoDB\\Driver\\BulkWrite(array());\n\t\t\tif (isset($set['_id'])) {\n\t\t\t\tunset($set['_id']);\n\t\t\t}\n\t\t\t$removeFields = array();\n\t\t\tforeach ($set as $key => $value) {\n\t\t\t\tif ($value == 'NULL') {\n\t\t\t\t\t$removeFields[$key] = 1;\n\t\t\t\t\tunset($set[$key]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$update = array('$set' => $set);\n\t\t\tif (count($removeFields)) {\n\t\t\t\t$update['$unset'] = $removeFields;\n\t\t\t}\n\t\t\t$bulk->update($where, $update, array('upsert' => false));\n\t\t\treturn $this->conn->executeBulkWrite(\"$db.$table\", $bulk, 'getModifiedCount');\n\t\t}\n\n\t\tfunction delete($table, $queryWhere, $limit = 0) {\n\t\t\t$db = $this->conn->_db_name;\n\t\t\t$where = sql_query_where_parser($queryWhere);\n\t\t\t$bulk = new \\MongoDB\\Driver\\BulkWrite(array());\n\t\t\t$bulk->delete($where, array('limit' => $limit));\n\t\t\treturn $this->conn->executeBulkWrite(\"$db.$table\", $bulk, 'getDeletedCount');\n\t\t}\n\n\t\tfunction insert($table, array $set) {\n\t\t\t$db = $this->conn->_db_name;\n\t\t\t$bulk = new \\MongoDB\\Driver\\BulkWrite(array());\n\t\t\tif ($set['_id'] == '') {\n\t\t\t\tunset($set['_id']);\n\t\t\t}\n\t\t\t$bulk->insert($set);\n\t\t\treturn $this->conn->executeBulkWrite(\"$db.$table\", $bulk, 'getInsertedCount');\n\t\t}\n\t}\n\n\n\n\tfunction table($idf) {\n\t\treturn $idf;\n\t}\n\n\tfunction idf_escape($idf) {\n\t\treturn $idf;\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$return = array();\n\t\tforeach (($name != \"\" ? array($name => 1) : tables_list()) as $table => $type) {\n\t\t\t$return[$table] = array(\"Name\" => $table, \"Engine\" => \"\");\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction create_database($db, $collation) {\n\t\treturn true;\n\t}\n\n\tfunction last_id($result) {\n\t\treturn connection()->last_id;\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction logged_user() {\n\t\t$credentials = adminer()->credentials();\n\t\treturn $credentials[1];\n\t}\n\n\tfunction alter_indexes($table, $alter) {\n\t\tforeach ($alter as $val) {\n\t\t\tlist($type, $name, $set) = $val;\n\t\t\tif ($set == \"DROP\") {\n\t\t\t\t$return = connection()->_db->command(array(\"deleteIndexes\" => $table, \"index\" => $name));\n\t\t\t} else {\n\t\t\t\t$columns = array();\n\t\t\t\tforeach ($set as $column) {\n\t\t\t\t\t$column = preg_replace('~ DESC$~', '', $column, 1, $count);\n\t\t\t\t\t$columns[$column] = ($count ? -1 : 1);\n\t\t\t\t}\n\t\t\t\t$return = connection()->_db->selectCollection($table)->ensureIndex($columns, array(\n\t\t\t\t\t\"unique\" => ($type == \"UNIQUE\"),\n\t\t\t\t\t\"name\" => $name,\n\t\t\t\t\t//! \"sparse\"\n\t\t\t\t));\n\t\t\t}\n\t\t\tif ($return['errmsg']) {\n\t\t\t\tconnection()->error = $return['errmsg'];\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction support($feature) {\n\t\treturn preg_match(\"~database|indexes|descidx~\", $feature);\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t}\n\n\tfunction information_schema($db) {\n\t}\n\n\tfunction is_view($table_status) {\n\t}\n\n\tfunction convert_field($field) {\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction foreign_keys($table) {\n\t\treturn array();\n\t}\n\n\tfunction fk_support($table_status) {\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\tif ($table == \"\") {\n\t\t\tconnection()->_db->createCollection($name);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction drop_tables($tables) {\n\t\tforeach ($tables as $table) {\n\t\t\t$response = connection()->_db->selectCollection($table)->drop();\n\t\t\tif (!$response['ok']) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction truncate_tables($tables) {\n\t\tforeach ($tables as $table) {\n\t\t\t$response = connection()->_db->selectCollection($table)->remove();\n\t\t\tif (!$response['ok']) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n"
  },
  {
    "path": "plugins/drivers/simpledb.php",
    "content": "<?php\nnamespace Adminer;\n\nadd_driver(\"simpledb\", \"SimpleDB\");\n\nif (isset($_GET[\"simpledb\"])) {\n\tdefine('Adminer\\DRIVER', \"simpledb\");\n\n\tif (class_exists('SimpleXMLElement') && ini_bool('allow_url_fopen')) {\n\t\tclass Db extends SqlDb {\n\t\t\tpublic $extension = \"SimpleXML\", $server_info = '2009-04-15', $timeout, $next;\n\n\t\t\tfunction attach($server, $username, $password): string {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tfunction select_db($database) {\n\t\t\t\treturn ($database == \"domain\");\n\t\t\t}\n\n\t\t\tfunction query($query, $unbuffered = false) {\n\t\t\t\t$params = array('SelectExpression' => $query, 'ConsistentRead' => 'true');\n\t\t\t\tif ($this->next) {\n\t\t\t\t\t$params['NextToken'] = $this->next;\n\t\t\t\t}\n\t\t\t\t$result = sdb_request_all('Select', 'Item', $params, $this->timeout); //! respect $unbuffered\n\t\t\t\t$this->timeout = 0;\n\t\t\t\tif ($result === false) {\n\t\t\t\t\treturn $result;\n\t\t\t\t}\n\t\t\t\tif (preg_match('~^\\s*SELECT\\s+COUNT\\(~i', $query)) {\n\t\t\t\t\t$sum = 0;\n\t\t\t\t\tforeach ($result as $item) {\n\t\t\t\t\t\t$sum += $item->Attribute->Value;\n\t\t\t\t\t}\n\t\t\t\t\t$result = array((object) array('Attribute' => array((object) array(\n\t\t\t\t\t\t'Name' => 'Count',\n\t\t\t\t\t\t'Value' => $sum,\n\t\t\t\t\t))));\n\t\t\t\t}\n\t\t\t\treturn new Result($result);\n\t\t\t}\n\n\t\t\tfunction quote($string): string {\n\t\t\t\treturn \"'\" . str_replace(\"'\", \"''\", $string) . \"'\";\n\t\t\t}\n\t\t}\n\n\t\tclass Result {\n\t\t\tpublic $num_rows;\n\t\t\tprivate $rows = array(), $offset = 0;\n\n\t\t\tfunction __construct($result) {\n\t\t\t\tforeach ($result as $item) {\n\t\t\t\t\t$row = array();\n\t\t\t\t\tif ($item->Name != '') { // SELECT COUNT(*)\n\t\t\t\t\t\t$row['itemName()'] = (string) $item->Name;\n\t\t\t\t\t}\n\t\t\t\t\tforeach ($item->Attribute as $attribute) {\n\t\t\t\t\t\t$name = $this->processValue($attribute->Name);\n\t\t\t\t\t\t$value = $this->processValue($attribute->Value);\n\t\t\t\t\t\tif (isset($row[$name])) {\n\t\t\t\t\t\t\t$row[$name] = (array) $row[$name];\n\t\t\t\t\t\t\t$row[$name][] = $value;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$row[$name] = $value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$this->rows[] = $row;\n\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\tif (!isset($this->rows[0][$key])) {\n\t\t\t\t\t\t\t$this->rows[0][$key] = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$this->num_rows = count($this->rows);\n\t\t\t}\n\n\t\t\tprivate function processValue($element) {\n\t\t\t\treturn (is_object($element) && $element['encoding'] == 'base64' ? base64_decode($element) : (string) $element);\n\t\t\t}\n\n\t\t\tfunction fetch_assoc() {\n\t\t\t\t$row = current($this->rows);\n\t\t\t\tif (!$row) {\n\t\t\t\t\treturn $row;\n\t\t\t\t}\n\t\t\t\t$return = array();\n\t\t\t\tforeach ($this->rows[0] as $key => $val) {\n\t\t\t\t\t$return[$key] = $row[$key];\n\t\t\t\t}\n\t\t\t\tnext($this->rows);\n\t\t\t\treturn $return;\n\t\t\t}\n\n\t\t\tfunction fetch_row() {\n\t\t\t\t$return = $this->fetch_assoc();\n\t\t\t\tif (!$return) {\n\t\t\t\t\treturn $return;\n\t\t\t\t}\n\t\t\t\treturn array_values($return);\n\t\t\t}\n\n\t\t\tfunction fetch_field(): \\stdClass {\n\t\t\t\t$keys = array_keys($this->rows[0]);\n\t\t\t\treturn (object) array('name' => $keys[$this->offset++], 'type' => 15, 'charsetnr' => 0);\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\tclass Driver extends SqlDriver {\n\t\tstatic $extensions = array(\"SimpleXML + allow_url_fopen\");\n\t\tstatic $jush = \"simpledb\";\n\n\t\tpublic $operators = array(\"=\", \"<\", \">\", \"<=\", \">=\", \"!=\", \"LIKE\", \"LIKE %%\", \"IN\", \"IS NULL\", \"NOT LIKE\", \"IS NOT NULL\");\n\t\tpublic $grouping = array(\"count\");\n\n\t\tpublic $primary = \"itemName()\";\n\n\t\tstatic function connect($server, $username, $password) {\n\t\t\tif (!preg_match('~^(https?://)?[-a-z\\d.]+(:\\d+)?$~', $server)) {\n\t\t\t\treturn lang('Invalid server.');\n\t\t\t}\n\t\t\tif ($password != \"\") {\n\t\t\t\treturn lang('Database does not support password.');\n\t\t\t}\n\t\t\treturn parent::connect($server, $username, $password);\n\t\t}\n\n\t\tprivate function chunkRequest($ids, $action, $params, $expand = array()) {\n\t\t\tforeach (array_chunk($ids, 25) as $chunk) {\n\t\t\t\t$params2 = $params;\n\t\t\t\tforeach ($chunk as $i => $id) {\n\t\t\t\t\t$params2[\"Item.$i.ItemName\"] = $id;\n\t\t\t\t\tforeach ($expand as $key => $val) {\n\t\t\t\t\t\t$params2[\"Item.$i.$key\"] = $val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!sdb_request($action, $params2)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconnection()->affected_rows = count($ids);\n\t\t\treturn true;\n\t\t}\n\n\t\tprivate function extractIds($table, $queryWhere, $limit) {\n\t\t\t$return = array();\n\t\t\tif (preg_match_all(\"~itemName\\(\\) = (('[^']*+')+)~\", $queryWhere, $matches)) {\n\t\t\t\t$return = array_map('Adminer\\idf_unescape', $matches[1]);\n\t\t\t} else {\n\t\t\t\tforeach (sdb_request_all('Select', 'Item', array('SelectExpression' => 'SELECT itemName() FROM ' . table($table) . $queryWhere . ($limit ? \" LIMIT 1\" : \"\"))) as $item) {\n\t\t\t\t\t$return[] = $item->Name;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction select($table, array $select, array $where, array $group, array $order = array(), $limit = 1, $page = 0, $print = false) {\n\t\t\tconnection()->next = $_GET[\"next\"];\n\t\t\t$return = parent::select($table, $select, $where, $group, $order, $limit, $page, $print);\n\t\t\tconnection()->next = 0;\n\t\t\treturn $return;\n\t\t}\n\n\t\tfunction delete($table, $queryWhere, $limit = 0) {\n\t\t\treturn $this->chunkRequest(\n\t\t\t\t$this->extractIds($table, $queryWhere, $limit),\n\t\t\t\t'BatchDeleteAttributes',\n\t\t\t\tarray('DomainName' => $table)\n\t\t\t);\n\t\t}\n\n\t\tfunction update($table, array $set, $queryWhere, $limit = 0, $separator = \"\\n\") {\n\t\t\t$delete = array();\n\t\t\t$insert = array();\n\t\t\t$i = 0;\n\t\t\t$ids = $this->extractIds($table, $queryWhere, $limit);\n\t\t\t$id = idf_unescape($set[\"`itemName()`\"]);\n\t\t\tunset($set[\"`itemName()`\"]);\n\t\t\tforeach ($set as $key => $val) {\n\t\t\t\t$key = idf_unescape($key);\n\t\t\t\tif ($val == \"NULL\" || ($id != \"\" && array($id) != $ids)) {\n\t\t\t\t\t$delete[\"Attribute.\" . count($delete) . \".Name\"] = $key;\n\t\t\t\t}\n\t\t\t\tif ($val != \"NULL\") {\n\t\t\t\t\tforeach ((array) $val as $k => $v) {\n\t\t\t\t\t\t$insert[\"Attribute.$i.Name\"] = $key;\n\t\t\t\t\t\t$insert[\"Attribute.$i.Value\"] = (is_array($val) ? $v : idf_unescape($v));\n\t\t\t\t\t\tif (!$k) {\n\t\t\t\t\t\t\t$insert[\"Attribute.$i.Replace\"] = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$i++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$params = array('DomainName' => $table);\n\t\t\treturn (!$insert || $this->chunkRequest(($id != \"\" ? array($id) : $ids), 'BatchPutAttributes', $params, $insert))\n\t\t\t\t&& (!$delete || $this->chunkRequest($ids, 'BatchDeleteAttributes', $params, $delete))\n\t\t\t;\n\t\t}\n\n\t\tfunction insert($table, array $set) {\n\t\t\t$params = array(\"DomainName\" => $table);\n\t\t\t$i = 0;\n\t\t\tforeach ($set as $name => $value) {\n\t\t\t\tif ($value != \"NULL\") {\n\t\t\t\t\t$name = idf_unescape($name);\n\t\t\t\t\tif ($name == \"itemName()\") {\n\t\t\t\t\t\t$params[\"ItemName\"] = idf_unescape($value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tforeach ((array) $value as $val) {\n\t\t\t\t\t\t\t$params[\"Attribute.$i.Name\"] = $name;\n\t\t\t\t\t\t\t$params[\"Attribute.$i.Value\"] = (is_array($value) ? $val : idf_unescape($value));\n\t\t\t\t\t\t\t$i++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn sdb_request('PutAttributes', $params);\n\t\t}\n\n\t\tfunction insertUpdate($table, array $rows, array $primary) {\n\t\t\t//! use one batch request\n\t\t\tforeach ($rows as $set) {\n\t\t\t\tif (!$this->update($table, $set, \"WHERE `itemName()` = \" . q($set[\"`itemName()`\"]))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction begin() {\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction commit() {\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction rollback() {\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction slowQuery($query, $timeout) {\n\t\t\t$this->conn->timeout = $timeout;\n\t\t\treturn $query;\n\t\t}\n\t}\n\n\n\n\tfunction support($feature) {\n\t\treturn preg_match('~sql~', $feature);\n\t}\n\n\tfunction logged_user() {\n\t\t$credentials = adminer()->credentials();\n\t\treturn $credentials[1];\n\t}\n\n\tfunction get_databases($flush) {\n\t\treturn array(\"domain\");\n\t}\n\n\tfunction collations() {\n\t\treturn array();\n\t}\n\n\tfunction db_collation($db, $collations) {\n\t}\n\n\tfunction tables_list() {\n\t\t$return = array();\n\t\tforeach (sdb_request_all('ListDomains', 'DomainName') as $table) {\n\t\t\t$return[(string) $table] = 'table';\n\t\t}\n\t\tif (connection()->error && defined('Adminer\\PAGE_HEADER')) {\n\t\t\techo \"<p class='error'>\" . error() . \"\\n\";\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction table_status($name = \"\", $fast = false) {\n\t\t$return = array();\n\t\tforeach (($name != \"\" ? array($name => true) : tables_list()) as $table => $type) {\n\t\t\t$row = array(\"Name\" => $table, \"Auto_increment\" => \"\");\n\t\t\tif (!$fast) {\n\t\t\t\t$meta = sdb_request('DomainMetadata', array('DomainName' => $table));\n\t\t\t\tif ($meta) {\n\t\t\t\t\tforeach (\n\t\t\t\t\t\tarray(\n\t\t\t\t\t\t\t\"Rows\" => \"ItemCount\",\n\t\t\t\t\t\t\t\"Data_length\" => \"ItemNamesSizeBytes\",\n\t\t\t\t\t\t\t\"Index_length\" => \"AttributeValuesSizeBytes\",\n\t\t\t\t\t\t\t\"Data_free\" => \"AttributeNamesSizeBytes\",\n\t\t\t\t\t\t) as $key => $val\n\t\t\t\t\t) {\n\t\t\t\t\t\t$row[$key] = (string) $meta->$val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t$return[$table] = $row;\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction explain($connection, $query) {\n\t}\n\n\tfunction error() {\n\t\treturn h(connection()->error);\n\t}\n\n\tfunction information_schema($db) {\n\t}\n\n\tfunction indexes($table, $connection2 = null) {\n\t\treturn array(\n\t\t\tarray(\"type\" => \"PRIMARY\", \"columns\" => array(\"itemName()\")),\n\t\t);\n\t}\n\n\tfunction fields($table) {\n\t\treturn fields_from_edit();\n\t}\n\n\tfunction foreign_keys($table) {\n\t\treturn array();\n\t}\n\n\tfunction table($idf) {\n\t\treturn idf_escape($idf);\n\t}\n\n\tfunction idf_escape($idf) {\n\t\treturn \"`\" . str_replace(\"`\", \"``\", $idf) . \"`\";\n\t}\n\n\tfunction limit($query, $where, $limit, $offset = 0, $separator = \" \") {\n\t\treturn \" $query$where\" . ($limit ? $separator . \"LIMIT $limit\" : \"\");\n\t}\n\n\tfunction unconvert_field($field, $return) {\n\t\treturn $return;\n\t}\n\n\tfunction fk_support($table_status) {\n\t}\n\n\tfunction alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {\n\t\treturn ($table == \"\" && sdb_request('CreateDomain', array('DomainName' => $name)));\n\t}\n\n\tfunction drop_tables($tables) {\n\t\tforeach ($tables as $table) {\n\t\t\tif (!sdb_request('DeleteDomain', array('DomainName' => $table))) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tfunction count_tables($databases) {\n\t\tforeach ($databases as $db) {\n\t\t\treturn array($db => count(tables_list()));\n\t\t}\n\t}\n\n\tfunction found_rows($table_status, $where) {\n\t\treturn ($where ? null : $table_status[\"Rows\"]);\n\t}\n\n\tfunction last_id($result) {\n\t}\n\n\tfunction sdb_request($action, $params = array()) {\n\t\tlist($host, $params['AWSAccessKeyId'], $secret) = adminer()->credentials();\n\t\t$params['Action'] = $action;\n\t\t$params['Timestamp'] = gmdate('Y-m-d\\TH:i:s+00:00');\n\t\t$params['Version'] = '2009-04-15';\n\t\t$params['SignatureVersion'] = 2;\n\t\t$params['SignatureMethod'] = 'HmacSHA1';\n\t\tksort($params);\n\t\t$query = '';\n\t\tforeach ($params as $key => $val) {\n\t\t\t$query .= '&' . rawurlencode($key) . '=' . rawurlencode($val);\n\t\t}\n\t\t$query = str_replace('%7E', '~', substr($query, 1));\n\t\t$query .= \"&Signature=\" . urlencode(base64_encode(hash_hmac('sha1', \"POST\\n\" . preg_replace('~^https?://~', '', $host) . \"\\n/\\n$query\", $secret, true)));\n\t\t$file = @file_get_contents((preg_match('~^https?://~', $host) ? $host : \"http://$host\"), false, stream_context_create(array('http' => array(\n\t\t\t'method' => 'POST', // may not fit in URL with GET\n\t\t\t'content' => $query,\n\t\t\t'ignore_errors' => 1,\n\t\t\t'follow_location' => 0,\n\t\t\t'max_redirects' => 0,\n\t\t))));\n\t\tif (!$file) {\n\t\t\tconnection()->error = lang('Invalid credentials.');\n\t\t\treturn false;\n\t\t}\n\t\tlibxml_use_internal_errors(true);\n\t\tlibxml_disable_entity_loader();\n\t\t$xml = simplexml_load_string($file);\n\t\tif (!$xml) {\n\t\t\t$error = libxml_get_last_error();\n\t\t\tconnection()->error = $error->message;\n\t\t\treturn false;\n\t\t}\n\t\tif ($xml->Errors) {\n\t\t\t$error = $xml->Errors->Error;\n\t\t\tconnection()->error = \"$error->Message ($error->Code)\";\n\t\t\treturn false;\n\t\t}\n\t\tconnection()->error = '';\n\t\t$tag = $action . \"Result\";\n\t\treturn ($xml->$tag ?: true);\n\t}\n\n\tfunction sdb_request_all($action, $tag, $params = array(), $timeout = 0) {\n\t\t$return = array();\n\t\t$start = ($timeout ? microtime(true) : 0);\n\t\t$limit = (preg_match('~LIMIT\\s+(\\d+)\\s*$~i', $params['SelectExpression'], $match) ? $match[1] : 0);\n\t\tdo {\n\t\t\t$xml = sdb_request($action, $params);\n\t\t\tif (!$xml) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tforeach ($xml->$tag as $element) {\n\t\t\t\t$return[] = $element;\n\t\t\t}\n\t\t\tif ($limit && count($return) >= $limit) {\n\t\t\t\t$_GET[\"next\"] = $xml->NextToken;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ($timeout && microtime(true) - $start > $timeout) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t$params['NextToken'] = $xml->NextToken;\n\t\t\tif ($limit) {\n\t\t\t\t$params['SelectExpression'] = preg_replace('~\\d+\\s*$~', $limit - count($return), $params['SelectExpression']);\n\t\t\t}\n\t\t} while ($xml->NextToken);\n\t\treturn $return;\n\t}\n}\n"
  },
  {
    "path": "plugins/dump-alter.php",
    "content": "<?php\n\n/** Export one database (e.g. development) so that it can be synced with other database (e.g. production)\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpAlter extends Adminer\\Plugin {\n\n\tfunction dumpFormat() {\n\t\tif (Adminer\\DRIVER == 'server') {\n\t\t\treturn array('sql_alter' => 'Alter');\n\t\t}\n\t}\n\n\tprivate function dumpAlter() {\n\t\t// drop old tables\n\t\t$query = \"SELECT TABLE_NAME, ENGINE, TABLE_COLLATION, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()\";\n\t\techo \"DELIMITER ;;\nCREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN\n\tDECLARE _table_name, _engine, _table_collation varchar(64);\n\tDECLARE _table_comment varchar(64);\n\tDECLARE done bool DEFAULT 0;\n\tDECLARE tables CURSOR FOR $query;\n\tDECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;\n\tOPEN tables;\n\tREPEAT\n\t\tFETCH tables INTO _table_name, _engine, _table_collation, _table_comment;\n\t\tIF NOT done THEN\n\t\t\tCASE _table_name\";\n\t\tforeach (Adminer\\get_rows($query) as $row) {\n\t\t\t$comment = Adminer\\q($row[\"ENGINE\"] == \"InnoDB\" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row[\"TABLE_COMMENT\"]) : $row[\"TABLE_COMMENT\"]);\n\t\t\techo \"\n\t\t\tWHEN \" . Adminer\\q($row[\"TABLE_NAME\"]) . \" THEN\n\t\t\t\t\" . (isset($row[\"ENGINE\"]) ? \"IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN\n\t\t\t\t\tALTER TABLE \" . Adminer\\idf_escape($row[\"TABLE_NAME\"]) . \" ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment;\n\t\t\t\tEND IF\" : \"BEGIN END\") . \";\";\n\t\t}\n\t\techo \"\n\t\t\t\tELSE\n\t\t\t\t\tSET alter_command = CONCAT(alter_command, 'DROP TABLE `', REPLACE(_table_name, '`', '``'), '`;\\\\n');\n\t\t\tEND CASE;\n\t\tEND IF;\n\tUNTIL done END REPEAT;\n\tCLOSE tables;\nEND;;\nDELIMITER ;\nCALL adminer_alter(@adminer_alter);\nDROP PROCEDURE adminer_alter;\n\nSELECT @adminer_alter;\n\";\n\t}\n\n\tfunction dumpDatabase($db) {\n\t\tstatic $first = true;\n\t\tif ($_POST[\"format\"] == \"sql_alter\") {\n\t\t\tif ($first) {\n\t\t\t\t$first = false;\n\t\t\t\techo \"SET @adminer_alter = '';\\n\\n\";\n\t\t\t} else {\n\t\t\t\t$this->dumpAlter();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpTable($table, $style, $is_view = 0) {\n\t\tif ($_POST[\"format\"] == \"sql_alter\") {\n\t\t\t$create = Adminer\\create_sql($table, $_POST[\"auto_increment\"], $style);\n\t\t\tif ($is_view) {\n\t\t\t\techo substr_replace($create, \" OR REPLACE\", 6, 0) . \";\\n\\n\";\n\t\t\t} else {\n\t\t\t\techo substr_replace($create, \" IF NOT EXISTS\", 12, 0) . \";\\n\\n\";\n\t\t\t\t// create procedure which iterates over original columns and adds new and removes old\n\t\t\t\t$query = \"SELECT COLUMN_NAME, COLUMN_DEFAULT, IS_NULLABLE, COLLATION_NAME, COLUMN_TYPE, EXTRA, COLUMN_COMMENT\nFROM information_schema.COLUMNS\nWHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = \" . Adminer\\q($table) . \"\nORDER BY ORDINAL_POSITION\";\n\t\t\t\techo \"DELIMITER ;;\nCREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN\n\tDECLARE _column_name, _collation_name, after varchar(64) DEFAULT '';\n\tDECLARE _column_type, _column_default text;\n\tDECLARE _is_nullable char(3);\n\tDECLARE _extra varchar(30);\n\tDECLARE _column_comment varchar(255);\n\tDECLARE done, set_after bool DEFAULT 0;\n\tDECLARE add_columns text DEFAULT '\";\n\t\t\t\t$fields = array();\n\t\t\t\t$after = \"\";\n\t\t\t\tforeach (Adminer\\get_rows($query) as $row) {\n\t\t\t\t\t$default = $row[\"COLUMN_DEFAULT\"];\n\t\t\t\t\t$row[\"default\"] = ($default !== null ? Adminer\\q($default) : \"NULL\");\n\t\t\t\t\t$row[\"after\"] = Adminer\\q($after); //! rgt AFTER lft, lft AFTER id doesn't work\n\t\t\t\t\t$row[\"alter\"] = Adminer\\escape_string(\n\t\t\t\t\t\tAdminer\\idf_escape($row[\"COLUMN_NAME\"])\n\t\t\t\t\t\t. \" $row[COLUMN_TYPE]\"\n\t\t\t\t\t\t. ($row[\"COLLATION_NAME\"] ? \" COLLATE $row[COLLATION_NAME]\" : \"\")\n\t\t\t\t\t\t. ($default !== null ? \" DEFAULT \" . ($default == \"CURRENT_TIMESTAMP\" ? $default : $row[\"default\"]) : \"\")\n\t\t\t\t\t\t. ($row[\"IS_NULLABLE\"] == \"YES\" ? \"\" : \" NOT NULL\")\n\t\t\t\t\t\t. ($row[\"EXTRA\"] ? \" $row[EXTRA]\" : \"\")\n\t\t\t\t\t\t. ($row[\"COLUMN_COMMENT\"] ? \" COMMENT \" . Adminer\\q($row[\"COLUMN_COMMENT\"]) : \"\")\n\t\t\t\t\t\t. ($after ? \" AFTER \" . Adminer\\idf_escape($after) : \" FIRST\")\n\t\t\t\t\t);\n\t\t\t\t\techo \", ADD $row[alter]\";\n\t\t\t\t\t$fields[] = $row;\n\t\t\t\t\t$after = $row[\"COLUMN_NAME\"];\n\t\t\t\t}\n\t\t\t\techo \"';\n\tDECLARE columns CURSOR FOR $query;\n\tDECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;\n\tSET @alter_table = '';\n\tOPEN columns;\n\tREPEAT\n\t\tFETCH columns INTO _column_name, _column_default, _is_nullable, _collation_name, _column_type, _extra, _column_comment;\n\t\tIF NOT done THEN\n\t\t\tSET set_after = 1;\n\t\t\tCASE _column_name\";\n\t\t\t\tforeach ($fields as $row) {\n\t\t\t\t\techo \"\n\t\t\t\tWHEN \" . Adminer\\q($row[\"COLUMN_NAME\"]) . \" THEN\n\t\t\t\t\tSET add_columns = REPLACE(add_columns, ', ADD $row[alter]', IF(\n\t\t\t\t\t\t_column_default <=> $row[default]\n\t\t\t\t\t\tAND _is_nullable = '$row[IS_NULLABLE]'\n\t\t\t\t\t\tAND _collation_name <=> \" . (isset($row[\"COLLATION_NAME\"]) ? \"'$row[COLLATION_NAME]'\" : \"NULL\") . \"\n\t\t\t\t\t\tAND _column_type = \" . Adminer\\q($row[\"COLUMN_TYPE\"]) . \"\n\t\t\t\t\t\tAND _extra = '$row[EXTRA]'\n\t\t\t\t\t\tAND _column_comment = \" . Adminer\\q($row[\"COLUMN_COMMENT\"]) . \"\n\t\t\t\t\t\tAND after = $row[after]\n\t\t\t\t\t, '', ', MODIFY $row[alter]'));\"; //! don't replace in comment\n\t\t\t\t}\n\t\t\t\techo \"\n\t\t\t\tELSE\n\t\t\t\t\tSET @alter_table = CONCAT(@alter_table, ', DROP ', '`', REPLACE(_column_name, '`', '``'), '`');\n\t\t\t\t\tSET set_after = 0;\n\t\t\tEND CASE;\n\t\t\tIF set_after THEN\n\t\t\t\tSET after = _column_name;\n\t\t\tEND IF;\n\t\tEND IF;\n\tUNTIL done END REPEAT;\n\tCLOSE columns;\n\tIF @alter_table != '' OR add_columns != '' THEN\n\t\tSET alter_command = CONCAT(alter_command, 'ALTER TABLE \" . Adminer\\table($table) . \"', SUBSTR(CONCAT(add_columns, @alter_table), 2), ';\\\\n');\n\tEND IF;\nEND;;\nDELIMITER ;\nCALL adminer_alter(@adminer_alter);\nDROP PROCEDURE adminer_alter;\n\n\";\n\t\t\t\t//! indexes\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpData() {\n\t\tif ($_POST[\"format\"] == \"sql_alter\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpFooter() {\n\t\tif ($_POST[\"format\"] == \"sql_alter\") {\n\t\t\t$this->dumpAlter();\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Exportuje jednu databázi (např. vývojovou) tak, že může být synchronizována s jinou databází (např. produkční)'),\n\t\t'de' => array('' => 'Exportiert eine Datenbank (z. B. Entwicklung), damit sie mit einer anderen Datenbank (z. B. Produktion) synchronisiert werden kann'),\n\t\t'pl' => array('' => 'Eksportuje jedną bazę danych (np. programistyczną), aby można ją było zsynchronizować z inną bazą danych (np. produkcyjną)'),\n\t\t'ro' => array('' => 'Exportați o bază de date (de exemplu, development) astfel încât să poată fi sincronizată cu o altă bază de date (de exemplu, de producție)'),\n\t\t'ja' => array('' => 'データベース (開発用など) をエクスポートし、別のデータベース (本番用など) と同期'),\n\t\t'hr' => array('' => 'Izvozi bazu podataka (npr. razvojnu) tako da se može sinkronizirati s drugom bazom (npr. produkcijskom)'),\n\t);\n}\n"
  },
  {
    "path": "plugins/dump-bz2.php",
    "content": "<?php\n\n/** Dump to Bzip2 format\n* @link https://www.adminer.org/plugins/#use\n* @uses bzopen(), tempnam(\"\")\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpBz2 extends Adminer\\Plugin {\n\tprotected $filename, $fp;\n\n\tfunction dumpOutput() {\n\t\tif (!function_exists('bzopen')) {\n\t\t\treturn array();\n\t\t}\n\t\treturn array('bz2' => 'bzip2');\n\t}\n\n\tfunction _bz2($string, $state) {\n\t\tbzwrite($this->fp, $string);\n\t\tif ($state & PHP_OUTPUT_HANDLER_END) {\n\t\t\tbzclose($this->fp);\n\t\t\t$return = file_get_contents($this->filename);\n\t\t\tunlink($this->filename);\n\t\t\treturn $return;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tfunction dumpHeaders($identifier, $multi_table = false) {\n\t\tif ($_POST[\"output\"] == \"bz2\") {\n\t\t\t$this->filename = tempnam(\"\", \"bz2\");\n\t\t\t$this->fp = bzopen($this->filename, 'w');\n\t\t\theader(\"Content-Type: application/x-bzip\");\n\t\t\tob_start(array($this, '_bz2'), 1e6);\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Export do formátu Bzip2'),\n\t\t'de' => array('' => 'Export im Bzip2-Format'),\n\t\t'pl' => array('' => 'Zrzuć do formatu Bzip2'),\n\t\t'ro' => array('' => 'Dump în format Bzip2'),\n\t\t'ja' => array('' => 'Bzip2 形式でエクスポート'),\n\t\t'hr' => array('' => 'Izvoz u Bzip2 format'),\n\t);\n}\n"
  },
  {
    "path": "plugins/dump-date.php",
    "content": "<?php\n\n/** Include current date and time in export filename\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpDate extends Adminer\\Plugin {\n\n\tfunction dumpFilename($identifier) {\n\t\treturn Adminer\\friendly_url(($identifier != \"\" ? $identifier : (Adminer\\SERVER ?: \"localhost\")) . \"-\" . Adminer\\get_val(\"SELECT NOW()\"));\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Do názvu souboru s exportem přidá aktuální datum a čas'),\n\t\t'de' => array('' => 'Aktuelles Datum und die aktuelle Uhrzeit in den Namen der Exportdatei einfügen'),\n\t\t'pl' => array('' => 'Dołącz bieżącą datę i godzinę do nazwy pliku eksportu'),\n\t\t'ro' => array('' => 'Includeți data și ora curentă în numele fișierului de export'),\n\t\t'ja' => array('' => 'エクスポートファイル名に現在日時を含める'),\n\t\t'hr' => array('' => 'Dodaje trenutni datum i vrijeme u naziv datoteke izvoza'),\n\t);\n}\n"
  },
  {
    "path": "plugins/dump-json.php",
    "content": "<?php\n\n/** Dump to JSON format\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpJson extends Adminer\\Plugin {\n\tprotected $database = false;\n\n\tfunction dumpFormat() {\n\t\treturn array('json' => 'JSON');\n\t}\n\n\tfunction dumpTable($table, $style, $is_view = 0) {\n\t\tif ($_POST[\"format\"] == \"json\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpData($table, $style, $query) {\n\t\tif ($_POST[\"format\"] == \"json\") {\n\t\t\tif ($this->database) {\n\t\t\t\techo \",\\n\";\n\t\t\t} else {\n\t\t\t\t$this->database = true;\n\t\t\t\techo \"{\\n\";\n\t\t\t}\n\t\t\t$result = Adminer\\connection()->query($query, 1);\n\t\t\tif ($result) {\n\t\t\t\techo '\"' . addcslashes($table, \"\\r\\n\\\"\\\\\") . \"\\\": [\\n\";\n\t\t\t\t$first = true;\n\t\t\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t\t\techo ($first ? \"\" : \", \");\n\t\t\t\t\t$first = false;\n\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\tAdminer\\json_row($key, $val);\n\t\t\t\t\t}\n\t\t\t\t\tAdminer\\json_row(\"\");\n\t\t\t\t}\n\t\t\t\techo \"]\";\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpHeaders($identifier, $multi_table = false) {\n\t\tif ($_POST[\"format\"] == \"json\") {\n\t\t\theader(\"Content-Type: application/json; charset=utf-8\");\n\t\t\treturn \"json\";\n\t\t}\n\t}\n\n\tfunction dumpFooter() {\n\t\tif ($_POST[\"format\"] == \"json\" && $this->database) {\n\t\t\techo \"}\\n\";\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Export do formátu JSON'),\n\t\t'de' => array('' => 'Export im JSON-Format'),\n\t\t'pl' => array('' => 'Zrzuć do formatu JSON'),\n\t\t'ro' => array('' => 'Dump în format JSON'),\n\t\t'ja' => array('' => 'JSON 形式でエクスポート'),\n\t\t'hr' => array('' => 'Izvoz u JSON format'),\n\t);\n}\n"
  },
  {
    "path": "plugins/dump-php.php",
    "content": "<?php\n\n/** Dump to PHP format\n* @author Martin Zeman (Zemistr), http://www.zemistr.eu/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpPhp extends Adminer\\Plugin {\n\tprotected $output = array();\n\n\tfunction dumpFormat() {\n\t\treturn array('php' => 'PHP');\n\t}\n\n\tfunction dumpHeaders() {\n\t\tif ($_POST['format'] == 'php') {\n\t\t\theader('Content-Type: text/plain; charset=utf-8');\n\t\t\treturn 'php';\n\t\t}\n\t}\n\n\tfunction dumpTable($table, $style, $is_view = 0) {\n\t\tif ($_POST['format'] == 'php') {\n\t\t\t$this->output[$table] = array();\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpData($table, $style, $query) {\n\t\tif ($_POST['format'] == 'php') {\n\t\t\t$result = Adminer\\connection()->query($query, 1);\n\t\t\tif ($result) {\n\t\t\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t\t\t$this->output[$table][] = $row;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpFooter() {\n\t\tif ($_POST['format'] == 'php') {\n\t\t\techo \"<?php\\n\";\n\t\t\tvar_export($this->output);\n\t\t\techo \";\\n\";\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Export do formátu PHP'),\n\t\t'de' => array('' => 'Export im PHP-Format'),\n\t\t'pl' => array('' => 'Zrzucaj do formatu PHP'),\n\t\t'ro' => array('' => 'Dump în format PHP'),\n\t\t'ja' => array('' => 'PHP 形式でエクスポート'),\n\t\t'hr' => array('' => 'Izvoz u PHP format'),\n\t);\n}\n"
  },
  {
    "path": "plugins/dump-xml.php",
    "content": "<?php\n\n/** Dump to XML format in structure <database name=\"\"><table name=\"\"><column name=\"\">value\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpXml extends Adminer\\Plugin {\n\tprotected $database = false;\n\n\tfunction dumpFormat() {\n\t\treturn array('xml' => 'XML');\n\t}\n\n\tfunction dumpTable($table, $style, $is_view = 0) {\n\t\tif ($_POST[\"format\"] == \"xml\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpData($table, $style, $query) {\n\t\tif ($_POST[\"format\"] == \"xml\") {\n\t\t\tif (!$this->database) {\n\t\t\t\t$this->database = true;\n\t\t\t\techo \"<database name='\" . Adminer\\h(Adminer\\DB) . \"'>\\n\";\n\t\t\t}\n\t\t\t$result = Adminer\\connection()->query($query, 1);\n\t\t\tif ($result) {\n\t\t\t\twhile ($row = $result->fetch_assoc()) {\n\t\t\t\t\techo \"\\t<table name='\" . Adminer\\h($table) . \"'>\\n\";\n\t\t\t\t\tforeach ($row as $key => $val) {\n\t\t\t\t\t\techo \"\\t\\t<column name='\" . Adminer\\h($key) . \"'\" . (isset($val) ? \"\" : \" null='null'\") . \">\" . Adminer\\h($val) . \"</column>\\n\";\n\t\t\t\t\t}\n\t\t\t\t\techo \"\\t</table>\\n\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction dumpHeaders($identifier, $multi_table = false) {\n\t\tif ($_POST[\"format\"] == \"xml\") {\n\t\t\theader(\"Content-Type: text/xml; charset=utf-8\");\n\t\t\treturn \"xml\";\n\t\t}\n\t}\n\n\tfunction dumpFooter() {\n\t\tif ($_POST[\"format\"] == \"xml\" && $this->database) {\n\t\t\techo \"</database>\\n\";\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Export do formátu XML ve struktuře <database name=\"\"><table name=\"\"><column name=\"\">value'),\n\t\t'de' => array('' => 'Export im XML-Format in der Struktur <database name=\"><table name=\"\"><column name=\"\">value'),\n\t\t'pl' => array('' => 'Zrzut do formatu XML w strukturze <database name=\"\"><table name=\"\"><column name=\"\">value'),\n\t\t'ro' => array('' => 'Dump în format XML în structura <database name=\"\"><table name=\"\"><column name=\"\">value'),\n\t\t'ja' => array('' => '構造化 XML 形式でエクスポート <database name=\"\"><table name=\"\"><column name=\"\">value'),\n\t\t'hr' => array('' => 'Izvoz u XML format u strukturi <database name=\"\"><table name=\"\"><column name=\"\">vrijednost'),\n\t);\n}\n"
  },
  {
    "path": "plugins/dump-zip.php",
    "content": "<?php\n\n/** Dump to ZIP format\n* @link https://www.adminer.org/plugins/#use\n* @uses ZipArchive, tempnam(\"\")\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerDumpZip extends Adminer\\Plugin {\n\tprotected $filename, $data;\n\n\tfunction dumpOutput() {\n\t\tif (!class_exists('ZipArchive')) {\n\t\t\treturn array();\n\t\t}\n\t\treturn array('zip' => 'ZIP');\n\t}\n\n\tfunction _zip($string, $state) {\n\t\t// ZIP can be created without temporary file by gzcompress - see PEAR File_Archive\n\t\t$this->data .= $string;\n\t\tif ($state & PHP_OUTPUT_HANDLER_END) {\n\t\t\t$zip = new ZipArchive;\n\t\t\t$zipFile = tempnam(\"\", \"zip\");\n\t\t\t$zip->open($zipFile, ZipArchive::OVERWRITE); // php://output is not supported\n\t\t\t$zip->addFromString($this->filename, $this->data);\n\t\t\t$zip->close();\n\t\t\t$return = file_get_contents($zipFile);\n\t\t\tunlink($zipFile);\n\t\t\treturn $return;\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tfunction dumpHeaders($identifier, $multi_table = false) {\n\t\tif ($_POST[\"output\"] == \"zip\") {\n\t\t\t$this->filename = \"$identifier.\" . ($multi_table && preg_match(\"~[ct]sv~\", $_POST[\"format\"]) ? \"tar\" : $_POST[\"format\"]);\n\t\t\theader(\"Content-Type: application/zip\");\n\t\t\tob_start(array($this, '_zip'));\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Export do formátu ZIP'),\n\t\t'de' => array('' => 'Export Im ZIP-Format'),\n\t\t'pl' => array('' => 'Zrzuć do formatu ZIP'),\n\t\t'ro' => array('' => 'Dump în format ZIP'),\n\t\t'ja' => array('' => 'ZIP 形式でエクスポート'),\n\t\t'hr' => array('' => 'Izvoz u ZIP format'),\n\t);\n}\n"
  },
  {
    "path": "plugins/edit-calendar.php",
    "content": "<?php\n\n/** Display jQuery UI Timepicker for each date and datetime field\n* @link https://www.adminer.org/plugins/#use\n* @uses jQuery-Timepicker, http://trentrichardson.com/examples/timepicker/\n* @uses jQuery UI: core, widget, mouse, slider, datepicker\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEditCalendar extends Adminer\\Plugin {\n\tprotected $prepend, $langPath;\n\n\t/**\n\t* @param string $prepend text to append before first calendar usage\n\t* @param string $langPath path to language file, %s stands for language code\n\t*/\n\tfunction __construct($prepend = null, $langPath = \"jquery-ui/i18n/jquery.ui.datepicker-%s.js\") {\n\t\t$this->prepend = $prepend;\n\t\t$this->langPath = $langPath;\n\t}\n\n\tfunction head($dark = null) {\n\t\techo ($this->prepend !== null ? $this->prepend :\n\t\t\t\"<link rel='stylesheet' type='text/css' href='jquery-ui/jquery-ui.css'>\\n\"\n\t\t\t. Adminer\\script_src(\"jquery-ui/jquery.js\")\n\t\t\t. Adminer\\script_src(\"jquery-ui/jquery-ui.js\")\n\t\t\t. Adminer\\script_src(\"jquery-ui/jquery-ui-timepicker-addon.js\")\n\t\t);\n\t\tif ($this->langPath) {\n\t\t\t$lang = Adminer\\LANG;\n\t\t\t$lang = ($lang == \"zh\" ? \"zh-CN\" : ($lang == \"zh-tw\" ? \"zh-TW\" : $lang));\n\t\t\tif ($lang != \"en\" && file_exists(sprintf($this->langPath, $lang))) {\n\t\t\t\techo Adminer\\script_src(sprintf($this->langPath, $lang));\n\t\t\t\techo Adminer\\script(\"jQuery(() => { jQuery.timepicker.setDefaults(jQuery.datepicker.regional['$lang']); });\");\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tif (preg_match(\"~date|time~\", $field[\"type\"])) {\n\t\t\t$dateFormat = \"changeYear: true, dateFormat: 'yy-mm-dd'\"; //! yy-mm-dd regional\n\t\t\t$timeFormat = \"showSecond: true, timeFormat: 'HH:mm:ss', timeInput: true\";\n\t\t\treturn \"<input id='fields-\" . Adminer\\h($field[\"field\"]) . \"' value='\" . Adminer\\h($value) . \"'\" . (@+$field[\"length\"] ? \" data-maxlength='\" . (+$field[\"length\"]) . \"'\" : \"\") . \"$attrs>\" . Adminer\\script(\n\t\t\t\t\"jQuery('#fields-\" . Adminer\\js_escape($field[\"field\"]) . \"').\"\n\t\t\t\t. ($field[\"type\"] == \"time\" ? \"timepicker({ $timeFormat })\"\n\t\t\t\t\t: (preg_match(\"~time~\", $field[\"type\"]) ? \"datetimepicker({ $dateFormat, $timeFormat })\"\n\t\t\t\t\t\t: \"datepicker({ $dateFormat })\"\n\t\t\t\t\t)) . \";\"\n\t\t\t);\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zobrazí jQuery UI Timepicker pro každé datumové a časové políčko'),\n\t\t'de' => array('' => 'Zeigen Sie die jQuery-UI Timepicker für jedes Datums- und Datum/Uhrzeit-Feld an'),\n\t\t'pl' => array('' => 'Wyświetl interfejs jQuery Timepicker dla każdego pola daty i godziny'),\n\t\t'ro' => array('' => 'Afișați jQuery UI Timepicker pentru fiecare câmp de dată și dată-timp'),\n\t\t'ja' => array('' => '各日時列に jQuery UI の Timepicker を表示'),\n\t\t'hr' => array('' => 'Prikazuje jQuery UI Timepicker za svako polje datuma i datuma-vremena'),\n\t);\n}\n"
  },
  {
    "path": "plugins/edit-foreign.php",
    "content": "<?php\n\n/** Select foreign key in edit form\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEditForeign extends Adminer\\Plugin {\n\tprotected $limit;\n\n\tfunction __construct($limit = 0) {\n\t\t$this->limit = $limit;\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tstatic $foreignTables = array();\n\t\tstatic $values = array();\n\t\t$foreignKeys = &$foreignTables[$table];\n\t\tif ($foreignKeys === null) {\n\t\t\t$foreignKeys = Adminer\\column_foreign_keys($table);\n\t\t}\n\t\tforeach ((array) $foreignKeys[$field[\"field\"]] as $foreignKey) {\n\t\t\tif (count($foreignKey[\"source\"]) == 1) {\n\t\t\t\t$target = $foreignKey[\"table\"];\n\t\t\t\t$id = $foreignKey[\"target\"][0];\n\t\t\t\t$options = &$values[$target][$id];\n\t\t\t\tif (!$options) {\n\t\t\t\t\t$column = Adminer\\idf_escape($id);\n\t\t\t\t\tif (preg_match('~binary~', $field[\"type\"])) {\n\t\t\t\t\t\t$column = \"HEX($column)\";\n\t\t\t\t\t}\n\t\t\t\t\t$options = array(\"\" => \"\") + Adminer\\get_vals(\"SELECT $column FROM \" . Adminer\\table($target) . \" ORDER BY 1\" . ($this->limit ? \" LIMIT \" . ($this->limit + 1) : \"\"));\n\t\t\t\t\tif ($this->limit && count($options) - 1 > $this->limit) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn \"<select$attrs>\" . Adminer\\optionlist($options, $value) . \"</select>\";\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Výběr cizího klíče v editačním formuláři'),\n\t\t'de' => array('' => 'Wählen Sie im Bearbeitungsformular den Fremdschlüssel aus'),\n\t\t'pl' => array('' => 'Wybierz klucz obcy w formularzu edycji'),\n\t\t'ro' => array('' => 'Selectați cheia străină în formularul de editare'),\n\t\t'ja' => array('' => '外部キーを編集フォームで選択'),\n\t\t'hr' => array('' => 'Odabir stranog ključa u obrascu za uređivanje'),\n\t);\n}\n"
  },
  {
    "path": "plugins/edit-textarea.php",
    "content": "<?php\n\n/** Use <textarea> for char and varchar\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEditTextarea extends Adminer\\Plugin {\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tif (preg_match('~char~', $field[\"type\"])) {\n\t\t\treturn \"<textarea cols='30' rows='1'$attrs>\" . Adminer\\h($value) . '</textarea>';\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Použije <textarea> pro char a varchar'),\n\t\t'de' => array('' => 'Verwenden Sie <textarea> für char und varchar Felder'),\n\t\t'pl' => array('' => 'Użyj <textarea> dla char i varchar'),\n\t\t'ro' => array('' => 'Utilizați <textarea> pentru char și varchar'),\n\t\t'ja' => array('' => 'char や varchar に <textarea> を使用'),\n\t\t'hr' => array('' => 'Koristi <textarea> za char i varchar polja'),\n\t);\n}\n"
  },
  {
    "path": "plugins/editor-setup.php",
    "content": "<?php\n\n/** Set up driver, server and database to use with Adminer Editor\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEditorSetup extends Adminer\\Plugin {\n\tprivate $driver;\n\tprivate $server;\n\tprivate $database;\n\n\t/**\n\t* @param string $driver 'server' is MySQL, 'pgsql' is PostgreSQL, ...\n\t* @param string $server null means the default host, usually localhost\n\t* @param string $database null is the first available database\n\t*/\n\tfunction __construct($driver = 'server', $server = null, $database = null) {\n\t\t$this->driver = $driver;\n\t\t$this->server = $server;\n\t\t$this->database = $database;\n\t}\n\n\tfunction loginFormField($name, $heading, $value) {\n\t\tif ($name == 'username') {\n\t\t\treturn $heading . str_replace(\"value='server'\", \"value='$this->driver'\", $value) . \"\\n\";\n\t\t}\n\t}\n\n\tfunction credentials() {\n\t\treturn array($this->server, $_GET[\"username\"], Adminer\\get_password());\n\t}\n\n\tfunction database() {\n\t\tif ($this->database) {\n\t\t\treturn $this->database;\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Nastavit ovladač, server a databázi pro použití s Adminer Editorem'),\n\t\t'de' => array('' => 'Treiber, Server und Datenbank für die Verwendung mit Adminer Editor einrichten'),\n\t\t'ja' => array('' => 'Adminer Editor で使用するドライバ、サーバ、データベースを設定'),\n\t\t'pl' => array('' => 'Konfiguruj sterownik, serwer i bazę danych do użycia z Adminer Editorem'),\n\t\t'hr' => array('' => 'Postavlja upravljački program, poslužitelj i bazu podataka za korištenje s Adminer Editorom'),\n\t);\n}\n"
  },
  {
    "path": "plugins/editor-views.php",
    "content": "<?php\n\n/** Display views in Adminer Editor\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEditorViews extends Adminer\\Plugin {\n\n\tfunction tableName($tableStatus) {\n\t\treturn Adminer\\h($tableStatus[\"Comment\"] != \"\" ? $tableStatus[\"Comment\"] : $tableStatus[\"Name\"]);\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zobrazení pohledů v Adminer Editoru'),\n\t\t'de' => array('' => 'Views im Adminer Editor anzeigen'),\n\t\t'pl' => array('' => 'Wyświetlaj widoki w Adminer Editorze'),\n\t\t'ro' => array('' => 'Afișează vizualizări în Adminer Editor'),\n\t\t'ja' => array('' => 'Adminer Editor にビューを表示'),\n\t\t'hr' => array('' => 'Prikazuje poglede u Adminer Editoru'),\n\t);\n}\n"
  },
  {
    "path": "plugins/email-table.php",
    "content": "<?php\n\n/** Get e-mail subject and message from database (Adminer Editor)\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEmailTable extends Adminer\\Plugin {\n\tprotected $table, $id, $title, $subject, $message;\n\n\t/**\n\t* @param string $table quoted table name\n\t* @param string $id quoted column name\n\t* @param string $title quoted column name\n\t* @param string $subject quoted column name\n\t* @param string $message quoted column name\n\t*/\n\tfunction __construct($table = \"email\", $id = \"id\", $title = \"subject\", $subject = \"subject\", $message = \"message\") {\n\t\t$this->table = $table;\n\t\t$this->id = $id;\n\t\t$this->title = $title;\n\t\t$this->subject = $subject;\n\t\t$this->message = $message;\n\t}\n\n\tfunction selectEmailPrint($emailFields, $columns) {\n\t\tif ($emailFields) {\n\t\t\tAdminer\\print_fieldset(\"email\", ('E-mail'));\n\t\t\techo \"<div>\\n\";\n\t\t\techo Adminer\\script(\"qsl('div').onkeydown = partial(bodyKeydown, 'email');\");\n\t\t\techo \"<p>\" . ('From') . \": <input name='email_from' value='\" . Adminer\\h($_POST ? $_POST[\"email_from\"] : $_COOKIE[\"adminer_email\"]) . \"'>\\n\";\n\t\t\techo ('Subject') . \": <select name='email_id'><option>\" . Adminer\\optionlist(Adminer\\get_key_vals(\"SELECT $this->id, $this->title FROM $this->table ORDER BY $this->title\"), $_POST[\"email_id\"], true) . \"</select>\\n\";\n\t\t\techo \"<p>\" . ('Attachments') . \": <input type='file' name='email_files[]'>\";\n\t\t\techo Adminer\\script(\"qsl('input').onchange = function () {\n\tthis.onchange = function () { };\n\tconst el = this.cloneNode(true);\n\tel.value = '';\n\tthis.parentNode.appendChild(el);\n};\");\n\t\t\techo \"<p>\" . (count($emailFields) == 1 ? Adminer\\input_hidden(\"email_field\", key($emailFields)) : Adminer\\html_select(\"email_field\", $emailFields));\n\t\t\techo \"<input type='submit' name='email' value='\" . ('Send') . \"'>\" . Adminer\\confirm();\n\t\t\techo \"</div>\\n\";\n\t\t\techo \"</div></fieldset>\\n\";\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction selectEmailProcess($where, $foreignKeys) {\n\t\tif ($_POST[\"email_id\"]) {\n\t\t\t$result = Adminer\\connection()->query(\"SELECT $this->subject, $this->message FROM $this->table WHERE $this->id = \" . Adminer\\q($_POST[\"email_id\"]));\n\t\t\t$row = $result->fetch_row();\n\t\t\t$_POST[\"email_subject\"] = $row[0];\n\t\t\t$_POST[\"email_message\"] = $row[1];\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Získá předmět a zprávu e-mailu z databáze (Adminer Editor)'),\n\t\t'de' => array('' => 'E-Mail-Betreff und Nachricht aus der Datenbank abrufen (Adminer Editor)'),\n\t\t'pl' => array('' => 'Pobieraj temat i wiadomość e-mail z bazy danych (Adminer Editor)'),\n\t\t'ro' => array('' => 'Obțineți subiectul e-mailului și mesajul din baza de date (Adminer Editor)'),\n\t\t'ja' => array('' => 'メールの件名と本文をデータベースから取得 (Adminer Editor)'),\n\t\t'hr' => array('' => 'Dohvaća predmet i poruku e-pošte iz baze podataka (Adminer Editor)'),\n\t);\n}\n"
  },
  {
    "path": "plugins/enum-option.php",
    "content": "<?php\n\n/** Use <select><option> for enum edit instead of <input type=\"radio\">\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerEnumOption extends Adminer\\Plugin {\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tif ($field[\"type\"] == \"enum\") {\n\t\t\t$options = array();\n\t\t\t$selected = \"val-$value\";\n\t\t\tif (isset($_GET[\"select\"])) {\n\t\t\t\t$options[\"orig\"] = Adminer\\lang('original');\n\t\t\t\tif ($value === null) {\n\t\t\t\t\t$selected = \"orig\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($field[\"null\"]) {\n\t\t\t\t$options[\"null\"] = \"NULL\";\n\t\t\t\tif ($value === null) {\n\t\t\t\t\t$selected = \"null\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreg_match_all(\"~'((?:[^']|'')*)'~\", $field[\"length\"], $matches);\n\t\t\tforeach ($matches[1] as $val) {\n\t\t\t\t$val = stripcslashes(str_replace(\"''\", \"'\", $val));\n\t\t\t\t$options[\"val-$val\"] = $val;\n\t\t\t}\n\t\t\treturn \"<select$attrs>\" . Adminer\\optionlist($options, $selected, 1) . \"</select>\"; // 1 - use keys\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Editace políčka enum pomocí <select><option> místo <input type=\"radio\">'),\n\t\t'de' => array('' => 'Verwenden Sie <select><option> für die enum-Bearbeitung anstelle von <input type=\"radio\">'),\n\t\t'pl' => array('' => 'Użyj <select><option> do edycji enum zamiast <input type=\"radio\">'),\n\t\t'ro' => array('' => 'Utilizați <select><option> pentru editarea enum în loc de <input type=\"radio\">'),\n\t\t'ja' => array('' => '列挙型の編集に <input type=\"radio\"> ではなく <select><option> を使用'),\n\t\t'hr' => array('' => 'Koristi <select><option> za uređivanje enum polja umjesto <input type=\"radio\">'),\n\t);\n}\n"
  },
  {
    "path": "plugins/file-upload.php",
    "content": "<?php\n//! handle delete\n\n/** Edit fields ending with \"_path\" by <input type=\"file\"> and link to the uploaded files from select\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerFileUpload extends Adminer\\Plugin {\n\tprotected $uploadPath, $displayPath, $extensions;\n\n\t/**\n\t* @param string $uploadPath prefix for uploading data (create writable subdirectory for each table containing uploadable fields)\n\t* @param string $displayPath prefix for displaying data, null stands for $uploadPath\n\t* @param string $extensions regular expression with allowed file extensions\n\t*/\n\tfunction __construct($uploadPath = \"../static/data/\", $displayPath = null, $extensions = \"[a-zA-Z0-9]+\") {\n\t\t$this->uploadPath = $uploadPath;\n\t\t$this->displayPath = ($displayPath !== null ? $displayPath : $uploadPath);\n\t\t$this->extensions = $extensions;\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tif (preg_match('~(.*)_path$~', $field[\"field\"])) {\n\t\t\treturn \"<input type='file'$attrs>\";\n\t\t}\n\t}\n\n\tfunction processInput($field, $value, $function = \"\") {\n\t\tif (preg_match('~(.*)_path$~', $field[\"field\"], $regs)) {\n\t\t\t$table = ($_GET[\"edit\"] != \"\" ? $_GET[\"edit\"] : $_GET[\"select\"]);\n\t\t\t$name = $field[\"field\"];\n\t\t\tif ($_FILES[\"fields\"][\"error\"][$name] || !preg_match(\"~(\\\\.($this->extensions))?\\$~\", $_FILES[\"fields\"][\"name\"][$name], $regs2)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t//! unlink old\n\t\t\t$filename = (function_exists('random_bytes') ? bin2hex(random_bytes(8)) : uniqid(\"\", true)) . $regs2[0];\n\t\t\tif (!move_uploaded_file($_FILES[\"fields\"][\"tmp_name\"][$name], $this->uploadPath . Adminer\\friendly_url($table) . \"/$regs[1]-$filename\")) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Adminer\\q($filename);\n\t\t}\n\t}\n\n\tfunction selectVal($val, &$link, $field, $original) {\n\t\tif ($val != \"\" && preg_match('~(.*)_path$~', $field[\"field\"], $regs)) {\n\t\t\t$link = $this->displayPath . Adminer\\friendly_url($_GET[\"select\"]) . \"/$regs[1]-$val\";\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Políčka končící na \"_path\" upravuje pomocí <input type=\"file\"> a odkazuje na nahrané soubory z výpisu'),\n\t\t'de' => array('' => 'Bearbeiten Sie Felder, die mit \"_path\" enden, um <input type=\"file\"> und verknüpfen Sie sie mit den hochgeladenen Dateien beim Select'),\n\t\t'pl' => array('' => 'Edytuj pola kończące się na \"_path\" za pomocą <input type=\"file\"> i link do przesłanych plików z wybierz'),\n\t\t'ro' => array('' => 'Modificați câmpurile care se termină cu \"_path\" prin <input type=\"file\"> și creați un link către fișierele încărcate din select'),\n\t\t'ja' => array('' => '列名が \"_path\" で終わる列を <input type=\"file\"> で変更し、\"選択\" からアップロードされたファイルにリンク'),\n\t\t'hr' => array('' => 'Uređuje polja koja završavaju s \"_path\" putem <input type=\"file\"> i povezuje ih s učitanim datotekama'),\n\t);\n}\n"
  },
  {
    "path": "plugins/foreign-system.php",
    "content": "<?php\n\n/** Link system tables (in \"mysql\", \"information_schema\" and \"pg_catalog\" schemas) by foreign keys\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerForeignSystem extends Adminer\\Plugin {\n\n\tfunction foreignKeys($table) {\n\t\tif (Adminer\\DRIVER == \"server\" && Adminer\\DB == \"mysql\") {\n\t\t\t$return = array(\n\t\t\t\t\"columns_priv\" => array(array(\"table\" => \"user\", \"source\" => array(\"Host\", \"User\"), \"target\" => array(\"Host\", \"User\"))),\n\t\t\t\t\"db\" => array(array(\"table\" => \"user\", \"source\" => array(\"Host\", \"User\"), \"target\" => array(\"Host\", \"User\"))),\n\t\t\t\t\"help_category\" => array(array(\"table\" => \"help_category\", \"source\" => array(\"parent_category_id\"), \"target\" => array(\"help_category_id\"))),\n\t\t\t\t\"help_relation\" => array(\n\t\t\t\t\tarray(\"table\" => \"help_topic\", \"source\" => array(\"help_topic_id\"), \"target\" => array(\"help_topic_id\")),\n\t\t\t\t\tarray(\"table\" => \"help_keyword\", \"source\" => array(\"help_keyword_id\"), \"target\" => array(\"help_keyword_id\")),\n\t\t\t\t),\n\t\t\t\t\"help_topic\" => array(array(\"table\" => \"help_category\", \"source\" => array(\"help_category_id\"), \"target\" => array(\"help_category_id\"))),\n\t\t\t\t\"procs_priv\" => array(array(\"table\" => \"user\", \"source\" => array(\"Host\", \"User\"), \"target\" => array(\"Host\", \"User\")), array(\"table\" => \"proc\", \"source\" => array(\"Db\", \"Routine_name\"), \"target\" => array(\"db\", \"name\"))),\n\t\t\t\t\"tables_priv\" => array(array(\"table\" => \"user\", \"source\" => array(\"Host\", \"User\"), \"target\" => array(\"Host\", \"User\"))),\n\t\t\t\t\"time_zone_name\" => array(array(\"table\" => \"time_zone\", \"source\" => array(\"Time_zone_id\"), \"target\" => array(\"Time_zone_id\"))),\n\t\t\t\t\"time_zone_transition\" => array(\n\t\t\t\t\tarray(\"table\" => \"time_zone\", \"source\" => array(\"Time_zone_id\"), \"target\" => array(\"Time_zone_id\")),\n\t\t\t\t\tarray(\"table\" => \"time_zone_transition_type\", \"source\" => array(\"Time_zone_id\", \"Transition_type_id\"), \"target\" => array(\"Time_zone_id\", \"Transition_type_id\")),\n\t\t\t\t),\n\t\t\t\t\"time_zone_transition_type\" => array(array(\"table\" => \"time_zone\", \"source\" => array(\"Time_zone_id\"), \"target\" => array(\"Time_zone_id\"))),\n\t\t\t);\n\t\t\treturn $return[$table];\n\n\t\t} elseif (Adminer\\DB == \"information_schema\" || $_GET[\"ns\"] == \"information_schema\") {\n\t\t\t$schemata = $this->schemata(\"TABLE\");\n\t\t\t$tables = $this->tables(\"TABLE\");\n\t\t\t$columns = array(\"table\" => \"COLUMNS\", \"source\" => array(\"TABLE_CATALOG\", \"TABLE_SCHEMA\", \"TABLE_NAME\", \"COLUMN_NAME\"), \"target\" => array(\"TABLE_CATALOG\", \"TABLE_SCHEMA\", \"TABLE_NAME\", \"COLUMN_NAME\"));\n\t\t\t$character_sets = $this->character_sets(\"CHARACTER_SET_NAME\");\n\t\t\t$collations = $this->collations(\"COLLATION_NAME\");\n\t\t\t$routine_charsets = array($this->character_sets(\"CHARACTER_SET_CLIENT\"), $this->collations(\"COLLATION_CONNECTION\"), $this->collations(\"DATABASE_COLLATION\"));\n\t\t\t$return = array(\n\t\t\t\t\"CHARACTER_SETS\" => array($this->collations(\"DEFAULT_COLLATE_NAME\")),\n\t\t\t\t\"CHECK_CONSTRAINTS\" => array($this->schemata(\"CONSTRAINT\")),\n\t\t\t\t\"COLLATIONS\" => array($character_sets),\n\t\t\t\t\"COLLATION_CHARACTER_SET_APPLICABILITY\" => array($collations, $character_sets),\n\t\t\t\t\"COLUMNS\" => array($schemata, $tables, $character_sets, $collations),\n\t\t\t\t\"COLUMN_PRIVILEGES\" => array($schemata, $tables, $columns),\n\t\t\t\t\"COLUMNS_EXTENSIONS\" => array($schemata, $tables, $columns),\n\t\t\t\t\"TABLES\" => array($schemata, $this->collations(\"TABLE_COLLATION\"), array(\"table\" => \"ENGINES\", \"source\" => array(\"ENGINE\"), \"target\" => array(\"ENGINE\"))),\n\t\t\t\t\"SCHEMATA\" => array($this->character_sets(\"DEFAULT_CHARACTER_SET_NAME\"), $this->collations(\"DEFAULT_COLLATION_NAME\")),\n\t\t\t\t\"EVENTS\" => array_merge(array($this->schemata(\"EVENT\")), $routine_charsets),\n\t\t\t\t\"FILES\" => array($schemata, $tables),\n\t\t\t\t\"KEY_COLUMN_USAGE\" => array(\n\t\t\t\t\t$this->schemata(\"CONSTRAINT\"),\n\t\t\t\t\t$schemata,\n\t\t\t\t\t$tables,\n\t\t\t\t\t$columns,\n\t\t\t\t\t$this->schemata(\"TABLE\", \"REFERENCED_TABLE\"),\n\t\t\t\t\t$this->tables(\"TABLE\", \"REFERENCED_TABLE\"),\n\t\t\t\t\tarray(\"source\" => array(\"TABLE_CATALOG\", \"REFERENCED_TABLE_SCHEMA\", \"REFERENCED_TABLE_NAME\", \"REFERENCED_COLUMN_NAME\")) + $columns,\n\t\t\t\t),\n\t\t\t\t\"PARAMETERS\" => array($this->schemata(\"SPECIFIC\"), array(\"table\" => \"ROUTINES\", \"source\" => array(\"SPECIFIC_CATALOG\", \"SPECIFIC_SCHEMA\", \"SPECIFIC_NAME\"), \"target\" => array(\"ROUTINE_CATALOG\", \"ROUTINE_SCHEMA\", \"SPECIFIC_NAME\"))),\n\t\t\t\t\"PARTITIONS\" => array($schemata, $tables),\n\t\t\t\t\"REFERENTIAL_CONSTRAINTS\" => array(\n\t\t\t\t\t$this->schemata(\"CONSTRAINT\"),\n\t\t\t\t\t$this->schemata(\"UNIQUE_CONSTRAINT\"),\n\t\t\t\t\t$this->tables(\"CONSTRAINT\", \"CONSTRAINT\", \"TABLE_NAME\"),\n\t\t\t\t\t$this->tables(\"CONSTRAINT\", \"CONSTRAINT\", \"REFERENCED_TABLE_NAME\"),\n\t\t\t\t),\n\t\t\t\t\"ROUTINES\" => array_merge(array($this->schemata(\"ROUTINE\")), $routine_charsets),\n\t\t\t\t\"SCHEMA_PRIVILEGES\" => array($schemata),\n\t\t\t\t\"SCHEMATA_EXTENSIONS\" => array(array(\"table\" => \"SCHEMATA\", \"source\" => array(\"CATALOG_NAME\", \"SCHEMA_NAME\"), \"target\" => array(\"CATALOG_NAME\", \"SCHEMA_NAME\"))),\n\t\t\t\t\"STATISTICS\" => array($schemata, $tables, $columns, $this->schemata(\"TABLE\", \"INDEX\")),\n\t\t\t\t\"TABLE_CONSTRAINTS\" => array(\n\t\t\t\t\t$this->schemata(\"CONSTRAINT\"),\n\t\t\t\t\t$this->schemata(\"CONSTRAINT\", \"TABLE\"),\n\t\t\t\t\t$this->tables(\"CONSTRAINT\", \"TABLE\"),\n\t\t\t\t),\n\t\t\t\t\"TABLE_CONSTRAINTS_EXTENSIONS\" => array($this->schemata(\"CONSTRAINT\"), $this->tables(\"CONSTRAINT\", \"CONSTRAINT\", \"TABLE_NAME\")),\n\t\t\t\t\"TABLE_PRIVILEGES\" => array($schemata, $tables),\n\t\t\t\t\"TABLES_EXTENSIONS\" => array($schemata, $tables),\n\t\t\t\t\"TRIGGERS\" => array_merge(array(\n\t\t\t\t\t$this->schemata(\"TRIGGER\"),\n\t\t\t\t\t$this->schemata(\"EVENT_OBJECT\"),\n\t\t\t\t\t$this->tables(\"EVENT_OBJECT\", \"EVENT_OBJECT\", \"EVENT_OBJECT_TABLE\"),\n\t\t\t\t), $routine_charsets),\n\t\t\t\t\"VIEWS\" => array($schemata, $this->character_sets(\"CHARACTER_SET_CLIENT\"), $this->collations(\"COLLATION_CONNECTION\")),\n\t\t\t\t\"VIEW_TABLE_USAGE\" => array($schemata, $this->schemata(\"VIEW\"), $tables, array(\"table\" => \"VIEWS\", \"source\" => array(\"VIEW_CATALOG\", \"VIEW_SCHEMA\", \"VIEW_NAME\"), \"target\" => array(\"TABLE_CATALOG\", \"TABLE_SCHEMA\", \"TABLE_NAME\"))),\n\t\t\t);\n\t\t\tif ($_GET[\"ns\"] == \"information_schema\") {\n\t\t\t\t$return = $this->lowerCase($return);\n\t\t\t}\n\t\t\treturn $return[strtoupper($table)];\n\n\t\t} elseif (Adminer\\DRIVER == \"pgsql\" && $_GET[\"ns\"] == \"pg_catalog\") {\n\t\t\t$mapping = array(\n\t\t\t\t'pg_aggregate' => array('aggfnoid.proc', 'aggtransfn.proc', 'aggfinalfn.proc', 'aggcombinefn.proc', 'aggserialfn.proc', 'aggdeserialfn.proc', 'aggmtransfn.proc', 'aggminvtransfn.proc', 'aggmfinalfn.proc', 'aggsortop.operator', 'aggtranstype.type', 'aggmtranstype.type'),\n\t\t\t\t'pg_am' => array('amhandler.proc'),\n\t\t\t\t'pg_amop' => array('amopfamily.opfamily', 'amoplefttype.type', 'amoprighttype.type', 'amopopr.operator', 'amopmethod.am', 'amopsortfamily.opfamily'),\n\t\t\t\t'pg_amproc' => array('amprocfamily.opfamily', 'amproclefttype.type', 'amprocrighttype.type', 'amproc.proc'),\n\t\t\t\t'pg_attrdef' => array('adrelid.class', 'adnum.attribute.attnum'),\n\t\t\t\t'pg_attribute' => array('attrelid.class', 'atttypid.type', 'attcollation.collation'),\n\t\t\t\t'pg_auth_members' => array('roleid.authid', 'member.authid', 'grantor.authid'),\n\t\t\t\t'pg_cast' => array('castsource.type', 'casttarget.type', 'castfunc.proc'),\n\t\t\t\t'pg_class' => array('relnamespace.namespace', 'reltype.type', 'reloftype.type', 'relowner.authid', 'relam.am', 'reltablespace.tablespace', 'reltoastrelid.class', 'relrewrite.class'),\n\t\t\t\t'pg_collation' => array('collnamespace.namespace', 'collowner.authid'),\n\t\t\t\t'pg_constraint' => array('connamespace.namespace', 'conrelid.class', 'contypid.type', 'conindid.class', 'conparentid.constraint', 'confrelid.class', 'conkey.attribute.attnum', 'confkey.attribute.attnum', 'conpfeqop.operator', 'conppeqop.operator', 'conffeqop.operator', 'confdelsetcols.attribute.attnum', 'conexclop.operator'),\n\t\t\t\t'pg_conversion' => array('connamespace.namespace', 'conowner.authid', 'conproc.proc'),\n\t\t\t\t'pg_database' => array('datdba.authid', 'dattablespace.tablespace'),\n\t\t\t\t'pg_db_role_setting' => array('setdatabase.database', 'setrole.authid'),\n\t\t\t\t'pg_default_acl' => array('defaclrole.authid', 'defaclnamespace.namespace'),\n\t\t\t\t'pg_depend' => array('classid.class', 'refclassid.class'),\n\t\t\t\t'pg_description' => array('classoid.class'),\n\t\t\t\t'pg_enum' => array('enumtypid.type'),\n\t\t\t\t'pg_event_trigger' => array('evtowner.authid', 'evtfoid.proc'),\n\t\t\t\t'pg_extension' => array('extowner.authid', 'extnamespace.namespace', 'extconfig.class'),\n\t\t\t\t'pg_foreign_data_wrapper' => array('fdwowner.authid', 'fdwhandler.proc', 'fdwvalidator.proc'),\n\t\t\t\t'pg_foreign_server' => array('srvowner.authid', 'srvfdw.foreign_data_wrapper'),\n\t\t\t\t'pg_foreign_table' => array('ftrelid.class', 'ftserver.foreign_server'),\n\t\t\t\t'pg_index' => array('indexrelid.class', 'indrelid.class', 'indkey.attribute.attnum', 'indcollation.collation', 'indclass.opclass'),\n\t\t\t\t'pg_inherits' => array('inhrelid.class', 'inhparent.class'),\n\t\t\t\t'pg_init_privs' => array('classoid.class'),\n\t\t\t\t'pg_language' => array('lanowner.authid', 'lanplcallfoid.proc', 'laninline.proc', 'lanvalidator.proc'),\n\t\t\t\t'pg_largeobject' => array('loid.largeobject_metadata'),\n\t\t\t\t'pg_largeobject_metadata' => array('lomowner.authid'),\n\t\t\t\t'pg_namespace' => array('nspowner.authid'),\n\t\t\t\t'pg_opclass' => array('opcmethod.am', 'opcnamespace.namespace', 'opcowner.authid', 'opcfamily.opfamily', 'opcintype.type', 'opckeytype.type'),\n\t\t\t\t'pg_operator' => array('oprnamespace.namespace', 'oprowner.authid', 'oprleft.type', 'oprright.type', 'oprresult.type', 'oprcom.operator', 'oprnegate.operator', 'oprcode.proc', 'oprrest.proc', 'oprjoin.proc'),\n\t\t\t\t'pg_opfamily' => array('opfmethod.am', 'opfnamespace.namespace', 'opfowner.authid'),\n\t\t\t\t'pg_partitioned_table' => array('partrelid.class', 'partdefid.class', 'partattrs.attribute.attnum', 'partclass.opclass', 'partcollation.collation'),\n\t\t\t\t'pg_policy' => array('polrelid.class', 'polroles.authid'),\n\t\t\t\t'pg_proc' => array('pronamespace.namespace', 'proowner.authid', 'prolang.language', 'provariadic.type', 'prosupport.proc', 'prorettype.type', 'proargtypes.type', 'proallargtypes.type', 'protrftypes.type'),\n\t\t\t\t'pg_publication' => array('pubowner.authid'),\n\t\t\t\t'pg_publication_namespace' => array('pnpubid.publication', 'pnnspid.namespace'),\n\t\t\t\t'pg_publication_rel' => array('prpubid.publication', 'prrelid.class', 'prattrs.attribute.attnum'),\n\t\t\t\t'pg_range' => array('rngtypid.type', 'rngsubtype.type', 'rngmultitypid.type', 'rngcollation.collation', 'rngsubopc.opclass', 'rngcanonical.proc', 'rngsubdiff.proc'),\n\t\t\t\t'pg_rewrite' => array('ev_class.class'),\n\t\t\t\t'pg_seclabel' => array('classoid.class'),\n\t\t\t\t'pg_sequence' => array('seqrelid.class', 'seqtypid.type'),\n\t\t\t\t'pg_shdepend' => array('dbid.database', 'classid.class', 'refclassid.class'),\n\t\t\t\t'pg_shdescription' => array('classoid.class'),\n\t\t\t\t'pg_shseclabel' => array('classoid.class'),\n\t\t\t\t'pg_statistic' => array('starelid.class', 'staattnum.attribute.attnum', 'staop.operator', 'stacoll.collation'),\n\t\t\t\t'pg_statistic_ext' => array('stxrelid.class', 'stxnamespace.namespace', 'stxowner.authid', 'stxkeys.attribute.attnum'),\n\t\t\t\t'pg_statistic_ext_data' => array('stxoid.statistic_ext'),\n\t\t\t\t'pg_subscription' => array('subdbid.database', 'subowner.authid'),\n\t\t\t\t'pg_subscription_rel' => array('srsubid.subscription', 'srrelid.class'),\n\t\t\t\t'pg_tablespace' => array('spcowner.authid'),\n\t\t\t\t'pg_transform' => array('trftype.type', 'trflang.language', 'trffromsql.proc', 'trftosql.proc'),\n\t\t\t\t'pg_trigger' => array('tgrelid.class', 'tgparentid.trigger', 'tgfoid.proc', 'tgconstrrelid.class', 'tgconstrindid.class', 'tgconstraint.constraint', 'tgattr.attribute.attnum'),\n\t\t\t\t'pg_ts_config' => array('cfgnamespace.namespace', 'cfgowner.authid', 'cfgparser.ts_parser'),\n\t\t\t\t'pg_ts_config_map' => array('mapcfg.ts_config', 'mapdict.ts_dict'),\n\t\t\t\t'pg_ts_dict' => array('dictnamespace.namespace', 'dictowner.authid', 'dicttemplate.ts_template'),\n\t\t\t\t'pg_ts_parser' => array('prsnamespace.namespace', 'prsstart.proc', 'prstoken.proc', 'prsend.proc', 'prsheadline.proc', 'prslextype.proc'),\n\t\t\t\t'pg_ts_template' => array('tmplnamespace.namespace', 'tmplinit.proc', 'tmpllexize.proc'),\n\t\t\t\t'pg_type' => array('typnamespace.namespace', 'typowner.authid', 'typrelid.class', 'typsubscript.proc', 'typelem.type', 'typarray.type', 'typinput.proc', 'typoutput.proc', 'typreceive.proc', 'typsend.proc', 'typmodin.proc', 'typmodout.proc', 'typanalyze.proc', 'typbasetype.type', 'typcollation.collation'),\n\t\t\t\t'pg_user_mapping' => array('umuser.authid', 'umserver.foreign_server'),\n\t\t\t);\n\t\t\t$return = array();\n\t\t\tforeach ((array) $mapping[$table] as $val) {\n\t\t\t\tlist($source, $target, $column) = explode(\".\", \"$val.oid\");\n\t\t\t\t$return[] = array(\"table\" => \"pg_$target\", \"source\" => array($source), \"target\" => array($column));\n\t\t\t}\n\t\t\treturn $return;\n\t\t}\n\t}\n\n\tprivate function lowerCase($value) {\n\t\treturn (is_array($value) ? array_map(array($this, 'lowerCase'), $value) : strtolower($value));\n\t}\n\n\tprivate function schemata($catalog, $schema = null) {\n\t\treturn array(\"table\" => \"SCHEMATA\", \"source\" => array($catalog . \"_CATALOG\", ($schema ?: $catalog) . \"_SCHEMA\"), \"target\" => array(\"CATALOG_NAME\", \"SCHEMA_NAME\"));\n\t}\n\n\tprivate function tables($catalog, $schema = null, $table_name = null) {\n\t\t$schema = ($schema ?: $catalog);\n\t\treturn array(\"table\" => \"TABLES\", \"source\" => array($catalog . \"_CATALOG\", $schema . \"_SCHEMA\", ($table_name ?: $schema . \"_NAME\")), \"target\" => array(\"TABLE_CATALOG\", \"TABLE_SCHEMA\", \"TABLE_NAME\"));\n\t}\n\n\tprivate function character_sets($source) {\n\t\treturn array(\"table\" => \"CHARACTER_SETS\", \"source\" => array($source), \"target\" => array(\"CHARACTER_SET_NAME\"));\n\t}\n\n\tprivate function collations($source) {\n\t\treturn array(\"table\" => \"COLLATIONS\", \"source\" => array($source), \"target\" => array(\"COLLATION_NAME\"));\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Propojuje systémové tabulky (v databázích \"mysql\" a \"information_schema\") pomocí cizích klíčů'),\n\t\t'de' => array('' => 'Verknüpfen Sie Systemtabellen (in \"mysql\"- und \"information_schema\"-Datenbanken) durch Fremdschlüssel'),\n\t\t'pl' => array('' => 'Połącz tabele systemowe (w bazach danych \"mysql\" i \"information_schema\") za pomocą kluczy obcych'),\n\t\t'ro' => array('' => 'Conectați tabelele de sistem (în bazele de date \"mysql\" și \"information_schema\") prin chei străine'),\n\t\t'ja' => array('' => 'システムテーブル (\"mysql\" と \"information_schema\") を外部キーを用いて接続'),\n\t\t'hr' => array('' => 'Povezuje sistemske tablice (u bazama \"mysql\" i \"information_schema\") stranim ključevima'),\n\t);\n}\n"
  },
  {
    "path": "plugins/frames.php",
    "content": "<?php\n\n/** Allow using Adminer inside a frame\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerFrames extends Adminer\\Plugin {\n\tprotected $sameOrigin;\n\n\t/**\n\t* @param bool $sameOrigin allow running from the same origin only\n\t*/\n\tfunction __construct($sameOrigin = false) {\n\t\t$this->sameOrigin = $sameOrigin;\n\t}\n\n\tfunction headers() {\n\t\tif ($this->sameOrigin) {\n\t\t\theader(\"X-Frame-Options: SameOrigin\");\n\t\t} elseif (function_exists('header_remove')) {\n\t\t\theader_remove(\"X-Frame-Options\");\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Dovolí pracovat Admineru uvnitř rámu'),\n\t\t'de' => array('' => 'Erlauben Sie die Verwendung von Adminer innerhalb eines Frames'),\n\t\t'pl' => array('' => 'Zezwalaj na używanie Adminera wewnątrz ramki'),\n\t\t'ro' => array('' => 'Permiteți utilizarea Adminer în interiorul unui cadru'),\n\t\t'ja' => array('' => 'フレーム内での Adminer 利用を許可'),\n\t\t'hr' => array('' => 'Dopušta korištenje Adminera unutar framea'),\n\t);\n}\n"
  },
  {
    "path": "plugins/highlight-codemirror.php",
    "content": "<?php\n\n/** Use CodeMirror 5 for syntax highlighting and <textarea> including type-ahead of keywords and tables\n* @link https://codemirror.net/5/\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerHighlightCodemirror extends Adminer\\Plugin {\n\tprivate $root;\n\tprivate $minified;\n\n\tfunction __construct($root = \"https://cdn.jsdelivr.net/npm/codemirror@5\", $minified = \".min\") {\n\t\t$this->root = $root;\n\t\t$this->minified = $minified;\n\t}\n\n\tfunction syntaxHighlighting($tableStatuses) {\n\t\t?>\n<style>\n@import url(<?php echo $this->root; ?>/lib/codemirror<?php echo $this->minified; ?>.css);\n@import url(<?php echo $this->root; ?>/addon/hint/show-hint<?php echo $this->minified; ?>.css);\n.CodeMirror { border: 1px inset #ccc; resize: both; }\n</style>\n<?php\n\t\techo Adminer\\script_src(\"$this->root/lib/codemirror$this->minified.js\", true);\n\t\techo Adminer\\script_src(\"$this->root/addon/runmode/runmode$this->minified.js\", true);\n\t\techo Adminer\\script_src(\"$this->root/addon/hint/show-hint$this->minified.js\", true);\n\t\techo Adminer\\script_src(\"$this->root/mode/javascript/javascript$this->minified.js\", true);\n\t\t$tables = array_fill_keys(array_keys($tableStatuses), array());\n\t\tif (Adminer\\support(\"sql\")) {\n\t\t\techo Adminer\\script_src(\"$this->root/mode/sql/sql$this->minified.js\", true);\n\t\t\techo Adminer\\script_src(\"$this->root/addon/hint/sql-hint$this->minified.js\", true);\n\t\t\tif (isset($_GET[\"sql\"]) || isset($_GET[\"trigger\"]) || isset($_GET[\"check\"])) {\n\t\t\t\tforeach (Adminer\\driver()->allFields() as $table => $fields) {\n\t\t\t\t\tforeach ($fields as $field) {\n\t\t\t\t\t\t$tables[$table][] = $field[\"field\"];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t?>\n<script <?php echo Adminer\\nonce(); ?>>\naddEventListener('DOMContentLoaded', () => {\n\tfunction getCmMode(el) {\n\t\tconst match = el.className.match(/(^|\\s)jush-([^ ]+)/);\n\t\tif (match) {\n\t\t\tconst modes = {\n\t\t\t\tjs: 'application/json',\n\t\t\t\tsql: 'text/x-<?php echo (Adminer\\connection()->flavor == \"maria\" ? \"mariadb\" : \"mysql\"); ?>',\n\t\t\t\toracle: 'text/x-sql',\n\t\t\t\tclickhouse: 'text/x-sql',\n\t\t\t\tfirebird: 'text/x-sql'\n\t\t\t};\n\t\t\treturn modes[match[2]] || 'text/x-' + match[2];\n\t\t}\n\t}\n\n\tadminerHighlighter = els => els.forEach(el => {\n\t\tconst mode = getCmMode(el);\n\t\tif (mode) {\n\t\t\tel.classList.add('cm-s-default');\n\t\t\tCodeMirror.runMode(el.textContent, mode, el);\n\t\t}\n\t});\n\n\tadminerHighlighter(qsa('code'));\n\n\tfor (const el of qsa('textarea')) {\n\t\tconst mode = getCmMode(el);\n\t\tif (mode) {\n\t\t\tconst width = el.clientWidth;\n\t\t\tconst height = el.clientHeight;\n\t\t\tconst cm = CodeMirror.fromTextArea(el, {\n\t\t\t\tmode: mode,\n\t\t\t\textraKeys: { 'Ctrl-Space': 'autocomplete' },\n\t\t\t\thintOptions: {\n\t\t\t\t\tcompleteSingle: false,\n\t\t\t\t\ttables: <?php echo json_encode($tables); ?>,\n\t\t\t\t\tdefaultTable: <?php echo json_encode($_GET[\"trigger\"] ?: ($_GET[\"check\"] ?: null)); ?>\n\t\t\t\t}\n\t\t\t});\n\t\t\tcm.setSize(width, height);\n\t\t\tcm.on('inputRead', () => {\n\t\t\t\tconst token = cm.getTokenAt(cm.getCursor());\n\t\t\t\tif (/^[.`\"\\w]\\w*$/.test(token.string)) {\n\t\t\t\t\tCodeMirror.commands.autocomplete(cm);\n\t\t\t\t}\n\t\t\t});\n\t\t\tsetupSubmitHighlightInput(cm.getWrapperElement());\n\t\t\tel.onchange = () => cm.setValue(el.value);\n\t\t}\n\t}\n});\n</script>\n<?php\n\t\treturn true;\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/codemirror.gif\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Použít CodeMirror 5 pro zvýrazňování syntaxe a <textarea> včetně našeptávání klíčových slov a tabulek'),\n\t\t'de' => array('' => 'CodeMirror 5 verwenden für die Syntaxhervorhebung und <textarea> einschließlich der Überschrift von Schlüsselwörtern und Tabellen'),\n\t\t'ja' => array('' => 'CodeMirror 5 を用い、キーワードやテーブルを含む構文や <textarea> を強調表示'),\n\t\t'pl' => array('' => 'Użyj CodeMirror 5 do podświetlania składni i <textarea>, uwzględniając wcześniejsze wpisywanie słów kluczowych i tabel'),\n\t\t'hr' => array('' => 'Koristi CodeMirror 5 za isticanje sintakse i <textarea>, uključujući dovršavanje ključnih riječi i tablica'),\n\t);\n}\n"
  },
  {
    "path": "plugins/highlight-monaco.php",
    "content": "<?php\n\n/** Use VS Code's Monaco Editor for syntax highlighting and SQL <textarea>\n* @link https://microsoft.github.io/monaco-editor/\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerHighlightMonaco extends Adminer\\Plugin {\n\tprivate $root;\n\n\tfunction __construct($root = \"https://cdn.jsdelivr.net/npm/monaco-editor@0.52/min/vs\") {\n\t\t$this->root = $root;\n\t}\n\n\tfunction syntaxHighlighting($tableStatuses) {\n\t\techo Adminer\\script_src(\"$this->root/loader.js\", true);\n\t\t?>\n<script <?php echo Adminer\\nonce(); ?>>\naddEventListener('DOMContentLoaded', () => {\n\trequire.config({ paths: { vs: '<?php echo $this->root; ?>' } });\n\trequire(['vs/editor/editor.main'], function (monaco) {\n\t\tadminerHighlighter = els => els.forEach(el => {\n\t\t\tconst lang = getMonacoLang(el);\n\t\t\tif (lang) {\n\t\t\t\tmonaco.editor.colorize(el.textContent, lang).then(html => el.innerHTML = html);\n\t\t\t}\n\t\t});\n\t\tadminerHighlighter(qsa('code'));\n\n\t\tfor (const el of qsa('textarea')) {\n\t\t\tconst lang = getMonacoLang(el);\n\t\t\tif (lang) {\n\t\t\t\tconst container = document.createElement('div');\n\t\t\t\tcontainer.style.border = '1px inset #ccc';\n\t\t\t\tcontainer.style.width = el.clientWidth + 'px';\n\t\t\t\tcontainer.style.height = el.clientHeight + 'px';\n\t\t\t\tel.before(container);\n\t\t\t\tel.style.display = 'none';\n\t\t\t\tvar editor = monaco.editor.create(container, {\n\t\t\t\t\tvalue: el.value,\n\t\t\t\t\tlineNumbers: 'off',\n\t\t\t\t\tglyphMargin: false,\n\t\t\t\t\tfolding: false,\n\t\t\t\t\tlineDecorationsWidth: 1,\n\t\t\t\t\tminimap: {enabled: false},\n\t\t\t\t\tlanguage: lang\n\t\t\t\t});\n\t\t\t\teditor.onDidChangeModelContent(() => el.value = editor.getValue());\n\t\t\t\tel.onchange = () => editor.setValue(el.value);\n\t\t\t\tmonaco.editor.addKeybindingRules([\n\t\t\t\t\t{keybinding: monaco.KeyCode.Tab, command: null}\n\t\t\t\t\t//! Ctrl+Enter\n\t\t\t\t]);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getMonacoLang(el) {\n\t\treturn (\n\t\t\t/jush-js/.test(el.className) ? 'javascript' : (\n\t\t\t/jush-sql/.test(el.className) ? 'mysql' : (\n\t\t\t/jush-pgsql/.test(el.className) ? 'pgsql' : (\n\t\t\t/jush-(sqlite|mssql|oracle|clickhouse|firebird)/.test(el.className) ? 'sql' : (\n\t\t\t''\n\t\t)))));\n\t}\n});\n</script>\n<?php\n\t\treturn true;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Použije Monaco Editor z VS Code pro zvýrazňování syntaxe a <textarea>'),\n\t\t'de' => array('' => 'Monaco-Editor von VS Code verwenden, für die Syntaxhervorhebung und SQL <textarea>'),\n\t\t'ja' => array('' => '構文や <textarea> の強調表示に VS Code の Monaco Editor を使用'),\n\t\t'pl' => array('' => 'Użyj Monaco Editora programu VS Code do podświetlania składni i <textarea> SQL'),\n\t\t'hr' => array('' => 'Koristi Monaco Editor iz VS Code za isticanje sintakse i SQL <textarea>'),\n\t);\n}\n"
  },
  {
    "path": "plugins/highlight-prism.php",
    "content": "<?php\n\n/** Use Prism Code Editor for syntax highlighting and <textarea>\n* @link https://prism-code-editor.netlify.app/\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerHighlightPrism extends Adminer\\Plugin {\n\tprivate $editorRoot;\n\tprivate $minified;\n\tprivate $theme;\n\n\tfunction __construct($editorRoot = \"https://cdn.jsdelivr.net/npm/prism-code-editor@3/dist\", $minified = \".min\", $theme = \"prism\") {\n\t\t$this->editorRoot = $editorRoot;\n\t\t$this->minified = $minified;\n\t\t$this->theme = $theme;\n\t}\n\n\tfunction syntaxHighlighting($tableStatuses) {\n\t\t?>\n<style>\n@import url(<?php echo \"$this->editorRoot/layout$this->minified.css\"; ?>);\n@import url(<?php echo \"$this->editorRoot/themes/$this->theme$this->minified.css\"; ?>);\n.prism-code-editor { border: 1px inset #ccc; resize: both; }\n</style>\n<script type=\"module\"<?php echo Adminer\\nonce(); ?>>\nimport { editorFromPlaceholder } from '<?php echo $this->editorRoot; ?>/index.js';\nimport { highlightText } from '<?php echo $this->editorRoot; ?>/prism/index.js';\nimport '<?php echo $this->editorRoot; ?>/prism/languages/json.js';\nimport '<?php echo $this->editorRoot; ?>/prism/languages/sql.js';\n\nadminerHighlighter = els => els.forEach(el => {\n\tconst mode = (\n\t\t/jush-js/.test(el.className) ? 'json' : (\n\t\t/jush-(\\w*sql|oracle|clickhouse|firebird)/.test(el.className) ? 'sql' : (\n\t\t''\n\t)));\n\tif (mode) {\n\t\tel.innerHTML = highlightText(el.textContent, mode);\n\t}\n});\nadminerHighlighter(qsa('code'));\n\nconst el = document.querySelector('.sqlarea');\nif (el) {\n\tconst name = el.name;\n\tconst width = el.clientWidth;\n\tconst height = el.clientHeight;\n\tconst editor = editorFromPlaceholder('.sqlarea', { language: 'sql', lineNumbers: false });\n\teditor.wrapper.parentElement.style.width = width + 'px';\n\teditor.wrapper.style.height = height + 'px';\n\teditor.textarea.name = name;\n\teditor.textarea.className = 'sqlarea';\n\teditor.textarea.onchange = editor.update;\n}\n</script>\n<?php\n\t\treturn true;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Použije Prism Code Editor pro zvýrazňování syntaxe a <textarea>'),\n\t\t'de' => array('' => 'Prism Code Editor verwenden, für die Syntaxhervorhebung und <textarea>'),\n\t\t'ja' => array('' => '構文や <textarea> の強調表示に Prism Code Editor を使用'),\n\t\t'pl' => array('' => 'Użyj Prism Code Editora do podświetlania składni i <textarea>'),\n\t\t'hr' => array('' => 'Koristi Prism Code Editor za isticanje sintakse i SQL <textarea>'),\n\t);\n}\n"
  },
  {
    "path": "plugins/json-column.php",
    "content": "<?php\n\n/** Display JSON values as table in edit\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @author Martin Zeman (Zemistr), http://www.zemistr.eu/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerJsonColumn extends Adminer\\Plugin {\n\tprivate function testJson($value) {\n\t\tif ((substr($value, 0, 1) == '{' || substr($value, 0, 1) == '[') && ($json = json_decode($value, true))) {\n\t\t\treturn $json;\n\t\t}\n\t\treturn $value;\n\t}\n\n\tprivate function buildTable($json) {\n\t\techo '<table style=\"margin:2px; font-size:100%;\">';\n\t\tforeach ($json as $key => $val) {\n\t\t\techo '<tr>';\n\t\t\techo '<th>' . Adminer\\h($key) . '</th>';\n\t\t\techo '<td>';\n\t\t\tif (is_scalar($val) || $val === null) {\n\t\t\t\tif (is_bool($val)) {\n\t\t\t\t\t$val = $val ? 'true' : 'false';\n\t\t\t\t} elseif ($val === null) {\n\t\t\t\t\t$val = 'null';\n\t\t\t\t} elseif (!is_numeric($val)) {\n\t\t\t\t\t$val = '\"' . Adminer\\h(addcslashes($val, \"\\r\\n\\\"\")) . '\"';\n\t\t\t\t}\n\t\t\t\techo '<code class=\"jush-js\">' . $val . '</code>';\n\t\t\t} else {\n\t\t\t\t$this->buildTable($val);\n\t\t\t}\n\t\t\techo '</td>';\n\t\t\techo '</tr>';\n\t\t}\n\t\techo '</table>';\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\t$json = $this->testJson($value);\n\t\tif ($json !== $value) {\n\t\t\t$this->buildTable($json);\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Hodnoty JSON v editaci zobrazí formou tabulky'),\n\t\t'de' => array('' => 'Zeigen Sie JSON-Werte als Tabelle in der Bearbeitung an'),\n\t\t'pl' => array('' => 'Wyświetl wartości JSON jako tabelę w edycji'),\n\t\t'ro' => array('' => 'Afișează valorile JSON sub formă de tabel în editare'),\n\t\t'ja' => array('' => 'JSON 値をテーブルとして編集画面に表示'),\n\t\t'hr' => array('' => 'Prikazuje JSON vrijednosti kao tablicu u uređivanju'),\n\t);\n}\n"
  },
  {
    "path": "plugins/login-ip.php",
    "content": "<?php\n\n/** Check IP address and allow empty password\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerLoginIp extends Adminer\\Plugin {\n\tprotected $ips, $forwarded_for;\n\n\t/** Set allowed IP addresses\n\t* @param list<string> $ips IP address prefixes\n\t* @param list<string> $forwarded_for X-Forwarded-For prefixes if IP address matches, empty array means anything\n\t*/\n\tfunction __construct(array $ips, array $forwarded_for = array()) {\n\t\t$this->ips = $ips;\n\t\t$this->forwarded_for= $forwarded_for;\n\t}\n\n\tfunction login($login, $password) {\n\t\tforeach ($this->ips as $ip) {\n\t\t\tif (strncasecmp($_SERVER[\"REMOTE_ADDR\"], $ip, strlen($ip)) == 0) {\n\t\t\t\tif (!$this->forwarded_for) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif ($_SERVER[\"HTTP_X_FORWARDED_FOR\"]) {\n\t\t\t\t\tforeach ($this->forwarded_for as $forwarded_for) {\n\t\t\t\t\t\tif (strncasecmp(preg_replace('~.*, *~', '', $_SERVER[\"HTTP_X_FORWARDED_FOR\"]), $forwarded_for, strlen($forwarded_for)) == 0) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zkontroluje IP adresu a povolí prázdné heslo'),\n\t\t'de' => array('' => 'Überprüft die IP-Adresse und lässt ein leeres Passwort zu'),\n\t\t'pl' => array('' => 'Sprawdzaj adres IP i zezwakaj na puste hasło'),\n\t\t'ro' => array('' => 'Verificați adresa IP și permiteți parola goală'),\n\t\t'ja' => array('' => 'IP アドレスの確認、及び空パスワードの許可'),\n\t\t'hr' => array('' => 'Provjerava IP adresu i dopušta praznu lozinku'),\n\t);\n}\n"
  },
  {
    "path": "plugins/login-otp.php",
    "content": "<?php\n\n/** Require One-Time Password at login\n* @link https://www.adminer.org/plugins/otp/\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerLoginOtp extends Adminer\\Plugin {\n\tprotected $secret;\n\n\t/**\n\t* @param string $secret decoded secret, e.g. base64_decode(\"SECRET\")\n\t*/\n\tfunction __construct($secret) {\n\t\t$this->secret = $secret;\n\t\tif ($_POST[\"auth\"]) {\n\t\t\t$_SESSION[\"otp\"] = (string) $_POST[\"auth\"][\"otp\"];\n\t\t}\n\t}\n\n\tfunction loginFormField($name, $heading, $value) {\n\t\tif ($name == 'password') {\n\t\t\treturn $heading . $value . \"\\n\"\n\t\t\t\t. \"<tr><th><abbr title='\" . $this->lang('One Time Password') . \"'>OTP</abbr>\"\n\t\t\t\t. \"<td><input type='number' name='auth[otp]' value='\" . Adminer\\h($_SESSION[\"otp\"]) . \"' size='6' autocomplete='one-time-code' inputmode='numeric' maxlength='6' pattern='\\d{6}'>\\n\"\n\t\t\t;\n\t\t}\n\t}\n\n\tfunction login($login, $password) {\n\t\tif (isset($_SESSION[\"otp\"])) {\n\t\t\t$timeSlot = floor(time() / 30);\n\t\t\tforeach (array(0, -1, 1) as $skew) {\n\t\t\t\tif ($_SESSION[\"otp\"] == $this->getOtp($timeSlot + $skew)) {\n\t\t\t\t\tAdminer\\restart_session();\n\t\t\t\t\tunset($_SESSION[\"otp\"]);\n\t\t\t\t\tAdminer\\stop_session();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $this->lang('Invalid OTP.');\n\t\t}\n\t}\n\n\tfunction getOtp($timeSlot) {\n\t\t$data = str_pad(pack('N', $timeSlot), 8, \"\\0\", STR_PAD_LEFT);\n\t\t$hash = hash_hmac('sha1', $data, $this->secret, true);\n\t\t$offset = ord(substr($hash, -1)) & 0xF;\n\t\t$unpacked = unpack('N', substr($hash, $offset, 4));\n\t\treturn ($unpacked[1] & 0x7FFFFFFF) % 1e6;\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/login-otp.png\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array(\n\t\t\t'' => 'Při přihlášení požaduje jednorázové heslo',\n\t\t\t'One Time Password' => 'Jednorázové heslo',\n\t\t\t'Invalid OTP.' => 'Neplatné jednorázové heslo.',\n\t\t),\n\t\t'de' => array(\n\t\t\t'' => 'Bei der Anmeldung ist ein Einmalpasswort (Zwei-Faktor-Authentifizierung) erforderlich',\n\t\t\t'One Time Password' => 'Einmal-Passwort',\n\t\t\t'Invalid OTP.' => 'Ungültiger OTP.',\n\t\t),\n\t\t'pl' => array(\n\t\t\t'' => 'Wymagaj jednorazowego hasła przy logowaniu',\n\t\t),\n\t\t'ro' => array(\n\t\t\t'' => 'Cereți o parolă unică la autentificare',\n\t\t),\n\t\t'ja' => array(\n\t\t\t'' => 'ログイン時にワンタイムパスワード (二要素認証) が必要',\n\t\t),\n\t\t'hr' => array(\n\t\t\t'' => 'Jednokratna lozinka (dvofaktorska autentifikacija) potrebna pri prijavi',\n\t\t\t'One Time Password' => 'Jednokratna lozinka',\n\t\t\t'Invalid OTP.' => 'Nevažeća jednokratna lozinka.',\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/login-password-less.php",
    "content": "<?php\n\n/** Enable login without password\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerLoginPasswordLess extends Adminer\\Plugin {\n\tprotected $password_hash;\n\n\t/** Set allowed password\n\t* @param string $password_hash result of password_hash()\n\t*/\n\tfunction __construct($password_hash) {\n\t\t$this->password_hash = $password_hash;\n\t}\n\n\tfunction credentials() {\n\t\t$password = Adminer\\get_password();\n\t\treturn array(Adminer\\SERVER, $_GET[\"username\"], (password_verify($password, $this->password_hash) ? \"\" : $password));\n\t}\n\n\tfunction login($login, $password) {\n\t\tif ($password != \"\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Povolí přihlášení bez hesla'),\n\t\t'de' => array('' => 'Ermöglicht die Anmeldung ohne Passwort'),\n\t\t'pl' => array('' => 'Włącz logowanie bez hasła'),\n\t\t'ro' => array('' => 'Activați autentificarea fără parolă'),\n\t\t'ja' => array('' => 'パスワードなしのログインを許可'),\n\t\t'hr' => array('' => 'Omogućuje prijavu bez lozinke'),\n\t);\n}\n"
  },
  {
    "path": "plugins/login-servers.php",
    "content": "<?php\n\n/** Display constant list of servers in login form\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerLoginServers extends Adminer\\Plugin {\n\tprotected $servers;\n\n\t/** Set supported servers\n\t* @param array{server:string, driver:string}[] $servers [$description => [\"server\" => , \"driver\" => \"server|pgsql|sqlite|...\"]], note that the driver for MySQL is called 'server'\n\t*/\n\tfunction __construct(array $servers) {\n\t\t$this->servers = $servers;\n\t\tif ($_POST[\"auth\"]) {\n\t\t\t$key = $_POST[\"auth\"][\"server\"];\n\t\t\t$_POST[\"auth\"][\"driver\"] = $this->servers[$key][\"driver\"];\n\t\t}\n\t}\n\n\tfunction credentials() {\n\t\treturn array($this->servers[Adminer\\SERVER][\"server\"], $_GET[\"username\"], Adminer\\get_password());\n\t}\n\n\tfunction login($login, $password) {\n\t\tif (!$this->servers[Adminer\\SERVER]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tfunction loginFormField($name, $heading, $value) {\n\t\tif ($name == 'driver') {\n\t\t\treturn '';\n\t\t} elseif ($name == 'server') {\n\t\t\treturn $heading . Adminer\\html_select(\"auth[server]\", array_keys($this->servers), Adminer\\SERVER) . \"\\n\";\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'V přihlašovacím formuláři zobrazuje předdefinovaný seznam serverů'),\n\t\t'de' => array('' => 'Anzeige einer konstanten Serverliste im Anmeldeformular'),\n\t\t'pl' => array('' => 'Wyświetlaj stałą listę serwerów w formularzu logowania'),\n\t\t'ro' => array('' => 'Afișarea unei liste constante de servere în formularul de conectare'),\n\t\t'ja' => array('' => 'ログイン画面に定義済のサーバリストを表示'),\n\t\t'hr' => array('' => 'Prikazuje konstantan popis poslužitelja u obrascu za prijavu'),\n\t);\n}\n"
  },
  {
    "path": "plugins/login-ssl.php",
    "content": "<?php\n\n/** Connect to MySQL, PostgreSQL or MS SQL using SSL\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerLoginSsl extends Adminer\\Plugin {\n\tprotected $ssl;\n\n\t/**\n\t* MySQL: [\"key\" => filename, \"cert\" => filename, \"ca\" => filename, \"verify\" => bool]\n\t* PostgresSQL: [\"mode\" => sslmode] (https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)\n\t* MSSQL: [\"Encrypt\" => true, \"TrustServerCertificate\" => true] (https://learn.microsoft.com/en-us/sql/connect/php/connection-options)\n\t*/\n\tfunction __construct(array $ssl) {\n\t\t$this->ssl = $ssl;\n\t}\n\n\tfunction connectSsl() {\n\t\treturn $this->ssl;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Připojení k MySQL, PostgreSQL a MS SQL pomocí SSL'),\n\t\t'de' => array('' => 'Stellen Sie eine Verbindung zu MySQL, PostgreSQL, MS SQL über SSL her'),\n\t\t'pl' => array('' => 'Połącz się z MySQL, PostgreSQL, MS SQL za pomocą protokołu SSL'),\n\t\t'ro' => array('' => 'Conectați-vă la MySQL, PostgreSQL, MS SQL utilizând SSL'),\n\t\t'ja' => array('' => 'MySQL, PostgreSQL, MS SQL への接続時に SSL を利用'),\n\t\t'hr' => array('' => 'Spajanje na MySQL, PostgreSQL i MS SQL putem SSL-a'),\n\t);\n}\n"
  },
  {
    "path": "plugins/login-table.php",
    "content": "<?php\n/* Requires this table:\nCREATE TABLE login (\n\tid int NOT NULL AUTO_INCREMENT, -- optional\n\tlogin varchar(30) NOT NULL, -- any length\n\tpassword_sha1 char(40) NOT NULL,\n\tUNIQUE (login),\n\tPRIMARY KEY (id)\n);\n*/\n\n/** Authenticate a user from the \"login\" table\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerLoginTable extends Adminer\\Plugin {\n\tprotected $database;\n\n\t/** Set database of login table */\n\tfunction __construct($database) {\n\t\t$this->database = $database;\n\t}\n\n\tfunction login($login, $password) {\n\t\treturn (bool) Adminer\\get_val(\"SELECT COUNT(*) FROM \" . Adminer\\idf_escape($this->database) . \".login WHERE login = \" . Adminer\\q($login) . \" AND password_sha1 = \" . Adminer\\q(sha1($password)));\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Autentizace uživatele podle tabulky \"login\"'),\n\t\t'de' => array('' => 'Authentifizieren Sie einen Benutzer über die Tabelle \"login\"'),\n\t\t'pl' => array('' => 'Uwierzytelnij użytkownika z tabeli \"login\"'),\n\t\t'ro' => array('' => 'Autentificați un utilizator din tabelul \"login\"'),\n\t\t'ja' => array('' => '\"login\" テーブルによるユーザ認証'),\n\t\t'hr' => array('' => 'Autentificira korisnika prema tablici \"login\"'),\n\t);\n}\n"
  },
  {
    "path": "plugins/master-slave.php",
    "content": "<?php\n\n/** Execute writes on master and reads on slave\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerMasterSlave extends Adminer\\Plugin {\n\tprivate $masters = array();\n\n\t/**\n\t* @param string[] $masters [$slave => $master]\n\t*/\n\tfunction __construct(array $masters) {\n\t\t$this->masters = $masters;\n\t}\n\n\tfunction credentials() {\n\t\tif ($_POST && isset($this->masters[Adminer\\SERVER])) {\n\t\t\treturn array($this->masters[Adminer\\SERVER], $_GET[\"username\"], Adminer\\get_session(\"pwds\"));\n\t\t}\n\t}\n\n\tfunction login($login, $password) {\n\t\tif (!$_POST && ($master = &$_SESSION[\"master\"])) {\n\t\t\tAdminer\\connection()->query(\"DO MASTER_POS_WAIT('\" . Adminer\\q($master['File']) . \"', $master[Position])\");\n\t\t\t$master = null;\n\t\t}\n\t}\n\n\tfunction messageQuery($query, $time, $failed = false) {\n\t\t//! doesn't work with sql.inc.php\n\t\t$result = Adminer\\connection()->query('SHOW MASTER STATUS');\n\t\tif ($result) {\n\t\t\tAdminer\\restart_session();\n\t\t\t$_SESSION[\"master\"] = $result->fetch_assoc();\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zápisy provádět na masteru a čtení na slave'),\n\t\t'de' => array('' => 'Schreibvorgänge auf dem Master und Lesevorgänge auf dem Slave ausführen'),\n\t\t'pl' => array('' => 'Wykonuje zapisy na komputerze głównym i odczyty na komputerze podrzędnym'),\n\t\t'ro' => array('' => 'Executarea scrierilor pe master și a citirilor pe slave'),\n\t\t'ja' => array('' => 'マスタ書込みとスレーブ読込みの有効化'),\n\t\t'hr' => array('' => 'Izvodi pisanje na masteru i čitanje na slaveu'),\n\t);\n}\n"
  },
  {
    "path": "plugins/menu-links.php",
    "content": "<?php\n\n/** Configure menu table links; combinable with AdminerConfig\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerMenuLinks extends Adminer\\Plugin {\n\tprivate $menu;\n\n\t/** @param ''|'table'|'select'|'auto' $menu see config() for explanation */\n\tfunction __construct($menu = '') {\n\t\t$this->menu = $menu;\n\t}\n\n\tfunction config() {\n\t\t$options = array(\n\t\t\t'select' => $this->lang('Select data'),\n\t\t\t'table' => $this->lang('Show structure'),\n\t\t\t'' => $this->lang('Both'),\n\t\t\t'auto' => $this->lang('Auto (select on select page, structure otherwise)'),\n\t\t);\n\t\t$menu = Adminer\\get_setting(\"menu\", \"adminer_config\", $this->menu);\n\t\treturn array($this->lang('Menu table links') => Adminer\\html_radios('config[menu]', $options, $menu, \"<br>\"));\n\t}\n\n\tfunction tablesPrint(array $tables) {\n\t\t$menu = Adminer\\get_setting(\"menu\", \"adminer_config\", $this->menu);\n\t\t$titles = array(\n\t\t\t'select' => $this->lang('Select data'),\n\t\t\t'table' => $this->lang('Show structure'),\n\t\t);\n\t\t// this is copied from Adminer::tablesPrint()\n\t\techo \"<ul id='tables'>\" . Adminer\\script(\"mixin(qs('#tables'), {onmouseover: menuOver, onmouseout: menuOut});\");\n\t\tforeach ($tables as $table => $status) {\n\t\t\t$table = \"$table\"; // do not highlight \"0\" as active everywhere\n\t\t\t$name = Adminer\\adminer()->tableName($status);\n\t\t\tif ($name != \"\" && !$status[\"partition\"]) {\n\t\t\t\techo '<li>';\n\t\t\t\tif (!$menu) {\n\t\t\t\t\techo '<a href=\"' . Adminer\\h(Adminer\\ME) . 'select=' . urlencode($table) . '\"'\n\t\t\t\t\t\t. Adminer\\bold($_GET[\"select\"] == $table || $_GET[\"edit\"] == $table, \"select\")\n\t\t\t\t\t\t. \" title='$titles[select]'>\" . $this->lang('select') . \"</a> \"\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t\t$actives = array($_GET[\"table\"], $_GET[\"create\"], $_GET[\"indexes\"], $_GET[\"foreign\"], $_GET[\"trigger\"], $_GET[\"check\"], $_GET[\"view\"]);\n\t\t\t\tif ($menu) {\n\t\t\t\t\t$actives[] = $_GET[\"select\"];\n\t\t\t\t\t$actives[] = $_GET[\"edit\"];\n\t\t\t\t}\n\t\t\t\t$link =\n\t\t\t\t\t($menu == 'select' ? 'select' :\n\t\t\t\t\t($menu != 'auto' ? 'table' :\n\t\t\t\t\t($_GET[\"select\"] ? 'select' : 'table')\n\t\t\t\t));\n\t\t\t\t$class = ($link == \"select\" ? \"select\" : (Adminer\\is_view($status) ? \"view\" : \"structure\"));\n\t\t\t\techo (Adminer\\support(\"table\") || Adminer\\support(\"indexes\") || $menu\n\t\t\t\t\t? '<a href=\"' . Adminer\\h(Adminer\\ME) . \"$link=\" . urlencode($table) . '\"'\n\t\t\t\t\t\t. Adminer\\bold(in_array($table, $actives), $class)\n\t\t\t\t\t\t. \" title='$titles[$link]'>$name</a>\"\n\t\t\t\t\t: \"<span>$name</span>\"\n\t\t\t\t);\n\t\t\t\techo \"\\n\";\n\t\t\t}\n\t\t}\n\t\techo \"</ul>\\n\";\n\t\treturn true;\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/menu-links.png\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array(\n\t\t\t'' => 'Konfigurace odkazů na tabulky v menu; kombinovatelné s AdminerConfig',\n\t\t\t'Menu table links' => 'Odkazy na tabulky v menu',\n\t\t\t'Both' => 'Oboje',\n\t\t\t'Auto (select on select page, structure otherwise)' => 'Auto (vypsat na výpisech, jinak struktura)',\n\t\t\t// this is copied from adminer/lang/\n\t\t\t'select' => 'vypsat',\n\t\t\t'Select data' => 'Vypsat data',\n\t\t\t'Show structure' => 'Zobrazit strukturu',\n\t\t),\n\t\t'pl' => array(\n\t\t\t'Menu table links' => 'Linki do tabel w menu',\n\t\t\t'Both' => 'Obie',\n\t\t\t'Auto (select on select page, structure otherwise)' => 'Auto (pokaż na stronie przeglądania, w przeciwnym razie struktura)',\n\t\t\t// this is copied from adminer/lang/\n\t\t\t'select' => 'przeglądaj',\n\t\t\t'Select data' => 'Pokaż dane',\n\t\t\t'Show structure' => 'Struktura tabeli',\n\t\t),\n\t\t'de' => array(\n\t\t\t'' => 'Menü- und Tabellen-Links konfigurieren. Kombinierbar mit AdminerConfig',\n\t\t\t'Both' => 'Beide',\n\t\t\t'Auto (select on select page, structure otherwise)' => 'Auto (Auswahl auf der ausgewählten Seite, sonst Struktur)',\n\t\t\t'Menu table links' => 'Links verwenden in „Tabelle“',\n\t\t\t// this is copied from adminer/lang/\n\t\t\t'select' => 'zeigen',\n\t\t\t'Select data' => 'Daten auswählen',\n\t\t\t'Show structure' => 'Struktur anzeigen',\n\t\t),\n\t\t'ja' => array(\n\t\t\t'' => 'メニュー内テーブルへのリンク設定; AdminerConfig との併用可',\n\t\t\t'Both' => '両方',\n\t\t\t'Auto (select on select page, structure otherwise)' => '自動 (選択ページでは選択、それ以外では構造)',\n\t\t\t'Menu table links' => 'メニューテーブルへのリンク',\n\t\t\t// this is copied from adminer/lang/\n\t\t\t'select' => '選択',\n\t\t\t'Select data' => 'データ',\n\t\t\t'Show structure' => '構造',\n\t\t),\n\t\t'hr' => array(\n\t\t\t'' => 'Prikazuje veze na odabir podataka ili strukturu tablice u izborniku',\n\t\t\t'Select data' => 'Odaberi podatke',\n\t\t\t'Show structure' => 'Prikaži strukturu',\n\t\t\t'Both' => 'Oboje',\n\t\t\t'Auto (select on select page, structure otherwise)' => 'Automatski (odabir na stranici odabira, inače struktura)',\n\t\t\t'Menu table links' => 'Veze tablice u izborniku',\n\t\t\t'select' => 'odaberi',\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/pretty-json-column.php",
    "content": "<?php\n\n/** Pretty print JSON values in edit\n* @link https://www.adminer.org/plugins/#use\n* @author Christopher Chen\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerPrettyJsonColumn extends Adminer\\Plugin {\n\tprivate function testJson($value) {\n\t\tif ((substr($value, 0, 1) == '{' || substr($value, 0, 1) == '[') && ($json = json_decode($value, true))) {\n\t\t\treturn $json;\n\t\t}\n\t\treturn $value;\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\t$json = $this->testJson($value);\n\t\tif ($json !== $value) {\n\t\t\t$jsonText = json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);\n\t\t\treturn \"<textarea$attrs cols='50' rows='20' class='jush-js'>\" . Adminer\\h($jsonText) . \"</textarea>\";\n\t\t}\n\t}\n\n\tfunction processInput($field, $value, $function = '') {\n\t\tif ($function === '') {\n\t\t\t$json = $this->testJson($value);\n\t\t\tif ($json !== $value) {\n\t\t\t\treturn Adminer\\q(json_encode($json));\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'V editaci zobrazí syntaxi u JSONu'),\n\t\t'de' => array('' => 'JSON-Werte in der Bearbeitung hübsch drucken'),\n\t\t'pl' => array('' => 'Ładnie drukuj wartości JSON w edycji'),\n\t\t'ro' => array('' => 'Afisare frumoasa a valorilor JSON în editare'),\n\t\t'ja' => array('' => '編集時に JSON 文字列を見易く表示'),\n\t\t'hr' => array('' => 'Lijepo prikazuje JSON vrijednosti u uređivanju'),\n\t);\n}\n"
  },
  {
    "path": "plugins/row-numbers.php",
    "content": "<?php\n\n/** Display row numbers in select\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerRowNumbers extends Adminer\\Plugin {\n\n\tfunction backwardKeys($table, $tableName) {\n\t\treturn array(1);\n\t}\n\n\tfunction backwardKeysPrint($backwardKeys, $row) {\n\t\tstatic $n;\n\t\tif (!$n) {\n\t\t\t$n = $_GET[\"page\"] * Adminer\\adminer()->selectLimitProcess();\n\t\t}\n\t\t$n++;\n\t\techo \"$n.\\n\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zobrazí čísla řádek ve výpisu'),\n\t\t'hr' => array('' => 'Prikazuje brojeve redaka u ispisu'),\n\t);\n}\n"
  },
  {
    "path": "plugins/select-email.php",
    "content": "<?php\n\n/** Allow sending e-mails to addresses in table\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerSelectEmail extends Adminer\\Plugin {\n\n\tfunction selectEmailPrint($emailFields, $columns) {\n\t\tif ($emailFields) {\n\t\t\tAdminer\\print_fieldset(\"email\", $this->lang('E-mail'), $_POST[\"email_append\"]);\n\t\t\techo \"<div>\";\n\t\t\techo Adminer\\script(\"qsl('div').onkeydown = partialArg(bodyKeydown, 'email');\");\n\t\t\techo Adminer\\script(\"function emailFileChange() { const el = this.cloneNode(true); this.onchange = null; el.onchange = emailFileChange; el.value = ''; this.parentNode.appendChild(el); }\");\n\t\t\techo \"<p>\" . $this->lang('From') . \": <input name='email_from' value='\" . Adminer\\h($_POST ? $_POST[\"email_from\"] : $_COOKIE[\"adminer_email\"]) . \"'>\\n\";\n\t\t\techo $this->lang('Subject') . \": <input name='email_subject' value='\" . Adminer\\h($_POST[\"email_subject\"]) . \"'>\\n\";\n\t\t\techo \"<p><textarea name='email_message' rows='15' cols='75'>\" . Adminer\\h($_POST[\"email_message\"] . ($_POST[\"email_append\"] ? '{$' . \"$_POST[email_addition]}\" : \"\")) . \"</textarea>\\n\";\n\t\t\techo \"<p>\" . Adminer\\script(\"qsl('p').onkeydown = partialArg(bodyKeydown, 'email_append');\", \"\") . Adminer\\html_select(\"email_addition\", $columns, $_POST[\"email_addition\"])\n\t\t\t\t. \" <input type='submit' name='email_append' value='\" . Adminer\\lang('Insert') . \"'>\\n\"; //! JavaScript\n\t\t\techo \"<p>\" . $this->lang('Attachments') . \": <input type='file' name='email_files[]'>\" . Adminer\\script(\"qsl('input').onchange = emailFileChange;\");\n\t\t\techo \"<p>\" . (count($emailFields) == 1 ? Adminer\\input_hidden(\"email_field\", key($emailFields)) : Adminer\\html_select(\"email_field\", $emailFields));\n\t\t\techo \"<input type='submit' name='email' value='\" . $this->lang('Send') . \"'>\" . Adminer\\confirm();\n\t\t\techo \"</div>\\n\";\n\t\t\techo \"</div></fieldset>\\n\";\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tfunction selectEmailProcess($where, $foreignKeys) {\n\t\tif ($_POST[\"email_append\"]) {\n\t\t\treturn true;\n\t\t}\n\t\tif ($_POST[\"email\"]) {\n\t\t\t$sent = 0;\n\t\t\tif ($_POST[\"all\"] || $_POST[\"check\"]) {\n\t\t\t\t$field = Adminer\\idf_escape($_POST[\"email_field\"]);\n\t\t\t\t$subject = $_POST[\"email_subject\"];\n\t\t\t\t$message = $_POST[\"email_message\"];\n\t\t\t\tpreg_match_all('~\\{\\$([a-z0-9_]+)\\}~i', \"$subject.$message\", $matches); // allows {$name} in subject or message\n\t\t\t\t$rows = Adminer\\get_rows(\n\t\t\t\t\t\"SELECT DISTINCT $field\" . ($matches[1] ? \", \" . implode(\", \", array_map('Adminer\\idf_escape', array_unique($matches[1]))) : \"\") . \" FROM \" . Adminer\\table($_GET[\"select\"])\n\t\t\t\t\t. \" WHERE $field IS NOT NULL AND $field != ''\"\n\t\t\t\t\t. ($where ? \" AND \" . implode(\" AND \", $where) : \"\")\n\t\t\t\t\t. ($_POST[\"all\"] ? \"\" : \" AND ((\" . implode(\") OR (\", array_map('Adminer\\where_check', (array) $_POST[\"check\"])) . \"))\")\n\t\t\t\t);\n\t\t\t\t$fields = Adminer\\fields($_GET[\"select\"]);\n\t\t\t\tforeach (Adminer\\adminer()->rowDescriptions($rows, $foreignKeys) as $row) {\n\t\t\t\t\t$replace = array('{\\\\' => '{'); // allow literal {$name}\n\t\t\t\t\tforeach ($matches[1] as $val) {\n\t\t\t\t\t\t$replace['{$' . \"$val}\"] = Adminer\\adminer()->editVal($row[$val], $fields[$val]);\n\t\t\t\t\t}\n\t\t\t\t\t$email = $row[$_POST[\"email_field\"]];\n\t\t\t\t\tif (Adminer\\is_mail($email) && $this->sendMail($email, strtr($subject, $replace), strtr($message, $replace), $_POST[\"email_from\"], $_FILES[\"email_files\"])) {\n\t\t\t\t\t\t$sent++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tAdminer\\cookie(\"adminer_email\", $_POST[\"email_from\"]);\n\t\t\tAdminer\\redirect(Adminer\\remove_from_uri(), $this->lang('%d e-mail(s) have been sent.', $sent));\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Encode e-mail header in UTF-8 */\n\tprivate function emailHeader($header) {\n\t\t// iconv_mime_encode requires iconv, imap_8bit requires IMAP extension\n\t\treturn \"=?UTF-8?B?\" . base64_encode($header) . \"?=\"; //! split long lines\n\t}\n\n\t/** Send e-mail in UTF-8\n\t* @param array{error?:list<int>, type?:list<string>, name?:list<string>, tmp_name?:list<string>} $files\n\t*/\n\tprivate function sendMail($email, $subject, $message, $from = \"\", array $files = array()) {\n\t\t$eol = PHP_EOL;\n\t\t$message = str_replace(\"\\n\", $eol, wordwrap(str_replace(\"\\r\", \"\", \"$message\\n\")));\n\t\t$boundary = uniqid(\"boundary\");\n\t\t$attachments = \"\";\n\t\tforeach ((array) $files[\"error\"] as $key => $val) {\n\t\t\tif (!$val) {\n\t\t\t\t$attachments .= \"--$boundary$eol\"\n\t\t\t\t\t. \"Content-Type: \" . str_replace(\"\\n\", \"\", $files[\"type\"][$key]) . $eol\n\t\t\t\t\t. \"Content-Disposition: attachment; filename=\\\"\" . preg_replace('~[\"\\n]~', '', $files[\"name\"][$key]) . \"\\\"$eol\"\n\t\t\t\t\t. \"Content-Transfer-Encoding: base64$eol$eol\"\n\t\t\t\t\t. chunk_split(base64_encode(file_get_contents($files[\"tmp_name\"][$key])), 76, $eol) . $eol\n\t\t\t\t;\n\t\t\t}\n\t\t}\n\t\t$beginning = \"\";\n\t\t$headers = \"Content-Type: text/plain; charset=utf-8$eol\" . \"Content-Transfer-Encoding: 8bit\";\n\t\tif ($attachments) {\n\t\t\t$attachments .= \"--$boundary--$eol\";\n\t\t\t$beginning = \"--$boundary$eol$headers$eol$eol\";\n\t\t\t$headers = \"Content-Type: multipart/mixed; boundary=\\\"$boundary\\\"\";\n\t\t}\n\t\t$headers .= $eol . \"MIME-Version: 1.0$eol\" . \"X-Mailer: Adminer Editor\"\n\t\t\t. ($from ? $eol . \"From: \" . str_replace(\"\\n\", \"\", $from) : \"\") //! should escape display name\n\t\t;\n\t\treturn mail($email, $this->emailHeader($subject), $beginning . $message . $attachments, $headers);\n\t}\n\n\tprotected $translations = array(\n\t\t'ar' => array(\n\t\t\t'E-mail' => 'البريد الإلكتروني',\n\t\t\t'From' => 'من',\n\t\t\t'Subject' => 'الموضوع',\n\t\t\t'Send' => 'إرسال',\n\t\t\t'%d e-mail(s) have been sent.' => 'تم إرسال %d رسالة.',\n\t\t\t'Attachments' => 'ملفات مرفقة',\n\t\t),\n\t\t'bg' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'От',\n\t\t\t'Subject' => 'Тема',\n\t\t\t'Attachments' => 'Прикачени',\n\t\t\t'Send' => 'Изпращане',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d писмо беше изпратено.', '%d писма бяха изпратени.'),\n\t\t),\n\t\t'bn' => array(\n\t\t\t'E-mail' => '​​ই-মেইল',\n\t\t\t'From' => 'থেকে',\n\t\t\t'Subject' => 'বিষয়',\n\t\t\t'Send' => 'পাঠান',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d ইমেইল(গুলি) পাঠানো হয়েছে।', '%d ইমেইল(গুলি) পাঠানো হয়েছে।'),\n\t\t\t'Attachments' => 'সংযুক্তিগুলো',\n\t\t),\n\t\t'bs' => array(\n\t\t\t'E-mail' => 'El. pošta',\n\t\t\t'From' => 'Od',\n\t\t\t'Subject' => 'Naslov',\n\t\t\t'Attachments' => 'Prilozi',\n\t\t\t'Send' => 'Pošalji',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d poruka el. pošte je poslata.', '%d poruke el. pošte su poslate.', '%d poruka el. pošte je poslato.'),\n\t\t),\n\t\t'ca' => array(\n\t\t\t'E-mail' => 'Correu electrònic',\n\t\t\t'From' => 'De',\n\t\t\t'Subject' => 'Assumpte',\n\t\t\t'Send' => 'Envia',\n\t\t\t'%d e-mail(s) have been sent.' => array('S\\'ha enviat %d correu electrònic.', 'S\\'han enviat %d correus electrònics.'),\n\t\t\t'Attachments' => 'Adjuncions',\n\t\t),\n\t\t'cs' => array(\n\t\t\t'' => 'Umožňuje posílat e-maily na adresy v tabulce',\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Odesílatel',\n\t\t\t'Subject' => 'Předmět',\n\t\t\t'Attachments' => 'Přílohy',\n\t\t\t'Send' => 'Odeslat',\n\t\t\t'%d e-mail(s) have been sent.' => array('Byl odeslán %d e-mail.', 'Byly odeslány %d e-maily.', 'Bylo odesláno %d e-mailů.'),\n\t\t),\n\t\t'da' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Fra',\n\t\t\t'Subject' => 'Titel',\n\t\t\t'Attachments' => 'Vedhæft',\n\t\t\t'Send' => 'Send',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d email sendt.', '%d emails sendt.'),\n\t\t),\n\t\t'de' => array(\n\t\t\t'E-mail' => 'E-Mail',\n\t\t\t'From' => 'Von',\n\t\t\t'Subject' => 'Betreff',\n\t\t\t'Send' => 'Abschicken',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d E-Mail abgeschickt.', '%d E-Mails abgeschickt.'),\n\t\t\t'Attachments' => 'Anhänge',\n\t\t),\n\t\t'el' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Από',\n\t\t\t'Subject' => 'Θέμα',\n\t\t\t'Attachments' => 'Συνημμένα',\n\t\t\t'Send' => 'Αποστολή',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.'),\n\t\t),\n\t\t'en' => array(\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-mail has been sent.', '%d e-mails have been sent.'),\n\t\t),\n\t\t'es' => array(\n\t\t\t'E-mail' => 'Email',\n\t\t\t'From' => 'De',\n\t\t\t'Subject' => 'Asunto',\n\t\t\t'Send' => 'Enviar',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),\n\t\t\t'Attachments' => 'Adjuntos',\n\t\t),\n\t\t'et' => array(\n\t\t\t'E-mail' => 'E-post',\n\t\t\t'From' => 'Kellelt',\n\t\t\t'Subject' => 'Pealkiri',\n\t\t\t'Send' => 'Saada',\n\t\t\t'%d e-mail(s) have been sent.' => 'Saadetud kirju: %d.',\n\t\t\t'Attachments' => 'Manused',\n\t\t),\n\t\t'fa' => array(\n\t\t\t'E-mail' => 'پست الکترونیک',\n\t\t\t'From' => 'فرستنده',\n\t\t\t'Subject' => 'موضوع',\n\t\t\t'Attachments' => 'پیوست ها',\n\t\t\t'Send' => 'ارسال',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد.', '%d ایمیل ارسال شد.'),\n\t\t),\n\t\t'fi' => array(\n\t\t\t'E-mail' => 'S-posti',\n\t\t\t'From' => 'Lähettäjä',\n\t\t\t'Subject' => 'Aihe',\n\t\t\t'Attachments' => 'Liitteet',\n\t\t\t'Send' => 'Lähetä',\n\t\t\t'%d e-mail(s) have been sent.' => array('% sähköpostiviestiä lähetetty.', '% sähköpostiviestiä lähetetty.'),\n\t\t),\n\t\t'fr' => array(\n\t\t\t'E-mail' => 'Courriel',\n\t\t\t'From' => 'De',\n\t\t\t'Subject' => 'Sujet',\n\t\t\t'Send' => 'Envoyer',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d message a été envoyé.', '%d messages ont été envoyés.'),\n\t\t\t'Attachments' => 'Pièces jointes',\n\t\t),\n\t\t'gl' => array(\n\t\t\t'E-mail' => 'Email',\n\t\t\t'From' => 'De',\n\t\t\t'Subject' => 'Asunto',\n\t\t\t'Send' => 'Enviar',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),\n\t\t\t'Attachments' => 'Adxuntos',\n\t\t),\n\t\t'he' => array(\n\t\t\t'E-mail' => 'דוא\"ל',\n\t\t\t'From' => 'מ:',\n\t\t\t'Subject' => 'נושא',\n\t\t\t'Send' => 'שלח',\n\t\t\t'%d e-mail(s) have been sent.' => '%d הודעות דוא\"ל נשלחו',\n\t\t\t'Attachments' => 'קבצים מצורפים',\n\t\t),\n\t\t'hu' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Feladó',\n\t\t\t'Subject' => 'Tárgy',\n\t\t\t'Send' => 'Küldés',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-mail elküldve.', '%d e-mail elküldve.', '%d e-mail elküldve.'),\n\t\t\t'Attachments' => 'Csatolmány',\n\t\t),\n\t\t'id' => array(\n\t\t\t'E-mail' => 'Surel',\n\t\t\t'From' => 'Dari',\n\t\t\t'Subject' => 'Judul',\n\t\t\t'Attachments' => 'Lampiran',\n\t\t\t'Send' => 'Kirim',\n\t\t\t'%d e-mail(s) have been sent.' => '%d surel berhasil dikirim.',\n\t\t),\n\t\t'it' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Da',\n\t\t\t'Subject' => 'Oggetto',\n\t\t\t'Send' => 'Invia',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-mail inviata.', '%d e-mail inviate.'),\n\t\t\t'Attachments' => 'Allegati',\n\t\t),\n\t\t'ja' => array(\n\t\t\t'' => 'テーブルに含まれるアドレスにメールを送信',\n\t\t\t'E-mail' => 'メール',\n\t\t\t'From' => '差出人',\n\t\t\t'Subject' => '題名',\n\t\t\t'Send' => '送信',\n\t\t\t'%d e-mail(s) have been sent.' => '%d メールを送信しました。',\n\t\t\t'Attachments' => '添付ファイル',\n\t\t),\n\t\t'ka' => array(\n\t\t\t'E-mail' => 'ელ. ფოსტა',\n\t\t\t'From' => 'ავტორი:',\n\t\t\t'Subject' => 'თემა',\n\t\t\t'Send' => 'გაგზავნა',\n\t\t\t'%d e-mail(s) have been sent.' => 'გაიგზავნა %d წერილი.',\n\t\t\t'Attachments' => 'მიმაგრებული ფაილები',\n\t\t),\n\t\t'ko' => array(\n\t\t\t'%d e-mail(s) have been sent.' => '%d개 메일을 보냈습니다.',\n\t\t\t'Attachments' => '첨부 파일',\n\t\t\t'E-mail' => '메일',\n\t\t\t'From' => '보낸 사람',\n\t\t\t'Send' => '보내기',\n\t\t\t'Subject' => '제목',\n\t\t),\n\t\t'lt' => array(\n\t\t\t'E-mail' => 'El. paštas',\n\t\t\t'From' => 'Nuo',\n\t\t\t'Subject' => 'Antraštė',\n\t\t\t'Attachments' => 'Priedai',\n\t\t\t'Send' => 'Siųsti',\n\t\t\t'%d e-mail(s) have been sent.' => array('Išsiųstas %d laiškas.', 'Išsiųsti %d laiškai.', 'Išsiųsta %d laiškų.'),\n\t\t),\n\t\t'lv' => array(\n\t\t\t'E-mail' => 'Epasts',\n\t\t\t'From' => 'No',\n\t\t\t'Subject' => 'Tēma',\n\t\t\t'Send' => 'Sūtīt',\n\t\t\t'%d e-mail(s) have been sent.' => array('Nosūtīts %d epasts.', 'Nosūtīti %d epasti.', 'Nosūtīti %d epasti.'),\n\t\t\t'Attachments' => 'Pielikumi',\n\t\t),\n\t\t'ms' => array(\n\t\t\t'E-mail' => 'Emel',\n\t\t\t'From' => 'Dari',\n\t\t\t'Subject' => 'Subjek',\n\t\t\t'Attachments' => 'Lampiran',\n\t\t\t'Send' => 'Hantar',\n\t\t\t'%d e-mail(s) have been sent.' => '%d emel telah dihantar.',\n\t\t),\n\t\t'nl' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Van',\n\t\t\t'Subject' => 'Onderwerp',\n\t\t\t'Send' => 'Verzenden',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-mail verzonden.', '%d e-mails verzonden.'),\n\t\t\t'Attachments' => 'Bijlagen',\n\t\t),\n\t\t'no' => array(\n\t\t\t'E-mail' => 'E-post',\n\t\t\t'From' => 'Fra',\n\t\t\t'Subject' => 'Tittel',\n\t\t\t'Attachments' => 'Vedlegg',\n\t\t\t'Send' => 'Send',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d epost sendt.', '%d eposter sendt.'),\n\t\t),\n\t\t'pl' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Nadawca',\n\t\t\t'Subject' => 'Temat',\n\t\t\t'Attachments' => 'Załączniki',\n\t\t\t'Send' => 'Wyślij',\n\t\t\t'%d e-mail(s) have been sent.' => array('Wysłano %d e-mail.', 'Wysłano %d e-maile.', 'Wysłano %d e-maili.'),\n\t\t),\n\t\t'pt-br' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'De',\n\t\t\t'Subject' => 'Assunto',\n\t\t\t'Send' => 'Enviar',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d email foi enviado.', '%d emails foram enviados.'),\n\t\t\t'Attachments' => 'Anexos',\n\t\t),\n\t\t'pt' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'De',\n\t\t\t'Subject' => 'Assunto',\n\t\t\t'Send' => 'Enviar',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),\n\t\t\t'Attachments' => 'Anexos',\n\t\t),\n\t\t'ro' => array(\n\t\t\t'E-mail' => 'Poșta electronică',\n\t\t\t'From' => 'De la',\n\t\t\t'Subject' => 'Pentru',\n\t\t\t'Send' => 'Trimite',\n\t\t\t'%d e-mail(s) have been sent.' => array('A fost trimis %d mail.', 'Au fost trimise %d mail-uri.'),\n\t\t\t'Attachments' => 'Fișiere atașate',\n\t\t),\n\t\t'ru' => array(\n\t\t\t'E-mail' => 'Эл. почта',\n\t\t\t'From' => 'От',\n\t\t\t'Subject' => 'Тема',\n\t\t\t'Send' => 'Послать',\n\t\t\t'%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'),\n\t\t\t'Attachments' => 'Прикреплённые файлы',\n\t\t),\n\t\t'sk' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Odosielateľ',\n\t\t\t'Subject' => 'Predmet',\n\t\t\t'Send' => 'Odoslať',\n\t\t\t'%d e-mail(s) have been sent.' => array('Bol odoslaný %d e-mail.', 'Boli odoslané %d e-maily.', 'Bolo odoslaných %d e-mailov.'),\n\t\t\t'Attachments' => 'Prílohy',\n\t\t),\n\t\t'sl' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Od',\n\t\t\t'Subject' => 'Zadeva',\n\t\t\t'Attachments' => 'Priponke',\n\t\t\t'Send' => 'Pošlji',\n\t\t\t'%d e-mail(s) have been sent.' => array('Poslan je %d e-mail.', 'Poslana sta %d e-maila.', 'Poslani so %d e-maili.', 'Poslanih je %d e-mailov.'),\n\t\t),\n\t\t'sr' => array(\n\t\t\t'E-mail' => 'Ел. пошта',\n\t\t\t'From' => 'Од',\n\t\t\t'Subject' => 'Наслов',\n\t\t\t'Attachments' => 'Прилози',\n\t\t\t'Send' => 'Пошаљи',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d порука ел. поште је послата.', '%d поруке ел. поште су послате.', '%d порука ел. поште је послато.'),\n\t\t),\n\t\t'sv' => array(\n\t\t\t'E-mail' => 'Email',\n\t\t\t'From' => 'Från',\n\t\t\t'Subject' => 'Ämne',\n\t\t\t'Attachments' => 'Bilagor',\n\t\t\t'Send' => 'Skicka',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d email har blivit skickat.', '%d email har blivit skickade.'),\n\t\t),\n\t\t'ta' => array(\n\t\t\t'E-mail' => 'மின்ன‌ஞ்ச‌ல்',\n\t\t\t'From' => 'அனுப்புனர்',\n\t\t\t'Subject' => 'பொருள்',\n\t\t\t'Send' => 'அனுப்பு',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d மின்ன‌ஞ்ச‌ல் அனுப்ப‌ப‌ட்ட‌து.', '%d மின்ன‌ஞ்ச‌ல்க‌ள் அனுப்ப‌ப்ப‌ட்ட‌ன‌.'),\n\t\t\t'Attachments' => 'இணைப்புக‌ள்',\n\t\t),\n\t\t'th' => array(\n\t\t\t'E-mail' => 'อีเมล์',\n\t\t\t'From' => 'จาก',\n\t\t\t'Subject' => 'หัวข้อ',\n\t\t\t'Send' => 'ส่ง',\n\t\t\t'%d e-mail(s) have been sent.' => 'มี %d อีเมล์ ถูกส่งออกแล้ว.',\n\t\t\t'Attachments' => 'ไฟล์แนบ',\n\t\t),\n\t\t'tr' => array(\n\t\t\t'E-mail' => 'E-posta',\n\t\t\t'From' => 'Gönderen',\n\t\t\t'Subject' => 'Konu',\n\t\t\t'Attachments' => 'Ekler',\n\t\t\t'Send' => 'Gönder',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-posta gönderildi.', '%d adet e-posta gönderildi.'),\n\t\t),\n\t\t'uk' => array(\n\t\t\t'E-mail' => 'E-mail',\n\t\t\t'From' => 'Від',\n\t\t\t'Subject' => 'Заголовок',\n\t\t\t'Attachments' => 'Додатки',\n\t\t\t'Send' => 'Надіслати',\n\t\t\t'%d e-mail(s) have been sent.' => array('Було надіслано %d повідомлення.', 'Було надіслано %d повідомлення.', 'Було надіслано %d повідомлень.'),\n\t\t),\n\t\t'uz' => array(\n\t\t\t'E-mail' => 'E-pochta',\n\t\t\t'From' => 'Kimdan',\n\t\t\t'Subject' => 'Mavzu',\n\t\t\t'Attachments' => 'Ilovalar',\n\t\t\t'Send' => 'Yuborish',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-pochta yuborildi.', '%d e-pochtalar yuborildi.'),\n\t\t),\n\t\t'vi' => array(\n\t\t\t'E-mail' => 'Địa chỉ email',\n\t\t\t'From' => 'Người gửi',\n\t\t\t'Subject' => 'Chủ đề',\n\t\t\t'Attachments' => 'Đính kèm',\n\t\t\t'Send' => 'Gửi',\n\t\t\t'%d e-mail(s) have been sent.' => '%d thư đã gửi.',\n\t\t),\n\t\t'zh-tw' => array(\n\t\t\t'E-mail' => '電子郵件',\n\t\t\t'From' => '來自',\n\t\t\t'Subject' => '主旨',\n\t\t\t'Attachments' => '附件',\n\t\t\t'Send' => '寄出',\n\t\t\t'%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。',\n\t\t),\n\t\t'zh' => array(\n\t\t\t'E-mail' => '电子邮件',\n\t\t\t'From' => '来自',\n\t\t\t'Subject' => '主题',\n\t\t\t'Attachments' => '附件',\n\t\t\t'Send' => '发送',\n\t\t\t'%d e-mail(s) have been sent.' => '%d 封邮件已发送。'),\n\t\t'hr' => array(\n\t\t\t'' => 'Slanje e-pošte odabranim recima',\n\t\t\t'E-mail' => 'E-pošta',\n\t\t\t'From' => 'Od',\n\t\t\t'Subject' => 'Predmet',\n\t\t\t'Attachments' => 'Privici',\n\t\t\t'Send' => 'Pošalji',\n\t\t\t'%d e-mail(s) have been sent.' => array('%d e-mail je poslan.', '%d e-maila su poslana.', '%d e-mailova je poslano.'),\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/slugify.php",
    "content": "<?php\n\n/** Prefill field containing \"_slug\" with slugified value of a previous field (JavaScript)\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerSlugify extends Adminer\\Plugin {\n\tprotected $from, $to;\n\n\t/**\n\t* @param string $from find these characters ...\n\t* @param string $to ... and replace them by these\n\t*/\n\tfunction __construct($from = 'áčďéěíňóřšťúůýž', $to = 'acdeeinorstuuyz') {\n\t\t$this->from = $from;\n\t\t$this->to = $to;\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tstatic $slugify;\n\t\tif (!$_GET[\"select\"] && !$_GET[\"where\"] && $table) {\n\t\t\tif ($slugify === null) {\n\t\t\t\t$slugify = array();\n\t\t\t\t$prev = null;\n\t\t\t\tforeach (Adminer\\fields($table) as $name => $val) {\n\t\t\t\t\tif ($prev && preg_match('~(^|_)slug(_|$)~', $name)) {\n\t\t\t\t\t\t$slugify[$prev] = $name;\n\t\t\t\t\t}\n\t\t\t\t\t$prev = $name;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$slug = $slugify[$field[\"field\"]];\n\t\t\tif ($slug !== null) {\n\t\t\t\treturn \"<input value='\" . Adminer\\h($value) . \"' data-maxlength='$field[length]' size='40'$attrs>\"\n\t\t\t\t\t. Adminer\\script(\"qsl('input').onchange = function () {\n\tconst find = '$this->from';\n\tconst repl = '$this->to';\n\tthis.form['fields[$slug]'].value = this.value.toLowerCase()\n\t\t.replace(new RegExp('[' + find + ']', 'g'), function (str) { return repl[find.indexOf(str)]; })\n\t\t.replace(/[^a-z0-9_]+/g, '-')\n\t\t.replace(/^-|-\\$/g, '')\n\t\t.substr(0, $field[length]);\n};\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Předvyplní políčko obsahující \"_slug\" URLizovanou hodnotou předchozího políčka (JavaScript)'),\n\t\t'de' => array('' => 'Feld, das \"_slug\" enthält, mit dem Slugified-Wert eines vorherigen Felds vorab füllen (JavaScript)'),\n\t\t'pl' => array('' => 'Wstępnie wypełnij pole zawierające \"_slug\" osłabioną wartością poprzedniego pola (JavaScript)'),\n\t\t'ro' => array('' => 'Precompletați câmpul care conține \"_slug\" cu valoarea slugificată a unui câmp anterior (JavaScript)'),\n\t\t'ja' => array('' => '列名に \"_slug\" を含む列を、前列の URL 化された値でプレフィル (JavaScript)'),\n\t\t'hr' => array('' => 'Popunjava polje koje sadrži \"_slug\" slugificiranom vrijednošću prethodnog polja (JavaScript)'),\n\t);\n}\n"
  },
  {
    "path": "plugins/sql-gemini.php",
    "content": "<?php\n\n/** AI prompt in SQL command generating the queries with Google Gemini\n* Beware that this sends your whole database structure (not data) to Google Gemini.\n* @link https://gemini.google.com/\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerSqlGemini extends Adminer\\Plugin {\n\tprivate $apiKey;\n\tprivate $model;\n\n\t/**\n\t* @param string $apiKey The default key is shared with all users and may run out of quota; get your own API key at: https://aistudio.google.com/apikey\n\t* @param string $model Available models: https://ai.google.dev/gemini-api/docs/models#available-models\n\t*/\n\tfunction __construct($apiKey = 'AIzaSyDWDbPjmvH9_hphsnY_yJGdue42qRMG3do', $model = \"gemini-2.0-flash\") {\n\t\t$this->apiKey = $apiKey;\n\t\t$this->model = $model;\n\t}\n\n\tfunction headers() {\n\t\tif (isset($_POST[\"gemini\"]) && !isset($_POST[\"query\"])) {\n\t\t\t$prompt = \"I have a \" . Adminer\\get_driver(Adminer\\DRIVER) . \" database with this structure:\\n\\n\";\n\t\t\tforeach (Adminer\\tables_list() as $table => $type) {\n\t\t\t\t$prompt .= Adminer\\create_sql($table, false, \"CREATE\") . \";\\n\\n\";\n\t\t\t}\n\t\t\t$prompt .= \"Prefer returning relevant columns including primary key.\\n\\n\";\n\t\t\t$prompt .= \"Give me this SQL query and nothing else:\\n\\n$_POST[gemini]\\n\\n\";\n\t\t\t//~ echo $prompt; exit;\n\t\t\t$context = stream_context_create(array(\"http\" => array(\n\t\t\t\t\"method\" => \"POST\",\n\t\t\t\t\"header\" => array(\"User-Agent: AdminerSqlGemini/\" . Adminer\\VERSION, \"Content-Type: application/json\"),\n\t\t\t\t\"content\" => '{\"contents\": [{\"parts\":[{\"text\": ' . json_encode($prompt) . '}]}]}',\n\t\t\t\t\"ignore_errors\" => true,\n\t\t\t)));\n\t\t\t$response = json_decode(file_get_contents(\"https://generativelanguage.googleapis.com/v1beta/models/$this->model:generateContent?key=$this->apiKey\", false, $context));\n\t\t\tif (isset($response->error)) {\n\t\t\t\techo \"-- \" . $response->error->message;\n\t\t\t} else {\n\t\t\t\t$text = $response->candidates[0]->content->parts[0]->text;\n\t\t\t\t$text2 = preg_replace('~(\\n|^)```sql\\n(.+)\\n```(\\n|$)~sU', \"*/\\n\\n\\\\2\\n\\n/*\", \"/*\\n$text\\n*/\", -1, $count);\n\t\t\t\techo ($count ? preg_replace('~/\\*\\s*\\*/\\n*~', '', $text2) : $text);\n\t\t\t}\n\t\t\texit;\n\t\t}\n\t}\n\n\tfunction sqlPrintAfter() {\n\t\techo \"<p><textarea name='gemini' rows='5' cols='50' placeholder='\" . $this->lang('Ask Gemini') . \"'>\" . Adminer\\h($_POST[\"gemini\"]) . \"</textarea>\\n\";\n\t\t?>\n<p><input type='button' value='Gemini'>\n<script <?php echo Adminer\\nonce(); ?>>\nconst geminiText = qsl('textarea');\nconst geminiButton = qsl('input');\n\nfunction setSqlareaValue(value) {\n\tconst sqlarea = qs('textarea.sqlarea');\n\tsqlarea.value = value;\n\tsqlarea.onchange && sqlarea.onchange();\n}\n\ngeminiButton.onclick = () => {\n\tsetSqlareaValue('-- <?php echo $this->lang('Just a sec...'); ?>');\n\tajax(\n\t\t'',\n\t\treq => setSqlareaValue(req.responseText),\n\t\t'gemini=' + encodeURIComponent(geminiText.value)\n\t);\n};\n\ngeminiText.onfocus = event => {\n\talterClass(findDefaultSubmit(geminiText), 'default');\n\talterClass(geminiButton, 'default', true);\n\tevent.stopImmediatePropagation();\n};\n\ngeminiText.onblur = () => {\n\talterClass(geminiButton, 'default');\n};\n\ngeminiText.onkeydown = event => {\n\tif (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10)) {\n\t\tgeminiButton.onclick();\n\t\tevent.stopPropagation();\n\t}\n};\n</script>\n<?php\n\t}\n\n\tfunction screenshot() {\n\t\treturn \"https://www.adminer.org/static/plugins/sql-gemini.gif\";\n\t}\n\n\t// use the phrases from https://gemini.google.com/\n\tprotected $translations = array(\n\t\t'cs' => array(\n\t\t\t'' => 'Generování SQL příkazů pomocí umělé inteligence Google Gemini',\n\t\t\t'Ask Gemini' => 'Zeptat se Gemini',\n\t\t\t'Just a sec...' => 'Chviličku...',\n\t\t),\n\t\t'pl' => array(\n\t\t\t'Ask Gemini' => 'Zapytaj Gemini',\n\t\t\t'Just a sec...' => 'Chwileczkę...',\n\t\t),\n\t\t'de' => array(\n\t\t\t'' => 'KI-Eingabeaufforderung im SQL-Befehl zur Erstellung der Abfragen mit Google Gemini',\n\t\t\t'Ask Gemini' => 'Gemini fragen',\n\t\t\t'Just a sec...' => 'Einen Moment...',\n\t\t),\n\t\t'ja' => array(\n\t\t\t'' => 'Google Gemini AI を用いて SQL 文を生成',\n\t\t\t'Ask Gemini' => 'Gemini に聞く',\n\t\t\t'Just a sec...' => 'しばらくお待ち下さい...',\n\t\t),\n\t\t'hr' => array(\n\t\t\t'' => 'Generiranje SQL naredbi pomoću Google Gemini AI',\n\t\t\t'Ask Gemini' => 'Pitaj Gemini',\n\t\t\t'Just a sec...' => 'Samo trenutak...',\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/sql-log.php",
    "content": "<?php\n\n/** Log all queries to SQL file\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerSqlLog extends Adminer\\Plugin {\n\tprotected $filename;\n\n\t/**\n\t* @param string $filename defaults to \"$database.sql\"\n\t*/\n\tfunction __construct($filename = \"\") {\n\t\t$this->filename = $filename;\n\t}\n\n\tfunction messageQuery($query, $time, $failed = false) {\n\t\t$this->log($query);\n\t}\n\n\tfunction sqlCommandQuery($query) {\n\t\t$this->log($query);\n\t}\n\n\tprivate function log($query) {\n\t\tif ($this->filename == \"\") {\n\t\t\t$this->filename = Adminer\\adminer()->database() . ($_GET[\"ns\"] != \"\" ? \".$_GET[ns]\" : \"\") . \".sql\"; // no database goes to \".sql\" to avoid collisions\n\t\t}\n\t\t$fp = fopen($this->filename, \"a\");\n\t\tflock($fp, LOCK_EX);\n\t\tfwrite($fp, $query);\n\t\tfwrite($fp, \"\\n\\n\");\n\t\tflock($fp, LOCK_UN);\n\t\tfclose($fp);\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zaznamenává všechny příkazy do souboru SQL'),\n\t\t'de' => array('' => 'Protokollieren Sie alle Abfragen in einer SQL-Datei'),\n\t\t'pl' => array('' => 'Rejestruj wszystkie zapytania do pliku SQL'),\n\t\t'ro' => array('' => 'Logați toate interogările în fișierul SQL'),\n\t\t'ja' => array('' => '全クエリを SQL ファイルに記録'),\n\t\t'hr' => array('' => 'Bilježi sve upite u SQL datoteku'),\n\t);\n}\n"
  },
  {
    "path": "plugins/table-indexes-structure.php",
    "content": "<?php\n\n/** Expanded table indexes structure output\n* @link https://www.adminer.org/plugins/#use\n* @author Matthew Gamble, https://www.matthewgamble.net/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerTableIndexesStructure extends Adminer\\Plugin {\n\n\tfunction tableIndexesPrint($indexes, $tableStatus): bool {\n\t\techo \"<table>\\n\";\n\t\techo \"<thead><tr><th>\" . Adminer\\lang('Name') . \"<th>\" . Adminer\\lang('Type') . \"<th>\" . Adminer\\lang('Algorithm') . \"<th>\" . Adminer\\lang('Columns') . \"</thead>\\n\";\n\t\tforeach ($indexes as $name => $index) {\n\t\t\techo \"<tr><th>\" . Adminer\\h($name) . \"<td>$index[type]<td>$index[algorithm]\";\n\t\t\tksort($index[\"columns\"]); // enforce correct columns order\n\t\t\t$print = array();\n\t\t\tforeach ($index[\"columns\"] as $key => $val) {\n\t\t\t\t$print[] = \"<i>\" . Adminer\\h($val) . \"</i>\"\n\t\t\t\t\t. ($index[\"lengths\"][$key] ? \"(\" . $index[\"lengths\"][$key] . \")\" : \"\")\n\t\t\t\t\t. ($index[\"descs\"][$key] ? \" DESC\" : \"\")\n\t\t\t\t;\n\t\t\t}\n\t\t\techo \"<td>\" . implode(\", \", $print) . \"\\n\";\n\t\t}\n\t\techo \"</table>\\n\";\n\t\treturn true;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Rozšířené informace o indexech'),\n\t\t'de' => array('' => 'Erweiterte Ausgabe der Tabellenindize'),\n\t\t'pl' => array('' => 'Rozszerzona tabela wyników struktury indeksów'),\n\t\t'ro' => array('' => 'Ieșirea expandată a structurii indecsilor tabelului'),\n\t\t'ja' => array('' => 'テーブルのインデックス構造を拡張表示'),\n\t\t'hr' => array('' => 'Prošireni prikaz indeksa tablice'),\n\t);\n}\n"
  },
  {
    "path": "plugins/table-structure.php",
    "content": "<?php\n\n/** Expanded table structure output\n* @link https://www.adminer.org/plugins/#use\n* @author Matthew Gamble, https://www.matthewgamble.net/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerTableStructure extends Adminer\\Plugin {\n\n\t/** Print table structure in tabular format\n\t* @param Field[] $fields data about individual fields\n\t*/\n\tfunction tableStructurePrint(array $fields, $tableStatus = null): bool {\n\t\techo \"<div class='scrollable'>\\n\";\n\t\techo \"<table class='nowrap odds'>\\n\";\n\t\techo \"<thead><tr>\"\n\t\t\t. \"<th>\" . Adminer\\lang('Column')\n\t\t\t. \"<th>\" . Adminer\\lang('Type')\n\t\t\t. \"<th>\" . Adminer\\lang('Collation')\n\t\t\t. \"<th>\" . Adminer\\lang('Nullable')\n\t\t\t. \"<th>\" . Adminer\\lang('Default')\n\t\t\t. (Adminer\\support(\"comment\") ? \"<th>\" . Adminer\\lang('Comment') : \"\")\n\t\t\t. \"</thead>\\n\"\n\t\t;\n\t\tforeach ($fields as $field) {\n\t\t\techo \"<tr><th>\" . Adminer\\h($field[\"field\"]) . ($field[\"primary\"] ? \" (PRIMARY)\" : \"\");\n\t\t\techo \"<td><span>\" . Adminer\\h($field[\"full_type\"]) . \"</span>\";\n\t\t\techo ($field[\"auto_increment\"] ? \" <i>\" . Adminer\\lang('Auto Increment') . \"</i>\" : \"\");\n\t\t\techo \"<td>\" . ($field[\"collation\"] ? \" <i>\" . Adminer\\h($field[\"collation\"]) . \"</i>\" : \"\");\n\t\t\techo \"<td>\" . ($field[\"null\"] ? Adminer\\lang('Yes') : Adminer\\lang('No'));\n\t\t\techo \"<td>\" . Adminer\\h($field[\"default\"]);\n\t\t\techo (Adminer\\support(\"comment\") ? \"<td>\" . Adminer\\h($field[\"comment\"]) : \"\");\n\t\t\techo \"\\n\";\n\t\t}\n\t\techo \"</table>\\n\";\n\t\techo \"</div>\\n\";\n\t\treturn true;\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Rozšířené informace o tabulkách'),\n\t\t'de' => array('' => 'Erweiterte Ausgabe der Tabellenstruktur'),\n\t\t'pl' => array('' => 'Rozszerzone wyjście struktury tabeli'),\n\t\t'ro' => array('' => 'Ieșirea expandată a structurii tabelei'),\n\t\t'ja' => array('' => 'テーブル構造を拡張表示'),\n\t\t'hr' => array('' => 'Prošireni prikaz strukture tablice'),\n\t);\n}\n"
  },
  {
    "path": "plugins/tables-filter.php",
    "content": "<?php\n\n/** Filter names in tables list\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerTablesFilter extends Adminer\\Plugin {\n\tfunction tablesPrint($tables) {\n\t\t?>\n<script<?php echo Adminer\\nonce(); ?>>\nlet tablesFilterTimeout = null;\nlet tablesFilterValue = '';\n\nfunction tablesFilter() {\n\tconst value = qs('#filter-field').value.toLowerCase();\n\tif (value == tablesFilterValue) {\n\t\treturn;\n\t}\n\ttablesFilterValue = value;\n\tlet reg;\n\tif (value != '') {\n\t\treg = (value + '').replace(/([\\\\\\.\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g, '\\\\$1');\n\t\treg = new RegExp('('+ reg + ')', 'gi');\n\t}\n\tif (sessionStorage) {\n\t\tsessionStorage.setItem('adminer_tables_filter', value);\n\t}\n\tfor (const table of qsa('li', qs('#tables'))) {\n\t\tlet a = null;\n\t\tlet text = table.getAttribute('data-table-name');\n\t\tif (text == null) {\n\t\t\ta = qsa('a', table)[1];\n\t\t\ttext = a.innerHTML.trim();\n\n\t\t\ttable.setAttribute('data-table-name', text);\n\t\t\ta.setAttribute('data-link', 'main');\n\t\t} else {\n\t\t\ta = qs('a[data-link=\"main\"]', table);\n\t\t}\n\t\tif (value == '') {\n\t\t\ttable.className = '';\n\t\t\ta.innerHTML = text;\n\t\t} else {\n\t\t\ttable.className = (text.toLowerCase().indexOf(value) == -1 ? 'hidden' : '');\n\t\t\ta.innerHTML = text.replace(reg, '<strong>$1</strong>');\n\t\t}\n\t}\n}\n\nfunction tablesFilterInput() {\n\twindow.clearTimeout(tablesFilterTimeout);\n\ttablesFilterTimeout = window.setTimeout(tablesFilter, 200);\n}\n\nsessionStorage && document.addEventListener('DOMContentLoaded', () => {\n\tlet db = qs('#dbs').querySelector('select');\n\tdb = db.options[db.selectedIndex].text;\n\tif (db == sessionStorage.getItem('adminer_tables_filter_db') && sessionStorage.getItem('adminer_tables_filter')){\n\t\tqs('#filter-field').value = sessionStorage.getItem('adminer_tables_filter');\n\t\ttablesFilter();\n\t}\n\tsessionStorage.setItem('adminer_tables_filter_db', db);\n});\n</script>\n<p class=\"jsonly\"><?php echo $this->lang('Filter'); ?>: <input id=\"filter-field\" autocomplete=\"off\" type=\"search\"><?php echo Adminer\\script(\"qs('#filter-field').oninput = tablesFilterInput;\"); ?>\n<?php\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array(\n\t\t\t'' => 'Filtruje názvy v seznamu tabulek',\n\t\t\t'Filter' => 'Filtr',\n\t\t),\n\t\t'de' => array(\n\t\t\t'' => 'Filtern Sie Namen in der Tabellenliste',\n\t\t),\n\t\t'pl' => array(\n\t\t\t'' => 'Filtruj nazwy na liście tabel',\n\t\t),\n\t\t'ro' => array(\n\t\t\t'' => 'Nume de filtre în lista de tabele',\n\t\t),\n\t\t'ja' => array(\n\t\t\t'' => 'テーブル一覧をテーブル名でフィルタリング',\n\t\t),\n\t\t'hr' => array(\n\t\t\t'' => 'Filtriranje tablice prema imenu',\n\t\t\t'Filter' => 'Filtar',\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/timeout.php",
    "content": "<?php\n\n/** Specify timeout for running every query\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerTimeout extends Adminer\\Plugin {\n\tprivate $seconds;\n\n\t/**\n\t* @param int $seconds\n\t*/\n\tfunction __construct($seconds = 5) {\n\t\t$this->seconds = $seconds;\n\t}\n\n\tfunction afterConnect() {\n\t\t$seconds = Adminer\\get_setting(\"timeout\", \"adminer_config\", $this->seconds);\n\t\tif ($seconds != '') {\n\t\t\t$ms = $seconds * 1000;\n\t\t\t$conn = Adminer\\connection();\n\t\t\tswitch (Adminer\\JUSH) {\n\t\t\t\tcase 'sql':\n\t\t\t\t\t$conn->query(\"SET max_execution_time = $ms\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'pgsql':\n\t\t\t\t\t$conn->query(\"SET statement_timeout = $ms\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'mssql':\n\t\t\t\t\t$conn->query(\"SET LOCK_TIMEOUT $ms\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (method_exists($conn, 'timeout')) {\n\t\t\t\t\t\t$conn->timeout($ms);\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction config() {\n\t\t$seconds = Adminer\\get_setting(\"timeout\", \"adminer_config\", $this->seconds);\n\t\treturn array($this->lang('Queries timeout') => '<input type=\"number\" name=\"config[timeout]\" min=\"0\" value=\"' . Adminer\\h($seconds) . '\" class=\"size\"> ' . $this->lang('seconds'));\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array(\n\t\t\t'' => 'Nastaví timeout pro spouštění každého dotazu',\n\t\t\t'Queries timeout' => 'Timeout dotazů',\n\t\t\t'seconds' => 'sekund',\n\t\t),\n\t\t'hr' => array(\n\t\t\t'' => 'Postavljanje vremenskog ograničenja upita',\n\t\t\t'Queries timeout' => 'Vremensko ograničenje upita',\n\t\t\t'seconds' => 'sekundi',\n\t\t),\n\t);\n}\n"
  },
  {
    "path": "plugins/tinymce.php",
    "content": "<?php\n\n/** Edit all fields containing \"_html\" by HTML editor TinyMCE and display the HTML in select\n* @link https://www.adminer.org/plugins/#use\n* @uses TinyMCE, http://tinymce.moxiecode.com/\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerTinymce extends Adminer\\Plugin {\n\tprotected $path;\n\n\tfunction __construct($path = \"tiny_mce/tiny_mce.js\") {\n\t\t$this->path = $path;\n\t}\n\n\tfunction head($dark = null) {\n\t\t$lang = Adminer\\LANG;\n\t\t$lang = ($lang == \"zh\" ? \"zh-cn\" : ($lang == \"zh-tw\" ? \"zh\" : $lang));\n\t\tif (!file_exists(dirname($this->path) . \"/langs/$lang.js\")) {\n\t\t\t$lang = \"en\";\n\t\t}\n\t\techo Adminer\\script_src($this->path);\n\t\t?>\n<script<?php echo Adminer\\nonce(); ?>>\ntinyMCE.init({\n\tentity_encoding: 'raw',\n\tlanguage: '<?php echo $lang; ?>'\n}); // learn how to customize here: https://www.tinymce.com/docs/configure/\n</script>\n<?php\n\t}\n\n\tfunction selectVal(&$val, $link, $field, $original) {\n\t\tif (preg_match(\"~_html~\", $field[\"field\"]) && $val != '') {\n\t\t\t$ellipsis = \"<i>…</i>\";\n\t\t\t$length = strlen($ellipsis);\n\t\t\t$shortened = (substr($val, -$length) == $ellipsis);\n\t\t\tif ($shortened) {\n\t\t\t\t$val = substr($val, 0, -$length);\n\t\t\t}\n\t\t\t//! shorten with regard to HTML tags - http://php.vrana.cz/zkraceni-textu-s-xhtml-znackami.php\n\t\t\t$val = preg_replace('~<[^>]*$~', '', html_entity_decode($val, ENT_QUOTES)); // remove ending incomplete tag (text can be shortened)\n\t\t\tif ($shortened) {\n\t\t\t\t$val .= $ellipsis;\n\t\t\t}\n\t\t\tif (class_exists('DOMDocument')) { // close all opened tags\n\t\t\t\t$dom = new DOMDocument;\n\t\t\t\tif (@$dom->loadHTML(\"<meta http-equiv='Content-Type' content='text/html; charset=utf-8'></head>$val\")) { // @ - $val can contain errors\n\t\t\t\t\t$val = preg_replace('~.*<body[^>]*>(.*)</body>.*~is', '\\1', $dom->saveHTML());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction editInput($table, $field, $attrs, $value) {\n\t\tif (preg_match(\"~text~\", $field[\"type\"]) && preg_match(\"~_html~\", $field[\"field\"])) {\n\t\t\treturn \"<textarea$attrs id='fields-\" . Adminer\\h($field[\"field\"]) . \"' rows='12' cols='50'>\" . Adminer\\h($value) . \"</textarea>\" . Adminer\\script(\"\ntinyMCE.remove(tinyMCE.get('fields-\" . Adminer\\js_escape($field[\"field\"]) . \"') || { });\ntinyMCE.EditorManager.execCommand('mceAddControl', true, 'fields-\" . Adminer\\js_escape($field[\"field\"]) . \"');\nqs('#form').onsubmit = () => {\n\ttinyMCE.each(tinyMCE.editors, ed => {\n\t\ted.remove();\n\t});\n};\n\");\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Upravuje všechna políčka obsahující \"_html\" pomocí HTML editoru TinyMCE a zobrazuje výsledné HTML ve výpisu'),\n\t\t'de' => array('' => 'Bearbeiten Sie alle Felder, die \"_html\" enthalten, mit dem HTML-Editor TinyMCE und zeigen Sie den HTML-Code in Select an'),\n\t\t'pl' => array('' => 'Edytuj wszystkie pola zawierające \"_html\" za pomocą edytora HTML TinyMCE i wyświetl kod HTML w wybranych'),\n\t\t'ro' => array('' => 'Editați toate câmpurile care conțin \"_html\" cu ajutorul editorului HTML TinyMCE și afișați HTML-ul în select'),\n\t\t'ja' => array('' => '列名が \"_html\" を含む列を TinyMCE の HTML エディタで編集し、編集結果の HTML コードを \"選択\" 画面に表示'),\n\t\t'hr' => array('' => 'Uređuje sva polja koja sadrže \"_html\" pomoću HTML editora TinyMCE i prikazuje HTML u ispisu'),\n\t);\n}\n"
  },
  {
    "path": "plugins/translation.php",
    "content": "<?php\n/* Requires this table:\nCREATE TABLE translation (\n\tid int NOT NULL AUTO_INCREMENT, -- optional\n\tlanguage_id varchar(5) NOT NULL,\n\tidf text NOT NULL COLLATE utf8_bin,\n\ttranslation text NOT NULL,\n\tUNIQUE (language_id, idf(100)),\n\tPRIMARY KEY (id)\n);\n*/\n\n/** Translate all table and field comments, enum and set values from the translation table (inserts new translations)\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerTranslation extends Adminer\\Plugin {\n\n\tprivate function translate($idf) {\n\t\tstatic $translations, $lang;\n\t\tif ($lang === null) {\n\t\t\t$lang = Adminer\\LANG;\n\t\t}\n\t\tif ($idf == \"\" || $lang == \"en\") {\n\t\t\treturn $idf;\n\t\t}\n\t\tif ($translations === null) {\n\t\t\t$translations = Adminer\\get_key_vals(\"SELECT idf, translation FROM translation WHERE language_id = \" . Adminer\\q($lang));\n\t\t}\n\t\t$return = &$translations[$idf];\n\t\tif ($return === null) {\n\t\t\t$return = $idf;\n\t\t\tAdminer\\connection()->query(\"INSERT INTO translation (language_id, idf, translation) VALUES (\" . Adminer\\q($lang) . \", \" . Adminer\\q($idf) . \", \" . Adminer\\q($idf) . \")\");\n\t\t}\n\t\treturn $return;\n\t}\n\n\tfunction tableName(&$tableStatus) {\n\t\t$tableStatus[\"Comment\"] = $this->translate($tableStatus[\"Comment\"]);\n\t}\n\n\tfunction fieldName(&$field, $order = 0) {\n\t\t$field[\"comment\"] = $this->translate($field[\"comment\"]);\n\t}\n\n\tfunction editVal(&$val, $field) {\n\t\tif ($field[\"type\"] == \"enum\") {\n\t\t\t$val = $this->translate($val);\n\t\t}\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Přeloží všechny komentáře tabulek a sloupců, hodnoty políček enum a set pomocí tabulky \"translation\" (automaticky vkládá nové překlady)'),\n\t\t'de' => array('' => 'Übersetzen Sie alle Tabellen- und Feldkommentare, enum- und set-Werte aus der \"translation\"-Tabelle (fügt automatisch neue Übersetzungen ein)'),\n\t\t'pl' => array('' => 'Przetłumacz wszystkie komentarze do tabeli i pól, wartości enum i set z tabeli \"translation\" (automatycznie wstawia nowe tłumaczenia)'),\n\t\t'ro' => array('' => 'Traduceți toate comentariile tabelelor și câmpurilor, valorile enum și set din tabelul \"translation\" (inserează automat noi traduceri)'),\n\t\t'ja' => array('' => 'テーブル \"translation\" を用いてすべてのテーブルや列のコメント、列挙型、セット値を翻訳 (自動的に翻訳文で更新)'),\n\t\t'hr' => array('' => 'Prevodi sve komentare tablica i polja, vrijednosti enum i set iz tablice \"translation\" (automatski ubacuje nove prijevode)'),\n\t);\n}\n"
  },
  {
    "path": "plugins/version-github.php",
    "content": "<?php\n\n/** Verify new versions from GitHub\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerVersionGithub extends Adminer\\Plugin {\n\n\tfunction head($dark = null) {\n\t\t?>\n<script <?php echo Adminer\\nonce(); ?>>\nverifyVersion = current => {\n\t// dummy value to prevent repeated verifications after AJAX failure\n\tcookie('adminer_version=0', 1);\n\tajax('https://api.github.com/repos/vrana/adminer/releases/latest', request => {\n\t\tconst response = JSON.parse(request.responseText);\n\t\tconst version = response.tag_name.replace(/^v/, '');\n\t\t// we don't display the version here because we don't have version_compare(); design.inc.php will display it on the next load\n\t\tcookie('adminer_version=' + version, 1);\n\t}, null, null);\n};\n</script>\n<?php\n\t}\n\n\tfunction csp(&$csp) {\n\t\t$csp[0][\"connect-src\"] .= \" https://api.github.com/repos/vrana/adminer/releases/latest\";\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Kontrola nových verzí z GitHubu'),\n\t\t'de' => array('' => 'Neue Versionen von GitHub verifizieren'),\n\t\t'ja' => array('' => 'GitHub の新版を管理'),\n\t\t'pl' => array('' => 'Weryfikuj nowe wersje z GitHuba'),\n\t\t'hr' => array('' => 'Provjera novih verzija s GitHuba'),\n\t);\n}\n"
  },
  {
    "path": "plugins/version-noverify.php",
    "content": "<?php\n\n/** Disable version checker\n* @link https://www.adminer.org/plugins/#use\n* @author Jakub Vrana, https://www.vrana.cz/\n* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\n* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)\n*/\nclass AdminerVersionNoverify extends Adminer\\Plugin {\n\n\tfunction head($dark = null) {\n\t\techo Adminer\\script(\"verifyVersion = () => { };\");\n\t}\n\n\tprotected $translations = array(\n\t\t'cs' => array('' => 'Zakáže kontrolu nových verzí'),\n\t\t'de' => array('' => 'Deaktivieren Sie die Versionsprüfung'),\n\t\t'pl' => array('' => 'Wyłącz sprawdzanie wersji'),\n\t\t'ro' => array('' => 'Dezactivați verificatorul de versiuni'),\n\t\t'ja' => array('' => 'バージョンチェックを無効化'),\n\t\t'hr' => array('' => 'Onemogućuje provjeru novih verzija'),\n\t);\n}\n"
  },
  {
    "path": "tests/add-test.php",
    "content": "#!/usr/bin/env php\n<?php\nif ($argc != 2) {\n\techo \"Usage: cat | php add-test.php 'before'\\n\";\n\techo \"Purpose: Add the same test to all suites. 'before' is a regex for the following full test name (e.g. 'Clone').\\n\";\n\texit(1);\n}\n$before = $argv[1];\n\necho \"Paste test created for MySQL:\\n\";\n$input = stream_get_contents(STDIN);\n\n$urls = array( // this works for tests inside db, not e.g. for server overview\n\t\"mysql\" => \"/adminer/?username=ODBC&db=adminer_test\",\n\t\"mariadb\" => \"/adminer/?server=localhost:3307&username=ODBC&db=adminer_test\",\n\t\"pgsql\" => \"/adminer/?pgsql=&username=ODBC&db=adminer_test&ns=public\",\n\t\"cockroachdb\" => \"/adminer/?pgsql=localhost:26257&username=ODBC&db=adminer_test&ns=public\",\n\t\"mssql\" => \"/adminer/?mssql=&username=ODBC&db=adminer_test&ns=dbo\",\n\t\"sqlite\" => \"/adminer/sqlite.php?sqlite=&username=ODBC&db=adminer_test.sqlite\",\n);\n\nforeach ($urls as $driver => $url) {\n\t$filename = __DIR__ . \"/$driver.html\";\n\t$file = file_get_contents($filename);\n\t$test = str_replace(htmlspecialchars($urls['mysql']), htmlspecialchars($urls[$driver]), $input);\n\t$file = preg_replace(\"(<table.*\\n.*>($before)<)\", $test . '\\0', $file);\n\tfile_put_contents($filename, $file);\n}\n\ninclude __DIR__ . \"/generate-pdo.php\";\n"
  },
  {
    "path": "tests/cockroachdb.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon CockroachDB</title>\n</head>\n<body>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>select</td><td>name=auth[driver]</td><td>label=PostgreSQL</td></tr>\n<tr><td>type</td><td>name=auth[server]</td><td>localhost:26257</td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CockroachDB</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=integer</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>uncheck</td><td>name=comments</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>Comment</td><td>Interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create index</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=PRIMARY</td></tr>\n<tr><td>select</td><td>indexes[2][columns][1]</td><td>label=name</td></tr>\n<tr><td>verifyValue</td><td>name=indexes[2][name]</td><td>interprets_name</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>multiple primary keys for table \"interprets\" are not allowed</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=INDEX</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table 2</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>interpret</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=integer</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>title</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>check</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>fields[1.11][comment]</td><td>Album</td></tr>\n<tr><td>type</td><td>Comment</td><td>Albums</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Foreign key</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Add foreign key</td><td></td></tr>\n<tr><td>selectAndWait</td><td>table</td><td>label=interprets</td></tr>\n<tr><td>select</td><td>source[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Foreign key has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[2]</td><td></td></tr>\n<tr><td>type</td><td>fields[3][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[3][type]</td><td>label=integer</td></tr>\n<tr><td>type</td><td>fields[3][length]</td><td></td></tr>\n<tr><td>uncheck</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>type</td><td>name=fields[3][default]</td><td>0</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Check constraints</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Create check</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>albums_interpret_check</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"clause\"]').value = 'interpret > 0'</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>0</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>failed to satisfy CHECK constraint</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;check=albums&amp;name=albums_interpret_check</td><td></td></tr>\n<tr><td>verifyTextPresent<td>((interpret > 0:::INT8))</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop albums_interpret_check?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>View has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Materialized view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>materialized_view</td></tr>\n<tr><td>click</td><td>materialized</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Materialized view</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Invalid table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;create=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Unable to select the table:</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Schema</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;schema=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Permanent link</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[id]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>has been inserted.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=albums</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Clone</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>check[]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>clone</td><td></td></tr>\n<tr><td>type</td><td>fields[id]</td><td>2</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black and White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 2 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=title</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Dangerous</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Enum</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>link=Create type</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>alive</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"as\"]').value = \"AS ENUM('alive', 'deceased')\"</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>click</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>name=add[3]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[4][field]</td><td>alive</td></tr>\n<tr><td>select</td><td>name=fields[4][type]</td><td>label=alive</td></tr>\n<tr><td>click</td><td>name=fields[4][null]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>click</td><td>link=alive</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>'alive', 'deceased'</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop alive?</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Drop']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>cannot drop type</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=interprets&amp;where%5Bid%5D=1</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='val-deceased']</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>deceased</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Explain</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Edit</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>click</td><td>link=Explain</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>LIMITED SCAN</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Reference</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=1</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Search in tables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>type</td><td>name=query</td><td>Jackson</td></tr>\n<tr><td>clickAndWait</td><td>name=search</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=albums&amp;where%5Bid%5D=2</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black or White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>waitForChecked</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Truncate</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>all</td><td></td></tr>\n<tr><td>waitForChecked</td><td>all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No rows.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Export</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;dump=</td><td></td></tr>\n<tr><td>click</td><td>output</td><td></td></tr>\n<tr><td>click</td><td>format</td><td></td></tr>\n<tr><td>select</td><td>table_style</td><td>label=DROP+CREATE</td></tr>\n<tr><td>select</td><td>data_style</td><td>label=INSERT</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Export']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TABLE \"public\".\"interprets\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INSERT INTO \"interprets\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>VIEW \"albums_interprets\"</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Procedures</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;procedure=</td><td></td></tr>\n<tr><td>clickAndWait</td><td>add[0]</td><td></td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>interpret_name</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1][length]</td><td>50</td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>album_title</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"definition\"]').value = 'SELECT id FROM interprets;'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>insert_album</td></tr>\n<tr><td>select</td><td>name=language</td><td>label=sql</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=insert_album</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret_name]</td><td>Michael Jackson</td></tr>\n<tr><td>type</td><td>fields[album_title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Call']</td><td></td></tr>\n<tr><td>assertTextPresent</td><td>Routine has been called,</td><td></td></tr>\n<!-- https://github.com/cockroachdb/cockroach/issues/142886\n<tr><td>clickAndWait</td><td>link=public</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop insert_album?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been dropped.</td><td></td></tr>\n-->\n<tr><td>open</td><td>/adminer/?pgsql=localhost%3A26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;sql=DROP+PROCEDURE+%22insert_album%22</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Generated columns</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>generated</td></tr>\n<tr><td>type</td><td>name=fields[1][field]</td><td>normal</td></tr>\n<tr><td>type</td><td>name=fields[1.1][field]</td><td>stored</td></tr>\n<tr><td>select</td><td>name=fields[1.1][generated]</td><td>label=STORED</td></tr>\n<tr><td>type</td><td>name=fields[1.1][default]</td><td>normal + 200</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>normal + 200</td><td></td></tr>\n<tr><td>click</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>name=indexes[2][columns][1]</td><td>label=stored</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>click</td><td>link=New item</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[stored]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[normal]</td><td>20</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>220</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Scheme</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>link=Alter schema</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>public</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Schema: public</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Drop</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>id=check-all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Partitioning</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>range</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>select</td><td>name=partition_by</td><td>label=RANGE</td></tr>\n<tr><td>type</td><td>name=partition</td><td>id</td></tr>\n<tr><td>type</td><td>name=partition_names[]</td><td>old</td></tr>\n<tr><td>type</td><td>name=partition_values[]</td><td>10</td></tr>\n<tr><td>type</td><td>xpath=//table[@id='partition-table']/tr/td/input</td><td>new</td></tr>\n<tr><td>type</td><td>xpath=//table[@id='partition-table']/tr/td[2]/input</td><td>MAXVALUE</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION BY RANGE(id)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION \"old\" VALUES FROM (MINVALUE) TO (10)</td><td></td></tr>\n<tr><td>click</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>list</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>select</td><td>name=partition_by</td><td>label=LIST</td></tr>\n<tr><td>type</td><td>name=partition</td><td>id</td></tr>\n<tr><td>type</td><td>name=partition_names[]</td><td>odd</td></tr>\n<tr><td>type</td><td>name=partition_values[]</td><td>1,3,5</td></tr>\n<tr><td>click</td><td>xpath=//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION BY LIST(id)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION \"odd\" VALUES IN (1,3,5)</td><td></td></tr>\n<tr><td>click</td><td>link=public</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='tables[]' and @value='list']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='tables[]' and @value='range']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Variables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;variables=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>crdb_version</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">SQL command</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC&amp;sql=SELECT+122%2B1</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>123</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Logout</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=localhost:26257&amp;username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logout successful.</td><td></td></tr>\n<tr><td>open</td><td>/coverage.php</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/elastic.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon Elasticsearch</title>\n</head>\n<body>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC12</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>JSON</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=text</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[2]</td><td></td></tr>\n<tr><td>type</td><td>fields[3][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[3][type]</td><td>label=integer</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic&amp;select=interprets</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=name</td></tr>\n<tr><td>select</td><td>name=where[0][op]</td><td>label=should</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Jackson</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=albums</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic&amp;select=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=edit</td><td></td></tr>\n<tr><td>type</td><td>fields[albums]</td><td>1</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic&amp;select=interprets</td><td></td></tr>\n<tr><td>click</td><td>name=check[]</td><td></td></tr>\n<tr><td>waitForChecked</td><td>name=check[]</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Drop</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC&amp;db=elastic&amp;create=interprets</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop interprets?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Logout</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/elastic.php?elastic=https%3A%2F%2Flocalhost:9200&amp;username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logout successful.</td><td></td></tr>\n<tr><td>open</td><td>/coverage.php</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/generate-pdo.php",
    "content": "#!/usr/bin/env php\n<?php\n// Katalon Recorder has global variables: https://docs.katalon.com/katalon-platform/plugins-and-add-ons/katalon-recorder-extension/get-your-job-done/automate-scenarios/global-variables-in-katalon-recorder\n// It's possible to use them in URL in Katalon Studio but apparently not in Recorder: https://forum.katalon.com/t/45673/2\n\nchdir(__DIR__);\nforeach (glob(\"*.html\") as $filename) {\n\tif (!preg_match('~^pdo-|elastic|screenshots~', $filename)) {\n\t\t$file = file_get_contents($filename);\n\t\t$file = preg_replace_callback('~/((adminer|editor)/[^?<]*)(\\??)~', function ($match) {\n\t\t\treturn \"/$match[1]?ext=pdo\" . ($match[3] ? \"&amp;\" : \"\");\n\t\t}, $file);\n\t\t$file = str_replace(\"<tr><td>open</td><td>/coverage.php?coverage=0</td><td></td></tr>\\n\", \"\", $file);\n\t\t$file = str_replace(\"<tr><td>click</td><td>link=Explain</td><td></td></tr>\\n<tr><td>verifyTextPresent</td><td>Clustered Index Scan</td><td></td></tr>\\n\", \"\", $file); // MS SQL PDO doesn't support EXPLAIN\n\t\tpreg_match_all(\"~//input\\[@value='Login']~\", $file, $matches, PREG_OFFSET_CAPTURE);\n\t\tlist($val, $offset) = $matches[0][count($matches[0]) > 1 ? 1 : 0]; // MySQL log-ins three times, we check the second one\n\t\t$file = substr_replace($file, \"</td><td></td></tr>\\n<tr><td>verifyTextPresent</td><td>PDO_\", $offset + strlen($val), 0);\n\t\tfile_put_contents(\"pdo-$filename\", $file);\n\t}\n}\n"
  },
  {
    "path": "tests/mariadb.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon MariaDB</title>\n</head>\n<body>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[server]</td><td>localhost:3307</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>MariaDB</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=SQL command</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;sql=DROP+DATABASE+IF+EXISTS+adminer_test</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Query executed OK</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create database</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create database</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>adminer_test</td></tr>\n<tr><td>select</td><td>collation</td><td>label=utf8mb4_general_ci</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Database has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>select</td><td>Engine</td><td>label=InnoDB</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=int</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>uncheck</td><td>name=comments</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>Comment</td><td>Interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create index</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=PRIMARY</td></tr>\n<tr><td>select</td><td>indexes[2][columns][1]</td><td>label=name</td></tr>\n<tr><td>verifyValue</td><td>name=indexes[2][name]</td><td>name</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Multiple primary key defined</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=INDEX</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Partitioning</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>select</td><td>partition_by</td><td>label=HASH</td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>type</td><td>partition</td><td>id</td></tr>\n<tr><td>type</td><td>partitions</td><td>2</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>select</td><td>partition_by</td><td>label=RANGE</td></tr>\n<tr><td>type</td><td>partition_values[]</td><td>10</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>select</td><td>partition_by</td><td>label=</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table 2</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=int</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>interpret</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=int</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>title</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>check</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>fields[1.11][comment]</td><td>Album</td></tr>\n<tr><td>type</td><td>Comment</td><td>Albums</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Foreign key</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Add foreign key</td><td></td></tr>\n<tr><td>selectAndWait</td><td>table</td><td>label=interprets</td></tr>\n<tr><td>select</td><td>source[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Foreign key has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[2]</td><td></td></tr>\n<tr><td>type</td><td>fields[2.1][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[2.1][type]</td><td>label=int</td></tr>\n<tr><td>type</td><td>fields[2.1][length]</td><td></td></tr>\n<tr><td>uncheck</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>type</td><td>name=fields[2.1][default]</td><td>0</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create trigger</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;trigger=albums</td><td></td></tr>\n<tr><td>select</td><td>Timing</td><td>label=AFTER</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"Statement\"]').value = 'UPDATE interprets SET albums = albums + 1 WHERE id = NEW.interpret'</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Trigger has been created.</td><td></td></tr></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Check constraints</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Create check</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>albums_interpret_check</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"clause\"]').value = 'interpret > 0'</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>0</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CONSTRAINT `albums_interpret_check` failed for `adminer_test`.`albums`</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;check=albums&amp;name=albums_interpret_check</td><td></td></tr>\n<tr><td>verifyTextPresent<td>`interpret` > 0</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop albums_interpret_check?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>View has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Invalid table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;table=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;create=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Unable to select the table:</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Schema</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;schema=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Permanent link</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;edit=albums</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Clone</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>check[]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>clone</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black and White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 2 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=title</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Dangerous</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Explain</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Edit</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>click</td><td>link=Explain</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>possible_keys</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Reference</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=1</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Search in tables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test</td><td></td></tr>\n<tr><td>type</td><td>name=query</td><td>Jackson</td></tr>\n<tr><td>clickAndWait</td><td>name=search</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;edit=albums&amp;where%5Bid%5D=2</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black or White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>waitForChecked</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Truncate</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>all</td><td></td></tr>\n<tr><td>waitForChecked</td><td>all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No rows.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Privileges</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;user=</td><td></td></tr>\n<tr><td>type</td><td>user</td><td>adminer_test</td></tr>\n<tr><td>type</td><td>objects[0]</td><td>adminer_test.*</td></tr>\n<tr><td>click</td><td>grants[0][ALTER]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][CREATE]</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][CREATE VIEW]']</td><td></td></tr>\n<tr><td>click</td><td>grants[0][DELETE]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][DROP]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][INDEX]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][INSERT]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][REFERENCES]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][SELECT]</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][SHOW VIEW]']</td><td></td></tr>\n<tr><td>click</td><td>grants[0][UPDATE]</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][CREATE TEMPORARY TABLES]']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][LOCK TABLES]']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][CREATE ROUTINE]']</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>User has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//div[@id='content']/form/table/tbody/tr[td[1]='adminer_test']/td[3]/a</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop adminer_test@localhost?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>User has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Process list</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;processlist=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>SHOW FULL PROCESSLIST</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Export</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;dump=</td><td></td></tr>\n<tr><td>click</td><td>output</td><td></td></tr>\n<tr><td>click</td><td>format</td><td></td></tr>\n<tr><td>select</td><td>table_style</td><td>label=DROP+CREATE</td></tr>\n<tr><td>select</td><td>data_style</td><td>label=INSERT</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Export']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TABLE `interprets`</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TRIGGER `albums_ai`</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INSERT INTO `interprets`</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>VIEW `albums_interprets`</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Events</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;event=</td><td></td></tr>\n<tr><td>type</td><td>EVENT_NAME</td><td>no_albums</td></tr>\n<tr><td>select</td><td>INTERVAL_FIELD</td><td>label=DAY</td></tr>\n<tr><td>type</td><td>INTERVAL_VALUE</td><td>1</td></tr>\n<tr><td>click</td><td>ON_COMPLETION</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"EVENT_DEFINITION\"]').value = 'DELETE FROM albums WHERE interprets = 0'</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Event has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop no_albums?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Event has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Procedures</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;procedure=</td><td></td></tr>\n<tr><td>clickAndWait</td><td>add[0]</td><td></td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>interpret_name</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1][length]</td><td>50</td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>album_title</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"definition\"]').value = 'BEGIN\\nSELECT id INTO @interpret FROM interprets WHERE name = interpret_name;\\nIF @interpret IS NULL THEN\\n    INSERT INTO interprets (name) VALUES (interpret_name);\\n    SET @interpret = LAST_INSERT_ID();\\nEND IF;\\nINSERT INTO albums (interpret, title) VALUES (@interpret, album_title);\\nEND'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>insert_album</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=insert_album</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret_name]</td><td>Michael Jackson</td></tr>\n<tr><td>type</td><td>fields[album_title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Call']</td><td></td></tr>\n<tr><td>assertTextPresent</td><td>Routine has been called,</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=adminer_test</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop insert_album?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Generated columns</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;db=adminer_test&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>generated</td></tr>\n<tr><td>type</td><td>name=fields[1][field]</td><td>normal</td></tr>\n<tr><td>type</td><td>name=fields[1.1][field]</td><td>virtual</td></tr>\n<tr><td>select</td><td>name=fields[1.1][generated]</td><td>label=VIRTUAL</td></tr>\n<tr><td>type</td><td>name=fields[1.1][default]</td><td>normal + 100</td></tr>\n<tr><td>type</td><td>name=fields[1.11][field]</td><td>stored</td></tr>\n<tr><td>select</td><td>name=fields[1.11][generated]</td><td>label=STORED</td></tr>\n<tr><td>type</td><td>name=fields[1.11][default]</td><td>normal + 200</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>`normal` + 100</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>`normal` + 200</td><td></td></tr>\n<tr><td>click</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][1]</td><td>label=virtual</td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][11]</td><td>label=stored</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>click</td><td>link=New item</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[virtual]</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[stored]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[normal]</td><td>20</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>120</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>220</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Variables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;variables=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>basedir</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;status=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Uptime</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">History</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC&amp;sql=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>DROP DATABASE IF EXISTS adminer_test</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Logout</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?server=localhost:3307&amp;username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logout successful.</td><td></td></tr>\n<tr><td>open</td><td>/coverage.php</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/mssql.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon MS SQL</title>\n</head>\n<body>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>select</td><td>name=auth[driver]</td><td>label=MS SQL</td></tr>\n<tr><td>type</td><td>name=auth[server]</td><td></td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=int</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>uncheck</td><td>name=comments</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>Comment</td><td>Interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create index</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=PRIMARY</td></tr>\n<tr><td>select</td><td>indexes[2][columns][1]</td><td>label=name</td></tr>\n<tr><td>verifyValue</td><td>name=indexes[2][name]</td><td>interprets_name</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table 'interprets' already has a primary key defined on it.</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=INDEX</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table 2</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>interpret</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=int</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>title</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>check</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>fields[1.11][comment]</td><td>Album</td></tr>\n<tr><td>type</td><td>Comment</td><td>Albums</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Foreign key</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;table=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Add foreign key</td><td></td></tr>\n<tr><td>selectAndWait</td><td>table</td><td>label=interprets</td></tr>\n<tr><td>select</td><td>source[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Foreign key has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[2]</td><td></td></tr>\n<tr><td>type</td><td>fields[3][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[3][type]</td><td>label=int</td></tr>\n<tr><td>type</td><td>fields[3][length]</td><td></td></tr>\n<tr><td>uncheck</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>type</td><td>name=fields[3][default]</td><td>0</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Check constraints</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;table=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Create check</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>albums_interpret_check</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"clause\"]').value = 'interpret > 0'</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>0</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>statement conflicted with the CHECK constraint</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;check=albums&amp;name=albums_interpret_check</td><td></td></tr>\n<tr><td>verifyTextPresent<td>([interpret]>(0))</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop albums_interpret_check?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>View has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Invalid table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;table=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;create=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Unable to select the table:</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Schema</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;schema=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Permanent link</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;edit=albums</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 2 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Clone</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>check[]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>clone</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black and White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 3 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=title</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Dangerous</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Explain</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Edit</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>click</td><td>link=Explain</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Clustered Index Scan</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Reference</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=1</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Search in tables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo</td><td></td></tr>\n<tr><td>type</td><td>name=query</td><td>Jackson</td></tr>\n<tr><td>clickAndWait</td><td>name=search</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;edit=albums&amp;where%5Bid%5D=2</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black or White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>waitForChecked</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Truncate</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>all</td><td></td></tr>\n<tr><td>waitForChecked</td><td>all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No rows.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Export</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;dump=</td><td></td></tr>\n<tr><td>click</td><td>output</td><td></td></tr>\n<tr><td>click</td><td>format</td><td></td></tr>\n<tr><td>select</td><td>table_style</td><td>label=DROP+CREATE</td></tr>\n<tr><td>select</td><td>data_style</td><td>label=INSERT</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Export']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TABLE [dbo].[interprets]</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INSERT INTO [dbo].[interprets]</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>VIEW [dbo].[albums_interprets]</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Generated columns</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>generated</td></tr>\n<tr><td>type</td><td>name=fields[1][field]</td><td>normal</td></tr>\n<tr><td>type</td><td>name=fields[1.1][field]</td><td>virtual</td></tr>\n<tr><td>select</td><td>name=fields[1.1][generated]</td><td>label=VIRTUAL</td></tr>\n<tr><td>type</td><td>name=fields[1.1][default]</td><td>normal + 100</td></tr>\n<tr><td>type</td><td>name=fields[1.11][field]</td><td>stored</td></tr>\n<tr><td>select</td><td>name=fields[1.11][generated]</td><td>label=PERSISTED</td></tr>\n<tr><td>type</td><td>name=fields[1.11][default]</td><td>normal + 200</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>[normal]+(100)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>[normal]+(200)</td><td></td></tr>\n<tr><td>click</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][1]</td><td>label=virtual</td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][11]</td><td>label=stored</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>click</td><td>link=New item</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[virtual]</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[stored]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[normal]</td><td>20</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>120</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>220</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Scheme</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo</td><td></td></tr>\n<tr><td>click</td><td>link=Alter schema</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>dbo</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Schema: dbo</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Drop</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=dbo</td><td></td></tr>\n<tr><td>click</td><td>id=check-all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">SQL command</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC&amp;sql=SELECT+122%2B1</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>123</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Logout</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?mssql=&amp;username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logout successful.</td><td></td></tr>\n<tr><td>open</td><td>/coverage.php</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/mysql.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon MySQL</title>\n</head>\n<body>\n\n<!-- runScript can be changed to editContent + fireEvent -->\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/coverage.php?coverage=0</td><td></td></tr>\n<tr><td>open</td><td>/adminer/</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>wrong</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Access denied for user</td><td></td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logged as</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=SQL command</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;sql=DROP+DATABASE+IF+EXISTS+adminer_test</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Query executed OK</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create database</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create database</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>adminer_test</td></tr>\n<tr><td>select</td><td>collation</td><td>label=utf8mb4_general_ci</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Database has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>select</td><td>Engine</td><td>label=InnoDB</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=int</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>uncheck</td><td>name=comments</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>Comment</td><td>Interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create index</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=PRIMARY</td></tr>\n<tr><td>select</td><td>indexes[2][columns][1]</td><td>label=name</td></tr>\n<tr><td>verifyValue</td><td>name=indexes[2][name]</td><td>name</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Multiple primary key defined</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=INDEX</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Partitioning</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>select</td><td>partition_by</td><td>label=HASH</td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>type</td><td>partition</td><td>id</td></tr>\n<tr><td>type</td><td>partitions</td><td>2</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>select</td><td>partition_by</td><td>label=RANGE</td></tr>\n<tr><td>type</td><td>partition_values[]</td><td>10</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>select</td><td>partition_by</td><td>label=</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table 2</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=int</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>interpret</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=int</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>title</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>check</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>fields[1.11][comment]</td><td>Album</td></tr>\n<tr><td>type</td><td>Comment</td><td>Albums</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Foreign key</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Add foreign key</td><td></td></tr>\n<tr><td>selectAndWait</td><td>table</td><td>label=interprets</td></tr>\n<tr><td>select</td><td>source[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Foreign key has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[2]</td><td></td></tr>\n<tr><td>type</td><td>fields[2.1][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[2.1][type]</td><td>label=int</td></tr>\n<tr><td>type</td><td>fields[2.1][length]</td><td></td></tr>\n<tr><td>uncheck</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>type</td><td>name=fields[2.1][default]</td><td>0</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create trigger</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;trigger=albums</td><td></td></tr>\n<tr><td>select</td><td>Timing</td><td>label=AFTER</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"Statement\"]').value = 'UPDATE interprets SET albums = albums + 1 WHERE id = NEW.interpret'</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Trigger has been created.</td><td></td></tr></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Check constraints</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Create check</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>albums_interpret_check</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"clause\"]').value = 'interpret > 0'</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>0</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check constraint 'albums_interpret_check' is violated.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;check=albums&amp;name=albums_interpret_check</td><td></td></tr>\n<tr><td>verifyTextPresent<td>(`interpret` > 0)</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop albums_interpret_check?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>View has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Invalid table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;table=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;create=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Unable to select the table:</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Schema</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;schema=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Permanent link</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;edit=albums</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Clone</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>check[]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>clone</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black and White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 2 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=title</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Dangerous</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Explain</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Edit</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>click</td><td>link=Explain</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>possible_keys</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Reference</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=1</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Search in tables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test</td><td></td></tr>\n<tr><td>type</td><td>name=query</td><td>Jackson</td></tr>\n<tr><td>clickAndWait</td><td>name=search</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;edit=albums&amp;where%5Bid%5D=2</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black or White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>waitForChecked</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Truncate</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>all</td><td></td></tr>\n<tr><td>waitForChecked</td><td>all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No rows.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Privileges</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;user=</td><td></td></tr>\n<tr><td>type</td><td>user</td><td>adminer_test</td></tr>\n<tr><td>type</td><td>objects[0]</td><td>adminer_test.*</td></tr>\n<tr><td>click</td><td>grants[0][ALTER]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][CREATE]</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][CREATE VIEW]']</td><td></td></tr>\n<tr><td>click</td><td>grants[0][DELETE]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][DROP]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][INDEX]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][INSERT]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][REFERENCES]</td><td></td></tr>\n<tr><td>click</td><td>grants[0][SELECT]</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][SHOW VIEW]']</td><td></td></tr>\n<tr><td>click</td><td>grants[0][UPDATE]</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][CREATE TEMPORARY TABLES]']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][LOCK TABLES]']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='grants[0][CREATE ROUTINE]']</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>User has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//div[@id='content']/form/table/tbody/tr[td[1]='adminer_test']/td[3]/a</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop adminer_test@localhost?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>User has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Process list</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;processlist=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>SHOW FULL PROCESSLIST</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Export</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;dump=</td><td></td></tr>\n<tr><td>click</td><td>output</td><td></td></tr>\n<tr><td>click</td><td>format</td><td></td></tr>\n<tr><td>select</td><td>table_style</td><td>label=DROP+CREATE</td></tr>\n<tr><td>select</td><td>data_style</td><td>label=INSERT</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Export']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TABLE `interprets`</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TRIGGER `albums_ai`</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INSERT INTO `interprets`</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>VIEW `albums_interprets`</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Events</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;event=</td><td></td></tr>\n<tr><td>type</td><td>EVENT_NAME</td><td>no_albums</td></tr>\n<tr><td>select</td><td>INTERVAL_FIELD</td><td>label=DAY</td></tr>\n<tr><td>type</td><td>INTERVAL_VALUE</td><td>1</td></tr>\n<tr><td>click</td><td>ON_COMPLETION</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"EVENT_DEFINITION\"]').value = 'DELETE FROM albums WHERE interprets = 0'</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Event has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop no_albums?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Event has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Procedures</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;procedure=</td><td></td></tr>\n<tr><td>clickAndWait</td><td>add[0]</td><td></td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>interpret_name</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1][length]</td><td>50</td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>album_title</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=varchar</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"definition\"]').value = 'BEGIN\\nSELECT id INTO @interpret FROM interprets WHERE name = interpret_name;\\nIF @interpret IS NULL THEN\\n    INSERT INTO interprets (name) VALUES (interpret_name);\\n    SET @interpret = LAST_INSERT_ID();\\nEND IF;\\nINSERT INTO albums (interpret, title) VALUES (@interpret, album_title);\\nEND'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>insert_album</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=insert_album</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret_name]</td><td>Michael Jackson</td></tr>\n<tr><td>type</td><td>fields[album_title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Call']</td><td></td></tr>\n<tr><td>assertTextPresent</td><td>Routine has been called,</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=adminer_test</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop insert_album?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Generated columns</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>generated</td></tr>\n<tr><td>type</td><td>name=fields[1][field]</td><td>normal</td></tr>\n<tr><td>type</td><td>name=fields[1.1][field]</td><td>virtual</td></tr>\n<tr><td>select</td><td>name=fields[1.1][generated]</td><td>label=VIRTUAL</td></tr>\n<tr><td>type</td><td>name=fields[1.1][default]</td><td>normal + 100</td></tr>\n<tr><td>type</td><td>name=fields[1.11][field]</td><td>stored</td></tr>\n<tr><td>select</td><td>name=fields[1.11][generated]</td><td>label=STORED</td></tr>\n<tr><td>type</td><td>name=fields[1.11][default]</td><td>normal + 200</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>`normal` + 100</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>`normal` + 200</td><td></td></tr>\n<tr><td>click</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][1]</td><td>label=virtual</td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][11]</td><td>label=stored</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>click</td><td>link=New item</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[virtual]</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[stored]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[normal]</td><td>20</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>120</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>220</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Variables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;variables=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>basedir</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;status=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Uptime</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">History</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;sql=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>DROP DATABASE IF EXISTS adminer_test</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Warnings</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=adminer_test&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//th[@id='th[interpret]']/span/a[2]</td><td></td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>1.2.3</td></tr>\n<tr><td>submit</td><td>id=form</td><td></td></tr>\n<tr><td>click</td><td>link=Warnings</td><td></td></tr>\n<tr><td>verifyText</td><td>//div[@id='warnings']/div/table/tbody/tr/td[3]</td><td>Truncated incorrect DOUBLE value: '1.2.3'</td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Editor</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/editor/example.php</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>type</td><td>name=auth[username]</td><td>admin</td></tr>\n<tr><td>click</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 4 has been inserted.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Logout</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logout successful.</td><td></td></tr>\n<tr><td>selectAndWait</td><td>//select[@name='lang']</td><td>label=Čeština</td></tr>\n<tr><td>verifyTextPresent</td><td>Přihlásit se</td><td></td></tr>\n<tr><td>open</td><td>/coverage.php</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/pgsql.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon PostgreSQL</title>\n</head>\n<body>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>select</td><td>name=auth[driver]</td><td>label=PostgreSQL</td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=integer</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>surname</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>uncheck</td><td>name=comments</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>Comment</td><td>Interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create index</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=PRIMARY</td></tr>\n<tr><td>select</td><td>indexes[2][columns][1]</td><td>label=name</td></tr>\n<tr><td>verifyValue</td><td>name=indexes[2][name]</td><td>interprets_name</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>multiple primary keys for table \"interprets\" are not allowed</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=INDEX</td></tr>\n<tr><td>click</td><td>//input[@name='options']</td><td></td></tr>\n<tr><td>select</td><td>indexes[3][type]</td><td>label=INDEX</td></tr>\n<tr><td>select</td><td>indexes[3][columns][1]</td><td>label=surname</td></tr>\n<tr><td>select</td><td>indexes[3][algorithm]</td><td>label=hash</td></tr>\n<tr><td>type</td><td>indexes[3][partial]</td><td>surname IS NOT NULL</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INDEX (hash)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>WHERE surname IS NOT NULL</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table 2</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>interpret</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=integer</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>title</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>check</td><td>name=comments</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][comment]</td><td>Interpret</td></tr>\n<tr><td>type</td><td>fields[1.11][comment]</td><td>Album</td></tr>\n<tr><td>type</td><td>Comment</td><td>Albums</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Foreign key</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Add foreign key</td><td></td></tr>\n<tr><td>selectAndWait</td><td>table</td><td>label=interprets</td></tr>\n<tr><td>select</td><td>source[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Foreign key has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[3]</td><td></td></tr>\n<tr><td>type</td><td>fields[4][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[4][type]</td><td>label=integer</td></tr>\n<tr><td>type</td><td>fields[4][length]</td><td></td></tr>\n<tr><td>uncheck</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>type</td><td>name=fields[4][default]</td><td>0</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Check constraints</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Create check</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>albums_interpret_check</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"clause\"]').value = 'interpret > 0'</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>0</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>violates check constraint</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;check=albums&amp;name=albums_interpret_check</td><td></td></tr>\n<tr><td>verifyTextPresent<td>(interpret > 0)</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop albums_interpret_check?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>View has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Materialized view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>materialized_view</td></tr>\n<tr><td>click</td><td>materialized</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Materialized view</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Invalid table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;table=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;create=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Unable to select the table:</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Schema</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;schema=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Permanent link</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=albums</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 2 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Clone</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>check[]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>clone</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black and White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 3 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=title</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Dangerous</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Enum</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>link=Create type</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>alive</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"as\"]').value = \"AS ENUM('alive', 'deceased')\"</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>click</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>name=add[4]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[5][field]</td><td>alive</td></tr>\n<tr><td>select</td><td>name=fields[5][type]</td><td>label=alive</td></tr>\n<tr><td>click</td><td>name=fields[5][null]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>click</td><td>link=alive</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>'alive', 'deceased'</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop alive?</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Drop']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>cannot drop type</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=interprets&amp;where%5Bid%5D=1</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='val-deceased']</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>deceased</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Explain</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Edit</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>click</td><td>link=Explain</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Seq Scan</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Reference</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=1</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Search in tables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>type</td><td>name=query</td><td>Jackson</td></tr>\n<tr><td>clickAndWait</td><td>name=search</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;edit=albums&amp;where%5Bid%5D=2</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black or White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>waitForChecked</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Truncate</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>all</td><td></td></tr>\n<tr><td>waitForChecked</td><td>all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No rows.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Process list</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;processlist=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>pg_stat_activity</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Export</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;dump=</td><td></td></tr>\n<tr><td>click</td><td>output</td><td></td></tr>\n<tr><td>click</td><td>format</td><td></td></tr>\n<tr><td>select</td><td>table_style</td><td>label=DROP+CREATE</td></tr>\n<tr><td>select</td><td>data_style</td><td>label=INSERT</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Export']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TABLE \"public\".\"interprets\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INSERT INTO \"interprets\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>VIEW \"albums_interprets\"</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Procedures</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;procedure=</td><td></td></tr>\n<tr><td>clickAndWait</td><td>add[0]</td><td></td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>interpret_name</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1][length]</td><td>50</td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>album_title</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=character varying</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"definition\"]').value = 'SELECT id FROM interprets;'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>insert_album</td></tr>\n<tr><td>select</td><td>name=language</td><td>label=sql</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=insert_album</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret_name]</td><td>Michael Jackson</td></tr>\n<tr><td>type</td><td>fields[album_title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Call']</td><td></td></tr>\n<tr><td>assertTextPresent</td><td>Routine has been called,</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=public</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop insert_album?</td><td></td></tr>\n<tr><td>click</td><td>drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Routine has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Generated columns</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>generated</td></tr>\n<tr><td>type</td><td>name=fields[1][field]</td><td>normal</td></tr>\n<tr><td>type</td><td>name=fields[1.1][field]</td><td>stored</td></tr>\n<tr><td>select</td><td>name=fields[1.1][generated]</td><td>label=STORED</td></tr>\n<tr><td>type</td><td>name=fields[1.1][default]</td><td>normal + 200</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>normal + 200</td><td></td></tr>\n<tr><td>click</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][1]</td><td>label=stored</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>click</td><td>link=New item</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[stored]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[normal]</td><td>20</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>220</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Sequences</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>link=albums_id_seq</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_id_seq2</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Sequence has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Scheme</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>link=Alter schema</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>public</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Schema: public</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Drop</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public</td><td></td></tr>\n<tr><td>click</td><td>id=check-all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Partitioning</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;db=adminer_test&amp;ns=public&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>range</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>select</td><td>name=partition_by</td><td>label=RANGE</td></tr>\n<tr><td>type</td><td>name=partition</td><td>id</td></tr>\n<tr><td>type</td><td>name=partition_names[]</td><td>old</td></tr>\n<tr><td>type</td><td>name=partition_values[]</td><td>10</td></tr>\n<tr><td>type</td><td>xpath=//table[@id='partition-table']/tr/td/input</td><td>new</td></tr>\n<tr><td>type</td><td>xpath=//table[@id='partition-table']/tr/td[2]/input</td><td>MAXVALUE</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION BY RANGE(id)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>\"range_old\" PARTITION OF \"range\" FOR VALUES FROM (MINVALUE) TO (10)</td><td></td></tr>\n<tr><td>click</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>list</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>select</td><td>name=partition_by</td><td>label=LIST</td></tr>\n<tr><td>type</td><td>name=partition</td><td>id</td></tr>\n<tr><td>type</td><td>name=partition_names[]</td><td>odd</td></tr>\n<tr><td>type</td><td>name=partition_values[]</td><td>1,3,5</td></tr>\n<tr><td>click</td><td>xpath=//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION BY LIST(id)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>\"list_odd\" PARTITION OF \"list\" FOR VALUES IN (1,3,5)</td><td></td></tr>\n<tr><td>click</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>hash</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>click</td><td>link=Partition by</td><td></td></tr>\n<tr><td>select</td><td>name=partition_by</td><td>label=HASH</td></tr>\n<tr><td>type</td><td>name=partition</td><td>id</td></tr>\n<tr><td>type</td><td>name=partitions</td><td>4</td></tr>\n<tr><td>click</td><td>xpath=//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>PARTITION BY HASH(id)</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>\"hash_0\" PARTITION OF \"hash\" FOR VALUES WITH (MODULUS 4, REMAINDER 0)</td><td></td></tr>\n<tr><td>click</td><td>link=hash_0</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Inherits from</td><td></td></tr>\n<tr><td>click</td><td>link=public</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='tables[]' and @value='hash']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='tables[]' and @value='list']</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='tables[]' and @value='range']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Variables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;variables=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>autovacuum</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">SQL command</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC&amp;sql=SELECT+122%2B1</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>123</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Logout</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/?pgsql=&amp;username=ODBC</td><td></td></tr>\n<tr><td>clickAndWait</td><td>logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Logout successful.</td><td></td></tr>\n<tr><td>open</td><td>/coverage.php</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/screenshots.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon screenshots</title>\n</head>\n<body>\n\n<!-- Before:\nfill DB cds with https://demo.adminer.org/adminer.php?username=\nlog out some users\ndelete some DBs\nenable dark-switcher plugin\ndisable other plugins\n-->\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td></td></tr>\n<tr><td>check</td><td>name=auth[permanent]</td><td></td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>auth</td><td></td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[db]</td><td>cds</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>db</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Screenshots</td></tr></thead>\n<tbody>\n<tr><td>clickAndWait</td><td>link=albums</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>table</td><td></td></tr>\n<tr><td>clickAndWait</td><td>xpath=//big</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>dark</td><td></td></tr>\n<tr><td>clickAndWait</td><td>xpath=//big</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>check</td><td>name=comments</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=comments</td><td></td></tr>\n<tr><td>check</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>create</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=cds&amp;select=songs</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>select</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=cds&amp;edit=songs&amp;where[id]=14</td><td></td></tr>\n<tr><td>click</td><td>name=fields[title]</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>edit</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;dbsize=1</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>database</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=cds&amp;schema=albums:1x8_interprets:8x6_songs:6x-1</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>schema</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=cds&amp;dump=</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>dump</td><td></td></tr>\n<tr><td>open</td><td>/adminer/?username=ODBC&amp;db=cds&amp;sql=SELECT+%2A%0AFROM+%60albums%60%0ALIMIT+50</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>captureEntirePageScreenshot</td><td>sql</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "tests/screenshots.php",
    "content": "#!/usr/bin/env php\n<?php\nforeach (\n\tarray(\n\t\t'create' => array(1106, 412),\n\t\t'dark' => array(816, 750),\n\t\t'database' => array(896, 666),\n\t\t'db' => array(1258, 752),\n\t\t'dump' => array(784, 450),\n\t\t'edit' => array(1006, 336),\n\t\t'login' => array(628, 326),\n\t\t'select' => array(924, 810),\n\t\t'schema' => array(690, 406),\n\t\t'sql' => array(870, 788),\n\t\t'table' => array(816, 750),\n\t) as $filename => list($w, $h)\n) {\n\t$im = imagecreatefrompng(\"screenshots/$filename.png\");\n\t$im2 = imagecreatetruecolor($w, $h);\n\timagecopy($im2, $im, 0, 0, 0, 0, $w, $h);\n\timagepng($im2, \"cropped/$filename.png\");\n}\n"
  },
  {
    "path": "tests/sqlite.html",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n\t<meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\" />\n\t<title>Katalon SQLite</title>\n</head>\n<body>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Login</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php</td><td></td></tr>\n<tr><td>select</td><td>name=lang</td><td>label=English</td></tr>\n<tr><td>clickAndWait</td><td>css=#lang &gt; input[type=\"submit\"]</td><td></td></tr>\n<tr><td>select</td><td>name=auth[driver]</td><td>label=SQLite</td></tr>\n<tr><td>type</td><td>id=username</td><td>ODBC</td></tr>\n<tr><td>type</td><td>name=auth[password]</td><td>YOUR_PASSWORD_HERE</td></tr>\n<tr><td>click</td><td>//input[@value='Login']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>AdminerLoginPasswordLess</td><td></td></tr>\n<tr><td>click</td><td>link=Create database</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>adminer_test</td></tr>\n<tr><td>click</td><td>css=input[type=\"submit\"]</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Please use one of the extensions</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>adminer_test.sqlite</td></tr>\n<tr><td>click</td><td>css=input[type=\"submit\"]</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Database has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>interprets</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=integer</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>name</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=text</td></tr>\n<tr><td>type</td><td>fields[1.1][length]</td><td>50</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create index</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=PRIMARY</td></tr>\n<tr><td>select</td><td>indexes[2][columns][1]</td><td>label=name</td></tr>\n<tr><td>verifyValue</td><td>name=indexes[2][name]</td><td>interprets_name</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>has more than one primary key</td><td></td></tr>\n<tr><td>select</td><td>indexes[2][type]</td><td>label=INDEX</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create table 2</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Create table</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums</td></tr>\n<tr><td>type</td><td>fields[1][field]</td><td>id</td></tr>\n<tr><td>select</td><td>fields[1][type]</td><td>label=integer</td></tr>\n<tr><td>click</td><td>//input[@name='auto_increment_col' and @value='1']</td><td></td></tr>\n<tr><td>type</td><td>fields[1.1][field]</td><td>interpret</td></tr>\n<tr><td>select</td><td>fields[1.1][type]</td><td>label=integer</td></tr>\n<tr><td>type</td><td>fields[1.11][field]</td><td>title</td></tr>\n<tr><td>select</td><td>fields[1.11][type]</td><td>label=text</td></tr>\n<tr><td>type</td><td>fields[1.11][length]</td><td>50</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Foreign key</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;table=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Add foreign key</td><td></td></tr>\n<tr><td>selectAndWait</td><td>table</td><td>label=interprets</td></tr>\n<tr><td>select</td><td>source[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Foreign key has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Alter table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;table=interprets</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Alter table</td><td></td></tr>\n<tr><td>click</td><td>add[2]</td><td></td></tr>\n<tr><td>type</td><td>fields[2.1][field]</td><td>albums</td></tr>\n<tr><td>select</td><td>fields[2.1][type]</td><td>label=integer</td></tr>\n<tr><td>type</td><td>fields[2.1][length]</td><td></td></tr>\n<tr><td>uncheck</td><td>name=defaults</td><td></td></tr>\n<tr><td>clickAndWait</td><td>name=defaults</td><td></td></tr>\n<tr><td>type</td><td>name=fields[2.1][default]</td><td>0</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Table has been altered.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create trigger</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;trigger=albums</td><td></td></tr>\n<tr><td>select</td><td>Timing</td><td>label=AFTER</td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"Statement\"]').value = 'BEGIN\\nUPDATE interprets SET albums = albums + 1 WHERE id = NEW.interpret;\\nEND'</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Trigger has been created.</td><td></td></tr></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Check constraints</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;table=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Create check</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"clause\"]').value = 'interpret > 0'</td><td></td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been created.</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=New item</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>0</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CHECK constraint failed</td><td></td></tr>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;check=albums&amp;name=interpret+%3E+0</td><td></td></tr>\n<tr><td>verifyTextPresent<td>interpret > 0</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop interpret > 0?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Check has been dropped.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Create view</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;view=</td><td></td></tr>\n<tr><td>runScript</td><td>document.querySelector('[name=\"select\"]').value = 'SELECT albums.id, albums.title, interprets.name FROM albums LEFT JOIN interprets ON albums.interpret = interprets.id'</td><td></td></tr>\n<tr><td>type</td><td>name</td><td>albums_interprets</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>View has been created.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Invalid table</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;table=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;create=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No tables.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=invalid</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Unable to select the table:</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Schema</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;schema=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Permanent link</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Insert</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;edit=interprets</td><td></td></tr>\n<tr><td>type</td><td>fields[name]</td><td>Michael Jackson</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;edit=albums</td><td></td></tr>\n<tr><td>type</td><td>fields[interpret]</td><td>1</td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Dangerous</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 1 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Clone</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>check[]</td><td></td></tr>\n<tr><td>clickAndWait</td><td>clone</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black and White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item 2 has been inserted.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Select</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>link=Search</td><td></td></tr>\n<tr><td>select</td><td>name=where[0][col]</td><td>label=title</td></tr>\n<tr><td>type</td><td>name=where[0][val]</td><td>Dangerous</td></tr>\n<tr><td>click</td><td>link=Sort</td><td></td></tr>\n<tr><td>select</td><td>name=order[0]</td><td>label=interpret</td></tr>\n<tr><td>clickAndWait</td><td>xpath=//input[@value='Select']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 row</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Explain</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=Edit</td><td></td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Execute']</td><td></td></tr>\n<tr><td>click</td><td>link=Explain</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>SCAN albums</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Reference</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=albums</td><td></td></tr>\n<tr><td>clickAndWait</td><td>link=1</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Search in tables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite</td><td></td></tr>\n<tr><td>type</td><td>name=query</td><td>Jackson</td></tr>\n<tr><td>clickAndWait</td><td>name=search</td><td></td></tr>\n<tr><td>click</td><td>link=interprets</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Michael Jackson</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Update</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;edit=albums&amp;where%5Bid%5D=2</td><td></td></tr>\n<tr><td>type</td><td>fields[title]</td><td>Black or White</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Item has been updated.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Delete</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>waitForChecked</td><td>//input[@name='check[]' and @value='where%5Bid%5D=2']</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>1 item has been affected.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Truncate</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;select=albums</td><td></td></tr>\n<tr><td>click</td><td>all</td><td></td></tr>\n<tr><td>waitForChecked</td><td>all</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Are you sure?</td><td></td></tr>\n<tr><td>click</td><td>delete</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>No rows.</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Export</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;dump=</td><td></td></tr>\n<tr><td>click</td><td>output</td><td></td></tr>\n<tr><td>click</td><td>format</td><td></td></tr>\n<tr><td>select</td><td>table_style</td><td>label=DROP+CREATE</td></tr>\n<tr><td>select</td><td>data_style</td><td>label=INSERT</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Export']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TABLE \"interprets\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>CREATE TRIGGER \"albums_ai\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>INSERT INTO \"interprets\"</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>VIEW \"albums_interprets\"</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Generated columns</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;create=</td><td></td></tr>\n<tr><td>type</td><td>name=name</td><td>generated</td></tr>\n<tr><td>type</td><td>name=fields[1][field]</td><td>normal</td></tr>\n<tr><td>type</td><td>name=fields[1.1][field]</td><td>stored</td></tr>\n<tr><td>select</td><td>name=fields[1.1][generated]</td><td>label=STORED</td></tr>\n<tr><td>type</td><td>name=fields[1.1][default]</td><td>normal + 200</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>normal + 200</td><td></td></tr>\n<tr><td>click</td><td>link=Alter indexes</td><td></td></tr>\n<tr><td>select</td><td>name=indexes[1][columns][1]</td><td>label=stored</td></tr>\n<tr><td>clickAndWait</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Indexes have been altered.</td><td></td></tr>\n<tr><td>click</td><td>link=New item</td><td></td></tr>\n<tr><td>verifyElementNotPresent</td><td>fields[stored]</td><td></td></tr>\n<tr><td>type</td><td>name=fields[normal]</td><td>20</td></tr>\n<tr><td>click</td><td>//input[@value='Save']</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>220</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\">Variables</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;variables=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>integrity_check</td><td></td></tr>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;status=</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>MAX_COLUMN</td><td></td></tr>\n</tbody></table>\n\n<table cellpadding=\"1\" cellspacing=\"1\" border=\"1\">\n<thead><tr><td rowspan=\"1\" colspan=\"3\" data-tags=\"\">Drop</td></tr></thead>\n<tbody>\n<tr><td>open</td><td>/adminer/sqlite.php?sqlite=&amp;username=ODBC&amp;db=adminer_test.sqlite&amp;database=</td><td></td></tr>\n<tr><td>chooseOkOnNextConfirmation</td><td>Drop adminer_test.sqlite?</td><td></td></tr>\n<tr><td>click</td><td>name=drop</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Database has been dropped.</td><td></td></tr>\n<tr><td>click</td><td>id=logout</td><td></td></tr>\n<tr><td>verifyTextPresent</td><td>Thanks for using Adminer, consider donating.</td><td></td></tr>\n</tbody></table>\n\n</body>\n</html>\n"
  },
  {
    "path": "todo.txt",
    "content": "Transactions in export\nCreate view and routine options\nVariables editation\nBlob download and image display in edit form (important for Editor with hidden fields in select and SQL command)\nAdd title to Logout and edit (in select) for style \"hever\"\nExport by GET parameters\nDraggable columns in alter table (thanks to Michal Manak)\n<option class> for system databases and schemas - information_schema and driver-specific (thanks to Vaclav Novotny)\nDefine foreign keys name - http://forum.zdrojak.root.cz/index.php?topic=185.msg1255#msg1255\n? Filter by value in row under <thead> in select\n? Column and table names auto-completion in SQL textarea - http://blog.quplo.com/2010/06/css-code-completion-in-your-browser/\n? Aliasing of built-in functions can save 7 KB, function minification can save 7 KB, substitution of repetitive $a[\"a\"] can save 4 KB, substitution of $_GET and friends can save 2 KB, aliasing of $connection->query can save 24 B, JS Closure compiler can save 2 KB, not enclosing HTML attribute values can save 1.2 KB, replacing \\\\n by \\n can save .3 KB\n? Branch binary_compile: LZW compression of all texts can save 11 KB, using chars 127-255 in minification can save 1 KB\n\nhttps://github.com/vrana/adminer/compare/master...adminneo-org:adminneo:main\nAdd drag-n-drop moving of rows in table editing\nElasticsearch: New condition operators as the combination of query type and match type\n\nEditor:\nThree-state checkbox for boolean searches\nJavaScript data validation - columns containing word email, url, ...\nJoining tables - PRIMARY KEY (table, joining)\nRank, Tree structure\n\nMySQL:\nData longer than max_allowed_packet can be sent by mysqli_stmt_send_long_data()\n\nSQLite:\nCopy tables\nDelimiter in export and SQL command\nBackward keys in Editor\n\nPostgreSQL:\nDisplay number of schemas in databases overview\nUsers - SELECT * FROM pg_user\nORDER BY COUNT(*)\nColumn rights - http://www.postgresql.org/docs/8.4/static/functions-info.html\n\nMS SQL:\nNon UTF-8 character sets\nDetection of table collation\n\nOracle:\nclob comparable with string\n\nCockroachDB:\nLink docs to https://www.cockroachlabs.com/docs/v24.3/create-table\n\nSimpleDB:\nReport invalid user or password\nReport API calls instead of queries\nEdit multi-value attributes\nSelect: clone\nUpdate: delete + insert when changing itemName()\n"
  }
]