Add proto field to support reverse in (#24678)

Signed-off-by: cai.zhang <cai.zhang@zilliz.com>
This commit is contained in:
cai.zhang 2023-06-07 17:24:36 +08:00 committed by GitHub
parent 711bbd6373
commit a6dbcaeb7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 246 additions and 172 deletions

View File

@ -161,6 +161,7 @@ PROTOBUF_CONSTEXPR TermExpr::TermExpr(
::_pbi::ConstantInitialized): _impl_{
/*decltype(_impl_.values_)*/{}
, /*decltype(_impl_.column_info_)*/nullptr
, /*decltype(_impl_.is_in_field_)*/false
, /*decltype(_impl_._cached_size_)*/{}} {}
struct TermExprDefaultTypeInternal {
PROTOBUF_CONSTEXPR TermExprDefaultTypeInternal()
@ -407,6 +408,7 @@ const uint32_t TableStruct_plan_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(pro
~0u, // no _inlined_string_donated_
PROTOBUF_FIELD_OFFSET(::milvus::proto::plan::TermExpr, _impl_.column_info_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::plan::TermExpr, _impl_.values_),
PROTOBUF_FIELD_OFFSET(::milvus::proto::plan::TermExpr, _impl_.is_in_field_),
~0u, // no _has_bits_
PROTOBUF_FIELD_OFFSET(::milvus::proto::plan::UnaryExpr, _internal_metadata_),
~0u, // no _extensions_
@ -513,15 +515,15 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode
{ 63, -1, -1, sizeof(::milvus::proto::plan::BinaryRangeExpr)},
{ 74, -1, -1, sizeof(::milvus::proto::plan::CompareExpr)},
{ 83, -1, -1, sizeof(::milvus::proto::plan::TermExpr)},
{ 91, -1, -1, sizeof(::milvus::proto::plan::UnaryExpr)},
{ 99, -1, -1, sizeof(::milvus::proto::plan::BinaryExpr)},
{ 108, -1, -1, sizeof(::milvus::proto::plan::BinaryArithOp)},
{ 117, -1, -1, sizeof(::milvus::proto::plan::BinaryArithExpr)},
{ 126, -1, -1, sizeof(::milvus::proto::plan::BinaryArithOpEvalRangeExpr)},
{ 137, -1, -1, sizeof(::milvus::proto::plan::Expr)},
{ 155, -1, -1, sizeof(::milvus::proto::plan::VectorANNS)},
{ 166, -1, -1, sizeof(::milvus::proto::plan::QueryPlanNode)},
{ 174, -1, -1, sizeof(::milvus::proto::plan::PlanNode)},
{ 92, -1, -1, sizeof(::milvus::proto::plan::UnaryExpr)},
{ 100, -1, -1, sizeof(::milvus::proto::plan::BinaryExpr)},
{ 109, -1, -1, sizeof(::milvus::proto::plan::BinaryArithOp)},
{ 118, -1, -1, sizeof(::milvus::proto::plan::BinaryArithExpr)},
{ 127, -1, -1, sizeof(::milvus::proto::plan::BinaryArithOpEvalRangeExpr)},
{ 138, -1, -1, sizeof(::milvus::proto::plan::Expr)},
{ 156, -1, -1, sizeof(::milvus::proto::plan::VectorANNS)},
{ 167, -1, -1, sizeof(::milvus::proto::plan::QueryPlanNode)},
{ 175, -1, -1, sizeof(::milvus::proto::plan::PlanNode)},
};
static const ::_pb::Message* const file_default_instances[] = {
@ -575,77 +577,77 @@ const char descriptor_table_protodef_plan_2eproto[] PROTOBUF_SECTION_VARIABLE(pr
"pr\0227\n\020left_column_info\030\001 \001(\0132\035.milvus.pr"
"oto.plan.ColumnInfo\0228\n\021right_column_info"
"\030\002 \001(\0132\035.milvus.proto.plan.ColumnInfo\022%\n"
"\002op\030\003 \001(\0162\031.milvus.proto.plan.OpType\"o\n\010"
"TermExpr\0222\n\013column_info\030\001 \001(\0132\035.milvus.p"
"roto.plan.ColumnInfo\022/\n\006values\030\002 \003(\0132\037.m"
"ilvus.proto.plan.GenericValue\"\206\001\n\tUnaryE"
"xpr\0220\n\002op\030\001 \001(\0162$.milvus.proto.plan.Unar"
"yExpr.UnaryOp\022&\n\005child\030\002 \001(\0132\027.milvus.pr"
"oto.plan.Expr\"\037\n\007UnaryOp\022\013\n\007Invalid\020\000\022\007\n"
"\003Not\020\001\"\307\001\n\nBinaryExpr\0222\n\002op\030\001 \001(\0162&.milv"
"us.proto.plan.BinaryExpr.BinaryOp\022%\n\004lef"
"t\030\002 \001(\0132\027.milvus.proto.plan.Expr\022&\n\005righ"
"t\030\003 \001(\0132\027.milvus.proto.plan.Expr\"6\n\010Bina"
"ryOp\022\013\n\007Invalid\020\000\022\016\n\nLogicalAnd\020\001\022\r\n\tLog"
"icalOr\020\002\"\255\001\n\rBinaryArithOp\0222\n\013column_inf"
"o\030\001 \001(\0132\035.milvus.proto.plan.ColumnInfo\0220"
"\n\010arith_op\030\002 \001(\0162\036.milvus.proto.plan.Ari"
"thOpType\0226\n\rright_operand\030\003 \001(\0132\037.milvus"
".proto.plan.GenericValue\"\214\001\n\017BinaryArith"
"Expr\022%\n\004left\030\001 \001(\0132\027.milvus.proto.plan.E"
"xpr\022&\n\005right\030\002 \001(\0132\027.milvus.proto.plan.E"
"xpr\022*\n\002op\030\003 \001(\0162\036.milvus.proto.plan.Arit"
"hOpType\"\221\002\n\032BinaryArithOpEvalRangeExpr\0222"
"\n\013column_info\030\001 \001(\0132\035.milvus.proto.plan."
"ColumnInfo\0220\n\010arith_op\030\002 \001(\0162\036.milvus.pr"
"oto.plan.ArithOpType\0226\n\rright_operand\030\003 "
"\001(\0132\037.milvus.proto.plan.GenericValue\022%\n\002"
"op\030\004 \001(\0162\031.milvus.proto.plan.OpType\022.\n\005v"
"alue\030\005 \001(\0132\037.milvus.proto.plan.GenericVa"
"lue\"\235\005\n\004Expr\0220\n\tterm_expr\030\001 \001(\0132\033.milvus"
".proto.plan.TermExprH\000\0222\n\nunary_expr\030\002 \001"
"(\0132\034.milvus.proto.plan.UnaryExprH\000\0224\n\013bi"
"nary_expr\030\003 \001(\0132\035.milvus.proto.plan.Bina"
"ryExprH\000\0226\n\014compare_expr\030\004 \001(\0132\036.milvus."
"proto.plan.CompareExprH\000\022=\n\020unary_range_"
"expr\030\005 \001(\0132!.milvus.proto.plan.UnaryRang"
"eExprH\000\022\?\n\021binary_range_expr\030\006 \001(\0132\".mil"
"vus.proto.plan.BinaryRangeExprH\000\022X\n\037bina"
"ry_arith_op_eval_range_expr\030\007 \001(\0132-.milv"
"us.proto.plan.BinaryArithOpEvalRangeExpr"
"H\000\022\?\n\021binary_arith_expr\030\010 \001(\0132\".milvus.p"
"roto.plan.BinaryArithExprH\000\0222\n\nvalue_exp"
"r\030\t \001(\0132\034.milvus.proto.plan.ValueExprH\000\022"
"4\n\013column_expr\030\n \001(\0132\035.milvus.proto.plan"
".ColumnExprH\000\0224\n\013exists_expr\030\013 \001(\0132\035.mil"
"vus.proto.plan.ExistsExprH\000B\006\n\004expr\"\251\001\n\n"
"VectorANNS\022\021\n\tis_binary\030\001 \001(\010\022\020\n\010field_i"
"d\030\002 \001(\003\022+\n\npredicates\030\003 \001(\0132\027.milvus.pro"
"to.plan.Expr\0220\n\nquery_info\030\004 \001(\0132\034.milvu"
"s.proto.plan.QueryInfo\022\027\n\017placeholder_ta"
"g\030\005 \001(\t\"N\n\rQueryPlanNode\022+\n\npredicates\030\001"
" \001(\0132\027.milvus.proto.plan.Expr\022\020\n\010is_coun"
"t\030\002 \001(\010\"\304\001\n\010PlanNode\0224\n\013vector_anns\030\001 \001("
"\0132\035.milvus.proto.plan.VectorANNSH\000\022-\n\npr"
"edicates\030\002 \001(\0132\027.milvus.proto.plan.ExprH"
"\000\0221\n\005query\030\004 \001(\0132 .milvus.proto.plan.Que"
"ryPlanNodeH\000\022\030\n\020output_field_ids\030\003 \003(\003B\006"
"\n\004node*\272\001\n\006OpType\022\013\n\007Invalid\020\000\022\017\n\013Greate"
"rThan\020\001\022\020\n\014GreaterEqual\020\002\022\014\n\010LessThan\020\003\022"
"\r\n\tLessEqual\020\004\022\t\n\005Equal\020\005\022\014\n\010NotEqual\020\006\022"
"\017\n\013PrefixMatch\020\007\022\020\n\014PostfixMatch\020\010\022\t\n\005Ma"
"tch\020\t\022\t\n\005Range\020\n\022\006\n\002In\020\013\022\t\n\005NotIn\020\014*G\n\013A"
"rithOpType\022\013\n\007Unknown\020\000\022\007\n\003Add\020\001\022\007\n\003Sub\020"
"\002\022\007\n\003Mul\020\003\022\007\n\003Div\020\004\022\007\n\003Mod\020\005B3Z1github.c"
"om/milvus-io/milvus/internal/proto/planp"
"bb\006proto3"
"\002op\030\003 \001(\0162\031.milvus.proto.plan.OpType\"\204\001\n"
"\010TermExpr\0222\n\013column_info\030\001 \001(\0132\035.milvus."
"proto.plan.ColumnInfo\022/\n\006values\030\002 \003(\0132\037."
"milvus.proto.plan.GenericValue\022\023\n\013is_in_"
"field\030\003 \001(\010\"\206\001\n\tUnaryExpr\0220\n\002op\030\001 \001(\0162$."
"milvus.proto.plan.UnaryExpr.UnaryOp\022&\n\005c"
"hild\030\002 \001(\0132\027.milvus.proto.plan.Expr\"\037\n\007U"
"naryOp\022\013\n\007Invalid\020\000\022\007\n\003Not\020\001\"\307\001\n\nBinaryE"
"xpr\0222\n\002op\030\001 \001(\0162&.milvus.proto.plan.Bina"
"ryExpr.BinaryOp\022%\n\004left\030\002 \001(\0132\027.milvus.p"
"roto.plan.Expr\022&\n\005right\030\003 \001(\0132\027.milvus.p"
"roto.plan.Expr\"6\n\010BinaryOp\022\013\n\007Invalid\020\000\022"
"\016\n\nLogicalAnd\020\001\022\r\n\tLogicalOr\020\002\"\255\001\n\rBinar"
"yArithOp\0222\n\013column_info\030\001 \001(\0132\035.milvus.p"
"roto.plan.ColumnInfo\0220\n\010arith_op\030\002 \001(\0162\036"
".milvus.proto.plan.ArithOpType\0226\n\rright_"
"operand\030\003 \001(\0132\037.milvus.proto.plan.Generi"
"cValue\"\214\001\n\017BinaryArithExpr\022%\n\004left\030\001 \001(\013"
"2\027.milvus.proto.plan.Expr\022&\n\005right\030\002 \001(\013"
"2\027.milvus.proto.plan.Expr\022*\n\002op\030\003 \001(\0162\036."
"milvus.proto.plan.ArithOpType\"\221\002\n\032Binary"
"ArithOpEvalRangeExpr\0222\n\013column_info\030\001 \001("
"\0132\035.milvus.proto.plan.ColumnInfo\0220\n\010arit"
"h_op\030\002 \001(\0162\036.milvus.proto.plan.ArithOpTy"
"pe\0226\n\rright_operand\030\003 \001(\0132\037.milvus.proto"
".plan.GenericValue\022%\n\002op\030\004 \001(\0162\031.milvus."
"proto.plan.OpType\022.\n\005value\030\005 \001(\0132\037.milvu"
"s.proto.plan.GenericValue\"\235\005\n\004Expr\0220\n\tte"
"rm_expr\030\001 \001(\0132\033.milvus.proto.plan.TermEx"
"prH\000\0222\n\nunary_expr\030\002 \001(\0132\034.milvus.proto."
"plan.UnaryExprH\000\0224\n\013binary_expr\030\003 \001(\0132\035."
"milvus.proto.plan.BinaryExprH\000\0226\n\014compar"
"e_expr\030\004 \001(\0132\036.milvus.proto.plan.Compare"
"ExprH\000\022=\n\020unary_range_expr\030\005 \001(\0132!.milvu"
"s.proto.plan.UnaryRangeExprH\000\022\?\n\021binary_"
"range_expr\030\006 \001(\0132\".milvus.proto.plan.Bin"
"aryRangeExprH\000\022X\n\037binary_arith_op_eval_r"
"ange_expr\030\007 \001(\0132-.milvus.proto.plan.Bina"
"ryArithOpEvalRangeExprH\000\022\?\n\021binary_arith"
"_expr\030\010 \001(\0132\".milvus.proto.plan.BinaryAr"
"ithExprH\000\0222\n\nvalue_expr\030\t \001(\0132\034.milvus.p"
"roto.plan.ValueExprH\000\0224\n\013column_expr\030\n \001"
"(\0132\035.milvus.proto.plan.ColumnExprH\000\0224\n\013e"
"xists_expr\030\013 \001(\0132\035.milvus.proto.plan.Exi"
"stsExprH\000B\006\n\004expr\"\251\001\n\nVectorANNS\022\021\n\tis_b"
"inary\030\001 \001(\010\022\020\n\010field_id\030\002 \001(\003\022+\n\npredica"
"tes\030\003 \001(\0132\027.milvus.proto.plan.Expr\0220\n\nqu"
"ery_info\030\004 \001(\0132\034.milvus.proto.plan.Query"
"Info\022\027\n\017placeholder_tag\030\005 \001(\t\"N\n\rQueryPl"
"anNode\022+\n\npredicates\030\001 \001(\0132\027.milvus.prot"
"o.plan.Expr\022\020\n\010is_count\030\002 \001(\010\"\304\001\n\010PlanNo"
"de\0224\n\013vector_anns\030\001 \001(\0132\035.milvus.proto.p"
"lan.VectorANNSH\000\022-\n\npredicates\030\002 \001(\0132\027.m"
"ilvus.proto.plan.ExprH\000\0221\n\005query\030\004 \001(\0132 "
".milvus.proto.plan.QueryPlanNodeH\000\022\030\n\020ou"
"tput_field_ids\030\003 \003(\003B\006\n\004node*\272\001\n\006OpType\022"
"\013\n\007Invalid\020\000\022\017\n\013GreaterThan\020\001\022\020\n\014Greater"
"Equal\020\002\022\014\n\010LessThan\020\003\022\r\n\tLessEqual\020\004\022\t\n\005"
"Equal\020\005\022\014\n\010NotEqual\020\006\022\017\n\013PrefixMatch\020\007\022\020"
"\n\014PostfixMatch\020\010\022\t\n\005Match\020\t\022\t\n\005Range\020\n\022\006"
"\n\002In\020\013\022\t\n\005NotIn\020\014*G\n\013ArithOpType\022\013\n\007Unkn"
"own\020\000\022\007\n\003Add\020\001\022\007\n\003Sub\020\002\022\007\n\003Mul\020\003\022\007\n\003Div\020"
"\004\022\007\n\003Mod\020\005B3Z1github.com/milvus-io/milvu"
"s/internal/proto/planpbb\006proto3"
;
static const ::_pbi::DescriptorTable* const descriptor_table_plan_2eproto_deps[1] = {
&::descriptor_table_schema_2eproto,
};
static ::_pbi::once_flag descriptor_table_plan_2eproto_once;
const ::_pbi::DescriptorTable descriptor_table_plan_2eproto = {
false, false, 3649, descriptor_table_protodef_plan_2eproto,
false, false, 3671, descriptor_table_protodef_plan_2eproto,
"plan.proto",
&descriptor_table_plan_2eproto_once, descriptor_table_plan_2eproto_deps, 1, 19,
schemas, file_default_instances, TableStruct_plan_2eproto::offsets,
@ -3180,12 +3182,14 @@ TermExpr::TermExpr(const TermExpr& from)
new (&_impl_) Impl_{
decltype(_impl_.values_){from._impl_.values_}
, decltype(_impl_.column_info_){nullptr}
, decltype(_impl_.is_in_field_){}
, /*decltype(_impl_._cached_size_)*/{}};
_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
if (from._internal_has_column_info()) {
_this->_impl_.column_info_ = new ::milvus::proto::plan::ColumnInfo(*from._impl_.column_info_);
}
_this->_impl_.is_in_field_ = from._impl_.is_in_field_;
// @@protoc_insertion_point(copy_constructor:milvus.proto.plan.TermExpr)
}
@ -3196,6 +3200,7 @@ inline void TermExpr::SharedCtor(
new (&_impl_) Impl_{
decltype(_impl_.values_){arena}
, decltype(_impl_.column_info_){nullptr}
, decltype(_impl_.is_in_field_){false}
, /*decltype(_impl_._cached_size_)*/{}
};
}
@ -3230,6 +3235,7 @@ void TermExpr::Clear() {
delete _impl_.column_info_;
}
_impl_.column_info_ = nullptr;
_impl_.is_in_field_ = false;
_internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
}
@ -3260,6 +3266,14 @@ const char* TermExpr::_InternalParse(const char* ptr, ::_pbi::ParseContext* ctx)
} else
goto handle_unusual;
continue;
// bool is_in_field = 3;
case 3:
if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 24)) {
_impl_.is_in_field_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
CHK_(ptr);
} else
goto handle_unusual;
continue;
default:
goto handle_unusual;
} // switch
@ -3304,6 +3318,12 @@ uint8_t* TermExpr::_InternalSerialize(
InternalWriteMessage(2, repfield, repfield.GetCachedSize(), target, stream);
}
// bool is_in_field = 3;
if (this->_internal_is_in_field() != 0) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteBoolToArray(3, this->_internal_is_in_field(), target);
}
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
_internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
@ -3334,6 +3354,11 @@ size_t TermExpr::ByteSizeLong() const {
*_impl_.column_info_);
}
// bool is_in_field = 3;
if (this->_internal_is_in_field() != 0) {
total_size += 1 + 1;
}
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
}
@ -3357,6 +3382,9 @@ void TermExpr::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const ::PROTO
_this->_internal_mutable_column_info()->::milvus::proto::plan::ColumnInfo::MergeFrom(
from._internal_column_info());
}
if (from._internal_is_in_field() != 0) {
_this->_internal_set_is_in_field(from._internal_is_in_field());
}
_this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
}
@ -3375,7 +3403,12 @@ void TermExpr::InternalSwap(TermExpr* other) {
using std::swap;
_internal_metadata_.InternalSwap(&other->_internal_metadata_);
_impl_.values_.InternalSwap(&other->_impl_.values_);
swap(_impl_.column_info_, other->_impl_.column_info_);
::PROTOBUF_NAMESPACE_ID::internal::memswap<
PROTOBUF_FIELD_OFFSET(TermExpr, _impl_.is_in_field_)
+ sizeof(TermExpr::_impl_.is_in_field_)
- PROTOBUF_FIELD_OFFSET(TermExpr, _impl_.column_info_)>(
reinterpret_cast<char*>(&_impl_.column_info_),
reinterpret_cast<char*>(&other->_impl_.column_info_));
}
::PROTOBUF_NAMESPACE_ID::Metadata TermExpr::GetMetadata() const {

View File

@ -2075,6 +2075,7 @@ class TermExpr final :
enum : int {
kValuesFieldNumber = 2,
kColumnInfoFieldNumber = 1,
kIsInFieldFieldNumber = 3,
};
// repeated .milvus.proto.plan.GenericValue values = 2;
int values_size() const;
@ -2112,6 +2113,15 @@ class TermExpr final :
::milvus::proto::plan::ColumnInfo* column_info);
::milvus::proto::plan::ColumnInfo* unsafe_arena_release_column_info();
// bool is_in_field = 3;
void clear_is_in_field();
bool is_in_field() const;
void set_is_in_field(bool value);
private:
bool _internal_is_in_field() const;
void _internal_set_is_in_field(bool value);
public:
// @@protoc_insertion_point(class_scope:milvus.proto.plan.TermExpr)
private:
class _Internal;
@ -2122,6 +2132,7 @@ class TermExpr final :
struct Impl_ {
::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::plan::GenericValue > values_;
::milvus::proto::plan::ColumnInfo* column_info_;
bool is_in_field_;
mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
};
union { Impl_ _impl_; };
@ -5832,6 +5843,26 @@ TermExpr::values() const {
return _impl_.values_;
}
// bool is_in_field = 3;
inline void TermExpr::clear_is_in_field() {
_impl_.is_in_field_ = false;
}
inline bool TermExpr::_internal_is_in_field() const {
return _impl_.is_in_field_;
}
inline bool TermExpr::is_in_field() const {
// @@protoc_insertion_point(field_get:milvus.proto.plan.TermExpr.is_in_field)
return _internal_is_in_field();
}
inline void TermExpr::_internal_set_is_in_field(bool value) {
_impl_.is_in_field_ = value;
}
inline void TermExpr::set_is_in_field(bool value) {
_internal_set_is_in_field(value);
// @@protoc_insertion_point(field_set:milvus.proto.plan.TermExpr.is_in_field)
}
// -------------------------------------------------------------------
// UnaryExpr

View File

@ -89,6 +89,7 @@ message CompareExpr {
message TermExpr {
ColumnInfo column_info = 1;
repeated GenericValue values = 2;
bool is_in_field = 3;
}
message UnaryExpr {

View File

@ -722,6 +722,7 @@ func (m *CompareExpr) GetOp() OpType {
type TermExpr struct {
ColumnInfo *ColumnInfo `protobuf:"bytes,1,opt,name=column_info,json=columnInfo,proto3" json:"column_info,omitempty"`
Values []*GenericValue `protobuf:"bytes,2,rep,name=values,proto3" json:"values,omitempty"`
IsInField bool `protobuf:"varint,3,opt,name=is_in_field,json=isInField,proto3" json:"is_in_field,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -766,6 +767,13 @@ func (m *TermExpr) GetValues() []*GenericValue {
return nil
}
func (m *TermExpr) GetIsInField() bool {
if m != nil {
return m.IsInField
}
return false
}
type UnaryExpr struct {
Op UnaryExpr_UnaryOp `protobuf:"varint,1,opt,name=op,proto3,enum=milvus.proto.plan.UnaryExpr_UnaryOp" json:"op,omitempty"`
Child *Expr `protobuf:"bytes,2,opt,name=child,proto3" json:"child,omitempty"`
@ -1514,101 +1522,102 @@ func init() {
func init() { proto.RegisterFile("plan.proto", fileDescriptor_2d655ab2f7683c23) }
var fileDescriptor_2d655ab2f7683c23 = []byte{
// 1523 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcd, 0x6e, 0xdb, 0xca,
0x15, 0x16, 0xf5, 0x4b, 0x1e, 0xc9, 0x32, 0xc3, 0x4d, 0x9d, 0xa4, 0x89, 0x5d, 0x36, 0x68, 0xdc,
0x14, 0xb1, 0x91, 0x26, 0x4d, 0x9a, 0x14, 0x69, 0xfd, 0x5b, 0x4b, 0x48, 0x62, 0xab, 0x8c, 0xe3,
0x45, 0x37, 0xc4, 0x88, 0x1c, 0x5b, 0x83, 0x50, 0x33, 0x0c, 0x39, 0x54, 0xac, 0x75, 0x77, 0xdd,
0xf5, 0x01, 0xba, 0xee, 0xbe, 0xcb, 0xa2, 0x40, 0x5f, 0xa0, 0x8b, 0x2e, 0xbb, 0xef, 0x13, 0x14,
0xf7, 0x05, 0x2e, 0xe6, 0x0c, 0xf5, 0x67, 0x48, 0xb1, 0x7c, 0x6f, 0x80, 0xbb, 0x9b, 0x39, 0x73,
0xce, 0x77, 0x7e, 0xe7, 0xcc, 0x19, 0x80, 0x38, 0x22, 0x7c, 0x2b, 0x4e, 0x84, 0x14, 0xce, 0xad,
0x3e, 0x8b, 0x06, 0x59, 0xaa, 0x77, 0x5b, 0xea, 0xe0, 0x4e, 0x23, 0x0d, 0x7a, 0xb4, 0x4f, 0x34,
0xc9, 0xfd, 0x8b, 0x01, 0x8d, 0x23, 0xca, 0x69, 0xc2, 0x82, 0x33, 0x12, 0x65, 0xd4, 0xb9, 0x0b,
0x66, 0x57, 0x88, 0xc8, 0x1f, 0x90, 0x68, 0xcd, 0xd8, 0x30, 0x36, 0xcd, 0x56, 0xc1, 0xab, 0x29,
0xca, 0x19, 0x89, 0x9c, 0x7b, 0x60, 0x31, 0x2e, 0x9f, 0x3f, 0xc3, 0xd3, 0xe2, 0x86, 0xb1, 0x59,
0x6a, 0x15, 0x3c, 0x13, 0x49, 0xf9, 0xf1, 0x79, 0x24, 0x88, 0xc4, 0xe3, 0xd2, 0x86, 0xb1, 0x69,
0xa8, 0x63, 0x24, 0xa9, 0xe3, 0x75, 0x80, 0x54, 0x26, 0x8c, 0x5f, 0xe0, 0x79, 0x79, 0xc3, 0xd8,
0xb4, 0x5a, 0x05, 0xcf, 0xd2, 0xb4, 0x33, 0x12, 0xed, 0x55, 0xa0, 0x34, 0x20, 0x91, 0xfb, 0x67,
0x03, 0xac, 0x3f, 0x64, 0x34, 0x19, 0xb6, 0xf9, 0xb9, 0x70, 0x1c, 0x28, 0x4b, 0x11, 0x7f, 0x44,
0x63, 0x4a, 0x1e, 0xae, 0x9d, 0x75, 0xa8, 0xf7, 0xa9, 0x4c, 0x58, 0xe0, 0xcb, 0x61, 0x4c, 0x51,
0x95, 0xe5, 0x81, 0x26, 0x9d, 0x0e, 0x63, 0xea, 0xfc, 0x14, 0x56, 0x52, 0x4a, 0x92, 0xa0, 0xe7,
0xc7, 0x24, 0x21, 0xfd, 0x54, 0x6b, 0xf3, 0x1a, 0x9a, 0xd8, 0x41, 0x9a, 0x62, 0x4a, 0x44, 0xc6,
0x43, 0x3f, 0xa4, 0x01, 0xeb, 0x93, 0x68, 0xad, 0x82, 0x2a, 0x1a, 0x48, 0x3c, 0xd0, 0x34, 0xf7,
0xff, 0x06, 0xc0, 0xbe, 0x88, 0xb2, 0x3e, 0x47, 0x6b, 0x6e, 0x83, 0x79, 0xce, 0x68, 0x14, 0xfa,
0x2c, 0xcc, 0x2d, 0xaa, 0xe1, 0xbe, 0x1d, 0x3a, 0xaf, 0xc0, 0x0a, 0x89, 0x24, 0xda, 0x24, 0x15,
0x9c, 0xe6, 0x2f, 0xef, 0x6d, 0xcd, 0xc4, 0x3f, 0x8f, 0xfc, 0x01, 0x91, 0x44, 0x59, 0xe9, 0x99,
0x61, 0xbe, 0x72, 0x1e, 0x40, 0x93, 0xa5, 0x7e, 0x9c, 0xb0, 0x3e, 0x49, 0x86, 0xfe, 0x47, 0x3a,
0x44, 0x9f, 0x4c, 0xaf, 0xc1, 0xd2, 0x8e, 0x26, 0xbe, 0xa1, 0x43, 0xe7, 0x2e, 0x58, 0x2c, 0xf5,
0x49, 0x26, 0x45, 0xfb, 0x00, 0x3d, 0x32, 0x3d, 0x93, 0xa5, 0xbb, 0xb8, 0x57, 0x31, 0xe1, 0x34,
0x95, 0x34, 0xf4, 0x63, 0x22, 0x7b, 0x6b, 0x95, 0x8d, 0x92, 0x8a, 0x89, 0x26, 0x75, 0x88, 0xec,
0x39, 0x9b, 0x60, 0x2b, 0x1d, 0x24, 0x91, 0x4c, 0x32, 0xc1, 0x51, 0x4b, 0x15, 0x41, 0x9a, 0x2c,
0xed, 0x8c, 0xc8, 0x6f, 0xe8, 0xd0, 0xfd, 0xdd, 0xc8, 0xe5, 0xc3, 0xcb, 0x38, 0x71, 0x9e, 0x40,
0x99, 0xf1, 0x73, 0x81, 0xee, 0xd6, 0xaf, 0xba, 0x84, 0xb5, 0x36, 0x89, 0x8f, 0x87, 0xac, 0x0a,
0xe0, 0xf0, 0x92, 0xa5, 0x32, 0xfd, 0xae, 0x00, 0x7b, 0x60, 0x61, 0x39, 0xa2, 0xfc, 0xaf, 0xa0,
0x32, 0x50, 0x9b, 0x1c, 0x60, 0x7d, 0x0e, 0xc0, 0x74, 0x09, 0x7b, 0x9a, 0xdb, 0xfd, 0xbb, 0x01,
0xcd, 0x0f, 0x9c, 0x24, 0x43, 0x8f, 0xf0, 0x0b, 0x8d, 0xf4, 0x5b, 0xa8, 0x07, 0xa8, 0xca, 0x5f,
0xde, 0x20, 0x08, 0x26, 0xd9, 0xff, 0x39, 0x14, 0x45, 0x9c, 0xe7, 0xf6, 0xf6, 0x1c, 0xb1, 0x93,
0x18, 0xf3, 0x5a, 0x14, 0xf1, 0xc4, 0xe8, 0xd2, 0x8d, 0x8c, 0xfe, 0x5b, 0x11, 0x56, 0xf7, 0xd8,
0xd7, 0xb5, 0xfa, 0x21, 0xac, 0x46, 0xe2, 0x33, 0x4d, 0x7c, 0xc6, 0x83, 0x28, 0x4b, 0xd9, 0x40,
0x97, 0xa7, 0xe9, 0x35, 0x91, 0xdc, 0x1e, 0x51, 0x15, 0x63, 0x16, 0xc7, 0x33, 0x8c, 0xba, 0x0c,
0x9b, 0x48, 0x9e, 0x30, 0xee, 0x40, 0x5d, 0x23, 0x6a, 0x17, 0xcb, 0xcb, 0xb9, 0x08, 0x28, 0xa3,
0xdb, 0xcc, 0x0e, 0xd4, 0xb5, 0x2a, 0x8d, 0x50, 0x59, 0x12, 0x01, 0x65, 0x70, 0xed, 0xfe, 0xdb,
0x80, 0xfa, 0xbe, 0xe8, 0xc7, 0x24, 0xd1, 0x51, 0x3a, 0x02, 0x3b, 0xa2, 0xe7, 0xd2, 0xbf, 0x71,
0xa8, 0x9a, 0x4a, 0x6c, 0xea, 0x8a, 0xb7, 0xe1, 0x56, 0xc2, 0x2e, 0x7a, 0xb3, 0x48, 0xc5, 0x65,
0x90, 0x56, 0x51, 0x6e, 0xff, 0x6a, 0xbd, 0x94, 0x96, 0xa8, 0x17, 0xf7, 0x4f, 0x06, 0x98, 0xa7,
0x34, 0xe9, 0x7f, 0x95, 0x8c, 0xbf, 0x80, 0x2a, 0xc6, 0x35, 0x5d, 0x2b, 0x6e, 0x94, 0x96, 0x09,
0x6c, 0xce, 0xae, 0x9e, 0x03, 0x0b, 0xef, 0x0c, 0x9a, 0xf1, 0x0c, 0xcd, 0x37, 0xd0, 0xfc, 0x07,
0x73, 0x20, 0xc6, 0x9c, 0x7a, 0x75, 0x12, 0x63, 0xe5, 0x3f, 0x86, 0x4a, 0xd0, 0x63, 0x51, 0x98,
0xc7, 0xec, 0x47, 0x73, 0x04, 0x95, 0x8c, 0xa7, 0xb9, 0xdc, 0x75, 0xa8, 0xe5, 0xd2, 0x4e, 0x1d,
0x6a, 0x6d, 0x3e, 0x20, 0x11, 0x0b, 0xed, 0x82, 0x53, 0x83, 0xd2, 0xb1, 0x90, 0xb6, 0xe1, 0xfe,
0xd7, 0x00, 0xd0, 0x57, 0x02, 0x8d, 0x7a, 0x3e, 0x65, 0xd4, 0xcf, 0xe6, 0x60, 0x4f, 0x58, 0xf3,
0x65, 0x6e, 0xd6, 0x2f, 0xa0, 0xac, 0x12, 0x7d, 0x9d, 0x55, 0xc8, 0xa4, 0x7c, 0xc0, 0x5c, 0xe6,
0xb7, 0x77, 0xb1, 0x0f, 0xc8, 0xe5, 0x3e, 0x07, 0x73, 0xa4, 0x6b, 0xd6, 0x89, 0x26, 0xc0, 0x5b,
0x71, 0xc1, 0x02, 0x12, 0xed, 0xf2, 0xd0, 0x36, 0x9c, 0x15, 0xb0, 0xf2, 0xfd, 0x49, 0x62, 0x17,
0xdd, 0xff, 0x18, 0xb0, 0xa2, 0x05, 0x77, 0x13, 0x26, 0x7b, 0x27, 0xf1, 0xf7, 0xce, 0xfc, 0x4b,
0x30, 0x89, 0x82, 0xf2, 0xc7, 0x7d, 0xea, 0xfe, 0x1c, 0xe1, 0x5c, 0x1b, 0x16, 0x5f, 0x8d, 0xe4,
0xaa, 0x0f, 0x60, 0x45, 0xd7, 0xbd, 0x88, 0x69, 0x42, 0x78, 0xb8, 0x6c, 0xe7, 0x6a, 0xa0, 0xd4,
0x89, 0x16, 0x72, 0xff, 0x6a, 0x8c, 0x1a, 0x18, 0x2a, 0xc1, 0x94, 0x8d, 0x42, 0x6f, 0xdc, 0x28,
0xf4, 0xc5, 0x65, 0x42, 0xef, 0x6c, 0x4d, 0x5d, 0xb1, 0xeb, 0x5c, 0x55, 0xf7, 0xec, 0x5f, 0x45,
0xb8, 0x33, 0x13, 0xf2, 0xc3, 0x01, 0x89, 0xbe, 0x5e, 0xaf, 0xfd, 0xa1, 0xe3, 0x9f, 0xb7, 0x9c,
0xf2, 0x8d, 0x9e, 0xa8, 0xca, 0x8d, 0x9e, 0xa8, 0x7f, 0x56, 0xa1, 0x8c, 0xb1, 0x7a, 0x05, 0x96,
0xa4, 0x49, 0xdf, 0xa7, 0x97, 0x71, 0x92, 0x47, 0xea, 0xee, 0x1c, 0x8c, 0x51, 0x57, 0x53, 0xb3,
0xa0, 0x1c, 0x75, 0xb8, 0xd7, 0x00, 0x99, 0x4a, 0x82, 0x16, 0xd6, 0xa9, 0xfe, 0xf1, 0x97, 0x5a,
0x8c, 0x9a, 0x14, 0xb3, 0x71, 0x13, 0xd8, 0x81, 0x7a, 0x97, 0x4d, 0xe4, 0x4b, 0x0b, 0xd3, 0x34,
0xe9, 0x06, 0xad, 0x82, 0x07, 0xdd, 0x49, 0x1b, 0xd9, 0x87, 0x46, 0xa0, 0x5f, 0x0f, 0x0d, 0xa1,
0xdf, 0xb0, 0xfb, 0x73, 0x33, 0x3d, 0x7e, 0x64, 0x5a, 0x05, 0xaf, 0x1e, 0x4c, 0xbd, 0x39, 0xef,
0xc0, 0xd6, 0x5e, 0x24, 0xaa, 0x80, 0x34, 0x90, 0x0e, 0xe6, 0x4f, 0x16, 0xf9, 0x32, 0x2e, 0xb5,
0x56, 0xc1, 0x6b, 0x66, 0xb3, 0x0f, 0x7d, 0x07, 0x6e, 0xe5, 0x5e, 0x4d, 0xe1, 0x55, 0x11, 0xcf,
0x5d, 0xe8, 0xdb, 0x34, 0xe0, 0x6a, 0xf7, 0xca, 0xe8, 0x20, 0x61, 0x3d, 0x47, 0x1c, 0x55, 0xa5,
0x4f, 0x07, 0x24, 0x9a, 0xc6, 0xaf, 0x21, 0xfe, 0xe3, 0x85, 0xf8, 0xf3, 0xae, 0x49, 0xab, 0xe0,
0xdd, 0xe9, 0x2e, 0xbe, 0x44, 0x13, 0x3f, 0xb4, 0x56, 0xd4, 0x63, 0x5e, 0xe3, 0xc7, 0xb8, 0x5d,
0x4c, 0xfc, 0x98, 0x74, 0x90, 0xd7, 0x00, 0x58, 0x7c, 0x1a, 0xca, 0x5a, 0x58, 0x2e, 0xe3, 0xa1,
0x51, 0x95, 0xcb, 0x60, 0x3c, 0x41, 0xee, 0x8c, 0x6f, 0x35, 0xca, 0xc3, 0x35, 0xb7, 0x7a, 0x54,
0x2e, 0xc1, 0x64, 0x08, 0xde, 0x81, 0x3a, 0xc5, 0x89, 0x56, 0x23, 0xd4, 0x17, 0x22, 0x4c, 0xe6,
0x5e, 0x85, 0x40, 0xc7, 0xbb, 0xbd, 0x2a, 0x94, 0x95, 0xa8, 0xfb, 0x3f, 0x03, 0xe0, 0x8c, 0x06,
0x52, 0x24, 0xbb, 0xc7, 0xc7, 0xef, 0xf3, 0x99, 0x5e, 0xfb, 0xab, 0x3f, 0x5c, 0x6a, 0xa6, 0xd7,
0x21, 0x99, 0xf9, 0x6d, 0x14, 0x67, 0x7f, 0x1b, 0x2f, 0x00, 0xe2, 0x84, 0x86, 0x2c, 0x20, 0x92,
0xa6, 0xd7, 0x3d, 0x53, 0x53, 0xac, 0xce, 0x6f, 0x00, 0x3e, 0xa9, 0xcf, 0x95, 0x6e, 0x70, 0xe5,
0x85, 0xa1, 0x1c, 0xff, 0xc0, 0x3c, 0xeb, 0xd3, 0xf8, 0x33, 0xf6, 0x10, 0x56, 0xe3, 0x88, 0x04,
0xb4, 0x27, 0xa2, 0x90, 0x26, 0xbe, 0x24, 0x17, 0x58, 0xef, 0x96, 0xd7, 0x9c, 0x22, 0x9f, 0x92,
0x0b, 0x37, 0x80, 0x15, 0x04, 0xe8, 0x44, 0x84, 0x1f, 0x8b, 0x90, 0x5e, 0xb1, 0xd7, 0x58, 0xde,
0xde, 0xdb, 0x60, 0xb2, 0xd4, 0x0f, 0x44, 0xc6, 0x65, 0x3e, 0xb6, 0xd6, 0x58, 0xba, 0xaf, 0xb6,
0xee, 0x37, 0x06, 0x98, 0x63, 0x05, 0x3b, 0x50, 0x1f, 0x60, 0x58, 0x7d, 0xc2, 0x79, 0xfa, 0x85,
0xce, 0x3d, 0x09, 0xbe, 0xca, 0x90, 0x96, 0xd9, 0xe5, 0x3c, 0x75, 0x5e, 0xce, 0x98, 0xf8, 0xe5,
0xe7, 0x47, 0x89, 0x4e, 0x19, 0xf9, 0x6b, 0xa8, 0x60, 0x90, 0xf2, 0x78, 0x6e, 0x2c, 0x8a, 0xe7,
0xc8, 0xda, 0x56, 0xc1, 0xd3, 0x02, 0xea, 0x57, 0x26, 0x32, 0x19, 0x67, 0xd2, 0x1f, 0x65, 0x5a,
0x65, 0xb3, 0xb4, 0x59, 0xf2, 0x9a, 0x9a, 0xfe, 0x7b, 0x9d, 0xf0, 0x54, 0x15, 0x10, 0x17, 0x21,
0x7d, 0xf4, 0x0f, 0x03, 0xaa, 0xba, 0x8b, 0xcf, 0xce, 0x1a, 0xab, 0x50, 0x3f, 0x4a, 0x28, 0x91,
0x34, 0x39, 0xed, 0x11, 0x6e, 0x1b, 0x8e, 0x0d, 0x8d, 0x9c, 0x70, 0xf8, 0x29, 0x23, 0x91, 0x5d,
0x74, 0x1a, 0x60, 0xbe, 0xa5, 0x69, 0x8a, 0xe7, 0x25, 0x1c, 0x46, 0x68, 0x9a, 0xea, 0xc3, 0xb2,
0x63, 0x41, 0x45, 0x2f, 0x2b, 0x8a, 0xef, 0x58, 0x48, 0xbd, 0xab, 0x2a, 0xe0, 0x4e, 0x42, 0xcf,
0xd9, 0xe5, 0x3b, 0x22, 0x83, 0x9e, 0x5d, 0x53, 0xc0, 0x1d, 0x91, 0xca, 0x31, 0xc5, 0x54, 0xb2,
0x7a, 0x69, 0xa9, 0x25, 0x76, 0x02, 0x1b, 0x9c, 0x2a, 0x14, 0xdb, 0xdc, 0xae, 0x2b, 0xd2, 0xb1,
0x90, 0x6d, 0x6e, 0x37, 0x1e, 0x1d, 0x41, 0x7d, 0xea, 0xf1, 0x53, 0x0e, 0x7c, 0xe0, 0x1f, 0xb9,
0xf8, 0xcc, 0xf5, 0xc4, 0xb7, 0x1b, 0xaa, 0x29, 0xa9, 0x06, 0xa5, 0xf7, 0x59, 0xd7, 0x2e, 0xaa,
0xc5, 0xbb, 0x2c, 0xb2, 0x4b, 0x6a, 0x71, 0xc0, 0x06, 0x76, 0x19, 0x29, 0x22, 0xb4, 0x2b, 0x7b,
0x4f, 0xff, 0xf8, 0xe4, 0x82, 0xc9, 0x5e, 0xd6, 0xdd, 0x0a, 0x44, 0x7f, 0x5b, 0x87, 0xfb, 0x31,
0x13, 0xf9, 0x6a, 0x9b, 0x71, 0x49, 0x13, 0x4e, 0xa2, 0x6d, 0xcc, 0xc0, 0xb6, 0xca, 0x40, 0xdc,
0xed, 0x56, 0x71, 0xf7, 0xf4, 0xdb, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa0, 0x9a, 0xbc, 0xa6, 0x23,
0x11, 0x00, 0x00,
// 1542 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xcd, 0x72, 0xdc, 0x4a,
0x15, 0x1e, 0xcd, 0xaf, 0x74, 0x34, 0x1e, 0x2b, 0xda, 0xe0, 0x24, 0xdc, 0xd8, 0x88, 0x5b, 0x5c,
0x73, 0xa9, 0xd8, 0x75, 0xb9, 0x97, 0x84, 0x84, 0x0a, 0xf8, 0x37, 0x9e, 0xa9, 0x24, 0xf6, 0xa0,
0x38, 0x5e, 0xb0, 0x51, 0xf5, 0x48, 0x6d, 0x4f, 0x57, 0x34, 0xdd, 0x8a, 0xd4, 0x9a, 0x78, 0x5e,
0x81, 0x1d, 0x0f, 0xc0, 0x8a, 0x05, 0x7b, 0x96, 0x14, 0x55, 0xbc, 0x00, 0x0b, 0x96, 0xec, 0x79,
0x02, 0x8a, 0x17, 0xa0, 0xfa, 0xb4, 0xe6, 0xcf, 0x35, 0x13, 0x8f, 0x21, 0x55, 0xec, 0xba, 0x4f,
0x9f, 0xf3, 0x9d, 0xdf, 0x3e, 0x7d, 0x1a, 0x20, 0x89, 0x09, 0xdf, 0x49, 0x52, 0x21, 0x85, 0x7b,
0x6f, 0xc0, 0xe2, 0x61, 0x9e, 0xe9, 0xdd, 0x8e, 0x3a, 0x78, 0xd0, 0xcc, 0xc2, 0x3e, 0x1d, 0x10,
0x4d, 0xf2, 0x7e, 0x67, 0x40, 0xf3, 0x84, 0x72, 0x9a, 0xb2, 0xf0, 0x82, 0xc4, 0x39, 0x75, 0x1f,
0x82, 0xd9, 0x13, 0x22, 0x0e, 0x86, 0x24, 0xde, 0x30, 0xb6, 0x8c, 0x6d, 0xb3, 0x5d, 0xf2, 0x1b,
0x8a, 0x72, 0x41, 0x62, 0xf7, 0x0b, 0xb0, 0x18, 0x97, 0x4f, 0xbe, 0xc3, 0xd3, 0xf2, 0x96, 0xb1,
0x5d, 0x69, 0x97, 0x7c, 0x13, 0x49, 0xc5, 0xf1, 0x65, 0x2c, 0x88, 0xc4, 0xe3, 0xca, 0x96, 0xb1,
0x6d, 0xa8, 0x63, 0x24, 0xa9, 0xe3, 0x4d, 0x80, 0x4c, 0xa6, 0x8c, 0x5f, 0xe1, 0x79, 0x75, 0xcb,
0xd8, 0xb6, 0xda, 0x25, 0xdf, 0xd2, 0xb4, 0x0b, 0x12, 0x1f, 0xd4, 0xa0, 0x32, 0x24, 0xb1, 0xf7,
0x5b, 0x03, 0xac, 0x5f, 0xe7, 0x34, 0x1d, 0x75, 0xf8, 0xa5, 0x70, 0x5d, 0xa8, 0x4a, 0x91, 0xbc,
0x47, 0x63, 0x2a, 0x3e, 0xae, 0xdd, 0x4d, 0xb0, 0x07, 0x54, 0xa6, 0x2c, 0x0c, 0xe4, 0x28, 0xa1,
0xa8, 0xca, 0xf2, 0x41, 0x93, 0xce, 0x47, 0x09, 0x75, 0x7f, 0x08, 0x6b, 0x19, 0x25, 0x69, 0xd8,
0x0f, 0x12, 0x92, 0x92, 0x41, 0xa6, 0xb5, 0xf9, 0x4d, 0x4d, 0xec, 0x22, 0x4d, 0x31, 0xa5, 0x22,
0xe7, 0x51, 0x10, 0xd1, 0x90, 0x0d, 0x48, 0xbc, 0x51, 0x43, 0x15, 0x4d, 0x24, 0x1e, 0x69, 0x9a,
0xf7, 0x2f, 0x03, 0xe0, 0x50, 0xc4, 0xf9, 0x80, 0xa3, 0x35, 0xf7, 0xc1, 0xbc, 0x64, 0x34, 0x8e,
0x02, 0x16, 0x15, 0x16, 0x35, 0x70, 0xdf, 0x89, 0xdc, 0xe7, 0x60, 0x45, 0x44, 0x12, 0x6d, 0x92,
0x0a, 0x4e, 0xeb, 0xa7, 0x5f, 0xec, 0xcc, 0xc5, 0xbf, 0x88, 0xfc, 0x11, 0x91, 0x44, 0x59, 0xe9,
0x9b, 0x51, 0xb1, 0x72, 0xbf, 0x84, 0x16, 0xcb, 0x82, 0x24, 0x65, 0x03, 0x92, 0x8e, 0x82, 0xf7,
0x74, 0x84, 0x3e, 0x99, 0x7e, 0x93, 0x65, 0x5d, 0x4d, 0x7c, 0x45, 0x47, 0xee, 0x43, 0xb0, 0x58,
0x16, 0x90, 0x5c, 0x8a, 0xce, 0x11, 0x7a, 0x64, 0xfa, 0x26, 0xcb, 0xf6, 0x71, 0xaf, 0x62, 0xc2,
0x69, 0x26, 0x69, 0x14, 0x24, 0x44, 0xf6, 0x37, 0x6a, 0x5b, 0x15, 0x15, 0x13, 0x4d, 0xea, 0x12,
0xd9, 0x77, 0xb7, 0xc1, 0x51, 0x3a, 0x48, 0x2a, 0x99, 0x64, 0x82, 0xa3, 0x96, 0x3a, 0x82, 0xb4,
0x58, 0xd6, 0x1d, 0x93, 0x5f, 0xd1, 0x91, 0xf7, 0xab, 0xb1, 0xcb, 0xc7, 0xd7, 0x49, 0xea, 0x7e,
0x03, 0x55, 0xc6, 0x2f, 0x05, 0xba, 0x6b, 0xdf, 0x74, 0x09, 0x6b, 0x6d, 0x1a, 0x1f, 0x1f, 0x59,
0x15, 0xc0, 0xf1, 0x35, 0xcb, 0x64, 0xf6, 0xdf, 0x02, 0x1c, 0x80, 0x85, 0xe5, 0x88, 0xf2, 0x3f,
0x83, 0xda, 0x50, 0x6d, 0x0a, 0x80, 0xcd, 0x05, 0x00, 0xb3, 0x25, 0xec, 0x6b, 0x6e, 0xef, 0x4f,
0x06, 0xb4, 0xde, 0x71, 0x92, 0x8e, 0x7c, 0xc2, 0xaf, 0x34, 0xd2, 0x2f, 0xc1, 0x0e, 0x51, 0x55,
0xb0, 0xba, 0x41, 0x10, 0x4e, 0xb3, 0xff, 0x63, 0x28, 0x8b, 0xa4, 0xc8, 0xed, 0xfd, 0x05, 0x62,
0x67, 0x09, 0xe6, 0xb5, 0x2c, 0x92, 0xa9, 0xd1, 0x95, 0x3b, 0x19, 0xfd, 0xc7, 0x32, 0xac, 0x1f,
0xb0, 0xcf, 0x6b, 0xf5, 0x57, 0xb0, 0x1e, 0x8b, 0x8f, 0x34, 0x0d, 0x18, 0x0f, 0xe3, 0x3c, 0x63,
0x43, 0x5d, 0x9e, 0xa6, 0xdf, 0x42, 0x72, 0x67, 0x4c, 0x55, 0x8c, 0x79, 0x92, 0xcc, 0x31, 0xea,
0x32, 0x6c, 0x21, 0x79, 0xca, 0xb8, 0x07, 0xb6, 0x46, 0xd4, 0x2e, 0x56, 0x57, 0x73, 0x11, 0x50,
0x46, 0xb7, 0x99, 0x3d, 0xb0, 0xb5, 0x2a, 0x8d, 0x50, 0x5b, 0x11, 0x01, 0x65, 0x70, 0xed, 0xfd,
0xcd, 0x00, 0xfb, 0x50, 0x0c, 0x12, 0x92, 0xea, 0x28, 0x9d, 0x80, 0x13, 0xd3, 0x4b, 0x19, 0xdc,
0x39, 0x54, 0x2d, 0x25, 0x36, 0x73, 0xc5, 0x3b, 0x70, 0x2f, 0x65, 0x57, 0xfd, 0x79, 0xa4, 0xf2,
0x2a, 0x48, 0xeb, 0x28, 0x77, 0x78, 0xb3, 0x5e, 0x2a, 0x2b, 0xd4, 0x8b, 0xf7, 0x07, 0x03, 0xcc,
0x73, 0x9a, 0x0e, 0x3e, 0x4b, 0xc6, 0x9f, 0x42, 0x1d, 0xe3, 0x9a, 0x6d, 0x94, 0xb7, 0x2a, 0xab,
0x04, 0xb6, 0x60, 0x77, 0x1f, 0x81, 0xcd, 0xb2, 0x80, 0xf1, 0x00, 0x9b, 0x5a, 0x91, 0x7d, 0x8b,
0x65, 0x1d, 0xfe, 0x52, 0x11, 0xd4, 0x73, 0x61, 0xe1, 0x9d, 0x42, 0x33, 0xbf, 0x43, 0xf7, 0x0c,
0x74, 0xef, 0xcb, 0x05, 0x2a, 0x26, 0x9c, 0x7a, 0x75, 0x96, 0xe0, 0xcd, 0x78, 0x0c, 0xb5, 0xb0,
0xcf, 0xe2, 0xa8, 0x88, 0xe9, 0xf7, 0x16, 0x08, 0x2a, 0x19, 0x5f, 0x73, 0x79, 0x9b, 0xd0, 0x28,
0xa4, 0x5d, 0x1b, 0x1a, 0x1d, 0x3e, 0x24, 0x31, 0x8b, 0x9c, 0x92, 0xdb, 0x80, 0xca, 0xa9, 0x90,
0x8e, 0xe1, 0xfd, 0xc3, 0x00, 0xd0, 0x57, 0x06, 0x8d, 0x7a, 0x32, 0x63, 0xd4, 0x8f, 0x16, 0x60,
0x4f, 0x59, 0x8b, 0x65, 0x61, 0xd6, 0x4f, 0xa0, 0xaa, 0x0a, 0xe1, 0x36, 0xab, 0x90, 0x49, 0xf9,
0x80, 0xb9, 0x2e, 0x6e, 0xf7, 0x72, 0x1f, 0x90, 0xcb, 0x7b, 0x02, 0xe6, 0x58, 0xd7, 0xbc, 0x13,
0x2d, 0x80, 0xd7, 0xe2, 0x8a, 0x85, 0x24, 0xde, 0xe7, 0x91, 0x63, 0xb8, 0x6b, 0x60, 0x15, 0xfb,
0xb3, 0xd4, 0x29, 0x7b, 0x7f, 0x37, 0x60, 0x4d, 0x0b, 0xee, 0xa7, 0x4c, 0xf6, 0xcf, 0x92, 0xff,
0xb9, 0x32, 0x9e, 0x81, 0x49, 0x14, 0x54, 0x30, 0xe9, 0x63, 0x8f, 0x16, 0x08, 0x17, 0xda, 0xb0,
0x38, 0x1b, 0xa4, 0x50, 0x7d, 0x04, 0x6b, 0xfa, 0x5e, 0x88, 0x84, 0xa6, 0x84, 0x47, 0xab, 0x76,
0xb6, 0x26, 0x4a, 0x9d, 0x69, 0x21, 0xef, 0xf7, 0xc6, 0xb8, 0xc1, 0xa1, 0x12, 0x4c, 0xd9, 0x38,
0xf4, 0xc6, 0x9d, 0x42, 0x5f, 0x5e, 0x25, 0xf4, 0xee, 0xce, 0xcc, 0x15, 0xbc, 0xcd, 0x55, 0x75,
0x0f, 0xff, 0x5a, 0x86, 0x07, 0x73, 0x21, 0x3f, 0x1e, 0x92, 0xf8, 0xf3, 0xf5, 0xe2, 0xff, 0x77,
0xfc, 0x8b, 0x96, 0x54, 0xbd, 0xd3, 0x13, 0x56, 0xbb, 0xd3, 0x13, 0xf6, 0x97, 0x3a, 0x54, 0x31,
0x56, 0xcf, 0xc1, 0x92, 0x34, 0x1d, 0x04, 0xf4, 0x3a, 0x49, 0x8b, 0x48, 0x3d, 0x5c, 0x80, 0x31,
0xee, 0x7a, 0x6a, 0x56, 0x94, 0xe3, 0x0e, 0xf8, 0x02, 0x20, 0x57, 0x49, 0xd0, 0xc2, 0x3a, 0xd5,
0xdf, 0xff, 0x54, 0x8b, 0x51, 0x93, 0x64, 0x3e, 0x69, 0x02, 0x7b, 0x60, 0xf7, 0xd8, 0x54, 0xbe,
0xb2, 0x34, 0x4d, 0xd3, 0x6e, 0xd0, 0x2e, 0xf9, 0xd0, 0x9b, 0xb6, 0x91, 0x43, 0x68, 0x86, 0xfa,
0x75, 0xd1, 0x10, 0xfa, 0x8d, 0x7b, 0xb4, 0x30, 0xd3, 0x93, 0x47, 0xa8, 0x5d, 0xf2, 0xed, 0x70,
0xe6, 0x4d, 0x7a, 0x03, 0x8e, 0xf6, 0x22, 0x55, 0x05, 0xa4, 0x81, 0x74, 0x30, 0x7f, 0xb0, 0xcc,
0x97, 0x49, 0xa9, 0xb5, 0x4b, 0x7e, 0x2b, 0x9f, 0x1f, 0x04, 0xba, 0x70, 0xaf, 0xf0, 0x6a, 0x06,
0xaf, 0x8e, 0x78, 0xde, 0x52, 0xdf, 0x66, 0x01, 0xd7, 0x7b, 0x37, 0x46, 0x0b, 0x09, 0x9b, 0x05,
0xe2, 0xb8, 0x2a, 0x03, 0x3a, 0x24, 0xf1, 0x2c, 0x7e, 0x03, 0xf1, 0x1f, 0x2f, 0xc5, 0x5f, 0x74,
0x4d, 0xda, 0x25, 0xff, 0x41, 0x6f, 0xf9, 0x25, 0x9a, 0xfa, 0xa1, 0xb5, 0xa2, 0x1e, 0xf3, 0x16,
0x3f, 0x26, 0xed, 0x62, 0xea, 0xc7, 0xb4, 0x83, 0xbc, 0x00, 0xc0, 0xe2, 0xd3, 0x50, 0xd6, 0xd2,
0x72, 0x99, 0x0c, 0x95, 0xaa, 0x5c, 0x86, 0x93, 0x09, 0x73, 0x6f, 0x72, 0xab, 0x51, 0x1e, 0x6e,
0xb9, 0xd5, 0xe3, 0x72, 0x09, 0xa7, 0x43, 0xf2, 0x1e, 0xd8, 0x14, 0x27, 0x5e, 0x8d, 0x60, 0x2f,
0x45, 0x98, 0xce, 0xc5, 0x0a, 0x81, 0x4e, 0x76, 0x07, 0x75, 0xa8, 0x2a, 0x51, 0xef, 0x9f, 0x06,
0xc0, 0x05, 0x0d, 0xa5, 0x48, 0xf7, 0x4f, 0x4f, 0xdf, 0x16, 0x33, 0xbf, 0xf6, 0x57, 0x7f, 0xc8,
0xd4, 0xcc, 0xaf, 0x43, 0x32, 0xf7, 0x1b, 0x29, 0xcf, 0xff, 0x46, 0x9e, 0x02, 0x24, 0x29, 0x8d,
0x58, 0x48, 0x24, 0xcd, 0x6e, 0x7b, 0xa6, 0x66, 0x58, 0xdd, 0x5f, 0x00, 0x7c, 0x50, 0x9f, 0x2f,
0xdd, 0xe0, 0xaa, 0x4b, 0x43, 0x39, 0xf9, 0xa1, 0xf9, 0xd6, 0x87, 0xc9, 0x67, 0xed, 0x2b, 0x58,
0x4f, 0x62, 0x12, 0xd2, 0xbe, 0x88, 0x23, 0x9a, 0x06, 0x92, 0x5c, 0x61, 0xbd, 0x5b, 0x7e, 0x6b,
0x86, 0x7c, 0x4e, 0xae, 0xbc, 0x10, 0xd6, 0x10, 0xa0, 0x1b, 0x13, 0x7e, 0x2a, 0x22, 0x7a, 0xc3,
0x5e, 0x63, 0x75, 0x7b, 0xef, 0x83, 0xc9, 0xb2, 0x20, 0x14, 0x39, 0x97, 0xc5, 0x58, 0xdb, 0x60,
0xd9, 0xa1, 0xda, 0x7a, 0xff, 0x36, 0xc0, 0x9c, 0x28, 0xd8, 0x03, 0x7b, 0x88, 0x61, 0x0d, 0x08,
0xe7, 0xd9, 0x27, 0x3a, 0xf7, 0x34, 0xf8, 0x2a, 0x43, 0x5a, 0x66, 0x9f, 0xf3, 0xcc, 0x7d, 0x36,
0x67, 0xe2, 0xa7, 0x9f, 0x1f, 0x25, 0x3a, 0x63, 0xe4, 0xcf, 0xa1, 0x86, 0x41, 0x2a, 0xe2, 0xb9,
0xb5, 0x2c, 0x9e, 0x63, 0x6b, 0xdb, 0x25, 0x5f, 0x0b, 0xa8, 0x5f, 0x9b, 0xc8, 0x65, 0x92, 0xcb,
0x60, 0x9c, 0x69, 0x95, 0xcd, 0xca, 0x76, 0xc5, 0x6f, 0x69, 0xfa, 0x4b, 0x9d, 0xf0, 0x4c, 0x15,
0x10, 0x17, 0x11, 0xfd, 0xfa, 0xcf, 0x06, 0xd4, 0x75, 0x17, 0x9f, 0x9f, 0x35, 0xd6, 0xc1, 0x3e,
0x49, 0x29, 0x91, 0x34, 0x3d, 0xef, 0x13, 0xee, 0x18, 0xae, 0x03, 0xcd, 0x82, 0x70, 0xfc, 0x21,
0x27, 0xb1, 0x53, 0x76, 0x9b, 0x60, 0xbe, 0xa6, 0x59, 0x86, 0xe7, 0x15, 0x1c, 0x46, 0x68, 0x96,
0xe9, 0xc3, 0xaa, 0x6b, 0x41, 0x4d, 0x2f, 0x6b, 0x8a, 0xef, 0x54, 0x48, 0xbd, 0xab, 0x2b, 0xe0,
0x6e, 0x4a, 0x2f, 0xd9, 0xf5, 0x1b, 0x22, 0xc3, 0xbe, 0xd3, 0x50, 0xc0, 0x5d, 0x91, 0xc9, 0x09,
0xc5, 0x54, 0xb2, 0x7a, 0x69, 0xa9, 0x25, 0x76, 0x02, 0x07, 0xdc, 0x3a, 0x94, 0x3b, 0xdc, 0xb1,
0x15, 0xe9, 0x54, 0xc8, 0x0e, 0x77, 0x9a, 0x5f, 0x9f, 0x80, 0x3d, 0xf3, 0xf8, 0x29, 0x07, 0xde,
0xf1, 0xf7, 0x5c, 0x7c, 0xe4, 0x7a, 0xe2, 0xdb, 0x8f, 0xd4, 0x94, 0xd4, 0x80, 0xca, 0xdb, 0xbc,
0xe7, 0x94, 0xd5, 0xe2, 0x4d, 0x1e, 0x3b, 0x15, 0xb5, 0x38, 0x62, 0x43, 0xa7, 0x8a, 0x14, 0x11,
0x39, 0xb5, 0x83, 0x6f, 0x7f, 0xf3, 0xcd, 0x15, 0x93, 0xfd, 0xbc, 0xb7, 0x13, 0x8a, 0xc1, 0xae,
0x0e, 0xf7, 0x63, 0x26, 0x8a, 0xd5, 0x2e, 0xe3, 0x92, 0xa6, 0x9c, 0xc4, 0xbb, 0x98, 0x81, 0x5d,
0x95, 0x81, 0xa4, 0xd7, 0xab, 0xe3, 0xee, 0xdb, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x85,
0x01, 0x1b, 0x43, 0x11, 0x00, 0x00,
}