This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 2c35abe940 [bugfix]fix core dump on outfile with expr (#10491)
2c35abe940 is described below
commit 2c35abe940ff709f254182312146736a6926ee56
Author: Pxl <[email protected]>
AuthorDate: Wed Jun 29 20:38:49 2022 +0800
[bugfix]fix core dump on outfile with expr (#10491)
remove log
---
be/src/vec/runtime/vfile_result_writer.cpp | 40 +-
be/src/vec/runtime/vfile_result_writer.h | 14 +-
be/src/vec/sink/vresult_file_sink.cpp | 13 +-
be/src/vec/sink/vresult_file_sink.h | 18 +-
regression-test/data/export/test_outfile_expr.out | 1003 ++++++++++++++++++++
regression-test/suites/export/test_outfile.groovy | 2 +-
...est_outfile.groovy => test_outfile_expr.groovy} | 12 +-
7 files changed, 1058 insertions(+), 44 deletions(-)
diff --git a/be/src/vec/runtime/vfile_result_writer.cpp
b/be/src/vec/runtime/vfile_result_writer.cpp
index 30e32d8e7c..912275c974 100644
--- a/be/src/vec/runtime/vfile_result_writer.cpp
+++ b/be/src/vec/runtime/vfile_result_writer.cpp
@@ -18,6 +18,7 @@
#include "vec/runtime/vfile_result_writer.h"
#include "common/consts.h"
+#include "common/status.h"
#include "exprs/expr_context.h"
#include "gutil/strings/numbers.h"
#include "gutil/strings/substitute.h"
@@ -33,22 +34,23 @@
#include "util/mysql_global.h"
#include "util/mysql_row_buffer.h"
#include "vec/core/block.h"
+#include "vec/exprs/vexpr.h"
+#include "vec/exprs/vexpr_context.h"
namespace doris::vectorized {
const size_t VFileResultWriter::OUTSTREAM_BUFFER_SIZE_BYTES = 1024 * 1024;
using doris::operator<<;
-VFileResultWriter::VFileResultWriter(const ResultFileOptions* file_opts,
- const TStorageBackendType::type
storage_type,
- const TUniqueId fragment_instance_id,
- const std::vector<ExprContext*>&
output_expr_ctxs,
- RuntimeProfile* parent_profile,
BufferControlBlock* sinker,
- Block* output_block, bool
output_object_data,
- const RowDescriptor&
output_row_descriptor)
+VFileResultWriter::VFileResultWriter(
+ const ResultFileOptions* file_opts, const TStorageBackendType::type
storage_type,
+ const TUniqueId fragment_instance_id,
+ const std::vector<vectorized::VExprContext*>& output_vexpr_ctxs,
+ RuntimeProfile* parent_profile, BufferControlBlock* sinker, Block*
output_block,
+ bool output_object_data, const RowDescriptor& output_row_descriptor)
: _file_opts(file_opts),
_storage_type(storage_type),
_fragment_instance_id(fragment_instance_id),
- _output_expr_ctxs(output_expr_ctxs),
+ _output_vexpr_ctxs(output_vexpr_ctxs),
_parent_profile(parent_profile),
_sinker(sinker),
_output_block(output_block),
@@ -185,7 +187,16 @@ Status VFileResultWriter::append_block(Block& block) {
if (_parquet_writer != nullptr) {
return Status::NotSupported("Parquet Writer is not supported yet!");
} else {
- RETURN_IF_ERROR(_write_csv_file(block));
+ Status status = Status::OK();
+ // Exec vectorized expr here to speed up, block.rows() == 0 means expr
exec
+ // failed, just return the error status
+ auto output_block =
VExprContext::get_output_block_after_execute_exprs(_output_vexpr_ctxs,
+
block, status);
+ auto num_rows = output_block.rows();
+ if (UNLIKELY(num_rows == 0)) {
+ return status;
+ }
+ RETURN_IF_ERROR(_write_csv_file(output_block));
}
_written_rows += block.rows();
@@ -199,7 +210,7 @@ Status VFileResultWriter::_write_csv_file(const Block&
block) {
if (col.column->is_null_at(i)) {
_plain_text_outstream << NULL_IN_CSV;
} else {
- switch (_output_expr_ctxs[col_id]->root()->type().type) {
+ switch (_output_vexpr_ctxs[col_id]->root()->type().type) {
case TYPE_BOOLEAN:
case TYPE_TINYINT:
_plain_text_outstream << (int)*reinterpret_cast<const
int8_t*>(
@@ -277,8 +288,7 @@ Status VFileResultWriter::_write_csv_file(const Block&
block) {
reinterpret_cast<const
PackedInt128*>(col.column->get_data_at(i).data)
->value);
std::string decimal_str;
- int output_scale =
_output_expr_ctxs[col_id]->root()->output_scale();
- decimal_str = decimal_val.to_string(output_scale);
+ decimal_str = decimal_val.to_string();
_plain_text_outstream << decimal_str;
break;
}
@@ -299,10 +309,10 @@ Status VFileResultWriter::_write_csv_file(const Block&
block) {
}
std::string VFileResultWriter::gen_types() {
- std::string types = "";
- int num_columns = _output_expr_ctxs.size();
+ std::string types;
+ int num_columns = _output_vexpr_ctxs.size();
for (int i = 0; i < num_columns; ++i) {
- types += type_to_string(_output_expr_ctxs[i]->root()->type().type);
+ types += type_to_string(_output_vexpr_ctxs[i]->root()->type().type);
if (i < num_columns - 1) {
types += _file_opts->column_separator;
}
diff --git a/be/src/vec/runtime/vfile_result_writer.h
b/be/src/vec/runtime/vfile_result_writer.h
index abfac874c1..c4066c75a5 100644
--- a/be/src/vec/runtime/vfile_result_writer.h
+++ b/be/src/vec/runtime/vfile_result_writer.h
@@ -30,22 +30,22 @@ public:
VFileResultWriter(const ResultFileOptions* file_option,
const TStorageBackendType::type storage_type,
const TUniqueId fragment_instance_id,
- const std::vector<ExprContext*>& output_expr_ctxs,
+ const std::vector<VExprContext*>& _output_vexpr_ctxs,
RuntimeProfile* parent_profile, BufferControlBlock*
sinker,
Block* output_block, bool output_object_data,
const RowDescriptor& output_row_descriptor);
virtual ~VFileResultWriter() = default;
- virtual Status append_block(Block& block) override;
- virtual Status append_row_batch(const RowBatch* batch) override {
+ Status append_block(Block& block) override;
+ Status append_row_batch(const RowBatch* batch) override {
return Status::NotSupported("append_row_batch is not supported in
VFileResultWriter!");
};
- virtual Status init(RuntimeState* state) override;
- virtual Status close() override;
+ Status init(RuntimeState* state) override;
+ Status close() override;
// file result writer always return statistic result in one row
- virtual int64_t get_written_rows() const override { return 1; }
+ int64_t get_written_rows() const override { return 1; }
std::string gen_types();
Status write_csv_header();
@@ -80,7 +80,7 @@ private:
const ResultFileOptions* _file_opts;
TStorageBackendType::type _storage_type;
TUniqueId _fragment_instance_id;
- const std::vector<ExprContext*>& _output_expr_ctxs;
+ const std::vector<VExprContext*>& _output_vexpr_ctxs;
// If the result file format is plain text, like CSV, this _file_writer is
owned by this FileResultWriter.
// If the result file format is Parquet, this _file_writer is owned by
_parquet_writer.
diff --git a/be/src/vec/sink/vresult_file_sink.cpp
b/be/src/vec/sink/vresult_file_sink.cpp
index b69226bd7e..bc1b987d45 100644
--- a/be/src/vec/sink/vresult_file_sink.cpp
+++ b/be/src/vec/sink/vresult_file_sink.cpp
@@ -83,9 +83,10 @@ Status VResultFileSink::init(const TDataSink& tsink) {
Status VResultFileSink::prepare_exprs(RuntimeState* state) {
// From the thrift expressions create the real exprs.
- RETURN_IF_ERROR(Expr::create_expr_trees(state->obj_pool(), _t_output_expr,
&_output_expr_ctxs));
+ RETURN_IF_ERROR(
+ VExpr::create_expr_trees(state->obj_pool(), _t_output_expr,
&_output_vexpr_ctxs));
// Prepare the exprs to run.
- RETURN_IF_ERROR(Expr::prepare(_output_expr_ctxs, state, _row_desc,
_expr_mem_tracker));
+ RETURN_IF_ERROR(VExpr::prepare(_output_vexpr_ctxs, state, _row_desc,
_expr_mem_tracker));
return Status::OK();
}
@@ -106,7 +107,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
state->fragment_instance_id(), _buf_size, &_sender));
// create writer
_writer.reset(new (std::nothrow) VFileResultWriter(
- _file_opts.get(), _storage_type,
state->fragment_instance_id(), _output_expr_ctxs,
+ _file_opts.get(), _storage_type,
state->fragment_instance_id(), _output_vexpr_ctxs,
_profile, _sender.get(), nullptr,
state->return_object_data_as_binary(),
_output_row_descriptor));
} else {
@@ -121,7 +122,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
// create writer
_output_block.reset(new
Block(_output_row_descriptor.tuple_descriptors()[0]->slots(), 1));
_writer.reset(new (std::nothrow) VFileResultWriter(
- _file_opts.get(), _storage_type,
state->fragment_instance_id(), _output_expr_ctxs,
+ _file_opts.get(), _storage_type,
state->fragment_instance_id(), _output_vexpr_ctxs,
_profile, nullptr, _output_block.get(),
state->return_object_data_as_binary(),
_output_row_descriptor));
}
@@ -134,7 +135,7 @@ Status VResultFileSink::prepare(RuntimeState* state) {
}
Status VResultFileSink::open(RuntimeState* state) {
- return Expr::open(_output_expr_ctxs, state);
+ return VExpr::open(_output_vexpr_ctxs, state);
}
Status VResultFileSink::send(RuntimeState* state, RowBatch* batch) {
@@ -193,7 +194,7 @@ Status VResultFileSink::close(RuntimeState* state, Status
exec_status) {
_output_block->clear();
}
- Expr::close(_output_expr_ctxs, state);
+ VExpr::close(_output_vexpr_ctxs, state);
_closed = true;
return Status::OK();
diff --git a/be/src/vec/sink/vresult_file_sink.h
b/be/src/vec/sink/vresult_file_sink.h
index 89085a71e3..c5c509caf7 100644
--- a/be/src/vec/sink/vresult_file_sink.h
+++ b/be/src/vec/sink/vresult_file_sink.h
@@ -34,18 +34,18 @@ public:
const std::vector<TPlanFragmentDestination>& destinations,
int per_channel_buffer_size, bool
send_query_statistics_with_every_batch,
const std::vector<TExpr>& t_output_expr, DescriptorTbl&
descs);
- virtual ~VResultFileSink() = default;
- virtual Status init(const TDataSink& thrift_sink) override;
- virtual Status prepare(RuntimeState* state) override;
- virtual Status open(RuntimeState* state) override;
+ ~VResultFileSink() override = default;
+ Status init(const TDataSink& thrift_sink) override;
+ Status prepare(RuntimeState* state) override;
+ Status open(RuntimeState* state) override;
// send data in 'batch' to this backend stream mgr
// Blocks until all rows in batch are placed in the buffer
- virtual Status send(RuntimeState* state, RowBatch* batch) override;
- virtual Status send(RuntimeState* state, Block* block) override;
+ Status send(RuntimeState* state, RowBatch* batch) override;
+ Status send(RuntimeState* state, Block* block) override;
// Flush all buffered data and close all existing channels to destination
// hosts. Further send() calls are illegal after calling close().
- virtual Status close(RuntimeState* state, Status exec_status) override;
- virtual RuntimeProfile* profile() override { return _profile; }
+ Status close(RuntimeState* state, Status exec_status) override;
+ RuntimeProfile* profile() override { return _profile; }
void set_query_statistics(std::shared_ptr<QueryStatistics> statistics)
override;
@@ -57,7 +57,7 @@ private:
// Owned by the RuntimeState.
const std::vector<TExpr>& _t_output_expr;
- std::vector<ExprContext*> _output_expr_ctxs;
+ std::vector<vectorized::VExprContext*> _output_vexpr_ctxs;
RowDescriptor _output_row_descriptor;
std::unique_ptr<Block> _output_block = nullptr;
diff --git a/regression-test/data/export/test_outfile_expr.out
b/regression-test/data/export/test_outfile_expr.out
new file mode 100644
index 0000000000..1d92f44ee6
--- /dev/null
+++ b/regression-test/data/export/test_outfile_expr.out
@@ -0,0 +1,1003 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !select_default --
+2 2 char1char1char1char1char1char1char1char1char1char1
+3 4 char2char2char2char2char2char2char2char2char2char2
+4 6 char3char3char3char3char3char3char3char3char3char3
+5 8 char4char4char4char4char4char4char4char4char4char4
+6 10 char5char5char5char5char5char5char5char5char5char5
+7 12 char6char6char6char6char6char6char6char6char6char6
+8 14 char7char7char7char7char7char7char7char7char7char7
+9 16 char8char8char8char8char8char8char8char8char8char8
+10 18 char9char9char9char9char9char9char9char9char9char9
+11 20 char10char10char10char10char10char10char10char10char10char10
+12 22 char11char11char11char11char11char11char11char11char11char11
+13 24 char12char12char12char12char12char12char12char12char12char12
+14 26 char13char13char13char13char13char13char13char13char13char13
+15 28 char14char14char14char14char14char14char14char14char14char14
+16 30 char15char15char15char15char15char15char15char15char15char15
+17 32 char16char16char16char16char16char16char16char16char16char16
+18 34 char17char17char17char17char17char17char17char17char17char17
+19 36 char18char18char18char18char18char18char18char18char18char18
+20 38 char19char19char19char19char19char19char19char19char19char19
+21 40 char20char20char20char20char20char20char20char20char20char20
+22 42 char21char21char21char21char21char21char21char21char21char21
+23 44 char22char22char22char22char22char22char22char22char22char22
+24 46 char23char23char23char23char23char23char23char23char23char23
+25 48 char24char24char24char24char24char24char24char24char24char24
+26 50 char25char25char25char25char25char25char25char25char25char25
+27 52 char26char26char26char26char26char26char26char26char26char26
+28 54 char27char27char27char27char27char27char27char27char27char27
+29 56 char28char28char28char28char28char28char28char28char28char28
+30 58 char29char29char29char29char29char29char29char29char29char29
+31 60 char30char30char30char30char30char30char30char30char30char30
+32 62 char31char31char31char31char31char31char31char31char31char31
+33 64 char32char32char32char32char32char32char32char32char32char32
+34 66 char33char33char33char33char33char33char33char33char33char33
+35 68 char34char34char34char34char34char34char34char34char34char34
+36 70 char35char35char35char35char35char35char35char35char35char35
+37 72 char36char36char36char36char36char36char36char36char36char36
+38 74 char37char37char37char37char37char37char37char37char37char37
+39 76 char38char38char38char38char38char38char38char38char38char38
+40 78 char39char39char39char39char39char39char39char39char39char39
+41 80 char40char40char40char40char40char40char40char40char40char40
+42 82 char41char41char41char41char41char41char41char41char41char41
+43 84 char42char42char42char42char42char42char42char42char42char42
+44 86 char43char43char43char43char43char43char43char43char43char43
+45 88 char44char44char44char44char44char44char44char44char44char44
+46 90 char45char45char45char45char45char45char45char45char45char45
+47 92 char46char46char46char46char46char46char46char46char46char46
+48 94 char47char47char47char47char47char47char47char47char47char47
+49 96 char48char48char48char48char48char48char48char48char48char48
+50 98 char49char49char49char49char49char49char49char49char49char49
+51 100 char50char50char50char50char50char50char50char50char50char50
+52 102 char51char51char51char51char51char51char51char51char51char51
+53 104 char52char52char52char52char52char52char52char52char52char52
+54 106 char53char53char53char53char53char53char53char53char53char53
+55 108 char54char54char54char54char54char54char54char54char54char54
+56 110 char55char55char55char55char55char55char55char55char55char55
+57 112 char56char56char56char56char56char56char56char56char56char56
+58 114 char57char57char57char57char57char57char57char57char57char57
+59 116 char58char58char58char58char58char58char58char58char58char58
+60 118 char59char59char59char59char59char59char59char59char59char59
+61 120 char60char60char60char60char60char60char60char60char60char60
+62 122 char61char61char61char61char61char61char61char61char61char61
+63 124 char62char62char62char62char62char62char62char62char62char62
+64 126 char63char63char63char63char63char63char63char63char63char63
+65 128 char64char64char64char64char64char64char64char64char64char64
+66 130 char65char65char65char65char65char65char65char65char65char65
+67 132 char66char66char66char66char66char66char66char66char66char66
+68 134 char67char67char67char67char67char67char67char67char67char67
+69 136 char68char68char68char68char68char68char68char68char68char68
+70 138 char69char69char69char69char69char69char69char69char69char69
+71 140 char70char70char70char70char70char70char70char70char70char70
+72 142 char71char71char71char71char71char71char71char71char71char71
+73 144 char72char72char72char72char72char72char72char72char72char72
+74 146 char73char73char73char73char73char73char73char73char73char73
+75 148 char74char74char74char74char74char74char74char74char74char74
+76 150 char75char75char75char75char75char75char75char75char75char75
+77 152 char76char76char76char76char76char76char76char76char76char76
+78 154 char77char77char77char77char77char77char77char77char77char77
+79 156 char78char78char78char78char78char78char78char78char78char78
+80 158 char79char79char79char79char79char79char79char79char79char79
+81 160 char80char80char80char80char80char80char80char80char80char80
+82 162 char81char81char81char81char81char81char81char81char81char81
+83 164 char82char82char82char82char82char82char82char82char82char82
+84 166 char83char83char83char83char83char83char83char83char83char83
+85 168 char84char84char84char84char84char84char84char84char84char84
+86 170 char85char85char85char85char85char85char85char85char85char85
+87 172 char86char86char86char86char86char86char86char86char86char86
+88 174 char87char87char87char87char87char87char87char87char87char87
+89 176 char88char88char88char88char88char88char88char88char88char88
+90 178 char89char89char89char89char89char89char89char89char89char89
+91 180 char90char90char90char90char90char90char90char90char90char90
+92 182 char91char91char91char91char91char91char91char91char91char91
+93 184 char92char92char92char92char92char92char92char92char92char92
+94 186 char93char93char93char93char93char93char93char93char93char93
+95 188 char94char94char94char94char94char94char94char94char94char94
+96 190 char95char95char95char95char95char95char95char95char95char95
+97 192 char96char96char96char96char96char96char96char96char96char96
+98 194 char97char97char97char97char97char97char97char97char97char97
+99 196 char98char98char98char98char98char98char98char98char98char98
+100 198 char99char99char99char99char99char99char99char99char99char99
+101 200
char100char100char100char100char100char100char100char100char100char100
+102 202
char101char101char101char101char101char101char101char101char101char101
+103 204
char102char102char102char102char102char102char102char102char102char102
+104 206
char103char103char103char103char103char103char103char103char103char103
+105 208
char104char104char104char104char104char104char104char104char104char104
+106 210
char105char105char105char105char105char105char105char105char105char105
+107 212
char106char106char106char106char106char106char106char106char106char106
+108 214
char107char107char107char107char107char107char107char107char107char107
+109 216
char108char108char108char108char108char108char108char108char108char108
+110 218
char109char109char109char109char109char109char109char109char109char109
+111 220
char110char110char110char110char110char110char110char110char110char110
+112 222
char111char111char111char111char111char111char111char111char111char111
+113 224
char112char112char112char112char112char112char112char112char112char112
+114 226
char113char113char113char113char113char113char113char113char113char113
+115 228
char114char114char114char114char114char114char114char114char114char114
+116 230
char115char115char115char115char115char115char115char115char115char115
+117 232
char116char116char116char116char116char116char116char116char116char116
+118 234
char117char117char117char117char117char117char117char117char117char117
+119 236
char118char118char118char118char118char118char118char118char118char118
+120 238
char119char119char119char119char119char119char119char119char119char119
+121 240
char120char120char120char120char120char120char120char120char120char120
+122 242
char121char121char121char121char121char121char121char121char121char121
+123 244
char122char122char122char122char122char122char122char122char122char122
+124 246
char123char123char123char123char123char123char123char123char123char123
+125 248
char124char124char124char124char124char124char124char124char124char124
+126 250
char125char125char125char125char125char125char125char125char125char125
+127 252
char126char126char126char126char126char126char126char126char126char126
+128 254
char127char127char127char127char127char127char127char127char127char127
+129 128
char128char128char128char128char128char128char128char128char128char128
+130 130
char129char129char129char129char129char129char129char129char129char129
+131 132
char130char130char130char130char130char130char130char130char130char130
+132 134
char131char131char131char131char131char131char131char131char131char131
+133 136
char132char132char132char132char132char132char132char132char132char132
+134 138
char133char133char133char133char133char133char133char133char133char133
+135 140
char134char134char134char134char134char134char134char134char134char134
+136 142
char135char135char135char135char135char135char135char135char135char135
+137 144
char136char136char136char136char136char136char136char136char136char136
+138 146
char137char137char137char137char137char137char137char137char137char137
+139 148
char138char138char138char138char138char138char138char138char138char138
+140 150
char139char139char139char139char139char139char139char139char139char139
+141 152
char140char140char140char140char140char140char140char140char140char140
+142 154
char141char141char141char141char141char141char141char141char141char141
+143 156
char142char142char142char142char142char142char142char142char142char142
+144 158
char143char143char143char143char143char143char143char143char143char143
+145 160
char144char144char144char144char144char144char144char144char144char144
+146 162
char145char145char145char145char145char145char145char145char145char145
+147 164
char146char146char146char146char146char146char146char146char146char146
+148 166
char147char147char147char147char147char147char147char147char147char147
+149 168
char148char148char148char148char148char148char148char148char148char148
+150 170
char149char149char149char149char149char149char149char149char149char149
+151 172
char150char150char150char150char150char150char150char150char150char150
+152 174
char151char151char151char151char151char151char151char151char151char151
+153 176
char152char152char152char152char152char152char152char152char152char152
+154 178
char153char153char153char153char153char153char153char153char153char153
+155 180
char154char154char154char154char154char154char154char154char154char154
+156 182
char155char155char155char155char155char155char155char155char155char155
+157 184
char156char156char156char156char156char156char156char156char156char156
+158 186
char157char157char157char157char157char157char157char157char157char157
+159 188
char158char158char158char158char158char158char158char158char158char158
+160 190
char159char159char159char159char159char159char159char159char159char159
+161 192
char160char160char160char160char160char160char160char160char160char160
+162 194
char161char161char161char161char161char161char161char161char161char161
+163 196
char162char162char162char162char162char162char162char162char162char162
+164 198
char163char163char163char163char163char163char163char163char163char163
+165 200
char164char164char164char164char164char164char164char164char164char164
+166 202
char165char165char165char165char165char165char165char165char165char165
+167 204
char166char166char166char166char166char166char166char166char166char166
+168 206
char167char167char167char167char167char167char167char167char167char167
+169 208
char168char168char168char168char168char168char168char168char168char168
+170 210
char169char169char169char169char169char169char169char169char169char169
+171 212
char170char170char170char170char170char170char170char170char170char170
+172 214
char171char171char171char171char171char171char171char171char171char171
+173 216
char172char172char172char172char172char172char172char172char172char172
+174 218
char173char173char173char173char173char173char173char173char173char173
+175 220
char174char174char174char174char174char174char174char174char174char174
+176 222
char175char175char175char175char175char175char175char175char175char175
+177 224
char176char176char176char176char176char176char176char176char176char176
+178 226
char177char177char177char177char177char177char177char177char177char177
+179 228
char178char178char178char178char178char178char178char178char178char178
+180 230
char179char179char179char179char179char179char179char179char179char179
+181 232
char180char180char180char180char180char180char180char180char180char180
+182 234
char181char181char181char181char181char181char181char181char181char181
+183 236
char182char182char182char182char182char182char182char182char182char182
+184 238
char183char183char183char183char183char183char183char183char183char183
+185 240
char184char184char184char184char184char184char184char184char184char184
+186 242
char185char185char185char185char185char185char185char185char185char185
+187 244
char186char186char186char186char186char186char186char186char186char186
+188 246
char187char187char187char187char187char187char187char187char187char187
+189 248
char188char188char188char188char188char188char188char188char188char188
+190 250
char189char189char189char189char189char189char189char189char189char189
+191 252
char190char190char190char190char190char190char190char190char190char190
+192 254
char191char191char191char191char191char191char191char191char191char191
+193 256
char192char192char192char192char192char192char192char192char192char192
+194 258
char193char193char193char193char193char193char193char193char193char193
+195 260
char194char194char194char194char194char194char194char194char194char194
+196 262
char195char195char195char195char195char195char195char195char195char195
+197 264
char196char196char196char196char196char196char196char196char196char196
+198 266
char197char197char197char197char197char197char197char197char197char197
+199 268
char198char198char198char198char198char198char198char198char198char198
+200 270
char199char199char199char199char199char199char199char199char199char199
+201 272
char200char200char200char200char200char200char200char200char200char200
+202 274
char201char201char201char201char201char201char201char201char201char201
+203 276
char202char202char202char202char202char202char202char202char202char202
+204 278
char203char203char203char203char203char203char203char203char203char203
+205 280
char204char204char204char204char204char204char204char204char204char204
+206 282
char205char205char205char205char205char205char205char205char205char205
+207 284
char206char206char206char206char206char206char206char206char206char206
+208 286
char207char207char207char207char207char207char207char207char207char207
+209 288
char208char208char208char208char208char208char208char208char208char208
+210 290
char209char209char209char209char209char209char209char209char209char209
+211 292
char210char210char210char210char210char210char210char210char210char210
+212 294
char211char211char211char211char211char211char211char211char211char211
+213 296
char212char212char212char212char212char212char212char212char212char212
+214 298
char213char213char213char213char213char213char213char213char213char213
+215 300
char214char214char214char214char214char214char214char214char214char214
+216 302
char215char215char215char215char215char215char215char215char215char215
+217 304
char216char216char216char216char216char216char216char216char216char216
+218 306
char217char217char217char217char217char217char217char217char217char217
+219 308
char218char218char218char218char218char218char218char218char218char218
+220 310
char219char219char219char219char219char219char219char219char219char219
+221 312
char220char220char220char220char220char220char220char220char220char220
+222 314
char221char221char221char221char221char221char221char221char221char221
+223 316
char222char222char222char222char222char222char222char222char222char222
+224 318
char223char223char223char223char223char223char223char223char223char223
+225 320
char224char224char224char224char224char224char224char224char224char224
+226 322
char225char225char225char225char225char225char225char225char225char225
+227 324
char226char226char226char226char226char226char226char226char226char226
+228 326
char227char227char227char227char227char227char227char227char227char227
+229 328
char228char228char228char228char228char228char228char228char228char228
+230 330
char229char229char229char229char229char229char229char229char229char229
+231 332
char230char230char230char230char230char230char230char230char230char230
+232 334
char231char231char231char231char231char231char231char231char231char231
+233 336
char232char232char232char232char232char232char232char232char232char232
+234 338
char233char233char233char233char233char233char233char233char233char233
+235 340
char234char234char234char234char234char234char234char234char234char234
+236 342
char235char235char235char235char235char235char235char235char235char235
+237 344
char236char236char236char236char236char236char236char236char236char236
+238 346
char237char237char237char237char237char237char237char237char237char237
+239 348
char238char238char238char238char238char238char238char238char238char238
+240 350
char239char239char239char239char239char239char239char239char239char239
+241 352
char240char240char240char240char240char240char240char240char240char240
+242 354
char241char241char241char241char241char241char241char241char241char241
+243 356
char242char242char242char242char242char242char242char242char242char242
+244 358
char243char243char243char243char243char243char243char243char243char243
+245 360
char244char244char244char244char244char244char244char244char244char244
+246 362
char245char245char245char245char245char245char245char245char245char245
+247 364
char246char246char246char246char246char246char246char246char246char246
+248 366
char247char247char247char247char247char247char247char247char247char247
+249 368
char248char248char248char248char248char248char248char248char248char248
+250 370
char249char249char249char249char249char249char249char249char249char249
+251 372
char250char250char250char250char250char250char250char250char250char250
+252 374
char251char251char251char251char251char251char251char251char251char251
+253 376
char252char252char252char252char252char252char252char252char252char252
+254 378
char253char253char253char253char253char253char253char253char253char253
+255 380
char254char254char254char254char254char254char254char254char254char254
+256 382
char255char255char255char255char255char255char255char255char255char255
+257 256
char256char256char256char256char256char256char256char256char256char256
+258 258
char257char257char257char257char257char257char257char257char257char257
+259 260
char258char258char258char258char258char258char258char258char258char258
+260 262
char259char259char259char259char259char259char259char259char259char259
+261 264
char260char260char260char260char260char260char260char260char260char260
+262 266
char261char261char261char261char261char261char261char261char261char261
+263 268
char262char262char262char262char262char262char262char262char262char262
+264 270
char263char263char263char263char263char263char263char263char263char263
+265 272
char264char264char264char264char264char264char264char264char264char264
+266 274
char265char265char265char265char265char265char265char265char265char265
+267 276
char266char266char266char266char266char266char266char266char266char266
+268 278
char267char267char267char267char267char267char267char267char267char267
+269 280
char268char268char268char268char268char268char268char268char268char268
+270 282
char269char269char269char269char269char269char269char269char269char269
+271 284
char270char270char270char270char270char270char270char270char270char270
+272 286
char271char271char271char271char271char271char271char271char271char271
+273 288
char272char272char272char272char272char272char272char272char272char272
+274 290
char273char273char273char273char273char273char273char273char273char273
+275 292
char274char274char274char274char274char274char274char274char274char274
+276 294
char275char275char275char275char275char275char275char275char275char275
+277 296
char276char276char276char276char276char276char276char276char276char276
+278 298
char277char277char277char277char277char277char277char277char277char277
+279 300
char278char278char278char278char278char278char278char278char278char278
+280 302
char279char279char279char279char279char279char279char279char279char279
+281 304
char280char280char280char280char280char280char280char280char280char280
+282 306
char281char281char281char281char281char281char281char281char281char281
+283 308
char282char282char282char282char282char282char282char282char282char282
+284 310
char283char283char283char283char283char283char283char283char283char283
+285 312
char284char284char284char284char284char284char284char284char284char284
+286 314
char285char285char285char285char285char285char285char285char285char285
+287 316
char286char286char286char286char286char286char286char286char286char286
+288 318
char287char287char287char287char287char287char287char287char287char287
+289 320
char288char288char288char288char288char288char288char288char288char288
+290 322
char289char289char289char289char289char289char289char289char289char289
+291 324
char290char290char290char290char290char290char290char290char290char290
+292 326
char291char291char291char291char291char291char291char291char291char291
+293 328
char292char292char292char292char292char292char292char292char292char292
+294 330
char293char293char293char293char293char293char293char293char293char293
+295 332
char294char294char294char294char294char294char294char294char294char294
+296 334
char295char295char295char295char295char295char295char295char295char295
+297 336
char296char296char296char296char296char296char296char296char296char296
+298 338
char297char297char297char297char297char297char297char297char297char297
+299 340
char298char298char298char298char298char298char298char298char298char298
+300 342
char299char299char299char299char299char299char299char299char299char299
+301 344
char300char300char300char300char300char300char300char300char300char300
+302 346
char301char301char301char301char301char301char301char301char301char301
+303 348
char302char302char302char302char302char302char302char302char302char302
+304 350
char303char303char303char303char303char303char303char303char303char303
+305 352
char304char304char304char304char304char304char304char304char304char304
+306 354
char305char305char305char305char305char305char305char305char305char305
+307 356
char306char306char306char306char306char306char306char306char306char306
+308 358
char307char307char307char307char307char307char307char307char307char307
+309 360
char308char308char308char308char308char308char308char308char308char308
+310 362
char309char309char309char309char309char309char309char309char309char309
+311 364
char310char310char310char310char310char310char310char310char310char310
+312 366
char311char311char311char311char311char311char311char311char311char311
+313 368
char312char312char312char312char312char312char312char312char312char312
+314 370
char313char313char313char313char313char313char313char313char313char313
+315 372
char314char314char314char314char314char314char314char314char314char314
+316 374
char315char315char315char315char315char315char315char315char315char315
+317 376
char316char316char316char316char316char316char316char316char316char316
+318 378
char317char317char317char317char317char317char317char317char317char317
+319 380
char318char318char318char318char318char318char318char318char318char318
+320 382
char319char319char319char319char319char319char319char319char319char319
+321 384
char320char320char320char320char320char320char320char320char320char320
+322 386
char321char321char321char321char321char321char321char321char321char321
+323 388
char322char322char322char322char322char322char322char322char322char322
+324 390
char323char323char323char323char323char323char323char323char323char323
+325 392
char324char324char324char324char324char324char324char324char324char324
+326 394
char325char325char325char325char325char325char325char325char325char325
+327 396
char326char326char326char326char326char326char326char326char326char326
+328 398
char327char327char327char327char327char327char327char327char327char327
+329 400
char328char328char328char328char328char328char328char328char328char328
+330 402
char329char329char329char329char329char329char329char329char329char329
+331 404
char330char330char330char330char330char330char330char330char330char330
+332 406
char331char331char331char331char331char331char331char331char331char331
+333 408
char332char332char332char332char332char332char332char332char332char332
+334 410
char333char333char333char333char333char333char333char333char333char333
+335 412
char334char334char334char334char334char334char334char334char334char334
+336 414
char335char335char335char335char335char335char335char335char335char335
+337 416
char336char336char336char336char336char336char336char336char336char336
+338 418
char337char337char337char337char337char337char337char337char337char337
+339 420
char338char338char338char338char338char338char338char338char338char338
+340 422
char339char339char339char339char339char339char339char339char339char339
+341 424
char340char340char340char340char340char340char340char340char340char340
+342 426
char341char341char341char341char341char341char341char341char341char341
+343 428
char342char342char342char342char342char342char342char342char342char342
+344 430
char343char343char343char343char343char343char343char343char343char343
+345 432
char344char344char344char344char344char344char344char344char344char344
+346 434
char345char345char345char345char345char345char345char345char345char345
+347 436
char346char346char346char346char346char346char346char346char346char346
+348 438
char347char347char347char347char347char347char347char347char347char347
+349 440
char348char348char348char348char348char348char348char348char348char348
+350 442
char349char349char349char349char349char349char349char349char349char349
+351 444
char350char350char350char350char350char350char350char350char350char350
+352 446
char351char351char351char351char351char351char351char351char351char351
+353 448
char352char352char352char352char352char352char352char352char352char352
+354 450
char353char353char353char353char353char353char353char353char353char353
+355 452
char354char354char354char354char354char354char354char354char354char354
+356 454
char355char355char355char355char355char355char355char355char355char355
+357 456
char356char356char356char356char356char356char356char356char356char356
+358 458
char357char357char357char357char357char357char357char357char357char357
+359 460
char358char358char358char358char358char358char358char358char358char358
+360 462
char359char359char359char359char359char359char359char359char359char359
+361 464
char360char360char360char360char360char360char360char360char360char360
+362 466
char361char361char361char361char361char361char361char361char361char361
+363 468
char362char362char362char362char362char362char362char362char362char362
+364 470
char363char363char363char363char363char363char363char363char363char363
+365 472
char364char364char364char364char364char364char364char364char364char364
+366 474
char365char365char365char365char365char365char365char365char365char365
+367 476
char366char366char366char366char366char366char366char366char366char366
+368 478
char367char367char367char367char367char367char367char367char367char367
+369 480
char368char368char368char368char368char368char368char368char368char368
+370 482
char369char369char369char369char369char369char369char369char369char369
+371 484
char370char370char370char370char370char370char370char370char370char370
+372 486
char371char371char371char371char371char371char371char371char371char371
+373 488
char372char372char372char372char372char372char372char372char372char372
+374 490
char373char373char373char373char373char373char373char373char373char373
+375 492
char374char374char374char374char374char374char374char374char374char374
+376 494
char375char375char375char375char375char375char375char375char375char375
+377 496
char376char376char376char376char376char376char376char376char376char376
+378 498
char377char377char377char377char377char377char377char377char377char377
+379 500
char378char378char378char378char378char378char378char378char378char378
+380 502
char379char379char379char379char379char379char379char379char379char379
+381 504
char380char380char380char380char380char380char380char380char380char380
+382 506
char381char381char381char381char381char381char381char381char381char381
+383 508
char382char382char382char382char382char382char382char382char382char382
+384 510
char383char383char383char383char383char383char383char383char383char383
+385 384
char384char384char384char384char384char384char384char384char384char384
+386 386
char385char385char385char385char385char385char385char385char385char385
+387 388
char386char386char386char386char386char386char386char386char386char386
+388 390
char387char387char387char387char387char387char387char387char387char387
+389 392
char388char388char388char388char388char388char388char388char388char388
+390 394
char389char389char389char389char389char389char389char389char389char389
+391 396
char390char390char390char390char390char390char390char390char390char390
+392 398
char391char391char391char391char391char391char391char391char391char391
+393 400
char392char392char392char392char392char392char392char392char392char392
+394 402
char393char393char393char393char393char393char393char393char393char393
+395 404
char394char394char394char394char394char394char394char394char394char394
+396 406
char395char395char395char395char395char395char395char395char395char395
+397 408
char396char396char396char396char396char396char396char396char396char396
+398 410
char397char397char397char397char397char397char397char397char397char397
+399 412
char398char398char398char398char398char398char398char398char398char398
+400 414
char399char399char399char399char399char399char399char399char399char399
+401 416
char400char400char400char400char400char400char400char400char400char400
+402 418
char401char401char401char401char401char401char401char401char401char401
+403 420
char402char402char402char402char402char402char402char402char402char402
+404 422
char403char403char403char403char403char403char403char403char403char403
+405 424
char404char404char404char404char404char404char404char404char404char404
+406 426
char405char405char405char405char405char405char405char405char405char405
+407 428
char406char406char406char406char406char406char406char406char406char406
+408 430
char407char407char407char407char407char407char407char407char407char407
+409 432
char408char408char408char408char408char408char408char408char408char408
+410 434
char409char409char409char409char409char409char409char409char409char409
+411 436
char410char410char410char410char410char410char410char410char410char410
+412 438
char411char411char411char411char411char411char411char411char411char411
+413 440
char412char412char412char412char412char412char412char412char412char412
+414 442
char413char413char413char413char413char413char413char413char413char413
+415 444
char414char414char414char414char414char414char414char414char414char414
+416 446
char415char415char415char415char415char415char415char415char415char415
+417 448
char416char416char416char416char416char416char416char416char416char416
+418 450
char417char417char417char417char417char417char417char417char417char417
+419 452
char418char418char418char418char418char418char418char418char418char418
+420 454
char419char419char419char419char419char419char419char419char419char419
+421 456
char420char420char420char420char420char420char420char420char420char420
+422 458
char421char421char421char421char421char421char421char421char421char421
+423 460
char422char422char422char422char422char422char422char422char422char422
+424 462
char423char423char423char423char423char423char423char423char423char423
+425 464
char424char424char424char424char424char424char424char424char424char424
+426 466
char425char425char425char425char425char425char425char425char425char425
+427 468
char426char426char426char426char426char426char426char426char426char426
+428 470
char427char427char427char427char427char427char427char427char427char427
+429 472
char428char428char428char428char428char428char428char428char428char428
+430 474
char429char429char429char429char429char429char429char429char429char429
+431 476
char430char430char430char430char430char430char430char430char430char430
+432 478
char431char431char431char431char431char431char431char431char431char431
+433 480
char432char432char432char432char432char432char432char432char432char432
+434 482
char433char433char433char433char433char433char433char433char433char433
+435 484
char434char434char434char434char434char434char434char434char434char434
+436 486
char435char435char435char435char435char435char435char435char435char435
+437 488
char436char436char436char436char436char436char436char436char436char436
+438 490
char437char437char437char437char437char437char437char437char437char437
+439 492
char438char438char438char438char438char438char438char438char438char438
+440 494
char439char439char439char439char439char439char439char439char439char439
+441 496
char440char440char440char440char440char440char440char440char440char440
+442 498
char441char441char441char441char441char441char441char441char441char441
+443 500
char442char442char442char442char442char442char442char442char442char442
+444 502
char443char443char443char443char443char443char443char443char443char443
+445 504
char444char444char444char444char444char444char444char444char444char444
+446 506
char445char445char445char445char445char445char445char445char445char445
+447 508
char446char446char446char446char446char446char446char446char446char446
+448 510
char447char447char447char447char447char447char447char447char447char447
+449 512
char448char448char448char448char448char448char448char448char448char448
+450 514
char449char449char449char449char449char449char449char449char449char449
+451 516
char450char450char450char450char450char450char450char450char450char450
+452 518
char451char451char451char451char451char451char451char451char451char451
+453 520
char452char452char452char452char452char452char452char452char452char452
+454 522
char453char453char453char453char453char453char453char453char453char453
+455 524
char454char454char454char454char454char454char454char454char454char454
+456 526
char455char455char455char455char455char455char455char455char455char455
+457 528
char456char456char456char456char456char456char456char456char456char456
+458 530
char457char457char457char457char457char457char457char457char457char457
+459 532
char458char458char458char458char458char458char458char458char458char458
+460 534
char459char459char459char459char459char459char459char459char459char459
+461 536
char460char460char460char460char460char460char460char460char460char460
+462 538
char461char461char461char461char461char461char461char461char461char461
+463 540
char462char462char462char462char462char462char462char462char462char462
+464 542
char463char463char463char463char463char463char463char463char463char463
+465 544
char464char464char464char464char464char464char464char464char464char464
+466 546
char465char465char465char465char465char465char465char465char465char465
+467 548
char466char466char466char466char466char466char466char466char466char466
+468 550
char467char467char467char467char467char467char467char467char467char467
+469 552
char468char468char468char468char468char468char468char468char468char468
+470 554
char469char469char469char469char469char469char469char469char469char469
+471 556
char470char470char470char470char470char470char470char470char470char470
+472 558
char471char471char471char471char471char471char471char471char471char471
+473 560
char472char472char472char472char472char472char472char472char472char472
+474 562
char473char473char473char473char473char473char473char473char473char473
+475 564
char474char474char474char474char474char474char474char474char474char474
+476 566
char475char475char475char475char475char475char475char475char475char475
+477 568
char476char476char476char476char476char476char476char476char476char476
+478 570
char477char477char477char477char477char477char477char477char477char477
+479 572
char478char478char478char478char478char478char478char478char478char478
+480 574
char479char479char479char479char479char479char479char479char479char479
+481 576
char480char480char480char480char480char480char480char480char480char480
+482 578
char481char481char481char481char481char481char481char481char481char481
+483 580
char482char482char482char482char482char482char482char482char482char482
+484 582
char483char483char483char483char483char483char483char483char483char483
+485 584
char484char484char484char484char484char484char484char484char484char484
+486 586
char485char485char485char485char485char485char485char485char485char485
+487 588
char486char486char486char486char486char486char486char486char486char486
+488 590
char487char487char487char487char487char487char487char487char487char487
+489 592
char488char488char488char488char488char488char488char488char488char488
+490 594
char489char489char489char489char489char489char489char489char489char489
+491 596
char490char490char490char490char490char490char490char490char490char490
+492 598
char491char491char491char491char491char491char491char491char491char491
+493 600
char492char492char492char492char492char492char492char492char492char492
+494 602
char493char493char493char493char493char493char493char493char493char493
+495 604
char494char494char494char494char494char494char494char494char494char494
+496 606
char495char495char495char495char495char495char495char495char495char495
+497 608
char496char496char496char496char496char496char496char496char496char496
+498 610
char497char497char497char497char497char497char497char497char497char497
+499 612
char498char498char498char498char498char498char498char498char498char498
+500 614
char499char499char499char499char499char499char499char499char499char499
+501 616
char500char500char500char500char500char500char500char500char500char500
+502 618
char501char501char501char501char501char501char501char501char501char501
+503 620
char502char502char502char502char502char502char502char502char502char502
+504 622
char503char503char503char503char503char503char503char503char503char503
+505 624
char504char504char504char504char504char504char504char504char504char504
+506 626
char505char505char505char505char505char505char505char505char505char505
+507 628
char506char506char506char506char506char506char506char506char506char506
+508 630
char507char507char507char507char507char507char507char507char507char507
+509 632
char508char508char508char508char508char508char508char508char508char508
+510 634
char509char509char509char509char509char509char509char509char509char509
+511 636
char510char510char510char510char510char510char510char510char510char510
+512 638
char511char511char511char511char511char511char511char511char511char511
+513 512
char512char512char512char512char512char512char512char512char512char512
+514 514
char513char513char513char513char513char513char513char513char513char513
+515 516
char514char514char514char514char514char514char514char514char514char514
+516 518
char515char515char515char515char515char515char515char515char515char515
+517 520
char516char516char516char516char516char516char516char516char516char516
+518 522
char517char517char517char517char517char517char517char517char517char517
+519 524
char518char518char518char518char518char518char518char518char518char518
+520 526
char519char519char519char519char519char519char519char519char519char519
+521 528
char520char520char520char520char520char520char520char520char520char520
+522 530
char521char521char521char521char521char521char521char521char521char521
+523 532
char522char522char522char522char522char522char522char522char522char522
+524 534
char523char523char523char523char523char523char523char523char523char523
+525 536
char524char524char524char524char524char524char524char524char524char524
+526 538
char525char525char525char525char525char525char525char525char525char525
+527 540
char526char526char526char526char526char526char526char526char526char526
+528 542
char527char527char527char527char527char527char527char527char527char527
+529 544
char528char528char528char528char528char528char528char528char528char528
+530 546
char529char529char529char529char529char529char529char529char529char529
+531 548
char530char530char530char530char530char530char530char530char530char530
+532 550
char531char531char531char531char531char531char531char531char531char531
+533 552
char532char532char532char532char532char532char532char532char532char532
+534 554
char533char533char533char533char533char533char533char533char533char533
+535 556
char534char534char534char534char534char534char534char534char534char534
+536 558
char535char535char535char535char535char535char535char535char535char535
+537 560
char536char536char536char536char536char536char536char536char536char536
+538 562
char537char537char537char537char537char537char537char537char537char537
+539 564
char538char538char538char538char538char538char538char538char538char538
+540 566
char539char539char539char539char539char539char539char539char539char539
+541 568
char540char540char540char540char540char540char540char540char540char540
+542 570
char541char541char541char541char541char541char541char541char541char541
+543 572
char542char542char542char542char542char542char542char542char542char542
+544 574
char543char543char543char543char543char543char543char543char543char543
+545 576
char544char544char544char544char544char544char544char544char544char544
+546 578
char545char545char545char545char545char545char545char545char545char545
+547 580
char546char546char546char546char546char546char546char546char546char546
+548 582
char547char547char547char547char547char547char547char547char547char547
+549 584
char548char548char548char548char548char548char548char548char548char548
+550 586
char549char549char549char549char549char549char549char549char549char549
+551 588
char550char550char550char550char550char550char550char550char550char550
+552 590
char551char551char551char551char551char551char551char551char551char551
+553 592
char552char552char552char552char552char552char552char552char552char552
+554 594
char553char553char553char553char553char553char553char553char553char553
+555 596
char554char554char554char554char554char554char554char554char554char554
+556 598
char555char555char555char555char555char555char555char555char555char555
+557 600
char556char556char556char556char556char556char556char556char556char556
+558 602
char557char557char557char557char557char557char557char557char557char557
+559 604
char558char558char558char558char558char558char558char558char558char558
+560 606
char559char559char559char559char559char559char559char559char559char559
+561 608
char560char560char560char560char560char560char560char560char560char560
+562 610
char561char561char561char561char561char561char561char561char561char561
+563 612
char562char562char562char562char562char562char562char562char562char562
+564 614
char563char563char563char563char563char563char563char563char563char563
+565 616
char564char564char564char564char564char564char564char564char564char564
+566 618
char565char565char565char565char565char565char565char565char565char565
+567 620
char566char566char566char566char566char566char566char566char566char566
+568 622
char567char567char567char567char567char567char567char567char567char567
+569 624
char568char568char568char568char568char568char568char568char568char568
+570 626
char569char569char569char569char569char569char569char569char569char569
+571 628
char570char570char570char570char570char570char570char570char570char570
+572 630
char571char571char571char571char571char571char571char571char571char571
+573 632
char572char572char572char572char572char572char572char572char572char572
+574 634
char573char573char573char573char573char573char573char573char573char573
+575 636
char574char574char574char574char574char574char574char574char574char574
+576 638
char575char575char575char575char575char575char575char575char575char575
+577 640
char576char576char576char576char576char576char576char576char576char576
+578 642
char577char577char577char577char577char577char577char577char577char577
+579 644
char578char578char578char578char578char578char578char578char578char578
+580 646
char579char579char579char579char579char579char579char579char579char579
+581 648
char580char580char580char580char580char580char580char580char580char580
+582 650
char581char581char581char581char581char581char581char581char581char581
+583 652
char582char582char582char582char582char582char582char582char582char582
+584 654
char583char583char583char583char583char583char583char583char583char583
+585 656
char584char584char584char584char584char584char584char584char584char584
+586 658
char585char585char585char585char585char585char585char585char585char585
+587 660
char586char586char586char586char586char586char586char586char586char586
+588 662
char587char587char587char587char587char587char587char587char587char587
+589 664
char588char588char588char588char588char588char588char588char588char588
+590 666
char589char589char589char589char589char589char589char589char589char589
+591 668
char590char590char590char590char590char590char590char590char590char590
+592 670
char591char591char591char591char591char591char591char591char591char591
+593 672
char592char592char592char592char592char592char592char592char592char592
+594 674
char593char593char593char593char593char593char593char593char593char593
+595 676
char594char594char594char594char594char594char594char594char594char594
+596 678
char595char595char595char595char595char595char595char595char595char595
+597 680
char596char596char596char596char596char596char596char596char596char596
+598 682
char597char597char597char597char597char597char597char597char597char597
+599 684
char598char598char598char598char598char598char598char598char598char598
+600 686
char599char599char599char599char599char599char599char599char599char599
+601 688
char600char600char600char600char600char600char600char600char600char600
+602 690
char601char601char601char601char601char601char601char601char601char601
+603 692
char602char602char602char602char602char602char602char602char602char602
+604 694
char603char603char603char603char603char603char603char603char603char603
+605 696
char604char604char604char604char604char604char604char604char604char604
+606 698
char605char605char605char605char605char605char605char605char605char605
+607 700
char606char606char606char606char606char606char606char606char606char606
+608 702
char607char607char607char607char607char607char607char607char607char607
+609 704
char608char608char608char608char608char608char608char608char608char608
+610 706
char609char609char609char609char609char609char609char609char609char609
+611 708
char610char610char610char610char610char610char610char610char610char610
+612 710
char611char611char611char611char611char611char611char611char611char611
+613 712
char612char612char612char612char612char612char612char612char612char612
+614 714
char613char613char613char613char613char613char613char613char613char613
+615 716
char614char614char614char614char614char614char614char614char614char614
+616 718
char615char615char615char615char615char615char615char615char615char615
+617 720
char616char616char616char616char616char616char616char616char616char616
+618 722
char617char617char617char617char617char617char617char617char617char617
+619 724
char618char618char618char618char618char618char618char618char618char618
+620 726
char619char619char619char619char619char619char619char619char619char619
+621 728
char620char620char620char620char620char620char620char620char620char620
+622 730
char621char621char621char621char621char621char621char621char621char621
+623 732
char622char622char622char622char622char622char622char622char622char622
+624 734
char623char623char623char623char623char623char623char623char623char623
+625 736
char624char624char624char624char624char624char624char624char624char624
+626 738
char625char625char625char625char625char625char625char625char625char625
+627 740
char626char626char626char626char626char626char626char626char626char626
+628 742
char627char627char627char627char627char627char627char627char627char627
+629 744
char628char628char628char628char628char628char628char628char628char628
+630 746
char629char629char629char629char629char629char629char629char629char629
+631 748
char630char630char630char630char630char630char630char630char630char630
+632 750
char631char631char631char631char631char631char631char631char631char631
+633 752
char632char632char632char632char632char632char632char632char632char632
+634 754
char633char633char633char633char633char633char633char633char633char633
+635 756
char634char634char634char634char634char634char634char634char634char634
+636 758
char635char635char635char635char635char635char635char635char635char635
+637 760
char636char636char636char636char636char636char636char636char636char636
+638 762
char637char637char637char637char637char637char637char637char637char637
+639 764
char638char638char638char638char638char638char638char638char638char638
+640 766
char639char639char639char639char639char639char639char639char639char639
+641 640
char640char640char640char640char640char640char640char640char640char640
+642 642
char641char641char641char641char641char641char641char641char641char641
+643 644
char642char642char642char642char642char642char642char642char642char642
+644 646
char643char643char643char643char643char643char643char643char643char643
+645 648
char644char644char644char644char644char644char644char644char644char644
+646 650
char645char645char645char645char645char645char645char645char645char645
+647 652
char646char646char646char646char646char646char646char646char646char646
+648 654
char647char647char647char647char647char647char647char647char647char647
+649 656
char648char648char648char648char648char648char648char648char648char648
+650 658
char649char649char649char649char649char649char649char649char649char649
+651 660
char650char650char650char650char650char650char650char650char650char650
+652 662
char651char651char651char651char651char651char651char651char651char651
+653 664
char652char652char652char652char652char652char652char652char652char652
+654 666
char653char653char653char653char653char653char653char653char653char653
+655 668
char654char654char654char654char654char654char654char654char654char654
+656 670
char655char655char655char655char655char655char655char655char655char655
+657 672
char656char656char656char656char656char656char656char656char656char656
+658 674
char657char657char657char657char657char657char657char657char657char657
+659 676
char658char658char658char658char658char658char658char658char658char658
+660 678
char659char659char659char659char659char659char659char659char659char659
+661 680
char660char660char660char660char660char660char660char660char660char660
+662 682
char661char661char661char661char661char661char661char661char661char661
+663 684
char662char662char662char662char662char662char662char662char662char662
+664 686
char663char663char663char663char663char663char663char663char663char663
+665 688
char664char664char664char664char664char664char664char664char664char664
+666 690
char665char665char665char665char665char665char665char665char665char665
+667 692
char666char666char666char666char666char666char666char666char666char666
+668 694
char667char667char667char667char667char667char667char667char667char667
+669 696
char668char668char668char668char668char668char668char668char668char668
+670 698
char669char669char669char669char669char669char669char669char669char669
+671 700
char670char670char670char670char670char670char670char670char670char670
+672 702
char671char671char671char671char671char671char671char671char671char671
+673 704
char672char672char672char672char672char672char672char672char672char672
+674 706
char673char673char673char673char673char673char673char673char673char673
+675 708
char674char674char674char674char674char674char674char674char674char674
+676 710
char675char675char675char675char675char675char675char675char675char675
+677 712
char676char676char676char676char676char676char676char676char676char676
+678 714
char677char677char677char677char677char677char677char677char677char677
+679 716
char678char678char678char678char678char678char678char678char678char678
+680 718
char679char679char679char679char679char679char679char679char679char679
+681 720
char680char680char680char680char680char680char680char680char680char680
+682 722
char681char681char681char681char681char681char681char681char681char681
+683 724
char682char682char682char682char682char682char682char682char682char682
+684 726
char683char683char683char683char683char683char683char683char683char683
+685 728
char684char684char684char684char684char684char684char684char684char684
+686 730
char685char685char685char685char685char685char685char685char685char685
+687 732
char686char686char686char686char686char686char686char686char686char686
+688 734
char687char687char687char687char687char687char687char687char687char687
+689 736
char688char688char688char688char688char688char688char688char688char688
+690 738
char689char689char689char689char689char689char689char689char689char689
+691 740
char690char690char690char690char690char690char690char690char690char690
+692 742
char691char691char691char691char691char691char691char691char691char691
+693 744
char692char692char692char692char692char692char692char692char692char692
+694 746
char693char693char693char693char693char693char693char693char693char693
+695 748
char694char694char694char694char694char694char694char694char694char694
+696 750
char695char695char695char695char695char695char695char695char695char695
+697 752
char696char696char696char696char696char696char696char696char696char696
+698 754
char697char697char697char697char697char697char697char697char697char697
+699 756
char698char698char698char698char698char698char698char698char698char698
+700 758
char699char699char699char699char699char699char699char699char699char699
+701 760
char700char700char700char700char700char700char700char700char700char700
+702 762
char701char701char701char701char701char701char701char701char701char701
+703 764
char702char702char702char702char702char702char702char702char702char702
+704 766
char703char703char703char703char703char703char703char703char703char703
+705 768
char704char704char704char704char704char704char704char704char704char704
+706 770
char705char705char705char705char705char705char705char705char705char705
+707 772
char706char706char706char706char706char706char706char706char706char706
+708 774
char707char707char707char707char707char707char707char707char707char707
+709 776
char708char708char708char708char708char708char708char708char708char708
+710 778
char709char709char709char709char709char709char709char709char709char709
+711 780
char710char710char710char710char710char710char710char710char710char710
+712 782
char711char711char711char711char711char711char711char711char711char711
+713 784
char712char712char712char712char712char712char712char712char712char712
+714 786
char713char713char713char713char713char713char713char713char713char713
+715 788
char714char714char714char714char714char714char714char714char714char714
+716 790
char715char715char715char715char715char715char715char715char715char715
+717 792
char716char716char716char716char716char716char716char716char716char716
+718 794
char717char717char717char717char717char717char717char717char717char717
+719 796
char718char718char718char718char718char718char718char718char718char718
+720 798
char719char719char719char719char719char719char719char719char719char719
+721 800
char720char720char720char720char720char720char720char720char720char720
+722 802
char721char721char721char721char721char721char721char721char721char721
+723 804
char722char722char722char722char722char722char722char722char722char722
+724 806
char723char723char723char723char723char723char723char723char723char723
+725 808
char724char724char724char724char724char724char724char724char724char724
+726 810
char725char725char725char725char725char725char725char725char725char725
+727 812
char726char726char726char726char726char726char726char726char726char726
+728 814
char727char727char727char727char727char727char727char727char727char727
+729 816
char728char728char728char728char728char728char728char728char728char728
+730 818
char729char729char729char729char729char729char729char729char729char729
+731 820
char730char730char730char730char730char730char730char730char730char730
+732 822
char731char731char731char731char731char731char731char731char731char731
+733 824
char732char732char732char732char732char732char732char732char732char732
+734 826
char733char733char733char733char733char733char733char733char733char733
+735 828
char734char734char734char734char734char734char734char734char734char734
+736 830
char735char735char735char735char735char735char735char735char735char735
+737 832
char736char736char736char736char736char736char736char736char736char736
+738 834
char737char737char737char737char737char737char737char737char737char737
+739 836
char738char738char738char738char738char738char738char738char738char738
+740 838
char739char739char739char739char739char739char739char739char739char739
+741 840
char740char740char740char740char740char740char740char740char740char740
+742 842
char741char741char741char741char741char741char741char741char741char741
+743 844
char742char742char742char742char742char742char742char742char742char742
+744 846
char743char743char743char743char743char743char743char743char743char743
+745 848
char744char744char744char744char744char744char744char744char744char744
+746 850
char745char745char745char745char745char745char745char745char745char745
+747 852
char746char746char746char746char746char746char746char746char746char746
+748 854
char747char747char747char747char747char747char747char747char747char747
+749 856
char748char748char748char748char748char748char748char748char748char748
+750 858
char749char749char749char749char749char749char749char749char749char749
+751 860
char750char750char750char750char750char750char750char750char750char750
+752 862
char751char751char751char751char751char751char751char751char751char751
+753 864
char752char752char752char752char752char752char752char752char752char752
+754 866
char753char753char753char753char753char753char753char753char753char753
+755 868
char754char754char754char754char754char754char754char754char754char754
+756 870
char755char755char755char755char755char755char755char755char755char755
+757 872
char756char756char756char756char756char756char756char756char756char756
+758 874
char757char757char757char757char757char757char757char757char757char757
+759 876
char758char758char758char758char758char758char758char758char758char758
+760 878
char759char759char759char759char759char759char759char759char759char759
+761 880
char760char760char760char760char760char760char760char760char760char760
+762 882
char761char761char761char761char761char761char761char761char761char761
+763 884
char762char762char762char762char762char762char762char762char762char762
+764 886
char763char763char763char763char763char763char763char763char763char763
+765 888
char764char764char764char764char764char764char764char764char764char764
+766 890
char765char765char765char765char765char765char765char765char765char765
+767 892
char766char766char766char766char766char766char766char766char766char766
+768 894
char767char767char767char767char767char767char767char767char767char767
+769 768
char768char768char768char768char768char768char768char768char768char768
+770 770
char769char769char769char769char769char769char769char769char769char769
+771 772
char770char770char770char770char770char770char770char770char770char770
+772 774
char771char771char771char771char771char771char771char771char771char771
+773 776
char772char772char772char772char772char772char772char772char772char772
+774 778
char773char773char773char773char773char773char773char773char773char773
+775 780
char774char774char774char774char774char774char774char774char774char774
+776 782
char775char775char775char775char775char775char775char775char775char775
+777 784
char776char776char776char776char776char776char776char776char776char776
+778 786
char777char777char777char777char777char777char777char777char777char777
+779 788
char778char778char778char778char778char778char778char778char778char778
+780 790
char779char779char779char779char779char779char779char779char779char779
+781 792
char780char780char780char780char780char780char780char780char780char780
+782 794
char781char781char781char781char781char781char781char781char781char781
+783 796
char782char782char782char782char782char782char782char782char782char782
+784 798
char783char783char783char783char783char783char783char783char783char783
+785 800
char784char784char784char784char784char784char784char784char784char784
+786 802
char785char785char785char785char785char785char785char785char785char785
+787 804
char786char786char786char786char786char786char786char786char786char786
+788 806
char787char787char787char787char787char787char787char787char787char787
+789 808
char788char788char788char788char788char788char788char788char788char788
+790 810
char789char789char789char789char789char789char789char789char789char789
+791 812
char790char790char790char790char790char790char790char790char790char790
+792 814
char791char791char791char791char791char791char791char791char791char791
+793 816
char792char792char792char792char792char792char792char792char792char792
+794 818
char793char793char793char793char793char793char793char793char793char793
+795 820
char794char794char794char794char794char794char794char794char794char794
+796 822
char795char795char795char795char795char795char795char795char795char795
+797 824
char796char796char796char796char796char796char796char796char796char796
+798 826
char797char797char797char797char797char797char797char797char797char797
+799 828
char798char798char798char798char798char798char798char798char798char798
+800 830
char799char799char799char799char799char799char799char799char799char799
+801 832
char800char800char800char800char800char800char800char800char800char800
+802 834
char801char801char801char801char801char801char801char801char801char801
+803 836
char802char802char802char802char802char802char802char802char802char802
+804 838
char803char803char803char803char803char803char803char803char803char803
+805 840
char804char804char804char804char804char804char804char804char804char804
+806 842
char805char805char805char805char805char805char805char805char805char805
+807 844
char806char806char806char806char806char806char806char806char806char806
+808 846
char807char807char807char807char807char807char807char807char807char807
+809 848
char808char808char808char808char808char808char808char808char808char808
+810 850
char809char809char809char809char809char809char809char809char809char809
+811 852
char810char810char810char810char810char810char810char810char810char810
+812 854
char811char811char811char811char811char811char811char811char811char811
+813 856
char812char812char812char812char812char812char812char812char812char812
+814 858
char813char813char813char813char813char813char813char813char813char813
+815 860
char814char814char814char814char814char814char814char814char814char814
+816 862
char815char815char815char815char815char815char815char815char815char815
+817 864
char816char816char816char816char816char816char816char816char816char816
+818 866
char817char817char817char817char817char817char817char817char817char817
+819 868
char818char818char818char818char818char818char818char818char818char818
+820 870
char819char819char819char819char819char819char819char819char819char819
+821 872
char820char820char820char820char820char820char820char820char820char820
+822 874
char821char821char821char821char821char821char821char821char821char821
+823 876
char822char822char822char822char822char822char822char822char822char822
+824 878
char823char823char823char823char823char823char823char823char823char823
+825 880
char824char824char824char824char824char824char824char824char824char824
+826 882
char825char825char825char825char825char825char825char825char825char825
+827 884
char826char826char826char826char826char826char826char826char826char826
+828 886
char827char827char827char827char827char827char827char827char827char827
+829 888
char828char828char828char828char828char828char828char828char828char828
+830 890
char829char829char829char829char829char829char829char829char829char829
+831 892
char830char830char830char830char830char830char830char830char830char830
+832 894
char831char831char831char831char831char831char831char831char831char831
+833 896
char832char832char832char832char832char832char832char832char832char832
+834 898
char833char833char833char833char833char833char833char833char833char833
+835 900
char834char834char834char834char834char834char834char834char834char834
+836 902
char835char835char835char835char835char835char835char835char835char835
+837 904
char836char836char836char836char836char836char836char836char836char836
+838 906
char837char837char837char837char837char837char837char837char837char837
+839 908
char838char838char838char838char838char838char838char838char838char838
+840 910
char839char839char839char839char839char839char839char839char839char839
+841 912
char840char840char840char840char840char840char840char840char840char840
+842 914
char841char841char841char841char841char841char841char841char841char841
+843 916
char842char842char842char842char842char842char842char842char842char842
+844 918
char843char843char843char843char843char843char843char843char843char843
+845 920
char844char844char844char844char844char844char844char844char844char844
+846 922
char845char845char845char845char845char845char845char845char845char845
+847 924
char846char846char846char846char846char846char846char846char846char846
+848 926
char847char847char847char847char847char847char847char847char847char847
+849 928
char848char848char848char848char848char848char848char848char848char848
+850 930
char849char849char849char849char849char849char849char849char849char849
+851 932
char850char850char850char850char850char850char850char850char850char850
+852 934
char851char851char851char851char851char851char851char851char851char851
+853 936
char852char852char852char852char852char852char852char852char852char852
+854 938
char853char853char853char853char853char853char853char853char853char853
+855 940
char854char854char854char854char854char854char854char854char854char854
+856 942
char855char855char855char855char855char855char855char855char855char855
+857 944
char856char856char856char856char856char856char856char856char856char856
+858 946
char857char857char857char857char857char857char857char857char857char857
+859 948
char858char858char858char858char858char858char858char858char858char858
+860 950
char859char859char859char859char859char859char859char859char859char859
+861 952
char860char860char860char860char860char860char860char860char860char860
+862 954
char861char861char861char861char861char861char861char861char861char861
+863 956
char862char862char862char862char862char862char862char862char862char862
+864 958
char863char863char863char863char863char863char863char863char863char863
+865 960
char864char864char864char864char864char864char864char864char864char864
+866 962
char865char865char865char865char865char865char865char865char865char865
+867 964
char866char866char866char866char866char866char866char866char866char866
+868 966
char867char867char867char867char867char867char867char867char867char867
+869 968
char868char868char868char868char868char868char868char868char868char868
+870 970
char869char869char869char869char869char869char869char869char869char869
+871 972
char870char870char870char870char870char870char870char870char870char870
+872 974
char871char871char871char871char871char871char871char871char871char871
+873 976
char872char872char872char872char872char872char872char872char872char872
+874 978
char873char873char873char873char873char873char873char873char873char873
+875 980
char874char874char874char874char874char874char874char874char874char874
+876 982
char875char875char875char875char875char875char875char875char875char875
+877 984
char876char876char876char876char876char876char876char876char876char876
+878 986
char877char877char877char877char877char877char877char877char877char877
+879 988
char878char878char878char878char878char878char878char878char878char878
+880 990
char879char879char879char879char879char879char879char879char879char879
+881 992
char880char880char880char880char880char880char880char880char880char880
+882 994
char881char881char881char881char881char881char881char881char881char881
+883 996
char882char882char882char882char882char882char882char882char882char882
+884 998
char883char883char883char883char883char883char883char883char883char883
+885 1000
char884char884char884char884char884char884char884char884char884char884
+886 1002
char885char885char885char885char885char885char885char885char885char885
+887 1004
char886char886char886char886char886char886char886char886char886char886
+888 1006
char887char887char887char887char887char887char887char887char887char887
+889 1008
char888char888char888char888char888char888char888char888char888char888
+890 1010
char889char889char889char889char889char889char889char889char889char889
+891 1012
char890char890char890char890char890char890char890char890char890char890
+892 1014
char891char891char891char891char891char891char891char891char891char891
+893 1016
char892char892char892char892char892char892char892char892char892char892
+894 1018
char893char893char893char893char893char893char893char893char893char893
+895 1020
char894char894char894char894char894char894char894char894char894char894
+896 1022
char895char895char895char895char895char895char895char895char895char895
+897 896
char896char896char896char896char896char896char896char896char896char896
+898 898
char897char897char897char897char897char897char897char897char897char897
+899 900
char898char898char898char898char898char898char898char898char898char898
+900 902
char899char899char899char899char899char899char899char899char899char899
+901 904
char900char900char900char900char900char900char900char900char900char900
+902 906
char901char901char901char901char901char901char901char901char901char901
+903 908
char902char902char902char902char902char902char902char902char902char902
+904 910
char903char903char903char903char903char903char903char903char903char903
+905 912
char904char904char904char904char904char904char904char904char904char904
+906 914
char905char905char905char905char905char905char905char905char905char905
+907 916
char906char906char906char906char906char906char906char906char906char906
+908 918
char907char907char907char907char907char907char907char907char907char907
+909 920
char908char908char908char908char908char908char908char908char908char908
+910 922
char909char909char909char909char909char909char909char909char909char909
+911 924
char910char910char910char910char910char910char910char910char910char910
+912 926
char911char911char911char911char911char911char911char911char911char911
+913 928
char912char912char912char912char912char912char912char912char912char912
+914 930
char913char913char913char913char913char913char913char913char913char913
+915 932
char914char914char914char914char914char914char914char914char914char914
+916 934
char915char915char915char915char915char915char915char915char915char915
+917 936
char916char916char916char916char916char916char916char916char916char916
+918 938
char917char917char917char917char917char917char917char917char917char917
+919 940
char918char918char918char918char918char918char918char918char918char918
+920 942
char919char919char919char919char919char919char919char919char919char919
+921 944
char920char920char920char920char920char920char920char920char920char920
+922 946
char921char921char921char921char921char921char921char921char921char921
+923 948
char922char922char922char922char922char922char922char922char922char922
+924 950
char923char923char923char923char923char923char923char923char923char923
+925 952
char924char924char924char924char924char924char924char924char924char924
+926 954
char925char925char925char925char925char925char925char925char925char925
+927 956
char926char926char926char926char926char926char926char926char926char926
+928 958
char927char927char927char927char927char927char927char927char927char927
+929 960
char928char928char928char928char928char928char928char928char928char928
+930 962
char929char929char929char929char929char929char929char929char929char929
+931 964
char930char930char930char930char930char930char930char930char930char930
+932 966
char931char931char931char931char931char931char931char931char931char931
+933 968
char932char932char932char932char932char932char932char932char932char932
+934 970
char933char933char933char933char933char933char933char933char933char933
+935 972
char934char934char934char934char934char934char934char934char934char934
+936 974
char935char935char935char935char935char935char935char935char935char935
+937 976
char936char936char936char936char936char936char936char936char936char936
+938 978
char937char937char937char937char937char937char937char937char937char937
+939 980
char938char938char938char938char938char938char938char938char938char938
+940 982
char939char939char939char939char939char939char939char939char939char939
+941 984
char940char940char940char940char940char940char940char940char940char940
+942 986
char941char941char941char941char941char941char941char941char941char941
+943 988
char942char942char942char942char942char942char942char942char942char942
+944 990
char943char943char943char943char943char943char943char943char943char943
+945 992
char944char944char944char944char944char944char944char944char944char944
+946 994
char945char945char945char945char945char945char945char945char945char945
+947 996
char946char946char946char946char946char946char946char946char946char946
+948 998
char947char947char947char947char947char947char947char947char947char947
+949 1000
char948char948char948char948char948char948char948char948char948char948
+950 1002
char949char949char949char949char949char949char949char949char949char949
+951 1004
char950char950char950char950char950char950char950char950char950char950
+952 1006
char951char951char951char951char951char951char951char951char951char951
+953 1008
char952char952char952char952char952char952char952char952char952char952
+954 1010
char953char953char953char953char953char953char953char953char953char953
+955 1012
char954char954char954char954char954char954char954char954char954char954
+956 1014
char955char955char955char955char955char955char955char955char955char955
+957 1016
char956char956char956char956char956char956char956char956char956char956
+958 1018
char957char957char957char957char957char957char957char957char957char957
+959 1020
char958char958char958char958char958char958char958char958char958char958
+960 1022
char959char959char959char959char959char959char959char959char959char959
+961 1024
char960char960char960char960char960char960char960char960char960char960
+962 1026
char961char961char961char961char961char961char961char961char961char961
+963 1028
char962char962char962char962char962char962char962char962char962char962
+964 1030
char963char963char963char963char963char963char963char963char963char963
+965 1032
char964char964char964char964char964char964char964char964char964char964
+966 1034
char965char965char965char965char965char965char965char965char965char965
+967 1036
char966char966char966char966char966char966char966char966char966char966
+968 1038
char967char967char967char967char967char967char967char967char967char967
+969 1040
char968char968char968char968char968char968char968char968char968char968
+970 1042
char969char969char969char969char969char969char969char969char969char969
+971 1044
char970char970char970char970char970char970char970char970char970char970
+972 1046
char971char971char971char971char971char971char971char971char971char971
+973 1048
char972char972char972char972char972char972char972char972char972char972
+974 1050
char973char973char973char973char973char973char973char973char973char973
+975 1052
char974char974char974char974char974char974char974char974char974char974
+976 1054
char975char975char975char975char975char975char975char975char975char975
+977 1056
char976char976char976char976char976char976char976char976char976char976
+978 1058
char977char977char977char977char977char977char977char977char977char977
+979 1060
char978char978char978char978char978char978char978char978char978char978
+980 1062
char979char979char979char979char979char979char979char979char979char979
+981 1064
char980char980char980char980char980char980char980char980char980char980
+982 1066
char981char981char981char981char981char981char981char981char981char981
+983 1068
char982char982char982char982char982char982char982char982char982char982
+984 1070
char983char983char983char983char983char983char983char983char983char983
+985 1072
char984char984char984char984char984char984char984char984char984char984
+986 1074
char985char985char985char985char985char985char985char985char985char985
+987 1076
char986char986char986char986char986char986char986char986char986char986
+988 1078
char987char987char987char987char987char987char987char987char987char987
+989 1080
char988char988char988char988char988char988char988char988char988char988
+990 1082
char989char989char989char989char989char989char989char989char989char989
+991 1084
char990char990char990char990char990char990char990char990char990char990
+992 1086
char991char991char991char991char991char991char991char991char991char991
+993 1088
char992char992char992char992char992char992char992char992char992char992
+994 1090
char993char993char993char993char993char993char993char993char993char993
+995 1092
char994char994char994char994char994char994char994char994char994char994
+996 1094
char995char995char995char995char995char995char995char995char995char995
+997 1096
char996char996char996char996char996char996char996char996char996char996
+998 1098
char997char997char997char997char997char997char997char997char997char997
+999 1100
char998char998char998char998char998char998char998char998char998char998
+1000 1102
char999char999char999char999char999char999char999char999char999char999
+1001 \N \N
+
diff --git a/regression-test/suites/export/test_outfile.groovy
b/regression-test/suites/export/test_outfile.groovy
index d04c5bb5e7..84b0ada7cb 100644
--- a/regression-test/suites/export/test_outfile.groovy
+++ b/regression-test/suites/export/test_outfile.groovy
@@ -21,7 +21,7 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Paths
-suite("test_outfile", "export") {
+suite("test_outfile", "basic") {
StringBuilder strBuilder = new StringBuilder()
strBuilder.append("curl --location-trusted -u " + context.config.jdbcUser
+ ":" + context.config.jdbcPassword)
strBuilder.append(" http://" + context.config.feHttpAddress +
"/rest/v1/config/fe")
diff --git a/regression-test/suites/export/test_outfile.groovy
b/regression-test/suites/export/test_outfile_expr.groovy
similarity index 91%
copy from regression-test/suites/export/test_outfile.groovy
copy to regression-test/suites/export/test_outfile_expr.groovy
index d04c5bb5e7..9d8600434d 100644
--- a/regression-test/suites/export/test_outfile.groovy
+++ b/regression-test/suites/export/test_outfile_expr.groovy
@@ -21,7 +21,7 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files
import java.nio.file.Paths
-suite("test_outfile", "export") {
+suite("test_outfile", "expr") {
StringBuilder strBuilder = new StringBuilder()
strBuilder.append("curl --location-trusted -u " + context.config.jdbcUser
+ ":" + context.config.jdbcPassword)
strBuilder.append(" http://" + context.config.feHttpAddress +
"/rest/v1/config/fe")
@@ -48,8 +48,8 @@ suite("test_outfile", "export") {
logger.warn("Please set enable_outfile_to_local to true to run
test_outfile")
return
}
- def tableName = "outfile_test"
- def outFilePath = """${context.file.parent}/tmp"""
+ def tableName = "outfile_test_expr"
+ def outFilePath = """${context.file.parent}/tmp_expr"""
try {
sql """ DROP TABLE IF EXISTS ${tableName} """
sql """
@@ -84,7 +84,7 @@ suite("test_outfile", "export") {
sql """ INSERT INTO ${tableName} VALUES
${sb.toString()}
"""
- qt_select_default """ SELECT * FROM ${tableName} t ORDER BY user_id;
"""
+ qt_select_default """ SELECT user_id+1, age+sex, repeat(char_col, 10)
FROM ${tableName} t ORDER BY user_id; """
// check outfile
File path = new File(outFilePath)
@@ -94,12 +94,12 @@ suite("test_outfile", "export") {
throw new IllegalStateException("""${outFilePath} already exists!
""")
}
sql """
- SELECT * FROM ${tableName} t ORDER BY user_id INTO OUTFILE
"file://${outFilePath}/";
+ SELECT user_id+1, age+sex, repeat(char_col, 10) FROM ${tableName}
t ORDER BY user_id INTO OUTFILE "file://${outFilePath}/";
"""
File[] files = path.listFiles()
assert files.length == 1
List<String> outLines =
Files.readAllLines(Paths.get(files[0].getAbsolutePath()),
StandardCharsets.UTF_8);
- List<String> baseLines =
Files.readAllLines(Paths.get("""${context.config.dataPath}/export/test_outfile.out"""),
StandardCharsets.UTF_8)
+ List<String> baseLines =
Files.readAllLines(Paths.get("""${context.config.dataPath}/export/test_outfile_expr.out"""),
StandardCharsets.UTF_8)
for (int j = 0; j < outLines.size(); j ++) {
String[] outLine = outLines.get(j).split("\t")
String[] baseLine = baseLines.get(j + 2).split("\t")
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]