From 5bb3c8941313ab91324f5ee4ba1a7288287852ea Mon Sep 17 00:00:00 2001 From: Olga Revyakina Date: Sat, 23 Jan 2021 07:38:49 +0300 Subject: [PATCH 01/48] CREATE QUOTA and ALTER QUOTA syntax updated. --- .../sql-reference/statements/alter/quota.md | 23 +++++++++++++++--- .../sql-reference/statements/create/quota.md | 24 +++++++++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/docs/en/sql-reference/statements/alter/quota.md b/docs/en/sql-reference/statements/alter/quota.md index 2923fd04c4b..08a36e8598c 100644 --- a/docs/en/sql-reference/statements/alter/quota.md +++ b/docs/en/sql-reference/statements/alter/quota.md @@ -5,16 +5,33 @@ toc_title: QUOTA # ALTER QUOTA {#alter-quota-statement} -Changes quotas. +Changes [quotas](../../../operations/access-rights.md#quotas-management). Syntax: ``` sql ALTER QUOTA [IF EXISTS] name [ON CLUSTER cluster_name] [RENAME TO new_name] - [KEYED BY {'none' | 'user name' | 'ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}] + [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] | + {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` +Multiword key types may be written either with underscores (`CLIENT_KEY`), or with spaces and in simple quotes (`'client key'`). You may also use `'client key or user name'` instead of `CLIENT_KEY, USER_NAME`, and `'client key or ip address'` instead of `CLIENT_KEY, IP_ADDRESS`. + +Multiword resource types may be written either with underscores (`RESULT_ROWS`) or without them (`RESULT ROWS`). + +**Examples** + +Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: + +``` sql +ALTER QUOTA IF EXISTS qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +``` + +For the default user limit the maximum execution time with half a second in 30 minutes, and limit the maximum number of queries with 321 and the maximum number of errors with 10 in 5 quaters: + +``` sql +ALTER QUOTA IF EXISTS qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +``` diff --git a/docs/en/sql-reference/statements/create/quota.md b/docs/en/sql-reference/statements/create/quota.md index 20537b98a46..8ae49e4e1a8 100644 --- a/docs/en/sql-reference/statements/create/quota.md +++ b/docs/en/sql-reference/statements/create/quota.md @@ -11,15 +11,18 @@ Syntax: ``` sql CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] - [KEYED BY {'none' | 'user name' | 'ip address' | 'forwarded ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}] + [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] | + {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` `ON CLUSTER` clause allows creating quotas on a cluster, see [Distributed DDL](../../../sql-reference/distributed-ddl.md). +Multiword key types may be written either with underscores (`CLIENT_KEY`), or with spaces and in simple quotes (`'client key'`). You may also use `'client key or user name'` instead of `CLIENT_KEY, USER_NAME`, and `'client key or ip address'` instead of `CLIENT_KEY, IP_ADDRESS`. + +Multiword resource types may be written either with underscores (`RESULT_ROWS`) or without them (`RESULT ROWS`). ## Example {#create-quota-example} Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: @@ -27,3 +30,20 @@ Limit the maximum number of queries for the current user with 123 queries in 15 ``` sql CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER ``` +Multiword key types may be written either with underscores (`CLIENT_KEY`), or with spaces and in simple quotes (`'client key'`). You can also use `'client key or user name'` instead of `CLIENT_KEY, USER_NAME`, and `'client key or ip address'` instead of `CLIENT_KEY, IP_ADDRESS`. + +Multiword resource types may be written either with underscores (`RESULT_ROWS`) or without them (`RESULT ROWS`). + +## Examples {#create-quota-example} + +Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: + +``` sql +CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +``` + +For the default user limit the maximum execution time with half a second in 30 minutes, and limit the maximum number of queries with 321 and the maximum number of errors with 10 in 5 quaters: + +``` sql +CREATE QUOTA qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +``` From 9fdae60497ad0a8c2df63dffa6e97503df8735ce Mon Sep 17 00:00:00 2001 From: feng lv Date: Sat, 23 Jan 2021 05:45:36 +0000 Subject: [PATCH 02/48] remove part of misleading exception message --- src/Interpreters/TreeRewriter.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Interpreters/TreeRewriter.cpp b/src/Interpreters/TreeRewriter.cpp index 190d063f935..ce4103e97ec 100644 --- a/src/Interpreters/TreeRewriter.cpp +++ b/src/Interpreters/TreeRewriter.cpp @@ -693,12 +693,18 @@ void TreeRewriterResult::collectUsedColumns(const ASTPtr & query, bool is_select if (storage) { - ss << ", maybe you meant: "; + String hint_name{}; for (const auto & name : columns_context.requiredColumns()) { auto hints = storage->getHints(name); if (!hints.empty()) - ss << " '" << toString(hints) << "'"; + hint_name = hint_name + " '" + toString(hints) + "'"; + } + + if (!hint_name.empty()) + { + ss << ", maybe you meant: "; + ss << hint_name; } } else From 42e5c3c41346142428ac03e8d5271e22166363f1 Mon Sep 17 00:00:00 2001 From: Olga Revyakina Date: Sat, 23 Jan 2021 09:27:57 +0300 Subject: [PATCH 03/48] Translated to ru --- .../sql-reference/statements/alter/quota.md | 27 +++++++++++++++---- .../sql-reference/statements/create/quota.md | 24 ++++++++++++----- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/docs/ru/sql-reference/statements/alter/quota.md b/docs/ru/sql-reference/statements/alter/quota.md index 707f56e7cd4..4f524db2a6d 100644 --- a/docs/ru/sql-reference/statements/alter/quota.md +++ b/docs/ru/sql-reference/statements/alter/quota.md @@ -5,18 +5,35 @@ toc_title: QUOTA # ALTER QUOTA {#alter-quota-statement} -Изменяет квоту. +Изменяет [квоту](../../../operations/access-rights.md#quotas-management). -## Синтаксис {#alter-quota-syntax} +Синтаксис: ``` sql ALTER QUOTA [IF EXISTS] name [ON CLUSTER cluster_name] [RENAME TO new_name] - [KEYED BY {'none' | 'user name' | 'ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}] + [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] | + {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` +Поддерживаются два варианта написания составных типов ключей: с подчеркиванием (`CLIENT_KEY`) или через пробел и в одинарных кавычках (`'client key'`). Также можно использовать ключ `'client key or user name'` вместо `CLIENT_KEY, USER_NAME`, и ключ `'client key or ip address'` вместо `CLIENT_KEY, IP_ADDRESS`. -[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/alter/quota/) \ No newline at end of file +Поддерживаются также два варианта написания составных типов ресурсов: с подчеркиванием (`RESULT_ROWS`) или без подчеркивания, через пробел (`RESULT ROWS`). + +**Примеры** + +Ограничить для текущего пользователя максимальное число запросов — не более 123 запросов за каждые 15 месяцев: + +``` sql +ALTER QUOTA IF EXISTS qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +``` + +Ограничить по умолчанию максимальное время выполнения запроса — не более полсекунды за каждые 30 минут, а также максимальное число запросов — не более 321 и максимальное число ошибок — не более 10 за каждые 5 кварталов: + +``` sql +ALTER QUOTA IF EXISTS qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +``` + +[Оригинальная статья](https://clickhouse.tech/docs/ru/sql-reference/alter/quota/) diff --git a/docs/ru/sql-reference/statements/create/quota.md b/docs/ru/sql-reference/statements/create/quota.md index fe18869bf2e..073c4eda85c 100644 --- a/docs/ru/sql-reference/statements/create/quota.md +++ b/docs/ru/sql-reference/statements/create/quota.md @@ -7,23 +7,35 @@ toc_title: "\u041a\u0432\u043e\u0442\u0430" Создает [квоту](../../../operations/access-rights.md#quotas-management), которая может быть присвоена пользователю или роли. -### Синтаксис {#create-quota-syntax} +Синтаксис: ``` sql CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] - [KEYED BY {'none' | 'user name' | 'ip address' | 'client key' | 'client key or user name' | 'client key or ip address'}] + [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT ROWS | RESULT BYTES | READ ROWS | READ BYTES | EXECUTION TIME} = number } [,...] | + {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` -### Пример {#create-quota-example} +В секции `ON CLUSTER` можно указать кластеры, на которых создается квота, см. [Распределенные DDL запросы](../../../sql-reference/distributed-ddl.md). -Ограничить максимальное количество запросов для текущего пользователя до 123 запросов каждые 15 месяцев: +Поддерживаются два варианта написания составных типов ключей: с подчеркиванием (`CLIENT_KEY`) или через пробел и в одинарных кавычках (`'client key'`). Также можно использовать ключ `'client key or user name'` вместо `CLIENT_KEY, USER_NAME`, и ключ `'client key or ip address'` вместо `CLIENT_KEY, IP_ADDRESS`. + +Поддерживаются также два варианта написания составных типов ресурсов: с подчеркиванием (`RESULT_ROWS`) или без подчеркивания, через пробел (`RESULT ROWS`). + +**Примеры** + +Ограничить максимальное количество запросов для текущего пользователя — не более 123 запросов за каждые 15 месяцев: ``` sql -CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER +CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +``` + +Ограничить по умолчанию максимальное время выполнения запроса — не более полсекунды за каждые 30 минут, а также максимальное число запросов — не более 321 и максимальное число ошибок — не более 10 за каждые 5 кварталов: + +``` sql +CREATE QUOTA qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; ``` [Оригинальная статья](https://clickhouse.tech/docs/ru/sql-reference/statements/create/quota) From d821cf11f8cb9237a23515e6f636194d11949079 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Tue, 26 Jan 2021 13:31:29 +0300 Subject: [PATCH 04/48] Fix function neighbor for LowCardinality argument. --- src/Functions/neighbor.cpp | 2 + .../01670_neighbor_lc_bug.reference | 0 .../0_stateless/01670_neighbor_lc_bug.sql | 43 +++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 tests/queries/0_stateless/01670_neighbor_lc_bug.reference create mode 100644 tests/queries/0_stateless/01670_neighbor_lc_bug.sql diff --git a/src/Functions/neighbor.cpp b/src/Functions/neighbor.cpp index 942d23b31cc..413eeb39e45 100644 --- a/src/Functions/neighbor.cpp +++ b/src/Functions/neighbor.cpp @@ -50,6 +50,8 @@ public: bool useDefaultImplementationForConstants() const override { return false; } + bool useDefaultImplementationForLowCardinalityColumns() const override { return false; } + DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override { size_t number_of_arguments = arguments.size(); diff --git a/tests/queries/0_stateless/01670_neighbor_lc_bug.reference b/tests/queries/0_stateless/01670_neighbor_lc_bug.reference new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/queries/0_stateless/01670_neighbor_lc_bug.sql b/tests/queries/0_stateless/01670_neighbor_lc_bug.sql new file mode 100644 index 00000000000..de9afcf1495 --- /dev/null +++ b/tests/queries/0_stateless/01670_neighbor_lc_bug.sql @@ -0,0 +1,43 @@ +SELECT + neighbor(n, -2) AS int, + neighbor(s, -2) AS str, + neighbor(lcs, -2) AS lowCstr +FROM +( + SELECT + number % 5 AS n, + toString(n) AS s, + CAST(s, 'LowCardinality(String)') AS lcs + FROM numbers(10) +); + +drop table if exists neighbor_test; + +CREATE TABLE neighbor_test +( + `rowNr` UInt8, + `val_string` String, + `val_low` LowCardinality(String) +) +ENGINE = MergeTree +PARTITION BY tuple() +ORDER BY rowNr; + +INSERT INTO neighbor_test VALUES (1, 'String 1', 'String 1'), (2, 'String 1', 'String 1'), (3, 'String 2', 'String 2'); + +SELECT + rowNr, + val_string, + neighbor(val_string, -1) AS str_m1, + neighbor(val_string, 1) AS str_p1, + val_low, + neighbor(val_low, -1) AS low_m1, + neighbor(val_low, 1) AS low_p1 +FROM +( + SELECT * + FROM neighbor_test + ORDER BY val_string ASC +) format PrettyCompact; + +drop table if exists neighbor_test; From 403e74d941de3083cc8f4335cea3ccfb0613b879 Mon Sep 17 00:00:00 2001 From: Yatsishin Ilya <2159081+qoega@users.noreply.github.com> Date: Tue, 26 Jan 2021 18:12:08 +0300 Subject: [PATCH 05/48] Add more debuginfo for test_concurrent_ttl_merges test --- tests/integration/helpers/test_tools.py | 3 +++ .../test_concurrent_ttl_merges/test.py | 25 ++++++++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/tests/integration/helpers/test_tools.py b/tests/integration/helpers/test_tools.py index 75ae8f67f7a..bbab12e55d4 100644 --- a/tests/integration/helpers/test_tools.py +++ b/tests/integration/helpers/test_tools.py @@ -38,6 +38,9 @@ class TSV: def __str__(self): return '\n'.join(self.lines) + def __len__(self): + return len(self.lines) + @staticmethod def toMat(contents): return [line.split("\t") for line in contents.split("\n") if line.strip()] diff --git a/tests/integration/test_concurrent_ttl_merges/test.py b/tests/integration/test_concurrent_ttl_merges/test.py index 65bc3828b38..68913329e6b 100644 --- a/tests/integration/test_concurrent_ttl_merges/test.py +++ b/tests/integration/test_concurrent_ttl_merges/test.py @@ -2,7 +2,7 @@ import time import pytest from helpers.cluster import ClickHouseCluster -from helpers.test_tools import assert_eq_with_retry +from helpers.test_tools import assert_eq_with_retry, TSV cluster = ClickHouseCluster(__file__) node1 = cluster.add_instance('node1', main_configs=['configs/fast_background_pool.xml', 'configs/log_conf.xml'], with_zookeeper=True) @@ -28,12 +28,13 @@ def count_ttl_merges_in_queue(node, table): return int(result.strip()) -def count_ttl_merges_in_background_pool(node, table): - result = node.query( - "SELECT count() FROM system.merges WHERE merge_type = 'TTL_DELETE' and table = '{}'".format(table)) - if not result: - return 0 - return int(result.strip()) +def count_ttl_merges_in_background_pool(node, table, level): + result = TSV(node.query( + "SELECT * FROM system.merges WHERE merge_type = 'TTL_DELETE' and table = '{}'".format(table))) + count = len(result) + if count >= level: + print("count_ttl_merges_in_background_pool: merges more than warn level:\n{}".format(result)) + return count def count_regular_merges_in_background_pool(node, table): @@ -67,7 +68,7 @@ def test_no_ttl_merges_in_busy_pool(started_cluster): while count_running_mutations(node1, "test_ttl") < 6: print("Mutations count", count_running_mutations(node1, "test_ttl")) - assert count_ttl_merges_in_background_pool(node1, "test_ttl") == 0 + assert count_ttl_merges_in_background_pool(node1, "test_ttl", 1) == 0 time.sleep(0.5) node1.query("SYSTEM START TTL MERGES") @@ -100,7 +101,7 @@ def test_limited_ttl_merges_in_empty_pool(started_cluster): merges_with_ttl_count = set({}) while True: - merges_with_ttl_count.add(count_ttl_merges_in_background_pool(node1, "test_ttl_v2")) + merges_with_ttl_count.add(count_ttl_merges_in_background_pool(node1, "test_ttl_v2", 3)) time.sleep(0.01) if node1.query("SELECT COUNT() FROM test_ttl_v2") == "0\n": break @@ -124,7 +125,7 @@ def test_limited_ttl_merges_in_empty_pool_replicated(started_cluster): merges_with_ttl_count = set({}) entries_with_ttl_count = set({}) while True: - merges_with_ttl_count.add(count_ttl_merges_in_background_pool(node1, "replicated_ttl")) + merges_with_ttl_count.add(count_ttl_merges_in_background_pool(node1, "replicated_ttl", 3)) entries_with_ttl_count.add(count_ttl_merges_in_queue(node1, "replicated_ttl")) time.sleep(0.01) if node1.query("SELECT COUNT() FROM replicated_ttl") == "0\n": @@ -159,8 +160,8 @@ def test_limited_ttl_merges_two_replicas(started_cluster): merges_with_ttl_count_node1 = set({}) merges_with_ttl_count_node2 = set({}) while True: - merges_with_ttl_count_node1.add(count_ttl_merges_in_background_pool(node1, "replicated_ttl_2")) - merges_with_ttl_count_node2.add(count_ttl_merges_in_background_pool(node2, "replicated_ttl_2")) + merges_with_ttl_count_node1.add(count_ttl_merges_in_background_pool(node1, "replicated_ttl_2"), 3) + merges_with_ttl_count_node2.add(count_ttl_merges_in_background_pool(node2, "replicated_ttl_2"), 3) if node1.query("SELECT COUNT() FROM replicated_ttl_2") == "0\n" and node2.query( "SELECT COUNT() FROM replicated_ttl_2") == "0\n": break From 76adc85c7562af482c66d7740bb5ca2c8f87312f Mon Sep 17 00:00:00 2001 From: Yatsishin Ilya <2159081+qoega@users.noreply.github.com> Date: Tue, 26 Jan 2021 19:33:37 +0300 Subject: [PATCH 06/48] fix --- tests/integration/test_concurrent_ttl_merges/test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/test_concurrent_ttl_merges/test.py b/tests/integration/test_concurrent_ttl_merges/test.py index 68913329e6b..ba5ed9f0758 100644 --- a/tests/integration/test_concurrent_ttl_merges/test.py +++ b/tests/integration/test_concurrent_ttl_merges/test.py @@ -160,8 +160,8 @@ def test_limited_ttl_merges_two_replicas(started_cluster): merges_with_ttl_count_node1 = set({}) merges_with_ttl_count_node2 = set({}) while True: - merges_with_ttl_count_node1.add(count_ttl_merges_in_background_pool(node1, "replicated_ttl_2"), 3) - merges_with_ttl_count_node2.add(count_ttl_merges_in_background_pool(node2, "replicated_ttl_2"), 3) + merges_with_ttl_count_node1.add(count_ttl_merges_in_background_pool(node1, "replicated_ttl_2", 3)) + merges_with_ttl_count_node2.add(count_ttl_merges_in_background_pool(node2, "replicated_ttl_2", 3)) if node1.query("SELECT COUNT() FROM replicated_ttl_2") == "0\n" and node2.query( "SELECT COUNT() FROM replicated_ttl_2") == "0\n": break From 3322cc812d15db63c5698ae9e180a7594a1a05e0 Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Tue, 26 Jan 2021 10:49:16 +0300 Subject: [PATCH 07/48] Updated AWS C++ SDK. --- contrib/aws | 2 +- src/IO/S3/PocoHTTPClient.cpp | 18 +++----------- src/IO/S3/PocoHTTPClient.h | 41 +++++++++++++++++++++++++++---- src/IO/S3/SessionAwareAwsStream.h | 27 -------------------- src/IO/S3/SessionAwareIOStream.h | 26 ++++++++++++++++++++ src/IO/S3Common.cpp | 23 +++++++++++++++-- 6 files changed, 87 insertions(+), 50 deletions(-) delete mode 100644 src/IO/S3/SessionAwareAwsStream.h create mode 100644 src/IO/S3/SessionAwareIOStream.h diff --git a/contrib/aws b/contrib/aws index a220591e335..7d48b2c8193 160000 --- a/contrib/aws +++ b/contrib/aws @@ -1 +1 @@ -Subproject commit a220591e335923ce1c19bbf9eb925787f7ab6c13 +Subproject commit 7d48b2c8193679cc4516e5bd68ae4a64b94dae7d diff --git a/src/IO/S3/PocoHTTPClient.cpp b/src/IO/S3/PocoHTTPClient.cpp index 2389f9a2192..cfd4593d80f 100644 --- a/src/IO/S3/PocoHTTPClient.cpp +++ b/src/IO/S3/PocoHTTPClient.cpp @@ -6,13 +6,11 @@ #include #include -#include #include #include #include #include #include -#include #include #include #include "Poco/StreamCopier.h" @@ -90,29 +88,19 @@ PocoHTTPClient::PocoHTTPClient(const PocoHTTPClientConfiguration & clientConfigu { } -std::shared_ptr PocoHTTPClient::MakeRequest( - Aws::Http::HttpRequest & request, - Aws::Utils::RateLimits::RateLimiterInterface * readLimiter, - Aws::Utils::RateLimits::RateLimiterInterface * writeLimiter) const -{ - auto response = Aws::MakeShared("PocoHTTPClient", request); - makeRequestInternal(request, response, readLimiter, writeLimiter); - return response; -} - std::shared_ptr PocoHTTPClient::MakeRequest( const std::shared_ptr & request, Aws::Utils::RateLimits::RateLimiterInterface * readLimiter, Aws::Utils::RateLimits::RateLimiterInterface * writeLimiter) const { - auto response = Aws::MakeShared("PocoHTTPClient", request); + auto response = Aws::MakeShared("PocoHTTPClient", request); makeRequestInternal(*request, response, readLimiter, writeLimiter); return response; } void PocoHTTPClient::makeRequestInternal( Aws::Http::HttpRequest & request, - std::shared_ptr & response, + std::shared_ptr & response, Aws::Utils::RateLimits::RateLimiterInterface *, Aws::Utils::RateLimits::RateLimiterInterface *) const { @@ -278,7 +266,7 @@ void PocoHTTPClient::makeRequestInternal( } } else - response->GetResponseStream().SetUnderlyingStream(std::make_shared>(session, response_body_stream)); + response->SetResponseBody(response_body_stream, session); return; } diff --git a/src/IO/S3/PocoHTTPClient.h b/src/IO/S3/PocoHTTPClient.h index e4fc453f388..6631a209174 100644 --- a/src/IO/S3/PocoHTTPClient.h +++ b/src/IO/S3/PocoHTTPClient.h @@ -2,9 +2,12 @@ #include #include +#include +#include #include #include #include +#include namespace Aws::Http::Standard { @@ -30,15 +33,43 @@ struct PocoHTTPClientConfiguration : public Aws::Client::ClientConfiguration void updateSchemeAndRegion(); }; +class PocoHTTPResponse : public Aws::Http::Standard::StandardHttpResponse +{ +public: + using SessionPtr = PooledHTTPSessionPtr; + + PocoHTTPResponse(const std::shared_ptr request) + : Aws::Http::Standard::StandardHttpResponse(request) + , body_stream(request->GetResponseStreamFactory()) + { + } + + void SetResponseBody(Aws::IStream & incoming_stream, SessionPtr & session_) + { + body_stream = Aws::Utils::Stream::ResponseStream( + Aws::New>("http result streambuf", session_, incoming_stream.rdbuf()) + ); + } + + Aws::IOStream & GetResponseBody() const override + { + return body_stream.GetUnderlyingStream(); + } + + Aws::Utils::Stream::ResponseStream && SwapResponseStreamOwnership() override + { + return std::move(body_stream); + } + +private: + Aws::Utils::Stream::ResponseStream body_stream; +}; + class PocoHTTPClient : public Aws::Http::HttpClient { public: explicit PocoHTTPClient(const PocoHTTPClientConfiguration & clientConfiguration); ~PocoHTTPClient() override = default; - std::shared_ptr MakeRequest( - Aws::Http::HttpRequest & request, - Aws::Utils::RateLimits::RateLimiterInterface * readLimiter, - Aws::Utils::RateLimits::RateLimiterInterface * writeLimiter) const override; std::shared_ptr MakeRequest( const std::shared_ptr & request, @@ -48,7 +79,7 @@ public: private: void makeRequestInternal( Aws::Http::HttpRequest & request, - std::shared_ptr & response, + std::shared_ptr & response, Aws::Utils::RateLimits::RateLimiterInterface * readLimiter, Aws::Utils::RateLimits::RateLimiterInterface * writeLimiter) const; diff --git a/src/IO/S3/SessionAwareAwsStream.h b/src/IO/S3/SessionAwareAwsStream.h deleted file mode 100644 index f64be5dac16..00000000000 --- a/src/IO/S3/SessionAwareAwsStream.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include - -#include - - -namespace DB::S3 -{ -/** - * Wrapper of IOStream to store response stream and corresponding HTTP session. - */ -template -class SessionAwareAwsStream : public Aws::IStream -{ -public: - SessionAwareAwsStream(Session session_, std::istream & response_stream_) - : Aws::IStream(response_stream_.rdbuf()), session(std::move(session_)) - { - } - -private: - /// Poco HTTP session is holder of response stream. - Session session; -}; - -} diff --git a/src/IO/S3/SessionAwareIOStream.h b/src/IO/S3/SessionAwareIOStream.h new file mode 100644 index 00000000000..1640accb6fa --- /dev/null +++ b/src/IO/S3/SessionAwareIOStream.h @@ -0,0 +1,26 @@ +#pragma once + +#include + + +namespace DB::S3 +{ +/** + * Wrapper of IOStream to store response stream and corresponding HTTP session. + */ +template +class SessionAwareIOStream : public std::iostream +{ +public: + SessionAwareIOStream(Session session_, std::streambuf * sb) + : std::iostream(sb) + , session(std::move(session_)) + { + } + +private: + /// Poco HTTP session is holder of response stream. + Session session; +}; + +} diff --git a/src/IO/S3Common.cpp b/src/IO/S3Common.cpp index d4c4ba9bb02..125ba907629 100644 --- a/src/IO/S3Common.cpp +++ b/src/IO/S3Common.cpp @@ -207,13 +207,32 @@ public: return result; } + bool SignRequest(Aws::Http::HttpRequest & request, const char * region, const char * service_name, bool sign_body) const override + { + auto result = Aws::Client::AWSAuthV4Signer::SignRequest(request, region, service_name, sign_body); + for (const auto & header : headers) + request.SetHeaderValue(header.name, header.value); + return result; + } + bool PresignRequest( Aws::Http::HttpRequest & request, const char * region, - const char * serviceName, long long expiration_time_sec) const override // NOLINT { - auto result = Aws::Client::AWSAuthV4Signer::PresignRequest(request, region, serviceName, expiration_time_sec); + auto result = Aws::Client::AWSAuthV4Signer::PresignRequest(request, region, expiration_time_sec); + for (const auto & header : headers) + request.SetHeaderValue(header.name, header.value); + return result; + } + + bool PresignRequest( + Aws::Http::HttpRequest & request, + const char * region, + const char * service_name, + long long expiration_time_sec) const override // NOLINT + { + auto result = Aws::Client::AWSAuthV4Signer::PresignRequest(request, region, service_name, expiration_time_sec); for (const auto & header : headers) request.SetHeaderValue(header.name, header.value); return result; From edd4ca8c727ac69c59e721decaca5621db2cd2e5 Mon Sep 17 00:00:00 2001 From: Vitaliy Zakaznikov Date: Tue, 26 Jan 2021 14:54:26 -0500 Subject: [PATCH 08/48] Starting to update AES encryption tests to support changes to the supported data types by the encrypt plaintext parameter. --- .../testflows/aes_encryption/tests/common.py | 51 ++-- .../testflows/aes_encryption/tests/decrypt.py | 11 +- .../aes_encryption/tests/decrypt_mysql.py | 11 +- .../snapshots/encrypt.py.encrypt.snapshot | 264 ++++++++++++++++++ .../encrypt_mysql.py.encrypt_mysql.snapshot | 264 ++++++++++++++++++ 5 files changed, 559 insertions(+), 42 deletions(-) diff --git a/tests/testflows/aes_encryption/tests/common.py b/tests/testflows/aes_encryption/tests/common.py index 9a2391e0733..10e98dd1065 100644 --- a/tests/testflows/aes_encryption/tests/common.py +++ b/tests/testflows/aes_encryption/tests/common.py @@ -88,32 +88,35 @@ plaintexts = [ ("utf8fixedstring", "toFixedString('Gãńdåłf_Thê_Gręât', 24)"), ("String", "'1'"), ("FixedString", "toFixedString('1', 1)"), - ("UInt8", "toUInt8('1')"), - ("UInt16", "toUInt16('1')"), - ("UInt32", "toUInt32('1')"), - ("UInt64", "toUInt64('1')"), - ("Int8", "toInt8('1')"), - ("Int16", "toInt16('1')"), - ("Int32", "toInt32('1')"), - ("Int64", "toInt64('1')"), - ("Float32", "toFloat32('1')"), - ("Float64", "toFloat64('1')"), - ("Decimal32", "toDecimal32(2, 4)"), - ("Decimal64", "toDecimal64(2, 4)"), - ("Decimal128", "toDecimal128(2, 4)"), - ("UUID", "toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')"), - ("Date", "toDate('2020-01-01')"), - ("DateTime", "toDateTime('2020-01-01 20:01:02')"), - ("DateTime64", "toDateTime64('2020-01-01 20:01:02.123', 3)"), + ("UInt8", "reinterpretAsFixedString(toUInt8('1'))"), + ("UInt16", "reinterpretAsFixedString(toUInt16('1'))"), + ("UInt32", "reinterpretAsFixedString(toUInt32('1'))"), + ("UInt64", "reinterpretAsFixedString(toUInt64('1'))"), + ("Int8", "reinterpretAsFixedString(toInt8('1'))"), + ("Int16", "reinterpretAsFixedString(toInt16('1'))"), + ("Int32", "reinterpretAsFixedString(toInt32('1'))"), + ("Int64", "reinterpretAsFixedString(toInt64('1'))"), + ("Float32", "reinterpretAsFixedString(toFloat32('1'))"), + ("Float64", "reinterpretAsFixedString(toFloat64('1'))"), + ("Decimal32", "reinterpretAsFixedString(toDecimal32(2, 4))"), + ("Decimal64", "reinterpretAsFixedString(toDecimal64(2, 4))"), + ("Decimal128", "reinterpretAsFixedString(toDecimal128(2, 4))"), + ("UUID", "reinterpretAsFixedString(toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0'))"), + ("Date", "reinterpretAsFixedString(toDate('2020-01-01'))"), + ("DateTime", "reinterpretAsFixedString(toDateTime('2020-01-01 20:01:02'))"), + ("DateTime64", "reinterpretAsFixedString(toDateTime64('2020-01-01 20:01:02.123', 3))"), ("LowCardinality", "toLowCardinality('1')"), - ("Array", "[1,2]"), + #("Array", "[1,2]"), - not supported #("Tuple", "(1,'a')") - not supported - #("Nullable, "Nullable(X)") - not supported - ("NULL", "toDateOrNull('foo')"), - ("IPv4", "toIPv4('171.225.130.45')"), - ("IPv6", "toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001')"), - ("Enum8", r"CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)')"), - ("Enum16", r"CAST('a', 'Enum16(\'a\' = 1, \'b\' = 2)')"), + ("NULL", "reinterpretAsFixedString(toDateOrNull('foo'))"), + ("NullableString", "toNullable('1')"), + ("NullableStringNull", "toNullable(NULL)"), + ("NullableFixedString", "toNullable(toFixedString('1',2))"), + ("NullableFixedStringNull", "toNullable(toFixedString(NULL,2))"), + ("IPv4", "reinterpretAsFixedString(toIPv4('171.225.130.45'))"), + ("IPv6", "reinterpretAsFixedString(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'))"), + ("Enum8", r"reinterpretAsFixedString(CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)'))"), + ("Enum16", r"reinterpretAsFixedString(CAST('a', 'Enum16(\'a\' = 1, \'b\' = 2)'))"), ] _hex = hex diff --git a/tests/testflows/aes_encryption/tests/decrypt.py b/tests/testflows/aes_encryption/tests/decrypt.py index f29e72109a9..6c99c4d9d41 100644 --- a/tests/testflows/aes_encryption/tests/decrypt.py +++ b/tests/testflows/aes_encryption/tests/decrypt.py @@ -54,7 +54,7 @@ def invalid_ciphertext(self): d_aad = None if not aad_len else f"'{aad}'" for datatype, ciphertext in invalid_ciphertexts: - if datatype in ["NULL"]: + if datatype == "NULL" or datatype.endswith("Null"): continue with When(f"invalid ciphertext={ciphertext}"): if "cfb" in mode or "ofb" in mode or "ctr" in mode: @@ -431,17 +431,10 @@ def decryption(self): ciphertext = f"unhex({ciphertext})" compare = plaintext - if datatype == "IPv4": - cast = "toIPv4(IPv4NumToString(reinterpretAsUInt32" - endcast = "))" - elif datatype in ["DateTime64", "UUID", "IPv6", "LowCardinality", "Enum8", "Enum16", "Decimal32", "Decimal64", "Decimal128", "Array"]: - xfail(reason="no conversion") - elif datatype == "NULL": + if datatype == "NULL" or datatype.endswith("Null"): ciphertext = "NULL" cast = "isNull" compare = None - elif datatype in ["Float32", "Float64", "Date", "DateTime"] or "Int" in datatype: - cast = f"reinterpretAs{datatype}" decrypt(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, iv=(None if not iv_len else f"'{iv[:iv_len]}'"), diff --git a/tests/testflows/aes_encryption/tests/decrypt_mysql.py b/tests/testflows/aes_encryption/tests/decrypt_mysql.py index 608435698d5..52236ae0910 100644 --- a/tests/testflows/aes_encryption/tests/decrypt_mysql.py +++ b/tests/testflows/aes_encryption/tests/decrypt_mysql.py @@ -53,7 +53,7 @@ def invalid_ciphertext(self): d_iv = None if not iv_len else f"'{iv[:iv_len]}'" for datatype, ciphertext in invalid_ciphertexts: - if datatype in ["NULL"]: + if datatype == "NULL" or datatype.endswith("Null"): continue with When(f"invalid ciphertext={ciphertext}"): if "cfb" in mode or "ofb" in mode or "ctr" in mode: @@ -364,17 +364,10 @@ def decryption(self): ciphertext = f"unhex({ciphertext})" compare = plaintext - if datatype == "IPv4": - cast = "toIPv4(IPv4NumToString(reinterpretAsUInt32" - endcast = "))" - elif datatype in ["DateTime64", "UUID", "IPv6", "LowCardinality", "Enum8", "Enum16", "Decimal32", "Decimal64", "Decimal128", "Array"]: - xfail(reason="no conversion") - elif datatype == "NULL": + if datatype == "NULL" or datatype.endswith("Null"): ciphertext = "NULL" cast = "isNull" compare = None - elif datatype in ["Float32", "Float64", "Date", "DateTime"] or "Int" in datatype: - cast = f"reinterpretAs{datatype}" aes_decrypt_mysql(ciphertext=ciphertext, key=f"'{key[:key_len]}'", mode=mode, iv=(None if not iv_len else f"'{iv[:iv_len]}'"), diff --git a/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot b/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot index 7b6f6e45556..953c46f50a4 100644 --- a/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot +++ b/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot @@ -2074,3 +2074,267 @@ example_mode_aes_256_ctr_datatype_utf8string_iv_16_aad_None = r"""'2E9B2BD2B8BA8 example_mode_aes_256_ctr_datatype_utf8fixedstring_iv_16_aad_None = r"""'2E9B2BD2B8BA872DB56225F82754048C944F1E670DF94BAA'""" +example_mode_aes_128_ecb_datatype_NullableString_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'""" + +example_mode_aes_128_ecb_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_ecb_datatype_NullableString_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'""" + +example_mode_aes_192_ecb_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_ecb_datatype_NullableString_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'""" + +example_mode_aes_256_ecb_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableString_iv_None_aad_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'""" + +example_mode_aes_128_cbc_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableString_iv_None_aad_None = r"""'1AE38A541D466EDFED572EE839B0907F'""" + +example_mode_aes_192_cbc_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableString_iv_None_aad_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'""" + +example_mode_aes_256_cbc_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableString_iv_16_aad_None = r"""'D017D171B3865D6EA347E14167261F41'""" + +example_mode_aes_128_cbc_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableString_iv_16_aad_None = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'""" + +example_mode_aes_192_cbc_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableString_iv_16_aad_None = r"""'5E22454D9AC4F1A47B04E2FD98A76140'""" + +example_mode_aes_256_cbc_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableString_iv_None_aad_None = r"""'21'""" + +example_mode_aes_128_cfb128_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableString_iv_None_aad_None = r"""'36'""" + +example_mode_aes_192_cfb128_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableString_iv_None_aad_None = r"""'81'""" + +example_mode_aes_256_cfb128_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableString_iv_16_aad_None = r"""'03'""" + +example_mode_aes_128_cfb128_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableString_iv_16_aad_None = r"""'59'""" + +example_mode_aes_192_cfb128_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableString_iv_16_aad_None = r"""'58'""" + +example_mode_aes_256_cfb128_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableString_iv_None_aad_None = r"""'21'""" + +example_mode_aes_128_ofb_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableString_iv_None_aad_None = r"""'36'""" + +example_mode_aes_192_ofb_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableString_iv_None_aad_None = r"""'81'""" + +example_mode_aes_256_ofb_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableString_iv_16_aad_None = r"""'03'""" + +example_mode_aes_128_ofb_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableString_iv_16_aad_None = r"""'59'""" + +example_mode_aes_192_ofb_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableString_iv_16_aad_None = r"""'58'""" + +example_mode_aes_256_ofb_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_gcm_datatype_NullableString_iv_12_aad_None = r"""'DC48B85D412AEF42C46DA18E25139D5D9D'""" + +example_mode_aes_128_gcm_datatype_NullableStringNull_iv_12_aad_None = r"""'\\N'""" + +example_mode_aes_192_gcm_datatype_NullableString_iv_12_aad_None = r"""'7B34E3F4BAFCD2F3D493F843FFEBF9A415'""" + +example_mode_aes_192_gcm_datatype_NullableStringNull_iv_12_aad_None = r"""'\\N'""" + +example_mode_aes_256_gcm_datatype_NullableString_iv_12_aad_None = r"""'67B83EFC31C169D7613D6881E954F624C2'""" + +example_mode_aes_256_gcm_datatype_NullableStringNull_iv_12_aad_None = r"""'\\N'""" + +example_mode_aes_128_gcm_datatype_NullableString_iv_12_aad_True = r"""'DCFAF1088D33EF99F1D06E3D14F265FD41'""" + +example_mode_aes_128_gcm_datatype_NullableStringNull_iv_12_aad_True = r"""'\\N'""" + +example_mode_aes_192_gcm_datatype_NullableString_iv_12_aad_True = r"""'7BB72D91D66E3C93B34FBAFF92526E1A0E'""" + +example_mode_aes_192_gcm_datatype_NullableStringNull_iv_12_aad_True = r"""'\\N'""" + +example_mode_aes_256_gcm_datatype_NullableString_iv_12_aad_True = r"""'672AAAA73DCD5DEBC924C34E8F6E2678F8'""" + +example_mode_aes_256_gcm_datatype_NullableStringNull_iv_12_aad_True = r"""'\\N'""" + +example_mode_aes_128_ctr_datatype_NullableString_iv_None_aad_None = r"""'21'""" + +example_mode_aes_128_ctr_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_ctr_datatype_NullableString_iv_None_aad_None = r"""'36'""" + +example_mode_aes_192_ctr_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_ctr_datatype_NullableString_iv_None_aad_None = r"""'81'""" + +example_mode_aes_256_ctr_datatype_NullableStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_ctr_datatype_NullableString_iv_16_aad_None = r"""'03'""" + +example_mode_aes_128_ctr_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_ctr_datatype_NullableString_iv_16_aad_None = r"""'59'""" + +example_mode_aes_192_ctr_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_ctr_datatype_NullableString_iv_16_aad_None = r"""'58'""" + +example_mode_aes_256_ctr_datatype_NullableStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_ecb_datatype_NullableFixedString_iv_None_aad_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_128_ecb_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_ecb_datatype_NullableFixedString_iv_None_aad_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_192_ecb_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_ecb_datatype_NullableFixedString_iv_None_aad_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_256_ecb_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableFixedString_iv_None_aad_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_128_cbc_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableFixedString_iv_None_aad_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_192_cbc_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableFixedString_iv_None_aad_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_256_cbc_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableFixedString_iv_16_aad_None = r"""'ECE42AF0000893B1D1A43993506376A4'""" + +example_mode_aes_128_cbc_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableFixedString_iv_16_aad_None = r"""'0A8E8BA80EB490740B91937D4A5FF84C'""" + +example_mode_aes_192_cbc_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableFixedString_iv_16_aad_None = r"""'4A3A13D0807C29D4FA9CAEE6B9A67E7D'""" + +example_mode_aes_256_cbc_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedString_iv_None_aad_None = r"""'21DF'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedString_iv_None_aad_None = r"""'36B7'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedString_iv_None_aad_None = r"""'818E'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedString_iv_16_aad_None = r"""'0388'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedString_iv_16_aad_None = r"""'59C7'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedString_iv_16_aad_None = r"""'5858'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableFixedString_iv_None_aad_None = r"""'21DF'""" + +example_mode_aes_128_ofb_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableFixedString_iv_None_aad_None = r"""'36B7'""" + +example_mode_aes_192_ofb_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableFixedString_iv_None_aad_None = r"""'818E'""" + +example_mode_aes_256_ofb_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableFixedString_iv_16_aad_None = r"""'0388'""" + +example_mode_aes_128_ofb_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableFixedString_iv_16_aad_None = r"""'59C7'""" + +example_mode_aes_192_ofb_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableFixedString_iv_16_aad_None = r"""'5858'""" + +example_mode_aes_256_ofb_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_128_gcm_datatype_NullableFixedString_iv_12_aad_None = r"""'DC9659BBB6F4D4C40DCD095F1FD69A4E5B9C'""" + +example_mode_aes_128_gcm_datatype_NullableFixedStringNull_iv_12_aad_None = r"""'\\N'""" + +example_mode_aes_192_gcm_datatype_NullableFixedString_iv_12_aad_None = r"""'7BFA19E7769CC955EDD39D806A13BF6AF8E3'""" + +example_mode_aes_192_gcm_datatype_NullableFixedStringNull_iv_12_aad_None = r"""'\\N'""" + +example_mode_aes_256_gcm_datatype_NullableFixedString_iv_12_aad_None = r"""'67CB36E371A5C5F544B1EFEC353A84FE0B2F'""" + +example_mode_aes_256_gcm_datatype_NullableFixedStringNull_iv_12_aad_None = r"""'\\N'""" + +example_mode_aes_128_gcm_datatype_NullableFixedString_iv_12_aad_True = r"""'DC96EBF2E338CDC4D6F8B490ACE77BB6FB40'""" + +example_mode_aes_128_gcm_datatype_NullableFixedStringNull_iv_12_aad_True = r"""'\\N'""" + +example_mode_aes_192_gcm_datatype_NullableFixedString_iv_12_aad_True = r"""'7BFA9A2913F05BBB8DB441C2D67E06FD46F8'""" + +example_mode_aes_192_gcm_datatype_NullableFixedStringNull_iv_12_aad_True = r"""'\\N'""" + +example_mode_aes_256_gcm_datatype_NullableFixedString_iv_12_aad_True = r"""'67CBA4772AA9C9C17819F647FA5CBE2E5715'""" + +example_mode_aes_256_gcm_datatype_NullableFixedStringNull_iv_12_aad_True = r"""'\\N'""" + +example_mode_aes_128_ctr_datatype_NullableFixedString_iv_None_aad_None = r"""'21DF'""" + +example_mode_aes_128_ctr_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_192_ctr_datatype_NullableFixedString_iv_None_aad_None = r"""'36B7'""" + +example_mode_aes_192_ctr_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_256_ctr_datatype_NullableFixedString_iv_None_aad_None = r"""'818E'""" + +example_mode_aes_256_ctr_datatype_NullableFixedStringNull_iv_None_aad_None = r"""'\\N'""" + +example_mode_aes_128_ctr_datatype_NullableFixedString_iv_16_aad_None = r"""'0388'""" + +example_mode_aes_128_ctr_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_192_ctr_datatype_NullableFixedString_iv_16_aad_None = r"""'59C7'""" + +example_mode_aes_192_ctr_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + +example_mode_aes_256_ctr_datatype_NullableFixedString_iv_16_aad_None = r"""'5858'""" + +example_mode_aes_256_ctr_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" + diff --git a/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot b/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot index 8d49719796a..9dee5d818d6 100644 --- a/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot +++ b/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot @@ -1978,3 +1978,267 @@ example_mode_aes_256_ofb_datatype_Enum8_key_64_iv_64 = r"""'D2'""" example_mode_aes_256_ofb_datatype_Enum16_key_64_iv_64 = r"""'D2EE'""" +example_mode_aes_128_ecb_datatype_NullableString_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'""" + +example_mode_aes_128_ecb_datatype_NullableStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_128_ecb_datatype_NullableFixedString_key_16_iv_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_128_ecb_datatype_NullableFixedStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_128_ecb_datatype_NullableString_key_24_iv_None = r"""'697175286BC73A26C572DBD9480738F3'""" + +example_mode_aes_128_ecb_datatype_NullableStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_128_ecb_datatype_NullableFixedString_key_24_iv_None = r"""'824777897B48FB42AE19EBF2835AE5BA'""" + +example_mode_aes_128_ecb_datatype_NullableFixedStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_192_ecb_datatype_NullableString_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'""" + +example_mode_aes_192_ecb_datatype_NullableStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_192_ecb_datatype_NullableFixedString_key_24_iv_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_192_ecb_datatype_NullableFixedStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_192_ecb_datatype_NullableString_key_32_iv_None = r"""'851106E40808E28682DAC1AD840A7E92'""" + +example_mode_aes_192_ecb_datatype_NullableStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_192_ecb_datatype_NullableFixedString_key_32_iv_None = r"""'24268978B72821002456FF2204B0F9B9'""" + +example_mode_aes_192_ecb_datatype_NullableFixedStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_256_ecb_datatype_NullableString_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'""" + +example_mode_aes_256_ecb_datatype_NullableStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_256_ecb_datatype_NullableFixedString_key_32_iv_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_256_ecb_datatype_NullableFixedStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_256_ecb_datatype_NullableString_key_64_iv_None = r"""'7492B9A2D0E86DAF1DBCAEDBAD9E3D7E'""" + +example_mode_aes_256_ecb_datatype_NullableStringNull_key_64_iv_None = r"""'\\N'""" + +example_mode_aes_256_ecb_datatype_NullableFixedString_key_64_iv_None = r"""'F2FACC4703F559D74555D10CA4850F40'""" + +example_mode_aes_256_ecb_datatype_NullableFixedStringNull_key_64_iv_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableString_key_16_iv_None = r"""'7C51909F95C1E9B886A3487CD3EBED69'""" + +example_mode_aes_128_cbc_datatype_NullableStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableFixedString_key_16_iv_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_128_cbc_datatype_NullableFixedStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableString_key_24_iv_None = r"""'1AE38A541D466EDFED572EE839B0907F'""" + +example_mode_aes_192_cbc_datatype_NullableStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableFixedString_key_24_iv_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_192_cbc_datatype_NullableFixedStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableString_key_32_iv_None = r"""'C91184ED1E67F0CDED89B097D5D3B130'""" + +example_mode_aes_256_cbc_datatype_NullableStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableFixedString_key_32_iv_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_256_cbc_datatype_NullableFixedStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableString_key_16_iv_16 = r"""'D017D171B3865D6EA347E14167261F41'""" + +example_mode_aes_128_cbc_datatype_NullableStringNull_key_16_iv_16 = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableFixedString_key_16_iv_16 = r"""'ECE42AF0000893B1D1A43993506376A4'""" + +example_mode_aes_128_cbc_datatype_NullableFixedStringNull_key_16_iv_16 = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableString_key_24_iv_24 = r"""'73C9874744984892250CCCEC8541D690'""" + +example_mode_aes_128_cbc_datatype_NullableStringNull_key_24_iv_24 = r"""'\\N'""" + +example_mode_aes_128_cbc_datatype_NullableFixedString_key_24_iv_24 = r"""'C55AC3DA9276DBF066AC408BFCF011DD'""" + +example_mode_aes_128_cbc_datatype_NullableFixedStringNull_key_24_iv_24 = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableString_key_24_iv_16 = r"""'A3DB45D129A5C9FDB5ED66E782B28BD2'""" + +example_mode_aes_192_cbc_datatype_NullableStringNull_key_24_iv_16 = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableFixedString_key_24_iv_16 = r"""'0A8E8BA80EB490740B91937D4A5FF84C'""" + +example_mode_aes_192_cbc_datatype_NullableFixedStringNull_key_24_iv_16 = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableString_key_32_iv_32 = r"""'508551DA505F6538F90DC607423CFAD4'""" + +example_mode_aes_192_cbc_datatype_NullableStringNull_key_32_iv_32 = r"""'\\N'""" + +example_mode_aes_192_cbc_datatype_NullableFixedString_key_32_iv_32 = r"""'723C4EB7399AE6F019109651B376A111'""" + +example_mode_aes_192_cbc_datatype_NullableFixedStringNull_key_32_iv_32 = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableString_key_32_iv_16 = r"""'5E22454D9AC4F1A47B04E2FD98A76140'""" + +example_mode_aes_256_cbc_datatype_NullableStringNull_key_32_iv_16 = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableFixedString_key_32_iv_16 = r"""'4A3A13D0807C29D4FA9CAEE6B9A67E7D'""" + +example_mode_aes_256_cbc_datatype_NullableFixedStringNull_key_32_iv_16 = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableString_key_64_iv_64 = r"""'4CE9C9AFDC1E1E1EF2D1F4C141CE1874'""" + +example_mode_aes_256_cbc_datatype_NullableStringNull_key_64_iv_64 = r"""'\\N'""" + +example_mode_aes_256_cbc_datatype_NullableFixedString_key_64_iv_64 = r"""'5547B945A6810130CFC689C22530FA26'""" + +example_mode_aes_256_cbc_datatype_NullableFixedStringNull_key_64_iv_64 = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableString_key_16_iv_None = r"""'21'""" + +example_mode_aes_128_cfb128_datatype_NullableStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedString_key_16_iv_None = r"""'21DF'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableString_key_24_iv_None = r"""'36'""" + +example_mode_aes_192_cfb128_datatype_NullableStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedString_key_24_iv_None = r"""'36B7'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableString_key_32_iv_None = r"""'81'""" + +example_mode_aes_256_cfb128_datatype_NullableStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedString_key_32_iv_None = r"""'818E'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableString_key_16_iv_16 = r"""'03'""" + +example_mode_aes_128_cfb128_datatype_NullableStringNull_key_16_iv_16 = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedString_key_16_iv_16 = r"""'0388'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedStringNull_key_16_iv_16 = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableString_key_24_iv_24 = r"""'6A'""" + +example_mode_aes_128_cfb128_datatype_NullableStringNull_key_24_iv_24 = r"""'\\N'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedString_key_24_iv_24 = r"""'6A77'""" + +example_mode_aes_128_cfb128_datatype_NullableFixedStringNull_key_24_iv_24 = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableString_key_24_iv_16 = r"""'59'""" + +example_mode_aes_192_cfb128_datatype_NullableStringNull_key_24_iv_16 = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedString_key_24_iv_16 = r"""'59C7'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedStringNull_key_24_iv_16 = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableString_key_32_iv_32 = r"""'00'""" + +example_mode_aes_192_cfb128_datatype_NullableStringNull_key_32_iv_32 = r"""'\\N'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedString_key_32_iv_32 = r"""'00A0'""" + +example_mode_aes_192_cfb128_datatype_NullableFixedStringNull_key_32_iv_32 = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableString_key_32_iv_16 = r"""'58'""" + +example_mode_aes_256_cfb128_datatype_NullableStringNull_key_32_iv_16 = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedString_key_32_iv_16 = r"""'5858'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedStringNull_key_32_iv_16 = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableString_key_64_iv_64 = r"""'E2'""" + +example_mode_aes_256_cfb128_datatype_NullableStringNull_key_64_iv_64 = r"""'\\N'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedString_key_64_iv_64 = r"""'E2EE'""" + +example_mode_aes_256_cfb128_datatype_NullableFixedStringNull_key_64_iv_64 = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableString_key_16_iv_None = r"""'21'""" + +example_mode_aes_128_ofb_datatype_NullableStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableFixedString_key_16_iv_None = r"""'21DF'""" + +example_mode_aes_128_ofb_datatype_NullableFixedStringNull_key_16_iv_None = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableString_key_24_iv_None = r"""'36'""" + +example_mode_aes_192_ofb_datatype_NullableStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableFixedString_key_24_iv_None = r"""'36B7'""" + +example_mode_aes_192_ofb_datatype_NullableFixedStringNull_key_24_iv_None = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableString_key_32_iv_None = r"""'81'""" + +example_mode_aes_256_ofb_datatype_NullableStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableFixedString_key_32_iv_None = r"""'818E'""" + +example_mode_aes_256_ofb_datatype_NullableFixedStringNull_key_32_iv_None = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableString_key_16_iv_16 = r"""'03'""" + +example_mode_aes_128_ofb_datatype_NullableStringNull_key_16_iv_16 = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableFixedString_key_16_iv_16 = r"""'0388'""" + +example_mode_aes_128_ofb_datatype_NullableFixedStringNull_key_16_iv_16 = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableString_key_24_iv_24 = r"""'6A'""" + +example_mode_aes_128_ofb_datatype_NullableStringNull_key_24_iv_24 = r"""'\\N'""" + +example_mode_aes_128_ofb_datatype_NullableFixedString_key_24_iv_24 = r"""'6A77'""" + +example_mode_aes_128_ofb_datatype_NullableFixedStringNull_key_24_iv_24 = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableString_key_24_iv_16 = r"""'59'""" + +example_mode_aes_192_ofb_datatype_NullableStringNull_key_24_iv_16 = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableFixedString_key_24_iv_16 = r"""'59C7'""" + +example_mode_aes_192_ofb_datatype_NullableFixedStringNull_key_24_iv_16 = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableString_key_32_iv_32 = r"""'00'""" + +example_mode_aes_192_ofb_datatype_NullableStringNull_key_32_iv_32 = r"""'\\N'""" + +example_mode_aes_192_ofb_datatype_NullableFixedString_key_32_iv_32 = r"""'00A0'""" + +example_mode_aes_192_ofb_datatype_NullableFixedStringNull_key_32_iv_32 = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableString_key_32_iv_16 = r"""'58'""" + +example_mode_aes_256_ofb_datatype_NullableStringNull_key_32_iv_16 = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableFixedString_key_32_iv_16 = r"""'5858'""" + +example_mode_aes_256_ofb_datatype_NullableFixedStringNull_key_32_iv_16 = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableString_key_64_iv_64 = r"""'E2'""" + +example_mode_aes_256_ofb_datatype_NullableStringNull_key_64_iv_64 = r"""'\\N'""" + +example_mode_aes_256_ofb_datatype_NullableFixedString_key_64_iv_64 = r"""'E2EE'""" + +example_mode_aes_256_ofb_datatype_NullableFixedStringNull_key_64_iv_64 = r"""'\\N'""" + From 9c5d83d6bc5bc162f517c46c0872b28e9c92dbab Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Tue, 26 Jan 2021 22:55:06 +0300 Subject: [PATCH 09/48] Check that tests with query_log/query_thread_log includes current_database filter --- utils/check-style/check-style | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/utils/check-style/check-style b/utils/check-style/check-style index f1f7b3fab16..78caca4b559 100755 --- a/utils/check-style/check-style +++ b/utils/check-style/check-style @@ -79,6 +79,17 @@ find $ROOT_PATH/tests/queries -iname '*fail*' | grep -vP $EXCLUDE_DIRS | grep . && echo 'Tests should not be named with "fail" in their names. It makes looking at the results less convenient when you search for "fail" substring in browser.' +# Queries to system.query_log/system.query_thread_log should have current_database = currentDatabase() condition +# NOTE: it is not that accuate, but at least something. +tests_with_query_log=( $( + find $ROOT_PATH/tests/queries -iname '*.sql' -or -iname '*.sh' -or -iname '*.py' | + grep -vP $EXCLUDE_DIRS | + xargs grep --with-filename -e system.query_log -e system.query_thread_log | cut -d: -f1 | sort -u +) ) +for test_case in "${tests_with_query_log[@]}"; do + grep -qE current_database.*currentDatabase "$test_case" || echo "Queries to system.query_log/system.query_thread_log does not have current_database = currentDatabase() condition in $test_case" +done + # All the submodules should be from https://github.com/ find $ROOT_PATH -name '.gitmodules' | while read i; do grep -F 'url = ' $i | grep -v -F 'https://github.com/' && echo 'All the submodules should be from https://github.com/'; done From 924e5c6ad3571d4fcde5a66e3648cbe75e24bc15 Mon Sep 17 00:00:00 2001 From: Olga Revyakina Date: Wed, 27 Jan 2021 00:20:49 +0300 Subject: [PATCH 10/48] Old syntax deleted --- docs/en/sql-reference/statements/alter/quota.md | 5 +---- .../en/sql-reference/statements/create/quota.md | 17 +---------------- docs/ru/sql-reference/statements/alter/quota.md | 5 +---- .../ru/sql-reference/statements/create/quota.md | 6 +----- 4 files changed, 4 insertions(+), 29 deletions(-) diff --git a/docs/en/sql-reference/statements/alter/quota.md b/docs/en/sql-reference/statements/alter/quota.md index 08a36e8598c..18083e4a523 100644 --- a/docs/en/sql-reference/statements/alter/quota.md +++ b/docs/en/sql-reference/statements/alter/quota.md @@ -12,15 +12,12 @@ Syntax: ``` sql ALTER QUOTA [IF EXISTS] name [ON CLUSTER cluster_name] [RENAME TO new_name] - [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] + [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` -Multiword key types may be written either with underscores (`CLIENT_KEY`), or with spaces and in simple quotes (`'client key'`). You may also use `'client key or user name'` instead of `CLIENT_KEY, USER_NAME`, and `'client key or ip address'` instead of `CLIENT_KEY, IP_ADDRESS`. - -Multiword resource types may be written either with underscores (`RESULT_ROWS`) or without them (`RESULT ROWS`). **Examples** diff --git a/docs/en/sql-reference/statements/create/quota.md b/docs/en/sql-reference/statements/create/quota.md index 8ae49e4e1a8..d284dfa0ded 100644 --- a/docs/en/sql-reference/statements/create/quota.md +++ b/docs/en/sql-reference/statements/create/quota.md @@ -11,7 +11,7 @@ Syntax: ``` sql CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] - [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] + [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] @@ -19,21 +19,6 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] ``` `ON CLUSTER` clause allows creating quotas on a cluster, see [Distributed DDL](../../../sql-reference/distributed-ddl.md). - -Multiword key types may be written either with underscores (`CLIENT_KEY`), or with spaces and in simple quotes (`'client key'`). You may also use `'client key or user name'` instead of `CLIENT_KEY, USER_NAME`, and `'client key or ip address'` instead of `CLIENT_KEY, IP_ADDRESS`. - -Multiword resource types may be written either with underscores (`RESULT_ROWS`) or without them (`RESULT ROWS`). -## Example {#create-quota-example} - -Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: - -``` sql -CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER -``` -Multiword key types may be written either with underscores (`CLIENT_KEY`), or with spaces and in simple quotes (`'client key'`). You can also use `'client key or user name'` instead of `CLIENT_KEY, USER_NAME`, and `'client key or ip address'` instead of `CLIENT_KEY, IP_ADDRESS`. - -Multiword resource types may be written either with underscores (`RESULT_ROWS`) or without them (`RESULT ROWS`). - ## Examples {#create-quota-example} Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: diff --git a/docs/ru/sql-reference/statements/alter/quota.md b/docs/ru/sql-reference/statements/alter/quota.md index 4f524db2a6d..1abb6336321 100644 --- a/docs/ru/sql-reference/statements/alter/quota.md +++ b/docs/ru/sql-reference/statements/alter/quota.md @@ -12,15 +12,12 @@ toc_title: QUOTA ``` sql ALTER QUOTA [IF EXISTS] name [ON CLUSTER cluster_name] [RENAME TO new_name] - [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] + [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` -Поддерживаются два варианта написания составных типов ключей: с подчеркиванием (`CLIENT_KEY`) или через пробел и в одинарных кавычках (`'client key'`). Также можно использовать ключ `'client key or user name'` вместо `CLIENT_KEY, USER_NAME`, и ключ `'client key or ip address'` вместо `CLIENT_KEY, IP_ADDRESS`. - -Поддерживаются также два варианта написания составных типов ресурсов: с подчеркиванием (`RESULT_ROWS`) или без подчеркивания, через пробел (`RESULT ROWS`). **Примеры** diff --git a/docs/ru/sql-reference/statements/create/quota.md b/docs/ru/sql-reference/statements/create/quota.md index 073c4eda85c..8ae3cc45ee1 100644 --- a/docs/ru/sql-reference/statements/create/quota.md +++ b/docs/ru/sql-reference/statements/create/quota.md @@ -11,7 +11,7 @@ toc_title: "\u041a\u0432\u043e\u0442\u0430" ``` sql CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] - [KEYED BY {NONE | USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] + [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] @@ -20,10 +20,6 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] В секции `ON CLUSTER` можно указать кластеры, на которых создается квота, см. [Распределенные DDL запросы](../../../sql-reference/distributed-ddl.md). -Поддерживаются два варианта написания составных типов ключей: с подчеркиванием (`CLIENT_KEY`) или через пробел и в одинарных кавычках (`'client key'`). Также можно использовать ключ `'client key or user name'` вместо `CLIENT_KEY, USER_NAME`, и ключ `'client key or ip address'` вместо `CLIENT_KEY, IP_ADDRESS`. - -Поддерживаются также два варианта написания составных типов ресурсов: с подчеркиванием (`RESULT_ROWS`) или без подчеркивания, через пробел (`RESULT ROWS`). - **Примеры** Ограничить максимальное количество запросов для текущего пользователя — не более 123 запросов за каждые 15 месяцев: From a767eb5b51079ac210e54a1029060ed29b1cae0d Mon Sep 17 00:00:00 2001 From: Olga Revyakina Date: Wed, 27 Jan 2021 00:25:34 +0300 Subject: [PATCH 11/48] Syntax (headings) unified --- docs/en/sql-reference/statements/create/quota.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/en/sql-reference/statements/create/quota.md b/docs/en/sql-reference/statements/create/quota.md index d284dfa0ded..8f3b89790e4 100644 --- a/docs/en/sql-reference/statements/create/quota.md +++ b/docs/en/sql-reference/statements/create/quota.md @@ -19,7 +19,8 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] ``` `ON CLUSTER` clause allows creating quotas on a cluster, see [Distributed DDL](../../../sql-reference/distributed-ddl.md). -## Examples {#create-quota-example} + +**Examples** Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: From 0a1fd29ee670aaaa0e011f07028a6502efb63f63 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Tue, 26 Jan 2021 22:56:11 +0300 Subject: [PATCH 12/48] Add current_database = currentDatabase() filter for tests with query_log/query_thread_log --- .../00634_performance_introspection_and_logging.sh | 2 +- .../00731_long_merge_tree_select_opened_files.sh | 2 +- ...0933_test_fix_extra_seek_on_compressed_cache.sh | 2 +- .../0_stateless/00956_sensitive_data_masking.sh | 2 +- tests/queries/0_stateless/00974_query_profiler.sql | 4 ++-- .../01070_exception_code_in_query_log_table.sql | 2 +- .../01076_array_join_prewhere_const_folding.sql | 2 +- .../0_stateless/01088_benchmark_query_id.sh | 2 +- tests/queries/0_stateless/01091_num_threads.sql | 6 +++--- .../queries/0_stateless/01092_memory_profiler.sql | 2 +- .../queries/0_stateless/01193_metadata_loading.sh | 2 +- tests/queries/0_stateless/01194_http_query_id.sh | 2 +- .../queries/0_stateless/01198_client_quota_key.sh | 2 +- .../0_stateless/01231_log_queries_min_type.sql | 7 ++++--- ...01283_max_threads_simple_query_optimization.sql | 2 +- .../01290_max_execution_speed_distributed.sql | 1 + .../0_stateless/01323_too_many_threads_bug.sql | 4 ++-- .../0_stateless/01343_min_bytes_to_use_mmap_io.sql | 2 +- .../01344_min_bytes_to_use_mmap_io_index.sql | 2 +- tests/queries/0_stateless/01356_view_threads.sql | 2 +- tests/queries/0_stateless/01357_result_rows.sql | 2 +- .../0_stateless/01358_union_threads_bug.sql | 2 +- ...60_materialized_view_with_join_on_query_log.sql | 4 +++- tests/queries/0_stateless/01413_rows_events.sql | 12 ++++++------ .../01415_overlimiting_threads_for_repica_bug.sql | 2 +- .../0_stateless/01455_opentelemetry_distributed.sh | 6 ++++-- .../01461_query_start_time_microseconds.sql | 6 +++++- .../0_stateless/01473_event_time_microseconds.sql | 3 +++ .../queries/0_stateless/01526_initial_query_id.sh | 2 +- .../0_stateless/01526_max_untracked_memory.sh | 2 +- .../01560_crash_in_agg_empty_arglist.sql | 2 +- .../01600_log_queries_with_extensive_info.sh | 2 +- .../queries/0_stateless/01651_bugs_from_15889.sql | 8 ++++++-- .../01656_test_query_log_factories_info.sql | 14 +++++++------- tests/queries/0_stateless/01661_referer.sh | 2 +- tests/queries/0_stateless/01670_log_comment.sql | 4 ++-- 36 files changed, 71 insertions(+), 54 deletions(-) diff --git a/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh b/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh index c645bea23b3..e51e4fea5db 100755 --- a/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh +++ b/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh @@ -48,7 +48,7 @@ SELECT threads_realtime >= threads_time_user_system_io, any(length(thread_ids)) >= 1 FROM - (SELECT * FROM system.query_log PREWHERE query='$heavy_cpu_query' WHERE event_date >= today()-1 AND type=2 ORDER BY event_time DESC LIMIT 1) + (SELECT * FROM system.query_log PREWHERE query='$heavy_cpu_query' WHERE event_date >= today()-1 AND current_database = currentDatabase() AND type=2 ORDER BY event_time DESC LIMIT 1) ARRAY JOIN ProfileEvents.Names AS PN, ProfileEvents.Values AS PV" # Clean diff --git a/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh b/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh index 25a742a481a..c2274c53399 100755 --- a/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh +++ b/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh @@ -28,6 +28,6 @@ $CLICKHOUSE_CLIENT $settings -q "$touching_many_parts_query" &> /dev/null $CLICKHOUSE_CLIENT $settings -q "SYSTEM FLUSH LOGS" -$CLICKHOUSE_CLIENT $settings -q "SELECT pi.Values FROM system.query_log ARRAY JOIN ProfileEvents as pi WHERE query='$touching_many_parts_query' and pi.Names = 'FileOpen' ORDER BY event_time DESC LIMIT 1;" +$CLICKHOUSE_CLIENT $settings -q "SELECT pi.Values FROM system.query_log ARRAY JOIN ProfileEvents as pi WHERE query='$touching_many_parts_query' and current_database = currentDatabase() and pi.Names = 'FileOpen' ORDER BY event_time DESC LIMIT 1;" $CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS merge_tree_table;" diff --git a/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh b/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh index 2b9a69d19d4..9865baaa1b9 100755 --- a/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh +++ b/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh @@ -20,7 +20,7 @@ $CLICKHOUSE_CLIENT --use_uncompressed_cache=1 --query_id="test-query-uncompresse $CLICKHOUSE_CLIENT --query="SYSTEM FLUSH LOGS" -$CLICKHOUSE_CLIENT --query="SELECT ProfileEvents.Values[indexOf(ProfileEvents.Names, 'Seek')], ProfileEvents.Values[indexOf(ProfileEvents.Names, 'ReadCompressedBytes')], ProfileEvents.Values[indexOf(ProfileEvents.Names, 'UncompressedCacheHits')] AS hit FROM system.query_log WHERE (query_id = 'test-query-uncompressed-cache') AND (type = 2) AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1" +$CLICKHOUSE_CLIENT --query="SELECT ProfileEvents.Values[indexOf(ProfileEvents.Names, 'Seek')], ProfileEvents.Values[indexOf(ProfileEvents.Names, 'ReadCompressedBytes')], ProfileEvents.Values[indexOf(ProfileEvents.Names, 'UncompressedCacheHits')] AS hit FROM system.query_log WHERE (query_id = 'test-query-uncompressed-cache') AND current_database = currentDatabase() AND (type = 2) AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1" $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS small_table" diff --git a/tests/queries/0_stateless/00956_sensitive_data_masking.sh b/tests/queries/0_stateless/00956_sensitive_data_masking.sh index 799941e94bf..764cb6a713e 100755 --- a/tests/queries/0_stateless/00956_sensitive_data_masking.sh +++ b/tests/queries/0_stateless/00956_sensitive_data_masking.sh @@ -97,7 +97,7 @@ echo 7 # and finally querylog $CLICKHOUSE_CLIENT \ --server_logs_file=/dev/null \ - --query="select * from system.query_log where event_time > now() - 10 and query like '%TOPSECRET%';" + --query="select * from system.query_log where current_database = currentDatabase() AND event_time > now() - 10 and query like '%TOPSECRET%';" rm -f "$tmp_file" >/dev/null 2>&1 diff --git a/tests/queries/0_stateless/00974_query_profiler.sql b/tests/queries/0_stateless/00974_query_profiler.sql index c5c073abfa9..9bfd44628c9 100644 --- a/tests/queries/0_stateless/00974_query_profiler.sql +++ b/tests/queries/0_stateless/00974_query_profiler.sql @@ -7,7 +7,7 @@ SET log_queries = 0; SYSTEM FLUSH LOGS; WITH addressToLine(arrayJoin(trace) AS addr) || '#' || demangle(addressToSymbol(addr)) AS symbol -SELECT count() > 0 FROM system.trace_log t WHERE query_id = (SELECT query_id FROM system.query_log WHERE query LIKE '%test real time query profiler%' AND query NOT LIKE '%system%' ORDER BY event_time DESC LIMIT 1) AND symbol LIKE '%FunctionSleep%'; +SELECT count() > 0 FROM system.trace_log t WHERE query_id = (SELECT query_id FROM system.query_log WHERE current_database = currentDatabase() AND query LIKE '%test real time query profiler%' AND query NOT LIKE '%system%' ORDER BY event_time DESC LIMIT 1) AND symbol LIKE '%FunctionSleep%'; SET query_profiler_real_time_period_ns = 0; SET query_profiler_cpu_time_period_ns = 1000000; @@ -17,4 +17,4 @@ SET log_queries = 0; SYSTEM FLUSH LOGS; WITH addressToLine(arrayJoin(trace) AS addr) || '#' || demangle(addressToSymbol(addr)) AS symbol -SELECT count() > 0 FROM system.trace_log t WHERE query_id = (SELECT query_id FROM system.query_log WHERE query LIKE '%test cpu time query profiler%' AND query NOT LIKE '%system%' ORDER BY event_time DESC LIMIT 1) AND symbol LIKE '%Source%'; +SELECT count() > 0 FROM system.trace_log t WHERE query_id = (SELECT query_id FROM system.query_log WHERE current_database = currentDatabase() AND query LIKE '%test cpu time query profiler%' AND query NOT LIKE '%system%' ORDER BY event_time DESC LIMIT 1) AND symbol LIKE '%Source%'; diff --git a/tests/queries/0_stateless/01070_exception_code_in_query_log_table.sql b/tests/queries/0_stateless/01070_exception_code_in_query_log_table.sql index b9627a0f8a8..eae7f653d3e 100644 --- a/tests/queries/0_stateless/01070_exception_code_in_query_log_table.sql +++ b/tests/queries/0_stateless/01070_exception_code_in_query_log_table.sql @@ -3,5 +3,5 @@ SELECT * FROM test_table_for_01070_exception_code_in_query_log_table; -- { serve CREATE TABLE test_table_for_01070_exception_code_in_query_log_table (value UInt64) ENGINE=Memory(); SELECT * FROM test_table_for_01070_exception_code_in_query_log_table; SYSTEM FLUSH LOGS; -SELECT exception_code FROM system.query_log WHERE lower(query) LIKE lower('SELECT * FROM test_table_for_01070_exception_code_in_query_log_table%') AND event_date >= yesterday() AND event_time > now() - INTERVAL 5 MINUTE ORDER BY exception_code; +SELECT exception_code FROM system.query_log WHERE current_database = currentDatabase() AND lower(query) LIKE lower('SELECT * FROM test_table_for_01070_exception_code_in_query_log_table%') AND event_date >= yesterday() AND event_time > now() - INTERVAL 5 MINUTE ORDER BY exception_code; DROP TABLE IF EXISTS test_table_for_01070_exception_code_in_query_log_table; diff --git a/tests/queries/0_stateless/01076_array_join_prewhere_const_folding.sql b/tests/queries/0_stateless/01076_array_join_prewhere_const_folding.sql index 7b80004864d..2ab87fa883a 100644 --- a/tests/queries/0_stateless/01076_array_join_prewhere_const_folding.sql +++ b/tests/queries/0_stateless/01076_array_join_prewhere_const_folding.sql @@ -5,6 +5,6 @@ SYSTEM FLUSH LOGS; SELECT arrayJoin AS kv_key FROM system.query_log ARRAY JOIN ProfileEvents.Names AS arrayJoin -PREWHERE has(arrayMap(key -> key, ProfileEvents.Names), 'Query') +PREWHERE current_database = currentDatabase() AND has(arrayMap(key -> key, ProfileEvents.Names), 'Query') WHERE arrayJoin = 'Query' LIMIT 0; diff --git a/tests/queries/0_stateless/01088_benchmark_query_id.sh b/tests/queries/0_stateless/01088_benchmark_query_id.sh index cc3531282dd..2f44c36eccc 100755 --- a/tests/queries/0_stateless/01088_benchmark_query_id.sh +++ b/tests/queries/0_stateless/01088_benchmark_query_id.sh @@ -7,4 +7,4 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) QUERY_ID=$RANDOM $CLICKHOUSE_BENCHMARK <<< "SELECT 1" --query_id $QUERY_ID -i 10 2>/dev/null $CLICKHOUSE_CLIENT -q "SYSTEM FLUSH LOGS" -$CLICKHOUSE_CLIENT -q "SELECT count() FROM system.query_log WHERE query_id='$QUERY_ID'" +$CLICKHOUSE_CLIENT -q "SELECT count() FROM system.query_log WHERE current_database = currentDatabase() AND query_id='$QUERY_ID'" diff --git a/tests/queries/0_stateless/01091_num_threads.sql b/tests/queries/0_stateless/01091_num_threads.sql index b51b8561c21..e32d663880f 100644 --- a/tests/queries/0_stateless/01091_num_threads.sql +++ b/tests/queries/0_stateless/01091_num_threads.sql @@ -8,7 +8,7 @@ WITH ( SELECT query_id FROM system.query_log - WHERE (normalizeQuery(query) like normalizeQuery('WITH 01091 AS id SELECT 1;')) AND (event_date >= (today() - 1)) + WHERE current_database = currentDatabase() AND (normalizeQuery(query) like normalizeQuery('WITH 01091 AS id SELECT 1;')) AND (event_date >= (today() - 1)) ORDER BY event_time DESC LIMIT 1 ) AS id @@ -23,7 +23,7 @@ WITH ( SELECT query_id FROM system.query_log - WHERE (normalizeQuery(query) = normalizeQuery('with 01091 as id select sum(number) from numbers(1000000);')) AND (event_date >= (today() - 1)) + WHERE current_database = currentDatabase() AND (normalizeQuery(query) = normalizeQuery('with 01091 as id select sum(number) from numbers(1000000);')) AND (event_date >= (today() - 1)) ORDER BY event_time DESC LIMIT 1 ) AS id @@ -38,7 +38,7 @@ WITH ( SELECT query_id FROM system.query_log - WHERE (normalizeQuery(query) = normalizeQuery('with 01091 as id select sum(number) from numbers_mt(1000000);')) AND (event_date >= (today() - 1)) + WHERE current_database = currentDatabase() AND (normalizeQuery(query) = normalizeQuery('with 01091 as id select sum(number) from numbers_mt(1000000);')) AND (event_date >= (today() - 1)) ORDER BY event_time DESC LIMIT 1 ) AS id diff --git a/tests/queries/0_stateless/01092_memory_profiler.sql b/tests/queries/0_stateless/01092_memory_profiler.sql index c20b5c79cdb..b0bfca8e494 100644 --- a/tests/queries/0_stateless/01092_memory_profiler.sql +++ b/tests/queries/0_stateless/01092_memory_profiler.sql @@ -3,4 +3,4 @@ SET allow_introspection_functions = 1; SET memory_profiler_step = 1000000; SELECT ignore(groupArray(number), 'test memory profiler') FROM numbers(10000000); SYSTEM FLUSH LOGS; -WITH addressToSymbol(arrayJoin(trace)) AS symbol SELECT count() > 0 FROM system.trace_log t WHERE event_date >= yesterday() AND trace_type = 'Memory' AND query_id = (SELECT query_id FROM system.query_log WHERE event_date >= yesterday() AND query LIKE '%test memory profiler%' ORDER BY event_time DESC LIMIT 1); +WITH addressToSymbol(arrayJoin(trace)) AS symbol SELECT count() > 0 FROM system.trace_log t WHERE event_date >= yesterday() AND trace_type = 'Memory' AND query_id = (SELECT query_id FROM system.query_log WHERE current_database = currentDatabase() AND event_date >= yesterday() AND query LIKE '%test memory profiler%' ORDER BY event_time DESC LIMIT 1); diff --git a/tests/queries/0_stateless/01193_metadata_loading.sh b/tests/queries/0_stateless/01193_metadata_loading.sh index 143af3679a5..a3154a0784d 100755 --- a/tests/queries/0_stateless/01193_metadata_loading.sh +++ b/tests/queries/0_stateless/01193_metadata_loading.sh @@ -46,7 +46,7 @@ for i in {1..5}; do done $CLICKHOUSE_CLIENT -q "SYSTEM FLUSH LOGS" -$CLICKHOUSE_CLIENT -q "SELECT if(quantile(0.5)(query_duration_ms) < $max_time_ms, 'ok', toString(groupArray(query_duration_ms))) FROM system.query_log WHERE query_id LIKE '$db-%' AND type=2" +$CLICKHOUSE_CLIENT -q "SELECT if(quantile(0.5)(query_duration_ms) < $max_time_ms, 'ok', toString(groupArray(query_duration_ms))) FROM system.query_log WHERE current_database = currentDatabase() AND query_id LIKE '$db-%' AND type=2" $CLICKHOUSE_CLIENT -q "SELECT count() * $count_multiplier, i, d, s, n.i, n.f FROM $db.table_merge GROUP BY i, d, s, n.i, n.f ORDER BY i" diff --git a/tests/queries/0_stateless/01194_http_query_id.sh b/tests/queries/0_stateless/01194_http_query_id.sh index b1ab9eed9db..5aebdc10dfc 100755 --- a/tests/queries/0_stateless/01194_http_query_id.sh +++ b/tests/queries/0_stateless/01194_http_query_id.sh @@ -14,4 +14,4 @@ ${CLICKHOUSE_CURL} -sS "$url" --data "SELECT 'test_01194',$rnd,4" > /dev/null ${CLICKHOUSE_CURL} -sS "$url" --data "SYSTEM FLUSH LOGS" -${CLICKHOUSE_CURL} -sS "$url&query=SELECT+count(DISTINCT+query_id)+FROM+system.query_log+WHERE+query+LIKE+'SELECT+''test_01194'',$rnd%25'" +${CLICKHOUSE_CURL} -sS "$url&query=SELECT+count(DISTINCT+query_id)+FROM+system.query_log+WHERE+current_database+LIKE+currentDatabase()+AND+query+LIKE+'SELECT+''test_01194'',$rnd%25'" diff --git a/tests/queries/0_stateless/01198_client_quota_key.sh b/tests/queries/0_stateless/01198_client_quota_key.sh index 1a08b33e336..d9f062f6589 100755 --- a/tests/queries/0_stateless/01198_client_quota_key.sh +++ b/tests/queries/0_stateless/01198_client_quota_key.sh @@ -4,4 +4,4 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh . "$CURDIR"/../shell_config.sh -$CLICKHOUSE_CLIENT --quota_key Hello --query_id test_quota_key --log_queries 1 --multiquery --query "SELECT 1; SYSTEM FLUSH LOGS; SELECT DISTINCT quota_key FROM system.query_log WHERE event_date >= yesterday() AND event_time >= now() - 300 AND query_id = 'test_quota_key'" +$CLICKHOUSE_CLIENT --quota_key Hello --query_id test_quota_key --log_queries 1 --multiquery --query "SELECT 1; SYSTEM FLUSH LOGS; SELECT DISTINCT quota_key FROM system.query_log WHERE current_database = currentDatabase() AND event_date >= yesterday() AND event_time >= now() - 300 AND query_id = 'test_quota_key'" diff --git a/tests/queries/0_stateless/01231_log_queries_min_type.sql b/tests/queries/0_stateless/01231_log_queries_min_type.sql index bfeeca96d4b..9659739b61d 100644 --- a/tests/queries/0_stateless/01231_log_queries_min_type.sql +++ b/tests/queries/0_stateless/01231_log_queries_min_type.sql @@ -2,22 +2,23 @@ set log_queries=1; select '01231_log_queries_min_type/QUERY_START'; system flush logs; -select count() from system.query_log where query like '%01231_log_queries_min_type/QUERY_START%' and query not like '%system.query_log%' and event_date = today() and event_time >= now() - interval 1 minute; +select count() from system.query_log where current_database = currentDatabase() and query like '%01231_log_queries_min_type/QUERY_START%' and query not like '%system.query_log%' and event_date = today() and event_time >= now() - interval 1 minute; set log_queries_min_type='EXCEPTION_BEFORE_START'; select '01231_log_queries_min_type/EXCEPTION_BEFORE_START'; system flush logs; -select count() from system.query_log where query like '%01231_log_queries_min_type/EXCEPTION_BEFORE_START%' and query not like '%system.query_log%' and event_date = today() and event_time >= now() - interval 1 minute; +select count() from system.query_log where current_database = currentDatabase() and query like '%01231_log_queries_min_type/EXCEPTION_BEFORE_START%' and query not like '%system.query_log%' and event_date = today() and event_time >= now() - interval 1 minute; set max_rows_to_read='100K'; set log_queries_min_type='EXCEPTION_WHILE_PROCESSING'; select '01231_log_queries_min_type/EXCEPTION_WHILE_PROCESSING', max(number) from system.numbers limit 1e6; -- { serverError 158; } system flush logs; -select count() from system.query_log where query like '%01231_log_queries_min_type/EXCEPTION_WHILE_PROCESSING%' and query not like '%system.query_log%' and event_date = today() and event_time >= now() - interval 1 minute and type = 'ExceptionWhileProcessing'; +select count() from system.query_log where current_database = currentDatabase() and query like '%01231_log_queries_min_type/EXCEPTION_WHILE_PROCESSING%' and query not like '%system.query_log%' and event_date = today() and event_time >= now() - interval 1 minute and type = 'ExceptionWhileProcessing'; select '01231_log_queries_min_type w/ Settings/EXCEPTION_WHILE_PROCESSING', max(number) from system.numbers limit 1e6; -- { serverError 158; } system flush logs; select count() from system.query_log where + current_database = currentDatabase() and query like '%01231_log_queries_min_type w/ Settings/EXCEPTION_WHILE_PROCESSING%' and query not like '%system.query_log%' and event_date = today() and diff --git a/tests/queries/0_stateless/01283_max_threads_simple_query_optimization.sql b/tests/queries/0_stateless/01283_max_threads_simple_query_optimization.sql index a7e51047eba..61db4376c91 100644 --- a/tests/queries/0_stateless/01283_max_threads_simple_query_optimization.sql +++ b/tests/queries/0_stateless/01283_max_threads_simple_query_optimization.sql @@ -16,7 +16,7 @@ SELECT throwIf(count() != 1, 'no query was logged'), throwIf(length(thread_ids) != 2, 'too many threads used') FROM system.query_log -WHERE type = 'QueryFinish' AND query LIKE '%data_01283 LIMIT 1%' +WHERE current_database = currentDatabase() AND type = 'QueryFinish' AND query LIKE '%data_01283 LIMIT 1%' GROUP BY thread_ids FORMAT Null; diff --git a/tests/queries/0_stateless/01290_max_execution_speed_distributed.sql b/tests/queries/0_stateless/01290_max_execution_speed_distributed.sql index b0f545838e6..d6617bec5ce 100644 --- a/tests/queries/0_stateless/01290_max_execution_speed_distributed.sql +++ b/tests/queries/0_stateless/01290_max_execution_speed_distributed.sql @@ -17,6 +17,7 @@ SYSTEM FLUSH LOGS; SELECT DISTINCT query_duration_ms >= 500 FROM system.query_log WHERE + current_database = currentDatabase() AND event_date >= yesterday() AND query LIKE '%special query for 01290_max_execution_speed_distributed%' AND query NOT LIKE '%system.query_log%' AND diff --git a/tests/queries/0_stateless/01323_too_many_threads_bug.sql b/tests/queries/0_stateless/01323_too_many_threads_bug.sql index 1c70831c293..6033fe66cd3 100644 --- a/tests/queries/0_stateless/01323_too_many_threads_bug.sql +++ b/tests/queries/0_stateless/01323_too_many_threads_bug.sql @@ -9,11 +9,11 @@ set log_queries = 1; select x from table_01323_many_parts limit 10 format Null; system flush logs; -select arrayUniq(thread_ids) <= 4 from system.query_log where event_date >= today() - 1 and query ilike '%select x from table_01323_many_parts%' and query not like '%system.query_log%' and type = 'QueryFinish' order by query_start_time desc limit 1; +select arrayUniq(thread_ids) <= 4 from system.query_log where current_database = currentDatabase() AND event_date >= today() - 1 and query ilike '%select x from table_01323_many_parts%' and query not like '%system.query_log%' and type = 'QueryFinish' order by query_start_time desc limit 1; select x from table_01323_many_parts order by x limit 10 format Null; system flush logs; -select arrayUniq(thread_ids) <= 36 from system.query_log where event_date >= today() - 1 and query ilike '%select x from table_01323_many_parts order by x%' and query not like '%system.query_log%' and type = 'QueryFinish' order by query_start_time desc limit 1; +select arrayUniq(thread_ids) <= 36 from system.query_log where current_database = currentDatabase() AND event_date >= today() - 1 and query ilike '%select x from table_01323_many_parts order by x%' and query not like '%system.query_log%' and type = 'QueryFinish' order by query_start_time desc limit 1; drop table if exists table_01323_many_parts; diff --git a/tests/queries/0_stateless/01343_min_bytes_to_use_mmap_io.sql b/tests/queries/0_stateless/01343_min_bytes_to_use_mmap_io.sql index 62c5d20d714..ef39605f4d2 100644 --- a/tests/queries/0_stateless/01343_min_bytes_to_use_mmap_io.sql +++ b/tests/queries/0_stateless/01343_min_bytes_to_use_mmap_io.sql @@ -6,6 +6,6 @@ SET min_bytes_to_use_mmap_io = 1; SELECT * FROM test_01343; SYSTEM FLUSH LOGS; -SELECT PE.Values FROM system.query_log ARRAY JOIN ProfileEvents AS PE WHERE event_date >= yesterday() AND event_time >= now() - 300 AND query LIKE 'SELECT * FROM test_01343%' AND PE.Names = 'CreatedReadBufferMMap' AND type = 2 ORDER BY event_time DESC LIMIT 1; +SELECT PE.Values FROM system.query_log ARRAY JOIN ProfileEvents AS PE WHERE current_database = currentDatabase() AND event_date >= yesterday() AND event_time >= now() - 300 AND query LIKE 'SELECT * FROM test_01343%' AND PE.Names = 'CreatedReadBufferMMap' AND type = 2 ORDER BY event_time DESC LIMIT 1; DROP TABLE test_01343; diff --git a/tests/queries/0_stateless/01344_min_bytes_to_use_mmap_io_index.sql b/tests/queries/0_stateless/01344_min_bytes_to_use_mmap_io_index.sql index 544c0af7925..9044ee08f8d 100644 --- a/tests/queries/0_stateless/01344_min_bytes_to_use_mmap_io_index.sql +++ b/tests/queries/0_stateless/01344_min_bytes_to_use_mmap_io_index.sql @@ -6,6 +6,6 @@ SET min_bytes_to_use_mmap_io = 1; SELECT * FROM test_01344 WHERE x = 'Hello, world'; SYSTEM FLUSH LOGS; -SELECT PE.Values FROM system.query_log ARRAY JOIN ProfileEvents AS PE WHERE event_date >= yesterday() AND event_time >= now() - 300 AND query LIKE 'SELECT * FROM test_01344 WHERE x = ''Hello, world''%' AND PE.Names = 'CreatedReadBufferMMap' AND type = 2 ORDER BY event_time DESC LIMIT 1; +SELECT PE.Values FROM system.query_log ARRAY JOIN ProfileEvents AS PE WHERE current_database = currentDatabase() AND event_date >= yesterday() AND event_time >= now() - 300 AND query LIKE 'SELECT * FROM test_01344 WHERE x = ''Hello, world''%' AND PE.Names = 'CreatedReadBufferMMap' AND type = 2 ORDER BY event_time DESC LIMIT 1; DROP TABLE test_01344; diff --git a/tests/queries/0_stateless/01356_view_threads.sql b/tests/queries/0_stateless/01356_view_threads.sql index 5290ec555af..17b95324a00 100644 --- a/tests/queries/0_stateless/01356_view_threads.sql +++ b/tests/queries/0_stateless/01356_view_threads.sql @@ -7,6 +7,6 @@ set max_threads = 16; select g % 2 as gg, sum(s) from table_01356_view_threads group by gg order by gg; system flush logs; -select length(thread_ids) >= 16 from system.query_log where event_date >= today() - 1 and lower(query) like '%select g % 2 as gg, sum(s) from table_01356_view_threads group by gg order by gg%' and type = 'QueryFinish' order by query_start_time desc limit 1; +select length(thread_ids) >= 16 from system.query_log where current_database = currentDatabase() AND event_date >= today() - 1 and lower(query) like '%select g % 2 as gg, sum(s) from table_01356_view_threads group by gg order by gg%' and type = 'QueryFinish' order by query_start_time desc limit 1; drop table if exists table_01356_view_threads; diff --git a/tests/queries/0_stateless/01357_result_rows.sql b/tests/queries/0_stateless/01357_result_rows.sql index 17c2d15979a..b236c8bf0a8 100644 --- a/tests/queries/0_stateless/01357_result_rows.sql +++ b/tests/queries/0_stateless/01357_result_rows.sql @@ -2,4 +2,4 @@ set log_queries = 1; select count() > 0 from system.settings; system flush logs; -select result_rows, result_bytes >= 8 from system.query_log where event_date >= today() - 1 and lower(query) like '%select count() > 0 from system.settings%' and type = 'QueryFinish' order by query_start_time desc limit 1; +select result_rows, result_bytes >= 8 from system.query_log where current_database = currentDatabase() AND event_date >= today() - 1 and lower(query) like '%select count() > 0 from system.settings%' and type = 'QueryFinish' order by query_start_time desc limit 1; diff --git a/tests/queries/0_stateless/01358_union_threads_bug.sql b/tests/queries/0_stateless/01358_union_threads_bug.sql index 0c07364f41c..8366d3f12a0 100644 --- a/tests/queries/0_stateless/01358_union_threads_bug.sql +++ b/tests/queries/0_stateless/01358_union_threads_bug.sql @@ -4,4 +4,4 @@ set max_threads = 16; SELECT count() FROM (SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100 UNION ALL SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100 UNION ALL SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100); system flush logs; -select length(thread_ids) >= 16 from system.query_log where event_date >= today() - 1 and query like '%SELECT count() FROM (SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100 UNION ALL SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100 UNION ALL SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100)%' and type = 'QueryFinish' order by query_start_time desc limit 1; +select length(thread_ids) >= 16 from system.query_log where current_database = currentDatabase() AND event_date >= today() - 1 and query like '%SELECT count() FROM (SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100 UNION ALL SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100 UNION ALL SELECT number FROM numbers_mt(1000000) ORDER BY number DESC LIMIT 100)%' and type = 'QueryFinish' order by query_start_time desc limit 1; diff --git a/tests/queries/0_stateless/01360_materialized_view_with_join_on_query_log.sql b/tests/queries/0_stateless/01360_materialized_view_with_join_on_query_log.sql index 57e8e6f4c74..950d4fe097f 100644 --- a/tests/queries/0_stateless/01360_materialized_view_with_join_on_query_log.sql +++ b/tests/queries/0_stateless/01360_materialized_view_with_join_on_query_log.sql @@ -8,6 +8,7 @@ SET log_queries=1; SELECT 1; SYSTEM FLUSH LOGS; +-- NOTE: can be rewritten using log_queries_min_query_duration_ms CREATE MATERIALIZED VIEW slow_log Engine=Memory AS ( SELECT * FROM @@ -37,7 +38,7 @@ SELECT extract(query,'/\\*\\s*QUERY_GROUP_ID:(.*?)\\s*\\*/') as QUERY_GROUP_ID, count() FROM system.query_log -WHERE type<>1 and event_date >= yesterday() and event_time > now() - 20 and QUERY_GROUP_ID<>'' +WHERE current_database = currentDatabase() AND type<>1 and event_date >= yesterday() and event_time > now() - 20 and QUERY_GROUP_ID<>'' GROUP BY QUERY_GROUP_ID ORDER BY QUERY_GROUP_ID; @@ -47,6 +48,7 @@ SELECT QUERY_GROUP_ID, count() FROM slow_log +WHERE current_database = currentDatabase() GROUP BY QUERY_GROUP_ID ORDER BY QUERY_GROUP_ID; diff --git a/tests/queries/0_stateless/01413_rows_events.sql b/tests/queries/0_stateless/01413_rows_events.sql index 9063f5de8d4..9e77d3fced9 100644 --- a/tests/queries/0_stateless/01413_rows_events.sql +++ b/tests/queries/0_stateless/01413_rows_events.sql @@ -4,25 +4,25 @@ CREATE TABLE rows_events_test (k UInt32, v UInt32) ENGINE = MergeTree ORDER BY k INSERT INTO /* test 01413, query 1 */ rows_events_test VALUES (1,1); SYSTEM FLUSH LOGS; -SELECT written_rows FROM system.query_log WHERE query LIKE 'INSERT INTO /* test 01413, query 1 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; +SELECT written_rows FROM system.query_log WHERE current_database = currentDatabase() AND query LIKE 'INSERT INTO /* test 01413, query 1 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; SELECT ProfileEvents.Values as value FROM system.query_log ARRAY JOIN ProfileEvents - WHERE ProfileEvents.Names = 'InsertedRows' AND query LIKE 'INSERT INTO /* test 01413, query 1 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; + WHERE current_database = currentDatabase() AND ProfileEvents.Names = 'InsertedRows' AND query LIKE 'INSERT INTO /* test 01413, query 1 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; INSERT INTO /* test 01413, query 2 */ rows_events_test VALUES (2,2), (3,3); SYSTEM FLUSH LOGS; -SELECT written_rows FROM system.query_log WHERE query LIKE 'INSERT INTO /* test 01413, query 2 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; +SELECT written_rows FROM system.query_log WHERE current_database = currentDatabase() AND query LIKE 'INSERT INTO /* test 01413, query 2 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; SELECT ProfileEvents.Values as value FROM system.query_log ARRAY JOIN ProfileEvents - WHERE ProfileEvents.Names = 'InsertedRows' AND query LIKE 'INSERT INTO /* test 01413, query 2 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; + WHERE current_database = currentDatabase() AND ProfileEvents.Names = 'InsertedRows' AND query LIKE 'INSERT INTO /* test 01413, query 2 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; SELECT * FROM /* test 01413, query 3 */ rows_events_test WHERE v = 2; SYSTEM FLUSH LOGS; -SELECT read_rows FROM system.query_log WHERE query LIKE 'SELECT * FROM /* test 01413, query 3 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; +SELECT read_rows FROM system.query_log WHERE current_database = currentDatabase() AND query LIKE 'SELECT * FROM /* test 01413, query 3 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; SELECT ProfileEvents.Values as value FROM system.query_log ARRAY JOIN ProfileEvents - WHERE ProfileEvents.Names = 'SelectedRows' AND query LIKE 'SELECT * FROM /* test 01413, query 3 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; + WHERE current_database = currentDatabase() AND ProfileEvents.Names = 'SelectedRows' AND query LIKE 'SELECT * FROM /* test 01413, query 3 */ rows_events_test%' AND type = 2 AND event_date >= yesterday() ORDER BY event_time DESC LIMIT 1; DROP TABLE rows_events_test; diff --git a/tests/queries/0_stateless/01415_overlimiting_threads_for_repica_bug.sql b/tests/queries/0_stateless/01415_overlimiting_threads_for_repica_bug.sql index 6e092cc2a8a..306d94387a4 100644 --- a/tests/queries/0_stateless/01415_overlimiting_threads_for_repica_bug.sql +++ b/tests/queries/0_stateless/01415_overlimiting_threads_for_repica_bug.sql @@ -4,4 +4,4 @@ set max_threads = 16; select sum(number) from remote('127.0.0.{1|2}', numbers_mt(1000000)) group by number % 2 order by number % 2; system flush logs; -select length(thread_ids) >= 16 from system.query_log where event_date >= today() - 1 and lower(query) like '%select sum(number) from remote(_127.0.0.{1|2}_, numbers_mt(1000000)) group by number %' and type = 'QueryFinish' order by query_start_time desc limit 1; +select length(thread_ids) >= 16 from system.query_log where current_database = currentDatabase() and event_date >= today() - 1 and lower(query) like '%select sum(number) from remote(_127.0.0.{1|2}_, numbers_mt(1000000)) group by number %' and type = 'QueryFinish' order by query_start_time desc limit 1; diff --git a/tests/queries/0_stateless/01455_opentelemetry_distributed.sh b/tests/queries/0_stateless/01455_opentelemetry_distributed.sh index d8a8dde966e..24667f26363 100755 --- a/tests/queries/0_stateless/01455_opentelemetry_distributed.sh +++ b/tests/queries/0_stateless/01455_opentelemetry_distributed.sh @@ -29,7 +29,9 @@ select count(*) "'"'"initial query spans with proper parent"'"'" array join attribute.names as attribute_name, attribute.values as attribute_value) o join system.query_log on query_id = o.attribute_value - where trace_id = reinterpretAsUUID(reverse(unhex('$trace_id'))) + where + trace_id = reinterpretAsUUID(reverse(unhex('$trace_id'))) + and current_database = currentDatabase() and operation_name = 'query' and parent_span_id = reinterpretAsUInt64(unhex('73')) and o.attribute_name = 'clickhouse.query_id' @@ -61,7 +63,7 @@ trace_id=$(${CLICKHOUSE_CLIENT} -q "select lower(hex(reverse(reinterpretAsString # https://github.com/ClickHouse/ClickHouse/issues/14228 ${CLICKHOUSE_CURL} \ --header "traceparent: 00-$trace_id-0000000000000073-01" \ - --header "tracestate: some custom state" "http://127.0.0.2:8123/" \ + --header "tracestate: some custom state" "$CLICKHOUSE_URL" \ --get \ --data-urlencode "query=select 1 from remote('127.0.0.2', system, one) format Null" diff --git a/tests/queries/0_stateless/01461_query_start_time_microseconds.sql b/tests/queries/0_stateless/01461_query_start_time_microseconds.sql index bf56fefd841..678b9b3d85e 100644 --- a/tests/queries/0_stateless/01461_query_start_time_microseconds.sql +++ b/tests/queries/0_stateless/01461_query_start_time_microseconds.sql @@ -6,12 +6,14 @@ WITH ( ( SELECT query_start_time_microseconds FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS time_with_microseconds, ( SELECT query_start_time FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS t) @@ -24,13 +26,15 @@ WITH ( ( SELECT query_start_time_microseconds FROM system.query_thread_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS time_with_microseconds, ( SELECT query_start_time FROM system.query_thread_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS t) -SELECT if(dateDiff('second', toDateTime(time_with_microseconds), toDateTime(t)) = 0, 'ok', 'fail'); -- \ No newline at end of file +SELECT if(dateDiff('second', toDateTime(time_with_microseconds), toDateTime(t)) = 0, 'ok', 'fail'); -- diff --git a/tests/queries/0_stateless/01473_event_time_microseconds.sql b/tests/queries/0_stateless/01473_event_time_microseconds.sql index 2e536bba7ac..488ee37e6d8 100644 --- a/tests/queries/0_stateless/01473_event_time_microseconds.sql +++ b/tests/queries/0_stateless/01473_event_time_microseconds.sql @@ -33,6 +33,7 @@ SELECT '01473_query_log_table_event_start_time_microseconds_test'; WITH ( SELECT event_time_microseconds, event_time FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY event_time DESC LIMIT 1 ) AS time @@ -42,6 +43,7 @@ SELECT '01473_query_thread_log_table_event_start_time_microseconds_test'; WITH ( SELECT event_time_microseconds, event_time FROM system.query_thread_log + WHERE current_database = currentDatabase() ORDER BY event_time DESC LIMIT 1 ) AS time @@ -51,6 +53,7 @@ SELECT '01473_text_log_table_event_start_time_microseconds_test'; WITH ( SELECT event_time_microseconds, event_time FROM system.query_thread_log + WHERE current_database = currentDatabase() ORDER BY event_time DESC LIMIT 1 ) AS time diff --git a/tests/queries/0_stateless/01526_initial_query_id.sh b/tests/queries/0_stateless/01526_initial_query_id.sh index 0cc09f733d0..e77764ee34e 100755 --- a/tests/queries/0_stateless/01526_initial_query_id.sh +++ b/tests/queries/0_stateless/01526_initial_query_id.sh @@ -19,7 +19,7 @@ ${CLICKHOUSE_CLIENT} -n -q " system flush logs; select interface, initial_query_id = query_id from system.query_log - where query_id = '$query_id' and type = 'QueryFinish' + where current_database = currentDatabase() AND query_id = '$query_id' and type = 'QueryFinish' order by interface ; " diff --git a/tests/queries/0_stateless/01526_max_untracked_memory.sh b/tests/queries/0_stateless/01526_max_untracked_memory.sh index b11f40b44f4..df5dbae35a9 100755 --- a/tests/queries/0_stateless/01526_max_untracked_memory.sh +++ b/tests/queries/0_stateless/01526_max_untracked_memory.sh @@ -15,7 +15,7 @@ min_trace_entries=2 query_id_tcp_prefix="01526-tcp-memory-tracking-$RANDOM-$$" ${CLICKHOUSE_CLIENT} --log_queries=1 --max_threads=1 --max_untracked_memory=0 --memory_profiler_sample_probability=1 -q "with '$query_id_tcp_prefix' as __id $query FORMAT Null" ${CLICKHOUSE_CLIENT} -q "SYSTEM FLUSH LOGS" -query_id_tcp="$(${CLICKHOUSE_CLIENT} -q "SELECT DISTINCT query_id FROM system.query_log WHERE query LIKE '%$query_id_tcp_prefix%'")" +query_id_tcp="$(${CLICKHOUSE_CLIENT} -q "SELECT DISTINCT query_id FROM system.query_log WHERE current_database = currentDatabase() AND query LIKE '%$query_id_tcp_prefix%'")" ${CLICKHOUSE_CLIENT} -q "SELECT count()>=$min_trace_entries FROM system.trace_log WHERE query_id = '$query_id_tcp' AND abs(size) < 4e6 AND event_time >= now() - interval 1 hour" # HTTP diff --git a/tests/queries/0_stateless/01560_crash_in_agg_empty_arglist.sql b/tests/queries/0_stateless/01560_crash_in_agg_empty_arglist.sql index 57dec2253d6..a66ae5a7024 100644 --- a/tests/queries/0_stateless/01560_crash_in_agg_empty_arglist.sql +++ b/tests/queries/0_stateless/01560_crash_in_agg_empty_arglist.sql @@ -2,4 +2,4 @@ SELECT 1; SYSTEM FLUSH LOGS; -SELECT any() as t, substring(query, 1, 70) AS query, avg(memory_usage) usage, count() count FROM system.query_log WHERE event_date >= toDate(1604295323) AND event_time >= toDateTime(1604295323) AND type in (1,2,3,4) and initial_user in ('') and('all' = 'all' or(positionCaseInsensitive(query, 'all') = 1)) GROUP BY query ORDER BY usage desc LIMIT 5; -- { serverError 42 } +SELECT any() as t, substring(query, 1, 70) AS query, avg(memory_usage) usage, count() count FROM system.query_log WHERE current_database = currentDatabase() AND event_date >= toDate(1604295323) AND event_time >= toDateTime(1604295323) AND type in (1,2,3,4) and initial_user in ('') and('all' = 'all' or(positionCaseInsensitive(query, 'all') = 1)) GROUP BY query ORDER BY usage desc LIMIT 5; -- { serverError 42 } diff --git a/tests/queries/0_stateless/01600_log_queries_with_extensive_info.sh b/tests/queries/0_stateless/01600_log_queries_with_extensive_info.sh index 039a68a76f3..a6a8f221084 100755 --- a/tests/queries/0_stateless/01600_log_queries_with_extensive_info.sh +++ b/tests/queries/0_stateless/01600_log_queries_with_extensive_info.sh @@ -26,4 +26,4 @@ ${CLICKHOUSE_CLIENT} -q "drop table if exists test_log_queries.logtable3" "--que ${CLICKHOUSE_CLIENT} -q "drop database if exists test_log_queries" "--query_id=01600_log_queries_with_extensive_info_018" ${CLICKHOUSE_CLIENT} -q "system flush logs" -${CLICKHOUSE_CLIENT} -q "select columns(query, normalized_query_hash, query_kind, databases, tables, columns) apply (any) from system.query_log where type = 'QueryFinish' and query_id like '01600_log_queries_with_extensive_info%' group by query_id order by query_id" +${CLICKHOUSE_CLIENT} -q "select columns(query, normalized_query_hash, query_kind, databases, tables, columns) apply (any) from system.query_log where current_database = currentDatabase() AND type = 'QueryFinish' and query_id like '01600_log_queries_with_extensive_info%' group by query_id order by query_id" diff --git a/tests/queries/0_stateless/01651_bugs_from_15889.sql b/tests/queries/0_stateless/01651_bugs_from_15889.sql index 34fcfc64114..1fbf669a1b8 100644 --- a/tests/queries/0_stateless/01651_bugs_from_15889.sql +++ b/tests/queries/0_stateless/01651_bugs_from_15889.sql @@ -51,7 +51,7 @@ WHERE (query_id = [NULL, NULL, NULL, NULL, 0.00009999999747378752, NULL, NULL, NULL, NULL, NULL], query_id FROM system.query_log - WHERE (query LIKE '%test cpu time query profiler%') AND (query NOT LIKE '%system%') + WHERE current_database = currentDatabase() AND (query LIKE '%test cpu time query profiler%') AND (query NOT LIKE '%system%') ORDER BY event_time DESC LIMIT 1 )) AND (symbol LIKE '%Source%'); @@ -66,7 +66,7 @@ WHERE greaterOrEquals(event_date, ignore(ignore(ignore(NULL, '')), 256), yesterd ignore(ignore(ignore(ignore(65536)), ignore(65537), ignore(2)), ''), query_id FROM system.query_log - WHERE (event_date >= yesterday()) AND (query LIKE '%test memory profiler%') + WHERE current_database = currentDatabase() AND (event_date >= yesterday()) AND (query LIKE '%test memory profiler%') ORDER BY event_time DESC LIMIT 1 )); -- { serverError 42 } @@ -79,6 +79,7 @@ WITH ( ( SELECT query_start_time_microseconds FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS time_with_microseconds, @@ -87,6 +88,7 @@ WITH ( inf, query_start_time FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS t) @@ -96,12 +98,14 @@ WITH ( ( SELECT query_start_time_microseconds FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS time_with_microseconds, ( SELECT query_start_time FROM system.query_log + WHERE current_database = currentDatabase() ORDER BY query_start_time DESC LIMIT 1 ) AS t) diff --git a/tests/queries/0_stateless/01656_test_query_log_factories_info.sql b/tests/queries/0_stateless/01656_test_query_log_factories_info.sql index 3ac71d03ec1..aa9bdd42a71 100644 --- a/tests/queries/0_stateless/01656_test_query_log_factories_info.sql +++ b/tests/queries/0_stateless/01656_test_query_log_factories_info.sql @@ -13,27 +13,27 @@ SELECT ''; SYSTEM FLUSH LOGS; SELECT arraySort(used_aggregate_functions) -FROM system.query_log WHERE type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') +FROM system.query_log WHERE current_database = currentDatabase() AND type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; SELECT arraySort(used_aggregate_function_combinators) -FROM system.query_log WHERE type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') +FROM system.query_log WHERE current_database = currentDatabase() AND type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; SELECT arraySort(used_table_functions) -FROM system.query_log WHERE type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') +FROM system.query_log WHERE current_database = currentDatabase() AND type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; SELECT arraySort(used_functions) -FROM system.query_log WHERE type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') +FROM system.query_log WHERE current_database = currentDatabase() AND type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; SELECT arraySort(used_data_type_families) -FROM system.query_log WHERE type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') +FROM system.query_log WHERE current_database = currentDatabase() AND type = 'QueryFinish' AND (query LIKE '%toDate(\'2000-12-05\')%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; @@ -43,7 +43,7 @@ CREATE database test_query_log_factories_info1 ENGINE=Atomic; SYSTEM FLUSH LOGS; SELECT used_database_engines FROM system.query_log -WHERE type == 'QueryFinish' AND (query LIKE '%database test_query_log_factories_info%') +WHERE current_database = currentDatabase() AND type == 'QueryFinish' AND (query LIKE '%database test_query_log_factories_info%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; @@ -52,7 +52,7 @@ CREATE OR REPLACE TABLE test_query_log_factories_info1.memory_table (id BIGINT, SYSTEM FLUSH LOGS; SELECT arraySort(used_data_type_families), used_storages FROM system.query_log -WHERE type == 'QueryFinish' AND (query LIKE '%TABLE test%') +WHERE current_database = currentDatabase() AND type == 'QueryFinish' AND (query LIKE '%TABLE test%') ORDER BY query_start_time DESC LIMIT 1 FORMAT TabSeparatedWithNames; SELECT ''; diff --git a/tests/queries/0_stateless/01661_referer.sh b/tests/queries/0_stateless/01661_referer.sh index 159f5e9036f..8123c925454 100755 --- a/tests/queries/0_stateless/01661_referer.sh +++ b/tests/queries/0_stateless/01661_referer.sh @@ -6,4 +6,4 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'SELECT 1' --referer 'https://yandex.ru/' ${CLICKHOUSE_CLIENT} --query "SYSTEM FLUSH LOGS" -${CLICKHOUSE_CLIENT} --query "SELECT http_referer FROM system.query_log WHERE http_referer LIKE '%yandex%' LIMIT 1" +${CLICKHOUSE_CLIENT} --query "SELECT http_referer FROM system.query_log WHERE current_database = currentDatabase() AND http_referer LIKE '%yandex%' LIMIT 1" diff --git a/tests/queries/0_stateless/01670_log_comment.sql b/tests/queries/0_stateless/01670_log_comment.sql index bbe7330cc74..c1496273784 100644 --- a/tests/queries/0_stateless/01670_log_comment.sql +++ b/tests/queries/0_stateless/01670_log_comment.sql @@ -1,5 +1,5 @@ SET log_comment = 'log_comment test', log_queries = 1; SELECT 1; SYSTEM FLUSH LOGS; -SELECT type, query FROM system.query_log WHERE log_comment = 'log_comment test' AND event_date >= yesterday() AND type = 1 ORDER BY event_time DESC LIMIT 1; -SELECT type, query FROM system.query_log WHERE log_comment = 'log_comment test' AND event_date >= yesterday() AND type = 2 ORDER BY event_time DESC LIMIT 1; +SELECT type, query FROM system.query_log WHERE current_database = currentDatabase() AND log_comment = 'log_comment test' AND event_date >= yesterday() AND type = 1 ORDER BY event_time DESC LIMIT 1; +SELECT type, query FROM system.query_log WHERE current_database = currentDatabase() AND log_comment = 'log_comment test' AND event_date >= yesterday() AND type = 2 ORDER BY event_time DESC LIMIT 1; From afdea5eff04ff50feffce33a8eb72c209c410d72 Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Wed, 27 Jan 2021 09:38:35 +0300 Subject: [PATCH 13/48] Changed handling of `PocoHTTPClientConfiguration` in order to ensure AWS SDK is initialized. --- src/Disks/S3/registerDiskS3.cpp | 23 +++++++++--------- src/IO/S3/PocoHTTPClient.cpp | 4 +--- src/IO/S3/PocoHTTPClient.h | 10 +++++--- src/IO/S3Common.cpp | 42 ++++++++++++++++----------------- src/IO/S3Common.h | 14 +++++------ src/Storages/StorageS3.cpp | 10 ++++---- 6 files changed, 53 insertions(+), 50 deletions(-) diff --git a/src/Disks/S3/registerDiskS3.cpp b/src/Disks/S3/registerDiskS3.cpp index 1b6086d0019..f9eddebdf88 100644 --- a/src/Disks/S3/registerDiskS3.cpp +++ b/src/Disks/S3/registerDiskS3.cpp @@ -112,32 +112,33 @@ void registerDiskS3(DiskFactory & factory) Poco::File disk{context.getPath() + "disks/" + name}; disk.createDirectories(); - Aws::Client::ClientConfiguration cfg; + S3::PocoHTTPClientConfiguration client_configuration = S3::ClientFactory::instance().createClientConfiguration( + context.getRemoteHostFilter(), + context.getGlobalContext().getSettingsRef().s3_max_redirects); S3::URI uri(Poco::URI(config.getString(config_prefix + ".endpoint"))); if (uri.key.back() != '/') throw Exception("S3 path must ends with '/', but '" + uri.key + "' doesn't.", ErrorCodes::BAD_ARGUMENTS); - cfg.connectTimeoutMs = config.getUInt(config_prefix + ".connect_timeout_ms", 10000); - cfg.httpRequestTimeoutMs = config.getUInt(config_prefix + ".request_timeout_ms", 5000); - cfg.maxConnections = config.getUInt(config_prefix + ".max_connections", 100); - cfg.endpointOverride = uri.endpoint; + client_configuration.connectTimeoutMs = config.getUInt(config_prefix + ".connect_timeout_ms", 10000); + client_configuration.httpRequestTimeoutMs = config.getUInt(config_prefix + ".request_timeout_ms", 5000); + client_configuration.maxConnections = config.getUInt(config_prefix + ".max_connections", 100); + client_configuration.endpointOverride = uri.endpoint; auto proxy_config = getProxyConfiguration(config_prefix, config); if (proxy_config) - cfg.perRequestConfiguration = [proxy_config](const auto & request) { return proxy_config->getConfiguration(request); }; + client_configuration.perRequestConfiguration = [proxy_config](const auto & request) { return proxy_config->getConfiguration(request); }; - cfg.retryStrategy = std::make_shared( + client_configuration.retryStrategy = std::make_shared( config.getUInt(config_prefix + ".retry_attempts", 10)); auto client = S3::ClientFactory::instance().create( - cfg, + client_configuration, uri.is_virtual_hosted_style, config.getString(config_prefix + ".access_key_id", ""), config.getString(config_prefix + ".secret_access_key", ""), - config.getBool(config_prefix + ".use_environment_credentials", config.getBool("s3.use_environment_credentials", false)), - context.getRemoteHostFilter(), - context.getGlobalContext().getSettingsRef().s3_max_redirects); + config.getBool(config_prefix + ".use_environment_credentials", config.getBool("s3.use_environment_credentials", false)) + ); String metadata_path = config.getString(config_prefix + ".metadata_path", context.getPath() + "disks/" + name + "/"); diff --git a/src/IO/S3/PocoHTTPClient.cpp b/src/IO/S3/PocoHTTPClient.cpp index cfd4593d80f..bf6d30986a9 100644 --- a/src/IO/S3/PocoHTTPClient.cpp +++ b/src/IO/S3/PocoHTTPClient.cpp @@ -47,11 +47,9 @@ namespace DB::S3 { PocoHTTPClientConfiguration::PocoHTTPClientConfiguration( - const Aws::Client::ClientConfiguration & cfg, const RemoteHostFilter & remote_host_filter_, unsigned int s3_max_redirects_) - : Aws::Client::ClientConfiguration(cfg) - , remote_host_filter(remote_host_filter_) + : remote_host_filter(remote_host_filter_) , s3_max_redirects(s3_max_redirects_) { } diff --git a/src/IO/S3/PocoHTTPClient.h b/src/IO/S3/PocoHTTPClient.h index 6631a209174..918943a413c 100644 --- a/src/IO/S3/PocoHTTPClient.h +++ b/src/IO/S3/PocoHTTPClient.h @@ -21,16 +21,20 @@ class Context; namespace DB::S3 { +class ClientFactory; struct PocoHTTPClientConfiguration : public Aws::Client::ClientConfiguration { const RemoteHostFilter & remote_host_filter; unsigned int s3_max_redirects; - PocoHTTPClientConfiguration(const Aws::Client::ClientConfiguration & cfg, const RemoteHostFilter & remote_host_filter_, - unsigned int s3_max_redirects_); - void updateSchemeAndRegion(); + +private: + PocoHTTPClientConfiguration(const RemoteHostFilter & remote_host_filter_, unsigned int s3_max_redirects_); + + /// Constructor of Aws::Client::ClientConfiguration must be called after AWS SDK initialization. + friend ClientFactory; }; class PocoHTTPResponse : public Aws::Http::Standard::StandardHttpResponse diff --git a/src/IO/S3Common.cpp b/src/IO/S3Common.cpp index 125ba907629..69b7a3088fb 100644 --- a/src/IO/S3Common.cpp +++ b/src/IO/S3Common.cpp @@ -144,7 +144,7 @@ public: } else if (Aws::Utils::StringUtils::ToLower(ec2_metadata_disabled.c_str()) != "true") { - Aws::Client::ClientConfiguration aws_client_configuration; + DB::S3::PocoHTTPClientConfiguration aws_client_configuration = DB::S3::ClientFactory::instance().createClientConfiguration(remote_host_filter, s3_max_redirects); /// See MakeDefaultHttpResourceClientConfiguration(). /// This is part of EC2 metadata client, but unfortunately it can't be accessed from outside @@ -165,8 +165,7 @@ public: aws_client_configuration.requestTimeoutMs = 1000; aws_client_configuration.retryStrategy = std::make_shared(1, 1000); - DB::S3::PocoHTTPClientConfiguration client_configuration(aws_client_configuration, remote_host_filter, s3_max_redirects); - auto ec2_metadata_client = std::make_shared(client_configuration); + auto ec2_metadata_client = std::make_shared(aws_client_configuration); auto config_loader = std::make_shared(ec2_metadata_client); AddProvider(std::make_shared(config_loader)); @@ -284,33 +283,28 @@ namespace S3 const RemoteHostFilter & remote_host_filter, unsigned int s3_max_redirects) { - Aws::Client::ClientConfiguration cfg; + PocoHTTPClientConfiguration client_configuration(remote_host_filter, s3_max_redirects); if (!endpoint.empty()) - cfg.endpointOverride = endpoint; + client_configuration.endpointOverride = endpoint; - return create(cfg, + return create(client_configuration, is_virtual_hosted_style, access_key_id, secret_access_key, - use_environment_credentials, - remote_host_filter, - s3_max_redirects); + use_environment_credentials); } std::shared_ptr ClientFactory::create( // NOLINT - const Aws::Client::ClientConfiguration & cfg, + const PocoHTTPClientConfiguration & cfg_, bool is_virtual_hosted_style, const String & access_key_id, const String & secret_access_key, - bool use_environment_credentials, - const RemoteHostFilter & remote_host_filter, - unsigned int s3_max_redirects) + bool use_environment_credentials) { Aws::Auth::AWSCredentials credentials(access_key_id, secret_access_key); - PocoHTTPClientConfiguration client_configuration(cfg, remote_host_filter, s3_max_redirects); - + PocoHTTPClientConfiguration client_configuration = cfg_; client_configuration.updateSchemeAndRegion(); return std::make_shared( @@ -320,22 +314,19 @@ namespace S3 use_environment_credentials), // AWS credentials provider. std::move(client_configuration), // Client configuration. Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, // Sign policy. - is_virtual_hosted_style || cfg.endpointOverride.empty() // Use virtual addressing if endpoint is not specified. + is_virtual_hosted_style || client_configuration.endpointOverride.empty() // Use virtual addressing if endpoint is not specified. ); } std::shared_ptr ClientFactory::create( // NOLINT - const Aws::Client::ClientConfiguration & cfg, + const PocoHTTPClientConfiguration & cfg_, bool is_virtual_hosted_style, const String & access_key_id, const String & secret_access_key, HeaderCollection headers, - bool use_environment_credentials, - const RemoteHostFilter & remote_host_filter, - unsigned int s3_max_redirects) + bool use_environment_credentials) { - PocoHTTPClientConfiguration client_configuration(cfg, remote_host_filter, s3_max_redirects); - + PocoHTTPClientConfiguration client_configuration = cfg_; client_configuration.updateSchemeAndRegion(); Aws::Auth::AWSCredentials credentials(access_key_id, secret_access_key); @@ -348,6 +339,13 @@ namespace S3 ); } + PocoHTTPClientConfiguration ClientFactory::createClientConfiguration( + const RemoteHostFilter & remote_host_filter, + unsigned int s3_max_redirects) + { + return PocoHTTPClientConfiguration(remote_host_filter, s3_max_redirects); + } + URI::URI(const Poco::URI & uri_) { /// Case when bucket name represented in domain name of S3 URL. diff --git a/src/IO/S3Common.h b/src/IO/S3Common.h index e2ec0785811..c367444395d 100644 --- a/src/IO/S3Common.h +++ b/src/IO/S3Common.h @@ -7,6 +7,7 @@ #include #include #include +#include #include namespace Aws::S3 @@ -23,7 +24,6 @@ namespace DB namespace DB::S3 { - class ClientFactory { public: @@ -41,21 +41,21 @@ public: unsigned int s3_max_redirects); std::shared_ptr create( - const Aws::Client::ClientConfiguration & cfg, + const PocoHTTPClientConfiguration & cfg, bool is_virtual_hosted_style, const String & access_key_id, const String & secret_access_key, - bool use_environment_credentials, - const RemoteHostFilter & remote_host_filter, - unsigned int s3_max_redirects); + bool use_environment_credentials); std::shared_ptr create( - const Aws::Client::ClientConfiguration & cfg, + const PocoHTTPClientConfiguration & cfg, bool is_virtual_hosted_style, const String & access_key_id, const String & secret_access_key, HeaderCollection headers, - bool use_environment_credentials, + bool use_environment_credentials); + + PocoHTTPClientConfiguration createClientConfiguration( const RemoteHostFilter & remote_host_filter, unsigned int s3_max_redirects); diff --git a/src/Storages/StorageS3.cpp b/src/Storages/StorageS3.cpp index 1920a84e447..279a8bf2ce7 100644 --- a/src/Storages/StorageS3.cpp +++ b/src/Storages/StorageS3.cpp @@ -221,7 +221,10 @@ StorageS3::StorageS3( if (access_key_id_.empty()) credentials = Aws::Auth::AWSCredentials(std::move(settings.access_key_id), std::move(settings.secret_access_key)); - Aws::Client::ClientConfiguration client_configuration; + S3::PocoHTTPClientConfiguration client_configuration = S3::ClientFactory::instance().createClientConfiguration( + context_.getRemoteHostFilter(), + context_.getGlobalContext().getSettingsRef().s3_max_redirects); + client_configuration.endpointOverride = uri_.endpoint; client_configuration.maxConnections = max_connections_; @@ -231,9 +234,8 @@ StorageS3::StorageS3( credentials.GetAWSAccessKeyId(), credentials.GetAWSSecretKey(), std::move(settings.headers), - settings.use_environment_credentials.value_or(global_context.getConfigRef().getBool("s3.use_environment_credentials", false)), - context_.getRemoteHostFilter(), - context_.getGlobalContext().getSettingsRef().s3_max_redirects); + settings.use_environment_credentials.value_or(global_context.getConfigRef().getBool("s3.use_environment_credentials", false)) + ); } From d13ec0d90970934b9e1666ac145fee69af1aa395 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Wed, 27 Jan 2021 14:10:09 +0300 Subject: [PATCH 14/48] Fix crash after mergine ActionsDAG. --- src/Interpreters/ActionsDAG.cpp | 7 + .../01672_actions_dag_merge_crash.reference | 1024 +++++++++++++++++ .../01672_actions_dag_merge_crash.sql | 1 + 3 files changed, 1032 insertions(+) create mode 100644 tests/queries/0_stateless/01672_actions_dag_merge_crash.reference create mode 100644 tests/queries/0_stateless/01672_actions_dag_merge_crash.sql diff --git a/src/Interpreters/ActionsDAG.cpp b/src/Interpreters/ActionsDAG.cpp index 4c3a4cbe0fa..e71c60bb540 100644 --- a/src/Interpreters/ActionsDAG.cpp +++ b/src/Interpreters/ActionsDAG.cpp @@ -821,6 +821,13 @@ ActionsDAGPtr ActionsDAG::merge(ActionsDAG && first, ActionsDAG && second) first.nodes.splice(first.nodes.end(), std::move(second.nodes)); + /// Here we rebuild index because some string_view from the first map now may point to string from second. + ActionsDAG::Index first_index; + for (auto * node : first.index) + first_index.insert(node); + + first.index.swap(first_index); + #if USE_EMBEDDED_COMPILER if (first.compilation_cache == nullptr) first.compilation_cache = second.compilation_cache; diff --git a/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference b/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference new file mode 100644 index 00000000000..68014807b73 --- /dev/null +++ b/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference @@ -0,0 +1,1024 @@ +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] +[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] diff --git a/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql b/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql new file mode 100644 index 00000000000..129dfd30b2b --- /dev/null +++ b/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql @@ -0,0 +1 @@ +SELECT [NULL, '25.6', '-0.02', NULL], [NULL], 1024, [NULL, '10485.76', NULL, NULL], [NULL, '-922337203.6854775808', toNullable(NULL)], [NULL] FROM (SELECT [multiIf((number % 1023) = -inf, toString(number), NULL)], NULL, '-1', multiIf((number % NULL) = NULL, toString(number), ''), [NULL, NULL], multiIf((number % NULL) = 65536, toString(number), '') AS s FROM system.numbers) LIMIT 1024 From 2e2f4066b34a6a4863a089727836cee68372b143 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Wed, 27 Jan 2021 14:12:21 +0300 Subject: [PATCH 15/48] Update test. --- .../01672_actions_dag_merge_crash.reference | 1024 ----------------- .../01672_actions_dag_merge_crash.sql | 2 +- 2 files changed, 1 insertion(+), 1025 deletions(-) diff --git a/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference b/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference index 68014807b73..e69de29bb2d 100644 --- a/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference +++ b/tests/queries/0_stateless/01672_actions_dag_merge_crash.reference @@ -1,1024 +0,0 @@ -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] -[NULL,'25.6','-0.02',NULL] [NULL] 1024 [NULL,'10485.76',NULL,NULL] [NULL,'-922337203.6854775808',NULL] [NULL] diff --git a/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql b/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql index 129dfd30b2b..b3b5b3bcd91 100644 --- a/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql +++ b/tests/queries/0_stateless/01672_actions_dag_merge_crash.sql @@ -1 +1 @@ -SELECT [NULL, '25.6', '-0.02', NULL], [NULL], 1024, [NULL, '10485.76', NULL, NULL], [NULL, '-922337203.6854775808', toNullable(NULL)], [NULL] FROM (SELECT [multiIf((number % 1023) = -inf, toString(number), NULL)], NULL, '-1', multiIf((number % NULL) = NULL, toString(number), ''), [NULL, NULL], multiIf((number % NULL) = 65536, toString(number), '') AS s FROM system.numbers) LIMIT 1024 +SELECT [NULL, '25.6', '-0.02', NULL], [NULL], 1024, [NULL, '10485.76', NULL, NULL], [NULL, '-922337203.6854775808', toNullable(NULL)], [NULL] FROM (SELECT [multiIf((number % 1023) = -inf, toString(number), NULL)], NULL, '-1', multiIf((number % NULL) = NULL, toString(number), ''), [NULL, NULL], multiIf((number % NULL) = 65536, toString(number), '') AS s FROM system.numbers) LIMIT 1024 format Null From 2a626f63e65ee458424713604b20c1f91e61d0a0 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Wed, 27 Jan 2021 14:24:46 +0300 Subject: [PATCH 16/48] Fix reference file --- .../0_stateless/01670_neighbor_lc_bug.reference | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/queries/0_stateless/01670_neighbor_lc_bug.reference b/tests/queries/0_stateless/01670_neighbor_lc_bug.reference index e69de29bb2d..fd1bc1a154c 100644 --- a/tests/queries/0_stateless/01670_neighbor_lc_bug.reference +++ b/tests/queries/0_stateless/01670_neighbor_lc_bug.reference @@ -0,0 +1,15 @@ +0 +0 +0 0 0 +1 1 1 +2 2 2 +3 3 3 +4 4 4 +0 0 0 +1 1 1 +2 2 2 +┌─rowNr─┬─val_string─┬─str_m1───┬─str_p1───┬─val_low──┬─low_m1───┬─low_p1───┐ +│ 1 │ String 1 │ │ String 1 │ String 1 │ │ String 1 │ +│ 2 │ String 1 │ String 1 │ String 2 │ String 1 │ String 1 │ String 2 │ +│ 3 │ String 2 │ String 1 │ │ String 2 │ String 1 │ │ +└───────┴────────────┴──────────┴──────────┴──────────┴──────────┴──────────┘ From 5622e6daa6bf27e651a46e4482ffc9decd924ede Mon Sep 17 00:00:00 2001 From: alesapin Date: Wed, 27 Jan 2021 14:56:12 +0300 Subject: [PATCH 17/48] Fix rare max_number_of_merges_with_ttl_in_pool limit overrun for non-replicated MergeTree --- src/Storages/MergeTree/MergeList.h | 21 ++++++++++++++------- src/Storages/MergeTree/MergeTreeData.cpp | 2 +- src/Storages/StorageMergeTree.cpp | 4 ++++ src/Storages/StorageReplicatedMergeTree.cpp | 5 +++++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/Storages/MergeTree/MergeList.h b/src/Storages/MergeTree/MergeList.h index 65e873ed102..6b2af414835 100644 --- a/src/Storages/MergeTree/MergeList.h +++ b/src/Storages/MergeTree/MergeList.h @@ -116,12 +116,6 @@ public: : Parent(CurrentMetrics::Merge) {} - void onEntryCreate(const Parent::Entry & entry) override - { - if (isTTLMergeType(entry->merge_type)) - ++merges_with_ttl_counter; - } - void onEntryDestroy(const Parent::Entry & entry) override { if (isTTLMergeType(entry->merge_type)) @@ -140,7 +134,20 @@ public: } } - size_t getExecutingMergesWithTTLCount() const + /// Merge consists of two parts: assignment and execution. We add merge to + /// merge list on execution, but checking merge list during merge + /// assignment. This lead to the logical race condition (we can assign more + /// merges with TTL than allowed). So we "book" merge with ttl during + /// assignment, and remove from list after merge execution. + /// + /// NOTE: Not important for replicated merge tree, we check count of merges twice: + /// in assignment and in queue before execution. + void bookMergeWithTTL() + { + ++merges_with_ttl_counter; + } + + size_t getMergesWithTTLCount() const { return merges_with_ttl_counter; } diff --git a/src/Storages/MergeTree/MergeTreeData.cpp b/src/Storages/MergeTree/MergeTreeData.cpp index 276ac10aeaf..d1a2f85eceb 100644 --- a/src/Storages/MergeTree/MergeTreeData.cpp +++ b/src/Storages/MergeTree/MergeTreeData.cpp @@ -3955,7 +3955,7 @@ NamesAndTypesList MergeTreeData::getVirtuals() const size_t MergeTreeData::getTotalMergesWithTTLInMergeList() const { - return global_context.getMergeList().getExecutingMergesWithTTLCount(); + return global_context.getMergeList().getMergesWithTTLCount(); } void MergeTreeData::addPartContributionToDataVolume(const DataPartPtr & part) diff --git a/src/Storages/StorageMergeTree.cpp b/src/Storages/StorageMergeTree.cpp index 070e6eb0483..9fca8c49e81 100644 --- a/src/Storages/StorageMergeTree.cpp +++ b/src/Storages/StorageMergeTree.cpp @@ -732,6 +732,10 @@ std::shared_ptr StorageMergeTree::se return {}; } + /// Account TTL merge here to avoid exceeding the max_number_of_merges_with_ttl_in_pool limit + if (isTTLMergeType(future_part.merge_type)) + global_context.getMergeList().bookMergeWithTTL(); + merging_tagger = std::make_unique(future_part, MergeTreeDataMergerMutator::estimateNeededDiskSpace(future_part.parts), *this, metadata_snapshot, false); return std::make_shared(future_part, std::move(merging_tagger), MutationCommands{}); } diff --git a/src/Storages/StorageReplicatedMergeTree.cpp b/src/Storages/StorageReplicatedMergeTree.cpp index 70e90e9706a..4eb7d7ebccd 100644 --- a/src/Storages/StorageReplicatedMergeTree.cpp +++ b/src/Storages/StorageReplicatedMergeTree.cpp @@ -1490,7 +1490,12 @@ bool StorageReplicatedMergeTree::tryExecuteMerge(const LogEntry & entry) future_merged_part.updatePath(*this, reserved_space); future_merged_part.merge_type = entry.merge_type; + /// Account TTL merge + if (isTTLMergeType(future_merged_part.merge_type)) + global_context.getMergeList().bookMergeWithTTL(); + auto table_id = getStorageID(); + /// Add merge to list MergeList::EntryPtr merge_entry = global_context.getMergeList().insert(table_id.database_name, table_id.table_name, future_merged_part); Transaction transaction(*this); From 79cc2e4c1c747197732e6177a2cd52965d4f5534 Mon Sep 17 00:00:00 2001 From: Vitaliy Zakaznikov Date: Wed, 27 Jan 2021 08:20:44 -0500 Subject: [PATCH 18/48] Updating AES encryption SRS. Adding test for LowCardinality(FixedString(N)) data type for plaintext. --- .../requirements/requirements.md | 280 ++++--- .../requirements/requirements.py | 734 ++++++++++-------- .../testflows/aes_encryption/tests/common.py | 1 + .../testflows/aes_encryption/tests/encrypt.py | 2 +- .../aes_encryption/tests/encrypt_mysql.py | 2 +- .../snapshots/encrypt.py.encrypt.snapshot | 66 ++ .../encrypt_mysql.py.encrypt_mysql.snapshot | 66 ++ 7 files changed, 687 insertions(+), 464 deletions(-) diff --git a/tests/testflows/aes_encryption/requirements/requirements.md b/tests/testflows/aes_encryption/requirements/requirements.md index e5052357469..4621a15af9d 100644 --- a/tests/testflows/aes_encryption/requirements/requirements.md +++ b/tests/testflows/aes_encryption/requirements/requirements.md @@ -6,102 +6,113 @@ * 1 [Revision History](#revision-history) * 2 [Introduction](#introduction) * 3 [Terminology](#terminology) + * 3.1 [AES](#aes) + * 3.2 [AEAD](#aead) * 4 [Requirements](#requirements) * 4.1 [Generic](#generic) * 4.1.1 [RQ.SRS008.AES.Functions](#rqsrs008aesfunctions) - * 4.1.2 [RQ.SRS008.AES.Functions.Compatability.MySQL](#rqsrs008aesfunctionscompatabilitymysql) - * 4.1.3 [RQ.SRS008.AES.Functions.Compatability.Dictionaries](#rqsrs008aesfunctionscompatabilitydictionaries) - * 4.1.4 [RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL](#rqsrs008aesfunctionscompatabilityenginedatabasemysql) - * 4.1.5 [RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL](#rqsrs008aesfunctionscompatabilityenginetablemysql) - * 4.1.6 [RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL](#rqsrs008aesfunctionscompatabilitytablefunctionmysql) - * 4.1.7 [RQ.SRS008.AES.Functions.DifferentModes](#rqsrs008aesfunctionsdifferentmodes) - * 4.1.8 [RQ.SRS008.AES.Functions.DataFromMultipleSources](#rqsrs008aesfunctionsdatafrommultiplesources) - * 4.1.9 [RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues](#rqsrs008aesfunctionssuppressoutputofsensitivevalues) - * 4.1.10 [RQ.SRS008.AES.Functions.InvalidParameters](#rqsrs008aesfunctionsinvalidparameters) - * 4.1.11 [RQ.SRS008.AES.Functions.Mismatched.Key](#rqsrs008aesfunctionsmismatchedkey) - * 4.1.12 [RQ.SRS008.AES.Functions.Mismatched.IV](#rqsrs008aesfunctionsmismatchediv) - * 4.1.13 [RQ.SRS008.AES.Functions.Mismatched.AAD](#rqsrs008aesfunctionsmismatchedaad) - * 4.1.14 [RQ.SRS008.AES.Functions.Mismatched.Mode](#rqsrs008aesfunctionsmismatchedmode) - * 4.1.15 [RQ.SRS008.AES.Functions.Check.Performance](#rqsrs008aesfunctionscheckperformance) - * 4.1.16 [RQ.SRS008.AES.Function.Check.Performance.BestCase](#rqsrs008aesfunctioncheckperformancebestcase) - * 4.1.17 [RQ.SRS008.AES.Function.Check.Performance.WorstCase](#rqsrs008aesfunctioncheckperformanceworstcase) - * 4.1.18 [RQ.SRS008.AES.Functions.Check.Compression](#rqsrs008aesfunctionscheckcompression) - * 4.1.19 [RQ.SRS008.AES.Functions.Check.Compression.LowCardinality](#rqsrs008aesfunctionscheckcompressionlowcardinality) - * 4.2 [Specific](#specific) - * 4.2.1 [RQ.SRS008.AES.Encrypt.Function](#rqsrs008aesencryptfunction) - * 4.2.2 [RQ.SRS008.AES.Encrypt.Function.Syntax](#rqsrs008aesencryptfunctionsyntax) - * 4.2.3 [RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors](#rqsrs008aesencryptfunctionnisttestvectors) - * 4.2.4 [RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText](#rqsrs008aesencryptfunctionparametersplaintext) - * 4.2.5 [RQ.SRS008.AES.Encrypt.Function.Parameters.Key](#rqsrs008aesencryptfunctionparameterskey) - * 4.2.6 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode](#rqsrs008aesencryptfunctionparametersmode) - * 4.2.7 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesencryptfunctionparametersmodevaluesformat) - * 4.2.8 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesencryptfunctionparametersmodevalueinvalid) - * 4.2.9 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesencryptfunctionparametersmodevalues) - * 4.2.10 [RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesencryptfunctionparametersinitializationvector) - * 4.2.11 [RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesencryptfunctionparametersadditionalauthenticateddata) - * 4.2.12 [RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesencryptfunctionparametersreturnvalue) - * 4.2.13 [RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesencryptfunctionkeylengthinvalidlengtherror) - * 4.2.14 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesencryptfunctioninitializationvectorlengthinvalidlengtherror) - * 4.2.15 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesencryptfunctioninitializationvectornotvalidformode) - * 4.2.16 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesencryptfunctionadditionalauthenticationdatanotvalidformode) - * 4.2.17 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesencryptfunctionadditionalauthenticationdatalength) - * 4.2.18 [RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionnongcmmodekeyandinitializationvectorlength) - * 4.2.19 [RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctiongcmmodekeyandinitializationvectorlength) - * 4.2.20 [RQ.SRS008.AES.Decrypt.Function](#rqsrs008aesdecryptfunction) - * 4.2.21 [RQ.SRS008.AES.Decrypt.Function.Syntax](#rqsrs008aesdecryptfunctionsyntax) - * 4.2.22 [RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText](#rqsrs008aesdecryptfunctionparametersciphertext) - * 4.2.23 [RQ.SRS008.AES.Decrypt.Function.Parameters.Key](#rqsrs008aesdecryptfunctionparameterskey) - * 4.2.24 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode](#rqsrs008aesdecryptfunctionparametersmode) - * 4.2.25 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesdecryptfunctionparametersmodevaluesformat) - * 4.2.26 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesdecryptfunctionparametersmodevalueinvalid) - * 4.2.27 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesdecryptfunctionparametersmodevalues) - * 4.2.28 [RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesdecryptfunctionparametersinitializationvector) - * 4.2.29 [RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesdecryptfunctionparametersadditionalauthenticateddata) - * 4.2.30 [RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesdecryptfunctionparametersreturnvalue) - * 4.2.31 [RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesdecryptfunctionkeylengthinvalidlengtherror) - * 4.2.32 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesdecryptfunctioninitializationvectorlengthinvalidlengtherror) - * 4.2.33 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesdecryptfunctioninitializationvectornotvalidformode) - * 4.2.34 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesdecryptfunctionadditionalauthenticationdatanotvalidformode) - * 4.2.35 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesdecryptfunctionadditionalauthenticationdatalength) - * 4.2.36 [RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionnongcmmodekeyandinitializationvectorlength) - * 4.2.37 [RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctiongcmmodekeyandinitializationvectorlength) - * 4.3 [MySQL Specific Functions](#mysql-specific-functions) - * 4.3.1 [RQ.SRS008.AES.MySQL.Encrypt.Function](#rqsrs008aesmysqlencryptfunction) - * 4.3.2 [RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax](#rqsrs008aesmysqlencryptfunctionsyntax) - * 4.3.3 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText](#rqsrs008aesmysqlencryptfunctionparametersplaintext) - * 4.3.4 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key](#rqsrs008aesmysqlencryptfunctionparameterskey) - * 4.3.5 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode](#rqsrs008aesmysqlencryptfunctionparametersmode) - * 4.3.6 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesformat) - * 4.3.7 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqlencryptfunctionparametersmodevalueinvalid) - * 4.3.8 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqlencryptfunctionparametersmodevalues) - * 4.3.9 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesgcmerror) - * 4.3.10 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesctrerror) - * 4.3.11 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqlencryptfunctionparametersinitializationvector) - * 4.3.12 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqlencryptfunctionparametersreturnvalue) - * 4.3.13 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqlencryptfunctionkeylengthtooshorterror) - * 4.3.14 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqlencryptfunctionkeylengthtoolong) - * 4.3.15 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtooshorterror) - * 4.3.16 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtoolong) - * 4.3.17 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqlencryptfunctioninitializationvectornotvalidformode) - * 4.3.18 [RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionmodekeyandinitializationvectorlength) - * 4.3.19 [RQ.SRS008.AES.MySQL.Decrypt.Function](#rqsrs008aesmysqldecryptfunction) - * 4.3.20 [RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax](#rqsrs008aesmysqldecryptfunctionsyntax) - * 4.3.21 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText](#rqsrs008aesmysqldecryptfunctionparametersciphertext) - * 4.3.22 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key](#rqsrs008aesmysqldecryptfunctionparameterskey) - * 4.3.23 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode](#rqsrs008aesmysqldecryptfunctionparametersmode) - * 4.3.24 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesformat) - * 4.3.25 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqldecryptfunctionparametersmodevalueinvalid) - * 4.3.26 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqldecryptfunctionparametersmodevalues) - * 4.3.27 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesgcmerror) - * 4.3.28 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesctrerror) - * 4.3.29 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqldecryptfunctionparametersinitializationvector) - * 4.3.30 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqldecryptfunctionparametersreturnvalue) - * 4.3.31 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqldecryptfunctionkeylengthtooshorterror) - * 4.3.32 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqldecryptfunctionkeylengthtoolong) - * 4.3.33 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtooshorterror) - * 4.3.34 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtoolong) - * 4.3.35 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqldecryptfunctioninitializationvectornotvalidformode) - * 4.3.36 [RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionmodekeyandinitializationvectorlength) + * 4.2 [Compatibility](#compatibility) + * 4.2.1 [RQ.SRS008.AES.Functions.Compatibility.MySQL](#rqsrs008aesfunctionscompatibilitymysql) + * 4.2.2 [RQ.SRS008.AES.Functions.Compatibility.Dictionaries](#rqsrs008aesfunctionscompatibilitydictionaries) + * 4.2.3 [RQ.SRS008.AES.Functions.Compatibility.Engine.Database.MySQL](#rqsrs008aesfunctionscompatibilityenginedatabasemysql) + * 4.2.4 [RQ.SRS008.AES.Functions.Compatibility.Engine.Table.MySQL](#rqsrs008aesfunctionscompatibilityenginetablemysql) + * 4.2.5 [RQ.SRS008.AES.Functions.Compatibility.TableFunction.MySQL](#rqsrs008aesfunctionscompatibilitytablefunctionmysql) + * 4.3 [Different Modes](#different-modes) + * 4.3.1 [RQ.SRS008.AES.Functions.DifferentModes](#rqsrs008aesfunctionsdifferentmodes) + * 4.4 [Multiple Sources](#multiple-sources) + * 4.4.1 [RQ.SRS008.AES.Functions.DataFromMultipleSources](#rqsrs008aesfunctionsdatafrommultiplesources) + * 4.5 [Suppressing Sensitive Values](#suppressing-sensitive-values) + * 4.5.1 [RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues](#rqsrs008aesfunctionssuppressoutputofsensitivevalues) + * 4.6 [Invalid Parameters](#invalid-parameters) + * 4.6.1 [RQ.SRS008.AES.Functions.InvalidParameters](#rqsrs008aesfunctionsinvalidparameters) + * 4.7 [Mismatched Values](#mismatched-values) + * 4.7.1 [RQ.SRS008.AES.Functions.Mismatched.Key](#rqsrs008aesfunctionsmismatchedkey) + * 4.7.2 [RQ.SRS008.AES.Functions.Mismatched.IV](#rqsrs008aesfunctionsmismatchediv) + * 4.7.3 [RQ.SRS008.AES.Functions.Mismatched.AAD](#rqsrs008aesfunctionsmismatchedaad) + * 4.7.4 [RQ.SRS008.AES.Functions.Mismatched.Mode](#rqsrs008aesfunctionsmismatchedmode) + * 4.8 [Performance](#performance) + * 4.8.1 [RQ.SRS008.AES.Functions.Check.Performance](#rqsrs008aesfunctionscheckperformance) + * 4.8.2 [RQ.SRS008.AES.Function.Check.Performance.BestCase](#rqsrs008aesfunctioncheckperformancebestcase) + * 4.8.3 [RQ.SRS008.AES.Function.Check.Performance.WorstCase](#rqsrs008aesfunctioncheckperformanceworstcase) + * 4.8.4 [RQ.SRS008.AES.Functions.Check.Compression](#rqsrs008aesfunctionscheckcompression) + * 4.8.5 [RQ.SRS008.AES.Functions.Check.Compression.LowCardinality](#rqsrs008aesfunctionscheckcompressionlowcardinality) + * 4.9 [Encrypt Function](#encrypt-function) + * 4.9.1 [RQ.SRS008.AES.Encrypt.Function](#rqsrs008aesencryptfunction) + * 4.9.2 [RQ.SRS008.AES.Encrypt.Function.Syntax](#rqsrs008aesencryptfunctionsyntax) + * 4.9.3 [RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors](#rqsrs008aesencryptfunctionnisttestvectors) + * 4.9.4 [RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText](#rqsrs008aesencryptfunctionparametersplaintext) + * 4.9.5 [RQ.SRS008.AES.Encrypt.Function.Parameters.Key](#rqsrs008aesencryptfunctionparameterskey) + * 4.9.6 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode](#rqsrs008aesencryptfunctionparametersmode) + * 4.9.7 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesencryptfunctionparametersmodevaluesformat) + * 4.9.8 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesencryptfunctionparametersmodevalueinvalid) + * 4.9.9 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesencryptfunctionparametersmodevalues) + * 4.9.10 [RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesencryptfunctionparametersinitializationvector) + * 4.9.11 [RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesencryptfunctionparametersadditionalauthenticateddata) + * 4.9.12 [RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesencryptfunctionparametersreturnvalue) + * 4.9.13 [RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesencryptfunctionkeylengthinvalidlengtherror) + * 4.9.14 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesencryptfunctioninitializationvectorlengthinvalidlengtherror) + * 4.9.15 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesencryptfunctioninitializationvectornotvalidformode) + * 4.9.16 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesencryptfunctionadditionalauthenticationdatanotvalidformode) + * 4.9.17 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesencryptfunctionadditionalauthenticationdatalength) + * 4.9.18 [RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionnongcmmodekeyandinitializationvectorlength) + * 4.9.19 [RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctiongcmmodekeyandinitializationvectorlength) + * 4.10 [Decrypt Function](#decrypt-function) + * 4.10.1 [RQ.SRS008.AES.Decrypt.Function](#rqsrs008aesdecryptfunction) + * 4.10.2 [RQ.SRS008.AES.Decrypt.Function.Syntax](#rqsrs008aesdecryptfunctionsyntax) + * 4.10.3 [RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText](#rqsrs008aesdecryptfunctionparametersciphertext) + * 4.10.4 [RQ.SRS008.AES.Decrypt.Function.Parameters.Key](#rqsrs008aesdecryptfunctionparameterskey) + * 4.10.5 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode](#rqsrs008aesdecryptfunctionparametersmode) + * 4.10.6 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesdecryptfunctionparametersmodevaluesformat) + * 4.10.7 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesdecryptfunctionparametersmodevalueinvalid) + * 4.10.8 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesdecryptfunctionparametersmodevalues) + * 4.10.9 [RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesdecryptfunctionparametersinitializationvector) + * 4.10.10 [RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesdecryptfunctionparametersadditionalauthenticateddata) + * 4.10.11 [RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesdecryptfunctionparametersreturnvalue) + * 4.10.12 [RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesdecryptfunctionkeylengthinvalidlengtherror) + * 4.10.13 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesdecryptfunctioninitializationvectorlengthinvalidlengtherror) + * 4.10.14 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesdecryptfunctioninitializationvectornotvalidformode) + * 4.10.15 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesdecryptfunctionadditionalauthenticationdatanotvalidformode) + * 4.10.16 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesdecryptfunctionadditionalauthenticationdatalength) + * 4.10.17 [RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionnongcmmodekeyandinitializationvectorlength) + * 4.10.18 [RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctiongcmmodekeyandinitializationvectorlength) + * 4.11 [MySQL Encrypt Function](#mysql-encrypt-function) + * 4.11.1 [RQ.SRS008.AES.MySQL.Encrypt.Function](#rqsrs008aesmysqlencryptfunction) + * 4.11.2 [RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax](#rqsrs008aesmysqlencryptfunctionsyntax) + * 4.11.3 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText](#rqsrs008aesmysqlencryptfunctionparametersplaintext) + * 4.11.4 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key](#rqsrs008aesmysqlencryptfunctionparameterskey) + * 4.11.5 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode](#rqsrs008aesmysqlencryptfunctionparametersmode) + * 4.11.6 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesformat) + * 4.11.7 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqlencryptfunctionparametersmodevalueinvalid) + * 4.11.8 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqlencryptfunctionparametersmodevalues) + * 4.11.9 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesgcmerror) + * 4.11.10 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesctrerror) + * 4.11.11 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqlencryptfunctionparametersinitializationvector) + * 4.11.12 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqlencryptfunctionparametersreturnvalue) + * 4.11.13 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqlencryptfunctionkeylengthtooshorterror) + * 4.11.14 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqlencryptfunctionkeylengthtoolong) + * 4.11.15 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtooshorterror) + * 4.11.16 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtoolong) + * 4.11.17 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqlencryptfunctioninitializationvectornotvalidformode) + * 4.11.18 [RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionmodekeyandinitializationvectorlength) + * 4.12 [MySQL Decrypt Function](#mysql-decrypt-function) + * 4.12.1 [RQ.SRS008.AES.MySQL.Decrypt.Function](#rqsrs008aesmysqldecryptfunction) + * 4.12.2 [RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax](#rqsrs008aesmysqldecryptfunctionsyntax) + * 4.12.3 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText](#rqsrs008aesmysqldecryptfunctionparametersciphertext) + * 4.12.4 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key](#rqsrs008aesmysqldecryptfunctionparameterskey) + * 4.12.5 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode](#rqsrs008aesmysqldecryptfunctionparametersmode) + * 4.12.6 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesformat) + * 4.12.7 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqldecryptfunctionparametersmodevalueinvalid) + * 4.12.8 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqldecryptfunctionparametersmodevalues) + * 4.12.9 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesgcmerror) + * 4.12.10 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesctrerror) + * 4.12.11 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqldecryptfunctionparametersinitializationvector) + * 4.12.12 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqldecryptfunctionparametersreturnvalue) + * 4.12.13 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqldecryptfunctionkeylengthtooshorterror) + * 4.12.14 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqldecryptfunctionkeylengthtoolong) + * 4.12.15 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtooshorterror) + * 4.12.16 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtoolong) + * 4.12.17 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqldecryptfunctioninitializationvectornotvalidformode) + * 4.12.18 [RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionmodekeyandinitializationvectorlength) * 5 [References](#references) ## Revision History @@ -122,9 +133,14 @@ accessed on remote [MySQL] servers via [MySQL Dictionary] or [MySQL Database Eng ## Terminology -* **AES** - +### AES + Advanced Encryption Standard ([AES]) +### AEAD + + Authenticated Encryption with Associated Data + ## Requirements ### Generic @@ -134,38 +150,44 @@ version: 1.0 [ClickHouse] SHALL support [AES] encryption functions to encrypt and decrypt data. -#### RQ.SRS008.AES.Functions.Compatability.MySQL +### Compatibility + +#### RQ.SRS008.AES.Functions.Compatibility.MySQL version: 1.0 [ClickHouse] SHALL support [AES] encryption functions compatible with [MySQL 5.7]. -#### RQ.SRS008.AES.Functions.Compatability.Dictionaries +#### RQ.SRS008.AES.Functions.Compatibility.Dictionaries version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed on remote [MySQL] servers using [MySQL Dictionary]. -#### RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL +#### RQ.SRS008.AES.Functions.Compatibility.Engine.Database.MySQL version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Database Engine], -#### RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL +#### RQ.SRS008.AES.Functions.Compatibility.Engine.Table.MySQL version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Engine]. -#### RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL +#### RQ.SRS008.AES.Functions.Compatibility.TableFunction.MySQL version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Function]. +### Different Modes + #### RQ.SRS008.AES.Functions.DifferentModes version: 1.0 [ClickHouse] SHALL allow different modes to be supported in a single SQL statement using explicit function parameters. +### Multiple Sources + #### RQ.SRS008.AES.Functions.DataFromMultipleSources version: 1.0 @@ -174,17 +196,23 @@ in the `SELECT` statement, including [ClickHouse] [MergeTree] table as well as [ [MySQL Database Engine], [MySQL Table Engine], and [MySQL Table Function] with possibly different encryption schemes. +### Suppressing Sensitive Values + #### RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues version: 1.0 [ClickHouse] SHALL suppress output of [AES] `string` and `key` parameters to the system log, error log, and `query_log` table to prevent leakage of sensitive values. +### Invalid Parameters + #### RQ.SRS008.AES.Functions.InvalidParameters version: 1.0 [ClickHouse] SHALL return an error when parameters are invalid. +### Mismatched Values + #### RQ.SRS008.AES.Functions.Mismatched.Key version: 1.0 @@ -205,6 +233,8 @@ version: 1.0 [ClickHouse] SHALL return an error or garbage for mismatched mode. +### Performance + #### RQ.SRS008.AES.Functions.Check.Performance version: 1.0 @@ -233,7 +263,7 @@ version: 1.0 Effect of [AES] encryption on the compression of a column with [LowCardinality] data type SHALL be measured. -### Specific +### Encrypt Function #### RQ.SRS008.AES.Encrypt.Function version: 1.0 @@ -255,21 +285,23 @@ version: 1.0 [ClickHouse] `encrypt` function output SHALL produce output that matches [NIST test vectors]. #### RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText -version: 1.0 +version: 2.0 + +[ClickHouse] SHALL support `plaintext` with `String`, `FixedString`, `Nullable(String)`, +`Nullable(FixedString)`, `LowCardinality(String)`, or `LowCardinality(FixedString(N))` data types as +the second parameter to the `encrypt` function that SHALL specify the data to be encrypted. -[ClickHouse] SHALL support `plaintext` accepting any data type as -the first parameter to the `encrypt` function that SHALL specify the data to be encrypted. #### RQ.SRS008.AES.Encrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `encrypt` function that SHALL specify the encryption key. +as the parameter to the `encrypt` function that SHALL specify the encryption key. #### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `encrypt` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat @@ -308,13 +340,13 @@ of the `encrypt` function: * `aes-192-ofb` that SHALL use [OFB] block mode encryption with 192 bit key * `aes-256-ofb` that SHALL use [OFB] block mode encryption with 256 bit key * `aes-128-gcm` that SHALL use [GCM] block mode encryption with 128 bit key - and `AEAD` 16-byte tag is appended to the resulting ciphertext according to + and [AEAD] 16-byte tag is appended to the resulting ciphertext according to the [RFC5116] * `aes-192-gcm` that SHALL use [GCM] block mode encryption with 192 bit key - and `AEAD` 16-byte tag is appended to the resulting ciphertext according to + and [AEAD] 16-byte tag is appended to the resulting ciphertext according to the [RFC5116] * `aes-256-gcm` that SHALL use [GCM] block mode encryption with 256 bit key - and `AEAD` 16-byte tag is appended to the resulting ciphertext according to + and [AEAD] 16-byte tag is appended to the resulting ciphertext according to the [RFC5116] * `aes-128-ctr` that SHALL use [CTR] block mode encryption with 128 bit key * `aes-192-ctr` that SHALL use [CTR] block mode encryption with 192 bit key @@ -403,6 +435,8 @@ when using GCM modes * `aes-192-gcm` mode and `key` is not 24 bytes or `iv` is not specified * `aes-256-gcm` mode and `key` is not 32 bytes or `iv` is not specified +### Decrypt Function + #### RQ.SRS008.AES.Decrypt.Function version: 1.0 @@ -421,18 +455,18 @@ decrypt(mode, ciphertext, key, [iv, aad]) version: 1.0 [ClickHouse] SHALL support `ciphertext` accepting `FixedString` or `String` data types as -the first parameter to the `decrypt` function that SHALL specify the data to be decrypted. +the second parameter to the `decrypt` function that SHALL specify the data to be decrypted. #### RQ.SRS008.AES.Decrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `decrypt` function that SHALL specify the encryption key. +as the third parameter to the `decrypt` function that SHALL specify the encryption key. #### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `decrypt` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat @@ -511,7 +545,7 @@ version: 1.0 #### RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError version: 1.0 -[ClickHouse] SHALL return an error if the `iv` is speficified and the length is not exact for the `decrypt` function for a given block mode. +[ClickHouse] SHALL return an error if the `iv` is specified and the length is not exact for the `decrypt` function for a given block mode. #### RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode version: 1.0 @@ -568,7 +602,7 @@ when using GCM modes * `aes-192-gcm` mode and `key` is not 24 bytes or `iv` is not specified * `aes-256-gcm` mode and `key` is not 32 bytes or `iv` is not specified -### MySQL Specific Functions +### MySQL Encrypt Function #### RQ.SRS008.AES.MySQL.Encrypt.Function version: 1.0 @@ -585,21 +619,22 @@ aes_encrypt_mysql(mode, plaintext, key, [iv]) ``` #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText -version: 1.0 +version: 2.0 -[ClickHouse] SHALL support `plaintext` accepting any data type as -the first parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted. +[ClickHouse] SHALL support `plaintext` with `String`, `FixedString`, `Nullable(String)`, +`Nullable(FixedString)`, `LowCardinality(String)`, or `LowCardinality(FixedString(N))` data types as +the second parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted. #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key. +as the third parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key. #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `aes_encrypt_mysql` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat @@ -734,6 +769,8 @@ version: 1.0 * `aes-192-ofb` mode and `key` is less than 24 bytes or if specified `iv` is less than 16 bytes * `aes-256-ofb` mode and `key` is less than 32 bytes or if specified `iv` is less than 16 bytes +### MySQL Decrypt Function + #### RQ.SRS008.AES.MySQL.Decrypt.Function version: 1.0 @@ -752,18 +789,18 @@ aes_decrypt_mysql(mode, ciphertext, key, [iv]) version: 1.0 [ClickHouse] SHALL support `ciphertext` accepting any data type as -the first parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted. +the second parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted. #### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key. +as the third parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key. #### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `aes_decrypt_mysql` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat @@ -906,6 +943,7 @@ version: 1.0 * **ClickHouse:** https://clickhouse.tech * **Git:** https://git-scm.com/ +[AEAD]: #aead [OpenSSL]: https://www.openssl.org/ [LowCardinality]: https://clickhouse.tech/docs/en/sql-reference/data-types/lowcardinality/ [MergeTree]: https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/ diff --git a/tests/testflows/aes_encryption/requirements/requirements.py b/tests/testflows/aes_encryption/requirements/requirements.py index 47e8d46f446..cf8613ceff6 100644 --- a/tests/testflows/aes_encryption/requirements/requirements.py +++ b/tests/testflows/aes_encryption/requirements/requirements.py @@ -1,6 +1,6 @@ # These requirements were auto generated # from software requirements specification (SRS) -# document by TestFlows v1.6.201216.1172002. +# document by TestFlows v1.6.210101.1235930. # Do not edit by hand but re-generate instead # using 'tfs requirements generate' command. from testflows.core import Specification @@ -23,8 +23,8 @@ RQ_SRS008_AES_Functions = Requirement( level=3, num='4.1.1') -RQ_SRS008_AES_Functions_Compatability_MySQL = Requirement( - name='RQ.SRS008.AES.Functions.Compatability.MySQL', +RQ_SRS008_AES_Functions_Compatibility_MySQL = Requirement( + name='RQ.SRS008.AES.Functions.Compatibility.MySQL', version='1.0', priority=None, group=None, @@ -36,10 +36,10 @@ RQ_SRS008_AES_Functions_Compatability_MySQL = Requirement( ), link=None, level=3, - num='4.1.2') + num='4.2.1') -RQ_SRS008_AES_Functions_Compatability_Dictionaries = Requirement( - name='RQ.SRS008.AES.Functions.Compatability.Dictionaries', +RQ_SRS008_AES_Functions_Compatibility_Dictionaries = Requirement( + name='RQ.SRS008.AES.Functions.Compatibility.Dictionaries', version='1.0', priority=None, group=None, @@ -52,10 +52,10 @@ RQ_SRS008_AES_Functions_Compatability_Dictionaries = Requirement( ), link=None, level=3, - num='4.1.3') + num='4.2.2') -RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL = Requirement( - name='RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL', +RQ_SRS008_AES_Functions_Compatibility_Engine_Database_MySQL = Requirement( + name='RQ.SRS008.AES.Functions.Compatibility.Engine.Database.MySQL', version='1.0', priority=None, group=None, @@ -67,10 +67,10 @@ RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL = Requirement( ), link=None, level=3, - num='4.1.4') + num='4.2.3') -RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL = Requirement( - name='RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL', +RQ_SRS008_AES_Functions_Compatibility_Engine_Table_MySQL = Requirement( + name='RQ.SRS008.AES.Functions.Compatibility.Engine.Table.MySQL', version='1.0', priority=None, group=None, @@ -82,10 +82,10 @@ RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL = Requirement( ), link=None, level=3, - num='4.1.5') + num='4.2.4') -RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL = Requirement( - name='RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL', +RQ_SRS008_AES_Functions_Compatibility_TableFunction_MySQL = Requirement( + name='RQ.SRS008.AES.Functions.Compatibility.TableFunction.MySQL', version='1.0', priority=None, group=None, @@ -97,7 +97,7 @@ RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL = Requirement( ), link=None, level=3, - num='4.1.6') + num='4.2.5') RQ_SRS008_AES_Functions_DifferentModes = Requirement( name='RQ.SRS008.AES.Functions.DifferentModes', @@ -113,7 +113,7 @@ RQ_SRS008_AES_Functions_DifferentModes = Requirement( ), link=None, level=3, - num='4.1.7') + num='4.3.1') RQ_SRS008_AES_Functions_DataFromMultipleSources = Requirement( name='RQ.SRS008.AES.Functions.DataFromMultipleSources', @@ -131,7 +131,7 @@ RQ_SRS008_AES_Functions_DataFromMultipleSources = Requirement( ), link=None, level=3, - num='4.1.8') + num='4.4.1') RQ_SRS008_AES_Functions_SuppressOutputOfSensitiveValues = Requirement( name='RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues', @@ -147,7 +147,7 @@ RQ_SRS008_AES_Functions_SuppressOutputOfSensitiveValues = Requirement( ), link=None, level=3, - num='4.1.9') + num='4.5.1') RQ_SRS008_AES_Functions_InvalidParameters = Requirement( name='RQ.SRS008.AES.Functions.InvalidParameters', @@ -162,7 +162,7 @@ RQ_SRS008_AES_Functions_InvalidParameters = Requirement( ), link=None, level=3, - num='4.1.10') + num='4.6.1') RQ_SRS008_AES_Functions_Mismatched_Key = Requirement( name='RQ.SRS008.AES.Functions.Mismatched.Key', @@ -177,7 +177,7 @@ RQ_SRS008_AES_Functions_Mismatched_Key = Requirement( ), link=None, level=3, - num='4.1.11') + num='4.7.1') RQ_SRS008_AES_Functions_Mismatched_IV = Requirement( name='RQ.SRS008.AES.Functions.Mismatched.IV', @@ -192,7 +192,7 @@ RQ_SRS008_AES_Functions_Mismatched_IV = Requirement( ), link=None, level=3, - num='4.1.12') + num='4.7.2') RQ_SRS008_AES_Functions_Mismatched_AAD = Requirement( name='RQ.SRS008.AES.Functions.Mismatched.AAD', @@ -207,7 +207,7 @@ RQ_SRS008_AES_Functions_Mismatched_AAD = Requirement( ), link=None, level=3, - num='4.1.13') + num='4.7.3') RQ_SRS008_AES_Functions_Mismatched_Mode = Requirement( name='RQ.SRS008.AES.Functions.Mismatched.Mode', @@ -222,7 +222,7 @@ RQ_SRS008_AES_Functions_Mismatched_Mode = Requirement( ), link=None, level=3, - num='4.1.14') + num='4.7.4') RQ_SRS008_AES_Functions_Check_Performance = Requirement( name='RQ.SRS008.AES.Functions.Check.Performance', @@ -237,7 +237,7 @@ RQ_SRS008_AES_Functions_Check_Performance = Requirement( ), link=None, level=3, - num='4.1.15') + num='4.8.1') RQ_SRS008_AES_Function_Check_Performance_BestCase = Requirement( name='RQ.SRS008.AES.Function.Check.Performance.BestCase', @@ -253,7 +253,7 @@ RQ_SRS008_AES_Function_Check_Performance_BestCase = Requirement( ), link=None, level=3, - num='4.1.16') + num='4.8.2') RQ_SRS008_AES_Function_Check_Performance_WorstCase = Requirement( name='RQ.SRS008.AES.Function.Check.Performance.WorstCase', @@ -269,7 +269,7 @@ RQ_SRS008_AES_Function_Check_Performance_WorstCase = Requirement( ), link=None, level=3, - num='4.1.17') + num='4.8.3') RQ_SRS008_AES_Functions_Check_Compression = Requirement( name='RQ.SRS008.AES.Functions.Check.Compression', @@ -284,7 +284,7 @@ RQ_SRS008_AES_Functions_Check_Compression = Requirement( ), link=None, level=3, - num='4.1.18') + num='4.8.4') RQ_SRS008_AES_Functions_Check_Compression_LowCardinality = Requirement( name='RQ.SRS008.AES.Functions.Check.Compression.LowCardinality', @@ -300,7 +300,7 @@ RQ_SRS008_AES_Functions_Check_Compression_LowCardinality = Requirement( ), link=None, level=3, - num='4.1.19') + num='4.8.5') RQ_SRS008_AES_Encrypt_Function = Requirement( name='RQ.SRS008.AES.Encrypt.Function', @@ -315,7 +315,7 @@ RQ_SRS008_AES_Encrypt_Function = Requirement( ), link=None, level=3, - num='4.2.1') + num='4.9.1') RQ_SRS008_AES_Encrypt_Function_Syntax = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Syntax', @@ -334,7 +334,7 @@ RQ_SRS008_AES_Encrypt_Function_Syntax = Requirement( ), link=None, level=3, - num='4.2.2') + num='4.9.2') RQ_SRS008_AES_Encrypt_Function_NIST_TestVectors = Requirement( name='RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors', @@ -349,23 +349,25 @@ RQ_SRS008_AES_Encrypt_Function_NIST_TestVectors = Requirement( ), link=None, level=3, - num='4.2.3') + num='4.9.3') RQ_SRS008_AES_Encrypt_Function_Parameters_PlainText = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText', - version='1.0', + version='2.0', priority=None, group=None, type=None, uid=None, description=( - '[ClickHouse] SHALL support `plaintext` accepting any data type as\n' - 'the first parameter to the `encrypt` function that SHALL specify the data to be encrypted.\n' + '[ClickHouse] SHALL support `plaintext` with `String`, `FixedString`, `Nullable(String)`,\n' + '`Nullable(FixedString)`, `LowCardinality(String)`, or `LowCardinality(FixedString(N))` data types as\n' + 'the second parameter to the `encrypt` function that SHALL specify the data to be encrypted.\n' + '\n' '\n' ), link=None, level=3, - num='4.2.4') + num='4.9.4') RQ_SRS008_AES_Encrypt_Function_Parameters_Key = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.Key', @@ -376,12 +378,12 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_Key = Requirement( uid=None, description=( '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n' - 'as the second parameter to the `encrypt` function that SHALL specify the encryption key.\n' + 'as the parameter to the `encrypt` function that SHALL specify the encryption key.\n' '\n' ), link=None, level=3, - num='4.2.5') + num='4.9.5') RQ_SRS008_AES_Encrypt_Function_Parameters_Mode = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode', @@ -391,13 +393,13 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_Mode = Requirement( type=None, uid=None, description=( - '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n' + '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter\n' 'to the `encrypt` function that SHALL specify encryption key length and block encryption mode.\n' '\n' ), link=None, level=3, - num='4.2.6') + num='4.9.6') RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_ValuesFormat = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat', @@ -417,7 +419,7 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_ValuesFormat = Requirement( ), link=None, level=3, - num='4.2.7') + num='4.9.7') RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_Invalid = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid', @@ -434,7 +436,7 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Value_Invalid = Requirement( ), link=None, level=3, - num='4.2.8') + num='4.9.8') RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Values = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values', @@ -460,13 +462,13 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Values = Requirement( '* `aes-192-ofb` that SHALL use [OFB] block mode encryption with 192 bit key\n' '* `aes-256-ofb` that SHALL use [OFB] block mode encryption with 256 bit key\n' '* `aes-128-gcm` that SHALL use [GCM] block mode encryption with 128 bit key\n' - ' and `AEAD` 16-byte tag is appended to the resulting ciphertext according to\n' + ' and [AEAD] 16-byte tag is appended to the resulting ciphertext according to\n' ' the [RFC5116]\n' '* `aes-192-gcm` that SHALL use [GCM] block mode encryption with 192 bit key\n' - ' and `AEAD` 16-byte tag is appended to the resulting ciphertext according to\n' + ' and [AEAD] 16-byte tag is appended to the resulting ciphertext according to\n' ' the [RFC5116]\n' '* `aes-256-gcm` that SHALL use [GCM] block mode encryption with 256 bit key\n' - ' and `AEAD` 16-byte tag is appended to the resulting ciphertext according to\n' + ' and [AEAD] 16-byte tag is appended to the resulting ciphertext according to\n' ' the [RFC5116]\n' '* `aes-128-ctr` that SHALL use [CTR] block mode encryption with 128 bit key\n' '* `aes-192-ctr` that SHALL use [CTR] block mode encryption with 192 bit key\n' @@ -475,7 +477,7 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Values = Requirement( ), link=None, level=3, - num='4.2.9') + num='4.9.9') RQ_SRS008_AES_Encrypt_Function_Parameters_InitializationVector = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector', @@ -492,7 +494,7 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_InitializationVector = Requirement( ), link=None, level=3, - num='4.2.10') + num='4.9.10') RQ_SRS008_AES_Encrypt_Function_Parameters_AdditionalAuthenticatedData = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData', @@ -509,7 +511,7 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_AdditionalAuthenticatedData = Requirem ), link=None, level=3, - num='4.2.11') + num='4.9.11') RQ_SRS008_AES_Encrypt_Function_Parameters_ReturnValue = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue', @@ -525,7 +527,7 @@ RQ_SRS008_AES_Encrypt_Function_Parameters_ReturnValue = Requirement( ), link=None, level=3, - num='4.2.12') + num='4.9.12') RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError = Requirement( name='RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError', @@ -540,7 +542,7 @@ RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError = Requirement( ), link=None, level=3, - num='4.2.13') + num='4.9.13') RQ_SRS008_AES_Encrypt_Function_InitializationVector_Length_InvalidLengthError = Requirement( name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError', @@ -555,7 +557,7 @@ RQ_SRS008_AES_Encrypt_Function_InitializationVector_Length_InvalidLengthError = ), link=None, level=3, - num='4.2.14') + num='4.9.14') RQ_SRS008_AES_Encrypt_Function_InitializationVector_NotValidForMode = Requirement( name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode', @@ -570,7 +572,7 @@ RQ_SRS008_AES_Encrypt_Function_InitializationVector_NotValidForMode = Requiremen ), link=None, level=3, - num='4.2.15') + num='4.9.15') RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode = Requirement( name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode', @@ -585,7 +587,7 @@ RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_NotValidForMode = Re ), link=None, level=3, - num='4.2.16') + num='4.9.16') RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_Length = Requirement( name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length', @@ -600,7 +602,7 @@ RQ_SRS008_AES_Encrypt_Function_AdditionalAuthenticationData_Length = Requirement ), link=None, level=3, - num='4.2.17') + num='4.9.17') RQ_SRS008_AES_Encrypt_Function_NonGCMMode_KeyAndInitializationVector_Length = Requirement( name='RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length', @@ -638,7 +640,7 @@ RQ_SRS008_AES_Encrypt_Function_NonGCMMode_KeyAndInitializationVector_Length = Re ), link=None, level=3, - num='4.2.18') + num='4.9.18') RQ_SRS008_AES_Encrypt_Function_GCMMode_KeyAndInitializationVector_Length = Requirement( name='RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length', @@ -658,7 +660,7 @@ RQ_SRS008_AES_Encrypt_Function_GCMMode_KeyAndInitializationVector_Length = Requi ), link=None, level=3, - num='4.2.19') + num='4.9.19') RQ_SRS008_AES_Decrypt_Function = Requirement( name='RQ.SRS008.AES.Decrypt.Function', @@ -673,7 +675,7 @@ RQ_SRS008_AES_Decrypt_Function = Requirement( ), link=None, level=3, - num='4.2.20') + num='4.10.1') RQ_SRS008_AES_Decrypt_Function_Syntax = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Syntax', @@ -692,7 +694,7 @@ RQ_SRS008_AES_Decrypt_Function_Syntax = Requirement( ), link=None, level=3, - num='4.2.21') + num='4.10.2') RQ_SRS008_AES_Decrypt_Function_Parameters_CipherText = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText', @@ -703,12 +705,12 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_CipherText = Requirement( uid=None, description=( '[ClickHouse] SHALL support `ciphertext` accepting `FixedString` or `String` data types as\n' - 'the first parameter to the `decrypt` function that SHALL specify the data to be decrypted.\n' + 'the second parameter to the `decrypt` function that SHALL specify the data to be decrypted.\n' '\n' ), link=None, level=3, - num='4.2.22') + num='4.10.3') RQ_SRS008_AES_Decrypt_Function_Parameters_Key = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.Key', @@ -719,12 +721,12 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_Key = Requirement( uid=None, description=( '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n' - 'as the second parameter to the `decrypt` function that SHALL specify the encryption key.\n' + 'as the third parameter to the `decrypt` function that SHALL specify the encryption key.\n' '\n' ), link=None, level=3, - num='4.2.23') + num='4.10.4') RQ_SRS008_AES_Decrypt_Function_Parameters_Mode = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode', @@ -734,13 +736,13 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_Mode = Requirement( type=None, uid=None, description=( - '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n' + '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter\n' 'to the `decrypt` function that SHALL specify encryption key length and block encryption mode.\n' '\n' ), link=None, level=3, - num='4.2.24') + num='4.10.5') RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_ValuesFormat = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat', @@ -760,7 +762,7 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_ValuesFormat = Requirement( ), link=None, level=3, - num='4.2.25') + num='4.10.6') RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_Invalid = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid', @@ -777,7 +779,7 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Value_Invalid = Requirement( ), link=None, level=3, - num='4.2.26') + num='4.10.7') RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Values = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values', @@ -818,7 +820,7 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_Mode_Values = Requirement( ), link=None, level=3, - num='4.2.27') + num='4.10.8') RQ_SRS008_AES_Decrypt_Function_Parameters_InitializationVector = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector', @@ -835,7 +837,7 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_InitializationVector = Requirement( ), link=None, level=3, - num='4.2.28') + num='4.10.9') RQ_SRS008_AES_Decrypt_Function_Parameters_AdditionalAuthenticatedData = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData', @@ -852,7 +854,7 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_AdditionalAuthenticatedData = Requirem ), link=None, level=3, - num='4.2.29') + num='4.10.10') RQ_SRS008_AES_Decrypt_Function_Parameters_ReturnValue = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue', @@ -868,7 +870,7 @@ RQ_SRS008_AES_Decrypt_Function_Parameters_ReturnValue = Requirement( ), link=None, level=3, - num='4.2.30') + num='4.10.11') RQ_SRS008_AES_Decrypt_Function_Key_Length_InvalidLengthError = Requirement( name='RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError', @@ -883,7 +885,7 @@ RQ_SRS008_AES_Decrypt_Function_Key_Length_InvalidLengthError = Requirement( ), link=None, level=3, - num='4.2.31') + num='4.10.12') RQ_SRS008_AES_Decrypt_Function_InitializationVector_Length_InvalidLengthError = Requirement( name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError', @@ -893,12 +895,12 @@ RQ_SRS008_AES_Decrypt_Function_InitializationVector_Length_InvalidLengthError = type=None, uid=None, description=( - '[ClickHouse] SHALL return an error if the `iv` is speficified and the length is not exact for the `decrypt` function for a given block mode.\n' + '[ClickHouse] SHALL return an error if the `iv` is specified and the length is not exact for the `decrypt` function for a given block mode.\n' '\n' ), link=None, level=3, - num='4.2.32') + num='4.10.13') RQ_SRS008_AES_Decrypt_Function_InitializationVector_NotValidForMode = Requirement( name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode', @@ -914,7 +916,7 @@ RQ_SRS008_AES_Decrypt_Function_InitializationVector_NotValidForMode = Requiremen ), link=None, level=3, - num='4.2.33') + num='4.10.14') RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode = Requirement( name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode', @@ -930,7 +932,7 @@ RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_NotValidForMode = Re ), link=None, level=3, - num='4.2.34') + num='4.10.15') RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_Length = Requirement( name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length', @@ -945,7 +947,7 @@ RQ_SRS008_AES_Decrypt_Function_AdditionalAuthenticationData_Length = Requirement ), link=None, level=3, - num='4.2.35') + num='4.10.16') RQ_SRS008_AES_Decrypt_Function_NonGCMMode_KeyAndInitializationVector_Length = Requirement( name='RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length', @@ -983,7 +985,7 @@ RQ_SRS008_AES_Decrypt_Function_NonGCMMode_KeyAndInitializationVector_Length = Re ), link=None, level=3, - num='4.2.36') + num='4.10.17') RQ_SRS008_AES_Decrypt_Function_GCMMode_KeyAndInitializationVector_Length = Requirement( name='RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length', @@ -1003,7 +1005,7 @@ RQ_SRS008_AES_Decrypt_Function_GCMMode_KeyAndInitializationVector_Length = Requi ), link=None, level=3, - num='4.2.37') + num='4.10.18') RQ_SRS008_AES_MySQL_Encrypt_Function = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function', @@ -1018,7 +1020,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function = Requirement( ), link=None, level=3, - num='4.3.1') + num='4.11.1') RQ_SRS008_AES_MySQL_Encrypt_Function_Syntax = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax', @@ -1037,23 +1039,24 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Syntax = Requirement( ), link=None, level=3, - num='4.3.2') + num='4.11.2') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_PlainText = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText', - version='1.0', + version='2.0', priority=None, group=None, type=None, uid=None, description=( - '[ClickHouse] SHALL support `plaintext` accepting any data type as\n' - 'the first parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted.\n' + '[ClickHouse] SHALL support `plaintext` with `String`, `FixedString`, `Nullable(String)`,\n' + '`Nullable(FixedString)`, `LowCardinality(String)`, or `LowCardinality(FixedString(N))` data types as\n' + 'the second parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted.\n' '\n' ), link=None, level=3, - num='4.3.3') + num='4.11.3') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Key = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key', @@ -1064,12 +1067,12 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Key = Requirement( uid=None, description=( '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n' - 'as the second parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key.\n' + 'as the third parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key.\n' '\n' ), link=None, level=3, - num='4.3.4') + num='4.11.4') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode', @@ -1079,13 +1082,13 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode = Requirement( type=None, uid=None, description=( - '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n' + '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter\n' 'to the `aes_encrypt_mysql` function that SHALL specify encryption key length and block encryption mode.\n' '\n' ), link=None, level=3, - num='4.3.5') + num='4.11.5') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_ValuesFormat = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat', @@ -1104,7 +1107,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_ValuesFormat = Requirement( ), link=None, level=3, - num='4.3.6') + num='4.11.6') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_Invalid = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid', @@ -1121,7 +1124,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Value_Invalid = Requirement ), link=None, level=3, - num='4.3.7') + num='4.11.7') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values', @@ -1150,7 +1153,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values = Requirement( ), link=None, level=3, - num='4.3.8') + num='4.11.8') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values_GCM_Error = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error', @@ -1170,7 +1173,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values_GCM_Error = Requirem ), link=None, level=3, - num='4.3.9') + num='4.11.9') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values_CTR_Error = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error', @@ -1190,7 +1193,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values_CTR_Error = Requirem ), link=None, level=3, - num='4.3.10') + num='4.11.10') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_InitializationVector = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector', @@ -1207,7 +1210,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_InitializationVector = Requireme ), link=None, level=3, - num='4.3.11') + num='4.11.11') RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_ReturnValue = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue', @@ -1223,7 +1226,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_ReturnValue = Requirement( ), link=None, level=3, - num='4.3.12') + num='4.11.12') RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooShortError = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError', @@ -1239,7 +1242,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooShortError = Requirement( ), link=None, level=3, - num='4.3.13') + num='4.11.13') RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooLong = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong', @@ -1265,7 +1268,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooLong = Requirement( ), link=None, level=3, - num='4.3.14') + num='4.11.14') RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooShortError = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError', @@ -1281,7 +1284,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooShortError = ), link=None, level=3, - num='4.3.15') + num='4.11.15') RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooLong = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong', @@ -1297,7 +1300,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_Length_TooLong = Requi ), link=None, level=3, - num='4.3.16') + num='4.11.16') RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode', @@ -1313,7 +1316,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_InitializationVector_NotValidForMode = Requ ), link=None, level=3, - num='4.3.17') + num='4.11.17') RQ_SRS008_AES_MySQL_Encrypt_Function_Mode_KeyAndInitializationVector_Length = Requirement( name='RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length', @@ -1347,7 +1350,7 @@ RQ_SRS008_AES_MySQL_Encrypt_Function_Mode_KeyAndInitializationVector_Length = Re ), link=None, level=3, - num='4.3.18') + num='4.11.18') RQ_SRS008_AES_MySQL_Decrypt_Function = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function', @@ -1362,7 +1365,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function = Requirement( ), link=None, level=3, - num='4.3.19') + num='4.12.1') RQ_SRS008_AES_MySQL_Decrypt_Function_Syntax = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax', @@ -1381,7 +1384,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Syntax = Requirement( ), link=None, level=3, - num='4.3.20') + num='4.12.2') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_CipherText = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText', @@ -1392,12 +1395,12 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_CipherText = Requirement( uid=None, description=( '[ClickHouse] SHALL support `ciphertext` accepting any data type as\n' - 'the first parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted.\n' + 'the second parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted.\n' '\n' ), link=None, level=3, - num='4.3.21') + num='4.12.3') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Key = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key', @@ -1408,12 +1411,12 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Key = Requirement( uid=None, description=( '[ClickHouse] SHALL support `key` with `String` or `FixedString` data types\n' - 'as the second parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key.\n' + 'as the third parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key.\n' '\n' ), link=None, level=3, - num='4.3.22') + num='4.12.4') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode', @@ -1423,13 +1426,13 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode = Requirement( type=None, uid=None, description=( - '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter\n' + '[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter\n' 'to the `aes_decrypt_mysql` function that SHALL specify encryption key length and block encryption mode.\n' '\n' ), link=None, level=3, - num='4.3.23') + num='4.12.5') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_ValuesFormat = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat', @@ -1448,7 +1451,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_ValuesFormat = Requirement( ), link=None, level=3, - num='4.3.24') + num='4.12.6') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_Invalid = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid', @@ -1465,7 +1468,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Value_Invalid = Requirement ), link=None, level=3, - num='4.3.25') + num='4.12.7') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Values = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values', @@ -1494,7 +1497,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Values = Requirement( ), link=None, level=3, - num='4.3.26') + num='4.12.8') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Values_GCM_Error = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error', @@ -1514,7 +1517,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Values_GCM_Error = Requirem ), link=None, level=3, - num='4.3.27') + num='4.12.9') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Values_CTR_Error = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error', @@ -1534,7 +1537,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_Mode_Values_CTR_Error = Requirem ), link=None, level=3, - num='4.3.28') + num='4.12.10') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_InitializationVector = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector', @@ -1551,7 +1554,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_InitializationVector = Requireme ), link=None, level=3, - num='4.3.29') + num='4.12.11') RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_ReturnValue = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue', @@ -1567,7 +1570,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Parameters_ReturnValue = Requirement( ), link=None, level=3, - num='4.3.30') + num='4.12.12') RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooShortError = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError', @@ -1583,7 +1586,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooShortError = Requirement( ), link=None, level=3, - num='4.3.31') + num='4.12.13') RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooLong = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong', @@ -1609,7 +1612,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Key_Length_TooLong = Requirement( ), link=None, level=3, - num='4.3.32') + num='4.12.14') RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooShortError = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError', @@ -1625,7 +1628,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooShortError = ), link=None, level=3, - num='4.3.33') + num='4.12.15') RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooLong = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong', @@ -1641,7 +1644,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_Length_TooLong = Requi ), link=None, level=3, - num='4.3.34') + num='4.12.16') RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode', @@ -1657,7 +1660,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_InitializationVector_NotValidForMode = Requ ), link=None, level=3, - num='4.3.35') + num='4.12.17') RQ_SRS008_AES_MySQL_Decrypt_Function_Mode_KeyAndInitializationVector_Length = Requirement( name='RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length', @@ -1691,7 +1694,7 @@ RQ_SRS008_AES_MySQL_Decrypt_Function_Mode_KeyAndInitializationVector_Length = Re ), link=None, level=3, - num='4.3.36') + num='4.12.18') SRS_008_ClickHouse_AES_Encryption_Functions = Specification( name='SRS-008 ClickHouse AES Encryption Functions', @@ -1713,111 +1716,122 @@ SRS_008_ClickHouse_AES_Encryption_Functions = Specification( Heading(name='Revision History', level=1, num='1'), Heading(name='Introduction', level=1, num='2'), Heading(name='Terminology', level=1, num='3'), + Heading(name='AES', level=2, num='3.1'), + Heading(name='AEAD', level=2, num='3.2'), Heading(name='Requirements', level=1, num='4'), Heading(name='Generic', level=2, num='4.1'), Heading(name='RQ.SRS008.AES.Functions', level=3, num='4.1.1'), - Heading(name='RQ.SRS008.AES.Functions.Compatability.MySQL', level=3, num='4.1.2'), - Heading(name='RQ.SRS008.AES.Functions.Compatability.Dictionaries', level=3, num='4.1.3'), - Heading(name='RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL', level=3, num='4.1.4'), - Heading(name='RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL', level=3, num='4.1.5'), - Heading(name='RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL', level=3, num='4.1.6'), - Heading(name='RQ.SRS008.AES.Functions.DifferentModes', level=3, num='4.1.7'), - Heading(name='RQ.SRS008.AES.Functions.DataFromMultipleSources', level=3, num='4.1.8'), - Heading(name='RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues', level=3, num='4.1.9'), - Heading(name='RQ.SRS008.AES.Functions.InvalidParameters', level=3, num='4.1.10'), - Heading(name='RQ.SRS008.AES.Functions.Mismatched.Key', level=3, num='4.1.11'), - Heading(name='RQ.SRS008.AES.Functions.Mismatched.IV', level=3, num='4.1.12'), - Heading(name='RQ.SRS008.AES.Functions.Mismatched.AAD', level=3, num='4.1.13'), - Heading(name='RQ.SRS008.AES.Functions.Mismatched.Mode', level=3, num='4.1.14'), - Heading(name='RQ.SRS008.AES.Functions.Check.Performance', level=3, num='4.1.15'), - Heading(name='RQ.SRS008.AES.Function.Check.Performance.BestCase', level=3, num='4.1.16'), - Heading(name='RQ.SRS008.AES.Function.Check.Performance.WorstCase', level=3, num='4.1.17'), - Heading(name='RQ.SRS008.AES.Functions.Check.Compression', level=3, num='4.1.18'), - Heading(name='RQ.SRS008.AES.Functions.Check.Compression.LowCardinality', level=3, num='4.1.19'), - Heading(name='Specific', level=2, num='4.2'), - Heading(name='RQ.SRS008.AES.Encrypt.Function', level=3, num='4.2.1'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Syntax', level=3, num='4.2.2'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors', level=3, num='4.2.3'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText', level=3, num='4.2.4'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Key', level=3, num='4.2.5'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode', level=3, num='4.2.6'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.2.7'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.2.8'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values', level=3, num='4.2.9'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector', level=3, num='4.2.10'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData', level=3, num='4.2.11'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue', level=3, num='4.2.12'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError', level=3, num='4.2.13'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError', level=3, num='4.2.14'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.2.15'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode', level=3, num='4.2.16'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length', level=3, num='4.2.17'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length', level=3, num='4.2.18'), - Heading(name='RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length', level=3, num='4.2.19'), - Heading(name='RQ.SRS008.AES.Decrypt.Function', level=3, num='4.2.20'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Syntax', level=3, num='4.2.21'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText', level=3, num='4.2.22'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Key', level=3, num='4.2.23'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode', level=3, num='4.2.24'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.2.25'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.2.26'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values', level=3, num='4.2.27'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector', level=3, num='4.2.28'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData', level=3, num='4.2.29'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue', level=3, num='4.2.30'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError', level=3, num='4.2.31'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError', level=3, num='4.2.32'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.2.33'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode', level=3, num='4.2.34'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length', level=3, num='4.2.35'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length', level=3, num='4.2.36'), - Heading(name='RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length', level=3, num='4.2.37'), - Heading(name='MySQL Specific Functions', level=2, num='4.3'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function', level=3, num='4.3.1'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax', level=3, num='4.3.2'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText', level=3, num='4.3.3'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key', level=3, num='4.3.4'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode', level=3, num='4.3.5'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.3.6'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.3.7'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values', level=3, num='4.3.8'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error', level=3, num='4.3.9'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error', level=3, num='4.3.10'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector', level=3, num='4.3.11'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue', level=3, num='4.3.12'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError', level=3, num='4.3.13'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong', level=3, num='4.3.14'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError', level=3, num='4.3.15'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong', level=3, num='4.3.16'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.3.17'), - Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length', level=3, num='4.3.18'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function', level=3, num='4.3.19'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax', level=3, num='4.3.20'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText', level=3, num='4.3.21'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key', level=3, num='4.3.22'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode', level=3, num='4.3.23'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.3.24'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.3.25'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values', level=3, num='4.3.26'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error', level=3, num='4.3.27'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error', level=3, num='4.3.28'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector', level=3, num='4.3.29'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue', level=3, num='4.3.30'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError', level=3, num='4.3.31'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong', level=3, num='4.3.32'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError', level=3, num='4.3.33'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong', level=3, num='4.3.34'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.3.35'), - Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length', level=3, num='4.3.36'), + Heading(name='Compatibility', level=2, num='4.2'), + Heading(name='RQ.SRS008.AES.Functions.Compatibility.MySQL', level=3, num='4.2.1'), + Heading(name='RQ.SRS008.AES.Functions.Compatibility.Dictionaries', level=3, num='4.2.2'), + Heading(name='RQ.SRS008.AES.Functions.Compatibility.Engine.Database.MySQL', level=3, num='4.2.3'), + Heading(name='RQ.SRS008.AES.Functions.Compatibility.Engine.Table.MySQL', level=3, num='4.2.4'), + Heading(name='RQ.SRS008.AES.Functions.Compatibility.TableFunction.MySQL', level=3, num='4.2.5'), + Heading(name='Different Modes', level=2, num='4.3'), + Heading(name='RQ.SRS008.AES.Functions.DifferentModes', level=3, num='4.3.1'), + Heading(name='Multiple Sources', level=2, num='4.4'), + Heading(name='RQ.SRS008.AES.Functions.DataFromMultipleSources', level=3, num='4.4.1'), + Heading(name='Suppressing Sensitive Values', level=2, num='4.5'), + Heading(name='RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues', level=3, num='4.5.1'), + Heading(name='Invalid Parameters', level=2, num='4.6'), + Heading(name='RQ.SRS008.AES.Functions.InvalidParameters', level=3, num='4.6.1'), + Heading(name='Mismatched Values', level=2, num='4.7'), + Heading(name='RQ.SRS008.AES.Functions.Mismatched.Key', level=3, num='4.7.1'), + Heading(name='RQ.SRS008.AES.Functions.Mismatched.IV', level=3, num='4.7.2'), + Heading(name='RQ.SRS008.AES.Functions.Mismatched.AAD', level=3, num='4.7.3'), + Heading(name='RQ.SRS008.AES.Functions.Mismatched.Mode', level=3, num='4.7.4'), + Heading(name='Performance', level=2, num='4.8'), + Heading(name='RQ.SRS008.AES.Functions.Check.Performance', level=3, num='4.8.1'), + Heading(name='RQ.SRS008.AES.Function.Check.Performance.BestCase', level=3, num='4.8.2'), + Heading(name='RQ.SRS008.AES.Function.Check.Performance.WorstCase', level=3, num='4.8.3'), + Heading(name='RQ.SRS008.AES.Functions.Check.Compression', level=3, num='4.8.4'), + Heading(name='RQ.SRS008.AES.Functions.Check.Compression.LowCardinality', level=3, num='4.8.5'), + Heading(name='Encrypt Function', level=2, num='4.9'), + Heading(name='RQ.SRS008.AES.Encrypt.Function', level=3, num='4.9.1'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Syntax', level=3, num='4.9.2'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors', level=3, num='4.9.3'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText', level=3, num='4.9.4'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Key', level=3, num='4.9.5'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode', level=3, num='4.9.6'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.9.7'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.9.8'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values', level=3, num='4.9.9'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector', level=3, num='4.9.10'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData', level=3, num='4.9.11'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue', level=3, num='4.9.12'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError', level=3, num='4.9.13'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError', level=3, num='4.9.14'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.9.15'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode', level=3, num='4.9.16'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length', level=3, num='4.9.17'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length', level=3, num='4.9.18'), + Heading(name='RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length', level=3, num='4.9.19'), + Heading(name='Decrypt Function', level=2, num='4.10'), + Heading(name='RQ.SRS008.AES.Decrypt.Function', level=3, num='4.10.1'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Syntax', level=3, num='4.10.2'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText', level=3, num='4.10.3'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Key', level=3, num='4.10.4'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode', level=3, num='4.10.5'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.10.6'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.10.7'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values', level=3, num='4.10.8'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector', level=3, num='4.10.9'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData', level=3, num='4.10.10'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue', level=3, num='4.10.11'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError', level=3, num='4.10.12'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError', level=3, num='4.10.13'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.10.14'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode', level=3, num='4.10.15'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length', level=3, num='4.10.16'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length', level=3, num='4.10.17'), + Heading(name='RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length', level=3, num='4.10.18'), + Heading(name='MySQL Encrypt Function', level=2, num='4.11'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function', level=3, num='4.11.1'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax', level=3, num='4.11.2'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText', level=3, num='4.11.3'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key', level=3, num='4.11.4'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode', level=3, num='4.11.5'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.11.6'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.11.7'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values', level=3, num='4.11.8'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error', level=3, num='4.11.9'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error', level=3, num='4.11.10'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector', level=3, num='4.11.11'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue', level=3, num='4.11.12'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError', level=3, num='4.11.13'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong', level=3, num='4.11.14'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError', level=3, num='4.11.15'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong', level=3, num='4.11.16'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.11.17'), + Heading(name='RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length', level=3, num='4.11.18'), + Heading(name='MySQL Decrypt Function', level=2, num='4.12'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function', level=3, num='4.12.1'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax', level=3, num='4.12.2'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText', level=3, num='4.12.3'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key', level=3, num='4.12.4'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode', level=3, num='4.12.5'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat', level=3, num='4.12.6'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid', level=3, num='4.12.7'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values', level=3, num='4.12.8'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error', level=3, num='4.12.9'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error', level=3, num='4.12.10'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector', level=3, num='4.12.11'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue', level=3, num='4.12.12'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError', level=3, num='4.12.13'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong', level=3, num='4.12.14'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError', level=3, num='4.12.15'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong', level=3, num='4.12.16'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode', level=3, num='4.12.17'), + Heading(name='RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length', level=3, num='4.12.18'), Heading(name='References', level=1, num='5'), ), requirements=( RQ_SRS008_AES_Functions, - RQ_SRS008_AES_Functions_Compatability_MySQL, - RQ_SRS008_AES_Functions_Compatability_Dictionaries, - RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL, - RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL, - RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL, + RQ_SRS008_AES_Functions_Compatibility_MySQL, + RQ_SRS008_AES_Functions_Compatibility_Dictionaries, + RQ_SRS008_AES_Functions_Compatibility_Engine_Database_MySQL, + RQ_SRS008_AES_Functions_Compatibility_Engine_Table_MySQL, + RQ_SRS008_AES_Functions_Compatibility_TableFunction_MySQL, RQ_SRS008_AES_Functions_DifferentModes, RQ_SRS008_AES_Functions_DataFromMultipleSources, RQ_SRS008_AES_Functions_SuppressOutputOfSensitiveValues, @@ -1914,102 +1928,113 @@ SRS_008_ClickHouse_AES_Encryption_Functions = Specification( * 1 [Revision History](#revision-history) * 2 [Introduction](#introduction) * 3 [Terminology](#terminology) + * 3.1 [AES](#aes) + * 3.2 [AEAD](#aead) * 4 [Requirements](#requirements) * 4.1 [Generic](#generic) * 4.1.1 [RQ.SRS008.AES.Functions](#rqsrs008aesfunctions) - * 4.1.2 [RQ.SRS008.AES.Functions.Compatability.MySQL](#rqsrs008aesfunctionscompatabilitymysql) - * 4.1.3 [RQ.SRS008.AES.Functions.Compatability.Dictionaries](#rqsrs008aesfunctionscompatabilitydictionaries) - * 4.1.4 [RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL](#rqsrs008aesfunctionscompatabilityenginedatabasemysql) - * 4.1.5 [RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL](#rqsrs008aesfunctionscompatabilityenginetablemysql) - * 4.1.6 [RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL](#rqsrs008aesfunctionscompatabilitytablefunctionmysql) - * 4.1.7 [RQ.SRS008.AES.Functions.DifferentModes](#rqsrs008aesfunctionsdifferentmodes) - * 4.1.8 [RQ.SRS008.AES.Functions.DataFromMultipleSources](#rqsrs008aesfunctionsdatafrommultiplesources) - * 4.1.9 [RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues](#rqsrs008aesfunctionssuppressoutputofsensitivevalues) - * 4.1.10 [RQ.SRS008.AES.Functions.InvalidParameters](#rqsrs008aesfunctionsinvalidparameters) - * 4.1.11 [RQ.SRS008.AES.Functions.Mismatched.Key](#rqsrs008aesfunctionsmismatchedkey) - * 4.1.12 [RQ.SRS008.AES.Functions.Mismatched.IV](#rqsrs008aesfunctionsmismatchediv) - * 4.1.13 [RQ.SRS008.AES.Functions.Mismatched.AAD](#rqsrs008aesfunctionsmismatchedaad) - * 4.1.14 [RQ.SRS008.AES.Functions.Mismatched.Mode](#rqsrs008aesfunctionsmismatchedmode) - * 4.1.15 [RQ.SRS008.AES.Functions.Check.Performance](#rqsrs008aesfunctionscheckperformance) - * 4.1.16 [RQ.SRS008.AES.Function.Check.Performance.BestCase](#rqsrs008aesfunctioncheckperformancebestcase) - * 4.1.17 [RQ.SRS008.AES.Function.Check.Performance.WorstCase](#rqsrs008aesfunctioncheckperformanceworstcase) - * 4.1.18 [RQ.SRS008.AES.Functions.Check.Compression](#rqsrs008aesfunctionscheckcompression) - * 4.1.19 [RQ.SRS008.AES.Functions.Check.Compression.LowCardinality](#rqsrs008aesfunctionscheckcompressionlowcardinality) - * 4.2 [Specific](#specific) - * 4.2.1 [RQ.SRS008.AES.Encrypt.Function](#rqsrs008aesencryptfunction) - * 4.2.2 [RQ.SRS008.AES.Encrypt.Function.Syntax](#rqsrs008aesencryptfunctionsyntax) - * 4.2.3 [RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors](#rqsrs008aesencryptfunctionnisttestvectors) - * 4.2.4 [RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText](#rqsrs008aesencryptfunctionparametersplaintext) - * 4.2.5 [RQ.SRS008.AES.Encrypt.Function.Parameters.Key](#rqsrs008aesencryptfunctionparameterskey) - * 4.2.6 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode](#rqsrs008aesencryptfunctionparametersmode) - * 4.2.7 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesencryptfunctionparametersmodevaluesformat) - * 4.2.8 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesencryptfunctionparametersmodevalueinvalid) - * 4.2.9 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesencryptfunctionparametersmodevalues) - * 4.2.10 [RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesencryptfunctionparametersinitializationvector) - * 4.2.11 [RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesencryptfunctionparametersadditionalauthenticateddata) - * 4.2.12 [RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesencryptfunctionparametersreturnvalue) - * 4.2.13 [RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesencryptfunctionkeylengthinvalidlengtherror) - * 4.2.14 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesencryptfunctioninitializationvectorlengthinvalidlengtherror) - * 4.2.15 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesencryptfunctioninitializationvectornotvalidformode) - * 4.2.16 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesencryptfunctionadditionalauthenticationdatanotvalidformode) - * 4.2.17 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesencryptfunctionadditionalauthenticationdatalength) - * 4.2.18 [RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionnongcmmodekeyandinitializationvectorlength) - * 4.2.19 [RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctiongcmmodekeyandinitializationvectorlength) - * 4.2.20 [RQ.SRS008.AES.Decrypt.Function](#rqsrs008aesdecryptfunction) - * 4.2.21 [RQ.SRS008.AES.Decrypt.Function.Syntax](#rqsrs008aesdecryptfunctionsyntax) - * 4.2.22 [RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText](#rqsrs008aesdecryptfunctionparametersciphertext) - * 4.2.23 [RQ.SRS008.AES.Decrypt.Function.Parameters.Key](#rqsrs008aesdecryptfunctionparameterskey) - * 4.2.24 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode](#rqsrs008aesdecryptfunctionparametersmode) - * 4.2.25 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesdecryptfunctionparametersmodevaluesformat) - * 4.2.26 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesdecryptfunctionparametersmodevalueinvalid) - * 4.2.27 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesdecryptfunctionparametersmodevalues) - * 4.2.28 [RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesdecryptfunctionparametersinitializationvector) - * 4.2.29 [RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesdecryptfunctionparametersadditionalauthenticateddata) - * 4.2.30 [RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesdecryptfunctionparametersreturnvalue) - * 4.2.31 [RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesdecryptfunctionkeylengthinvalidlengtherror) - * 4.2.32 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesdecryptfunctioninitializationvectorlengthinvalidlengtherror) - * 4.2.33 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesdecryptfunctioninitializationvectornotvalidformode) - * 4.2.34 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesdecryptfunctionadditionalauthenticationdatanotvalidformode) - * 4.2.35 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesdecryptfunctionadditionalauthenticationdatalength) - * 4.2.36 [RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionnongcmmodekeyandinitializationvectorlength) - * 4.2.37 [RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctiongcmmodekeyandinitializationvectorlength) - * 4.3 [MySQL Specific Functions](#mysql-specific-functions) - * 4.3.1 [RQ.SRS008.AES.MySQL.Encrypt.Function](#rqsrs008aesmysqlencryptfunction) - * 4.3.2 [RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax](#rqsrs008aesmysqlencryptfunctionsyntax) - * 4.3.3 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText](#rqsrs008aesmysqlencryptfunctionparametersplaintext) - * 4.3.4 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key](#rqsrs008aesmysqlencryptfunctionparameterskey) - * 4.3.5 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode](#rqsrs008aesmysqlencryptfunctionparametersmode) - * 4.3.6 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesformat) - * 4.3.7 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqlencryptfunctionparametersmodevalueinvalid) - * 4.3.8 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqlencryptfunctionparametersmodevalues) - * 4.3.9 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesgcmerror) - * 4.3.10 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesctrerror) - * 4.3.11 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqlencryptfunctionparametersinitializationvector) - * 4.3.12 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqlencryptfunctionparametersreturnvalue) - * 4.3.13 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqlencryptfunctionkeylengthtooshorterror) - * 4.3.14 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqlencryptfunctionkeylengthtoolong) - * 4.3.15 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtooshorterror) - * 4.3.16 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtoolong) - * 4.3.17 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqlencryptfunctioninitializationvectornotvalidformode) - * 4.3.18 [RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionmodekeyandinitializationvectorlength) - * 4.3.19 [RQ.SRS008.AES.MySQL.Decrypt.Function](#rqsrs008aesmysqldecryptfunction) - * 4.3.20 [RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax](#rqsrs008aesmysqldecryptfunctionsyntax) - * 4.3.21 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText](#rqsrs008aesmysqldecryptfunctionparametersciphertext) - * 4.3.22 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key](#rqsrs008aesmysqldecryptfunctionparameterskey) - * 4.3.23 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode](#rqsrs008aesmysqldecryptfunctionparametersmode) - * 4.3.24 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesformat) - * 4.3.25 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqldecryptfunctionparametersmodevalueinvalid) - * 4.3.26 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqldecryptfunctionparametersmodevalues) - * 4.3.27 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesgcmerror) - * 4.3.28 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesctrerror) - * 4.3.29 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqldecryptfunctionparametersinitializationvector) - * 4.3.30 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqldecryptfunctionparametersreturnvalue) - * 4.3.31 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqldecryptfunctionkeylengthtooshorterror) - * 4.3.32 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqldecryptfunctionkeylengthtoolong) - * 4.3.33 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtooshorterror) - * 4.3.34 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtoolong) - * 4.3.35 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqldecryptfunctioninitializationvectornotvalidformode) - * 4.3.36 [RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionmodekeyandinitializationvectorlength) + * 4.2 [Compatibility](#compatibility) + * 4.2.1 [RQ.SRS008.AES.Functions.Compatibility.MySQL](#rqsrs008aesfunctionscompatibilitymysql) + * 4.2.2 [RQ.SRS008.AES.Functions.Compatibility.Dictionaries](#rqsrs008aesfunctionscompatibilitydictionaries) + * 4.2.3 [RQ.SRS008.AES.Functions.Compatibility.Engine.Database.MySQL](#rqsrs008aesfunctionscompatibilityenginedatabasemysql) + * 4.2.4 [RQ.SRS008.AES.Functions.Compatibility.Engine.Table.MySQL](#rqsrs008aesfunctionscompatibilityenginetablemysql) + * 4.2.5 [RQ.SRS008.AES.Functions.Compatibility.TableFunction.MySQL](#rqsrs008aesfunctionscompatibilitytablefunctionmysql) + * 4.3 [Different Modes](#different-modes) + * 4.3.1 [RQ.SRS008.AES.Functions.DifferentModes](#rqsrs008aesfunctionsdifferentmodes) + * 4.4 [Multiple Sources](#multiple-sources) + * 4.4.1 [RQ.SRS008.AES.Functions.DataFromMultipleSources](#rqsrs008aesfunctionsdatafrommultiplesources) + * 4.5 [Suppressing Sensitive Values](#suppressing-sensitive-values) + * 4.5.1 [RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues](#rqsrs008aesfunctionssuppressoutputofsensitivevalues) + * 4.6 [Invalid Parameters](#invalid-parameters) + * 4.6.1 [RQ.SRS008.AES.Functions.InvalidParameters](#rqsrs008aesfunctionsinvalidparameters) + * 4.7 [Mismatched Values](#mismatched-values) + * 4.7.1 [RQ.SRS008.AES.Functions.Mismatched.Key](#rqsrs008aesfunctionsmismatchedkey) + * 4.7.2 [RQ.SRS008.AES.Functions.Mismatched.IV](#rqsrs008aesfunctionsmismatchediv) + * 4.7.3 [RQ.SRS008.AES.Functions.Mismatched.AAD](#rqsrs008aesfunctionsmismatchedaad) + * 4.7.4 [RQ.SRS008.AES.Functions.Mismatched.Mode](#rqsrs008aesfunctionsmismatchedmode) + * 4.8 [Performance](#performance) + * 4.8.1 [RQ.SRS008.AES.Functions.Check.Performance](#rqsrs008aesfunctionscheckperformance) + * 4.8.2 [RQ.SRS008.AES.Function.Check.Performance.BestCase](#rqsrs008aesfunctioncheckperformancebestcase) + * 4.8.3 [RQ.SRS008.AES.Function.Check.Performance.WorstCase](#rqsrs008aesfunctioncheckperformanceworstcase) + * 4.8.4 [RQ.SRS008.AES.Functions.Check.Compression](#rqsrs008aesfunctionscheckcompression) + * 4.8.5 [RQ.SRS008.AES.Functions.Check.Compression.LowCardinality](#rqsrs008aesfunctionscheckcompressionlowcardinality) + * 4.9 [Encrypt Function](#encrypt-function) + * 4.9.1 [RQ.SRS008.AES.Encrypt.Function](#rqsrs008aesencryptfunction) + * 4.9.2 [RQ.SRS008.AES.Encrypt.Function.Syntax](#rqsrs008aesencryptfunctionsyntax) + * 4.9.3 [RQ.SRS008.AES.Encrypt.Function.NIST.TestVectors](#rqsrs008aesencryptfunctionnisttestvectors) + * 4.9.4 [RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText](#rqsrs008aesencryptfunctionparametersplaintext) + * 4.9.5 [RQ.SRS008.AES.Encrypt.Function.Parameters.Key](#rqsrs008aesencryptfunctionparameterskey) + * 4.9.6 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode](#rqsrs008aesencryptfunctionparametersmode) + * 4.9.7 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesencryptfunctionparametersmodevaluesformat) + * 4.9.8 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesencryptfunctionparametersmodevalueinvalid) + * 4.9.9 [RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesencryptfunctionparametersmodevalues) + * 4.9.10 [RQ.SRS008.AES.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesencryptfunctionparametersinitializationvector) + * 4.9.11 [RQ.SRS008.AES.Encrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesencryptfunctionparametersadditionalauthenticateddata) + * 4.9.12 [RQ.SRS008.AES.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesencryptfunctionparametersreturnvalue) + * 4.9.13 [RQ.SRS008.AES.Encrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesencryptfunctionkeylengthinvalidlengtherror) + * 4.9.14 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesencryptfunctioninitializationvectorlengthinvalidlengtherror) + * 4.9.15 [RQ.SRS008.AES.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesencryptfunctioninitializationvectornotvalidformode) + * 4.9.16 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesencryptfunctionadditionalauthenticationdatanotvalidformode) + * 4.9.17 [RQ.SRS008.AES.Encrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesencryptfunctionadditionalauthenticationdatalength) + * 4.9.18 [RQ.SRS008.AES.Encrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctionnongcmmodekeyandinitializationvectorlength) + * 4.9.19 [RQ.SRS008.AES.Encrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesencryptfunctiongcmmodekeyandinitializationvectorlength) + * 4.10 [Decrypt Function](#decrypt-function) + * 4.10.1 [RQ.SRS008.AES.Decrypt.Function](#rqsrs008aesdecryptfunction) + * 4.10.2 [RQ.SRS008.AES.Decrypt.Function.Syntax](#rqsrs008aesdecryptfunctionsyntax) + * 4.10.3 [RQ.SRS008.AES.Decrypt.Function.Parameters.CipherText](#rqsrs008aesdecryptfunctionparametersciphertext) + * 4.10.4 [RQ.SRS008.AES.Decrypt.Function.Parameters.Key](#rqsrs008aesdecryptfunctionparameterskey) + * 4.10.5 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode](#rqsrs008aesdecryptfunctionparametersmode) + * 4.10.6 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesdecryptfunctionparametersmodevaluesformat) + * 4.10.7 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesdecryptfunctionparametersmodevalueinvalid) + * 4.10.8 [RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesdecryptfunctionparametersmodevalues) + * 4.10.9 [RQ.SRS008.AES.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesdecryptfunctionparametersinitializationvector) + * 4.10.10 [RQ.SRS008.AES.Decrypt.Function.Parameters.AdditionalAuthenticatedData](#rqsrs008aesdecryptfunctionparametersadditionalauthenticateddata) + * 4.10.11 [RQ.SRS008.AES.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesdecryptfunctionparametersreturnvalue) + * 4.10.12 [RQ.SRS008.AES.Decrypt.Function.Key.Length.InvalidLengthError](#rqsrs008aesdecryptfunctionkeylengthinvalidlengtherror) + * 4.10.13 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError](#rqsrs008aesdecryptfunctioninitializationvectorlengthinvalidlengtherror) + * 4.10.14 [RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesdecryptfunctioninitializationvectornotvalidformode) + * 4.10.15 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.NotValidForMode](#rqsrs008aesdecryptfunctionadditionalauthenticationdatanotvalidformode) + * 4.10.16 [RQ.SRS008.AES.Decrypt.Function.AdditionalAuthenticationData.Length](#rqsrs008aesdecryptfunctionadditionalauthenticationdatalength) + * 4.10.17 [RQ.SRS008.AES.Decrypt.Function.NonGCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctionnongcmmodekeyandinitializationvectorlength) + * 4.10.18 [RQ.SRS008.AES.Decrypt.Function.GCMMode.KeyAndInitializationVector.Length](#rqsrs008aesdecryptfunctiongcmmodekeyandinitializationvectorlength) + * 4.11 [MySQL Encrypt Function](#mysql-encrypt-function) + * 4.11.1 [RQ.SRS008.AES.MySQL.Encrypt.Function](#rqsrs008aesmysqlencryptfunction) + * 4.11.2 [RQ.SRS008.AES.MySQL.Encrypt.Function.Syntax](#rqsrs008aesmysqlencryptfunctionsyntax) + * 4.11.3 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText](#rqsrs008aesmysqlencryptfunctionparametersplaintext) + * 4.11.4 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key](#rqsrs008aesmysqlencryptfunctionparameterskey) + * 4.11.5 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode](#rqsrs008aesmysqlencryptfunctionparametersmode) + * 4.11.6 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesformat) + * 4.11.7 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqlencryptfunctionparametersmodevalueinvalid) + * 4.11.8 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqlencryptfunctionparametersmodevalues) + * 4.11.9 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesgcmerror) + * 4.11.10 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqlencryptfunctionparametersmodevaluesctrerror) + * 4.11.11 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqlencryptfunctionparametersinitializationvector) + * 4.11.12 [RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqlencryptfunctionparametersreturnvalue) + * 4.11.13 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqlencryptfunctionkeylengthtooshorterror) + * 4.11.14 [RQ.SRS008.AES.MySQL.Encrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqlencryptfunctionkeylengthtoolong) + * 4.11.15 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtooshorterror) + * 4.11.16 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqlencryptfunctioninitializationvectorlengthtoolong) + * 4.11.17 [RQ.SRS008.AES.MySQL.Encrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqlencryptfunctioninitializationvectornotvalidformode) + * 4.11.18 [RQ.SRS008.AES.MySQL.Encrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqlencryptfunctionmodekeyandinitializationvectorlength) + * 4.12 [MySQL Decrypt Function](#mysql-decrypt-function) + * 4.12.1 [RQ.SRS008.AES.MySQL.Decrypt.Function](#rqsrs008aesmysqldecryptfunction) + * 4.12.2 [RQ.SRS008.AES.MySQL.Decrypt.Function.Syntax](#rqsrs008aesmysqldecryptfunctionsyntax) + * 4.12.3 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.CipherText](#rqsrs008aesmysqldecryptfunctionparametersciphertext) + * 4.12.4 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key](#rqsrs008aesmysqldecryptfunctionparameterskey) + * 4.12.5 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode](#rqsrs008aesmysqldecryptfunctionparametersmode) + * 4.12.6 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesformat) + * 4.12.7 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Value.Invalid](#rqsrs008aesmysqldecryptfunctionparametersmodevalueinvalid) + * 4.12.8 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values](#rqsrs008aesmysqldecryptfunctionparametersmodevalues) + * 4.12.9 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.GCM.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesgcmerror) + * 4.12.10 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.Values.CTR.Error](#rqsrs008aesmysqldecryptfunctionparametersmodevaluesctrerror) + * 4.12.11 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.InitializationVector](#rqsrs008aesmysqldecryptfunctionparametersinitializationvector) + * 4.12.12 [RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.ReturnValue](#rqsrs008aesmysqldecryptfunctionparametersreturnvalue) + * 4.12.13 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooShortError](#rqsrs008aesmysqldecryptfunctionkeylengthtooshorterror) + * 4.12.14 [RQ.SRS008.AES.MySQL.Decrypt.Function.Key.Length.TooLong](#rqsrs008aesmysqldecryptfunctionkeylengthtoolong) + * 4.12.15 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooShortError](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtooshorterror) + * 4.12.16 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.Length.TooLong](#rqsrs008aesmysqldecryptfunctioninitializationvectorlengthtoolong) + * 4.12.17 [RQ.SRS008.AES.MySQL.Decrypt.Function.InitializationVector.NotValidForMode](#rqsrs008aesmysqldecryptfunctioninitializationvectornotvalidformode) + * 4.12.18 [RQ.SRS008.AES.MySQL.Decrypt.Function.Mode.KeyAndInitializationVector.Length](#rqsrs008aesmysqldecryptfunctionmodekeyandinitializationvectorlength) * 5 [References](#references) ## Revision History @@ -2030,9 +2055,14 @@ accessed on remote [MySQL] servers via [MySQL Dictionary] or [MySQL Database Eng ## Terminology -* **AES** - +### AES + Advanced Encryption Standard ([AES]) +### AEAD + + Authenticated Encryption with Associated Data + ## Requirements ### Generic @@ -2042,38 +2072,44 @@ version: 1.0 [ClickHouse] SHALL support [AES] encryption functions to encrypt and decrypt data. -#### RQ.SRS008.AES.Functions.Compatability.MySQL +### Compatibility + +#### RQ.SRS008.AES.Functions.Compatibility.MySQL version: 1.0 [ClickHouse] SHALL support [AES] encryption functions compatible with [MySQL 5.7]. -#### RQ.SRS008.AES.Functions.Compatability.Dictionaries +#### RQ.SRS008.AES.Functions.Compatibility.Dictionaries version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed on remote [MySQL] servers using [MySQL Dictionary]. -#### RQ.SRS008.AES.Functions.Compatability.Engine.Database.MySQL +#### RQ.SRS008.AES.Functions.Compatibility.Engine.Database.MySQL version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Database Engine], -#### RQ.SRS008.AES.Functions.Compatability.Engine.Table.MySQL +#### RQ.SRS008.AES.Functions.Compatibility.Engine.Table.MySQL version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Engine]. -#### RQ.SRS008.AES.Functions.Compatability.TableFunction.MySQL +#### RQ.SRS008.AES.Functions.Compatibility.TableFunction.MySQL version: 1.0 [ClickHouse] SHALL support encryption and decryption of data accessed using [MySQL Table Function]. +### Different Modes + #### RQ.SRS008.AES.Functions.DifferentModes version: 1.0 [ClickHouse] SHALL allow different modes to be supported in a single SQL statement using explicit function parameters. +### Multiple Sources + #### RQ.SRS008.AES.Functions.DataFromMultipleSources version: 1.0 @@ -2082,17 +2118,23 @@ in the `SELECT` statement, including [ClickHouse] [MergeTree] table as well as [ [MySQL Database Engine], [MySQL Table Engine], and [MySQL Table Function] with possibly different encryption schemes. +### Suppressing Sensitive Values + #### RQ.SRS008.AES.Functions.SuppressOutputOfSensitiveValues version: 1.0 [ClickHouse] SHALL suppress output of [AES] `string` and `key` parameters to the system log, error log, and `query_log` table to prevent leakage of sensitive values. +### Invalid Parameters + #### RQ.SRS008.AES.Functions.InvalidParameters version: 1.0 [ClickHouse] SHALL return an error when parameters are invalid. +### Mismatched Values + #### RQ.SRS008.AES.Functions.Mismatched.Key version: 1.0 @@ -2113,6 +2155,8 @@ version: 1.0 [ClickHouse] SHALL return an error or garbage for mismatched mode. +### Performance + #### RQ.SRS008.AES.Functions.Check.Performance version: 1.0 @@ -2141,7 +2185,7 @@ version: 1.0 Effect of [AES] encryption on the compression of a column with [LowCardinality] data type SHALL be measured. -### Specific +### Encrypt Function #### RQ.SRS008.AES.Encrypt.Function version: 1.0 @@ -2163,21 +2207,23 @@ version: 1.0 [ClickHouse] `encrypt` function output SHALL produce output that matches [NIST test vectors]. #### RQ.SRS008.AES.Encrypt.Function.Parameters.PlainText -version: 1.0 +version: 2.0 + +[ClickHouse] SHALL support `plaintext` with `String`, `FixedString`, `Nullable(String)`, +`Nullable(FixedString)`, `LowCardinality(String)`, or `LowCardinality(FixedString(N))` data types as +the second parameter to the `encrypt` function that SHALL specify the data to be encrypted. -[ClickHouse] SHALL support `plaintext` accepting any data type as -the first parameter to the `encrypt` function that SHALL specify the data to be encrypted. #### RQ.SRS008.AES.Encrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `encrypt` function that SHALL specify the encryption key. +as the parameter to the `encrypt` function that SHALL specify the encryption key. #### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `encrypt` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.Encrypt.Function.Parameters.Mode.ValuesFormat @@ -2216,13 +2262,13 @@ of the `encrypt` function: * `aes-192-ofb` that SHALL use [OFB] block mode encryption with 192 bit key * `aes-256-ofb` that SHALL use [OFB] block mode encryption with 256 bit key * `aes-128-gcm` that SHALL use [GCM] block mode encryption with 128 bit key - and `AEAD` 16-byte tag is appended to the resulting ciphertext according to + and [AEAD] 16-byte tag is appended to the resulting ciphertext according to the [RFC5116] * `aes-192-gcm` that SHALL use [GCM] block mode encryption with 192 bit key - and `AEAD` 16-byte tag is appended to the resulting ciphertext according to + and [AEAD] 16-byte tag is appended to the resulting ciphertext according to the [RFC5116] * `aes-256-gcm` that SHALL use [GCM] block mode encryption with 256 bit key - and `AEAD` 16-byte tag is appended to the resulting ciphertext according to + and [AEAD] 16-byte tag is appended to the resulting ciphertext according to the [RFC5116] * `aes-128-ctr` that SHALL use [CTR] block mode encryption with 128 bit key * `aes-192-ctr` that SHALL use [CTR] block mode encryption with 192 bit key @@ -2311,6 +2357,8 @@ when using GCM modes * `aes-192-gcm` mode and `key` is not 24 bytes or `iv` is not specified * `aes-256-gcm` mode and `key` is not 32 bytes or `iv` is not specified +### Decrypt Function + #### RQ.SRS008.AES.Decrypt.Function version: 1.0 @@ -2329,18 +2377,18 @@ decrypt(mode, ciphertext, key, [iv, aad]) version: 1.0 [ClickHouse] SHALL support `ciphertext` accepting `FixedString` or `String` data types as -the first parameter to the `decrypt` function that SHALL specify the data to be decrypted. +the second parameter to the `decrypt` function that SHALL specify the data to be decrypted. #### RQ.SRS008.AES.Decrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `decrypt` function that SHALL specify the encryption key. +as the third parameter to the `decrypt` function that SHALL specify the encryption key. #### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `decrypt` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.Decrypt.Function.Parameters.Mode.ValuesFormat @@ -2419,7 +2467,7 @@ version: 1.0 #### RQ.SRS008.AES.Decrypt.Function.InitializationVector.Length.InvalidLengthError version: 1.0 -[ClickHouse] SHALL return an error if the `iv` is speficified and the length is not exact for the `decrypt` function for a given block mode. +[ClickHouse] SHALL return an error if the `iv` is specified and the length is not exact for the `decrypt` function for a given block mode. #### RQ.SRS008.AES.Decrypt.Function.InitializationVector.NotValidForMode version: 1.0 @@ -2476,7 +2524,7 @@ when using GCM modes * `aes-192-gcm` mode and `key` is not 24 bytes or `iv` is not specified * `aes-256-gcm` mode and `key` is not 32 bytes or `iv` is not specified -### MySQL Specific Functions +### MySQL Encrypt Function #### RQ.SRS008.AES.MySQL.Encrypt.Function version: 1.0 @@ -2493,21 +2541,22 @@ aes_encrypt_mysql(mode, plaintext, key, [iv]) ``` #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.PlainText -version: 1.0 +version: 2.0 -[ClickHouse] SHALL support `plaintext` accepting any data type as -the first parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted. +[ClickHouse] SHALL support `plaintext` with `String`, `FixedString`, `Nullable(String)`, +`Nullable(FixedString)`, `LowCardinality(String)`, or `LowCardinality(FixedString(N))` data types as +the second parameter to the `aes_encrypt_mysql` function that SHALL specify the data to be encrypted. #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key. +as the third parameter to the `aes_encrypt_mysql` function that SHALL specify the encryption key. #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `aes_encrypt_mysql` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.MySQL.Encrypt.Function.Parameters.Mode.ValuesFormat @@ -2642,6 +2691,8 @@ version: 1.0 * `aes-192-ofb` mode and `key` is less than 24 bytes or if specified `iv` is less than 16 bytes * `aes-256-ofb` mode and `key` is less than 32 bytes or if specified `iv` is less than 16 bytes +### MySQL Decrypt Function + #### RQ.SRS008.AES.MySQL.Decrypt.Function version: 1.0 @@ -2660,18 +2711,18 @@ aes_decrypt_mysql(mode, ciphertext, key, [iv]) version: 1.0 [ClickHouse] SHALL support `ciphertext` accepting any data type as -the first parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted. +the second parameter to the `aes_decrypt_mysql` function that SHALL specify the data to be decrypted. #### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Key version: 1.0 [ClickHouse] SHALL support `key` with `String` or `FixedString` data types -as the second parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key. +as the third parameter to the `aes_decrypt_mysql` function that SHALL specify the encryption key. #### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode version: 1.0 -[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the third parameter +[ClickHouse] SHALL support `mode` with `String` or `FixedString` data types as the first parameter to the `aes_decrypt_mysql` function that SHALL specify encryption key length and block encryption mode. #### RQ.SRS008.AES.MySQL.Decrypt.Function.Parameters.Mode.ValuesFormat @@ -2814,6 +2865,7 @@ version: 1.0 * **ClickHouse:** https://clickhouse.tech * **Git:** https://git-scm.com/ +[AEAD]: #aead [OpenSSL]: https://www.openssl.org/ [LowCardinality]: https://clickhouse.tech/docs/en/sql-reference/data-types/lowcardinality/ [MergeTree]: https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/ diff --git a/tests/testflows/aes_encryption/tests/common.py b/tests/testflows/aes_encryption/tests/common.py index 10e98dd1065..5a6e34f59fd 100644 --- a/tests/testflows/aes_encryption/tests/common.py +++ b/tests/testflows/aes_encryption/tests/common.py @@ -106,6 +106,7 @@ plaintexts = [ ("DateTime", "reinterpretAsFixedString(toDateTime('2020-01-01 20:01:02'))"), ("DateTime64", "reinterpretAsFixedString(toDateTime64('2020-01-01 20:01:02.123', 3))"), ("LowCardinality", "toLowCardinality('1')"), + ("LowCardinalityFixedString", "toLowCardinality(toFixedString('1',2))"), #("Array", "[1,2]"), - not supported #("Tuple", "(1,'a')") - not supported ("NULL", "reinterpretAsFixedString(toDateOrNull('foo'))"), diff --git a/tests/testflows/aes_encryption/tests/encrypt.py b/tests/testflows/aes_encryption/tests/encrypt.py index 8f88712b44d..e6562dc51f5 100644 --- a/tests/testflows/aes_encryption/tests/encrypt.py +++ b/tests/testflows/aes_encryption/tests/encrypt.py @@ -309,7 +309,7 @@ def mode_parameter_types(self): @TestScenario @Requirements( - RQ_SRS008_AES_Encrypt_Function_Parameters_PlainText("1.0"), + RQ_SRS008_AES_Encrypt_Function_Parameters_PlainText("2.0"), RQ_SRS008_AES_Encrypt_Function_Parameters_Mode("1.0"), RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_ValuesFormat("1.0"), RQ_SRS008_AES_Encrypt_Function_Parameters_Mode_Values("1.0") diff --git a/tests/testflows/aes_encryption/tests/encrypt_mysql.py b/tests/testflows/aes_encryption/tests/encrypt_mysql.py index f44ae7d108f..89d000d83be 100644 --- a/tests/testflows/aes_encryption/tests/encrypt_mysql.py +++ b/tests/testflows/aes_encryption/tests/encrypt_mysql.py @@ -265,7 +265,7 @@ def syntax(self): @TestScenario @Requirements( - RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_PlainText("1.0"), + RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_PlainText("2.0"), RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode("1.0"), RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_ValuesFormat("1.0"), RQ_SRS008_AES_MySQL_Encrypt_Function_Parameters_Mode_Values("1.0") diff --git a/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot b/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot index 953c46f50a4..a46ab3c3cb5 100644 --- a/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot +++ b/tests/testflows/aes_encryption/tests/snapshots/encrypt.py.encrypt.snapshot @@ -2338,3 +2338,69 @@ example_mode_aes_256_ctr_datatype_NullableFixedString_iv_16_aad_None = r"""'5858 example_mode_aes_256_ctr_datatype_NullableFixedStringNull_iv_16_aad_None = r"""'\\N'""" +example_mode_aes_128_ecb_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_192_ecb_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_256_ecb_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_128_cbc_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_192_cbc_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_256_cbc_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_128_cbc_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'ECE42AF0000893B1D1A43993506376A4'""" + +example_mode_aes_192_cbc_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'0A8E8BA80EB490740B91937D4A5FF84C'""" + +example_mode_aes_256_cbc_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'4A3A13D0807C29D4FA9CAEE6B9A67E7D'""" + +example_mode_aes_128_cfb128_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'21DF'""" + +example_mode_aes_192_cfb128_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'36B7'""" + +example_mode_aes_256_cfb128_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'818E'""" + +example_mode_aes_128_cfb128_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'0388'""" + +example_mode_aes_192_cfb128_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'59C7'""" + +example_mode_aes_256_cfb128_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'5858'""" + +example_mode_aes_128_ofb_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'21DF'""" + +example_mode_aes_192_ofb_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'36B7'""" + +example_mode_aes_256_ofb_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'818E'""" + +example_mode_aes_128_ofb_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'0388'""" + +example_mode_aes_192_ofb_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'59C7'""" + +example_mode_aes_256_ofb_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'5858'""" + +example_mode_aes_128_gcm_datatype_LowCardinalityFixedString_iv_12_aad_None = r"""'DC9659BBB6F4D4C40DCD095F1FD69A4E5B9C'""" + +example_mode_aes_192_gcm_datatype_LowCardinalityFixedString_iv_12_aad_None = r"""'7BFA19E7769CC955EDD39D806A13BF6AF8E3'""" + +example_mode_aes_256_gcm_datatype_LowCardinalityFixedString_iv_12_aad_None = r"""'67CB36E371A5C5F544B1EFEC353A84FE0B2F'""" + +example_mode_aes_128_gcm_datatype_LowCardinalityFixedString_iv_12_aad_True = r"""'DC96EBF2E338CDC4D6F8B490ACE77BB6FB40'""" + +example_mode_aes_192_gcm_datatype_LowCardinalityFixedString_iv_12_aad_True = r"""'7BFA9A2913F05BBB8DB441C2D67E06FD46F8'""" + +example_mode_aes_256_gcm_datatype_LowCardinalityFixedString_iv_12_aad_True = r"""'67CBA4772AA9C9C17819F647FA5CBE2E5715'""" + +example_mode_aes_128_ctr_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'21DF'""" + +example_mode_aes_192_ctr_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'36B7'""" + +example_mode_aes_256_ctr_datatype_LowCardinalityFixedString_iv_None_aad_None = r"""'818E'""" + +example_mode_aes_128_ctr_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'0388'""" + +example_mode_aes_192_ctr_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'59C7'""" + +example_mode_aes_256_ctr_datatype_LowCardinalityFixedString_iv_16_aad_None = r"""'5858'""" + diff --git a/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot b/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot index 9dee5d818d6..32ab15386a1 100644 --- a/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot +++ b/tests/testflows/aes_encryption/tests/snapshots/encrypt_mysql.py.encrypt_mysql.snapshot @@ -2242,3 +2242,69 @@ example_mode_aes_256_ofb_datatype_NullableFixedString_key_64_iv_64 = r"""'E2EE'" example_mode_aes_256_ofb_datatype_NullableFixedStringNull_key_64_iv_64 = r"""'\\N'""" +example_mode_aes_128_ecb_datatype_LowCardinalityFixedString_key_16_iv_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_128_ecb_datatype_LowCardinalityFixedString_key_24_iv_None = r"""'824777897B48FB42AE19EBF2835AE5BA'""" + +example_mode_aes_192_ecb_datatype_LowCardinalityFixedString_key_24_iv_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_192_ecb_datatype_LowCardinalityFixedString_key_32_iv_None = r"""'24268978B72821002456FF2204B0F9B9'""" + +example_mode_aes_256_ecb_datatype_LowCardinalityFixedString_key_32_iv_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_256_ecb_datatype_LowCardinalityFixedString_key_64_iv_None = r"""'F2FACC4703F559D74555D10CA4850F40'""" + +example_mode_aes_128_cbc_datatype_LowCardinalityFixedString_key_16_iv_None = r"""'2320D8B0C3FF2AF0C808CE333688FEE4'""" + +example_mode_aes_192_cbc_datatype_LowCardinalityFixedString_key_24_iv_None = r"""'145EF1DA49622900B742743B4114C3F8'""" + +example_mode_aes_256_cbc_datatype_LowCardinalityFixedString_key_32_iv_None = r"""'BB44E0A5A23B06C6F78D05CF12E4A304'""" + +example_mode_aes_128_cbc_datatype_LowCardinalityFixedString_key_16_iv_16 = r"""'ECE42AF0000893B1D1A43993506376A4'""" + +example_mode_aes_128_cbc_datatype_LowCardinalityFixedString_key_24_iv_24 = r"""'C55AC3DA9276DBF066AC408BFCF011DD'""" + +example_mode_aes_192_cbc_datatype_LowCardinalityFixedString_key_24_iv_16 = r"""'0A8E8BA80EB490740B91937D4A5FF84C'""" + +example_mode_aes_192_cbc_datatype_LowCardinalityFixedString_key_32_iv_32 = r"""'723C4EB7399AE6F019109651B376A111'""" + +example_mode_aes_256_cbc_datatype_LowCardinalityFixedString_key_32_iv_16 = r"""'4A3A13D0807C29D4FA9CAEE6B9A67E7D'""" + +example_mode_aes_256_cbc_datatype_LowCardinalityFixedString_key_64_iv_64 = r"""'5547B945A6810130CFC689C22530FA26'""" + +example_mode_aes_128_cfb128_datatype_LowCardinalityFixedString_key_16_iv_None = r"""'21DF'""" + +example_mode_aes_192_cfb128_datatype_LowCardinalityFixedString_key_24_iv_None = r"""'36B7'""" + +example_mode_aes_256_cfb128_datatype_LowCardinalityFixedString_key_32_iv_None = r"""'818E'""" + +example_mode_aes_128_cfb128_datatype_LowCardinalityFixedString_key_16_iv_16 = r"""'0388'""" + +example_mode_aes_128_cfb128_datatype_LowCardinalityFixedString_key_24_iv_24 = r"""'6A77'""" + +example_mode_aes_192_cfb128_datatype_LowCardinalityFixedString_key_24_iv_16 = r"""'59C7'""" + +example_mode_aes_192_cfb128_datatype_LowCardinalityFixedString_key_32_iv_32 = r"""'00A0'""" + +example_mode_aes_256_cfb128_datatype_LowCardinalityFixedString_key_32_iv_16 = r"""'5858'""" + +example_mode_aes_256_cfb128_datatype_LowCardinalityFixedString_key_64_iv_64 = r"""'E2EE'""" + +example_mode_aes_128_ofb_datatype_LowCardinalityFixedString_key_16_iv_None = r"""'21DF'""" + +example_mode_aes_192_ofb_datatype_LowCardinalityFixedString_key_24_iv_None = r"""'36B7'""" + +example_mode_aes_256_ofb_datatype_LowCardinalityFixedString_key_32_iv_None = r"""'818E'""" + +example_mode_aes_128_ofb_datatype_LowCardinalityFixedString_key_16_iv_16 = r"""'0388'""" + +example_mode_aes_128_ofb_datatype_LowCardinalityFixedString_key_24_iv_24 = r"""'6A77'""" + +example_mode_aes_192_ofb_datatype_LowCardinalityFixedString_key_24_iv_16 = r"""'59C7'""" + +example_mode_aes_192_ofb_datatype_LowCardinalityFixedString_key_32_iv_32 = r"""'00A0'""" + +example_mode_aes_256_ofb_datatype_LowCardinalityFixedString_key_32_iv_16 = r"""'5858'""" + +example_mode_aes_256_ofb_datatype_LowCardinalityFixedString_key_64_iv_64 = r"""'E2EE'""" + From eba2cbfaff066c0388c533ba438c9b85d4313af4 Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Wed, 27 Jan 2021 16:26:16 +0300 Subject: [PATCH 19/48] Update neighbor.cpp --- src/Functions/neighbor.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Functions/neighbor.cpp b/src/Functions/neighbor.cpp index 413eeb39e45..598e1225877 100644 --- a/src/Functions/neighbor.cpp +++ b/src/Functions/neighbor.cpp @@ -50,6 +50,8 @@ public: bool useDefaultImplementationForConstants() const override { return false; } + /// We do not use default implementation for LowCardinality because this is not a pure function. + /// If used, optimization for LC may execute function only for dictionary, which gives wrong result. bool useDefaultImplementationForLowCardinalityColumns() const override { return false; } DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override From 3b943cd00b742b7fe96ae85029b9e9aec0de5811 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Wed, 27 Jan 2021 16:59:44 +0300 Subject: [PATCH 20/48] Fix flaky test concat_nary_const_with_nonconst_segfault --- .../00086_concat_nary_const_with_nonconst_segfault.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/queries/0_stateless/00086_concat_nary_const_with_nonconst_segfault.sql b/tests/queries/0_stateless/00086_concat_nary_const_with_nonconst_segfault.sql index a9d4be129b9..2f0ef648983 100644 --- a/tests/queries/0_stateless/00086_concat_nary_const_with_nonconst_segfault.sql +++ b/tests/queries/0_stateless/00086_concat_nary_const_with_nonconst_segfault.sql @@ -1 +1 @@ -SELECT * FROM system.numbers_mt WHERE concat(materialize('1'), '...', toString(number)) LIKE '%10000000%' LIMIT 1 +SELECT extract(toString(number), '10000000') FROM system.numbers_mt WHERE concat(materialize('1'), '...', toString(number)) LIKE '%10000000%' LIMIT 1 From 9db9ce11dc030cec3c8ef4b830d7737d323fdedb Mon Sep 17 00:00:00 2001 From: Maksim Kita Date: Wed, 27 Jan 2021 17:10:06 +0300 Subject: [PATCH 21/48] Added functions parseDateTimeBestEffortUSOrZero, parseDateTimeBestEffortUSOrNull --- src/Functions/FunctionsConversion.cpp | 4 ++- src/Functions/FunctionsConversion.h | 19 ++++++++++-- src/IO/parseDateTimeBestEffort.cpp | 5 +++ src/IO/parseDateTimeBestEffort.h | 3 +- ...1_parse_date_time_best_effort_us.reference | 22 +++++++++++++ .../01351_parse_date_time_best_effort_us.sql | 31 +++++++++++++++++++ 6 files changed, 79 insertions(+), 5 deletions(-) diff --git a/src/Functions/FunctionsConversion.cpp b/src/Functions/FunctionsConversion.cpp index 257b852ecd8..0149649791a 100644 --- a/src/Functions/FunctionsConversion.cpp +++ b/src/Functions/FunctionsConversion.cpp @@ -92,9 +92,11 @@ void registerFunctionsConversion(FunctionFactory & factory) factory.registerFunction(); factory.registerFunction(); - factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); + factory.registerFunction(); + factory.registerFunction(); + factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); factory.registerFunction(); diff --git a/src/Functions/FunctionsConversion.h b/src/Functions/FunctionsConversion.h index 0e162fc2469..96e49686526 100644 --- a/src/Functions/FunctionsConversion.h +++ b/src/Functions/FunctionsConversion.h @@ -955,6 +955,12 @@ struct ConvertThroughParsing vec_to[i] = res; } } + else if constexpr (parsing_mode == ConvertFromStringParsingMode::BestEffortUS) + { + time_t res; + parsed = tryParseDateTimeBestEffortUS(res, read_buffer, *local_time_zone, *utc_time_zone); + vec_to[i] = res; + } else { if constexpr (to_datetime64) @@ -2003,9 +2009,11 @@ using FunctionToDecimal256OrNull = FunctionConvertFromString; struct NameParseDateTimeBestEffort { static constexpr auto name = "parseDateTimeBestEffort"; }; -struct NameParseDateTimeBestEffortUS { static constexpr auto name = "parseDateTimeBestEffortUS"; }; struct NameParseDateTimeBestEffortOrZero { static constexpr auto name = "parseDateTimeBestEffortOrZero"; }; struct NameParseDateTimeBestEffortOrNull { static constexpr auto name = "parseDateTimeBestEffortOrNull"; }; +struct NameParseDateTimeBestEffortUS { static constexpr auto name = "parseDateTimeBestEffortUS"; }; +struct NameParseDateTimeBestEffortUSOrZero { static constexpr auto name = "parseDateTimeBestEffortUSOrZero"; }; +struct NameParseDateTimeBestEffortUSOrNull { static constexpr auto name = "parseDateTimeBestEffortUSOrNull"; }; struct NameParseDateTime32BestEffort { static constexpr auto name = "parseDateTime32BestEffort"; }; struct NameParseDateTime32BestEffortOrZero { static constexpr auto name = "parseDateTime32BestEffortOrZero"; }; struct NameParseDateTime32BestEffortOrNull { static constexpr auto name = "parseDateTime32BestEffortOrNull"; }; @@ -2016,13 +2024,18 @@ struct NameParseDateTime64BestEffortOrNull { static constexpr auto name = "parse using FunctionParseDateTimeBestEffort = FunctionConvertFromString< DataTypeDateTime, NameParseDateTimeBestEffort, ConvertFromStringExceptionMode::Throw, ConvertFromStringParsingMode::BestEffort>; -using FunctionParseDateTimeBestEffortUS = FunctionConvertFromString< - DataTypeDateTime, NameParseDateTimeBestEffortUS, ConvertFromStringExceptionMode::Throw, ConvertFromStringParsingMode::BestEffortUS>; using FunctionParseDateTimeBestEffortOrZero = FunctionConvertFromString< DataTypeDateTime, NameParseDateTimeBestEffortOrZero, ConvertFromStringExceptionMode::Zero, ConvertFromStringParsingMode::BestEffort>; using FunctionParseDateTimeBestEffortOrNull = FunctionConvertFromString< DataTypeDateTime, NameParseDateTimeBestEffortOrNull, ConvertFromStringExceptionMode::Null, ConvertFromStringParsingMode::BestEffort>; +using FunctionParseDateTimeBestEffortUS = FunctionConvertFromString< + DataTypeDateTime, NameParseDateTimeBestEffortUS, ConvertFromStringExceptionMode::Throw, ConvertFromStringParsingMode::BestEffortUS>; +using FunctionParseDateTimeBestEffortUSOrZero = FunctionConvertFromString< + DataTypeDateTime, NameParseDateTimeBestEffortUSOrZero, ConvertFromStringExceptionMode::Zero, ConvertFromStringParsingMode::BestEffortUS>; +using FunctionParseDateTimeBestEffortUSOrNull = FunctionConvertFromString< + DataTypeDateTime, NameParseDateTimeBestEffortUSOrNull, ConvertFromStringExceptionMode::Null, ConvertFromStringParsingMode::BestEffortUS>; + using FunctionParseDateTime32BestEffort = FunctionConvertFromString< DataTypeDateTime, NameParseDateTime32BestEffort, ConvertFromStringExceptionMode::Throw, ConvertFromStringParsingMode::BestEffort>; using FunctionParseDateTime32BestEffortOrZero = FunctionConvertFromString< diff --git a/src/IO/parseDateTimeBestEffort.cpp b/src/IO/parseDateTimeBestEffort.cpp index a3ea418dd9f..47a298ede29 100644 --- a/src/IO/parseDateTimeBestEffort.cpp +++ b/src/IO/parseDateTimeBestEffort.cpp @@ -654,6 +654,11 @@ bool tryParseDateTimeBestEffort(time_t & res, ReadBuffer & in, const DateLUTImpl return parseDateTimeBestEffortImpl(res, in, local_time_zone, utc_time_zone, nullptr); } +bool tryParseDateTimeBestEffortUS(time_t & res, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone) +{ + return parseDateTimeBestEffortImpl(res, in, local_time_zone, utc_time_zone, nullptr); +} + void parseDateTime64BestEffort(DateTime64 & res, UInt32 scale, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone) { return parseDateTime64BestEffortImpl(res, scale, in, local_time_zone, utc_time_zone); diff --git a/src/IO/parseDateTimeBestEffort.h b/src/IO/parseDateTimeBestEffort.h index 61de31a0213..65e92cbee42 100644 --- a/src/IO/parseDateTimeBestEffort.h +++ b/src/IO/parseDateTimeBestEffort.h @@ -57,8 +57,9 @@ class ReadBuffer; */ void parseDateTimeBestEffort(time_t & res, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); -void parseDateTimeBestEffortUS(time_t & res, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); bool tryParseDateTimeBestEffort(time_t & res, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); +void parseDateTimeBestEffortUS(time_t & res, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); +bool tryParseDateTimeBestEffortUS(time_t & res, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); void parseDateTime64BestEffort(DateTime64 & res, UInt32 scale, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); bool tryParseDateTime64BestEffort(DateTime64 & res, UInt32 scale, ReadBuffer & in, const DateLUTImpl & local_time_zone, const DateLUTImpl & utc_time_zone); diff --git a/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.reference b/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.reference index 9d0a11776b9..23bcb901557 100644 --- a/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.reference +++ b/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.reference @@ -1,3 +1,4 @@ +parseDateTimeBestEffortUS s a 1970/01/02 010203Z 1970-01-02 01:02:03 @@ -16,3 +17,24 @@ 12/13/2019 2019-12-13 00:00:00 13/12/2019 2019-12-13 00:00:00 03/04/2019 2019-03-04 00:00:00 +parseDateTimeBestEffortUSOrZero parseDateTimeBestEffortUSOrNull + s a b + + 1970/01/02 010203Z 1970-01-02 01:02:03 1970-01-02 01:02:03 + 01-02-2001 UTC 2001-01-02 00:00:00 2001-01-02 00:00:00 + 10.23.1990 1990-10-23 00:00:00 1990-10-23 00:00:00 + 01-02-2017 03:04:05+1 2017-01-02 02:04:05 2017-01-02 02:04:05 + 01/02/2017 03:04:05+300 2017-01-02 00:04:05 2017-01-02 00:04:05 + 01.02.2017 03:04:05GMT 2017-01-02 03:04:05 2017-01-02 03:04:05 + 01-02-2017 03:04:05 MSD 2017-01-01 23:04:05 2017-01-01 23:04:05 + 01-02-2017 11:04:05 AM 2017-01-02 11:04:05 2017-01-02 11:04:05 + 01-02-2017 11:04:05 PM 2017-01-02 23:04:05 2017-01-02 23:04:05 + 01-02-2017 12:04:05 AM 2017-01-02 00:04:05 2017-01-02 00:04:05 + 01-02-2017 12:04:05 PM 2017-01-02 12:04:05 2017-01-02 12:04:05 + 01.02.17 03:04:05 MSD Feb 2017-02-01 23:04:05 2017-02-01 23:04:05 + 01/02/2017 03:04:05 MSK 2017-01-02 00:04:05 2017-01-02 00:04:05 + 12/13/2019 2019-12-13 00:00:00 2019-12-13 00:00:00 + 13/12/2019 2019-12-13 00:00:00 2019-12-13 00:00:00 + 03/04/2019 2019-03-04 00:00:00 2019-03-04 00:00:00 + 1970-01-01 00:00:00 ᴺᵁᴸᴸ + xyz 1970-01-01 00:00:00 ᴺᵁᴸᴸ diff --git a/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.sql b/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.sql index 3345ace8305..ca3166142f0 100644 --- a/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.sql +++ b/tests/queries/0_stateless/01351_parse_date_time_best_effort_us.sql @@ -1,3 +1,5 @@ +SELECT 'parseDateTimeBestEffortUS'; + SELECT s, parseDateTimeBestEffortUS(s, 'UTC') AS a @@ -22,3 +24,32 @@ FROM '03/04/2019' ]) AS s) FORMAT PrettySpaceNoEscapes; + +SELECT 'parseDateTimeBestEffortUSOrZero', 'parseDateTimeBestEffortUSOrNull'; +SELECT + s, + parseDateTimeBestEffortUSOrZero(s, 'UTC') AS a, + parseDateTimeBestEffortUSOrNull(s, 'UTC') AS b +FROM +( + SELECT arrayJoin([ +'1970/01/02 010203Z', +'01-02-2001 UTC', +'10.23.1990', +'01-02-2017 03:04:05+1', +'01/02/2017 03:04:05+300', +'01.02.2017 03:04:05GMT', +'01-02-2017 03:04:05 MSD', +'01-02-2017 11:04:05 AM', +'01-02-2017 11:04:05 PM', +'01-02-2017 12:04:05 AM', +'01-02-2017 12:04:05 PM', +'01.02.17 03:04:05 MSD Feb', +'01/02/2017 03:04:05 MSK', +'12/13/2019', +'13/12/2019', +'03/04/2019', +'', +'xyz' +]) AS s) +FORMAT PrettySpaceNoEscapes; From 48884d22310c069889e7894e2a89829a8b1ecc48 Mon Sep 17 00:00:00 2001 From: Vitaliy Zakaznikov Date: Wed, 27 Jan 2021 09:27:34 -0500 Subject: [PATCH 22/48] Adding tests to check passing invalid data types to encrypt and aes_encrypt_mysql functions. --- tests/testflows/aes_encryption/regression.py | 4 ++ .../testflows/aes_encryption/tests/encrypt.py | 37 +++++++++++++++++++ .../aes_encryption/tests/encrypt_mysql.py | 37 +++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/tests/testflows/aes_encryption/regression.py b/tests/testflows/aes_encryption/regression.py index b0dc2761b59..f3321489b76 100755 --- a/tests/testflows/aes_encryption/regression.py +++ b/tests/testflows/aes_encryption/regression.py @@ -18,11 +18,15 @@ xfails = { [(Fail, "known issue")], "encrypt/invalid key or iv length for mode/mode=\"'aes-???-gcm'\", key_len=??, iv_len=12, aad=True/iv is too long": [(Fail, "known issue")], + "encrypt/invalid plaintext data type/data_type='IPv6', value=\"toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001')\"": + [(Fail, "known issue as IPv6 is implemented as FixedString(16)")], # encrypt_mysql "encrypt_mysql/key or iv length for mode/mode=\"'aes-???-ecb'\", key_len=??, iv_len=None": [(Fail, issue_18251)], "encrypt_mysql/invalid parameters/iv not valid for mode": [(Fail, issue_18251)], + "encrypt_mysql/invalid plaintext data type/data_type='IPv6', value=\"toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001')\"": + [(Fail, "known issue as IPv6 is implemented as FixedString(16)")], # decrypt_mysql "decrypt_mysql/key or iv length for mode/mode=\"'aes-???-ecb'\", key_len=??, iv_len=None:": [(Fail, issue_18251)], diff --git a/tests/testflows/aes_encryption/tests/encrypt.py b/tests/testflows/aes_encryption/tests/encrypt.py index e6562dc51f5..dde27c9d454 100644 --- a/tests/testflows/aes_encryption/tests/encrypt.py +++ b/tests/testflows/aes_encryption/tests/encrypt.py @@ -108,6 +108,43 @@ def invalid_parameters(self): encrypt(plaintext="'hello there'", key="'0123456789123456'", mode="'AES-128-ECB'", exitcode=36, message="DB::Exception: Invalid mode: AES-128-ECB") +@TestOutline(Scenario) +@Requirements( + RQ_SRS008_AES_Functions_InvalidParameters("1.0") +) +@Examples("data_type, value", [ + ("UInt8", "toUInt8('1')"), + ("UInt16", "toUInt16('1')"), + ("UInt32", "toUInt32('1')"), + ("UInt64", "toUInt64('1')"), + ("Int8", "toInt8('1')"), + ("Int16", "toInt16('1')"), + ("Int32", "toInt32('1')"), + ("Int64", "toInt64('1')"), + ("Float32", "toFloat32('1.0')"), + ("Float64", "toFloat64('1.0')"), + ("Decimal32", "toDecimal32(2, 4)"), + ("Decimal64", "toDecimal64(2, 4)"), + ("Decimal128", "toDecimal128(2, 4)"), + ("UUID", "toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')"), + ("Date", "toDate('2020-01-01')"), + ("DateTime", "toDateTime('2020-01-01 20:01:02')"), + ("DateTime64", "toDateTime64('2020-01-01 20:01:02.123', 3)"), + ("Array", "[1,2]"), + ("Tuple", "(1,'a')"), + ("IPv4", "toIPv4('171.225.130.45')"), + ("IPv6", "toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001')"), + ("Enum8", r"CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)')"), + ("Enum16", r"CAST('a', 'Enum16(\'a\' = 1, \'b\' = 2)')") +]) +def invalid_plaintext_data_type(self, data_type, value): + """Check that encrypt function returns an error if the + plaintext parameter has invalid data type. + """ + with When("I try to encrypt plaintext with invalid data type", description=f"{data_type} with value {value}"): + encrypt(plaintext=value, key="'0123456789123456'", mode="'aes-128-cbc'", iv="'0123456789123456'", + exitcode=43, message="DB::Exception: Illegal type of argument") + @TestOutline(Scenario) @Requirements( RQ_SRS008_AES_Encrypt_Function_Key_Length_InvalidLengthError("1.0"), diff --git a/tests/testflows/aes_encryption/tests/encrypt_mysql.py b/tests/testflows/aes_encryption/tests/encrypt_mysql.py index 89d000d83be..b831d6dda85 100644 --- a/tests/testflows/aes_encryption/tests/encrypt_mysql.py +++ b/tests/testflows/aes_encryption/tests/encrypt_mysql.py @@ -107,6 +107,43 @@ def invalid_parameters(self): aes_encrypt_mysql(plaintext="'hello there'", key="'0123456789123456'", mode="'AES-128-ECB'", exitcode=36, message="DB::Exception: Invalid mode: AES-128-ECB") +@TestOutline(Scenario) +@Requirements( + RQ_SRS008_AES_Functions_InvalidParameters("1.0") +) +@Examples("data_type, value", [ + ("UInt8", "toUInt8('1')"), + ("UInt16", "toUInt16('1')"), + ("UInt32", "toUInt32('1')"), + ("UInt64", "toUInt64('1')"), + ("Int8", "toInt8('1')"), + ("Int16", "toInt16('1')"), + ("Int32", "toInt32('1')"), + ("Int64", "toInt64('1')"), + ("Float32", "toFloat32('1.0')"), + ("Float64", "toFloat64('1.0')"), + ("Decimal32", "toDecimal32(2, 4)"), + ("Decimal64", "toDecimal64(2, 4)"), + ("Decimal128", "toDecimal128(2, 4)"), + ("UUID", "toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0')"), + ("Date", "toDate('2020-01-01')"), + ("DateTime", "toDateTime('2020-01-01 20:01:02')"), + ("DateTime64", "toDateTime64('2020-01-01 20:01:02.123', 3)"), + ("Array", "[1,2]"), + ("Tuple", "(1,'a')"), + ("IPv4", "toIPv4('171.225.130.45')"), + ("IPv6", "toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001')"), + ("Enum8", r"CAST('a', 'Enum8(\'a\' = 1, \'b\' = 2)')"), + ("Enum16", r"CAST('a', 'Enum16(\'a\' = 1, \'b\' = 2)')") +]) +def invalid_plaintext_data_type(self, data_type, value): + """Check that aes_encrypt_mysql function returns an error if the + plaintext parameter has invalid data type. + """ + with When("I try to encrypt plaintext with invalid data type", description=f"{data_type} with value {value}"): + aes_encrypt_mysql(plaintext=value, key="'0123456789123456'", mode="'aes-128-cbc'", iv="'0123456789123456'", + exitcode=43, message="DB::Exception: Illegal type of argument") + @TestOutline(Scenario) @Requirements( RQ_SRS008_AES_MySQL_Encrypt_Function_Key_Length_TooShortError("1.0"), From a3d6888c5bebe17f2209e22551763bfc5171bab2 Mon Sep 17 00:00:00 2001 From: Maksim Kita Date: Wed, 27 Jan 2021 18:01:08 +0300 Subject: [PATCH 23/48] RoaringBitmapWithSmallSet rb_andnot fix --- src/AggregateFunctions/AggregateFunctionGroupBitmapData.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AggregateFunctions/AggregateFunctionGroupBitmapData.h b/src/AggregateFunctions/AggregateFunctionGroupBitmapData.h index 39ab846e61e..ec945d418f2 100644 --- a/src/AggregateFunctions/AggregateFunctionGroupBitmapData.h +++ b/src/AggregateFunctions/AggregateFunctionGroupBitmapData.h @@ -229,7 +229,7 @@ public: { for (const auto & x : small) { - if (!rb->contains(static_cast(x.getValue()))) + if (!r1.rb->contains(static_cast(x.getValue()))) buffer.push_back(x.getValue()); } From 01d3d0aeca450b1905fadadc7059f12385ad3fa7 Mon Sep 17 00:00:00 2001 From: Vitaliy Zakaznikov Date: Wed, 27 Jan 2021 10:01:47 -0500 Subject: [PATCH 24/48] Fixing requirement names. --- .../tests/compatibility/mysql/database_engine.py | 2 +- .../aes_encryption/tests/compatibility/mysql/dictionary.py | 2 +- .../aes_encryption/tests/compatibility/mysql/feature.py | 2 +- .../aes_encryption/tests/compatibility/mysql/table_engine.py | 2 +- .../tests/compatibility/mysql/table_function.py | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py index 3547dc95ab0..911d03fe016 100644 --- a/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py +++ b/tests/testflows/aes_encryption/tests/compatibility/mysql/database_engine.py @@ -182,7 +182,7 @@ def encrypt(self, mysql_datatype): @TestFeature @Name("database engine") @Requirements( - RQ_SRS008_AES_Functions_Compatability_Engine_Database_MySQL("1.0") + RQ_SRS008_AES_Functions_Compatibility_Engine_Database_MySQL("1.0") ) def feature(self, node="clickhouse1", mysql_node="mysql1"): """Check usage of encryption functions with [MySQL database engine]. diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py index 66b9e3acbf8..76d010f348d 100644 --- a/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py +++ b/tests/testflows/aes_encryption/tests/compatibility/mysql/dictionary.py @@ -237,7 +237,7 @@ def decrypt(self, mysql_datatype): @TestFeature @Name("dictionary") @Requirements( - RQ_SRS008_AES_Functions_Compatability_Dictionaries("1.0") + RQ_SRS008_AES_Functions_Compatibility_Dictionaries("1.0") ) def feature(self, node="clickhouse1", mysql_node="mysql1"): """Check usage of encryption functions with [MySQL dictionary]. diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py index 5c6338bfdff..bc470dd13a7 100644 --- a/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py +++ b/tests/testflows/aes_encryption/tests/compatibility/mysql/feature.py @@ -5,7 +5,7 @@ from aes_encryption.requirements import * @TestFeature @Name("mysql") @Requirements( - RQ_SRS008_AES_Functions_Compatability_MySQL("1.0") + RQ_SRS008_AES_Functions_Compatibility_MySQL("1.0") ) def feature(self, node="clickhouse1"): """Check encryption functions usage compatibility with MySQL. diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py index 5a5c7d9d58a..5598cf2d98c 100644 --- a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py +++ b/tests/testflows/aes_encryption/tests/compatibility/mysql/table_engine.py @@ -188,7 +188,7 @@ def encrypt(self, mysql_datatype): @TestFeature @Name("table engine") @Requirements( - RQ_SRS008_AES_Functions_Compatability_Engine_Table_MySQL("1.0") + RQ_SRS008_AES_Functions_Compatibility_Engine_Table_MySQL("1.0") ) def feature(self, node="clickhouse1", mysql_node="mysql1"): """Check usage of encryption functions with [MySQL table engine]. diff --git a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py b/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py index cd3487c5c74..937a46ce2c4 100644 --- a/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py +++ b/tests/testflows/aes_encryption/tests/compatibility/mysql/table_function.py @@ -169,7 +169,7 @@ def encrypt(self, mysql_datatype): @TestFeature @Name("table function") @Requirements( - RQ_SRS008_AES_Functions_Compatability_TableFunction_MySQL("1.0") + RQ_SRS008_AES_Functions_Compatibility_TableFunction_MySQL("1.0") ) def feature(self, node="clickhouse1", mysql_node="mysql1"): """Check usage of encryption functions with [MySQL table function]. @@ -180,4 +180,4 @@ def feature(self, node="clickhouse1", mysql_node="mysql1"): self.context.mysql_node = self.context.cluster.node(mysql_node) for scenario in loads(current_module(), Scenario): - Scenario(run=scenario, flags=TE) \ No newline at end of file + Scenario(run=scenario, flags=TE) From 8070562bd00e61ab64f3a41bd1b8e7383e729da4 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov Date: Wed, 27 Jan 2021 18:24:39 +0300 Subject: [PATCH 25/48] Run tests in parallel in flaky check --- docker/test/stateless/run.sh | 11 +++++------ tests/clickhouse-test | 7 +++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docker/test/stateless/run.sh b/docker/test/stateless/run.sh index d9a03f84726..fb510a87fcd 100755 --- a/docker/test/stateless/run.sh +++ b/docker/test/stateless/run.sh @@ -55,12 +55,11 @@ function run_tests() ADDITIONAL_OPTIONS+=('00000_no_tests_to_skip') fi - for _ in $(seq 1 "$NUM_TRIES"); do - clickhouse-test --testname --shard --zookeeper --hung-check --print-time "$SKIP_LIST_OPT" "${ADDITIONAL_OPTIONS[@]}" 2>&1 | ts '%Y-%m-%d %H:%M:%S' | tee -a test_output/test_result.txt - if [ "${PIPESTATUS[0]}" -ne "0" ]; then - break; - fi - done + clickhouse-test --testname --shard --zookeeper --hung-check --print-time \ + --test-runs "$NUM_TRIES" --jobs 4 \ + "$SKIP_LIST_OPT" "${ADDITIONAL_OPTIONS[@]}" 2>&1 \ + | ts '%Y-%m-%d %H:%M:%S' \ + | tee -a test_output/test_result.txt } export -f run_tests diff --git a/tests/clickhouse-test b/tests/clickhouse-test index d5c6019d28f..70f7fe18982 100755 --- a/tests/clickhouse-test +++ b/tests/clickhouse-test @@ -342,9 +342,10 @@ def run_tests_array(all_tests_with_params): SERVER_DIED = True break + file_suffix = ('.' + str(os.getpid())) if is_concurrent else '' reference_file = os.path.join(suite_dir, name) + '.reference' - stdout_file = os.path.join(suite_tmp_dir, name) + '.stdout' - stderr_file = os.path.join(suite_tmp_dir, name) + '.stderr' + stdout_file = os.path.join(suite_tmp_dir, name) + file_suffix + '.stdout' + stderr_file = os.path.join(suite_tmp_dir, name) + file_suffix + '.stderr' proc, stdout, stderr, total_time = run_single_test(args, ext, server_logs_level, client_options, case_file, stdout_file, stderr_file) @@ -717,6 +718,7 @@ def main(args): all_tests = [case for case in all_tests if is_test_from_dir(suite_dir, case)] if args.test: all_tests = [t for t in all_tests if any([re.search(r, t) for r in args.test])] + all_tests = all_tests * args.test_runs all_tests.sort(key=key_func) jobs = args.jobs @@ -886,6 +888,7 @@ if __name__ == '__main__': parser.add_argument('--database', help='Database for tests (random name test_XXXXXX by default)') parser.add_argument('--parallel', default='1/1', help='One parallel test run number/total') parser.add_argument('-j', '--jobs', default=1, nargs='?', type=int, help='Run all tests in parallel') + parser.add_argument('--test-runs', default=1, nargs='?', type=int, help='Run each test many times (useful for e.g. flaky check)') parser.add_argument('-U', '--unified', default=3, type=int, help='output NUM lines of unified context') parser.add_argument('-r', '--server-check-retries', default=30, type=int, help='Num of tries to execute SELECT 1 before tests started') parser.add_argument('--skip-list-path', help="Path to skip-list file") From 0db606084a3924cbd0de2251a327cb8b2780ae75 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov Date: Wed, 27 Jan 2021 18:30:09 +0300 Subject: [PATCH 26/48] change some tests to see the effect --- tests/queries/0_stateless/00459_group_array_insert_at.sql | 1 + tests/queries/0_stateless/01014_lazy_database_basic.sh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/tests/queries/0_stateless/00459_group_array_insert_at.sql b/tests/queries/0_stateless/00459_group_array_insert_at.sql index 59ecfc05045..8bc329d9103 100644 --- a/tests/queries/0_stateless/00459_group_array_insert_at.sql +++ b/tests/queries/0_stateless/00459_group_array_insert_at.sql @@ -1,3 +1,4 @@ +-- remove this comment before merge SELECT groupArrayInsertAt(toString(number), number * 2) FROM (SELECT * FROM system.numbers LIMIT 10); SELECT groupArrayInsertAt('-')(toString(number), number * 2) FROM (SELECT * FROM system.numbers LIMIT 10); SELECT groupArrayInsertAt([123])(range(number), number * 2) FROM (SELECT * FROM system.numbers LIMIT 10); diff --git a/tests/queries/0_stateless/01014_lazy_database_basic.sh b/tests/queries/0_stateless/01014_lazy_database_basic.sh index 11d698e764e..76cbcea6d97 100755 --- a/tests/queries/0_stateless/01014_lazy_database_basic.sh +++ b/tests/queries/0_stateless/01014_lazy_database_basic.sh @@ -4,6 +4,8 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh . "$CURDIR"/../shell_config.sh +# remove this comment before merge + ${CLICKHOUSE_CLIENT} -n -q "DROP DATABASE IF EXISTS testlazy" ${CLICKHOUSE_CLIENT} -n -q " From 83b9677f1cf51d75114927e8fcdb2fe12ae078db Mon Sep 17 00:00:00 2001 From: Maksim Kita Date: Wed, 27 Jan 2021 20:35:50 +0300 Subject: [PATCH 27/48] Added test --- ...egate_function_group_bitmap_data.reference | 60 +++++++++++++++++++ ...1_aggregate_function_group_bitmap_data.sql | 55 +++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.reference create mode 100644 tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.sql diff --git a/tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.reference b/tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.reference new file mode 100644 index 00000000000..161f4a6372f --- /dev/null +++ b/tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.reference @@ -0,0 +1,60 @@ +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 50 1 0 49 +1 50 51 0 1 51 diff --git a/tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.sql b/tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.sql new file mode 100644 index 00000000000..3f5c5c2f25b --- /dev/null +++ b/tests/queries/0_stateless/01671_aggregate_function_group_bitmap_data.sql @@ -0,0 +1,55 @@ +CREATE TABLE group_bitmap_data_test +( + `pickup_date` Date, + `city_id` UInt32, + `uid` UInt32 +) +ENGINE = Memory; + +INSERT INTO group_bitmap_data_test SELECT + '2019-01-01', + 1, + number +FROM numbers(1, 50); + +INSERT INTO group_bitmap_data_test SELECT + '2019-01-02', + 1, + number +FROM numbers(11, 60); + +INSERT INTO group_bitmap_data_test SELECT + '2019-01-03', + 2, + number +FROM numbers(1, 10); + +SELECT + bitmapCardinality(day_today) AS today_users, + bitmapCardinality(day_before) AS before_users, + bitmapCardinality(bitmapOr(day_today, day_before)) AS ll_users, + bitmapCardinality(bitmapAnd(day_today, day_before)) AS old_users, + bitmapCardinality(bitmapAndnot(day_today, day_before)) AS new_users, + bitmapCardinality(bitmapXor(day_today, day_before)) AS diff_users +FROM +( + SELECT + city_id, + groupBitmapState(uid) AS day_today + FROM group_bitmap_data_test + WHERE pickup_date = '2019-01-02' + GROUP BY + uid, + city_id +) AS js1 +ALL LEFT JOIN +( + SELECT + city_id, + groupBitmapState(uid) AS day_before + FROM group_bitmap_data_test + WHERE pickup_date = '2019-01-01' + GROUP BY city_id +) AS js2 USING (city_id); + +DROP TABLE IF EXISTS group_bitmap_data_test; From a727fc4755b9d0249fa4e92083d4a53f3f621cbb Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Wed, 27 Jan 2021 21:15:18 +0300 Subject: [PATCH 28/48] Fix 01115_join_with_dictionary flakiness --- .../0_stateless/01115_join_with_dictionary.reference | 4 ++-- tests/queries/0_stateless/01115_join_with_dictionary.sql | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/queries/0_stateless/01115_join_with_dictionary.reference b/tests/queries/0_stateless/01115_join_with_dictionary.reference index f909a3d61f5..fbff63d1777 100644 --- a/tests/queries/0_stateless/01115_join_with_dictionary.reference +++ b/tests/queries/0_stateless/01115_join_with_dictionary.reference @@ -93,11 +93,11 @@ not optimized (smoke) - 0 0 0 0 1 1 1 1 -3 3 3 3 2 2 2 2 +3 3 3 3 - 0 0 0 0 1 1 1 1 - -3 3 3 3 2 2 2 2 +3 3 3 3 diff --git a/tests/queries/0_stateless/01115_join_with_dictionary.sql b/tests/queries/0_stateless/01115_join_with_dictionary.sql index 70aecf1c478..a5714169641 100644 --- a/tests/queries/0_stateless/01115_join_with_dictionary.sql +++ b/tests/queries/0_stateless/01115_join_with_dictionary.sql @@ -74,13 +74,13 @@ SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 RIGHT JOIN dict_flat d O SELECT '-'; SELECT * FROM (SELECT number + 2 AS key FROM numbers(4)) s1 FULL JOIN dict_flat d USING(key) ORDER BY s1.key, d.key; SELECT '-'; -SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 ANY INNER JOIN dict_flat d USING(key); +SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 ANY INNER JOIN dict_flat d USING(key) ORDER BY s1.key; SELECT '-'; -SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 ANY RIGHT JOIN dict_flat d USING(key); +SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 ANY RIGHT JOIN dict_flat d USING(key) ORDER BY s1.key; SELECT '-'; -SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 SEMI RIGHT JOIN dict_flat d USING(key); +SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 SEMI RIGHT JOIN dict_flat d USING(key) ORDER BY s1.key; SELECT '-'; -SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 ANTI RIGHT JOIN dict_flat d USING(key); +SELECT * FROM (SELECT number AS key FROM numbers(2)) s1 ANTI RIGHT JOIN dict_flat d USING(key) ORDER BY s1.key; DROP DICTIONARY dict_flat; DROP DICTIONARY dict_hashed; From 54f47c468cc3dfa67e87c3a6486294351585937d Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov Date: Wed, 27 Jan 2021 21:34:48 +0300 Subject: [PATCH 29/48] mark all create database tests as sequential-only --- tests/queries/skip_list.json | 91 +++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/tests/queries/skip_list.json b/tests/queries/skip_list.json index c01cfee5993..b48d642befd 100644 --- a/tests/queries/skip_list.json +++ b/tests/queries/skip_list.json @@ -314,11 +314,14 @@ /// Pessimistic list of tests which work badly in parallel. /// Probably they need better investigation. "00062_replicated_merge_tree_alter_zookeeper", + "00080_show_tables_and_system_tables", + "00101_materialized_views_and_insert_without_explicit_database", "00109_shard_totals_after_having", "00110_external_sort", "00116_storage_set", "00121_drop_column_zookeeper", "00133_long_shard_memory_tracker_and_exception_safety", + "00158_buffer_and_nonexistent_table", "00180_attach_materialized_view", "00226_zookeeper_deduplication_and_unexpected_parts", "00236_replicated_drop_on_non_leader_zookeeper", @@ -339,9 +342,12 @@ "00571_non_exist_database_when_create_materializ_view", "00575_illegal_column_exception_when_drop_depen_column", "00599_create_view_with_subquery", + "00604_show_create_database", "00612_http_max_query_size", "00619_union_highlite", "00620_optimize_on_nonleader_replica_zookeeper", + "00623_truncate_table", + "00623_truncate_table_throw_exception", "00625_arrays_in_nested", "00626_replace_partition_from_table", "00626_replace_partition_from_table_zookeeper", @@ -354,20 +360,28 @@ "00699_materialized_view_mutations", "00701_rollup", "00715_fetch_merged_or_mutated_part_zookeeper", + "00716_allow_ddl", + "00719_parallel_ddl_db", + "00740_database_in_nested_view", + "00741_client_comment_multiline", "00751_default_databasename_for_view", "00753_alter_attach", "00754_alter_modify_column_partitions", "00754_alter_modify_order_by_replicated_zookeeper", "00763_long_lock_buffer_alter_destination_table", + "00800_versatile_storage_join", "00804_test_alter_compression_codecs", "00804_test_custom_compression_codecs", "00804_test_custom_compression_codes_log_storages", "00804_test_delta_codec_compression", + "00815_left_join_on_stepanel", "00834_cancel_http_readonly_queries_on_client_close", "00834_kill_mutation", "00834_kill_mutation_replicated_zookeeper", "00840_long_concurrent_select_and_drop_deadlock", + "00857_global_joinsavel_table_alias", "00899_long_attach_memory_limit", + "00910_buffer_prewhere", "00910_zookeeper_custom_compression_codecs_replicated", "00926_adaptive_index_granularity_merge_tree", "00926_adaptive_index_granularity_pk", @@ -385,49 +399,94 @@ "00988_constraints_replication_zookeeper", "00989_parallel_parts_loading", "00993_system_parts_race_condition_drop_zookeeper", + "01012_show_tables_limit", "01013_sync_replica_timeout_zookeeper", + "01014_lazy_database_basic", "01014_lazy_database_concurrent_recreate_reattach_and_show_tables", "01015_attach_part", + "01015_database_bad_tables", "01018_ddl_dictionaries_concurrent_requrests", "01018_ddl_dictionaries_create", "01018_ddl_dictionaries_select", + "01018_ddl_dictionaries_special", + "01018_dictionaries_from_dictionaries", + "01018_ip_dictionary", "01021_only_tuple_columns", + "01023_materialized_view_query_context", "01031_mutations_interpreter_and_context", "01033_dictionaries_lifetime", "01035_concurrent_move_partition_from_table_zookeeper", + "01036_no_superfluous_dict_reload_on_create_database", + "01036_no_superfluous_dict_reload_on_create_database_2", + "01037_polygon_dicts_correctness_all", + "01037_polygon_dicts_correctness_fast", + "01037_polygon_dicts_simple_functions", + "01038_dictionary_lifetime_min_zero_sec", + "01040_dictionary_invalidate_query_switchover_long", + "01041_create_dictionary_if_not_exists", + "01042_system_reload_dictionary_reloads_completely", + "01043_dictionary_attribute_properties_values", + "01045_dictionaries_restrictions", "01045_zookeeper_system_mutations_with_parts_names", + "01048_exists_query", + "01053_drop_database_mat_view", "01053_ssd_dictionary", + "01054_cache_dictionary_bunch_update", + "01054_cache_dictionary_overflow_cell", "01055_compact_parts_1", + "01056_create_table_as", "01060_avro", "01060_shutdown_table_after_detach", + "01069_database_memory", "01070_materialize_ttl", "01070_modify_ttl", "01070_mutations_with_dependencies", "01071_live_view_detach_dependency", "01071_prohibition_secondary_index_with_old_format_merge_tree", "01073_attach_if_not_exists", + "01073_show_tables_not_like", + "01076_cache_dictionary_datarace_exception_ptr", "01076_parallel_alter_replicated_zookeeper", "01079_parallel_alter_add_drop_column_zookeeper", "01079_parallel_alter_detach_table_zookeeper", + "01080_check_for_error_incorrect_size_of_nested_column", "01083_expressions_in_engine_arguments", + "01084_regexp_empty", "01085_max_distributed_connections_http", "01092_memory_profiler", "01098_temporary_and_external_tables", + "01103_distributed_product_mode_local_column_renames", "01107_atomic_db_detach_attach", "01108_restart_replicas_rename_deadlock_zookeeper", + "01109_exchange_tables", "01110_dictionary_layout_without_arguments", + "01113_local_dictionary_type_conversion", "01114_database_atomic", + "01114_mysql_database_engine_segfault", + "01115_join_with_dictionary", + "01125_dict_ddl_cannot_add_column", "01127_month_partitioning_consistency_select", "01130_in_memory_parts_partitons", "01135_default_and_alter_zookeeper", "01148_zookeeper_path_macros_unfolding", + "01150_ddl_guard_rwr", + "01185_create_or_replace_table", "01190_full_attach_syntax", + "01191_rename_dictionary", + "01192_rename_database_zookeeper", "01193_metadata_loading", "01200_mutations_memory_consumption", + "01224_no_superfluous_dict_reload", + "01225_drop_dictionary_as_table", + "01225_show_create_table_from_dictionary", + "01231_distributed_aggregation_memory_efficient_mix_levels", + "01232_extremes", "01238_http_memory_tracking", "01249_bad_arguments_for_bloom_filter", "01251_dict_is_in_infinite_loop", + "01254_dict_create_without_db", "01254_dict_load_after_detach_attach", + "01257_dictionary_mismatch_types", "01259_dictionary_custom_settings_ddl", "01267_alter_default_key_columns_zookeeper", "01268_dictionary_direct_layout", @@ -441,18 +500,25 @@ "01293_system_distribution_queue", "01294_lazy_database_concurrent", "01294_lazy_database_concurrent_recreate_reattach_and_show_tables", + "01294_system_distributed_on_cluster", + "01296_create_row_policy_in_current_database", "01305_replica_create_drop_zookeeper", "01307_multiple_leaders_zookeeper", "01318_long_unsuccessful_mutation_zookeeper", "01319_manual_write_to_replicas", + "01320_create_sync_race_condition_zookeeper", "01338_long_select_and_alter", "01338_long_select_and_alter_zookeeper", "01355_alter_column_with_order", "01355_ilike", "01357_version_collapsing_attach_detach_zookeeper", "01375_compact_parts_codecs", + "01376_GROUP_BY_injective_elimination_dictGet", "01378_alter_rename_with_ttl_zookeeper", + "01383_remote_ambiguous_column_shard", "01388_clear_all_columns", + "01391_join_on_dict_crash", + "01392_column_resolve", "01396_inactive_replica_cleanup_nodes_zookeeper", "01412_cache_dictionary_race", "01414_mutations_and_errors_zookeeper", @@ -461,20 +527,41 @@ "01417_freeze_partition_verbose", "01417_freeze_partition_verbose_zookeeper", "01430_modify_sample_by_zookeeper", + "01444_create_table_drop_database_race", "01454_storagememory_data_race_challenge", + "01455_rank_correlation_spearman", "01456_modify_column_type_via_add_drop_update", "01457_create_as_table_function_structure", "01459_manual_write_to_replicas", "01460_DistributedFilesToInsert", "01465_ttl_recompression", + "01470_show_databases_like", "01471_calculate_ttl_during_merge", + "01487_distributed_in_not_default_db", "01493_alter_remove_properties_zookeeper", "01493_storage_set_persistency", "01494_storage_join_persistency", + "01501_cache_dictionary_all_fields", + "01507_clickhouse_server_start_with_embedded_config", + "01509_dictionary_preallocate", + "01516_create_table_primary_key", "01516_drop_table_stress", + "01517_drop_mv_with_inner_table", + "01526_complex_key_dict_direct_layout", + "01527_clickhouse_local_optimize", + "01527_dist_sharding_key_dictGet_reload", + "01530_drop_database_atomic_sync", "01541_max_memory_usage_for_user", - "01646_system_restart_replicas_smoke", // system restart replicas is a global query + "01542_dictionary_load_exception_race", + "01575_disable_detach_table_of_dictionary", "01600_count_of_parts_metrics", // tests global system metrics + "01600_detach_permanently", + "01600_log_queries_with_extensive_info", + "01600_multiple_left_join_with_aliases", + "01601_detach_permanently", + "01602_show_create_view", + "01603_rename_overwrite_bug", + "01646_system_restart_replicas_smoke", // system restart replicas is a global query "attach", "ddl_dictionaries", "dictionary", @@ -482,6 +569,6 @@ "live_view", "memory_leak", "memory_limit", - "polygon_dicts" // they use an explicitly specified database + "polygon_dicts", // they use an explicitly specified database ] } From f4f66e953787a0a939d304784c7fd9ca202eebb3 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov Date: Wed, 27 Jan 2021 21:37:28 +0300 Subject: [PATCH 30/48] try to use predictable names for stdout/err when possible --- tests/clickhouse-test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/clickhouse-test b/tests/clickhouse-test index 70f7fe18982..8f9aaeb6ed8 100755 --- a/tests/clickhouse-test +++ b/tests/clickhouse-test @@ -342,7 +342,7 @@ def run_tests_array(all_tests_with_params): SERVER_DIED = True break - file_suffix = ('.' + str(os.getpid())) if is_concurrent else '' + file_suffix = ('.' + str(os.getpid())) if is_concurrent and args.test_runs > 1 else '' reference_file = os.path.join(suite_dir, name) + '.reference' stdout_file = os.path.join(suite_tmp_dir, name) + file_suffix + '.stdout' stderr_file = os.path.join(suite_tmp_dir, name) + file_suffix + '.stderr' From 0cb8a8070ed54a6d7bc8ff97f1ce61bee2fb703b Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Wed, 27 Jan 2021 22:50:18 +0300 Subject: [PATCH 31/48] Update skip_list.json --- tests/queries/skip_list.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/queries/skip_list.json b/tests/queries/skip_list.json index b48d642befd..79aae32da45 100644 --- a/tests/queries/skip_list.json +++ b/tests/queries/skip_list.json @@ -569,6 +569,6 @@ "live_view", "memory_leak", "memory_limit", - "polygon_dicts", // they use an explicitly specified database + "polygon_dicts" // they use an explicitly specified database ] } From 76e62739ede5c1164a98812eb2ea46560651e83e Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Wed, 27 Jan 2021 23:05:41 +0300 Subject: [PATCH 32/48] Fixed build. --- src/IO/S3Common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/IO/S3Common.cpp b/src/IO/S3Common.cpp index 69b7a3088fb..fbcd4ed97f1 100644 --- a/src/IO/S3Common.cpp +++ b/src/IO/S3Common.cpp @@ -339,7 +339,7 @@ namespace S3 ); } - PocoHTTPClientConfiguration ClientFactory::createClientConfiguration( + PocoHTTPClientConfiguration ClientFactory::createClientConfiguration( // NOLINT const RemoteHostFilter & remote_host_filter, unsigned int s3_max_redirects) { From 442c6d758a225d9ba7aad152797d83a8e20f9c04 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 04:09:47 +0300 Subject: [PATCH 33/48] Fuzzer: better messages. --- docker/test/fuzzer/run-fuzzer.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/test/fuzzer/run-fuzzer.sh b/docker/test/fuzzer/run-fuzzer.sh index 20cdc5bf10c..b036f99e91d 100755 --- a/docker/test/fuzzer/run-fuzzer.sh +++ b/docker/test/fuzzer/run-fuzzer.sh @@ -189,14 +189,14 @@ case "$stage" in echo "failure" > status.txt if ! grep -ao "Received signal.*\|Logical error.*\|Assertion.*failed\|Failed assertion.*\|.*runtime error: .*\|.*is located.*\|SUMMARY: MemorySanitizer:.*\|SUMMARY: ThreadSanitizer:.*" server.log > description.txt then - echo "Lost connection to server. See the logs" > description.txt + echo "Lost connection to server. See the logs." > description.txt fi else # Something different -- maybe the fuzzer itself died? Don't grep the # server log in this case, because we will find a message about normal # server termination (Received signal 15), which is confusing. echo "failure" > status.txt - echo "Fuzzer failed ($fuzzer_exit_code). See the logs" > description.txt + echo "Fuzzer failed ($fuzzer_exit_code). See the logs." > description.txt fi ;& "report") From 708e68b98313be485f3414aa1f4591dcea633592 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 04:28:19 +0300 Subject: [PATCH 34/48] Fix stack overflow in coroutine --- src/DataTypes/DataTypeFactory.cpp | 8 +++++++- .../01675_data_type_coroutine.reference | 1 + .../0_stateless/01675_data_type_coroutine.sh | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/queries/0_stateless/01675_data_type_coroutine.reference create mode 100755 tests/queries/0_stateless/01675_data_type_coroutine.sh diff --git a/src/DataTypes/DataTypeFactory.cpp b/src/DataTypes/DataTypeFactory.cpp index 2f100202ee9..dc3ce039dbd 100644 --- a/src/DataTypes/DataTypeFactory.cpp +++ b/src/DataTypes/DataTypeFactory.cpp @@ -29,8 +29,14 @@ namespace ErrorCodes DataTypePtr DataTypeFactory::get(const String & full_name) const { + /// Data type parser can be invoked from coroutines with small stack. + /// Value 315 is known to cause stack overflow in some test configurations (debug build, sanitizers) + /// let's make the threshold significantly lower. + /// It is impractical for user to have complex data types with this depth. + static constexpr size_t data_type_max_parse_depth = 200; + ParserDataType parser; - ASTPtr ast = parseQuery(parser, full_name.data(), full_name.data() + full_name.size(), "data type", 0, DBMS_DEFAULT_MAX_PARSER_DEPTH); + ASTPtr ast = parseQuery(parser, full_name.data(), full_name.data() + full_name.size(), "data type", 0, data_type_max_parse_depth); return get(ast); } diff --git a/tests/queries/0_stateless/01675_data_type_coroutine.reference b/tests/queries/0_stateless/01675_data_type_coroutine.reference new file mode 100644 index 00000000000..7326d960397 --- /dev/null +++ b/tests/queries/0_stateless/01675_data_type_coroutine.reference @@ -0,0 +1 @@ +Ok diff --git a/tests/queries/0_stateless/01675_data_type_coroutine.sh b/tests/queries/0_stateless/01675_data_type_coroutine.sh new file mode 100755 index 00000000000..781e43e4134 --- /dev/null +++ b/tests/queries/0_stateless/01675_data_type_coroutine.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +I=0 +while true +do + I=$((I + 1)) + TYPE=$(perl -e "print 'Array(' x $I; print 'UInt8'; print ')' x $I") + ${CLICKHOUSE_CLIENT} --max_parser_depth 1000000 --query "SELECT * FROM remote('127.0.0.{1,2}', generateRandom('x $TYPE', 1, 1, 1)) LIMIT 1 FORMAT Null" 2>&1 | grep -q -F 'Maximum parse depth' && break; +done + +#echo "I = ${I}" +echo 'Ok' From 297cfb4857836295f25cdb783d6b6afe78d7e017 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 06:34:44 +0300 Subject: [PATCH 35/48] Less parser depth --- src/Parsers/ParserDataType.cpp | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/Parsers/ParserDataType.cpp b/src/Parsers/ParserDataType.cpp index 0148f2f3bb9..3d3f393a300 100644 --- a/src/Parsers/ParserDataType.cpp +++ b/src/Parsers/ParserDataType.cpp @@ -14,21 +14,29 @@ namespace { /// Wrapper to allow mixed lists of nested and normal types. -class ParserNestedTableOrExpression : public IParserBase +/// Parameters are either: +/// - Nested table elements; +/// - Enum element in form of 'a' = 1; +/// - literal; +/// - another data type (or identifier) +class ParserDataTypeArgument : public IParserBase { - private: - const char * getName() const override { return "data type or expression"; } - bool parseImpl(Pos & pos, ASTPtr & node, Expected & expected) override - { - ParserNestedTable parser1; +private: + const char * getName() const override { return "data type argument"; } + bool parseImpl(Pos & pos, ASTPtr & node, Expected & expected) override + { + ParserNestedTable nested_parser; + ParserDataType data_type_parser; + ParserLiteral literal_parser; - if (parser1.parse(pos, node, expected)) - return true; + const char * operators[] = {"=", "equals", nullptr}; + ParserLeftAssociativeBinaryOperatorList enum_parser(operators, std::make_unique()); - ParserExpression parser2; - - return parser2.parse(pos, node, expected); - } + return nested_parser.parse(pos, node, expected) + || enum_parser.parse(pos, node, expected) + || literal_parser.parse(pos, node, expected) + || data_type_parser.parse(pos, node, expected); + } }; } @@ -104,7 +112,7 @@ bool ParserDataType::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) ++pos; /// Parse optional parameters - ParserList args_parser(std::make_unique(), std::make_unique(TokenType::Comma)); + ParserList args_parser(std::make_unique(), std::make_unique(TokenType::Comma)); ASTPtr expr_list_args; if (!args_parser.parse(pos, expr_list_args, expected)) From 2acff24aaf63afeb0dc57ab4206ac7bb9dec8ef0 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 06:42:20 +0300 Subject: [PATCH 36/48] The test most likely would not work in Arcadia --- tests/queries/0_stateless/arcadia_skip_list.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/queries/0_stateless/arcadia_skip_list.txt b/tests/queries/0_stateless/arcadia_skip_list.txt index 1b42e38a8e9..a34621fc55a 100644 --- a/tests/queries/0_stateless/arcadia_skip_list.txt +++ b/tests/queries/0_stateless/arcadia_skip_list.txt @@ -196,3 +196,4 @@ 01181_db_atomic_drop_on_cluster 01658_test_base64Encode_mysql_compatibility 01659_test_base64Decode_mysql_compatibility +01675_data_type_coroutine From 68c542aec681bbf841f45fc879c1e97052449555 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 07:43:59 +0300 Subject: [PATCH 37/48] Update test --- .../0_stateless/00945_bloom_filter_index.sql | 28 +++++++++---------- .../01414_low_cardinality_nullable.sql | 6 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/queries/0_stateless/00945_bloom_filter_index.sql b/tests/queries/0_stateless/00945_bloom_filter_index.sql index 82321a75c67..ad9c807fc5a 100644 --- a/tests/queries/0_stateless/00945_bloom_filter_index.sql +++ b/tests/queries/0_stateless/00945_bloom_filter_index.sql @@ -163,23 +163,23 @@ DROP TABLE IF EXISTS bloom_filter_lc_null_types_test; DROP TABLE IF EXISTS bloom_filter_array_lc_null_types_test; CREATE TABLE bloom_filter_array_lc_null_types_test ( - order_key Array(LowCardinality(Nullable((UInt64)))), + order_key Array(LowCardinality(Nullable(UInt64))), - i8 Array(LowCardinality(Nullable((Int8)))), - i16 Array(LowCardinality(Nullable((Int16)))), - i32 Array(LowCardinality(Nullable((Int32)))), - i64 Array(LowCardinality(Nullable((Int64)))), - u8 Array(LowCardinality(Nullable((UInt8)))), - u16 Array(LowCardinality(Nullable((UInt16)))), - u32 Array(LowCardinality(Nullable((UInt32)))), - u64 Array(LowCardinality(Nullable((UInt64)))), - f32 Array(LowCardinality(Nullable((Float32)))), - f64 Array(LowCardinality(Nullable((Float64)))), + i8 Array(LowCardinality(Nullable(Int8))), + i16 Array(LowCardinality(Nullable(Int16))), + i32 Array(LowCardinality(Nullable(Int32))), + i64 Array(LowCardinality(Nullable(Int64))), + u8 Array(LowCardinality(Nullable(UInt8))), + u16 Array(LowCardinality(Nullable(UInt16))), + u32 Array(LowCardinality(Nullable(UInt32))), + u64 Array(LowCardinality(Nullable(UInt64))), + f32 Array(LowCardinality(Nullable(Float32))), + f64 Array(LowCardinality(Nullable(Float64))), - date Array(LowCardinality(Nullable((Date)))), + date Array(LowCardinality(Nullable(Date))), date_time Array(LowCardinality(Nullable(DateTime('Europe/Moscow')))), - str Array(LowCardinality(Nullable((String)))), + str Array(LowCardinality(Nullable(String))), fixed_string Array(LowCardinality(Nullable(FixedString(5)))), INDEX idx (i8, i16, i32, i64, u8, u16, u32, u64, f32, f64, date, date_time, str, fixed_string) TYPE bloom_filter GRANULARITY 1) @@ -286,7 +286,7 @@ SELECT COUNT() FROM bloom_filter_array_lc_null_types_test WHERE has(fixed_string DROP TABLE IF EXISTS bloom_filter_array_lc_null_types_test; DROP TABLE IF EXISTS bloom_filter_array_offsets_lc_str; -CREATE TABLE bloom_filter_array_offsets_lc_str (order_key int, str Array(LowCardinality((String))), INDEX idx str TYPE bloom_filter(1.) GRANULARITY 1024) ENGINE = MergeTree() ORDER BY order_key SETTINGS index_granularity = 1024; +CREATE TABLE bloom_filter_array_offsets_lc_str (order_key int, str Array(LowCardinality(String)), INDEX idx str TYPE bloom_filter(1.) GRANULARITY 1024) ENGINE = MergeTree() ORDER BY order_key SETTINGS index_granularity = 1024; INSERT INTO bloom_filter_array_offsets_lc_str SELECT number AS i, if(i%2, ['value'], []) FROM system.numbers LIMIT 10000; SELECT count() FROM bloom_filter_array_offsets_lc_str WHERE has(str, 'value'); DROP TABLE IF EXISTS bloom_filter_array_offsets_lc_str; diff --git a/tests/queries/0_stateless/01414_low_cardinality_nullable.sql b/tests/queries/0_stateless/01414_low_cardinality_nullable.sql index 9a554ead776..596e90adfd6 100644 --- a/tests/queries/0_stateless/01414_low_cardinality_nullable.sql +++ b/tests/queries/0_stateless/01414_low_cardinality_nullable.sql @@ -1,7 +1,7 @@ DROP TABLE IF EXISTS lc_nullable; CREATE TABLE lc_nullable ( - order_key Array(LowCardinality(Nullable((UInt64)))), + order_key Array(LowCardinality(Nullable(UInt64))), i8 Array(LowCardinality(Nullable(Int8))), i16 Array(LowCardinality(Nullable(Int16))), @@ -14,10 +14,10 @@ CREATE TABLE lc_nullable ( f32 Array(LowCardinality(Nullable(Float32))), f64 Array(LowCardinality(Nullable(Float64))), - date Array(LowCardinality(Nullable((Date)))), + date Array(LowCardinality(Nullable(Date))), date_time Array(LowCardinality(Nullable(DateTime('Europe/Moscow')))), - str Array(LowCardinality(Nullable((String)))), + str Array(LowCardinality(Nullable(String))), fixed_string Array(LowCardinality(Nullable(FixedString(5)))) ) ENGINE = MergeTree() ORDER BY order_key; From d9ca77d90ece2edd77aeedc06e33d74302bf5292 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Thu, 28 Jan 2021 09:58:35 +0300 Subject: [PATCH 38/48] Add missing lsof for fasttest docker image --- docker/test/fasttest/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/test/fasttest/Dockerfile b/docker/test/fasttest/Dockerfile index ac22a9dfaf0..03b7b2fc53a 100644 --- a/docker/test/fasttest/Dockerfile +++ b/docker/test/fasttest/Dockerfile @@ -43,6 +43,7 @@ RUN apt-get update \ clang-tidy-${LLVM_VERSION} \ cmake \ curl \ + lsof \ expect \ fakeroot \ git \ From 4c0c2d03fbd4a34bfd3bd5ef6269be0a1d070bc5 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 10:21:54 +0300 Subject: [PATCH 39/48] Make Fuzzer more reliable --- docker/test/fuzzer/run-fuzzer.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docker/test/fuzzer/run-fuzzer.sh b/docker/test/fuzzer/run-fuzzer.sh index b036f99e91d..9af401238a3 100755 --- a/docker/test/fuzzer/run-fuzzer.sh +++ b/docker/test/fuzzer/run-fuzzer.sh @@ -21,13 +21,16 @@ function clone git init git remote add origin https://github.com/ClickHouse/ClickHouse - git fetch --depth=100 origin "$SHA_TO_TEST" - git fetch --depth=100 origin master # Used to obtain the list of modified or added tests + + # Network is unreliable. GitHub neither. + for _ in {1..100}; do git fetch --depth=100 origin "$SHA_TO_TEST" && break; sleep 1; done + # Used to obtain the list of modified or added tests + for _ in {1..100}; do git fetch --depth=100 origin master && break; sleep 1; done # If not master, try to fetch pull/.../{head,merge} if [ "$PR_TO_TEST" != "0" ] then - git fetch --depth=100 origin "refs/pull/$PR_TO_TEST/*:refs/heads/pull/$PR_TO_TEST/*" + for _ in {1..100}; do git fetch --depth=100 origin "refs/pull/$PR_TO_TEST/*:refs/heads/pull/$PR_TO_TEST/*" && break; sleep 1; done fi git checkout "$SHA_TO_TEST" From d37ca628df96acd631bd3834d620228e19a8e2c5 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 10:44:29 +0300 Subject: [PATCH 40/48] Arcadia does not have bitmaps --- tests/queries/0_stateless/arcadia_skip_list.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/queries/0_stateless/arcadia_skip_list.txt b/tests/queries/0_stateless/arcadia_skip_list.txt index 1b42e38a8e9..871d429e037 100644 --- a/tests/queries/0_stateless/arcadia_skip_list.txt +++ b/tests/queries/0_stateless/arcadia_skip_list.txt @@ -196,3 +196,4 @@ 01181_db_atomic_drop_on_cluster 01658_test_base64Encode_mysql_compatibility 01659_test_base64Decode_mysql_compatibility +01671_aggregate_function_group_bitmap_data From b9b573976e465670990c041ec303b59df1ee3919 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Thu, 28 Jan 2021 11:26:10 +0300 Subject: [PATCH 41/48] Minor code improvement in JOIN --- src/Interpreters/HashJoin.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Interpreters/HashJoin.cpp b/src/Interpreters/HashJoin.cpp index ac2429334e4..ad1a37c2703 100644 --- a/src/Interpreters/HashJoin.cpp +++ b/src/Interpreters/HashJoin.cpp @@ -688,7 +688,7 @@ public: if constexpr (has_defaults) applyLazyDefaults(); - for (size_t j = 0; j < right_indexes.size(); ++j) + for (size_t j = 0, size = right_indexes.size(); j < size; ++j) columns[j]->insertFrom(*block.getByPosition(right_indexes[j]).column, row_num); } @@ -701,7 +701,7 @@ public: { if (lazy_defaults_count) { - for (size_t j = 0; j < right_indexes.size(); ++j) + for (size_t j = 0, size = right_indexes.size(); j < size; ++j) JoinCommon::addDefaultValues(*columns[j], type_name[j].first, lazy_defaults_count); lazy_defaults_count = 0; } From 879adc5437754c677abd76915de485a973298037 Mon Sep 17 00:00:00 2001 From: alesapin Date: Thu, 28 Jan 2021 11:55:20 +0300 Subject: [PATCH 42/48] Add new line to status --- tests/clickhouse-test | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/clickhouse-test b/tests/clickhouse-test index e168f9372de..b2d97679b47 100755 --- a/tests/clickhouse-test +++ b/tests/clickhouse-test @@ -434,6 +434,9 @@ def run_tests_array(all_tests_with_params): if os.path.exists(stderr_file): os.remove(stderr_file) + if status and not status.endswith('\n'): + status += '\n' + sys.stdout.write(status) sys.stdout.flush() except KeyboardInterrupt as e: From 895600f67612d6db21a7aba53920e9827d93773c Mon Sep 17 00:00:00 2001 From: alesapin Date: Thu, 28 Jan 2021 11:57:12 +0300 Subject: [PATCH 43/48] Add lsof to fasttest --- docker/test/fasttest/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/test/fasttest/Dockerfile b/docker/test/fasttest/Dockerfile index ac22a9dfaf0..e508c217e25 100644 --- a/docker/test/fasttest/Dockerfile +++ b/docker/test/fasttest/Dockerfile @@ -61,6 +61,7 @@ RUN apt-get update \ software-properties-common \ tzdata \ unixodbc \ + lsof \ --yes --no-install-recommends RUN pip3 install numpy scipy pandas From 670d054cf3b2e161e9a79525bcae13d8f160c353 Mon Sep 17 00:00:00 2001 From: alesapin Date: Thu, 28 Jan 2021 12:08:48 +0300 Subject: [PATCH 44/48] Remove redundant lsof --- docker/test/fasttest/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/test/fasttest/Dockerfile b/docker/test/fasttest/Dockerfile index 46c0173c226..03b7b2fc53a 100644 --- a/docker/test/fasttest/Dockerfile +++ b/docker/test/fasttest/Dockerfile @@ -62,7 +62,6 @@ RUN apt-get update \ software-properties-common \ tzdata \ unixodbc \ - lsof \ --yes --no-install-recommends RUN pip3 install numpy scipy pandas From f3dd1aadc37598babf558b2d4df56587c9349e25 Mon Sep 17 00:00:00 2001 From: Olga Revyakina Date: Thu, 28 Jan 2021 13:06:44 +0300 Subject: [PATCH 45/48] Syntax and links --- docs/en/operations/system-tables/quotas.md | 16 ++++++++-------- docs/en/sql-reference/statements/create/quota.md | 14 +++++++++----- docs/ru/sql-reference/statements/create/quota.md | 13 ++++++++----- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/docs/en/operations/system-tables/quotas.md b/docs/en/operations/system-tables/quotas.md index f4f52a4a131..3e797c9bdc6 100644 --- a/docs/en/operations/system-tables/quotas.md +++ b/docs/en/operations/system-tables/quotas.md @@ -7,16 +7,16 @@ Columns: - `id` ([UUID](../../sql-reference/data-types/uuid.md)) — Quota ID. - `storage`([String](../../sql-reference/data-types/string.md)) — Storage of quotas. Possible value: “users.xml” if a quota configured in the users.xml file, “disk” if a quota configured by an SQL-query. - `keys` ([Array](../../sql-reference/data-types/array.md)([Enum8](../../sql-reference/data-types/enum.md))) — Key specifies how the quota should be shared. If two connections use the same quota and key, they share the same amounts of resources. Values: -- `[]` — All users share the same quota. -- `['user_name']` — Connections with the same user name share the same quota. -- `['ip_address']` — Connections from the same IP share the same quota. -- `['client_key']` — Connections with the same key share the same quota. A key must be explicitly provided by a client. When using [clickhouse-client](../../interfaces/cli.md), pass a key value in the `--quota-key` parameter, or use the `quota_key` parameter in the client configuration file. When using HTTP interface, use the `X-ClickHouse-Quota` header. -- `['user_name', 'client_key']` — Connections with the same `client_key` share the same quota. If a key isn’t provided by a client, the qouta is tracked for `user_name`. -- `['client_key', 'ip_address']` — Connections with the same `client_key` share the same quota. If a key isn’t provided by a client, the qouta is tracked for `ip_address`. + - `[]` — All users share the same quota. + - `['user_name']` — Connections with the same user name share the same quota. + - `['ip_address']` — Connections from the same IP share the same quota. + - `['client_key']` — Connections with the same key share the same quota. A key must be explicitly provided by a client. When using [clickhouse-client](../../interfaces/cli.md), pass a key value in the `--quota-key` parameter, or use the `quota_key` parameter in the client configuration file. When using HTTP interface, use the `X-ClickHouse-Quota` header. + - `['user_name', 'client_key']` — Connections with the same `client_key` share the same quota. If a key isn’t provided by a client, the qouta is tracked for `user_name`. + - `['client_key', 'ip_address']` — Connections with the same `client_key` share the same quota. If a key isn’t provided by a client, the qouta is tracked for `ip_address`. - `durations` ([Array](../../sql-reference/data-types/array.md)([UInt64](../../sql-reference/data-types/int-uint.md))) — Time interval lengths in seconds. - `apply_to_all` ([UInt8](../../sql-reference/data-types/int-uint.md#uint-ranges)) — Logical value. It shows which users the quota is applied to. Values: -- `0` — The quota applies to users specify in the `apply_to_list`. -- `1` — The quota applies to all users except those listed in `apply_to_except`. + - `0` — The quota applies to users specify in the `apply_to_list`. + - `1` — The quota applies to all users except those listed in `apply_to_except`. - `apply_to_list` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — List of user names/[roles](../../operations/access-rights.md#role-management) that the quota should be applied to. - `apply_to_except` ([Array](../../sql-reference/data-types/array.md)([String](../../sql-reference/data-types/string.md))) — List of user names/roles that the quota should not apply to. diff --git a/docs/en/sql-reference/statements/create/quota.md b/docs/en/sql-reference/statements/create/quota.md index 8f3b89790e4..ec980af921f 100644 --- a/docs/en/sql-reference/statements/create/quota.md +++ b/docs/en/sql-reference/statements/create/quota.md @@ -11,13 +11,17 @@ Syntax: ``` sql CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] - [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] - [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | + [KEYED BY {user_name | ip_address | client_key | client_key,user_name | client_key,ip_address} | NOT KEYED] + [FOR [RANDOMIZED] INTERVAL number {second | minute | hour | day | week | month | quarter | year} + {MAX { {queries | errors | result_rows | result_bytes | read_rows | read_bytes | execution_time} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` +Keys `user_name`, `ip_address`, `client_key`, `client_key, user_name` and `client_key, ip_address` correspond to the fields in the [system.quotas](../../../operations/system-tables/quotas.md) table. + +Parameters `queries`, `errors`, `result_rows`, `result_bytes`, `read_rows`, `read_bytes`, `execution_time` correspond to the fields in the [system.quotas_usage](../../../operations/system-tables/quotas_usage.md) table. + `ON CLUSTER` clause allows creating quotas on a cluster, see [Distributed DDL](../../../sql-reference/distributed-ddl.md). **Examples** @@ -25,11 +29,11 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: ``` sql -CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +CREATE QUOTA qA FOR INTERVAL 15 month MAX queries = 123 TO CURRENT_USER; ``` For the default user limit the maximum execution time with half a second in 30 minutes, and limit the maximum number of queries with 321 and the maximum number of errors with 10 in 5 quaters: ``` sql -CREATE QUOTA qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +CREATE QUOTA qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default; ``` diff --git a/docs/ru/sql-reference/statements/create/quota.md b/docs/ru/sql-reference/statements/create/quota.md index 8ae3cc45ee1..65762071ea2 100644 --- a/docs/ru/sql-reference/statements/create/quota.md +++ b/docs/ru/sql-reference/statements/create/quota.md @@ -11,12 +11,15 @@ toc_title: "\u041a\u0432\u043e\u0442\u0430" ``` sql CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] - [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] - [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | + [KEYED BY {user_name | ip_address | client_key | client_key, user_name | client_key, ip_address} | NOT KEYED] + [FOR [RANDOMIZED] INTERVAL number {second | minute | hour | day | week | month | quarter | year} + {MAX { {queries | errors | result_rows | result_bytes | read_rows | read_bytes | execution_time} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` +Ключи `user_name`, `ip_address`, `client_key`, `client_key, user_name` и `client_key, ip_address` соответствуют полям таблицы [system.quotas](../../../operations/system-tables/quotas.md). + +Параметры `queries`, `errors`, `result_rows`, `result_bytes`, `read_rows`, `read_bytes`, `execution_time` соответствуют полям таблицы [system.quotas_usage](../../../operations/system-tables/quotas_usage.md). В секции `ON CLUSTER` можно указать кластеры, на которых создается квота, см. [Распределенные DDL запросы](../../../sql-reference/distributed-ddl.md). @@ -25,13 +28,13 @@ CREATE QUOTA [IF NOT EXISTS | OR REPLACE] name [ON CLUSTER cluster_name] Ограничить максимальное количество запросов для текущего пользователя — не более 123 запросов за каждые 15 месяцев: ``` sql -CREATE QUOTA qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +CREATE QUOTA qA FOR INTERVAL 15 month MAX queries = 123 TO CURRENT_USER; ``` Ограничить по умолчанию максимальное время выполнения запроса — не более полсекунды за каждые 30 минут, а также максимальное число запросов — не более 321 и максимальное число ошибок — не более 10 за каждые 5 кварталов: ``` sql -CREATE QUOTA qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +CREATE QUOTA qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default; ``` [Оригинальная статья](https://clickhouse.tech/docs/ru/sql-reference/statements/create/quota) From 0749d20712707c9431015aad0e0092efc262b677 Mon Sep 17 00:00:00 2001 From: Olga Revyakina Date: Thu, 28 Jan 2021 13:17:50 +0300 Subject: [PATCH 46/48] Same for ALTER --- docs/en/sql-reference/statements/alter/quota.md | 15 ++++++++++----- docs/ru/sql-reference/statements/alter/quota.md | 16 +++++++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/docs/en/sql-reference/statements/alter/quota.md b/docs/en/sql-reference/statements/alter/quota.md index 18083e4a523..905c57503fc 100644 --- a/docs/en/sql-reference/statements/alter/quota.md +++ b/docs/en/sql-reference/statements/alter/quota.md @@ -12,23 +12,28 @@ Syntax: ``` sql ALTER QUOTA [IF EXISTS] name [ON CLUSTER cluster_name] [RENAME TO new_name] - [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] - [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | + [KEYED BY {user_name | ip_address | client_key | client_key,user_name | client_key,ip_address} | NOT KEYED] + [FOR [RANDOMIZED] INTERVAL number {second | minute | hour | day | week | month | quarter | year} + {MAX { {queries | errors | result_rows | result_bytes | read_rows | read_bytes | execution_time} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` +Keys `user_name`, `ip_address`, `client_key`, `client_key, user_name` and `client_key, ip_address` correspond to the fields in the [system.quotas](../../../operations/system-tables/quotas.md) table. + +Parameters `queries`, `errors`, `result_rows`, `result_bytes`, `read_rows`, `read_bytes`, `execution_time` correspond to the fields in the [system.quotas_usage](../../../operations/system-tables/quotas_usage.md) table. + +`ON CLUSTER` clause allows creating quotas on a cluster, see [Distributed DDL](../../../sql-reference/distributed-ddl.md). **Examples** Limit the maximum number of queries for the current user with 123 queries in 15 months constraint: ``` sql -ALTER QUOTA IF EXISTS qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +ALTER QUOTA IF EXISTS qA FOR INTERVAL 15 month MAX queries = 123 TO CURRENT_USER; ``` For the default user limit the maximum execution time with half a second in 30 minutes, and limit the maximum number of queries with 321 and the maximum number of errors with 10 in 5 quaters: ``` sql -ALTER QUOTA IF EXISTS qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +ALTER QUOTA IF EXISTS qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default; ``` diff --git a/docs/ru/sql-reference/statements/alter/quota.md b/docs/ru/sql-reference/statements/alter/quota.md index 1abb6336321..0bdac1381da 100644 --- a/docs/ru/sql-reference/statements/alter/quota.md +++ b/docs/ru/sql-reference/statements/alter/quota.md @@ -12,25 +12,31 @@ toc_title: QUOTA ``` sql ALTER QUOTA [IF EXISTS] name [ON CLUSTER cluster_name] [RENAME TO new_name] - [KEYED BY {USER_NAME | IP_ADDRESS | CLIENT_KEY | CLIENT_KEY, USER_NAME | CLIENT_KEY, IP_ADDRESS} | NOT KEYED] - [FOR [RANDOMIZED] INTERVAL number {SECOND | MINUTE | HOUR | DAY | WEEK | MONTH | QUARTER | YEAR} - {MAX { {QUERIES | ERRORS | RESULT_ROWS | RESULT_BYTES | READ_ROWS | READ_BYTES | EXECUTION_TIME} = number } [,...] | + [KEYED BY {user_name | ip_address | client_key | client_key,user_name | client_key,ip_address} | NOT KEYED] + [FOR [RANDOMIZED] INTERVAL number {second | minute | hour | day | week | month | quarter | year} + {MAX { {queries | errors | result_rows | result_bytes | read_rows | read_bytes | execution_time} = number } [,...] | NO LIMITS | TRACKING ONLY} [,...]] [TO {role [,...] | ALL | ALL EXCEPT role [,...]}] ``` +Ключи `user_name`, `ip_address`, `client_key`, `client_key, user_name` и `client_key, ip_address` соответствуют полям таблицы [system.quotas](../../../operations/system-tables/quotas.md). + +Параметры `queries`, `errors`, `result_rows`, `result_bytes`, `read_rows`, `read_bytes`, `execution_time` соответствуют полям таблицы [system.quotas_usage](../../../operations/system-tables/quotas_usage.md). + +В секции `ON CLUSTER` можно указать кластеры, на которых создается квота, см. [Распределенные DDL запросы](../../../sql-reference/distributed-ddl.md). + **Примеры** Ограничить для текущего пользователя максимальное число запросов — не более 123 запросов за каждые 15 месяцев: ``` sql -ALTER QUOTA IF EXISTS qA FOR INTERVAL 15 MONTH MAX QUERIES 123 TO CURRENT_USER; +ALTER QUOTA IF EXISTS qA FOR INTERVAL 15 month MAX queries = 123 TO CURRENT_USER; ``` Ограничить по умолчанию максимальное время выполнения запроса — не более полсекунды за каждые 30 минут, а также максимальное число запросов — не более 321 и максимальное число ошибок — не более 10 за каждые 5 кварталов: ``` sql -ALTER QUOTA IF EXISTS qB FOR INTERVAL 30 MINUTE MAX EXECUTION_TIME = 0.5, FOR INTERVAL 5 QUATER MAX QUERIES = 321, ERRORS = 10 TO default; +ALTER QUOTA IF EXISTS qB FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321, errors = 10 TO default; ``` [Оригинальная статья](https://clickhouse.tech/docs/ru/sql-reference/alter/quota/) From 8b3e0e5493ff5347ba7d51a71a5ae36ca4ba2d40 Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Thu, 28 Jan 2021 19:15:39 +0300 Subject: [PATCH 47/48] Update 00459_group_array_insert_at.sql --- tests/queries/0_stateless/00459_group_array_insert_at.sql | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/queries/0_stateless/00459_group_array_insert_at.sql b/tests/queries/0_stateless/00459_group_array_insert_at.sql index 8bc329d9103..59ecfc05045 100644 --- a/tests/queries/0_stateless/00459_group_array_insert_at.sql +++ b/tests/queries/0_stateless/00459_group_array_insert_at.sql @@ -1,4 +1,3 @@ --- remove this comment before merge SELECT groupArrayInsertAt(toString(number), number * 2) FROM (SELECT * FROM system.numbers LIMIT 10); SELECT groupArrayInsertAt('-')(toString(number), number * 2) FROM (SELECT * FROM system.numbers LIMIT 10); SELECT groupArrayInsertAt([123])(range(number), number * 2) FROM (SELECT * FROM system.numbers LIMIT 10); From e9b570aceef54b0b169ae60a1984ba98c6c16d5c Mon Sep 17 00:00:00 2001 From: Alexander Kuzmenkov <36882414+akuzm@users.noreply.github.com> Date: Thu, 28 Jan 2021 19:15:56 +0300 Subject: [PATCH 48/48] Update 01014_lazy_database_basic.sh --- tests/queries/0_stateless/01014_lazy_database_basic.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/queries/0_stateless/01014_lazy_database_basic.sh b/tests/queries/0_stateless/01014_lazy_database_basic.sh index 76cbcea6d97..11d698e764e 100755 --- a/tests/queries/0_stateless/01014_lazy_database_basic.sh +++ b/tests/queries/0_stateless/01014_lazy_database_basic.sh @@ -4,8 +4,6 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # shellcheck source=../shell_config.sh . "$CURDIR"/../shell_config.sh -# remove this comment before merge - ${CLICKHOUSE_CLIENT} -n -q "DROP DATABASE IF EXISTS testlazy" ${CLICKHOUSE_CLIENT} -n -q "