[ASTERIXDB-2488][COMP] Support aggregate window functions
- user model changes: yes
- storage format changes: no
- interface changes: no
Details:
- Implement aggregate window functions:
agg_func() OVER (frame_var AS)? (PARTITION BY ... ORDER BY ... frame_spec)
- Where agg_func is a SQL/SQL++ aggregate function
- Fix percent_rank() to always return 0 for the first tuple
- Fix ntile() to handle NULL argument
- Log query after each rewrite rule in SqlppQueryRewriter
- Implement toString() for ADayTimeDuration, fix it for AYearMonthDuration
- Add seek() method to RunFileReader
Change-Id: If0f71118a04c2dbd3462070673d52e67f076b7e1
Reviewed-on: https://asterix-gerrit.ics.uci.edu/3049
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
diff --git a/asterixdb/LICENSE b/asterixdb/LICENSE
index 7d7f90a..442228a 100644
--- a/asterixdb/LICENSE
+++ b/asterixdb/LICENSE
@@ -674,4 +674,36 @@
such warranty or additional liability.
END OF TERMS AND CONDITIONS
---
+ Portions of the AsterixDB tests
+ located at:
+ asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/*,
+ and
+ asterix-app/data/tenk.tbl
+
+ are available under PostgreSQL License:
+---
+ PostgreSQL Database Management System
+ (formerly known as Postgres, then as Postgres95)
+
+ Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+
+ Portions Copyright (c) 1994, The Regents of the University of California
+
+ Permission to use, copy, modify, and distribute this software and its
+ documentation for any purpose, without fee, and without a written agreement
+ is hereby granted, provided that the above copyright notice and this
+ paragraph and the following two paragraphs appear in all copies.
+
+ IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+ LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+ DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
+ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+---
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
index d0107c0..3678826 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForFunctionArgumentsRule.java
@@ -59,6 +59,7 @@
addFunctionAndArgChecker(BuiltinFunctions.IF_MISSING, null);
addFunctionAndArgChecker(BuiltinFunctions.IF_NULL, null);
addFunctionAndArgChecker(BuiltinFunctions.IF_MISSING_OR_NULL, null);
+ addFunctionAndArgChecker(BuiltinFunctions.IF_SYSTEM_NULL, null);
}
// allows the rule to check other functions in addition to the ones specified here
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
index fdebd14..4d1d532 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
@@ -363,19 +363,22 @@
LogicalVariable var = ((VariableReferenceExpression) orderExpr).getVariableReference();
orderColumns.add(new OrderColumn(var, p.first.getKind()));
}
- boolean partitionMaterialization = false;
- for (Mutable<ILogicalExpression> exprRef : winOp.getExpressions()) {
- ILogicalExpression expr = exprRef.getValue();
- if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, winOp.getSourceLocation(),
- expr.getExpressionTag());
- }
- AbstractFunctionCallExpression callExpr = (AbstractFunctionCallExpression) expr;
- if (BuiltinFunctions.windowFunctionRequiresMaterialization(callExpr.getFunctionIdentifier())) {
- partitionMaterialization = true;
- break;
+ boolean partitionMaterialization = winOp.hasNestedPlans();
+ if (!partitionMaterialization) {
+ for (Mutable<ILogicalExpression> exprRef : winOp.getExpressions()) {
+ ILogicalExpression expr = exprRef.getValue();
+ if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, winOp.getSourceLocation(),
+ expr.getExpressionTag());
+ }
+ AbstractFunctionCallExpression callExpr = (AbstractFunctionCallExpression) expr;
+ if (BuiltinFunctions.windowFunctionRequiresMaterialization(callExpr.getFunctionIdentifier())) {
+ partitionMaterialization = true;
+ break;
+ }
}
}
+
return new WindowPOperator(partitionColumns, partitionMaterialization, orderColumns);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
index a4250c0..405ff73 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
@@ -322,11 +322,40 @@
for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getOrderExpressions()) {
sweepExpression(p.second.getValue(), op);
}
- for (Mutable<ILogicalExpression> me : op.getExpressions()) {
+ for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getFrameValueExpressions()) {
+ sweepExpression(p.second.getValue(), op);
+ }
+ for (Mutable<ILogicalExpression> me : op.getFrameStartExpressions()) {
sweepExpression(me.getValue(), op);
}
+ for (Mutable<ILogicalExpression> me : op.getFrameEndExpressions()) {
+ sweepExpression(me.getValue(), op);
+ }
+ for (Mutable<ILogicalExpression> me : op.getFrameExcludeExpressions()) {
+ sweepExpression(me.getValue(), op);
+ }
+ ILogicalExpression frameOffset = op.getFrameOffset().getValue();
+ if (frameOffset != null) {
+ sweepExpression(frameOffset, op);
+ }
+ for (Mutable<ILogicalExpression> me : op.getExpressions()) {
+ ILogicalExpression expr = me.getValue();
+ if (isStatefulFunctionCall(expr)) {
+ for (Mutable<ILogicalExpression> fcallArg : ((AbstractFunctionCallExpression) expr)
+ .getArguments()) {
+ sweepExpression(fcallArg.getValue(), op);
+ }
+ } else {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, op.getSourceLocation());
+ }
+ }
return null;
}
- }
+ private boolean isStatefulFunctionCall(ILogicalExpression expr) {
+ return expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL
+ && ((AbstractFunctionCallExpression) expr)
+ .getKind() == AbstractFunctionCallExpression.FunctionKind.STATEFUL;
+ }
+ }
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
index c540bbc..f21eb42 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
@@ -354,7 +354,7 @@
op.getInputs().clear();
ILogicalOperator currentOp = op;
if (!orderingExprs.isEmpty()) {
- OrderOperator orderOp = new OrderOperator(cloneOrderingExpression(orderingExprs));
+ OrderOperator orderOp = new OrderOperator(OperatorManipulationUtil.cloneOrderExpressions(orderingExprs));
orderOp.setSourceLocation(sourceLoc);
op.getInputs().add(new MutableObject<>(orderOp));
currentOp = orderOp;
@@ -473,7 +473,7 @@
}
orderingExprs.clear();
- orderingExprs.addAll(cloneOrderingExpression(op.getOrderExpressions()));
+ orderingExprs.addAll(OperatorManipulationUtil.cloneOrderExpressions(op.getOrderExpressions()));
List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprList = new ArrayList<>();
// Adds keyVars to the prefix of sorting columns.
@@ -764,16 +764,6 @@
}
}
- private List<Pair<IOrder, Mutable<ILogicalExpression>>> cloneOrderingExpression(
- List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprs) {
- List<Pair<IOrder, Mutable<ILogicalExpression>>> clonedOrderExprs = new ArrayList<>();
- for (Pair<IOrder, Mutable<ILogicalExpression>> orderExpr : orderExprs) {
- clonedOrderExprs.add(
- new Pair<>(orderExpr.first, new MutableObject<>(orderExpr.second.getValue().cloneExpression())));
- }
- return clonedOrderExprs;
- }
-
private void addPrimaryKeys(Map<LogicalVariable, LogicalVariable> varMap) {
for (Entry<LogicalVariable, LogicalVariable> entry : varMap.entrySet()) {
List<LogicalVariable> dependencyVars = context.findPrimaryKey(entry.getKey());
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index c320bd3..e3745f7 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -909,6 +909,27 @@
private AbstractFunctionCallExpression lookupBuiltinFunction(String functionName, int arity,
List<Mutable<ILogicalExpression>> args, SourceLocation sourceLoc) {
AbstractFunctionCallExpression f;
+ FunctionIdentifier fi = getBuiltinFunctionIdentifier(functionName, arity);
+ if (fi == null) {
+ return null;
+ }
+ if (BuiltinFunctions.isBuiltinAggregateFunction(fi)) {
+ f = BuiltinFunctions.makeAggregateFunctionExpression(fi, args);
+ } else if (BuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
+ UnnestingFunctionCallExpression ufce =
+ new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
+ ufce.setReturnsUniqueValues(BuiltinFunctions.returnsUniqueValues(fi));
+ f = ufce;
+ } else if (BuiltinFunctions.isWindowFunction(fi)) {
+ f = BuiltinFunctions.makeWindowFunctionExpression(fi, args);
+ } else {
+ f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
+ }
+ f.setSourceLocation(sourceLoc);
+ return f;
+ }
+
+ protected FunctionIdentifier getBuiltinFunctionIdentifier(String functionName, int arity) {
FunctionIdentifier fi = new FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionName, arity);
FunctionInfo afi = BuiltinFunctions.lookupFunction(fi);
FunctionIdentifier builtinAquafi = afi == null ? null : afi.getFunctionIdentifier();
@@ -922,20 +943,7 @@
return null;
}
}
- if (BuiltinFunctions.isBuiltinAggregateFunction(fi)) {
- f = BuiltinFunctions.makeAggregateFunctionExpression(fi, args);
- } else if (BuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
- UnnestingFunctionCallExpression ufce =
- new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
- ufce.setReturnsUniqueValues(BuiltinFunctions.returnsUniqueValues(fi));
- f = ufce;
- } else if (BuiltinFunctions.isBuiltinWindowFunction(fi)) {
- f = BuiltinFunctions.makeWindowFunctionExpression(fi, args);
- } else {
- f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
- }
- f.setSourceLocation(sourceLoc);
- return f;
+ return fi;
}
@Override
@@ -950,22 +958,9 @@
Mutable<ILogicalOperator> topOp = tupSource;
LogicalVariable groupRecordVar = null;
if (gc.hasGroupVar()) {
- List<Pair<Expression, Identifier>> groupFieldList = gc.getGroupFieldList();
- List<Mutable<ILogicalExpression>> groupRecordConstructorArgList = new ArrayList<>();
- for (Pair<Expression, Identifier> groupField : groupFieldList) {
- ILogicalExpression groupFieldNameExpr =
- langExprToAlgExpression(new LiteralExpr(new StringLiteral(groupField.second.getValue())),
- topOp).first;
- groupRecordConstructorArgList.add(new MutableObject<>(groupFieldNameExpr));
- ILogicalExpression groupFieldExpr = langExprToAlgExpression(groupField.first, topOp).first;
- groupRecordConstructorArgList.add(new MutableObject<>(groupFieldExpr));
- }
- ScalarFunctionCallExpression groupRecordConstr = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR),
- groupRecordConstructorArgList);
- groupRecordConstr.setSourceLocation(sourceLoc);
-
groupRecordVar = context.newVar();
+ AbstractFunctionCallExpression groupRecordConstr =
+ createRecordConstructor(gc.getGroupFieldList(), topOp, sourceLoc);
AssignOperator groupRecordVarAssignOp =
new AssignOperator(groupRecordVar, new MutableObject<>(groupRecordConstr));
groupRecordVarAssignOp.getInputs().add(topOp);
@@ -981,12 +976,14 @@
gOp.addGbyExpression(v, eo.first);
topOp = eo.second;
}
- for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
- VariableExpr vexpr = ve.getVar();
- LogicalVariable v = vexpr == null ? context.newVar() : context.newVarFromExpression(vexpr);
- Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(ve.getExpr(), topOp);
- gOp.addDecorExpression(v, eo.first);
- topOp = eo.second;
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
+ VariableExpr vexpr = ve.getVar();
+ LogicalVariable v = vexpr == null ? context.newVar() : context.newVarFromExpression(vexpr);
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(ve.getExpr(), topOp);
+ gOp.addDecorExpression(v, eo.first);
+ topOp = eo.second;
+ }
}
gOp.getInputs().add(topOp);
@@ -1026,7 +1023,23 @@
return new Pair<>(gOp, null);
}
- private ILogicalPlan createNestedPlanWithAggregate(LogicalVariable aggOutputVar, FunctionIdentifier aggFunc,
+ protected AbstractFunctionCallExpression createRecordConstructor(List<Pair<Expression, Identifier>> fieldList,
+ Mutable<ILogicalOperator> inputOp, SourceLocation sourceLoc) throws CompilationException {
+ List<Mutable<ILogicalExpression>> args = new ArrayList<>();
+ for (Pair<Expression, Identifier> field : fieldList) {
+ ILogicalExpression fieldNameExpr =
+ langExprToAlgExpression(new LiteralExpr(new StringLiteral(field.second.getValue())), inputOp).first;
+ args.add(new MutableObject<>(fieldNameExpr));
+ ILogicalExpression fieldExpr = langExprToAlgExpression(field.first, inputOp).first;
+ args.add(new MutableObject<>(fieldExpr));
+ }
+ ScalarFunctionCallExpression recordConstr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR), args);
+ recordConstr.setSourceLocation(sourceLoc);
+ return recordConstr;
+ }
+
+ protected ILogicalPlan createNestedPlanWithAggregate(LogicalVariable aggOutputVar, FunctionIdentifier aggFunc,
ILogicalExpression aggFnInput, Mutable<ILogicalOperator> aggOpInput) {
SourceLocation sourceLoc = aggFnInput.getSourceLocation();
AggregateFunctionCallExpression aggFnCall = BuiltinFunctions.makeAggregateFunctionExpression(aggFunc,
@@ -1530,7 +1543,7 @@
return createFunctionCallExpression(fid, sourceLoc);
}
- private static AbstractFunctionCallExpression createFunctionCallExpression(FunctionIdentifier fid,
+ protected static AbstractFunctionCallExpression createFunctionCallExpression(FunctionIdentifier fid,
SourceLocation sourceLoc) {
ScalarFunctionCallExpression callExpr = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fid));
callExpr.setSourceLocation(sourceLoc);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index dfe0208..a99f9d4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -48,6 +48,7 @@
import org.apache.asterix.lang.common.expression.QuantifiedExpression;
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.literal.IntegerLiteral;
import org.apache.asterix.lang.common.literal.StringLiteral;
import org.apache.asterix.lang.common.statement.Query;
import org.apache.asterix.lang.common.struct.OperatorType;
@@ -74,6 +75,7 @@
import org.apache.asterix.lang.sqlpp.optype.SetOpType;
import org.apache.asterix.lang.sqlpp.struct.SetOperationInput;
import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
+import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
import org.apache.asterix.metadata.declared.MetadataProvider;
@@ -91,6 +93,7 @@
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.utils.ListSet;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
@@ -99,11 +102,13 @@
import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractLogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestNonMapOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestOperator;
@@ -120,6 +125,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperator;
import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
+import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.api.exceptions.SourceLocation;
/**
@@ -1027,9 +1033,17 @@
public Pair<ILogicalOperator, LogicalVariable> visit(WindowExpression winExpr, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
SourceLocation sourceLoc = winExpr.getSourceLocation();
+ List<Expression> fargs = winExpr.getExprList();
+
+ FunctionSignature fs = winExpr.getFunctionSignature();
+ FunctionIdentifier fi = getBuiltinFunctionIdentifier(fs.getName(), fs.getArity());
+ boolean isWin = BuiltinFunctions.isWindowFunction(fi);
+ boolean isWinAgg = isWin && BuiltinFunctions.windowFunctionWithListArg(fi);
+ boolean supportsFrameClause = isWin && BuiltinFunctions.windowFunctionSupportsFrameClause(fi);
+
Mutable<ILogicalOperator> currentOpRef = tupSource;
- List<Mutable<ILogicalExpression>> partExprListOut = null;
+ List<Mutable<ILogicalExpression>> partExprListOut = Collections.emptyList();
if (winExpr.hasPartitionList()) {
List<Expression> partExprList = winExpr.getPartitionList();
partExprListOut = new ArrayList<>(partExprList.size());
@@ -1042,57 +1056,489 @@
}
}
- List<Expression> orderExprList = winExpr.getOrderbyList();
- List<OrderbyClause.OrderModifier> orderModifierList = winExpr.getOrderbyModifierList();
- List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprListOut =
- new ArrayList<>(orderExprList.size());
- for (int i = 0, ln = orderExprList.size(); i < ln; i++) {
- Expression orderExpr = orderExprList.get(i);
- OrderbyClause.OrderModifier orderModifier = orderModifierList.get(i);
- Pair<ILogicalOperator, LogicalVariable> orderExprResult = orderExpr.accept(this, currentOpRef);
- VariableReferenceExpression orderExprOut = new VariableReferenceExpression(orderExprResult.second);
- orderExprOut.setSourceLocation(orderExpr.getSourceLocation());
- OrderOperator.IOrder orderModifierOut = translateOrderModifier(orderModifier);
- orderExprListOut.add(new Pair<>(orderModifierOut, new MutableObject<>(orderExprOut)));
- currentOpRef = new MutableObject<>(orderExprResult.first);
+ int orderExprCount = 0;
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprListOut = Collections.emptyList();
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> frameValueExprRefs = null;
+ List<Mutable<ILogicalExpression>> frameStartExprRefs = null;
+ List<Mutable<ILogicalExpression>> frameEndExprRefs = null;
+ List<Mutable<ILogicalExpression>> frameExcludeExprRefs = null;
+ int frameExcludeNotStartIdx = -1;
+
+ if (winExpr.hasOrderByList()) {
+ List<Expression> orderExprList = winExpr.getOrderbyList();
+ List<OrderbyClause.OrderModifier> orderModifierList = winExpr.getOrderbyModifierList();
+ orderExprCount = orderExprList.size();
+ orderExprListOut = new ArrayList<>(orderExprCount);
+ for (int i = 0; i < orderExprCount; i++) {
+ Expression orderExpr = orderExprList.get(i);
+ OrderbyClause.OrderModifier orderModifier = orderModifierList.get(i);
+ Pair<ILogicalOperator, LogicalVariable> orderExprResult = orderExpr.accept(this, currentOpRef);
+ VariableReferenceExpression orderExprOut = new VariableReferenceExpression(orderExprResult.second);
+ orderExprOut.setSourceLocation(orderExpr.getSourceLocation());
+ OrderOperator.IOrder orderModifierOut = translateOrderModifier(orderModifier);
+ orderExprListOut.add(new Pair<>(orderModifierOut, new MutableObject<>(orderExprOut)));
+ currentOpRef = new MutableObject<>(orderExprResult.first);
+ }
+ } else if (winExpr.hasFrameDefinition()) {
+ // frame definition without ORDER BY is not allowed by the grammar
+ throw new CompilationException(ErrorCode.COMPILATION_UNEXPECTED_WINDOW_FRAME, sourceLoc);
}
- Expression expr = winExpr.getExpr();
- Pair<ILogicalOperator, LogicalVariable> exprResult = expr.accept(this, currentOpRef);
- ILogicalOperator exprOp = exprResult.first;
- if (exprOp.getOperatorTag() != LogicalOperatorTag.ASSIGN) {
- throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc);
+ WindowExpression.FrameMode winFrameMode = null;
+ WindowExpression.FrameExclusionKind winFrameExclusionKind = null;
+ WindowExpression.FrameBoundaryKind winFrameStartKind = null, winFrameEndKind = null;
+ Expression winFrameStartExpr = null, winFrameEndExpr = null;
+ Expression winFrameOffsetExpr = null;
+ int winFrameMaxOjbects = -1;
+
+ if (winExpr.hasFrameDefinition()) {
+ if (isWin && !supportsFrameClause) {
+ throw new CompilationException(ErrorCode.COMPILATION_UNEXPECTED_WINDOW_FRAME, sourceLoc);
+ }
+ winFrameMode = winExpr.getFrameMode();
+ winFrameStartKind = winExpr.getFrameStartKind();
+ winFrameStartExpr = winExpr.getFrameStartExpr();
+ winFrameEndKind = winExpr.getFrameEndKind();
+ winFrameEndExpr = winExpr.getFrameEndExpr();
+ winFrameExclusionKind = winExpr.getFrameExclusionKind();
+ if (!isValidWindowFrameDefinition(winFrameMode, winFrameStartKind, winFrameEndKind, orderExprCount)) {
+ throw new CompilationException(ErrorCode.COMPILATION_INVALID_WINDOW_FRAME, sourceLoc);
+ }
+ } else if (!isWin || supportsFrameClause) {
+ winFrameMode = WindowExpression.FrameMode.RANGE;
+ winFrameStartKind = WindowExpression.FrameBoundaryKind.UNBOUNDED_PRECEDING;
+ winFrameEndKind = WindowExpression.FrameBoundaryKind.CURRENT_ROW;
+ winFrameExclusionKind = WindowExpression.FrameExclusionKind.NO_OTHERS;
}
- AssignOperator exprAssignOp = (AssignOperator) exprOp;
- currentOpRef = exprAssignOp.getInputs().get(0);
- List<LogicalVariable> exprAssignVars = exprAssignOp.getVariables();
- if (exprAssignVars.size() != 1) {
- throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc);
- }
- LogicalVariable exprAssignVar = exprAssignVars.get(0);
- List<Mutable<ILogicalExpression>> exprAssignExprs = exprAssignOp.getExpressions();
- ILogicalExpression exprAssignExpr = exprAssignExprs.get(0).getValue();
- if (exprAssignExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
- throw new CompilationException(ErrorCode.COMPILATION_EXPECTED_FUNCTION_CALL, sourceLoc);
- }
- AbstractFunctionCallExpression callExpr = (AbstractFunctionCallExpression) exprAssignExpr;
- if (BuiltinFunctions.windowFunctionRequiresOrderArgs(callExpr.getFunctionIdentifier())) {
- List<Mutable<ILogicalExpression>> callArgs = callExpr.getArguments();
- for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExprListOut) {
- callArgs.add(new MutableObject<>(p.second.getValue().cloneExpression()));
+
+ FunctionIdentifier winAggFunc = null;
+ FunctionIdentifier winAggDefaultIfNullFunc = null;
+ Expression winAggDefaultExpr = null;
+ if (isWinAgg) {
+ if (BuiltinFunctions.LEAD_IMPL.equals(fi) || BuiltinFunctions.LAG_IMPL.equals(fi)) {
+ int argCount = fargs.size();
+ if (argCount < 1 || argCount > 3) {
+ throw new CompilationException(ErrorCode.COMPILATION_INVALID_NUM_OF_ARGS, sourceLoc, fi.getName());
+ }
+ winFrameMode = WindowExpression.FrameMode.ROWS;
+ winFrameExclusionKind = WindowExpression.FrameExclusionKind.NO_OTHERS;
+ winFrameStartKind = winFrameEndKind =
+ BuiltinFunctions.LEAD_IMPL.equals(fi) ? WindowExpression.FrameBoundaryKind.BOUNDED_FOLLOWING
+ : WindowExpression.FrameBoundaryKind.BOUNDED_PRECEDING;
+ winFrameStartExpr = argCount > 1 ? fargs.get(1) : new LiteralExpr(new IntegerLiteral(1));
+ winFrameEndExpr = (Expression) SqlppRewriteUtil.deepCopy(winFrameStartExpr);
+ // if lead/lag default expression is specified
+ // then use local-first-element() because it returns SYSTEM_NULL if the list is empty,
+ // otherwise (no default expression) use first-element() which returns NULL if the list is empty
+ if (argCount > 2) {
+ winAggFunc = BuiltinFunctions.LOCAL_FIRST_ELEMENT;
+ winAggDefaultIfNullFunc = BuiltinFunctions.IF_SYSTEM_NULL;
+ winAggDefaultExpr = fargs.get(2);
+ } else {
+ winAggFunc = BuiltinFunctions.FIRST_ELEMENT;
+ }
+ winFrameMaxOjbects = 1;
+ } else if (BuiltinFunctions.FIRST_VALUE_IMPL.equals(fi)) {
+ winAggFunc = BuiltinFunctions.FIRST_ELEMENT;
+ winFrameMaxOjbects = 1;
+ } else if (BuiltinFunctions.LAST_VALUE_IMPL.equals(fi)) {
+ winAggFunc = BuiltinFunctions.LAST_ELEMENT;
+ } else if (BuiltinFunctions.NTH_VALUE_IMPL.equals(fi)) {
+ winAggFunc = BuiltinFunctions.FIRST_ELEMENT;
+ winFrameMaxOjbects = 1;
+ OperatorExpr opExpr = new OperatorExpr();
+ opExpr.addOperand(fargs.get(1));
+ opExpr.addOperator(OperatorType.MINUS);
+ opExpr.addOperand(new LiteralExpr(new IntegerLiteral(1)));
+ opExpr.setSourceLocation(sourceLoc);
+ winFrameOffsetExpr = opExpr;
+ } else {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, fi.getName());
}
}
- WindowOperator winOp = new WindowOperator(partExprListOut, orderExprListOut, exprAssignVars, exprAssignExprs);
- winOp.setSourceLocation(sourceLoc);
- winOp.getInputs().add(currentOpRef);
+ if (winFrameMode != null) {
+ LogicalVariable rowNumVar = context.newVar();
+ LogicalVariable denseRankVar = context.newVar();
+ ListSet<LogicalVariable> usedVars = new ListSet<>();
+ frameValueExprRefs = translateWindowFrameMode(winFrameMode, orderExprListOut, rowNumVar, denseRankVar,
+ usedVars, sourceLoc);
+
+ Pair<List<Mutable<ILogicalExpression>>, Integer> frameExclusionResult =
+ translateWindowExclusion(winFrameExclusionKind, rowNumVar, denseRankVar, usedVars, sourceLoc);
+ if (frameExclusionResult != null) {
+ frameExcludeExprRefs = frameExclusionResult.first;
+ frameExcludeNotStartIdx = frameExclusionResult.second;
+ }
+
+ if (!usedVars.isEmpty()) {
+ List<Mutable<ILogicalExpression>> partExprListClone =
+ OperatorManipulationUtil.cloneExpressions(partExprListOut);
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprListClone =
+ OperatorManipulationUtil.cloneOrderExpressions(orderExprListOut);
+ WindowOperator helperWinOp = createHelperWindowOperator(partExprListClone, orderExprListClone,
+ rowNumVar, denseRankVar, usedVars, sourceLoc);
+ helperWinOp.getInputs().add(currentOpRef);
+ currentOpRef = new MutableObject<>(helperWinOp);
+ }
+
+ Pair<List<Mutable<ILogicalExpression>>, ILogicalOperator> frameStartResult =
+ translateWindowBoundary(winFrameStartKind, winFrameStartExpr, frameValueExprRefs, currentOpRef);
+ if (frameStartResult != null) {
+ frameStartExprRefs = frameStartResult.first;
+ if (frameStartResult.second != null) {
+ currentOpRef = new MutableObject<>(frameStartResult.second);
+ }
+ }
+ Pair<List<Mutable<ILogicalExpression>>, ILogicalOperator> frameEndResult =
+ translateWindowBoundary(winFrameEndKind, winFrameEndExpr, frameValueExprRefs, currentOpRef);
+ if (frameEndResult != null) {
+ frameEndExprRefs = frameEndResult.first;
+ if (frameEndResult.second != null) {
+ currentOpRef = new MutableObject<>(frameEndResult.second);
+ }
+ }
+ }
+
+ AbstractLogicalExpression frameOffsetExpr = null;
+ if (winFrameOffsetExpr != null) {
+ Pair<ILogicalOperator, LogicalVariable> frameOffsetResult = winFrameOffsetExpr.accept(this, currentOpRef);
+ frameOffsetExpr = new VariableReferenceExpression(frameOffsetResult.second);
+ frameOffsetExpr.setSourceLocation(sourceLoc);
+ currentOpRef = new MutableObject<>(frameOffsetResult.first);
+ }
+
+ WindowOperator winOp = new WindowOperator(partExprListOut, orderExprListOut, frameValueExprRefs,
+ frameStartExprRefs, frameEndExprRefs, frameExcludeExprRefs, frameExcludeNotStartIdx, frameOffsetExpr,
+ winFrameMaxOjbects);
+ winOp.setSourceLocation(sourceLoc);
+
+ AbstractLogicalExpression resultExpr;
+
+ if (isWin && !isWinAgg) {
+ CallExpr callExpr = new CallExpr(new FunctionSignature(fi), fargs);
+ Pair<ILogicalOperator, LogicalVariable> callExprResult = callExpr.accept(this, currentOpRef);
+ ILogicalOperator op = callExprResult.first;
+ if (op.getOperatorTag() != LogicalOperatorTag.ASSIGN) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, "");
+ }
+ AssignOperator assignOp = (AssignOperator) op;
+ List<LogicalVariable> assignVars = assignOp.getVariables();
+ if (assignVars.size() != 1) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, "");
+ }
+ List<Mutable<ILogicalExpression>> assignExprs = assignOp.getExpressions();
+ if (assignExprs.size() != 1) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, "");
+ }
+ ILogicalExpression assignExpr = assignExprs.get(0).getValue();
+ if (assignExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc);
+ }
+ AbstractFunctionCallExpression fcallExpr = (AbstractFunctionCallExpression) assignExpr;
+ if (fcallExpr.getKind() != AbstractFunctionCallExpression.FunctionKind.STATEFUL) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc);
+ }
+ if (BuiltinFunctions.windowFunctionRequiresOrderArgs(fi)) {
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExprListOut) {
+ fcallExpr.getArguments().add(new MutableObject<>(p.second.getValue().cloneExpression()));
+ }
+ }
+
+ winOp.getInputs().add(assignOp.getInputs().get(0));
+ winOp.getVariables().addAll(assignVars);
+ winOp.getExpressions().addAll(assignExprs);
+
+ resultExpr = new VariableReferenceExpression(assignVars.get(0));
+ resultExpr.setSourceLocation(sourceLoc);
+ currentOpRef = new MutableObject<>(winOp);
+ } else {
+ LogicalVariable windowRecordVar = context.newVar();
+ ILogicalExpression windowRecordConstr =
+ createRecordConstructor(winExpr.getWindowFieldList(), currentOpRef, sourceLoc);
+ AssignOperator assignOp = new AssignOperator(windowRecordVar, new MutableObject<>(windowRecordConstr));
+ assignOp.getInputs().add(currentOpRef);
+ assignOp.setSourceLocation(sourceLoc);
+
+ winOp.getInputs().add(new MutableObject<>(assignOp));
+
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(winOp));
+ ntsOp.setSourceLocation(sourceLoc);
+
+ VariableReferenceExpression frameRecordVarRef = new VariableReferenceExpression(windowRecordVar);
+ frameRecordVarRef.setSourceLocation(sourceLoc);
+
+ AggregateFunctionCallExpression listifyCall = BuiltinFunctions.makeAggregateFunctionExpression(
+ BuiltinFunctions.LISTIFY, mkSingletonArrayList(new MutableObject<>(frameRecordVarRef)));
+ listifyCall.setSourceLocation(sourceLoc);
+ LogicalVariable windowVar = context.newVar();
+ AggregateOperator aggOp = new AggregateOperator(mkSingletonArrayList(windowVar),
+ mkSingletonArrayList(new MutableObject<>(listifyCall)));
+ aggOp.getInputs().add(new MutableObject<>(ntsOp));
+ aggOp.setSourceLocation(sourceLoc);
+
+ context.setVar(winExpr.getWindowVar(), windowVar);
+
+ if (isWinAgg) {
+ Expression listArgExpr = fargs.get(0);
+ Pair<ILogicalOperator, LogicalVariable> listArgExprResult =
+ listArgExpr.accept(this, new MutableObject<>(aggOp));
+ VariableReferenceExpression listArgVarRef = new VariableReferenceExpression(listArgExprResult.second);
+ listArgVarRef.setSourceLocation(sourceLoc);
+
+ LogicalVariable unnestVar = context.newVar();
+ UnnestingFunctionCallExpression unnestExpr = new UnnestingFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
+ mkSingletonArrayList(new MutableObject<>(listArgVarRef)));
+ unnestExpr.setSourceLocation(sourceLoc);
+ UnnestOperator unnestOp = new UnnestOperator(unnestVar, new MutableObject<>(unnestExpr));
+ unnestOp.setSourceLocation(sourceLoc);
+ unnestOp.getInputs().add(new MutableObject<>(listArgExprResult.first));
+
+ VariableReferenceExpression unnestVarRef = new VariableReferenceExpression(unnestVar);
+ unnestVarRef.setSourceLocation(sourceLoc);
+
+ AggregateFunctionCallExpression winAggCall = BuiltinFunctions.makeAggregateFunctionExpression(
+ winAggFunc, mkSingletonArrayList(new MutableObject<>(unnestVarRef)));
+ winAggCall.setSourceLocation(sourceLoc);
+ LogicalVariable winAggVar = context.newVar();
+ AggregateOperator winAggOp = new AggregateOperator(mkSingletonArrayList(winAggVar),
+ mkSingletonArrayList(new MutableObject<>(winAggCall)));
+ winAggOp.getInputs().add(new MutableObject<>(unnestOp));
+ winAggOp.setSourceLocation(sourceLoc);
+
+ winOp.getNestedPlans().add(new ALogicalPlanImpl(new MutableObject<>(winAggOp)));
+ currentOpRef = new MutableObject<>(winOp);
+
+ resultExpr = new VariableReferenceExpression(winAggVar);
+ resultExpr.setSourceLocation(sourceLoc);
+
+ if (winAggDefaultExpr != null) {
+ Pair<ILogicalOperator, LogicalVariable> winAggDefaultExprResult =
+ winAggDefaultExpr.accept(this, currentOpRef);
+ VariableReferenceExpression winAggDefaultVarRef =
+ new VariableReferenceExpression(winAggDefaultExprResult.second);
+ winAggDefaultVarRef.setSourceLocation(sourceLoc);
+ AbstractFunctionCallExpression ifNullExpr =
+ createFunctionCallExpression(winAggDefaultIfNullFunc, sourceLoc);
+ ifNullExpr.getArguments().add(new MutableObject<>(resultExpr));
+ ifNullExpr.getArguments().add(new MutableObject<>(winAggDefaultVarRef));
+ resultExpr = ifNullExpr;
+ currentOpRef = new MutableObject<>(winAggDefaultExprResult.first);
+ }
+ } else {
+ CallExpr callExpr = new CallExpr(new FunctionSignature(fi), fargs);
+ Pair<ILogicalOperator, LogicalVariable> exprResult = callExpr.accept(this, new MutableObject<>(aggOp));
+ winOp.getNestedPlans().add(new ALogicalPlanImpl(new MutableObject<>(exprResult.first)));
+ resultExpr = new VariableReferenceExpression(exprResult.second);
+ resultExpr.setSourceLocation(sourceLoc);
+ currentOpRef = new MutableObject<>(winOp);
+ }
+ }
// must return ASSIGN
- LogicalVariable assignVar = context.newVar();
- AssignOperator assignOp =
- new AssignOperator(assignVar, new MutableObject<>(new VariableReferenceExpression(exprAssignVar)));
+ LogicalVariable resultVar = context.newVar();
+ AssignOperator resultOp = new AssignOperator(resultVar, new MutableObject<>(resultExpr));
+ resultOp.setSourceLocation(sourceLoc);
+ resultOp.getInputs().add(currentOpRef);
+ return new Pair<>(resultOp, resultVar);
+ }
+
+ private List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> translateWindowFrameMode(
+ WindowExpression.FrameMode frameMode,
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprList, LogicalVariable rowNumVar,
+ LogicalVariable denseRankVar, Set<LogicalVariable> outUsedVars, SourceLocation sourceLoc)
+ throws CompilationException {
+ switch (frameMode) {
+ case RANGE:
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> result =
+ new ArrayList<>(orderExprList.size());
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExprList) {
+ result.add(new Pair<>(p.first, new MutableObject<>(p.second.getValue().cloneExpression())));
+ }
+ return result;
+ case ROWS:
+ outUsedVars.add(rowNumVar);
+ VariableReferenceExpression rowNumRefExpr = new VariableReferenceExpression(rowNumVar);
+ rowNumRefExpr.setSourceLocation(sourceLoc);
+ return mkSingletonArrayList(new Pair<>(OrderOperator.ASC_ORDER, new MutableObject<>(rowNumRefExpr)));
+ case GROUPS:
+ outUsedVars.add(denseRankVar);
+ VariableReferenceExpression denseRankRefExpr = new VariableReferenceExpression(denseRankVar);
+ denseRankRefExpr.setSourceLocation(sourceLoc);
+ return mkSingletonArrayList(new Pair<>(OrderOperator.ASC_ORDER, new MutableObject<>(denseRankRefExpr)));
+ default:
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, frameMode.toString());
+ }
+ }
+
+ private boolean isValidWindowFrameDefinition(WindowExpression.FrameMode frameMode,
+ WindowExpression.FrameBoundaryKind startKind, WindowExpression.FrameBoundaryKind endKind,
+ int orderExprCount) {
+ switch (startKind) {
+ case UNBOUNDED_FOLLOWING:
+ return false;
+ case BOUNDED_FOLLOWING:
+ switch (endKind) {
+ case BOUNDED_FOLLOWING:
+ case UNBOUNDED_FOLLOWING:
+ break;
+ default:
+ return false;
+ }
+ break;
+ }
+ switch (endKind) {
+ case UNBOUNDED_PRECEDING:
+ return false;
+ case BOUNDED_PRECEDING:
+ switch (startKind) {
+ case BOUNDED_PRECEDING:
+ case UNBOUNDED_PRECEDING:
+ break;
+ default:
+ return false;
+ }
+ }
+ if (frameMode == WindowExpression.FrameMode.RANGE && orderExprCount != 1) {
+ switch (startKind) {
+ case CURRENT_ROW:
+ case UNBOUNDED_PRECEDING:
+ switch (endKind) {
+ case CURRENT_ROW:
+ case UNBOUNDED_FOLLOWING:
+ break;
+ default:
+ return false;
+ }
+ break;
+ default:
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private Pair<List<Mutable<ILogicalExpression>>, ILogicalOperator> translateWindowBoundary(
+ WindowExpression.FrameBoundaryKind boundaryKind, Expression boundaryExpr,
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> valueExprs,
+ Mutable<ILogicalOperator> tupSource) throws CompilationException {
+ switch (boundaryKind) {
+ case CURRENT_ROW:
+ List<Mutable<ILogicalExpression>> resultExprs = new ArrayList<>(valueExprs.size());
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : valueExprs) {
+ resultExprs.add(new MutableObject<>(p.second.getValue().cloneExpression()));
+ }
+ return new Pair<>(resultExprs, null);
+ case BOUNDED_PRECEDING:
+ OperatorType opTypePreceding = valueExprs.get(0).first.getKind() == OrderOperator.IOrder.OrderKind.ASC
+ ? OperatorType.MINUS : OperatorType.PLUS;
+ return translateWindowBoundaryExpr(boundaryExpr, valueExprs, tupSource, opTypePreceding);
+ case BOUNDED_FOLLOWING:
+ OperatorType opTypeFollowing = valueExprs.get(0).first.getKind() == OrderOperator.IOrder.OrderKind.ASC
+ ? OperatorType.PLUS : OperatorType.MINUS;
+ return translateWindowBoundaryExpr(boundaryExpr, valueExprs, tupSource, opTypeFollowing);
+ case UNBOUNDED_PRECEDING:
+ case UNBOUNDED_FOLLOWING:
+ return null;
+ default:
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, boundaryExpr.getSourceLocation(),
+ boundaryKind.toString());
+ }
+ }
+
+ private Pair<List<Mutable<ILogicalExpression>>, ILogicalOperator> translateWindowBoundaryExpr(
+ Expression boundaryExpr, List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> valueExprs,
+ Mutable<ILogicalOperator> tupSource, OperatorType boundaryOperator) throws CompilationException {
+ SourceLocation sourceLoc = boundaryExpr.getSourceLocation();
+ if (valueExprs.size() != 1) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, valueExprs.size());
+ }
+ ILogicalExpression valueExpr = valueExprs.get(0).second.getValue();
+
+ AbstractFunctionCallExpression resultExpr =
+ createFunctionCallExpressionForBuiltinOperator(boundaryOperator, sourceLoc);
+ resultExpr.getArguments().add(new MutableObject<>(valueExpr.cloneExpression()));
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(boundaryExpr, tupSource);
+ resultExpr.getArguments().add(new MutableObject<>(eo.first));
+
+ LogicalVariable resultVar = context.newVar();
+ AssignOperator assignOp = new AssignOperator(resultVar, new MutableObject<>(resultExpr));
assignOp.setSourceLocation(sourceLoc);
- assignOp.getInputs().add(new MutableObject<>(winOp));
- return new Pair<>(assignOp, assignVar);
+ assignOp.getInputs().add(eo.second);
+
+ VariableReferenceExpression resultVarRefExpr = new VariableReferenceExpression(resultVar);
+ resultVarRefExpr.setSourceLocation(sourceLoc);
+
+ return new Pair<>(mkSingletonArrayList(new MutableObject<>(resultVarRefExpr)), assignOp);
+ }
+
+ private Pair<List<Mutable<ILogicalExpression>>, Integer> translateWindowExclusion(
+ WindowExpression.FrameExclusionKind frameExclusionKind, LogicalVariable rowNumVar,
+ LogicalVariable denseRankVar, Set<LogicalVariable> outUsedVars, SourceLocation sourceLoc)
+ throws CompilationException {
+ VariableReferenceExpression rowNumVarRefExpr, denseRankVarRefExpr;
+ List<Mutable<ILogicalExpression>> resultExprs;
+ switch (frameExclusionKind) {
+ case CURRENT_ROW:
+ rowNumVarRefExpr = new VariableReferenceExpression(rowNumVar);
+ rowNumVarRefExpr.setSourceLocation(sourceLoc);
+ resultExprs = new ArrayList<>(1);
+ resultExprs.add(new MutableObject<>(rowNumVarRefExpr));
+ outUsedVars.add(rowNumVar);
+ return new Pair<>(resultExprs, 1);
+ case GROUP:
+ denseRankVarRefExpr = new VariableReferenceExpression(denseRankVar);
+ denseRankVarRefExpr.setSourceLocation(sourceLoc);
+ resultExprs = new ArrayList<>(1);
+ resultExprs.add(new MutableObject<>(denseRankVarRefExpr));
+ outUsedVars.add(denseRankVar);
+ return new Pair<>(resultExprs, 1);
+ case TIES:
+ denseRankVarRefExpr = new VariableReferenceExpression(denseRankVar);
+ denseRankVarRefExpr.setSourceLocation(sourceLoc);
+ rowNumVarRefExpr = new VariableReferenceExpression(rowNumVar);
+ rowNumVarRefExpr.setSourceLocation(sourceLoc);
+ resultExprs = new ArrayList<>(2);
+ resultExprs.add(new MutableObject<>(denseRankVarRefExpr));
+ outUsedVars.add(denseRankVar);
+ resultExprs.add(new MutableObject<>(rowNumVarRefExpr));
+ outUsedVars.add(rowNumVar);
+ return new Pair<>(resultExprs, 1); // exclude if same denseRank but different rowNumber
+ case NO_OTHERS:
+ return null;
+ default:
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc,
+ frameExclusionKind.toString());
+ }
+ }
+
+ private WindowOperator createHelperWindowOperator(List<Mutable<ILogicalExpression>> partExprList,
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprList, LogicalVariable rowNumVar,
+ LogicalVariable denseRankVar, ListSet<LogicalVariable> usedVars, SourceLocation sourceLoc)
+ throws CompilationException {
+ WindowOperator winOp = new WindowOperator(partExprList, orderExprList);
+ winOp.setSourceLocation(sourceLoc);
+ for (LogicalVariable usedVar : usedVars) {
+ FunctionIdentifier fid;
+ if (usedVar.equals(rowNumVar)) {
+ fid = BuiltinFunctions.ROW_NUMBER_IMPL;
+ } else if (usedVar.equals(denseRankVar)) {
+ fid = BuiltinFunctions.DENSE_RANK_IMPL;
+ } else {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, sourceLoc, usedVar.toString());
+ }
+ AbstractFunctionCallExpression valueExpr =
+ BuiltinFunctions.makeWindowFunctionExpression(fid, new ArrayList<>());
+ if (BuiltinFunctions.windowFunctionRequiresOrderArgs(valueExpr.getFunctionIdentifier())) {
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExprList) {
+ valueExpr.getArguments().add(new MutableObject<>(p.second.getValue().cloneExpression()));
+ }
+ }
+ valueExpr.setSourceLocation(winOp.getSourceLocation());
+ winOp.getVariables().add(usedVar);
+ winOp.getExpressions().add(new MutableObject<>(valueExpr));
+ }
+ return winOp;
}
}
diff --git a/asterixdb/asterix-app/data/tenk.tbl b/asterixdb/asterix-app/data/tenk.tbl
new file mode 100644
index 0000000..8c1eb77
--- /dev/null
+++ b/asterixdb/asterix-app/data/tenk.tbl
@@ -0,0 +1,10000 @@
+8800|0|0|0|0|0|0|800|800|3800|8800|0|1|MAAAAA|AAAAAA|AAAAxx
+1891|1|1|3|1|11|91|891|1891|1891|1891|182|183|TUAAAA|BAAAAA|HHHHxx
+3420|2|0|0|0|0|20|420|1420|3420|3420|40|41|OBAAAA|CAAAAA|OOOOxx
+9850|3|0|2|0|10|50|850|1850|4850|9850|100|101|WOAAAA|DAAAAA|VVVVxx
+7164|4|0|0|4|4|64|164|1164|2164|7164|128|129|OPAAAA|EAAAAA|AAAAxx
+8009|5|1|1|9|9|9|9|9|3009|8009|18|19|BWAAAA|FAAAAA|HHHHxx
+5057|6|1|1|7|17|57|57|1057|57|5057|114|115|NMAAAA|GAAAAA|OOOOxx
+6701|7|1|1|1|1|1|701|701|1701|6701|2|3|TXAAAA|HAAAAA|VVVVxx
+4321|8|1|1|1|1|21|321|321|4321|4321|42|43|FKAAAA|IAAAAA|AAAAxx
+3043|9|1|3|3|3|43|43|1043|3043|3043|86|87|BNAAAA|JAAAAA|HHHHxx
+1314|10|0|2|4|14|14|314|1314|1314|1314|28|29|OYAAAA|KAAAAA|OOOOxx
+1504|11|0|0|4|4|4|504|1504|1504|1504|8|9|WFAAAA|LAAAAA|VVVVxx
+5222|12|0|2|2|2|22|222|1222|222|5222|44|45|WSAAAA|MAAAAA|AAAAxx
+6243|13|1|3|3|3|43|243|243|1243|6243|86|87|DGAAAA|NAAAAA|HHHHxx
+5471|14|1|3|1|11|71|471|1471|471|5471|142|143|LCAAAA|OAAAAA|OOOOxx
+5006|15|0|2|6|6|6|6|1006|6|5006|12|13|OKAAAA|PAAAAA|VVVVxx
+5387|16|1|3|7|7|87|387|1387|387|5387|174|175|FZAAAA|QAAAAA|AAAAxx
+5785|17|1|1|5|5|85|785|1785|785|5785|170|171|NOAAAA|RAAAAA|HHHHxx
+6621|18|1|1|1|1|21|621|621|1621|6621|42|43|RUAAAA|SAAAAA|OOOOxx
+6969|19|1|1|9|9|69|969|969|1969|6969|138|139|BIAAAA|TAAAAA|VVVVxx
+9460|20|0|0|0|0|60|460|1460|4460|9460|120|121|WZAAAA|UAAAAA|AAAAxx
+59|21|1|3|9|19|59|59|59|59|59|118|119|HCAAAA|VAAAAA|HHHHxx
+8020|22|0|0|0|0|20|20|20|3020|8020|40|41|MWAAAA|WAAAAA|OOOOxx
+7695|23|1|3|5|15|95|695|1695|2695|7695|190|191|ZJAAAA|XAAAAA|VVVVxx
+3442|24|0|2|2|2|42|442|1442|3442|3442|84|85|KCAAAA|YAAAAA|AAAAxx
+5119|25|1|3|9|19|19|119|1119|119|5119|38|39|XOAAAA|ZAAAAA|HHHHxx
+646|26|0|2|6|6|46|646|646|646|646|92|93|WYAAAA|ABAAAA|OOOOxx
+9605|27|1|1|5|5|5|605|1605|4605|9605|10|11|LFAAAA|BBAAAA|VVVVxx
+263|28|1|3|3|3|63|263|263|263|263|126|127|DKAAAA|CBAAAA|AAAAxx
+3269|29|1|1|9|9|69|269|1269|3269|3269|138|139|TVAAAA|DBAAAA|HHHHxx
+1839|30|1|3|9|19|39|839|1839|1839|1839|78|79|TSAAAA|EBAAAA|OOOOxx
+9144|31|0|0|4|4|44|144|1144|4144|9144|88|89|SNAAAA|FBAAAA|VVVVxx
+2513|32|1|1|3|13|13|513|513|2513|2513|26|27|RSAAAA|GBAAAA|AAAAxx
+8850|33|0|2|0|10|50|850|850|3850|8850|100|101|KCAAAA|HBAAAA|HHHHxx
+236|34|0|0|6|16|36|236|236|236|236|72|73|CJAAAA|IBAAAA|OOOOxx
+3162|35|0|2|2|2|62|162|1162|3162|3162|124|125|QRAAAA|JBAAAA|VVVVxx
+4380|36|0|0|0|0|80|380|380|4380|4380|160|161|MMAAAA|KBAAAA|AAAAxx
+8095|37|1|3|5|15|95|95|95|3095|8095|190|191|JZAAAA|LBAAAA|HHHHxx
+209|38|1|1|9|9|9|209|209|209|209|18|19|BIAAAA|MBAAAA|OOOOxx
+3055|39|1|3|5|15|55|55|1055|3055|3055|110|111|NNAAAA|NBAAAA|VVVVxx
+6921|40|1|1|1|1|21|921|921|1921|6921|42|43|FGAAAA|OBAAAA|AAAAxx
+7046|41|0|2|6|6|46|46|1046|2046|7046|92|93|ALAAAA|PBAAAA|HHHHxx
+7912|42|0|0|2|12|12|912|1912|2912|7912|24|25|ISAAAA|QBAAAA|OOOOxx
+7267|43|1|3|7|7|67|267|1267|2267|7267|134|135|NTAAAA|RBAAAA|VVVVxx
+3599|44|1|3|9|19|99|599|1599|3599|3599|198|199|LIAAAA|SBAAAA|AAAAxx
+923|45|1|3|3|3|23|923|923|923|923|46|47|NJAAAA|TBAAAA|HHHHxx
+1437|46|1|1|7|17|37|437|1437|1437|1437|74|75|HDAAAA|UBAAAA|OOOOxx
+6439|47|1|3|9|19|39|439|439|1439|6439|78|79|RNAAAA|VBAAAA|VVVVxx
+6989|48|1|1|9|9|89|989|989|1989|6989|178|179|VIAAAA|WBAAAA|AAAAxx
+8798|49|0|2|8|18|98|798|798|3798|8798|196|197|KAAAAA|XBAAAA|HHHHxx
+5960|50|0|0|0|0|60|960|1960|960|5960|120|121|GVAAAA|YBAAAA|OOOOxx
+5832|51|0|0|2|12|32|832|1832|832|5832|64|65|IQAAAA|ZBAAAA|VVVVxx
+6066|52|0|2|6|6|66|66|66|1066|6066|132|133|IZAAAA|ACAAAA|AAAAxx
+322|53|0|2|2|2|22|322|322|322|322|44|45|KMAAAA|BCAAAA|HHHHxx
+8321|54|1|1|1|1|21|321|321|3321|8321|42|43|BIAAAA|CCAAAA|OOOOxx
+734|55|0|2|4|14|34|734|734|734|734|68|69|GCAAAA|DCAAAA|VVVVxx
+688|56|0|0|8|8|88|688|688|688|688|176|177|MAAAAA|ECAAAA|AAAAxx
+4212|57|0|0|2|12|12|212|212|4212|4212|24|25|AGAAAA|FCAAAA|HHHHxx
+9653|58|1|1|3|13|53|653|1653|4653|9653|106|107|HHAAAA|GCAAAA|OOOOxx
+2677|59|1|1|7|17|77|677|677|2677|2677|154|155|ZYAAAA|HCAAAA|VVVVxx
+5423|60|1|3|3|3|23|423|1423|423|5423|46|47|PAAAAA|ICAAAA|AAAAxx
+2592|61|0|0|2|12|92|592|592|2592|2592|184|185|SVAAAA|JCAAAA|HHHHxx
+3233|62|1|1|3|13|33|233|1233|3233|3233|66|67|JUAAAA|KCAAAA|OOOOxx
+5032|63|0|0|2|12|32|32|1032|32|5032|64|65|OLAAAA|LCAAAA|VVVVxx
+2525|64|1|1|5|5|25|525|525|2525|2525|50|51|DTAAAA|MCAAAA|AAAAxx
+4450|65|0|2|0|10|50|450|450|4450|4450|100|101|EPAAAA|NCAAAA|HHHHxx
+5778|66|0|2|8|18|78|778|1778|778|5778|156|157|GOAAAA|OCAAAA|OOOOxx
+5852|67|0|0|2|12|52|852|1852|852|5852|104|105|CRAAAA|PCAAAA|VVVVxx
+5404|68|0|0|4|4|4|404|1404|404|5404|8|9|WZAAAA|QCAAAA|AAAAxx
+6223|69|1|3|3|3|23|223|223|1223|6223|46|47|JFAAAA|RCAAAA|HHHHxx
+6133|70|1|1|3|13|33|133|133|1133|6133|66|67|XBAAAA|SCAAAA|OOOOxx
+9112|71|0|0|2|12|12|112|1112|4112|9112|24|25|MMAAAA|TCAAAA|VVVVxx
+7575|72|1|3|5|15|75|575|1575|2575|7575|150|151|JFAAAA|UCAAAA|AAAAxx
+7414|73|0|2|4|14|14|414|1414|2414|7414|28|29|EZAAAA|VCAAAA|HHHHxx
+9741|74|1|1|1|1|41|741|1741|4741|9741|82|83|RKAAAA|WCAAAA|OOOOxx
+3767|75|1|3|7|7|67|767|1767|3767|3767|134|135|XOAAAA|XCAAAA|VVVVxx
+9372|76|0|0|2|12|72|372|1372|4372|9372|144|145|MWAAAA|YCAAAA|AAAAxx
+8976|77|0|0|6|16|76|976|976|3976|8976|152|153|GHAAAA|ZCAAAA|HHHHxx
+4071|78|1|3|1|11|71|71|71|4071|4071|142|143|PAAAAA|ADAAAA|OOOOxx
+1311|79|1|3|1|11|11|311|1311|1311|1311|22|23|LYAAAA|BDAAAA|VVVVxx
+2604|80|0|0|4|4|4|604|604|2604|2604|8|9|EWAAAA|CDAAAA|AAAAxx
+8840|81|0|0|0|0|40|840|840|3840|8840|80|81|ACAAAA|DDAAAA|HHHHxx
+567|82|1|3|7|7|67|567|567|567|567|134|135|VVAAAA|EDAAAA|OOOOxx
+5215|83|1|3|5|15|15|215|1215|215|5215|30|31|PSAAAA|FDAAAA|VVVVxx
+5474|84|0|2|4|14|74|474|1474|474|5474|148|149|OCAAAA|GDAAAA|AAAAxx
+3906|85|0|2|6|6|6|906|1906|3906|3906|12|13|GUAAAA|HDAAAA|HHHHxx
+1769|86|1|1|9|9|69|769|1769|1769|1769|138|139|BQAAAA|IDAAAA|OOOOxx
+1454|87|0|2|4|14|54|454|1454|1454|1454|108|109|YDAAAA|JDAAAA|VVVVxx
+6877|88|1|1|7|17|77|877|877|1877|6877|154|155|NEAAAA|KDAAAA|AAAAxx
+6501|89|1|1|1|1|1|501|501|1501|6501|2|3|BQAAAA|LDAAAA|HHHHxx
+934|90|0|2|4|14|34|934|934|934|934|68|69|YJAAAA|MDAAAA|OOOOxx
+4075|91|1|3|5|15|75|75|75|4075|4075|150|151|TAAAAA|NDAAAA|VVVVxx
+3180|92|0|0|0|0|80|180|1180|3180|3180|160|161|ISAAAA|ODAAAA|AAAAxx
+7787|93|1|3|7|7|87|787|1787|2787|7787|174|175|NNAAAA|PDAAAA|HHHHxx
+6401|94|1|1|1|1|1|401|401|1401|6401|2|3|FMAAAA|QDAAAA|OOOOxx
+4244|95|0|0|4|4|44|244|244|4244|4244|88|89|GHAAAA|RDAAAA|VVVVxx
+4591|96|1|3|1|11|91|591|591|4591|4591|182|183|PUAAAA|SDAAAA|AAAAxx
+4113|97|1|1|3|13|13|113|113|4113|4113|26|27|FCAAAA|TDAAAA|HHHHxx
+5925|98|1|1|5|5|25|925|1925|925|5925|50|51|XTAAAA|UDAAAA|OOOOxx
+1987|99|1|3|7|7|87|987|1987|1987|1987|174|175|LYAAAA|VDAAAA|VVVVxx
+8248|100|0|0|8|8|48|248|248|3248|8248|96|97|GFAAAA|WDAAAA|AAAAxx
+4151|101|1|3|1|11|51|151|151|4151|4151|102|103|RDAAAA|XDAAAA|HHHHxx
+8670|102|0|2|0|10|70|670|670|3670|8670|140|141|MVAAAA|YDAAAA|OOOOxx
+6194|103|0|2|4|14|94|194|194|1194|6194|188|189|GEAAAA|ZDAAAA|VVVVxx
+88|104|0|0|8|8|88|88|88|88|88|176|177|KDAAAA|AEAAAA|AAAAxx
+4058|105|0|2|8|18|58|58|58|4058|4058|116|117|CAAAAA|BEAAAA|HHHHxx
+2742|106|0|2|2|2|42|742|742|2742|2742|84|85|MBAAAA|CEAAAA|OOOOxx
+8275|107|1|3|5|15|75|275|275|3275|8275|150|151|HGAAAA|DEAAAA|VVVVxx
+4258|108|0|2|8|18|58|258|258|4258|4258|116|117|UHAAAA|EEAAAA|AAAAxx
+6129|109|1|1|9|9|29|129|129|1129|6129|58|59|TBAAAA|FEAAAA|HHHHxx
+7243|110|1|3|3|3|43|243|1243|2243|7243|86|87|PSAAAA|GEAAAA|OOOOxx
+2392|111|0|0|2|12|92|392|392|2392|2392|184|185|AOAAAA|HEAAAA|VVVVxx
+9853|112|1|1|3|13|53|853|1853|4853|9853|106|107|ZOAAAA|IEAAAA|AAAAxx
+6064|113|0|0|4|4|64|64|64|1064|6064|128|129|GZAAAA|JEAAAA|HHHHxx
+4391|114|1|3|1|11|91|391|391|4391|4391|182|183|XMAAAA|KEAAAA|OOOOxx
+726|115|0|2|6|6|26|726|726|726|726|52|53|YBAAAA|LEAAAA|VVVVxx
+6957|116|1|1|7|17|57|957|957|1957|6957|114|115|PHAAAA|MEAAAA|AAAAxx
+3853|117|1|1|3|13|53|853|1853|3853|3853|106|107|FSAAAA|NEAAAA|HHHHxx
+4524|118|0|0|4|4|24|524|524|4524|4524|48|49|ASAAAA|OEAAAA|OOOOxx
+5330|119|0|2|0|10|30|330|1330|330|5330|60|61|AXAAAA|PEAAAA|VVVVxx
+6671|120|1|3|1|11|71|671|671|1671|6671|142|143|PWAAAA|QEAAAA|AAAAxx
+5314|121|0|2|4|14|14|314|1314|314|5314|28|29|KWAAAA|REAAAA|HHHHxx
+9202|122|0|2|2|2|2|202|1202|4202|9202|4|5|YPAAAA|SEAAAA|OOOOxx
+4596|123|0|0|6|16|96|596|596|4596|4596|192|193|UUAAAA|TEAAAA|VVVVxx
+8951|124|1|3|1|11|51|951|951|3951|8951|102|103|HGAAAA|UEAAAA|AAAAxx
+9902|125|0|2|2|2|2|902|1902|4902|9902|4|5|WQAAAA|VEAAAA|HHHHxx
+1440|126|0|0|0|0|40|440|1440|1440|1440|80|81|KDAAAA|WEAAAA|OOOOxx
+5339|127|1|3|9|19|39|339|1339|339|5339|78|79|JXAAAA|XEAAAA|VVVVxx
+3371|128|1|3|1|11|71|371|1371|3371|3371|142|143|RZAAAA|YEAAAA|AAAAxx
+4467|129|1|3|7|7|67|467|467|4467|4467|134|135|VPAAAA|ZEAAAA|HHHHxx
+6216|130|0|0|6|16|16|216|216|1216|6216|32|33|CFAAAA|AFAAAA|OOOOxx
+5364|131|0|0|4|4|64|364|1364|364|5364|128|129|IYAAAA|BFAAAA|VVVVxx
+7547|132|1|3|7|7|47|547|1547|2547|7547|94|95|HEAAAA|CFAAAA|AAAAxx
+4338|133|0|2|8|18|38|338|338|4338|4338|76|77|WKAAAA|DFAAAA|HHHHxx
+3481|134|1|1|1|1|81|481|1481|3481|3481|162|163|XDAAAA|EFAAAA|OOOOxx
+826|135|0|2|6|6|26|826|826|826|826|52|53|UFAAAA|FFAAAA|VVVVxx
+3647|136|1|3|7|7|47|647|1647|3647|3647|94|95|HKAAAA|GFAAAA|AAAAxx
+3337|137|1|1|7|17|37|337|1337|3337|3337|74|75|JYAAAA|HFAAAA|HHHHxx
+3591|138|1|3|1|11|91|591|1591|3591|3591|182|183|DIAAAA|IFAAAA|OOOOxx
+7192|139|0|0|2|12|92|192|1192|2192|7192|184|185|QQAAAA|JFAAAA|VVVVxx
+1078|140|0|2|8|18|78|78|1078|1078|1078|156|157|MPAAAA|KFAAAA|AAAAxx
+1310|141|0|2|0|10|10|310|1310|1310|1310|20|21|KYAAAA|LFAAAA|HHHHxx
+9642|142|0|2|2|2|42|642|1642|4642|9642|84|85|WGAAAA|MFAAAA|OOOOxx
+39|143|1|3|9|19|39|39|39|39|39|78|79|NBAAAA|NFAAAA|VVVVxx
+8682|144|0|2|2|2|82|682|682|3682|8682|164|165|YVAAAA|OFAAAA|AAAAxx
+1794|145|0|2|4|14|94|794|1794|1794|1794|188|189|ARAAAA|PFAAAA|HHHHxx
+5630|146|0|2|0|10|30|630|1630|630|5630|60|61|OIAAAA|QFAAAA|OOOOxx
+6748|147|0|0|8|8|48|748|748|1748|6748|96|97|OZAAAA|RFAAAA|VVVVxx
+3766|148|0|2|6|6|66|766|1766|3766|3766|132|133|WOAAAA|SFAAAA|AAAAxx
+6403|149|1|3|3|3|3|403|403|1403|6403|6|7|HMAAAA|TFAAAA|HHHHxx
+175|150|1|3|5|15|75|175|175|175|175|150|151|TGAAAA|UFAAAA|OOOOxx
+2179|151|1|3|9|19|79|179|179|2179|2179|158|159|VFAAAA|VFAAAA|VVVVxx
+7897|152|1|1|7|17|97|897|1897|2897|7897|194|195|TRAAAA|WFAAAA|AAAAxx
+2760|153|0|0|0|0|60|760|760|2760|2760|120|121|ECAAAA|XFAAAA|HHHHxx
+1675|154|1|3|5|15|75|675|1675|1675|1675|150|151|LMAAAA|YFAAAA|OOOOxx
+2564|155|0|0|4|4|64|564|564|2564|2564|128|129|QUAAAA|ZFAAAA|VVVVxx
+157|156|1|1|7|17|57|157|157|157|157|114|115|BGAAAA|AGAAAA|AAAAxx
+8779|157|1|3|9|19|79|779|779|3779|8779|158|159|RZAAAA|BGAAAA|HHHHxx
+9591|158|1|3|1|11|91|591|1591|4591|9591|182|183|XEAAAA|CGAAAA|OOOOxx
+8732|159|0|0|2|12|32|732|732|3732|8732|64|65|WXAAAA|DGAAAA|VVVVxx
+139|160|1|3|9|19|39|139|139|139|139|78|79|JFAAAA|EGAAAA|AAAAxx
+5372|161|0|0|2|12|72|372|1372|372|5372|144|145|QYAAAA|FGAAAA|HHHHxx
+1278|162|0|2|8|18|78|278|1278|1278|1278|156|157|EXAAAA|GGAAAA|OOOOxx
+4697|163|1|1|7|17|97|697|697|4697|4697|194|195|RYAAAA|HGAAAA|VVVVxx
+8610|164|0|2|0|10|10|610|610|3610|8610|20|21|ETAAAA|IGAAAA|AAAAxx
+8180|165|0|0|0|0|80|180|180|3180|8180|160|161|QCAAAA|JGAAAA|HHHHxx
+2399|166|1|3|9|19|99|399|399|2399|2399|198|199|HOAAAA|KGAAAA|OOOOxx
+615|167|1|3|5|15|15|615|615|615|615|30|31|RXAAAA|LGAAAA|VVVVxx
+7629|168|1|1|9|9|29|629|1629|2629|7629|58|59|LHAAAA|MGAAAA|AAAAxx
+7628|169|0|0|8|8|28|628|1628|2628|7628|56|57|KHAAAA|NGAAAA|HHHHxx
+4659|170|1|3|9|19|59|659|659|4659|4659|118|119|FXAAAA|OGAAAA|OOOOxx
+5865|171|1|1|5|5|65|865|1865|865|5865|130|131|PRAAAA|PGAAAA|VVVVxx
+3973|172|1|1|3|13|73|973|1973|3973|3973|146|147|VWAAAA|QGAAAA|AAAAxx
+552|173|0|0|2|12|52|552|552|552|552|104|105|GVAAAA|RGAAAA|HHHHxx
+708|174|0|0|8|8|8|708|708|708|708|16|17|GBAAAA|SGAAAA|OOOOxx
+3550|175|0|2|0|10|50|550|1550|3550|3550|100|101|OGAAAA|TGAAAA|VVVVxx
+5547|176|1|3|7|7|47|547|1547|547|5547|94|95|JFAAAA|UGAAAA|AAAAxx
+489|177|1|1|9|9|89|489|489|489|489|178|179|VSAAAA|VGAAAA|HHHHxx
+3794|178|0|2|4|14|94|794|1794|3794|3794|188|189|YPAAAA|WGAAAA|OOOOxx
+9479|179|1|3|9|19|79|479|1479|4479|9479|158|159|PAAAAA|XGAAAA|VVVVxx
+6435|180|1|3|5|15|35|435|435|1435|6435|70|71|NNAAAA|YGAAAA|AAAAxx
+5120|181|0|0|0|0|20|120|1120|120|5120|40|41|YOAAAA|ZGAAAA|HHHHxx
+3615|182|1|3|5|15|15|615|1615|3615|3615|30|31|BJAAAA|AHAAAA|OOOOxx
+8399|183|1|3|9|19|99|399|399|3399|8399|198|199|BLAAAA|BHAAAA|VVVVxx
+2155|184|1|3|5|15|55|155|155|2155|2155|110|111|XEAAAA|CHAAAA|AAAAxx
+6690|185|0|2|0|10|90|690|690|1690|6690|180|181|IXAAAA|DHAAAA|HHHHxx
+1683|186|1|3|3|3|83|683|1683|1683|1683|166|167|TMAAAA|EHAAAA|OOOOxx
+6302|187|0|2|2|2|2|302|302|1302|6302|4|5|KIAAAA|FHAAAA|VVVVxx
+516|188|0|0|6|16|16|516|516|516|516|32|33|WTAAAA|GHAAAA|AAAAxx
+3901|189|1|1|1|1|1|901|1901|3901|3901|2|3|BUAAAA|HHAAAA|HHHHxx
+6938|190|0|2|8|18|38|938|938|1938|6938|76|77|WGAAAA|IHAAAA|OOOOxx
+7484|191|0|0|4|4|84|484|1484|2484|7484|168|169|WBAAAA|JHAAAA|VVVVxx
+7424|192|0|0|4|4|24|424|1424|2424|7424|48|49|OZAAAA|KHAAAA|AAAAxx
+9410|193|0|2|0|10|10|410|1410|4410|9410|20|21|YXAAAA|LHAAAA|HHHHxx
+1714|194|0|2|4|14|14|714|1714|1714|1714|28|29|YNAAAA|MHAAAA|OOOOxx
+8278|195|0|2|8|18|78|278|278|3278|8278|156|157|KGAAAA|NHAAAA|VVVVxx
+3158|196|0|2|8|18|58|158|1158|3158|3158|116|117|MRAAAA|OHAAAA|AAAAxx
+2511|197|1|3|1|11|11|511|511|2511|2511|22|23|PSAAAA|PHAAAA|HHHHxx
+2912|198|0|0|2|12|12|912|912|2912|2912|24|25|AIAAAA|QHAAAA|OOOOxx
+2648|199|0|0|8|8|48|648|648|2648|2648|96|97|WXAAAA|RHAAAA|VVVVxx
+9385|200|1|1|5|5|85|385|1385|4385|9385|170|171|ZWAAAA|SHAAAA|AAAAxx
+7545|201|1|1|5|5|45|545|1545|2545|7545|90|91|FEAAAA|THAAAA|HHHHxx
+8407|202|1|3|7|7|7|407|407|3407|8407|14|15|JLAAAA|UHAAAA|OOOOxx
+5893|203|1|1|3|13|93|893|1893|893|5893|186|187|RSAAAA|VHAAAA|VVVVxx
+7049|204|1|1|9|9|49|49|1049|2049|7049|98|99|DLAAAA|WHAAAA|AAAAxx
+6812|205|0|0|2|12|12|812|812|1812|6812|24|25|ACAAAA|XHAAAA|HHHHxx
+3649|206|1|1|9|9|49|649|1649|3649|3649|98|99|JKAAAA|YHAAAA|OOOOxx
+9275|207|1|3|5|15|75|275|1275|4275|9275|150|151|TSAAAA|ZHAAAA|VVVVxx
+1179|208|1|3|9|19|79|179|1179|1179|1179|158|159|JTAAAA|AIAAAA|AAAAxx
+969|209|1|1|9|9|69|969|969|969|969|138|139|HLAAAA|BIAAAA|HHHHxx
+7920|210|0|0|0|0|20|920|1920|2920|7920|40|41|QSAAAA|CIAAAA|OOOOxx
+998|211|0|2|8|18|98|998|998|998|998|196|197|KMAAAA|DIAAAA|VVVVxx
+3958|212|0|2|8|18|58|958|1958|3958|3958|116|117|GWAAAA|EIAAAA|AAAAxx
+6052|213|0|0|2|12|52|52|52|1052|6052|104|105|UYAAAA|FIAAAA|HHHHxx
+8791|214|1|3|1|11|91|791|791|3791|8791|182|183|DAAAAA|GIAAAA|OOOOxx
+5191|215|1|3|1|11|91|191|1191|191|5191|182|183|RRAAAA|HIAAAA|VVVVxx
+4267|216|1|3|7|7|67|267|267|4267|4267|134|135|DIAAAA|IIAAAA|AAAAxx
+2829|217|1|1|9|9|29|829|829|2829|2829|58|59|VEAAAA|JIAAAA|HHHHxx
+6396|218|0|0|6|16|96|396|396|1396|6396|192|193|AMAAAA|KIAAAA|OOOOxx
+9413|219|1|1|3|13|13|413|1413|4413|9413|26|27|BYAAAA|LIAAAA|VVVVxx
+614|220|0|2|4|14|14|614|614|614|614|28|29|QXAAAA|MIAAAA|AAAAxx
+4660|221|0|0|0|0|60|660|660|4660|4660|120|121|GXAAAA|NIAAAA|HHHHxx
+8834|222|0|2|4|14|34|834|834|3834|8834|68|69|UBAAAA|OIAAAA|OOOOxx
+2767|223|1|3|7|7|67|767|767|2767|2767|134|135|LCAAAA|PIAAAA|VVVVxx
+2444|224|0|0|4|4|44|444|444|2444|2444|88|89|AQAAAA|QIAAAA|AAAAxx
+4129|225|1|1|9|9|29|129|129|4129|4129|58|59|VCAAAA|RIAAAA|HHHHxx
+3394|226|0|2|4|14|94|394|1394|3394|3394|188|189|OAAAAA|SIAAAA|OOOOxx
+2705|227|1|1|5|5|5|705|705|2705|2705|10|11|BAAAAA|TIAAAA|VVVVxx
+8499|228|1|3|9|19|99|499|499|3499|8499|198|199|XOAAAA|UIAAAA|AAAAxx
+8852|229|0|0|2|12|52|852|852|3852|8852|104|105|MCAAAA|VIAAAA|HHHHxx
+6174|230|0|2|4|14|74|174|174|1174|6174|148|149|MDAAAA|WIAAAA|OOOOxx
+750|231|0|2|0|10|50|750|750|750|750|100|101|WCAAAA|XIAAAA|VVVVxx
+8164|232|0|0|4|4|64|164|164|3164|8164|128|129|ACAAAA|YIAAAA|AAAAxx
+4930|233|0|2|0|10|30|930|930|4930|4930|60|61|QHAAAA|ZIAAAA|HHHHxx
+9904|234|0|0|4|4|4|904|1904|4904|9904|8|9|YQAAAA|AJAAAA|OOOOxx
+7378|235|0|2|8|18|78|378|1378|2378|7378|156|157|UXAAAA|BJAAAA|VVVVxx
+2927|236|1|3|7|7|27|927|927|2927|2927|54|55|PIAAAA|CJAAAA|AAAAxx
+7155|237|1|3|5|15|55|155|1155|2155|7155|110|111|FPAAAA|DJAAAA|HHHHxx
+1302|238|0|2|2|2|2|302|1302|1302|1302|4|5|CYAAAA|EJAAAA|OOOOxx
+5904|239|0|0|4|4|4|904|1904|904|5904|8|9|CTAAAA|FJAAAA|VVVVxx
+9687|240|1|3|7|7|87|687|1687|4687|9687|174|175|PIAAAA|GJAAAA|AAAAxx
+3553|241|1|1|3|13|53|553|1553|3553|3553|106|107|RGAAAA|HJAAAA|HHHHxx
+4447|242|1|3|7|7|47|447|447|4447|4447|94|95|BPAAAA|IJAAAA|OOOOxx
+6878|243|0|2|8|18|78|878|878|1878|6878|156|157|OEAAAA|JJAAAA|VVVVxx
+9470|244|0|2|0|10|70|470|1470|4470|9470|140|141|GAAAAA|KJAAAA|AAAAxx
+9735|245|1|3|5|15|35|735|1735|4735|9735|70|71|LKAAAA|LJAAAA|HHHHxx
+5967|246|1|3|7|7|67|967|1967|967|5967|134|135|NVAAAA|MJAAAA|OOOOxx
+6601|247|1|1|1|1|1|601|601|1601|6601|2|3|XTAAAA|NJAAAA|VVVVxx
+7631|248|1|3|1|11|31|631|1631|2631|7631|62|63|NHAAAA|OJAAAA|AAAAxx
+3559|249|1|3|9|19|59|559|1559|3559|3559|118|119|XGAAAA|PJAAAA|HHHHxx
+2247|250|1|3|7|7|47|247|247|2247|2247|94|95|LIAAAA|QJAAAA|OOOOxx
+9649|251|1|1|9|9|49|649|1649|4649|9649|98|99|DHAAAA|RJAAAA|VVVVxx
+808|252|0|0|8|8|8|808|808|808|808|16|17|CFAAAA|SJAAAA|AAAAxx
+240|253|0|0|0|0|40|240|240|240|240|80|81|GJAAAA|TJAAAA|HHHHxx
+5031|254|1|3|1|11|31|31|1031|31|5031|62|63|NLAAAA|UJAAAA|OOOOxx
+9563|255|1|3|3|3|63|563|1563|4563|9563|126|127|VDAAAA|VJAAAA|VVVVxx
+5656|256|0|0|6|16|56|656|1656|656|5656|112|113|OJAAAA|WJAAAA|AAAAxx
+3886|257|0|2|6|6|86|886|1886|3886|3886|172|173|MTAAAA|XJAAAA|HHHHxx
+2431|258|1|3|1|11|31|431|431|2431|2431|62|63|NPAAAA|YJAAAA|OOOOxx
+5560|259|0|0|0|0|60|560|1560|560|5560|120|121|WFAAAA|ZJAAAA|VVVVxx
+9065|260|1|1|5|5|65|65|1065|4065|9065|130|131|RKAAAA|AKAAAA|AAAAxx
+8130|261|0|2|0|10|30|130|130|3130|8130|60|61|SAAAAA|BKAAAA|HHHHxx
+4054|262|0|2|4|14|54|54|54|4054|4054|108|109|YZAAAA|CKAAAA|OOOOxx
+873|263|1|1|3|13|73|873|873|873|873|146|147|PHAAAA|DKAAAA|VVVVxx
+3092|264|0|0|2|12|92|92|1092|3092|3092|184|185|YOAAAA|EKAAAA|AAAAxx
+6697|265|1|1|7|17|97|697|697|1697|6697|194|195|PXAAAA|FKAAAA|HHHHxx
+2452|266|0|0|2|12|52|452|452|2452|2452|104|105|IQAAAA|GKAAAA|OOOOxx
+7867|267|1|3|7|7|67|867|1867|2867|7867|134|135|PQAAAA|HKAAAA|VVVVxx
+3753|268|1|1|3|13|53|753|1753|3753|3753|106|107|JOAAAA|IKAAAA|AAAAxx
+7834|269|0|2|4|14|34|834|1834|2834|7834|68|69|IPAAAA|JKAAAA|HHHHxx
+5846|270|0|2|6|6|46|846|1846|846|5846|92|93|WQAAAA|KKAAAA|OOOOxx
+7604|271|0|0|4|4|4|604|1604|2604|7604|8|9|MGAAAA|LKAAAA|VVVVxx
+3452|272|0|0|2|12|52|452|1452|3452|3452|104|105|UCAAAA|MKAAAA|AAAAxx
+4788|273|0|0|8|8|88|788|788|4788|4788|176|177|ECAAAA|NKAAAA|HHHHxx
+8600|274|0|0|0|0|0|600|600|3600|8600|0|1|USAAAA|OKAAAA|OOOOxx
+8511|275|1|3|1|11|11|511|511|3511|8511|22|23|JPAAAA|PKAAAA|VVVVxx
+4452|276|0|0|2|12|52|452|452|4452|4452|104|105|GPAAAA|QKAAAA|AAAAxx
+1709|277|1|1|9|9|9|709|1709|1709|1709|18|19|TNAAAA|RKAAAA|HHHHxx
+3440|278|0|0|0|0|40|440|1440|3440|3440|80|81|ICAAAA|SKAAAA|OOOOxx
+9188|279|0|0|8|8|88|188|1188|4188|9188|176|177|KPAAAA|TKAAAA|VVVVxx
+3058|280|0|2|8|18|58|58|1058|3058|3058|116|117|QNAAAA|UKAAAA|AAAAxx
+5821|281|1|1|1|1|21|821|1821|821|5821|42|43|XPAAAA|VKAAAA|HHHHxx
+3428|282|0|0|8|8|28|428|1428|3428|3428|56|57|WBAAAA|WKAAAA|OOOOxx
+3581|283|1|1|1|1|81|581|1581|3581|3581|162|163|THAAAA|XKAAAA|VVVVxx
+7523|284|1|3|3|3|23|523|1523|2523|7523|46|47|JDAAAA|YKAAAA|AAAAxx
+3131|285|1|3|1|11|31|131|1131|3131|3131|62|63|LQAAAA|ZKAAAA|HHHHxx
+2404|286|0|0|4|4|4|404|404|2404|2404|8|9|MOAAAA|ALAAAA|OOOOxx
+5453|287|1|1|3|13|53|453|1453|453|5453|106|107|TBAAAA|BLAAAA|VVVVxx
+1599|288|1|3|9|19|99|599|1599|1599|1599|198|199|NJAAAA|CLAAAA|AAAAxx
+7081|289|1|1|1|1|81|81|1081|2081|7081|162|163|JMAAAA|DLAAAA|HHHHxx
+1750|290|0|2|0|10|50|750|1750|1750|1750|100|101|IPAAAA|ELAAAA|OOOOxx
+5085|291|1|1|5|5|85|85|1085|85|5085|170|171|PNAAAA|FLAAAA|VVVVxx
+9777|292|1|1|7|17|77|777|1777|4777|9777|154|155|BMAAAA|GLAAAA|AAAAxx
+574|293|0|2|4|14|74|574|574|574|574|148|149|CWAAAA|HLAAAA|HHHHxx
+5984|294|0|0|4|4|84|984|1984|984|5984|168|169|EWAAAA|ILAAAA|OOOOxx
+7039|295|1|3|9|19|39|39|1039|2039|7039|78|79|TKAAAA|JLAAAA|VVVVxx
+7143|296|1|3|3|3|43|143|1143|2143|7143|86|87|TOAAAA|KLAAAA|AAAAxx
+5702|297|0|2|2|2|2|702|1702|702|5702|4|5|ILAAAA|LLAAAA|HHHHxx
+362|298|0|2|2|2|62|362|362|362|362|124|125|YNAAAA|MLAAAA|OOOOxx
+6997|299|1|1|7|17|97|997|997|1997|6997|194|195|DJAAAA|NLAAAA|VVVVxx
+2529|300|1|1|9|9|29|529|529|2529|2529|58|59|HTAAAA|OLAAAA|AAAAxx
+6319|301|1|3|9|19|19|319|319|1319|6319|38|39|BJAAAA|PLAAAA|HHHHxx
+954|302|0|2|4|14|54|954|954|954|954|108|109|SKAAAA|QLAAAA|OOOOxx
+3413|303|1|1|3|13|13|413|1413|3413|3413|26|27|HBAAAA|RLAAAA|VVVVxx
+9081|304|1|1|1|1|81|81|1081|4081|9081|162|163|HLAAAA|SLAAAA|AAAAxx
+5599|305|1|3|9|19|99|599|1599|599|5599|198|199|JHAAAA|TLAAAA|HHHHxx
+4772|306|0|0|2|12|72|772|772|4772|4772|144|145|OBAAAA|ULAAAA|OOOOxx
+1124|307|0|0|4|4|24|124|1124|1124|1124|48|49|GRAAAA|VLAAAA|VVVVxx
+7793|308|1|1|3|13|93|793|1793|2793|7793|186|187|TNAAAA|WLAAAA|AAAAxx
+4201|309|1|1|1|1|1|201|201|4201|4201|2|3|PFAAAA|XLAAAA|HHHHxx
+7015|310|1|3|5|15|15|15|1015|2015|7015|30|31|VJAAAA|YLAAAA|OOOOxx
+5936|311|0|0|6|16|36|936|1936|936|5936|72|73|IUAAAA|ZLAAAA|VVVVxx
+4625|312|1|1|5|5|25|625|625|4625|4625|50|51|XVAAAA|AMAAAA|AAAAxx
+4989|313|1|1|9|9|89|989|989|4989|4989|178|179|XJAAAA|BMAAAA|HHHHxx
+4949|314|1|1|9|9|49|949|949|4949|4949|98|99|JIAAAA|CMAAAA|OOOOxx
+6273|315|1|1|3|13|73|273|273|1273|6273|146|147|HHAAAA|DMAAAA|VVVVxx
+4478|316|0|2|8|18|78|478|478|4478|4478|156|157|GQAAAA|EMAAAA|AAAAxx
+8854|317|0|2|4|14|54|854|854|3854|8854|108|109|OCAAAA|FMAAAA|HHHHxx
+2105|318|1|1|5|5|5|105|105|2105|2105|10|11|ZCAAAA|GMAAAA|OOOOxx
+8345|319|1|1|5|5|45|345|345|3345|8345|90|91|ZIAAAA|HMAAAA|VVVVxx
+1941|320|1|1|1|1|41|941|1941|1941|1941|82|83|RWAAAA|IMAAAA|AAAAxx
+1765|321|1|1|5|5|65|765|1765|1765|1765|130|131|XPAAAA|JMAAAA|HHHHxx
+9592|322|0|0|2|12|92|592|1592|4592|9592|184|185|YEAAAA|KMAAAA|OOOOxx
+1694|323|0|2|4|14|94|694|1694|1694|1694|188|189|ENAAAA|LMAAAA|VVVVxx
+8940|324|0|0|0|0|40|940|940|3940|8940|80|81|WFAAAA|MMAAAA|AAAAxx
+7264|325|0|0|4|4|64|264|1264|2264|7264|128|129|KTAAAA|NMAAAA|HHHHxx
+4699|326|1|3|9|19|99|699|699|4699|4699|198|199|TYAAAA|OMAAAA|OOOOxx
+4541|327|1|1|1|1|41|541|541|4541|4541|82|83|RSAAAA|PMAAAA|VVVVxx
+5768|328|0|0|8|8|68|768|1768|768|5768|136|137|WNAAAA|QMAAAA|AAAAxx
+6183|329|1|3|3|3|83|183|183|1183|6183|166|167|VDAAAA|RMAAAA|HHHHxx
+7457|330|1|1|7|17|57|457|1457|2457|7457|114|115|VAAAAA|SMAAAA|OOOOxx
+7317|331|1|1|7|17|17|317|1317|2317|7317|34|35|LVAAAA|TMAAAA|VVVVxx
+1944|332|0|0|4|4|44|944|1944|1944|1944|88|89|UWAAAA|UMAAAA|AAAAxx
+665|333|1|1|5|5|65|665|665|665|665|130|131|PZAAAA|VMAAAA|HHHHxx
+5974|334|0|2|4|14|74|974|1974|974|5974|148|149|UVAAAA|WMAAAA|OOOOxx
+7370|335|0|2|0|10|70|370|1370|2370|7370|140|141|MXAAAA|XMAAAA|VVVVxx
+9196|336|0|0|6|16|96|196|1196|4196|9196|192|193|SPAAAA|YMAAAA|AAAAxx
+6796|337|0|0|6|16|96|796|796|1796|6796|192|193|KBAAAA|ZMAAAA|HHHHxx
+6180|338|0|0|0|0|80|180|180|1180|6180|160|161|SDAAAA|ANAAAA|OOOOxx
+8557|339|1|1|7|17|57|557|557|3557|8557|114|115|DRAAAA|BNAAAA|VVVVxx
+928|340|0|0|8|8|28|928|928|928|928|56|57|SJAAAA|CNAAAA|AAAAxx
+6275|341|1|3|5|15|75|275|275|1275|6275|150|151|JHAAAA|DNAAAA|HHHHxx
+409|342|1|1|9|9|9|409|409|409|409|18|19|TPAAAA|ENAAAA|OOOOxx
+6442|343|0|2|2|2|42|442|442|1442|6442|84|85|UNAAAA|FNAAAA|VVVVxx
+5889|344|1|1|9|9|89|889|1889|889|5889|178|179|NSAAAA|GNAAAA|AAAAxx
+5180|345|0|0|0|0|80|180|1180|180|5180|160|161|GRAAAA|HNAAAA|HHHHxx
+1629|346|1|1|9|9|29|629|1629|1629|1629|58|59|RKAAAA|INAAAA|OOOOxx
+6088|347|0|0|8|8|88|88|88|1088|6088|176|177|EAAAAA|JNAAAA|VVVVxx
+5598|348|0|2|8|18|98|598|1598|598|5598|196|197|IHAAAA|KNAAAA|AAAAxx
+1803|349|1|3|3|3|3|803|1803|1803|1803|6|7|JRAAAA|LNAAAA|HHHHxx
+2330|350|0|2|0|10|30|330|330|2330|2330|60|61|QLAAAA|MNAAAA|OOOOxx
+5901|351|1|1|1|1|1|901|1901|901|5901|2|3|ZSAAAA|NNAAAA|VVVVxx
+780|352|0|0|0|0|80|780|780|780|780|160|161|AEAAAA|ONAAAA|AAAAxx
+7171|353|1|3|1|11|71|171|1171|2171|7171|142|143|VPAAAA|PNAAAA|HHHHxx
+8778|354|0|2|8|18|78|778|778|3778|8778|156|157|QZAAAA|QNAAAA|OOOOxx
+6622|355|0|2|2|2|22|622|622|1622|6622|44|45|SUAAAA|RNAAAA|VVVVxx
+9938|356|0|2|8|18|38|938|1938|4938|9938|76|77|GSAAAA|SNAAAA|AAAAxx
+8254|357|0|2|4|14|54|254|254|3254|8254|108|109|MFAAAA|TNAAAA|HHHHxx
+1951|358|1|3|1|11|51|951|1951|1951|1951|102|103|BXAAAA|UNAAAA|OOOOxx
+1434|359|0|2|4|14|34|434|1434|1434|1434|68|69|EDAAAA|VNAAAA|VVVVxx
+7539|360|1|3|9|19|39|539|1539|2539|7539|78|79|ZDAAAA|WNAAAA|AAAAxx
+600|361|0|0|0|0|0|600|600|600|600|0|1|CXAAAA|XNAAAA|HHHHxx
+3122|362|0|2|2|2|22|122|1122|3122|3122|44|45|CQAAAA|YNAAAA|OOOOxx
+5704|363|0|0|4|4|4|704|1704|704|5704|8|9|KLAAAA|ZNAAAA|VVVVxx
+6300|364|0|0|0|0|0|300|300|1300|6300|0|1|IIAAAA|AOAAAA|AAAAxx
+4585|365|1|1|5|5|85|585|585|4585|4585|170|171|JUAAAA|BOAAAA|HHHHxx
+6313|366|1|1|3|13|13|313|313|1313|6313|26|27|VIAAAA|COAAAA|OOOOxx
+3154|367|0|2|4|14|54|154|1154|3154|3154|108|109|IRAAAA|DOAAAA|VVVVxx
+642|368|0|2|2|2|42|642|642|642|642|84|85|SYAAAA|EOAAAA|AAAAxx
+7736|369|0|0|6|16|36|736|1736|2736|7736|72|73|OLAAAA|FOAAAA|HHHHxx
+5087|370|1|3|7|7|87|87|1087|87|5087|174|175|RNAAAA|GOAAAA|OOOOxx
+5708|371|0|0|8|8|8|708|1708|708|5708|16|17|OLAAAA|HOAAAA|VVVVxx
+8169|372|1|1|9|9|69|169|169|3169|8169|138|139|FCAAAA|IOAAAA|AAAAxx
+9768|373|0|0|8|8|68|768|1768|4768|9768|136|137|SLAAAA|JOAAAA|HHHHxx
+3874|374|0|2|4|14|74|874|1874|3874|3874|148|149|ATAAAA|KOAAAA|OOOOxx
+6831|375|1|3|1|11|31|831|831|1831|6831|62|63|TCAAAA|LOAAAA|VVVVxx
+18|376|0|2|8|18|18|18|18|18|18|36|37|SAAAAA|MOAAAA|AAAAxx
+6375|377|1|3|5|15|75|375|375|1375|6375|150|151|FLAAAA|NOAAAA|HHHHxx
+7106|378|0|2|6|6|6|106|1106|2106|7106|12|13|INAAAA|OOAAAA|OOOOxx
+5926|379|0|2|6|6|26|926|1926|926|5926|52|53|YTAAAA|POAAAA|VVVVxx
+4956|380|0|0|6|16|56|956|956|4956|4956|112|113|QIAAAA|QOAAAA|AAAAxx
+7042|381|0|2|2|2|42|42|1042|2042|7042|84|85|WKAAAA|ROAAAA|HHHHxx
+6043|382|1|3|3|3|43|43|43|1043|6043|86|87|LYAAAA|SOAAAA|OOOOxx
+2084|383|0|0|4|4|84|84|84|2084|2084|168|169|ECAAAA|TOAAAA|VVVVxx
+6038|384|0|2|8|18|38|38|38|1038|6038|76|77|GYAAAA|UOAAAA|AAAAxx
+7253|385|1|1|3|13|53|253|1253|2253|7253|106|107|ZSAAAA|VOAAAA|HHHHxx
+2061|386|1|1|1|1|61|61|61|2061|2061|122|123|HBAAAA|WOAAAA|OOOOxx
+7800|387|0|0|0|0|0|800|1800|2800|7800|0|1|AOAAAA|XOAAAA|VVVVxx
+4970|388|0|2|0|10|70|970|970|4970|4970|140|141|EJAAAA|YOAAAA|AAAAxx
+8580|389|0|0|0|0|80|580|580|3580|8580|160|161|ASAAAA|ZOAAAA|HHHHxx
+9173|390|1|1|3|13|73|173|1173|4173|9173|146|147|VOAAAA|APAAAA|OOOOxx
+8558|391|0|2|8|18|58|558|558|3558|8558|116|117|ERAAAA|BPAAAA|VVVVxx
+3897|392|1|1|7|17|97|897|1897|3897|3897|194|195|XTAAAA|CPAAAA|AAAAxx
+5069|393|1|1|9|9|69|69|1069|69|5069|138|139|ZMAAAA|DPAAAA|HHHHxx
+2301|394|1|1|1|1|1|301|301|2301|2301|2|3|NKAAAA|EPAAAA|OOOOxx
+9863|395|1|3|3|3|63|863|1863|4863|9863|126|127|JPAAAA|FPAAAA|VVVVxx
+5733|396|1|1|3|13|33|733|1733|733|5733|66|67|NMAAAA|GPAAAA|AAAAxx
+2338|397|0|2|8|18|38|338|338|2338|2338|76|77|YLAAAA|HPAAAA|HHHHxx
+9639|398|1|3|9|19|39|639|1639|4639|9639|78|79|TGAAAA|IPAAAA|OOOOxx
+1139|399|1|3|9|19|39|139|1139|1139|1139|78|79|VRAAAA|JPAAAA|VVVVxx
+2293|400|1|1|3|13|93|293|293|2293|2293|186|187|FKAAAA|KPAAAA|AAAAxx
+6125|401|1|1|5|5|25|125|125|1125|6125|50|51|PBAAAA|LPAAAA|HHHHxx
+5374|402|0|2|4|14|74|374|1374|374|5374|148|149|SYAAAA|MPAAAA|OOOOxx
+7216|403|0|0|6|16|16|216|1216|2216|7216|32|33|ORAAAA|NPAAAA|VVVVxx
+2285|404|1|1|5|5|85|285|285|2285|2285|170|171|XJAAAA|OPAAAA|AAAAxx
+2387|405|1|3|7|7|87|387|387|2387|2387|174|175|VNAAAA|PPAAAA|HHHHxx
+5015|406|1|3|5|15|15|15|1015|15|5015|30|31|XKAAAA|QPAAAA|OOOOxx
+2087|407|1|3|7|7|87|87|87|2087|2087|174|175|HCAAAA|RPAAAA|VVVVxx
+4938|408|0|2|8|18|38|938|938|4938|4938|76|77|YHAAAA|SPAAAA|AAAAxx
+3635|409|1|3|5|15|35|635|1635|3635|3635|70|71|VJAAAA|TPAAAA|HHHHxx
+7737|410|1|1|7|17|37|737|1737|2737|7737|74|75|PLAAAA|UPAAAA|OOOOxx
+8056|411|0|0|6|16|56|56|56|3056|8056|112|113|WXAAAA|VPAAAA|VVVVxx
+4502|412|0|2|2|2|2|502|502|4502|4502|4|5|ERAAAA|WPAAAA|AAAAxx
+54|413|0|2|4|14|54|54|54|54|54|108|109|CCAAAA|XPAAAA|HHHHxx
+3182|414|0|2|2|2|82|182|1182|3182|3182|164|165|KSAAAA|YPAAAA|OOOOxx
+3718|415|0|2|8|18|18|718|1718|3718|3718|36|37|ANAAAA|ZPAAAA|VVVVxx
+3989|416|1|1|9|9|89|989|1989|3989|3989|178|179|LXAAAA|AQAAAA|AAAAxx
+8028|417|0|0|8|8|28|28|28|3028|8028|56|57|UWAAAA|BQAAAA|HHHHxx
+1426|418|0|2|6|6|26|426|1426|1426|1426|52|53|WCAAAA|CQAAAA|OOOOxx
+3801|419|1|1|1|1|1|801|1801|3801|3801|2|3|FQAAAA|DQAAAA|VVVVxx
+241|420|1|1|1|1|41|241|241|241|241|82|83|HJAAAA|EQAAAA|AAAAxx
+8000|421|0|0|0|0|0|0|0|3000|8000|0|1|SVAAAA|FQAAAA|HHHHxx
+8357|422|1|1|7|17|57|357|357|3357|8357|114|115|LJAAAA|GQAAAA|OOOOxx
+7548|423|0|0|8|8|48|548|1548|2548|7548|96|97|IEAAAA|HQAAAA|VVVVxx
+7307|424|1|3|7|7|7|307|1307|2307|7307|14|15|BVAAAA|IQAAAA|AAAAxx
+2275|425|1|3|5|15|75|275|275|2275|2275|150|151|NJAAAA|JQAAAA|HHHHxx
+2718|426|0|2|8|18|18|718|718|2718|2718|36|37|OAAAAA|KQAAAA|OOOOxx
+7068|427|0|0|8|8|68|68|1068|2068|7068|136|137|WLAAAA|LQAAAA|VVVVxx
+3181|428|1|1|1|1|81|181|1181|3181|3181|162|163|JSAAAA|MQAAAA|AAAAxx
+749|429|1|1|9|9|49|749|749|749|749|98|99|VCAAAA|NQAAAA|HHHHxx
+5195|430|1|3|5|15|95|195|1195|195|5195|190|191|VRAAAA|OQAAAA|OOOOxx
+6136|431|0|0|6|16|36|136|136|1136|6136|72|73|ACAAAA|PQAAAA|VVVVxx
+8012|432|0|0|2|12|12|12|12|3012|8012|24|25|EWAAAA|QQAAAA|AAAAxx
+3957|433|1|1|7|17|57|957|1957|3957|3957|114|115|FWAAAA|RQAAAA|HHHHxx
+3083|434|1|3|3|3|83|83|1083|3083|3083|166|167|POAAAA|SQAAAA|OOOOxx
+9997|435|1|1|7|17|97|997|1997|4997|9997|194|195|NUAAAA|TQAAAA|VVVVxx
+3299|436|1|3|9|19|99|299|1299|3299|3299|198|199|XWAAAA|UQAAAA|AAAAxx
+846|437|0|2|6|6|46|846|846|846|846|92|93|OGAAAA|VQAAAA|HHHHxx
+2985|438|1|1|5|5|85|985|985|2985|2985|170|171|VKAAAA|WQAAAA|OOOOxx
+9238|439|0|2|8|18|38|238|1238|4238|9238|76|77|IRAAAA|XQAAAA|VVVVxx
+1403|440|1|3|3|3|3|403|1403|1403|1403|6|7|ZBAAAA|YQAAAA|AAAAxx
+5563|441|1|3|3|3|63|563|1563|563|5563|126|127|ZFAAAA|ZQAAAA|HHHHxx
+7965|442|1|1|5|5|65|965|1965|2965|7965|130|131|JUAAAA|ARAAAA|OOOOxx
+4512|443|0|0|2|12|12|512|512|4512|4512|24|25|ORAAAA|BRAAAA|VVVVxx
+9730|444|0|2|0|10|30|730|1730|4730|9730|60|61|GKAAAA|CRAAAA|AAAAxx
+1129|445|1|1|9|9|29|129|1129|1129|1129|58|59|LRAAAA|DRAAAA|HHHHxx
+2624|446|0|0|4|4|24|624|624|2624|2624|48|49|YWAAAA|ERAAAA|OOOOxx
+8178|447|0|2|8|18|78|178|178|3178|8178|156|157|OCAAAA|FRAAAA|VVVVxx
+6468|448|0|0|8|8|68|468|468|1468|6468|136|137|UOAAAA|GRAAAA|AAAAxx
+3027|449|1|3|7|7|27|27|1027|3027|3027|54|55|LMAAAA|HRAAAA|HHHHxx
+3845|450|1|1|5|5|45|845|1845|3845|3845|90|91|XRAAAA|IRAAAA|OOOOxx
+786|451|0|2|6|6|86|786|786|786|786|172|173|GEAAAA|JRAAAA|VVVVxx
+4971|452|1|3|1|11|71|971|971|4971|4971|142|143|FJAAAA|KRAAAA|AAAAxx
+1542|453|0|2|2|2|42|542|1542|1542|1542|84|85|IHAAAA|LRAAAA|HHHHxx
+7967|454|1|3|7|7|67|967|1967|2967|7967|134|135|LUAAAA|MRAAAA|OOOOxx
+443|455|1|3|3|3|43|443|443|443|443|86|87|BRAAAA|NRAAAA|VVVVxx
+7318|456|0|2|8|18|18|318|1318|2318|7318|36|37|MVAAAA|ORAAAA|AAAAxx
+4913|457|1|1|3|13|13|913|913|4913|4913|26|27|ZGAAAA|PRAAAA|HHHHxx
+9466|458|0|2|6|6|66|466|1466|4466|9466|132|133|CAAAAA|QRAAAA|OOOOxx
+7866|459|0|2|6|6|66|866|1866|2866|7866|132|133|OQAAAA|RRAAAA|VVVVxx
+784|460|0|0|4|4|84|784|784|784|784|168|169|EEAAAA|SRAAAA|AAAAxx
+9040|461|0|0|0|0|40|40|1040|4040|9040|80|81|SJAAAA|TRAAAA|HHHHxx
+3954|462|0|2|4|14|54|954|1954|3954|3954|108|109|CWAAAA|URAAAA|OOOOxx
+4183|463|1|3|3|3|83|183|183|4183|4183|166|167|XEAAAA|VRAAAA|VVVVxx
+3608|464|0|0|8|8|8|608|1608|3608|3608|16|17|UIAAAA|WRAAAA|AAAAxx
+7630|465|0|2|0|10|30|630|1630|2630|7630|60|61|MHAAAA|XRAAAA|HHHHxx
+590|466|0|2|0|10|90|590|590|590|590|180|181|SWAAAA|YRAAAA|OOOOxx
+3453|467|1|1|3|13|53|453|1453|3453|3453|106|107|VCAAAA|ZRAAAA|VVVVxx
+7757|468|1|1|7|17|57|757|1757|2757|7757|114|115|JMAAAA|ASAAAA|AAAAxx
+7394|469|0|2|4|14|94|394|1394|2394|7394|188|189|KYAAAA|BSAAAA|HHHHxx
+396|470|0|0|6|16|96|396|396|396|396|192|193|GPAAAA|CSAAAA|OOOOxx
+7873|471|1|1|3|13|73|873|1873|2873|7873|146|147|VQAAAA|DSAAAA|VVVVxx
+1553|472|1|1|3|13|53|553|1553|1553|1553|106|107|THAAAA|ESAAAA|AAAAxx
+598|473|0|2|8|18|98|598|598|598|598|196|197|AXAAAA|FSAAAA|HHHHxx
+7191|474|1|3|1|11|91|191|1191|2191|7191|182|183|PQAAAA|GSAAAA|OOOOxx
+8116|475|0|0|6|16|16|116|116|3116|8116|32|33|EAAAAA|HSAAAA|VVVVxx
+2516|476|0|0|6|16|16|516|516|2516|2516|32|33|USAAAA|ISAAAA|AAAAxx
+7750|477|0|2|0|10|50|750|1750|2750|7750|100|101|CMAAAA|JSAAAA|HHHHxx
+6625|478|1|1|5|5|25|625|625|1625|6625|50|51|VUAAAA|KSAAAA|OOOOxx
+8838|479|0|2|8|18|38|838|838|3838|8838|76|77|YBAAAA|LSAAAA|VVVVxx
+4636|480|0|0|6|16|36|636|636|4636|4636|72|73|IWAAAA|MSAAAA|AAAAxx
+7627|481|1|3|7|7|27|627|1627|2627|7627|54|55|JHAAAA|NSAAAA|HHHHxx
+1690|482|0|2|0|10|90|690|1690|1690|1690|180|181|ANAAAA|OSAAAA|OOOOxx
+7071|483|1|3|1|11|71|71|1071|2071|7071|142|143|ZLAAAA|PSAAAA|VVVVxx
+2081|484|1|1|1|1|81|81|81|2081|2081|162|163|BCAAAA|QSAAAA|AAAAxx
+7138|485|0|2|8|18|38|138|1138|2138|7138|76|77|OOAAAA|RSAAAA|HHHHxx
+864|486|0|0|4|4|64|864|864|864|864|128|129|GHAAAA|SSAAAA|OOOOxx
+6392|487|0|0|2|12|92|392|392|1392|6392|184|185|WLAAAA|TSAAAA|VVVVxx
+7544|488|0|0|4|4|44|544|1544|2544|7544|88|89|EEAAAA|USAAAA|AAAAxx
+5438|489|0|2|8|18|38|438|1438|438|5438|76|77|EBAAAA|VSAAAA|HHHHxx
+7099|490|1|3|9|19|99|99|1099|2099|7099|198|199|BNAAAA|WSAAAA|OOOOxx
+5157|491|1|1|7|17|57|157|1157|157|5157|114|115|JQAAAA|XSAAAA|VVVVxx
+3391|492|1|3|1|11|91|391|1391|3391|3391|182|183|LAAAAA|YSAAAA|AAAAxx
+3805|493|1|1|5|5|5|805|1805|3805|3805|10|11|JQAAAA|ZSAAAA|HHHHxx
+2110|494|0|2|0|10|10|110|110|2110|2110|20|21|EDAAAA|ATAAAA|OOOOxx
+3176|495|0|0|6|16|76|176|1176|3176|3176|152|153|ESAAAA|BTAAAA|VVVVxx
+5918|496|0|2|8|18|18|918|1918|918|5918|36|37|QTAAAA|CTAAAA|AAAAxx
+1218|497|0|2|8|18|18|218|1218|1218|1218|36|37|WUAAAA|DTAAAA|HHHHxx
+6683|498|1|3|3|3|83|683|683|1683|6683|166|167|BXAAAA|ETAAAA|OOOOxx
+914|499|0|2|4|14|14|914|914|914|914|28|29|EJAAAA|FTAAAA|VVVVxx
+4737|500|1|1|7|17|37|737|737|4737|4737|74|75|FAAAAA|GTAAAA|AAAAxx
+7286|501|0|2|6|6|86|286|1286|2286|7286|172|173|GUAAAA|HTAAAA|HHHHxx
+9975|502|1|3|5|15|75|975|1975|4975|9975|150|151|RTAAAA|ITAAAA|OOOOxx
+8030|503|0|2|0|10|30|30|30|3030|8030|60|61|WWAAAA|JTAAAA|VVVVxx
+7364|504|0|0|4|4|64|364|1364|2364|7364|128|129|GXAAAA|KTAAAA|AAAAxx
+1389|505|1|1|9|9|89|389|1389|1389|1389|178|179|LBAAAA|LTAAAA|HHHHxx
+4025|506|1|1|5|5|25|25|25|4025|4025|50|51|VYAAAA|MTAAAA|OOOOxx
+4835|507|1|3|5|15|35|835|835|4835|4835|70|71|ZDAAAA|NTAAAA|VVVVxx
+8045|508|1|1|5|5|45|45|45|3045|8045|90|91|LXAAAA|OTAAAA|AAAAxx
+1864|509|0|0|4|4|64|864|1864|1864|1864|128|129|STAAAA|PTAAAA|HHHHxx
+3313|510|1|1|3|13|13|313|1313|3313|3313|26|27|LXAAAA|QTAAAA|OOOOxx
+2384|511|0|0|4|4|84|384|384|2384|2384|168|169|SNAAAA|RTAAAA|VVVVxx
+6115|512|1|3|5|15|15|115|115|1115|6115|30|31|FBAAAA|STAAAA|AAAAxx
+5705|513|1|1|5|5|5|705|1705|705|5705|10|11|LLAAAA|TTAAAA|HHHHxx
+9269|514|1|1|9|9|69|269|1269|4269|9269|138|139|NSAAAA|UTAAAA|OOOOxx
+3379|515|1|3|9|19|79|379|1379|3379|3379|158|159|ZZAAAA|VTAAAA|VVVVxx
+8205|516|1|1|5|5|5|205|205|3205|8205|10|11|PDAAAA|WTAAAA|AAAAxx
+6575|517|1|3|5|15|75|575|575|1575|6575|150|151|XSAAAA|XTAAAA|HHHHxx
+486|518|0|2|6|6|86|486|486|486|486|172|173|SSAAAA|YTAAAA|OOOOxx
+4894|519|0|2|4|14|94|894|894|4894|4894|188|189|GGAAAA|ZTAAAA|VVVVxx
+3090|520|0|2|0|10|90|90|1090|3090|3090|180|181|WOAAAA|AUAAAA|AAAAxx
+759|521|1|3|9|19|59|759|759|759|759|118|119|FDAAAA|BUAAAA|HHHHxx
+4864|522|0|0|4|4|64|864|864|4864|4864|128|129|CFAAAA|CUAAAA|OOOOxx
+4083|523|1|3|3|3|83|83|83|4083|4083|166|167|BBAAAA|DUAAAA|VVVVxx
+6918|524|0|2|8|18|18|918|918|1918|6918|36|37|CGAAAA|EUAAAA|AAAAxx
+8146|525|0|2|6|6|46|146|146|3146|8146|92|93|IBAAAA|FUAAAA|HHHHxx
+1523|526|1|3|3|3|23|523|1523|1523|1523|46|47|PGAAAA|GUAAAA|OOOOxx
+1591|527|1|3|1|11|91|591|1591|1591|1591|182|183|FJAAAA|HUAAAA|VVVVxx
+3343|528|1|3|3|3|43|343|1343|3343|3343|86|87|PYAAAA|IUAAAA|AAAAxx
+1391|529|1|3|1|11|91|391|1391|1391|1391|182|183|NBAAAA|JUAAAA|HHHHxx
+9963|530|1|3|3|3|63|963|1963|4963|9963|126|127|FTAAAA|KUAAAA|OOOOxx
+2423|531|1|3|3|3|23|423|423|2423|2423|46|47|FPAAAA|LUAAAA|VVVVxx
+1822|532|0|2|2|2|22|822|1822|1822|1822|44|45|CSAAAA|MUAAAA|AAAAxx
+8706|533|0|2|6|6|6|706|706|3706|8706|12|13|WWAAAA|NUAAAA|HHHHxx
+3001|534|1|1|1|1|1|1|1001|3001|3001|2|3|LLAAAA|OUAAAA|OOOOxx
+6707|535|1|3|7|7|7|707|707|1707|6707|14|15|ZXAAAA|PUAAAA|VVVVxx
+2121|536|1|1|1|1|21|121|121|2121|2121|42|43|PDAAAA|QUAAAA|AAAAxx
+5814|537|0|2|4|14|14|814|1814|814|5814|28|29|QPAAAA|RUAAAA|HHHHxx
+2659|538|1|3|9|19|59|659|659|2659|2659|118|119|HYAAAA|SUAAAA|OOOOxx
+2016|539|0|0|6|16|16|16|16|2016|2016|32|33|OZAAAA|TUAAAA|VVVVxx
+4286|540|0|2|6|6|86|286|286|4286|4286|172|173|WIAAAA|UUAAAA|AAAAxx
+9205|541|1|1|5|5|5|205|1205|4205|9205|10|11|BQAAAA|VUAAAA|HHHHxx
+3496|542|0|0|6|16|96|496|1496|3496|3496|192|193|MEAAAA|WUAAAA|OOOOxx
+5333|543|1|1|3|13|33|333|1333|333|5333|66|67|DXAAAA|XUAAAA|VVVVxx
+5571|544|1|3|1|11|71|571|1571|571|5571|142|143|HGAAAA|YUAAAA|AAAAxx
+1696|545|0|0|6|16|96|696|1696|1696|1696|192|193|GNAAAA|ZUAAAA|HHHHxx
+4871|546|1|3|1|11|71|871|871|4871|4871|142|143|JFAAAA|AVAAAA|OOOOxx
+4852|547|0|0|2|12|52|852|852|4852|4852|104|105|QEAAAA|BVAAAA|VVVVxx
+8483|548|1|3|3|3|83|483|483|3483|8483|166|167|HOAAAA|CVAAAA|AAAAxx
+1376|549|0|0|6|16|76|376|1376|1376|1376|152|153|YAAAAA|DVAAAA|HHHHxx
+5456|550|0|0|6|16|56|456|1456|456|5456|112|113|WBAAAA|EVAAAA|OOOOxx
+499|551|1|3|9|19|99|499|499|499|499|198|199|FTAAAA|FVAAAA|VVVVxx
+3463|552|1|3|3|3|63|463|1463|3463|3463|126|127|FDAAAA|GVAAAA|AAAAxx
+7426|553|0|2|6|6|26|426|1426|2426|7426|52|53|QZAAAA|HVAAAA|HHHHxx
+5341|554|1|1|1|1|41|341|1341|341|5341|82|83|LXAAAA|IVAAAA|OOOOxx
+9309|555|1|1|9|9|9|309|1309|4309|9309|18|19|BUAAAA|JVAAAA|VVVVxx
+2055|556|1|3|5|15|55|55|55|2055|2055|110|111|BBAAAA|KVAAAA|AAAAxx
+2199|557|1|3|9|19|99|199|199|2199|2199|198|199|PGAAAA|LVAAAA|HHHHxx
+7235|558|1|3|5|15|35|235|1235|2235|7235|70|71|HSAAAA|MVAAAA|OOOOxx
+8661|559|1|1|1|1|61|661|661|3661|8661|122|123|DVAAAA|NVAAAA|VVVVxx
+9494|560|0|2|4|14|94|494|1494|4494|9494|188|189|EBAAAA|OVAAAA|AAAAxx
+935|561|1|3|5|15|35|935|935|935|935|70|71|ZJAAAA|PVAAAA|HHHHxx
+7044|562|0|0|4|4|44|44|1044|2044|7044|88|89|YKAAAA|QVAAAA|OOOOxx
+1974|563|0|2|4|14|74|974|1974|1974|1974|148|149|YXAAAA|RVAAAA|VVVVxx
+9679|564|1|3|9|19|79|679|1679|4679|9679|158|159|HIAAAA|SVAAAA|AAAAxx
+9822|565|0|2|2|2|22|822|1822|4822|9822|44|45|UNAAAA|TVAAAA|HHHHxx
+4088|566|0|0|8|8|88|88|88|4088|4088|176|177|GBAAAA|UVAAAA|OOOOxx
+1749|567|1|1|9|9|49|749|1749|1749|1749|98|99|HPAAAA|VVAAAA|VVVVxx
+2116|568|0|0|6|16|16|116|116|2116|2116|32|33|KDAAAA|WVAAAA|AAAAxx
+976|569|0|0|6|16|76|976|976|976|976|152|153|OLAAAA|XVAAAA|HHHHxx
+8689|570|1|1|9|9|89|689|689|3689|8689|178|179|FWAAAA|YVAAAA|OOOOxx
+2563|571|1|3|3|3|63|563|563|2563|2563|126|127|PUAAAA|ZVAAAA|VVVVxx
+7195|572|1|3|5|15|95|195|1195|2195|7195|190|191|TQAAAA|AWAAAA|AAAAxx
+9985|573|1|1|5|5|85|985|1985|4985|9985|170|171|BUAAAA|BWAAAA|HHHHxx
+7699|574|1|3|9|19|99|699|1699|2699|7699|198|199|DKAAAA|CWAAAA|OOOOxx
+5311|575|1|3|1|11|11|311|1311|311|5311|22|23|HWAAAA|DWAAAA|VVVVxx
+295|576|1|3|5|15|95|295|295|295|295|190|191|JLAAAA|EWAAAA|AAAAxx
+8214|577|0|2|4|14|14|214|214|3214|8214|28|29|YDAAAA|FWAAAA|HHHHxx
+3275|578|1|3|5|15|75|275|1275|3275|3275|150|151|ZVAAAA|GWAAAA|OOOOxx
+9646|579|0|2|6|6|46|646|1646|4646|9646|92|93|AHAAAA|HWAAAA|VVVVxx
+1908|580|0|0|8|8|8|908|1908|1908|1908|16|17|KVAAAA|IWAAAA|AAAAxx
+3858|581|0|2|8|18|58|858|1858|3858|3858|116|117|KSAAAA|JWAAAA|HHHHxx
+9362|582|0|2|2|2|62|362|1362|4362|9362|124|125|CWAAAA|KWAAAA|OOOOxx
+9307|583|1|3|7|7|7|307|1307|4307|9307|14|15|ZTAAAA|LWAAAA|VVVVxx
+6124|584|0|0|4|4|24|124|124|1124|6124|48|49|OBAAAA|MWAAAA|AAAAxx
+2405|585|1|1|5|5|5|405|405|2405|2405|10|11|NOAAAA|NWAAAA|HHHHxx
+8422|586|0|2|2|2|22|422|422|3422|8422|44|45|YLAAAA|OWAAAA|OOOOxx
+393|587|1|1|3|13|93|393|393|393|393|186|187|DPAAAA|PWAAAA|VVVVxx
+8973|588|1|1|3|13|73|973|973|3973|8973|146|147|DHAAAA|QWAAAA|AAAAxx
+5171|589|1|3|1|11|71|171|1171|171|5171|142|143|XQAAAA|RWAAAA|HHHHxx
+4929|590|1|1|9|9|29|929|929|4929|4929|58|59|PHAAAA|SWAAAA|OOOOxx
+6935|591|1|3|5|15|35|935|935|1935|6935|70|71|TGAAAA|TWAAAA|VVVVxx
+8584|592|0|0|4|4|84|584|584|3584|8584|168|169|ESAAAA|UWAAAA|AAAAxx
+1035|593|1|3|5|15|35|35|1035|1035|1035|70|71|VNAAAA|VWAAAA|HHHHxx
+3734|594|0|2|4|14|34|734|1734|3734|3734|68|69|QNAAAA|WWAAAA|OOOOxx
+1458|595|0|2|8|18|58|458|1458|1458|1458|116|117|CEAAAA|XWAAAA|VVVVxx
+8746|596|0|2|6|6|46|746|746|3746|8746|92|93|KYAAAA|YWAAAA|AAAAxx
+1677|597|1|1|7|17|77|677|1677|1677|1677|154|155|NMAAAA|ZWAAAA|HHHHxx
+8502|598|0|2|2|2|2|502|502|3502|8502|4|5|APAAAA|AXAAAA|OOOOxx
+7752|599|0|0|2|12|52|752|1752|2752|7752|104|105|EMAAAA|BXAAAA|VVVVxx
+2556|600|0|0|6|16|56|556|556|2556|2556|112|113|IUAAAA|CXAAAA|AAAAxx
+6426|601|0|2|6|6|26|426|426|1426|6426|52|53|ENAAAA|DXAAAA|HHHHxx
+8420|602|0|0|0|0|20|420|420|3420|8420|40|41|WLAAAA|EXAAAA|OOOOxx
+4462|603|0|2|2|2|62|462|462|4462|4462|124|125|QPAAAA|FXAAAA|VVVVxx
+1378|604|0|2|8|18|78|378|1378|1378|1378|156|157|ABAAAA|GXAAAA|AAAAxx
+1387|605|1|3|7|7|87|387|1387|1387|1387|174|175|JBAAAA|HXAAAA|HHHHxx
+8094|606|0|2|4|14|94|94|94|3094|8094|188|189|IZAAAA|IXAAAA|OOOOxx
+7247|607|1|3|7|7|47|247|1247|2247|7247|94|95|TSAAAA|JXAAAA|VVVVxx
+4261|608|1|1|1|1|61|261|261|4261|4261|122|123|XHAAAA|KXAAAA|AAAAxx
+5029|609|1|1|9|9|29|29|1029|29|5029|58|59|LLAAAA|LXAAAA|HHHHxx
+3625|610|1|1|5|5|25|625|1625|3625|3625|50|51|LJAAAA|MXAAAA|OOOOxx
+8068|611|0|0|8|8|68|68|68|3068|8068|136|137|IYAAAA|NXAAAA|VVVVxx
+102|612|0|2|2|2|2|102|102|102|102|4|5|YDAAAA|OXAAAA|AAAAxx
+5596|613|0|0|6|16|96|596|1596|596|5596|192|193|GHAAAA|PXAAAA|HHHHxx
+5872|614|0|0|2|12|72|872|1872|872|5872|144|145|WRAAAA|QXAAAA|OOOOxx
+4742|615|0|2|2|2|42|742|742|4742|4742|84|85|KAAAAA|RXAAAA|VVVVxx
+2117|616|1|1|7|17|17|117|117|2117|2117|34|35|LDAAAA|SXAAAA|AAAAxx
+3945|617|1|1|5|5|45|945|1945|3945|3945|90|91|TVAAAA|TXAAAA|HHHHxx
+7483|618|1|3|3|3|83|483|1483|2483|7483|166|167|VBAAAA|UXAAAA|OOOOxx
+4455|619|1|3|5|15|55|455|455|4455|4455|110|111|JPAAAA|VXAAAA|VVVVxx
+609|620|1|1|9|9|9|609|609|609|609|18|19|LXAAAA|WXAAAA|AAAAxx
+9829|621|1|1|9|9|29|829|1829|4829|9829|58|59|BOAAAA|XXAAAA|HHHHxx
+4857|622|1|1|7|17|57|857|857|4857|4857|114|115|VEAAAA|YXAAAA|OOOOxx
+3314|623|0|2|4|14|14|314|1314|3314|3314|28|29|MXAAAA|ZXAAAA|VVVVxx
+5353|624|1|1|3|13|53|353|1353|353|5353|106|107|XXAAAA|AYAAAA|AAAAxx
+4909|625|1|1|9|9|9|909|909|4909|4909|18|19|VGAAAA|BYAAAA|HHHHxx
+7597|626|1|1|7|17|97|597|1597|2597|7597|194|195|FGAAAA|CYAAAA|OOOOxx
+2683|627|1|3|3|3|83|683|683|2683|2683|166|167|FZAAAA|DYAAAA|VVVVxx
+3223|628|1|3|3|3|23|223|1223|3223|3223|46|47|ZTAAAA|EYAAAA|AAAAxx
+5363|629|1|3|3|3|63|363|1363|363|5363|126|127|HYAAAA|FYAAAA|HHHHxx
+4578|630|0|2|8|18|78|578|578|4578|4578|156|157|CUAAAA|GYAAAA|OOOOxx
+5544|631|0|0|4|4|44|544|1544|544|5544|88|89|GFAAAA|HYAAAA|VVVVxx
+1589|632|1|1|9|9|89|589|1589|1589|1589|178|179|DJAAAA|IYAAAA|AAAAxx
+7412|633|0|0|2|12|12|412|1412|2412|7412|24|25|CZAAAA|JYAAAA|HHHHxx
+3803|634|1|3|3|3|3|803|1803|3803|3803|6|7|HQAAAA|KYAAAA|OOOOxx
+6179|635|1|3|9|19|79|179|179|1179|6179|158|159|RDAAAA|LYAAAA|VVVVxx
+5588|636|0|0|8|8|88|588|1588|588|5588|176|177|YGAAAA|MYAAAA|AAAAxx
+2134|637|0|2|4|14|34|134|134|2134|2134|68|69|CEAAAA|NYAAAA|HHHHxx
+4383|638|1|3|3|3|83|383|383|4383|4383|166|167|PMAAAA|OYAAAA|OOOOxx
+6995|639|1|3|5|15|95|995|995|1995|6995|190|191|BJAAAA|PYAAAA|VVVVxx
+6598|640|0|2|8|18|98|598|598|1598|6598|196|197|UTAAAA|QYAAAA|AAAAxx
+8731|641|1|3|1|11|31|731|731|3731|8731|62|63|VXAAAA|RYAAAA|HHHHxx
+7177|642|1|1|7|17|77|177|1177|2177|7177|154|155|BQAAAA|SYAAAA|OOOOxx
+6578|643|0|2|8|18|78|578|578|1578|6578|156|157|ATAAAA|TYAAAA|VVVVxx
+9393|644|1|1|3|13|93|393|1393|4393|9393|186|187|HXAAAA|UYAAAA|AAAAxx
+1276|645|0|0|6|16|76|276|1276|1276|1276|152|153|CXAAAA|VYAAAA|HHHHxx
+8766|646|0|2|6|6|66|766|766|3766|8766|132|133|EZAAAA|WYAAAA|OOOOxx
+1015|647|1|3|5|15|15|15|1015|1015|1015|30|31|BNAAAA|XYAAAA|VVVVxx
+4396|648|0|0|6|16|96|396|396|4396|4396|192|193|CNAAAA|YYAAAA|AAAAxx
+5564|649|0|0|4|4|64|564|1564|564|5564|128|129|AGAAAA|ZYAAAA|HHHHxx
+927|650|1|3|7|7|27|927|927|927|927|54|55|RJAAAA|AZAAAA|OOOOxx
+3306|651|0|2|6|6|6|306|1306|3306|3306|12|13|EXAAAA|BZAAAA|VVVVxx
+1615|652|1|3|5|15|15|615|1615|1615|1615|30|31|DKAAAA|CZAAAA|AAAAxx
+4550|653|0|2|0|10|50|550|550|4550|4550|100|101|ATAAAA|DZAAAA|HHHHxx
+2468|654|0|0|8|8|68|468|468|2468|2468|136|137|YQAAAA|EZAAAA|OOOOxx
+5336|655|0|0|6|16|36|336|1336|336|5336|72|73|GXAAAA|FZAAAA|VVVVxx
+4471|656|1|3|1|11|71|471|471|4471|4471|142|143|ZPAAAA|GZAAAA|AAAAxx
+8085|657|1|1|5|5|85|85|85|3085|8085|170|171|ZYAAAA|HZAAAA|HHHHxx
+540|658|0|0|0|0|40|540|540|540|540|80|81|UUAAAA|IZAAAA|OOOOxx
+5108|659|0|0|8|8|8|108|1108|108|5108|16|17|MOAAAA|JZAAAA|VVVVxx
+8015|660|1|3|5|15|15|15|15|3015|8015|30|31|HWAAAA|KZAAAA|AAAAxx
+2857|661|1|1|7|17|57|857|857|2857|2857|114|115|XFAAAA|LZAAAA|HHHHxx
+9472|662|0|0|2|12|72|472|1472|4472|9472|144|145|IAAAAA|MZAAAA|OOOOxx
+5666|663|0|2|6|6|66|666|1666|666|5666|132|133|YJAAAA|NZAAAA|VVVVxx
+3555|664|1|3|5|15|55|555|1555|3555|3555|110|111|TGAAAA|OZAAAA|AAAAxx
+378|665|0|2|8|18|78|378|378|378|378|156|157|OOAAAA|PZAAAA|HHHHxx
+4466|666|0|2|6|6|66|466|466|4466|4466|132|133|UPAAAA|QZAAAA|OOOOxx
+3247|667|1|3|7|7|47|247|1247|3247|3247|94|95|XUAAAA|RZAAAA|VVVVxx
+6570|668|0|2|0|10|70|570|570|1570|6570|140|141|SSAAAA|SZAAAA|AAAAxx
+5655|669|1|3|5|15|55|655|1655|655|5655|110|111|NJAAAA|TZAAAA|HHHHxx
+917|670|1|1|7|17|17|917|917|917|917|34|35|HJAAAA|UZAAAA|OOOOxx
+3637|671|1|1|7|17|37|637|1637|3637|3637|74|75|XJAAAA|VZAAAA|VVVVxx
+3668|672|0|0|8|8|68|668|1668|3668|3668|136|137|CLAAAA|WZAAAA|AAAAxx
+5644|673|0|0|4|4|44|644|1644|644|5644|88|89|CJAAAA|XZAAAA|HHHHxx
+8286|674|0|2|6|6|86|286|286|3286|8286|172|173|SGAAAA|YZAAAA|OOOOxx
+6896|675|0|0|6|16|96|896|896|1896|6896|192|193|GFAAAA|ZZAAAA|VVVVxx
+2870|676|0|2|0|10|70|870|870|2870|2870|140|141|KGAAAA|AABAAA|AAAAxx
+8041|677|1|1|1|1|41|41|41|3041|8041|82|83|HXAAAA|BABAAA|HHHHxx
+8137|678|1|1|7|17|37|137|137|3137|8137|74|75|ZAAAAA|CABAAA|OOOOxx
+4823|679|1|3|3|3|23|823|823|4823|4823|46|47|NDAAAA|DABAAA|VVVVxx
+2438|680|0|2|8|18|38|438|438|2438|2438|76|77|UPAAAA|EABAAA|AAAAxx
+6329|681|1|1|9|9|29|329|329|1329|6329|58|59|LJAAAA|FABAAA|HHHHxx
+623|682|1|3|3|3|23|623|623|623|623|46|47|ZXAAAA|GABAAA|OOOOxx
+1360|683|0|0|0|0|60|360|1360|1360|1360|120|121|IAAAAA|HABAAA|VVVVxx
+7987|684|1|3|7|7|87|987|1987|2987|7987|174|175|FVAAAA|IABAAA|AAAAxx
+9788|685|0|0|8|8|88|788|1788|4788|9788|176|177|MMAAAA|JABAAA|HHHHxx
+3212|686|0|0|2|12|12|212|1212|3212|3212|24|25|OTAAAA|KABAAA|OOOOxx
+2725|687|1|1|5|5|25|725|725|2725|2725|50|51|VAAAAA|LABAAA|VVVVxx
+7837|688|1|1|7|17|37|837|1837|2837|7837|74|75|LPAAAA|MABAAA|AAAAxx
+4746|689|0|2|6|6|46|746|746|4746|4746|92|93|OAAAAA|NABAAA|HHHHxx
+3986|690|0|2|6|6|86|986|1986|3986|3986|172|173|IXAAAA|OABAAA|OOOOxx
+9128|691|0|0|8|8|28|128|1128|4128|9128|56|57|CNAAAA|PABAAA|VVVVxx
+5044|692|0|0|4|4|44|44|1044|44|5044|88|89|AMAAAA|QABAAA|AAAAxx
+8132|693|0|0|2|12|32|132|132|3132|8132|64|65|UAAAAA|RABAAA|HHHHxx
+9992|694|0|0|2|12|92|992|1992|4992|9992|184|185|IUAAAA|SABAAA|OOOOxx
+8468|695|0|0|8|8|68|468|468|3468|8468|136|137|SNAAAA|TABAAA|VVVVxx
+6876|696|0|0|6|16|76|876|876|1876|6876|152|153|MEAAAA|UABAAA|AAAAxx
+3532|697|0|0|2|12|32|532|1532|3532|3532|64|65|WFAAAA|VABAAA|HHHHxx
+2140|698|0|0|0|0|40|140|140|2140|2140|80|81|IEAAAA|WABAAA|OOOOxx
+2183|699|1|3|3|3|83|183|183|2183|2183|166|167|ZFAAAA|XABAAA|VVVVxx
+9766|700|0|2|6|6|66|766|1766|4766|9766|132|133|QLAAAA|YABAAA|AAAAxx
+7943|701|1|3|3|3|43|943|1943|2943|7943|86|87|NTAAAA|ZABAAA|HHHHxx
+9243|702|1|3|3|3|43|243|1243|4243|9243|86|87|NRAAAA|ABBAAA|OOOOxx
+6241|703|1|1|1|1|41|241|241|1241|6241|82|83|BGAAAA|BBBAAA|VVVVxx
+9540|704|0|0|0|0|40|540|1540|4540|9540|80|81|YCAAAA|CBBAAA|AAAAxx
+7418|705|0|2|8|18|18|418|1418|2418|7418|36|37|IZAAAA|DBBAAA|HHHHxx
+1603|706|1|3|3|3|3|603|1603|1603|1603|6|7|RJAAAA|EBBAAA|OOOOxx
+8950|707|0|2|0|10|50|950|950|3950|8950|100|101|GGAAAA|FBBAAA|VVVVxx
+6933|708|1|1|3|13|33|933|933|1933|6933|66|67|RGAAAA|GBBAAA|AAAAxx
+2646|709|0|2|6|6|46|646|646|2646|2646|92|93|UXAAAA|HBBAAA|HHHHxx
+3447|710|1|3|7|7|47|447|1447|3447|3447|94|95|PCAAAA|IBBAAA|OOOOxx
+9957|711|1|1|7|17|57|957|1957|4957|9957|114|115|ZSAAAA|JBBAAA|VVVVxx
+4623|712|1|3|3|3|23|623|623|4623|4623|46|47|VVAAAA|KBBAAA|AAAAxx
+9058|713|0|2|8|18|58|58|1058|4058|9058|116|117|KKAAAA|LBBAAA|HHHHxx
+7361|714|1|1|1|1|61|361|1361|2361|7361|122|123|DXAAAA|MBBAAA|OOOOxx
+2489|715|1|1|9|9|89|489|489|2489|2489|178|179|TRAAAA|NBBAAA|VVVVxx
+7643|716|1|3|3|3|43|643|1643|2643|7643|86|87|ZHAAAA|OBBAAA|AAAAxx
+9166|717|0|2|6|6|66|166|1166|4166|9166|132|133|OOAAAA|PBBAAA|HHHHxx
+7789|718|1|1|9|9|89|789|1789|2789|7789|178|179|PNAAAA|QBBAAA|OOOOxx
+2332|719|0|0|2|12|32|332|332|2332|2332|64|65|SLAAAA|RBBAAA|VVVVxx
+1832|720|0|0|2|12|32|832|1832|1832|1832|64|65|MSAAAA|SBBAAA|AAAAxx
+8375|721|1|3|5|15|75|375|375|3375|8375|150|151|DKAAAA|TBBAAA|HHHHxx
+948|722|0|0|8|8|48|948|948|948|948|96|97|MKAAAA|UBBAAA|OOOOxx
+5613|723|1|1|3|13|13|613|1613|613|5613|26|27|XHAAAA|VBBAAA|VVVVxx
+6310|724|0|2|0|10|10|310|310|1310|6310|20|21|SIAAAA|WBBAAA|AAAAxx
+4254|725|0|2|4|14|54|254|254|4254|4254|108|109|QHAAAA|XBBAAA|HHHHxx
+4260|726|0|0|0|0|60|260|260|4260|4260|120|121|WHAAAA|YBBAAA|OOOOxx
+2060|727|0|0|0|0|60|60|60|2060|2060|120|121|GBAAAA|ZBBAAA|VVVVxx
+4831|728|1|3|1|11|31|831|831|4831|4831|62|63|VDAAAA|ACBAAA|AAAAxx
+6176|729|0|0|6|16|76|176|176|1176|6176|152|153|ODAAAA|BCBAAA|HHHHxx
+6688|730|0|0|8|8|88|688|688|1688|6688|176|177|GXAAAA|CCBAAA|OOOOxx
+5752|731|0|0|2|12|52|752|1752|752|5752|104|105|GNAAAA|DCBAAA|VVVVxx
+8714|732|0|2|4|14|14|714|714|3714|8714|28|29|EXAAAA|ECBAAA|AAAAxx
+6739|733|1|3|9|19|39|739|739|1739|6739|78|79|FZAAAA|FCBAAA|HHHHxx
+7066|734|0|2|6|6|66|66|1066|2066|7066|132|133|ULAAAA|GCBAAA|OOOOxx
+7250|735|0|2|0|10|50|250|1250|2250|7250|100|101|WSAAAA|HCBAAA|VVVVxx
+3161|736|1|1|1|1|61|161|1161|3161|3161|122|123|PRAAAA|ICBAAA|AAAAxx
+1411|737|1|3|1|11|11|411|1411|1411|1411|22|23|HCAAAA|JCBAAA|HHHHxx
+9301|738|1|1|1|1|1|301|1301|4301|9301|2|3|TTAAAA|KCBAAA|OOOOxx
+8324|739|0|0|4|4|24|324|324|3324|8324|48|49|EIAAAA|LCBAAA|VVVVxx
+9641|740|1|1|1|1|41|641|1641|4641|9641|82|83|VGAAAA|MCBAAA|AAAAxx
+7077|741|1|1|7|17|77|77|1077|2077|7077|154|155|FMAAAA|NCBAAA|HHHHxx
+9888|742|0|0|8|8|88|888|1888|4888|9888|176|177|IQAAAA|OCBAAA|OOOOxx
+9909|743|1|1|9|9|9|909|1909|4909|9909|18|19|DRAAAA|PCBAAA|VVVVxx
+2209|744|1|1|9|9|9|209|209|2209|2209|18|19|ZGAAAA|QCBAAA|AAAAxx
+6904|745|0|0|4|4|4|904|904|1904|6904|8|9|OFAAAA|RCBAAA|HHHHxx
+6608|746|0|0|8|8|8|608|608|1608|6608|16|17|EUAAAA|SCBAAA|OOOOxx
+8400|747|0|0|0|0|0|400|400|3400|8400|0|1|CLAAAA|TCBAAA|VVVVxx
+5124|748|0|0|4|4|24|124|1124|124|5124|48|49|CPAAAA|UCBAAA|AAAAxx
+5484|749|0|0|4|4|84|484|1484|484|5484|168|169|YCAAAA|VCBAAA|HHHHxx
+3575|750|1|3|5|15|75|575|1575|3575|3575|150|151|NHAAAA|WCBAAA|OOOOxx
+9723|751|1|3|3|3|23|723|1723|4723|9723|46|47|ZJAAAA|XCBAAA|VVVVxx
+360|752|0|0|0|0|60|360|360|360|360|120|121|WNAAAA|YCBAAA|AAAAxx
+1059|753|1|3|9|19|59|59|1059|1059|1059|118|119|TOAAAA|ZCBAAA|HHHHxx
+4941|754|1|1|1|1|41|941|941|4941|4941|82|83|BIAAAA|ADBAAA|OOOOxx
+2535|755|1|3|5|15|35|535|535|2535|2535|70|71|NTAAAA|BDBAAA|VVVVxx
+4119|756|1|3|9|19|19|119|119|4119|4119|38|39|LCAAAA|CDBAAA|AAAAxx
+3725|757|1|1|5|5|25|725|1725|3725|3725|50|51|HNAAAA|DDBAAA|HHHHxx
+4758|758|0|2|8|18|58|758|758|4758|4758|116|117|ABAAAA|EDBAAA|OOOOxx
+9593|759|1|1|3|13|93|593|1593|4593|9593|186|187|ZEAAAA|FDBAAA|VVVVxx
+4663|760|1|3|3|3|63|663|663|4663|4663|126|127|JXAAAA|GDBAAA|AAAAxx
+7734|761|0|2|4|14|34|734|1734|2734|7734|68|69|MLAAAA|HDBAAA|HHHHxx
+9156|762|0|0|6|16|56|156|1156|4156|9156|112|113|EOAAAA|IDBAAA|OOOOxx
+8120|763|0|0|0|0|20|120|120|3120|8120|40|41|IAAAAA|JDBAAA|VVVVxx
+4385|764|1|1|5|5|85|385|385|4385|4385|170|171|RMAAAA|KDBAAA|AAAAxx
+2926|765|0|2|6|6|26|926|926|2926|2926|52|53|OIAAAA|LDBAAA|HHHHxx
+4186|766|0|2|6|6|86|186|186|4186|4186|172|173|AFAAAA|MDBAAA|OOOOxx
+2508|767|0|0|8|8|8|508|508|2508|2508|16|17|MSAAAA|NDBAAA|VVVVxx
+4012|768|0|0|2|12|12|12|12|4012|4012|24|25|IYAAAA|ODBAAA|AAAAxx
+6266|769|0|2|6|6|66|266|266|1266|6266|132|133|AHAAAA|PDBAAA|HHHHxx
+3709|770|1|1|9|9|9|709|1709|3709|3709|18|19|RMAAAA|QDBAAA|OOOOxx
+7289|771|1|1|9|9|89|289|1289|2289|7289|178|179|JUAAAA|RDBAAA|VVVVxx
+8875|772|1|3|5|15|75|875|875|3875|8875|150|151|JDAAAA|SDBAAA|AAAAxx
+4412|773|0|0|2|12|12|412|412|4412|4412|24|25|SNAAAA|TDBAAA|HHHHxx
+3033|774|1|1|3|13|33|33|1033|3033|3033|66|67|RMAAAA|UDBAAA|OOOOxx
+1645|775|1|1|5|5|45|645|1645|1645|1645|90|91|HLAAAA|VDBAAA|VVVVxx
+3557|776|1|1|7|17|57|557|1557|3557|3557|114|115|VGAAAA|WDBAAA|AAAAxx
+6316|777|0|0|6|16|16|316|316|1316|6316|32|33|YIAAAA|XDBAAA|HHHHxx
+2054|778|0|2|4|14|54|54|54|2054|2054|108|109|ABAAAA|YDBAAA|OOOOxx
+7031|779|1|3|1|11|31|31|1031|2031|7031|62|63|LKAAAA|ZDBAAA|VVVVxx
+3405|780|1|1|5|5|5|405|1405|3405|3405|10|11|ZAAAAA|AEBAAA|AAAAxx
+5343|781|1|3|3|3|43|343|1343|343|5343|86|87|NXAAAA|BEBAAA|HHHHxx
+5240|782|0|0|0|0|40|240|1240|240|5240|80|81|OTAAAA|CEBAAA|OOOOxx
+9650|783|0|2|0|10|50|650|1650|4650|9650|100|101|EHAAAA|DEBAAA|VVVVxx
+3777|784|1|1|7|17|77|777|1777|3777|3777|154|155|HPAAAA|EEBAAA|AAAAxx
+9041|785|1|1|1|1|41|41|1041|4041|9041|82|83|TJAAAA|FEBAAA|HHHHxx
+6923|786|1|3|3|3|23|923|923|1923|6923|46|47|HGAAAA|GEBAAA|OOOOxx
+2977|787|1|1|7|17|77|977|977|2977|2977|154|155|NKAAAA|HEBAAA|VVVVxx
+5500|788|0|0|0|0|0|500|1500|500|5500|0|1|ODAAAA|IEBAAA|AAAAxx
+1044|789|0|0|4|4|44|44|1044|1044|1044|88|89|EOAAAA|JEBAAA|HHHHxx
+434|790|0|2|4|14|34|434|434|434|434|68|69|SQAAAA|KEBAAA|OOOOxx
+611|791|1|3|1|11|11|611|611|611|611|22|23|NXAAAA|LEBAAA|VVVVxx
+5760|792|0|0|0|0|60|760|1760|760|5760|120|121|ONAAAA|MEBAAA|AAAAxx
+2445|793|1|1|5|5|45|445|445|2445|2445|90|91|BQAAAA|NEBAAA|HHHHxx
+7098|794|0|2|8|18|98|98|1098|2098|7098|196|197|ANAAAA|OEBAAA|OOOOxx
+2188|795|0|0|8|8|88|188|188|2188|2188|176|177|EGAAAA|PEBAAA|VVVVxx
+4597|796|1|1|7|17|97|597|597|4597|4597|194|195|VUAAAA|QEBAAA|AAAAxx
+1913|797|1|1|3|13|13|913|1913|1913|1913|26|27|PVAAAA|REBAAA|HHHHxx
+8696|798|0|0|6|16|96|696|696|3696|8696|192|193|MWAAAA|SEBAAA|OOOOxx
+3332|799|0|0|2|12|32|332|1332|3332|3332|64|65|EYAAAA|TEBAAA|VVVVxx
+8760|800|0|0|0|0|60|760|760|3760|8760|120|121|YYAAAA|UEBAAA|AAAAxx
+3215|801|1|3|5|15|15|215|1215|3215|3215|30|31|RTAAAA|VEBAAA|HHHHxx
+1625|802|1|1|5|5|25|625|1625|1625|1625|50|51|NKAAAA|WEBAAA|OOOOxx
+4219|803|1|3|9|19|19|219|219|4219|4219|38|39|HGAAAA|XEBAAA|VVVVxx
+415|804|1|3|5|15|15|415|415|415|415|30|31|ZPAAAA|YEBAAA|AAAAxx
+4242|805|0|2|2|2|42|242|242|4242|4242|84|85|EHAAAA|ZEBAAA|HHHHxx
+8660|806|0|0|0|0|60|660|660|3660|8660|120|121|CVAAAA|AFBAAA|OOOOxx
+6525|807|1|1|5|5|25|525|525|1525|6525|50|51|ZQAAAA|BFBAAA|VVVVxx
+2141|808|1|1|1|1|41|141|141|2141|2141|82|83|JEAAAA|CFBAAA|AAAAxx
+5152|809|0|0|2|12|52|152|1152|152|5152|104|105|EQAAAA|DFBAAA|HHHHxx
+8560|810|0|0|0|0|60|560|560|3560|8560|120|121|GRAAAA|EFBAAA|OOOOxx
+9835|811|1|3|5|15|35|835|1835|4835|9835|70|71|HOAAAA|FFBAAA|VVVVxx
+2657|812|1|1|7|17|57|657|657|2657|2657|114|115|FYAAAA|GFBAAA|AAAAxx
+6085|813|1|1|5|5|85|85|85|1085|6085|170|171|BAAAAA|HFBAAA|HHHHxx
+6698|814|0|2|8|18|98|698|698|1698|6698|196|197|QXAAAA|IFBAAA|OOOOxx
+5421|815|1|1|1|1|21|421|1421|421|5421|42|43|NAAAAA|JFBAAA|VVVVxx
+6661|816|1|1|1|1|61|661|661|1661|6661|122|123|FWAAAA|KFBAAA|AAAAxx
+5645|817|1|1|5|5|45|645|1645|645|5645|90|91|DJAAAA|LFBAAA|HHHHxx
+1248|818|0|0|8|8|48|248|1248|1248|1248|96|97|AWAAAA|MFBAAA|OOOOxx
+5690|819|0|2|0|10|90|690|1690|690|5690|180|181|WKAAAA|NFBAAA|VVVVxx
+4762|820|0|2|2|2|62|762|762|4762|4762|124|125|EBAAAA|OFBAAA|AAAAxx
+1455|821|1|3|5|15|55|455|1455|1455|1455|110|111|ZDAAAA|PFBAAA|HHHHxx
+9846|822|0|2|6|6|46|846|1846|4846|9846|92|93|SOAAAA|QFBAAA|OOOOxx
+5295|823|1|3|5|15|95|295|1295|295|5295|190|191|RVAAAA|RFBAAA|VVVVxx
+2826|824|0|2|6|6|26|826|826|2826|2826|52|53|SEAAAA|SFBAAA|AAAAxx
+7496|825|0|0|6|16|96|496|1496|2496|7496|192|193|ICAAAA|TFBAAA|HHHHxx
+3024|826|0|0|4|4|24|24|1024|3024|3024|48|49|IMAAAA|UFBAAA|OOOOxx
+4945|827|1|1|5|5|45|945|945|4945|4945|90|91|FIAAAA|VFBAAA|VVVVxx
+4404|828|0|0|4|4|4|404|404|4404|4404|8|9|KNAAAA|WFBAAA|AAAAxx
+9302|829|0|2|2|2|2|302|1302|4302|9302|4|5|UTAAAA|XFBAAA|HHHHxx
+1286|830|0|2|6|6|86|286|1286|1286|1286|172|173|MXAAAA|YFBAAA|OOOOxx
+8435|831|1|3|5|15|35|435|435|3435|8435|70|71|LMAAAA|ZFBAAA|VVVVxx
+8969|832|1|1|9|9|69|969|969|3969|8969|138|139|ZGAAAA|AGBAAA|AAAAxx
+3302|833|0|2|2|2|2|302|1302|3302|3302|4|5|AXAAAA|BGBAAA|HHHHxx
+9753|834|1|1|3|13|53|753|1753|4753|9753|106|107|DLAAAA|CGBAAA|OOOOxx
+9374|835|0|2|4|14|74|374|1374|4374|9374|148|149|OWAAAA|DGBAAA|VVVVxx
+4907|836|1|3|7|7|7|907|907|4907|4907|14|15|TGAAAA|EGBAAA|AAAAxx
+1659|837|1|3|9|19|59|659|1659|1659|1659|118|119|VLAAAA|FGBAAA|HHHHxx
+5095|838|1|3|5|15|95|95|1095|95|5095|190|191|ZNAAAA|GGBAAA|OOOOxx
+9446|839|0|2|6|6|46|446|1446|4446|9446|92|93|IZAAAA|HGBAAA|VVVVxx
+8528|840|0|0|8|8|28|528|528|3528|8528|56|57|AQAAAA|IGBAAA|AAAAxx
+4890|841|0|2|0|10|90|890|890|4890|4890|180|181|CGAAAA|JGBAAA|HHHHxx
+1221|842|1|1|1|1|21|221|1221|1221|1221|42|43|ZUAAAA|KGBAAA|OOOOxx
+5583|843|1|3|3|3|83|583|1583|583|5583|166|167|TGAAAA|LGBAAA|VVVVxx
+7303|844|1|3|3|3|3|303|1303|2303|7303|6|7|XUAAAA|MGBAAA|AAAAxx
+406|845|0|2|6|6|6|406|406|406|406|12|13|QPAAAA|NGBAAA|HHHHxx
+7542|846|0|2|2|2|42|542|1542|2542|7542|84|85|CEAAAA|OGBAAA|OOOOxx
+9507|847|1|3|7|7|7|507|1507|4507|9507|14|15|RBAAAA|PGBAAA|VVVVxx
+9511|848|1|3|1|11|11|511|1511|4511|9511|22|23|VBAAAA|QGBAAA|AAAAxx
+1373|849|1|1|3|13|73|373|1373|1373|1373|146|147|VAAAAA|RGBAAA|HHHHxx
+6556|850|0|0|6|16|56|556|556|1556|6556|112|113|ESAAAA|SGBAAA|OOOOxx
+4117|851|1|1|7|17|17|117|117|4117|4117|34|35|JCAAAA|TGBAAA|VVVVxx
+7794|852|0|2|4|14|94|794|1794|2794|7794|188|189|UNAAAA|UGBAAA|AAAAxx
+7170|853|0|2|0|10|70|170|1170|2170|7170|140|141|UPAAAA|VGBAAA|HHHHxx
+5809|854|1|1|9|9|9|809|1809|809|5809|18|19|LPAAAA|WGBAAA|OOOOxx
+7828|855|0|0|8|8|28|828|1828|2828|7828|56|57|CPAAAA|XGBAAA|VVVVxx
+8046|856|0|2|6|6|46|46|46|3046|8046|92|93|MXAAAA|YGBAAA|AAAAxx
+4833|857|1|1|3|13|33|833|833|4833|4833|66|67|XDAAAA|ZGBAAA|HHHHxx
+2107|858|1|3|7|7|7|107|107|2107|2107|14|15|BDAAAA|AHBAAA|OOOOxx
+4276|859|0|0|6|16|76|276|276|4276|4276|152|153|MIAAAA|BHBAAA|VVVVxx
+9536|860|0|0|6|16|36|536|1536|4536|9536|72|73|UCAAAA|CHBAAA|AAAAxx
+5549|861|1|1|9|9|49|549|1549|549|5549|98|99|LFAAAA|DHBAAA|HHHHxx
+6427|862|1|3|7|7|27|427|427|1427|6427|54|55|FNAAAA|EHBAAA|OOOOxx
+1382|863|0|2|2|2|82|382|1382|1382|1382|164|165|EBAAAA|FHBAAA|VVVVxx
+3256|864|0|0|6|16|56|256|1256|3256|3256|112|113|GVAAAA|GHBAAA|AAAAxx
+3270|865|0|2|0|10|70|270|1270|3270|3270|140|141|UVAAAA|HHBAAA|HHHHxx
+4808|866|0|0|8|8|8|808|808|4808|4808|16|17|YCAAAA|IHBAAA|OOOOxx
+7938|867|0|2|8|18|38|938|1938|2938|7938|76|77|ITAAAA|JHBAAA|VVVVxx
+4405|868|1|1|5|5|5|405|405|4405|4405|10|11|LNAAAA|KHBAAA|AAAAxx
+2264|869|0|0|4|4|64|264|264|2264|2264|128|129|CJAAAA|LHBAAA|HHHHxx
+80|870|0|0|0|0|80|80|80|80|80|160|161|CDAAAA|MHBAAA|OOOOxx
+320|871|0|0|0|0|20|320|320|320|320|40|41|IMAAAA|NHBAAA|VVVVxx
+2383|872|1|3|3|3|83|383|383|2383|2383|166|167|RNAAAA|OHBAAA|AAAAxx
+3146|873|0|2|6|6|46|146|1146|3146|3146|92|93|ARAAAA|PHBAAA|HHHHxx
+6911|874|1|3|1|11|11|911|911|1911|6911|22|23|VFAAAA|QHBAAA|OOOOxx
+7377|875|1|1|7|17|77|377|1377|2377|7377|154|155|TXAAAA|RHBAAA|VVVVxx
+9965|876|1|1|5|5|65|965|1965|4965|9965|130|131|HTAAAA|SHBAAA|AAAAxx
+8361|877|1|1|1|1|61|361|361|3361|8361|122|123|PJAAAA|THBAAA|HHHHxx
+9417|878|1|1|7|17|17|417|1417|4417|9417|34|35|FYAAAA|UHBAAA|OOOOxx
+2483|879|1|3|3|3|83|483|483|2483|2483|166|167|NRAAAA|VHBAAA|VVVVxx
+9843|880|1|3|3|3|43|843|1843|4843|9843|86|87|POAAAA|WHBAAA|AAAAxx
+6395|881|1|3|5|15|95|395|395|1395|6395|190|191|ZLAAAA|XHBAAA|HHHHxx
+6444|882|0|0|4|4|44|444|444|1444|6444|88|89|WNAAAA|YHBAAA|OOOOxx
+1820|883|0|0|0|0|20|820|1820|1820|1820|40|41|ASAAAA|ZHBAAA|VVVVxx
+2768|884|0|0|8|8|68|768|768|2768|2768|136|137|MCAAAA|AIBAAA|AAAAxx
+5413|885|1|1|3|13|13|413|1413|413|5413|26|27|FAAAAA|BIBAAA|HHHHxx
+2923|886|1|3|3|3|23|923|923|2923|2923|46|47|LIAAAA|CIBAAA|OOOOxx
+5286|887|0|2|6|6|86|286|1286|286|5286|172|173|IVAAAA|DIBAAA|VVVVxx
+6126|888|0|2|6|6|26|126|126|1126|6126|52|53|QBAAAA|EIBAAA|AAAAxx
+8343|889|1|3|3|3|43|343|343|3343|8343|86|87|XIAAAA|FIBAAA|HHHHxx
+6010|890|0|2|0|10|10|10|10|1010|6010|20|21|EXAAAA|GIBAAA|OOOOxx
+4177|891|1|1|7|17|77|177|177|4177|4177|154|155|REAAAA|HIBAAA|VVVVxx
+5808|892|0|0|8|8|8|808|1808|808|5808|16|17|KPAAAA|IIBAAA|AAAAxx
+4859|893|1|3|9|19|59|859|859|4859|4859|118|119|XEAAAA|JIBAAA|HHHHxx
+9252|894|0|0|2|12|52|252|1252|4252|9252|104|105|WRAAAA|KIBAAA|OOOOxx
+2941|895|1|1|1|1|41|941|941|2941|2941|82|83|DJAAAA|LIBAAA|VVVVxx
+8693|896|1|1|3|13|93|693|693|3693|8693|186|187|JWAAAA|MIBAAA|AAAAxx
+4432|897|0|0|2|12|32|432|432|4432|4432|64|65|MOAAAA|NIBAAA|HHHHxx
+2371|898|1|3|1|11|71|371|371|2371|2371|142|143|FNAAAA|OIBAAA|OOOOxx
+7546|899|0|2|6|6|46|546|1546|2546|7546|92|93|GEAAAA|PIBAAA|VVVVxx
+1369|900|1|1|9|9|69|369|1369|1369|1369|138|139|RAAAAA|QIBAAA|AAAAxx
+4687|901|1|3|7|7|87|687|687|4687|4687|174|175|HYAAAA|RIBAAA|HHHHxx
+8941|902|1|1|1|1|41|941|941|3941|8941|82|83|XFAAAA|SIBAAA|OOOOxx
+226|903|0|2|6|6|26|226|226|226|226|52|53|SIAAAA|TIBAAA|VVVVxx
+3493|904|1|1|3|13|93|493|1493|3493|3493|186|187|JEAAAA|UIBAAA|AAAAxx
+6433|905|1|1|3|13|33|433|433|1433|6433|66|67|LNAAAA|VIBAAA|HHHHxx
+9189|906|1|1|9|9|89|189|1189|4189|9189|178|179|LPAAAA|WIBAAA|OOOOxx
+6027|907|1|3|7|7|27|27|27|1027|6027|54|55|VXAAAA|XIBAAA|VVVVxx
+4615|908|1|3|5|15|15|615|615|4615|4615|30|31|NVAAAA|YIBAAA|AAAAxx
+5320|909|0|0|0|0|20|320|1320|320|5320|40|41|QWAAAA|ZIBAAA|HHHHxx
+7002|910|0|2|2|2|2|2|1002|2002|7002|4|5|IJAAAA|AJBAAA|OOOOxx
+7367|911|1|3|7|7|67|367|1367|2367|7367|134|135|JXAAAA|BJBAAA|VVVVxx
+289|912|1|1|9|9|89|289|289|289|289|178|179|DLAAAA|CJBAAA|AAAAxx
+407|913|1|3|7|7|7|407|407|407|407|14|15|RPAAAA|DJBAAA|HHHHxx
+504|914|0|0|4|4|4|504|504|504|504|8|9|KTAAAA|EJBAAA|OOOOxx
+8301|915|1|1|1|1|1|301|301|3301|8301|2|3|HHAAAA|FJBAAA|VVVVxx
+1396|916|0|0|6|16|96|396|1396|1396|1396|192|193|SBAAAA|GJBAAA|AAAAxx
+4794|917|0|2|4|14|94|794|794|4794|4794|188|189|KCAAAA|HJBAAA|HHHHxx
+6400|918|0|0|0|0|0|400|400|1400|6400|0|1|EMAAAA|IJBAAA|OOOOxx
+1275|919|1|3|5|15|75|275|1275|1275|1275|150|151|BXAAAA|JJBAAA|VVVVxx
+5797|920|1|1|7|17|97|797|1797|797|5797|194|195|ZOAAAA|KJBAAA|AAAAxx
+2221|921|1|1|1|1|21|221|221|2221|2221|42|43|LHAAAA|LJBAAA|HHHHxx
+2504|922|0|0|4|4|4|504|504|2504|2504|8|9|ISAAAA|MJBAAA|OOOOxx
+2143|923|1|3|3|3|43|143|143|2143|2143|86|87|LEAAAA|NJBAAA|VVVVxx
+1083|924|1|3|3|3|83|83|1083|1083|1083|166|167|RPAAAA|OJBAAA|AAAAxx
+6148|925|0|0|8|8|48|148|148|1148|6148|96|97|MCAAAA|PJBAAA|HHHHxx
+3612|926|0|0|2|12|12|612|1612|3612|3612|24|25|YIAAAA|QJBAAA|OOOOxx
+9499|927|1|3|9|19|99|499|1499|4499|9499|198|199|JBAAAA|RJBAAA|VVVVxx
+5773|928|1|1|3|13|73|773|1773|773|5773|146|147|BOAAAA|SJBAAA|AAAAxx
+1014|929|0|2|4|14|14|14|1014|1014|1014|28|29|ANAAAA|TJBAAA|HHHHxx
+1427|930|1|3|7|7|27|427|1427|1427|1427|54|55|XCAAAA|UJBAAA|OOOOxx
+6770|931|0|2|0|10|70|770|770|1770|6770|140|141|KAAAAA|VJBAAA|VVVVxx
+9042|932|0|2|2|2|42|42|1042|4042|9042|84|85|UJAAAA|WJBAAA|AAAAxx
+9892|933|0|0|2|12|92|892|1892|4892|9892|184|185|MQAAAA|XJBAAA|HHHHxx
+1771|934|1|3|1|11|71|771|1771|1771|1771|142|143|DQAAAA|YJBAAA|OOOOxx
+7392|935|0|0|2|12|92|392|1392|2392|7392|184|185|IYAAAA|ZJBAAA|VVVVxx
+4465|936|1|1|5|5|65|465|465|4465|4465|130|131|TPAAAA|AKBAAA|AAAAxx
+278|937|0|2|8|18|78|278|278|278|278|156|157|SKAAAA|BKBAAA|HHHHxx
+7776|938|0|0|6|16|76|776|1776|2776|7776|152|153|CNAAAA|CKBAAA|OOOOxx
+3763|939|1|3|3|3|63|763|1763|3763|3763|126|127|TOAAAA|DKBAAA|VVVVxx
+7503|940|1|3|3|3|3|503|1503|2503|7503|6|7|PCAAAA|EKBAAA|AAAAxx
+3793|941|1|1|3|13|93|793|1793|3793|3793|186|187|XPAAAA|FKBAAA|HHHHxx
+6510|942|0|2|0|10|10|510|510|1510|6510|20|21|KQAAAA|GKBAAA|OOOOxx
+7641|943|1|1|1|1|41|641|1641|2641|7641|82|83|XHAAAA|HKBAAA|VVVVxx
+3228|944|0|0|8|8|28|228|1228|3228|3228|56|57|EUAAAA|IKBAAA|AAAAxx
+194|945|0|2|4|14|94|194|194|194|194|188|189|MHAAAA|JKBAAA|HHHHxx
+8555|946|1|3|5|15|55|555|555|3555|8555|110|111|BRAAAA|KKBAAA|OOOOxx
+4997|947|1|1|7|17|97|997|997|4997|4997|194|195|FKAAAA|LKBAAA|VVVVxx
+8687|948|1|3|7|7|87|687|687|3687|8687|174|175|DWAAAA|MKBAAA|AAAAxx
+6632|949|0|0|2|12|32|632|632|1632|6632|64|65|CVAAAA|NKBAAA|HHHHxx
+9607|950|1|3|7|7|7|607|1607|4607|9607|14|15|NFAAAA|OKBAAA|OOOOxx
+6201|951|1|1|1|1|1|201|201|1201|6201|2|3|NEAAAA|PKBAAA|VVVVxx
+857|952|1|1|7|17|57|857|857|857|857|114|115|ZGAAAA|QKBAAA|AAAAxx
+5623|953|1|3|3|3|23|623|1623|623|5623|46|47|HIAAAA|RKBAAA|HHHHxx
+5979|954|1|3|9|19|79|979|1979|979|5979|158|159|ZVAAAA|SKBAAA|OOOOxx
+2201|955|1|1|1|1|1|201|201|2201|2201|2|3|RGAAAA|TKBAAA|VVVVxx
+3166|956|0|2|6|6|66|166|1166|3166|3166|132|133|URAAAA|UKBAAA|AAAAxx
+6249|957|1|1|9|9|49|249|249|1249|6249|98|99|JGAAAA|VKBAAA|HHHHxx
+3271|958|1|3|1|11|71|271|1271|3271|3271|142|143|VVAAAA|WKBAAA|OOOOxx
+7777|959|1|1|7|17|77|777|1777|2777|7777|154|155|DNAAAA|XKBAAA|VVVVxx
+6732|960|0|0|2|12|32|732|732|1732|6732|64|65|YYAAAA|YKBAAA|AAAAxx
+6297|961|1|1|7|17|97|297|297|1297|6297|194|195|FIAAAA|ZKBAAA|HHHHxx
+5685|962|1|1|5|5|85|685|1685|685|5685|170|171|RKAAAA|ALBAAA|OOOOxx
+9931|963|1|3|1|11|31|931|1931|4931|9931|62|63|ZRAAAA|BLBAAA|VVVVxx
+7485|964|1|1|5|5|85|485|1485|2485|7485|170|171|XBAAAA|CLBAAA|AAAAxx
+386|965|0|2|6|6|86|386|386|386|386|172|173|WOAAAA|DLBAAA|HHHHxx
+8204|966|0|0|4|4|4|204|204|3204|8204|8|9|ODAAAA|ELBAAA|OOOOxx
+3606|967|0|2|6|6|6|606|1606|3606|3606|12|13|SIAAAA|FLBAAA|VVVVxx
+1692|968|0|0|2|12|92|692|1692|1692|1692|184|185|CNAAAA|GLBAAA|AAAAxx
+3002|969|0|2|2|2|2|2|1002|3002|3002|4|5|MLAAAA|HLBAAA|HHHHxx
+9676|970|0|0|6|16|76|676|1676|4676|9676|152|153|EIAAAA|ILBAAA|OOOOxx
+915|971|1|3|5|15|15|915|915|915|915|30|31|FJAAAA|JLBAAA|VVVVxx
+7706|972|0|2|6|6|6|706|1706|2706|7706|12|13|KKAAAA|KLBAAA|AAAAxx
+6080|973|0|0|0|0|80|80|80|1080|6080|160|161|WZAAAA|LLBAAA|HHHHxx
+1860|974|0|0|0|0|60|860|1860|1860|1860|120|121|OTAAAA|MLBAAA|OOOOxx
+1444|975|0|0|4|4|44|444|1444|1444|1444|88|89|ODAAAA|NLBAAA|VVVVxx
+7208|976|0|0|8|8|8|208|1208|2208|7208|16|17|GRAAAA|OLBAAA|AAAAxx
+8554|977|0|2|4|14|54|554|554|3554|8554|108|109|ARAAAA|PLBAAA|HHHHxx
+2028|978|0|0|8|8|28|28|28|2028|2028|56|57|AAAAAA|QLBAAA|OOOOxx
+9893|979|1|1|3|13|93|893|1893|4893|9893|186|187|NQAAAA|RLBAAA|VVVVxx
+4740|980|0|0|0|0|40|740|740|4740|4740|80|81|IAAAAA|SLBAAA|AAAAxx
+6186|981|0|2|6|6|86|186|186|1186|6186|172|173|YDAAAA|TLBAAA|HHHHxx
+6357|982|1|1|7|17|57|357|357|1357|6357|114|115|NKAAAA|ULBAAA|OOOOxx
+3699|983|1|3|9|19|99|699|1699|3699|3699|198|199|HMAAAA|VLBAAA|VVVVxx
+7620|984|0|0|0|0|20|620|1620|2620|7620|40|41|CHAAAA|WLBAAA|AAAAxx
+921|985|1|1|1|1|21|921|921|921|921|42|43|LJAAAA|XLBAAA|HHHHxx
+5506|986|0|2|6|6|6|506|1506|506|5506|12|13|UDAAAA|YLBAAA|OOOOxx
+8851|987|1|3|1|11|51|851|851|3851|8851|102|103|LCAAAA|ZLBAAA|VVVVxx
+3205|988|1|1|5|5|5|205|1205|3205|3205|10|11|HTAAAA|AMBAAA|AAAAxx
+1956|989|0|0|6|16|56|956|1956|1956|1956|112|113|GXAAAA|BMBAAA|HHHHxx
+6272|990|0|0|2|12|72|272|272|1272|6272|144|145|GHAAAA|CMBAAA|OOOOxx
+1509|991|1|1|9|9|9|509|1509|1509|1509|18|19|BGAAAA|DMBAAA|VVVVxx
+53|992|1|1|3|13|53|53|53|53|53|106|107|BCAAAA|EMBAAA|AAAAxx
+213|993|1|1|3|13|13|213|213|213|213|26|27|FIAAAA|FMBAAA|HHHHxx
+4924|994|0|0|4|4|24|924|924|4924|4924|48|49|KHAAAA|GMBAAA|OOOOxx
+2097|995|1|1|7|17|97|97|97|2097|2097|194|195|RCAAAA|HMBAAA|VVVVxx
+4607|996|1|3|7|7|7|607|607|4607|4607|14|15|FVAAAA|IMBAAA|AAAAxx
+1582|997|0|2|2|2|82|582|1582|1582|1582|164|165|WIAAAA|JMBAAA|HHHHxx
+6643|998|1|3|3|3|43|643|643|1643|6643|86|87|NVAAAA|KMBAAA|OOOOxx
+2238|999|0|2|8|18|38|238|238|2238|2238|76|77|CIAAAA|LMBAAA|VVVVxx
+2942|1000|0|2|2|2|42|942|942|2942|2942|84|85|EJAAAA|MMBAAA|AAAAxx
+1655|1001|1|3|5|15|55|655|1655|1655|1655|110|111|RLAAAA|NMBAAA|HHHHxx
+3226|1002|0|2|6|6|26|226|1226|3226|3226|52|53|CUAAAA|OMBAAA|OOOOxx
+4263|1003|1|3|3|3|63|263|263|4263|4263|126|127|ZHAAAA|PMBAAA|VVVVxx
+960|1004|0|0|0|0|60|960|960|960|960|120|121|YKAAAA|QMBAAA|AAAAxx
+1213|1005|1|1|3|13|13|213|1213|1213|1213|26|27|RUAAAA|RMBAAA|HHHHxx
+1845|1006|1|1|5|5|45|845|1845|1845|1845|90|91|ZSAAAA|SMBAAA|OOOOxx
+6944|1007|0|0|4|4|44|944|944|1944|6944|88|89|CHAAAA|TMBAAA|VVVVxx
+5284|1008|0|0|4|4|84|284|1284|284|5284|168|169|GVAAAA|UMBAAA|AAAAxx
+188|1009|0|0|8|8|88|188|188|188|188|176|177|GHAAAA|VMBAAA|HHHHxx
+748|1010|0|0|8|8|48|748|748|748|748|96|97|UCAAAA|WMBAAA|OOOOxx
+2226|1011|0|2|6|6|26|226|226|2226|2226|52|53|QHAAAA|XMBAAA|VVVVxx
+7342|1012|0|2|2|2|42|342|1342|2342|7342|84|85|KWAAAA|YMBAAA|AAAAxx
+6120|1013|0|0|0|0|20|120|120|1120|6120|40|41|KBAAAA|ZMBAAA|HHHHxx
+536|1014|0|0|6|16|36|536|536|536|536|72|73|QUAAAA|ANBAAA|OOOOxx
+3239|1015|1|3|9|19|39|239|1239|3239|3239|78|79|PUAAAA|BNBAAA|VVVVxx
+2832|1016|0|0|2|12|32|832|832|2832|2832|64|65|YEAAAA|CNBAAA|AAAAxx
+5296|1017|0|0|6|16|96|296|1296|296|5296|192|193|SVAAAA|DNBAAA|HHHHxx
+5795|1018|1|3|5|15|95|795|1795|795|5795|190|191|XOAAAA|ENBAAA|OOOOxx
+6290|1019|0|2|0|10|90|290|290|1290|6290|180|181|YHAAAA|FNBAAA|VVVVxx
+4916|1020|0|0|6|16|16|916|916|4916|4916|32|33|CHAAAA|GNBAAA|AAAAxx
+8366|1021|0|2|6|6|66|366|366|3366|8366|132|133|UJAAAA|HNBAAA|HHHHxx
+4248|1022|0|0|8|8|48|248|248|4248|4248|96|97|KHAAAA|INBAAA|OOOOxx
+6460|1023|0|0|0|0|60|460|460|1460|6460|120|121|MOAAAA|JNBAAA|VVVVxx
+9296|1024|0|0|6|16|96|296|1296|4296|9296|192|193|OTAAAA|KNBAAA|AAAAxx
+3486|1025|0|2|6|6|86|486|1486|3486|3486|172|173|CEAAAA|LNBAAA|HHHHxx
+5664|1026|0|0|4|4|64|664|1664|664|5664|128|129|WJAAAA|MNBAAA|OOOOxx
+7624|1027|0|0|4|4|24|624|1624|2624|7624|48|49|GHAAAA|NNBAAA|VVVVxx
+2790|1028|0|2|0|10|90|790|790|2790|2790|180|181|IDAAAA|ONBAAA|AAAAxx
+682|1029|0|2|2|2|82|682|682|682|682|164|165|GAAAAA|PNBAAA|HHHHxx
+6412|1030|0|0|2|12|12|412|412|1412|6412|24|25|QMAAAA|QNBAAA|OOOOxx
+6882|1031|0|2|2|2|82|882|882|1882|6882|164|165|SEAAAA|RNBAAA|VVVVxx
+1332|1032|0|0|2|12|32|332|1332|1332|1332|64|65|GZAAAA|SNBAAA|AAAAxx
+4911|1033|1|3|1|11|11|911|911|4911|4911|22|23|XGAAAA|TNBAAA|HHHHxx
+3528|1034|0|0|8|8|28|528|1528|3528|3528|56|57|SFAAAA|UNBAAA|OOOOxx
+271|1035|1|3|1|11|71|271|271|271|271|142|143|LKAAAA|VNBAAA|VVVVxx
+7007|1036|1|3|7|7|7|7|1007|2007|7007|14|15|NJAAAA|WNBAAA|AAAAxx
+2198|1037|0|2|8|18|98|198|198|2198|2198|196|197|OGAAAA|XNBAAA|HHHHxx
+4266|1038|0|2|6|6|66|266|266|4266|4266|132|133|CIAAAA|YNBAAA|OOOOxx
+9867|1039|1|3|7|7|67|867|1867|4867|9867|134|135|NPAAAA|ZNBAAA|VVVVxx
+7602|1040|0|2|2|2|2|602|1602|2602|7602|4|5|KGAAAA|AOBAAA|AAAAxx
+7521|1041|1|1|1|1|21|521|1521|2521|7521|42|43|HDAAAA|BOBAAA|HHHHxx
+7200|1042|0|0|0|0|0|200|1200|2200|7200|0|1|YQAAAA|COBAAA|OOOOxx
+4816|1043|0|0|6|16|16|816|816|4816|4816|32|33|GDAAAA|DOBAAA|VVVVxx
+1669|1044|1|1|9|9|69|669|1669|1669|1669|138|139|FMAAAA|EOBAAA|AAAAxx
+4764|1045|0|0|4|4|64|764|764|4764|4764|128|129|GBAAAA|FOBAAA|HHHHxx
+7393|1046|1|1|3|13|93|393|1393|2393|7393|186|187|JYAAAA|GOBAAA|OOOOxx
+7434|1047|0|2|4|14|34|434|1434|2434|7434|68|69|YZAAAA|HOBAAA|VVVVxx
+9079|1048|1|3|9|19|79|79|1079|4079|9079|158|159|FLAAAA|IOBAAA|AAAAxx
+9668|1049|0|0|8|8|68|668|1668|4668|9668|136|137|WHAAAA|JOBAAA|HHHHxx
+7184|1050|0|0|4|4|84|184|1184|2184|7184|168|169|IQAAAA|KOBAAA|OOOOxx
+7347|1051|1|3|7|7|47|347|1347|2347|7347|94|95|PWAAAA|LOBAAA|VVVVxx
+951|1052|1|3|1|11|51|951|951|951|951|102|103|PKAAAA|MOBAAA|AAAAxx
+4513|1053|1|1|3|13|13|513|513|4513|4513|26|27|PRAAAA|NOBAAA|HHHHxx
+2692|1054|0|0|2|12|92|692|692|2692|2692|184|185|OZAAAA|OOBAAA|OOOOxx
+9930|1055|0|2|0|10|30|930|1930|4930|9930|60|61|YRAAAA|POBAAA|VVVVxx
+4516|1056|0|0|6|16|16|516|516|4516|4516|32|33|SRAAAA|QOBAAA|AAAAxx
+1592|1057|0|0|2|12|92|592|1592|1592|1592|184|185|GJAAAA|ROBAAA|HHHHxx
+6312|1058|0|0|2|12|12|312|312|1312|6312|24|25|UIAAAA|SOBAAA|OOOOxx
+185|1059|1|1|5|5|85|185|185|185|185|170|171|DHAAAA|TOBAAA|VVVVxx
+1848|1060|0|0|8|8|48|848|1848|1848|1848|96|97|CTAAAA|UOBAAA|AAAAxx
+5844|1061|0|0|4|4|44|844|1844|844|5844|88|89|UQAAAA|VOBAAA|HHHHxx
+1666|1062|0|2|6|6|66|666|1666|1666|1666|132|133|CMAAAA|WOBAAA|OOOOxx
+5864|1063|0|0|4|4|64|864|1864|864|5864|128|129|ORAAAA|XOBAAA|VVVVxx
+1004|1064|0|0|4|4|4|4|1004|1004|1004|8|9|QMAAAA|YOBAAA|AAAAxx
+1758|1065|0|2|8|18|58|758|1758|1758|1758|116|117|QPAAAA|ZOBAAA|HHHHxx
+8823|1066|1|3|3|3|23|823|823|3823|8823|46|47|JBAAAA|APBAAA|OOOOxx
+129|1067|1|1|9|9|29|129|129|129|129|58|59|ZEAAAA|BPBAAA|VVVVxx
+5703|1068|1|3|3|3|3|703|1703|703|5703|6|7|JLAAAA|CPBAAA|AAAAxx
+3331|1069|1|3|1|11|31|331|1331|3331|3331|62|63|DYAAAA|DPBAAA|HHHHxx
+5791|1070|1|3|1|11|91|791|1791|791|5791|182|183|TOAAAA|EPBAAA|OOOOxx
+4421|1071|1|1|1|1|21|421|421|4421|4421|42|43|BOAAAA|FPBAAA|VVVVxx
+9740|1072|0|0|0|0|40|740|1740|4740|9740|80|81|QKAAAA|GPBAAA|AAAAxx
+798|1073|0|2|8|18|98|798|798|798|798|196|197|SEAAAA|HPBAAA|HHHHxx
+571|1074|1|3|1|11|71|571|571|571|571|142|143|ZVAAAA|IPBAAA|OOOOxx
+7084|1075|0|0|4|4|84|84|1084|2084|7084|168|169|MMAAAA|JPBAAA|VVVVxx
+650|1076|0|2|0|10|50|650|650|650|650|100|101|AZAAAA|KPBAAA|AAAAxx
+1467|1077|1|3|7|7|67|467|1467|1467|1467|134|135|LEAAAA|LPBAAA|HHHHxx
+5446|1078|0|2|6|6|46|446|1446|446|5446|92|93|MBAAAA|MPBAAA|OOOOxx
+830|1079|0|2|0|10|30|830|830|830|830|60|61|YFAAAA|NPBAAA|VVVVxx
+5516|1080|0|0|6|16|16|516|1516|516|5516|32|33|EEAAAA|OPBAAA|AAAAxx
+8520|1081|0|0|0|0|20|520|520|3520|8520|40|41|SPAAAA|PPBAAA|HHHHxx
+1152|1082|0|0|2|12|52|152|1152|1152|1152|104|105|ISAAAA|QPBAAA|OOOOxx
+862|1083|0|2|2|2|62|862|862|862|862|124|125|EHAAAA|RPBAAA|VVVVxx
+454|1084|0|2|4|14|54|454|454|454|454|108|109|MRAAAA|SPBAAA|AAAAxx
+9956|1085|0|0|6|16|56|956|1956|4956|9956|112|113|YSAAAA|TPBAAA|HHHHxx
+1654|1086|0|2|4|14|54|654|1654|1654|1654|108|109|QLAAAA|UPBAAA|OOOOxx
+257|1087|1|1|7|17|57|257|257|257|257|114|115|XJAAAA|VPBAAA|VVVVxx
+5469|1088|1|1|9|9|69|469|1469|469|5469|138|139|JCAAAA|WPBAAA|AAAAxx
+9075|1089|1|3|5|15|75|75|1075|4075|9075|150|151|BLAAAA|XPBAAA|HHHHxx
+7799|1090|1|3|9|19|99|799|1799|2799|7799|198|199|ZNAAAA|YPBAAA|OOOOxx
+2001|1091|1|1|1|1|1|1|1|2001|2001|2|3|ZYAAAA|ZPBAAA|VVVVxx
+9786|1092|0|2|6|6|86|786|1786|4786|9786|172|173|KMAAAA|AQBAAA|AAAAxx
+7281|1093|1|1|1|1|81|281|1281|2281|7281|162|163|BUAAAA|BQBAAA|HHHHxx
+5137|1094|1|1|7|17|37|137|1137|137|5137|74|75|PPAAAA|CQBAAA|OOOOxx
+4053|1095|1|1|3|13|53|53|53|4053|4053|106|107|XZAAAA|DQBAAA|VVVVxx
+7911|1096|1|3|1|11|11|911|1911|2911|7911|22|23|HSAAAA|EQBAAA|AAAAxx
+4298|1097|0|2|8|18|98|298|298|4298|4298|196|197|IJAAAA|FQBAAA|HHHHxx
+4805|1098|1|1|5|5|5|805|805|4805|4805|10|11|VCAAAA|GQBAAA|OOOOxx
+9038|1099|0|2|8|18|38|38|1038|4038|9038|76|77|QJAAAA|HQBAAA|VVVVxx
+8023|1100|1|3|3|3|23|23|23|3023|8023|46|47|PWAAAA|IQBAAA|AAAAxx
+6595|1101|1|3|5|15|95|595|595|1595|6595|190|191|RTAAAA|JQBAAA|HHHHxx
+9831|1102|1|3|1|11|31|831|1831|4831|9831|62|63|DOAAAA|KQBAAA|OOOOxx
+788|1103|0|0|8|8|88|788|788|788|788|176|177|IEAAAA|LQBAAA|VVVVxx
+902|1104|0|2|2|2|2|902|902|902|902|4|5|SIAAAA|MQBAAA|AAAAxx
+9137|1105|1|1|7|17|37|137|1137|4137|9137|74|75|LNAAAA|NQBAAA|HHHHxx
+1744|1106|0|0|4|4|44|744|1744|1744|1744|88|89|CPAAAA|OQBAAA|OOOOxx
+7285|1107|1|1|5|5|85|285|1285|2285|7285|170|171|FUAAAA|PQBAAA|VVVVxx
+7006|1108|0|2|6|6|6|6|1006|2006|7006|12|13|MJAAAA|QQBAAA|AAAAxx
+9236|1109|0|0|6|16|36|236|1236|4236|9236|72|73|GRAAAA|RQBAAA|HHHHxx
+5472|1110|0|0|2|12|72|472|1472|472|5472|144|145|MCAAAA|SQBAAA|OOOOxx
+7975|1111|1|3|5|15|75|975|1975|2975|7975|150|151|TUAAAA|TQBAAA|VVVVxx
+4181|1112|1|1|1|1|81|181|181|4181|4181|162|163|VEAAAA|UQBAAA|AAAAxx
+7677|1113|1|1|7|17|77|677|1677|2677|7677|154|155|HJAAAA|VQBAAA|HHHHxx
+35|1114|1|3|5|15|35|35|35|35|35|70|71|JBAAAA|WQBAAA|OOOOxx
+6813|1115|1|1|3|13|13|813|813|1813|6813|26|27|BCAAAA|XQBAAA|VVVVxx
+6618|1116|0|2|8|18|18|618|618|1618|6618|36|37|OUAAAA|YQBAAA|AAAAxx
+8069|1117|1|1|9|9|69|69|69|3069|8069|138|139|JYAAAA|ZQBAAA|HHHHxx
+3071|1118|1|3|1|11|71|71|1071|3071|3071|142|143|DOAAAA|ARBAAA|OOOOxx
+4390|1119|0|2|0|10|90|390|390|4390|4390|180|181|WMAAAA|BRBAAA|VVVVxx
+7764|1120|0|0|4|4|64|764|1764|2764|7764|128|129|QMAAAA|CRBAAA|AAAAxx
+8163|1121|1|3|3|3|63|163|163|3163|8163|126|127|ZBAAAA|DRBAAA|HHHHxx
+1961|1122|1|1|1|1|61|961|1961|1961|1961|122|123|LXAAAA|ERBAAA|OOOOxx
+1103|1123|1|3|3|3|3|103|1103|1103|1103|6|7|LQAAAA|FRBAAA|VVVVxx
+5486|1124|0|2|6|6|86|486|1486|486|5486|172|173|ADAAAA|GRBAAA|AAAAxx
+9513|1125|1|1|3|13|13|513|1513|4513|9513|26|27|XBAAAA|HRBAAA|HHHHxx
+7311|1126|1|3|1|11|11|311|1311|2311|7311|22|23|FVAAAA|IRBAAA|OOOOxx
+4144|1127|0|0|4|4|44|144|144|4144|4144|88|89|KDAAAA|JRBAAA|VVVVxx
+7901|1128|1|1|1|1|1|901|1901|2901|7901|2|3|XRAAAA|KRBAAA|AAAAxx
+4629|1129|1|1|9|9|29|629|629|4629|4629|58|59|BWAAAA|LRBAAA|HHHHxx
+6858|1130|0|2|8|18|58|858|858|1858|6858|116|117|UDAAAA|MRBAAA|OOOOxx
+125|1131|1|1|5|5|25|125|125|125|125|50|51|VEAAAA|NRBAAA|VVVVxx
+3834|1132|0|2|4|14|34|834|1834|3834|3834|68|69|MRAAAA|ORBAAA|AAAAxx
+8155|1133|1|3|5|15|55|155|155|3155|8155|110|111|RBAAAA|PRBAAA|HHHHxx
+8230|1134|0|2|0|10|30|230|230|3230|8230|60|61|OEAAAA|QRBAAA|OOOOxx
+744|1135|0|0|4|4|44|744|744|744|744|88|89|QCAAAA|RRBAAA|VVVVxx
+357|1136|1|1|7|17|57|357|357|357|357|114|115|TNAAAA|SRBAAA|AAAAxx
+2159|1137|1|3|9|19|59|159|159|2159|2159|118|119|BFAAAA|TRBAAA|HHHHxx
+8559|1138|1|3|9|19|59|559|559|3559|8559|118|119|FRAAAA|URBAAA|OOOOxx
+6866|1139|0|2|6|6|66|866|866|1866|6866|132|133|CEAAAA|VRBAAA|VVVVxx
+3863|1140|1|3|3|3|63|863|1863|3863|3863|126|127|PSAAAA|WRBAAA|AAAAxx
+4193|1141|1|1|3|13|93|193|193|4193|4193|186|187|HFAAAA|XRBAAA|HHHHxx
+3277|1142|1|1|7|17|77|277|1277|3277|3277|154|155|BWAAAA|YRBAAA|OOOOxx
+5577|1143|1|1|7|17|77|577|1577|577|5577|154|155|NGAAAA|ZRBAAA|VVVVxx
+9503|1144|1|3|3|3|3|503|1503|4503|9503|6|7|NBAAAA|ASBAAA|AAAAxx
+7642|1145|0|2|2|2|42|642|1642|2642|7642|84|85|YHAAAA|BSBAAA|HHHHxx
+6197|1146|1|1|7|17|97|197|197|1197|6197|194|195|JEAAAA|CSBAAA|OOOOxx
+8995|1147|1|3|5|15|95|995|995|3995|8995|190|191|ZHAAAA|DSBAAA|VVVVxx
+440|1148|0|0|0|0|40|440|440|440|440|80|81|YQAAAA|ESBAAA|AAAAxx
+8418|1149|0|2|8|18|18|418|418|3418|8418|36|37|ULAAAA|FSBAAA|HHHHxx
+8531|1150|1|3|1|11|31|531|531|3531|8531|62|63|DQAAAA|GSBAAA|OOOOxx
+3790|1151|0|2|0|10|90|790|1790|3790|3790|180|181|UPAAAA|HSBAAA|VVVVxx
+7610|1152|0|2|0|10|10|610|1610|2610|7610|20|21|SGAAAA|ISBAAA|AAAAxx
+1252|1153|0|0|2|12|52|252|1252|1252|1252|104|105|EWAAAA|JSBAAA|HHHHxx
+7559|1154|1|3|9|19|59|559|1559|2559|7559|118|119|TEAAAA|KSBAAA|OOOOxx
+9945|1155|1|1|5|5|45|945|1945|4945|9945|90|91|NSAAAA|LSBAAA|VVVVxx
+9023|1156|1|3|3|3|23|23|1023|4023|9023|46|47|BJAAAA|MSBAAA|AAAAxx
+3516|1157|0|0|6|16|16|516|1516|3516|3516|32|33|GFAAAA|NSBAAA|HHHHxx
+4671|1158|1|3|1|11|71|671|671|4671|4671|142|143|RXAAAA|OSBAAA|OOOOxx
+1465|1159|1|1|5|5|65|465|1465|1465|1465|130|131|JEAAAA|PSBAAA|VVVVxx
+9515|1160|1|3|5|15|15|515|1515|4515|9515|30|31|ZBAAAA|QSBAAA|AAAAxx
+3242|1161|0|2|2|2|42|242|1242|3242|3242|84|85|SUAAAA|RSBAAA|HHHHxx
+1732|1162|0|0|2|12|32|732|1732|1732|1732|64|65|QOAAAA|SSBAAA|OOOOxx
+1678|1163|0|2|8|18|78|678|1678|1678|1678|156|157|OMAAAA|TSBAAA|VVVVxx
+1464|1164|0|0|4|4|64|464|1464|1464|1464|128|129|IEAAAA|USBAAA|AAAAxx
+6546|1165|0|2|6|6|46|546|546|1546|6546|92|93|URAAAA|VSBAAA|HHHHxx
+4448|1166|0|0|8|8|48|448|448|4448|4448|96|97|CPAAAA|WSBAAA|OOOOxx
+9847|1167|1|3|7|7|47|847|1847|4847|9847|94|95|TOAAAA|XSBAAA|VVVVxx
+8264|1168|0|0|4|4|64|264|264|3264|8264|128|129|WFAAAA|YSBAAA|AAAAxx
+1620|1169|0|0|0|0|20|620|1620|1620|1620|40|41|IKAAAA|ZSBAAA|HHHHxx
+9388|1170|0|0|8|8|88|388|1388|4388|9388|176|177|CXAAAA|ATBAAA|OOOOxx
+6445|1171|1|1|5|5|45|445|445|1445|6445|90|91|XNAAAA|BTBAAA|VVVVxx
+4789|1172|1|1|9|9|89|789|789|4789|4789|178|179|FCAAAA|CTBAAA|AAAAxx
+1562|1173|0|2|2|2|62|562|1562|1562|1562|124|125|CIAAAA|DTBAAA|HHHHxx
+7305|1174|1|1|5|5|5|305|1305|2305|7305|10|11|ZUAAAA|ETBAAA|OOOOxx
+6344|1175|0|0|4|4|44|344|344|1344|6344|88|89|AKAAAA|FTBAAA|VVVVxx
+5130|1176|0|2|0|10|30|130|1130|130|5130|60|61|IPAAAA|GTBAAA|AAAAxx
+3284|1177|0|0|4|4|84|284|1284|3284|3284|168|169|IWAAAA|HTBAAA|HHHHxx
+6346|1178|0|2|6|6|46|346|346|1346|6346|92|93|CKAAAA|ITBAAA|OOOOxx
+1061|1179|1|1|1|1|61|61|1061|1061|1061|122|123|VOAAAA|JTBAAA|VVVVxx
+872|1180|0|0|2|12|72|872|872|872|872|144|145|OHAAAA|KTBAAA|AAAAxx
+123|1181|1|3|3|3|23|123|123|123|123|46|47|TEAAAA|LTBAAA|HHHHxx
+7903|1182|1|3|3|3|3|903|1903|2903|7903|6|7|ZRAAAA|MTBAAA|OOOOxx
+560|1183|0|0|0|0|60|560|560|560|560|120|121|OVAAAA|NTBAAA|VVVVxx
+4446|1184|0|2|6|6|46|446|446|4446|4446|92|93|APAAAA|OTBAAA|AAAAxx
+3909|1185|1|1|9|9|9|909|1909|3909|3909|18|19|JUAAAA|PTBAAA|HHHHxx
+669|1186|1|1|9|9|69|669|669|669|669|138|139|TZAAAA|QTBAAA|OOOOxx
+7843|1187|1|3|3|3|43|843|1843|2843|7843|86|87|RPAAAA|RTBAAA|VVVVxx
+2546|1188|0|2|6|6|46|546|546|2546|2546|92|93|YTAAAA|STBAAA|AAAAxx
+6757|1189|1|1|7|17|57|757|757|1757|6757|114|115|XZAAAA|TTBAAA|HHHHxx
+466|1190|0|2|6|6|66|466|466|466|466|132|133|YRAAAA|UTBAAA|OOOOxx
+5556|1191|0|0|6|16|56|556|1556|556|5556|112|113|SFAAAA|VTBAAA|VVVVxx
+7196|1192|0|0|6|16|96|196|1196|2196|7196|192|193|UQAAAA|WTBAAA|AAAAxx
+2947|1193|1|3|7|7|47|947|947|2947|2947|94|95|JJAAAA|XTBAAA|HHHHxx
+6493|1194|1|1|3|13|93|493|493|1493|6493|186|187|TPAAAA|YTBAAA|OOOOxx
+7203|1195|1|3|3|3|3|203|1203|2203|7203|6|7|BRAAAA|ZTBAAA|VVVVxx
+3716|1196|0|0|6|16|16|716|1716|3716|3716|32|33|YMAAAA|AUBAAA|AAAAxx
+8058|1197|0|2|8|18|58|58|58|3058|8058|116|117|YXAAAA|BUBAAA|HHHHxx
+433|1198|1|1|3|13|33|433|433|433|433|66|67|RQAAAA|CUBAAA|OOOOxx
+7649|1199|1|1|9|9|49|649|1649|2649|7649|98|99|FIAAAA|DUBAAA|VVVVxx
+6966|1200|0|2|6|6|66|966|966|1966|6966|132|133|YHAAAA|EUBAAA|AAAAxx
+553|1201|1|1|3|13|53|553|553|553|553|106|107|HVAAAA|FUBAAA|HHHHxx
+3677|1202|1|1|7|17|77|677|1677|3677|3677|154|155|LLAAAA|GUBAAA|OOOOxx
+2344|1203|0|0|4|4|44|344|344|2344|2344|88|89|EMAAAA|HUBAAA|VVVVxx
+7439|1204|1|3|9|19|39|439|1439|2439|7439|78|79|DAAAAA|IUBAAA|AAAAxx
+3910|1205|0|2|0|10|10|910|1910|3910|3910|20|21|KUAAAA|JUBAAA|HHHHxx
+3638|1206|0|2|8|18|38|638|1638|3638|3638|76|77|YJAAAA|KUBAAA|OOOOxx
+6637|1207|1|1|7|17|37|637|637|1637|6637|74|75|HVAAAA|LUBAAA|VVVVxx
+4438|1208|0|2|8|18|38|438|438|4438|4438|76|77|SOAAAA|MUBAAA|AAAAxx
+171|1209|1|3|1|11|71|171|171|171|171|142|143|PGAAAA|NUBAAA|HHHHxx
+310|1210|0|2|0|10|10|310|310|310|310|20|21|YLAAAA|OUBAAA|OOOOxx
+2714|1211|0|2|4|14|14|714|714|2714|2714|28|29|KAAAAA|PUBAAA|VVVVxx
+5199|1212|1|3|9|19|99|199|1199|199|5199|198|199|ZRAAAA|QUBAAA|AAAAxx
+8005|1213|1|1|5|5|5|5|5|3005|8005|10|11|XVAAAA|RUBAAA|HHHHxx
+3188|1214|0|0|8|8|88|188|1188|3188|3188|176|177|QSAAAA|SUBAAA|OOOOxx
+1518|1215|0|2|8|18|18|518|1518|1518|1518|36|37|KGAAAA|TUBAAA|VVVVxx
+6760|1216|0|0|0|0|60|760|760|1760|6760|120|121|AAAAAA|UUBAAA|AAAAxx
+9373|1217|1|1|3|13|73|373|1373|4373|9373|146|147|NWAAAA|VUBAAA|HHHHxx
+1938|1218|0|2|8|18|38|938|1938|1938|1938|76|77|OWAAAA|WUBAAA|OOOOxx
+2865|1219|1|1|5|5|65|865|865|2865|2865|130|131|FGAAAA|XUBAAA|VVVVxx
+3203|1220|1|3|3|3|3|203|1203|3203|3203|6|7|FTAAAA|YUBAAA|AAAAxx
+6025|1221|1|1|5|5|25|25|25|1025|6025|50|51|TXAAAA|ZUBAAA|HHHHxx
+8684|1222|0|0|4|4|84|684|684|3684|8684|168|169|AWAAAA|AVBAAA|OOOOxx
+7732|1223|0|0|2|12|32|732|1732|2732|7732|64|65|KLAAAA|BVBAAA|VVVVxx
+3218|1224|0|2|8|18|18|218|1218|3218|3218|36|37|UTAAAA|CVBAAA|AAAAxx
+525|1225|1|1|5|5|25|525|525|525|525|50|51|FUAAAA|DVBAAA|HHHHxx
+601|1226|1|1|1|1|1|601|601|601|601|2|3|DXAAAA|EVBAAA|OOOOxx
+6091|1227|1|3|1|11|91|91|91|1091|6091|182|183|HAAAAA|FVBAAA|VVVVxx
+4498|1228|0|2|8|18|98|498|498|4498|4498|196|197|ARAAAA|GVBAAA|AAAAxx
+8192|1229|0|0|2|12|92|192|192|3192|8192|184|185|CDAAAA|HVBAAA|HHHHxx
+8006|1230|0|2|6|6|6|6|6|3006|8006|12|13|YVAAAA|IVBAAA|OOOOxx
+6157|1231|1|1|7|17|57|157|157|1157|6157|114|115|VCAAAA|JVBAAA|VVVVxx
+312|1232|0|0|2|12|12|312|312|312|312|24|25|AMAAAA|KVBAAA|AAAAxx
+8652|1233|0|0|2|12|52|652|652|3652|8652|104|105|UUAAAA|LVBAAA|HHHHxx
+2787|1234|1|3|7|7|87|787|787|2787|2787|174|175|FDAAAA|MVBAAA|OOOOxx
+1782|1235|0|2|2|2|82|782|1782|1782|1782|164|165|OQAAAA|NVBAAA|VVVVxx
+23|1236|1|3|3|3|23|23|23|23|23|46|47|XAAAAA|OVBAAA|AAAAxx
+1206|1237|0|2|6|6|6|206|1206|1206|1206|12|13|KUAAAA|PVBAAA|HHHHxx
+1076|1238|0|0|6|16|76|76|1076|1076|1076|152|153|KPAAAA|QVBAAA|OOOOxx
+5379|1239|1|3|9|19|79|379|1379|379|5379|158|159|XYAAAA|RVBAAA|VVVVxx
+2047|1240|1|3|7|7|47|47|47|2047|2047|94|95|TAAAAA|SVBAAA|AAAAxx
+6262|1241|0|2|2|2|62|262|262|1262|6262|124|125|WGAAAA|TVBAAA|HHHHxx
+1840|1242|0|0|0|0|40|840|1840|1840|1840|80|81|USAAAA|UVBAAA|OOOOxx
+2106|1243|0|2|6|6|6|106|106|2106|2106|12|13|ADAAAA|VVBAAA|VVVVxx
+1307|1244|1|3|7|7|7|307|1307|1307|1307|14|15|HYAAAA|WVBAAA|AAAAxx
+735|1245|1|3|5|15|35|735|735|735|735|70|71|HCAAAA|XVBAAA|HHHHxx
+3657|1246|1|1|7|17|57|657|1657|3657|3657|114|115|RKAAAA|YVBAAA|OOOOxx
+3006|1247|0|2|6|6|6|6|1006|3006|3006|12|13|QLAAAA|ZVBAAA|VVVVxx
+1538|1248|0|2|8|18|38|538|1538|1538|1538|76|77|EHAAAA|AWBAAA|AAAAxx
+6098|1249|0|2|8|18|98|98|98|1098|6098|196|197|OAAAAA|BWBAAA|HHHHxx
+5267|1250|1|3|7|7|67|267|1267|267|5267|134|135|PUAAAA|CWBAAA|OOOOxx
+9757|1251|1|1|7|17|57|757|1757|4757|9757|114|115|HLAAAA|DWBAAA|VVVVxx
+1236|1252|0|0|6|16|36|236|1236|1236|1236|72|73|OVAAAA|EWBAAA|AAAAxx
+83|1253|1|3|3|3|83|83|83|83|83|166|167|FDAAAA|FWBAAA|HHHHxx
+9227|1254|1|3|7|7|27|227|1227|4227|9227|54|55|XQAAAA|GWBAAA|OOOOxx
+8772|1255|0|0|2|12|72|772|772|3772|8772|144|145|KZAAAA|HWBAAA|VVVVxx
+8822|1256|0|2|2|2|22|822|822|3822|8822|44|45|IBAAAA|IWBAAA|AAAAxx
+7167|1257|1|3|7|7|67|167|1167|2167|7167|134|135|RPAAAA|JWBAAA|HHHHxx
+6909|1258|1|1|9|9|9|909|909|1909|6909|18|19|TFAAAA|KWBAAA|OOOOxx
+1439|1259|1|3|9|19|39|439|1439|1439|1439|78|79|JDAAAA|LWBAAA|VVVVxx
+2370|1260|0|2|0|10|70|370|370|2370|2370|140|141|ENAAAA|MWBAAA|AAAAxx
+4577|1261|1|1|7|17|77|577|577|4577|4577|154|155|BUAAAA|NWBAAA|HHHHxx
+2575|1262|1|3|5|15|75|575|575|2575|2575|150|151|BVAAAA|OWBAAA|OOOOxx
+2795|1263|1|3|5|15|95|795|795|2795|2795|190|191|NDAAAA|PWBAAA|VVVVxx
+5520|1264|0|0|0|0|20|520|1520|520|5520|40|41|IEAAAA|QWBAAA|AAAAxx
+382|1265|0|2|2|2|82|382|382|382|382|164|165|SOAAAA|RWBAAA|HHHHxx
+6335|1266|1|3|5|15|35|335|335|1335|6335|70|71|RJAAAA|SWBAAA|OOOOxx
+8430|1267|0|2|0|10|30|430|430|3430|8430|60|61|GMAAAA|TWBAAA|VVVVxx
+4131|1268|1|3|1|11|31|131|131|4131|4131|62|63|XCAAAA|UWBAAA|AAAAxx
+9332|1269|0|0|2|12|32|332|1332|4332|9332|64|65|YUAAAA|VWBAAA|HHHHxx
+293|1270|1|1|3|13|93|293|293|293|293|186|187|HLAAAA|WWBAAA|OOOOxx
+2276|1271|0|0|6|16|76|276|276|2276|2276|152|153|OJAAAA|XWBAAA|VVVVxx
+5687|1272|1|3|7|7|87|687|1687|687|5687|174|175|TKAAAA|YWBAAA|AAAAxx
+5862|1273|0|2|2|2|62|862|1862|862|5862|124|125|MRAAAA|ZWBAAA|HHHHxx
+5073|1274|1|1|3|13|73|73|1073|73|5073|146|147|DNAAAA|AXBAAA|OOOOxx
+4170|1275|0|2|0|10|70|170|170|4170|4170|140|141|KEAAAA|BXBAAA|VVVVxx
+5039|1276|1|3|9|19|39|39|1039|39|5039|78|79|VLAAAA|CXBAAA|AAAAxx
+3294|1277|0|2|4|14|94|294|1294|3294|3294|188|189|SWAAAA|DXBAAA|HHHHxx
+6015|1278|1|3|5|15|15|15|15|1015|6015|30|31|JXAAAA|EXBAAA|OOOOxx
+9015|1279|1|3|5|15|15|15|1015|4015|9015|30|31|TIAAAA|FXBAAA|VVVVxx
+9785|1280|1|1|5|5|85|785|1785|4785|9785|170|171|JMAAAA|GXBAAA|AAAAxx
+4312|1281|0|0|2|12|12|312|312|4312|4312|24|25|WJAAAA|HXBAAA|HHHHxx
+6343|1282|1|3|3|3|43|343|343|1343|6343|86|87|ZJAAAA|IXBAAA|OOOOxx
+2161|1283|1|1|1|1|61|161|161|2161|2161|122|123|DFAAAA|JXBAAA|VVVVxx
+4490|1284|0|2|0|10|90|490|490|4490|4490|180|181|SQAAAA|KXBAAA|AAAAxx
+4454|1285|0|2|4|14|54|454|454|4454|4454|108|109|IPAAAA|LXBAAA|HHHHxx
+7647|1286|1|3|7|7|47|647|1647|2647|7647|94|95|DIAAAA|MXBAAA|OOOOxx
+1028|1287|0|0|8|8|28|28|1028|1028|1028|56|57|ONAAAA|NXBAAA|VVVVxx
+2965|1288|1|1|5|5|65|965|965|2965|2965|130|131|BKAAAA|OXBAAA|AAAAxx
+9900|1289|0|0|0|0|0|900|1900|4900|9900|0|1|UQAAAA|PXBAAA|HHHHxx
+5509|1290|1|1|9|9|9|509|1509|509|5509|18|19|XDAAAA|QXBAAA|OOOOxx
+7751|1291|1|3|1|11|51|751|1751|2751|7751|102|103|DMAAAA|RXBAAA|VVVVxx
+9594|1292|0|2|4|14|94|594|1594|4594|9594|188|189|AFAAAA|SXBAAA|AAAAxx
+7632|1293|0|0|2|12|32|632|1632|2632|7632|64|65|OHAAAA|TXBAAA|HHHHxx
+6528|1294|0|0|8|8|28|528|528|1528|6528|56|57|CRAAAA|UXBAAA|OOOOxx
+1041|1295|1|1|1|1|41|41|1041|1041|1041|82|83|BOAAAA|VXBAAA|VVVVxx
+1534|1296|0|2|4|14|34|534|1534|1534|1534|68|69|AHAAAA|WXBAAA|AAAAxx
+4229|1297|1|1|9|9|29|229|229|4229|4229|58|59|RGAAAA|XXBAAA|HHHHxx
+84|1298|0|0|4|4|84|84|84|84|84|168|169|GDAAAA|YXBAAA|OOOOxx
+2189|1299|1|1|9|9|89|189|189|2189|2189|178|179|FGAAAA|ZXBAAA|VVVVxx
+7566|1300|0|2|6|6|66|566|1566|2566|7566|132|133|AFAAAA|AYBAAA|AAAAxx
+707|1301|1|3|7|7|7|707|707|707|707|14|15|FBAAAA|BYBAAA|HHHHxx
+581|1302|1|1|1|1|81|581|581|581|581|162|163|JWAAAA|CYBAAA|OOOOxx
+6753|1303|1|1|3|13|53|753|753|1753|6753|106|107|TZAAAA|DYBAAA|VVVVxx
+8604|1304|0|0|4|4|4|604|604|3604|8604|8|9|YSAAAA|EYBAAA|AAAAxx
+373|1305|1|1|3|13|73|373|373|373|373|146|147|JOAAAA|FYBAAA|HHHHxx
+9635|1306|1|3|5|15|35|635|1635|4635|9635|70|71|PGAAAA|GYBAAA|OOOOxx
+9277|1307|1|1|7|17|77|277|1277|4277|9277|154|155|VSAAAA|HYBAAA|VVVVxx
+7117|1308|1|1|7|17|17|117|1117|2117|7117|34|35|TNAAAA|IYBAAA|AAAAxx
+8564|1309|0|0|4|4|64|564|564|3564|8564|128|129|KRAAAA|JYBAAA|HHHHxx
+1697|1310|1|1|7|17|97|697|1697|1697|1697|194|195|HNAAAA|KYBAAA|OOOOxx
+7840|1311|0|0|0|0|40|840|1840|2840|7840|80|81|OPAAAA|LYBAAA|VVVVxx
+3646|1312|0|2|6|6|46|646|1646|3646|3646|92|93|GKAAAA|MYBAAA|AAAAxx
+368|1313|0|0|8|8|68|368|368|368|368|136|137|EOAAAA|NYBAAA|HHHHxx
+4797|1314|1|1|7|17|97|797|797|4797|4797|194|195|NCAAAA|OYBAAA|OOOOxx
+5300|1315|0|0|0|0|0|300|1300|300|5300|0|1|WVAAAA|PYBAAA|VVVVxx
+7664|1316|0|0|4|4|64|664|1664|2664|7664|128|129|UIAAAA|QYBAAA|AAAAxx
+1466|1317|0|2|6|6|66|466|1466|1466|1466|132|133|KEAAAA|RYBAAA|HHHHxx
+2477|1318|1|1|7|17|77|477|477|2477|2477|154|155|HRAAAA|SYBAAA|OOOOxx
+2036|1319|0|0|6|16|36|36|36|2036|2036|72|73|IAAAAA|TYBAAA|VVVVxx
+3624|1320|0|0|4|4|24|624|1624|3624|3624|48|49|KJAAAA|UYBAAA|AAAAxx
+5099|1321|1|3|9|19|99|99|1099|99|5099|198|199|DOAAAA|VYBAAA|HHHHxx
+1308|1322|0|0|8|8|8|308|1308|1308|1308|16|17|IYAAAA|WYBAAA|OOOOxx
+3704|1323|0|0|4|4|4|704|1704|3704|3704|8|9|MMAAAA|XYBAAA|VVVVxx
+2451|1324|1|3|1|11|51|451|451|2451|2451|102|103|HQAAAA|YYBAAA|AAAAxx
+4898|1325|0|2|8|18|98|898|898|4898|4898|196|197|KGAAAA|ZYBAAA|HHHHxx
+4959|1326|1|3|9|19|59|959|959|4959|4959|118|119|TIAAAA|AZBAAA|OOOOxx
+5942|1327|0|2|2|2|42|942|1942|942|5942|84|85|OUAAAA|BZBAAA|VVVVxx
+2425|1328|1|1|5|5|25|425|425|2425|2425|50|51|HPAAAA|CZBAAA|AAAAxx
+7760|1329|0|0|0|0|60|760|1760|2760|7760|120|121|MMAAAA|DZBAAA|HHHHxx
+6294|1330|0|2|4|14|94|294|294|1294|6294|188|189|CIAAAA|EZBAAA|OOOOxx
+6785|1331|1|1|5|5|85|785|785|1785|6785|170|171|ZAAAAA|FZBAAA|VVVVxx
+3542|1332|0|2|2|2|42|542|1542|3542|3542|84|85|GGAAAA|GZBAAA|AAAAxx
+1809|1333|1|1|9|9|9|809|1809|1809|1809|18|19|PRAAAA|HZBAAA|HHHHxx
+130|1334|0|2|0|10|30|130|130|130|130|60|61|AFAAAA|IZBAAA|OOOOxx
+8672|1335|0|0|2|12|72|672|672|3672|8672|144|145|OVAAAA|JZBAAA|VVVVxx
+2125|1336|1|1|5|5|25|125|125|2125|2125|50|51|TDAAAA|KZBAAA|AAAAxx
+7683|1337|1|3|3|3|83|683|1683|2683|7683|166|167|NJAAAA|LZBAAA|HHHHxx
+7842|1338|0|2|2|2|42|842|1842|2842|7842|84|85|QPAAAA|MZBAAA|OOOOxx
+9584|1339|0|0|4|4|84|584|1584|4584|9584|168|169|QEAAAA|NZBAAA|VVVVxx
+7963|1340|1|3|3|3|63|963|1963|2963|7963|126|127|HUAAAA|OZBAAA|AAAAxx
+8581|1341|1|1|1|1|81|581|581|3581|8581|162|163|BSAAAA|PZBAAA|HHHHxx
+2135|1342|1|3|5|15|35|135|135|2135|2135|70|71|DEAAAA|QZBAAA|OOOOxx
+7352|1343|0|0|2|12|52|352|1352|2352|7352|104|105|UWAAAA|RZBAAA|VVVVxx
+5789|1344|1|1|9|9|89|789|1789|789|5789|178|179|ROAAAA|SZBAAA|AAAAxx
+8490|1345|0|2|0|10|90|490|490|3490|8490|180|181|OOAAAA|TZBAAA|HHHHxx
+2145|1346|1|1|5|5|45|145|145|2145|2145|90|91|NEAAAA|UZBAAA|OOOOxx
+7021|1347|1|1|1|1|21|21|1021|2021|7021|42|43|BKAAAA|VZBAAA|VVVVxx
+3736|1348|0|0|6|16|36|736|1736|3736|3736|72|73|SNAAAA|WZBAAA|AAAAxx
+7396|1349|0|0|6|16|96|396|1396|2396|7396|192|193|MYAAAA|XZBAAA|HHHHxx
+6334|1350|0|2|4|14|34|334|334|1334|6334|68|69|QJAAAA|YZBAAA|OOOOxx
+5461|1351|1|1|1|1|61|461|1461|461|5461|122|123|BCAAAA|ZZBAAA|VVVVxx
+5337|1352|1|1|7|17|37|337|1337|337|5337|74|75|HXAAAA|AACAAA|AAAAxx
+7440|1353|0|0|0|0|40|440|1440|2440|7440|80|81|EAAAAA|BACAAA|HHHHxx
+6879|1354|1|3|9|19|79|879|879|1879|6879|158|159|PEAAAA|CACAAA|OOOOxx
+2432|1355|0|0|2|12|32|432|432|2432|2432|64|65|OPAAAA|DACAAA|VVVVxx
+8529|1356|1|1|9|9|29|529|529|3529|8529|58|59|BQAAAA|EACAAA|AAAAxx
+7859|1357|1|3|9|19|59|859|1859|2859|7859|118|119|HQAAAA|FACAAA|HHHHxx
+15|1358|1|3|5|15|15|15|15|15|15|30|31|PAAAAA|GACAAA|OOOOxx
+7475|1359|1|3|5|15|75|475|1475|2475|7475|150|151|NBAAAA|HACAAA|VVVVxx
+717|1360|1|1|7|17|17|717|717|717|717|34|35|PBAAAA|IACAAA|AAAAxx
+250|1361|0|2|0|10|50|250|250|250|250|100|101|QJAAAA|JACAAA|HHHHxx
+4700|1362|0|0|0|0|0|700|700|4700|4700|0|1|UYAAAA|KACAAA|OOOOxx
+7510|1363|0|2|0|10|10|510|1510|2510|7510|20|21|WCAAAA|LACAAA|VVVVxx
+4562|1364|0|2|2|2|62|562|562|4562|4562|124|125|MTAAAA|MACAAA|AAAAxx
+8075|1365|1|3|5|15|75|75|75|3075|8075|150|151|PYAAAA|NACAAA|HHHHxx
+871|1366|1|3|1|11|71|871|871|871|871|142|143|NHAAAA|OACAAA|OOOOxx
+7161|1367|1|1|1|1|61|161|1161|2161|7161|122|123|LPAAAA|PACAAA|VVVVxx
+9109|1368|1|1|9|9|9|109|1109|4109|9109|18|19|JMAAAA|QACAAA|AAAAxx
+8675|1369|1|3|5|15|75|675|675|3675|8675|150|151|RVAAAA|RACAAA|HHHHxx
+1025|1370|1|1|5|5|25|25|1025|1025|1025|50|51|LNAAAA|SACAAA|OOOOxx
+4065|1371|1|1|5|5|65|65|65|4065|4065|130|131|JAAAAA|TACAAA|VVVVxx
+3511|1372|1|3|1|11|11|511|1511|3511|3511|22|23|BFAAAA|UACAAA|AAAAxx
+9840|1373|0|0|0|0|40|840|1840|4840|9840|80|81|MOAAAA|VACAAA|HHHHxx
+7495|1374|1|3|5|15|95|495|1495|2495|7495|190|191|HCAAAA|WACAAA|OOOOxx
+55|1375|1|3|5|15|55|55|55|55|55|110|111|DCAAAA|XACAAA|VVVVxx
+6151|1376|1|3|1|11|51|151|151|1151|6151|102|103|PCAAAA|YACAAA|AAAAxx
+2512|1377|0|0|2|12|12|512|512|2512|2512|24|25|QSAAAA|ZACAAA|HHHHxx
+5881|1378|1|1|1|1|81|881|1881|881|5881|162|163|FSAAAA|ABCAAA|OOOOxx
+1442|1379|0|2|2|2|42|442|1442|1442|1442|84|85|MDAAAA|BBCAAA|VVVVxx
+1270|1380|0|2|0|10|70|270|1270|1270|1270|140|141|WWAAAA|CBCAAA|AAAAxx
+959|1381|1|3|9|19|59|959|959|959|959|118|119|XKAAAA|DBCAAA|HHHHxx
+8251|1382|1|3|1|11|51|251|251|3251|8251|102|103|JFAAAA|EBCAAA|OOOOxx
+3051|1383|1|3|1|11|51|51|1051|3051|3051|102|103|JNAAAA|FBCAAA|VVVVxx
+5052|1384|0|0|2|12|52|52|1052|52|5052|104|105|IMAAAA|GBCAAA|AAAAxx
+1863|1385|1|3|3|3|63|863|1863|1863|1863|126|127|RTAAAA|HBCAAA|HHHHxx
+344|1386|0|0|4|4|44|344|344|344|344|88|89|GNAAAA|IBCAAA|OOOOxx
+3590|1387|0|2|0|10|90|590|1590|3590|3590|180|181|CIAAAA|JBCAAA|VVVVxx
+4223|1388|1|3|3|3|23|223|223|4223|4223|46|47|LGAAAA|KBCAAA|AAAAxx
+2284|1389|0|0|4|4|84|284|284|2284|2284|168|169|WJAAAA|LBCAAA|HHHHxx
+9425|1390|1|1|5|5|25|425|1425|4425|9425|50|51|NYAAAA|MBCAAA|OOOOxx
+6221|1391|1|1|1|1|21|221|221|1221|6221|42|43|HFAAAA|NBCAAA|VVVVxx
+195|1392|1|3|5|15|95|195|195|195|195|190|191|NHAAAA|OBCAAA|AAAAxx
+1517|1393|1|1|7|17|17|517|1517|1517|1517|34|35|JGAAAA|PBCAAA|HHHHxx
+3791|1394|1|3|1|11|91|791|1791|3791|3791|182|183|VPAAAA|QBCAAA|OOOOxx
+572|1395|0|0|2|12|72|572|572|572|572|144|145|AWAAAA|RBCAAA|VVVVxx
+46|1396|0|2|6|6|46|46|46|46|46|92|93|UBAAAA|SBCAAA|AAAAxx
+9451|1397|1|3|1|11|51|451|1451|4451|9451|102|103|NZAAAA|TBCAAA|HHHHxx
+3359|1398|1|3|9|19|59|359|1359|3359|3359|118|119|FZAAAA|UBCAAA|OOOOxx
+8867|1399|1|3|7|7|67|867|867|3867|8867|134|135|BDAAAA|VBCAAA|VVVVxx
+674|1400|0|2|4|14|74|674|674|674|674|148|149|YZAAAA|WBCAAA|AAAAxx
+2674|1401|0|2|4|14|74|674|674|2674|2674|148|149|WYAAAA|XBCAAA|HHHHxx
+6523|1402|1|3|3|3|23|523|523|1523|6523|46|47|XQAAAA|YBCAAA|OOOOxx
+6210|1403|0|2|0|10|10|210|210|1210|6210|20|21|WEAAAA|ZBCAAA|VVVVxx
+7564|1404|0|0|4|4|64|564|1564|2564|7564|128|129|YEAAAA|ACCAAA|AAAAxx
+4776|1405|0|0|6|16|76|776|776|4776|4776|152|153|SBAAAA|BCCAAA|HHHHxx
+2993|1406|1|1|3|13|93|993|993|2993|2993|186|187|DLAAAA|CCCAAA|OOOOxx
+2969|1407|1|1|9|9|69|969|969|2969|2969|138|139|FKAAAA|DCCAAA|VVVVxx
+1762|1408|0|2|2|2|62|762|1762|1762|1762|124|125|UPAAAA|ECCAAA|AAAAxx
+685|1409|1|1|5|5|85|685|685|685|685|170|171|JAAAAA|FCCAAA|HHHHxx
+5312|1410|0|0|2|12|12|312|1312|312|5312|24|25|IWAAAA|GCCAAA|OOOOxx
+3264|1411|0|0|4|4|64|264|1264|3264|3264|128|129|OVAAAA|HCCAAA|VVVVxx
+7008|1412|0|0|8|8|8|8|1008|2008|7008|16|17|OJAAAA|ICCAAA|AAAAxx
+5167|1413|1|3|7|7|67|167|1167|167|5167|134|135|TQAAAA|JCCAAA|HHHHxx
+3060|1414|0|0|0|0|60|60|1060|3060|3060|120|121|SNAAAA|KCCAAA|OOOOxx
+1752|1415|0|0|2|12|52|752|1752|1752|1752|104|105|KPAAAA|LCCAAA|VVVVxx
+1016|1416|0|0|6|16|16|16|1016|1016|1016|32|33|CNAAAA|MCCAAA|AAAAxx
+7365|1417|1|1|5|5|65|365|1365|2365|7365|130|131|HXAAAA|NCCAAA|HHHHxx
+4358|1418|0|2|8|18|58|358|358|4358|4358|116|117|QLAAAA|OCCAAA|OOOOxx
+2819|1419|1|3|9|19|19|819|819|2819|2819|38|39|LEAAAA|PCCAAA|VVVVxx
+6727|1420|1|3|7|7|27|727|727|1727|6727|54|55|TYAAAA|QCCAAA|AAAAxx
+1459|1421|1|3|9|19|59|459|1459|1459|1459|118|119|DEAAAA|RCCAAA|HHHHxx
+1708|1422|0|0|8|8|8|708|1708|1708|1708|16|17|SNAAAA|SCCAAA|OOOOxx
+471|1423|1|3|1|11|71|471|471|471|471|142|143|DSAAAA|TCCAAA|VVVVxx
+387|1424|1|3|7|7|87|387|387|387|387|174|175|XOAAAA|UCCAAA|AAAAxx
+1166|1425|0|2|6|6|66|166|1166|1166|1166|132|133|WSAAAA|VCCAAA|HHHHxx
+2400|1426|0|0|0|0|0|400|400|2400|2400|0|1|IOAAAA|WCCAAA|OOOOxx
+3584|1427|0|0|4|4|84|584|1584|3584|3584|168|169|WHAAAA|XCCAAA|VVVVxx
+6423|1428|1|3|3|3|23|423|423|1423|6423|46|47|BNAAAA|YCCAAA|AAAAxx
+9520|1429|0|0|0|0|20|520|1520|4520|9520|40|41|ECAAAA|ZCCAAA|HHHHxx
+8080|1430|0|0|0|0|80|80|80|3080|8080|160|161|UYAAAA|ADCAAA|OOOOxx
+5709|1431|1|1|9|9|9|709|1709|709|5709|18|19|PLAAAA|BDCAAA|VVVVxx
+1131|1432|1|3|1|11|31|131|1131|1131|1131|62|63|NRAAAA|CDCAAA|AAAAxx
+8562|1433|0|2|2|2|62|562|562|3562|8562|124|125|IRAAAA|DDCAAA|HHHHxx
+5766|1434|0|2|6|6|66|766|1766|766|5766|132|133|UNAAAA|EDCAAA|OOOOxx
+245|1435|1|1|5|5|45|245|245|245|245|90|91|LJAAAA|FDCAAA|VVVVxx
+9869|1436|1|1|9|9|69|869|1869|4869|9869|138|139|PPAAAA|GDCAAA|AAAAxx
+3533|1437|1|1|3|13|33|533|1533|3533|3533|66|67|XFAAAA|HDCAAA|HHHHxx
+5109|1438|1|1|9|9|9|109|1109|109|5109|18|19|NOAAAA|IDCAAA|OOOOxx
+977|1439|1|1|7|17|77|977|977|977|977|154|155|PLAAAA|JDCAAA|VVVVxx
+1651|1440|1|3|1|11|51|651|1651|1651|1651|102|103|NLAAAA|KDCAAA|AAAAxx
+1357|1441|1|1|7|17|57|357|1357|1357|1357|114|115|FAAAAA|LDCAAA|HHHHxx
+9087|1442|1|3|7|7|87|87|1087|4087|9087|174|175|NLAAAA|MDCAAA|OOOOxx
+3399|1443|1|3|9|19|99|399|1399|3399|3399|198|199|TAAAAA|NDCAAA|VVVVxx
+7543|1444|1|3|3|3|43|543|1543|2543|7543|86|87|DEAAAA|ODCAAA|AAAAxx
+2469|1445|1|1|9|9|69|469|469|2469|2469|138|139|ZQAAAA|PDCAAA|HHHHxx
+8305|1446|1|1|5|5|5|305|305|3305|8305|10|11|LHAAAA|QDCAAA|OOOOxx
+3265|1447|1|1|5|5|65|265|1265|3265|3265|130|131|PVAAAA|RDCAAA|VVVVxx
+9977|1448|1|1|7|17|77|977|1977|4977|9977|154|155|TTAAAA|SDCAAA|AAAAxx
+3961|1449|1|1|1|1|61|961|1961|3961|3961|122|123|JWAAAA|TDCAAA|HHHHxx
+4952|1450|0|0|2|12|52|952|952|4952|4952|104|105|MIAAAA|UDCAAA|OOOOxx
+5173|1451|1|1|3|13|73|173|1173|173|5173|146|147|ZQAAAA|VDCAAA|VVVVxx
+860|1452|0|0|0|0|60|860|860|860|860|120|121|CHAAAA|WDCAAA|AAAAxx
+4523|1453|1|3|3|3|23|523|523|4523|4523|46|47|ZRAAAA|XDCAAA|HHHHxx
+2361|1454|1|1|1|1|61|361|361|2361|2361|122|123|VMAAAA|YDCAAA|OOOOxx
+7877|1455|1|1|7|17|77|877|1877|2877|7877|154|155|ZQAAAA|ZDCAAA|VVVVxx
+3422|1456|0|2|2|2|22|422|1422|3422|3422|44|45|QBAAAA|AECAAA|AAAAxx
+5781|1457|1|1|1|1|81|781|1781|781|5781|162|163|JOAAAA|BECAAA|HHHHxx
+4752|1458|0|0|2|12|52|752|752|4752|4752|104|105|UAAAAA|CECAAA|OOOOxx
+1786|1459|0|2|6|6|86|786|1786|1786|1786|172|173|SQAAAA|DECAAA|VVVVxx
+1892|1460|0|0|2|12|92|892|1892|1892|1892|184|185|UUAAAA|EECAAA|AAAAxx
+6389|1461|1|1|9|9|89|389|389|1389|6389|178|179|TLAAAA|FECAAA|HHHHxx
+8644|1462|0|0|4|4|44|644|644|3644|8644|88|89|MUAAAA|GECAAA|OOOOxx
+9056|1463|0|0|6|16|56|56|1056|4056|9056|112|113|IKAAAA|HECAAA|VVVVxx
+1423|1464|1|3|3|3|23|423|1423|1423|1423|46|47|TCAAAA|IECAAA|AAAAxx
+4901|1465|1|1|1|1|1|901|901|4901|4901|2|3|NGAAAA|JECAAA|HHHHxx
+3859|1466|1|3|9|19|59|859|1859|3859|3859|118|119|LSAAAA|KECAAA|OOOOxx
+2324|1467|0|0|4|4|24|324|324|2324|2324|48|49|KLAAAA|LECAAA|VVVVxx
+8101|1468|1|1|1|1|1|101|101|3101|8101|2|3|PZAAAA|MECAAA|AAAAxx
+8016|1469|0|0|6|16|16|16|16|3016|8016|32|33|IWAAAA|NECAAA|HHHHxx
+5826|1470|0|2|6|6|26|826|1826|826|5826|52|53|CQAAAA|OECAAA|OOOOxx
+8266|1471|0|2|6|6|66|266|266|3266|8266|132|133|YFAAAA|PECAAA|VVVVxx
+7558|1472|0|2|8|18|58|558|1558|2558|7558|116|117|SEAAAA|QECAAA|AAAAxx
+6976|1473|0|0|6|16|76|976|976|1976|6976|152|153|IIAAAA|RECAAA|HHHHxx
+222|1474|0|2|2|2|22|222|222|222|222|44|45|OIAAAA|SECAAA|OOOOxx
+1624|1475|0|0|4|4|24|624|1624|1624|1624|48|49|MKAAAA|TECAAA|VVVVxx
+1250|1476|0|2|0|10|50|250|1250|1250|1250|100|101|CWAAAA|UECAAA|AAAAxx
+1621|1477|1|1|1|1|21|621|1621|1621|1621|42|43|JKAAAA|VECAAA|HHHHxx
+2350|1478|0|2|0|10|50|350|350|2350|2350|100|101|KMAAAA|WECAAA|OOOOxx
+5239|1479|1|3|9|19|39|239|1239|239|5239|78|79|NTAAAA|XECAAA|VVVVxx
+6681|1480|1|1|1|1|81|681|681|1681|6681|162|163|ZWAAAA|YECAAA|AAAAxx
+4983|1481|1|3|3|3|83|983|983|4983|4983|166|167|RJAAAA|ZECAAA|HHHHxx
+7149|1482|1|1|9|9|49|149|1149|2149|7149|98|99|ZOAAAA|AFCAAA|OOOOxx
+3502|1483|0|2|2|2|2|502|1502|3502|3502|4|5|SEAAAA|BFCAAA|VVVVxx
+3133|1484|1|1|3|13|33|133|1133|3133|3133|66|67|NQAAAA|CFCAAA|AAAAxx
+8342|1485|0|2|2|2|42|342|342|3342|8342|84|85|WIAAAA|DFCAAA|HHHHxx
+3041|1486|1|1|1|1|41|41|1041|3041|3041|82|83|ZMAAAA|EFCAAA|OOOOxx
+5383|1487|1|3|3|3|83|383|1383|383|5383|166|167|BZAAAA|FFCAAA|VVVVxx
+3916|1488|0|0|6|16|16|916|1916|3916|3916|32|33|QUAAAA|GFCAAA|AAAAxx
+1438|1489|0|2|8|18|38|438|1438|1438|1438|76|77|IDAAAA|HFCAAA|HHHHxx
+9408|1490|0|0|8|8|8|408|1408|4408|9408|16|17|WXAAAA|IFCAAA|OOOOxx
+5783|1491|1|3|3|3|83|783|1783|783|5783|166|167|LOAAAA|JFCAAA|VVVVxx
+683|1492|1|3|3|3|83|683|683|683|683|166|167|HAAAAA|KFCAAA|AAAAxx
+9381|1493|1|1|1|1|81|381|1381|4381|9381|162|163|VWAAAA|LFCAAA|HHHHxx
+5676|1494|0|0|6|16|76|676|1676|676|5676|152|153|IKAAAA|MFCAAA|OOOOxx
+3224|1495|0|0|4|4|24|224|1224|3224|3224|48|49|AUAAAA|NFCAAA|VVVVxx
+8332|1496|0|0|2|12|32|332|332|3332|8332|64|65|MIAAAA|OFCAAA|AAAAxx
+3372|1497|0|0|2|12|72|372|1372|3372|3372|144|145|SZAAAA|PFCAAA|HHHHxx
+7436|1498|0|0|6|16|36|436|1436|2436|7436|72|73|AAAAAA|QFCAAA|OOOOxx
+5010|1499|0|2|0|10|10|10|1010|10|5010|20|21|SKAAAA|RFCAAA|VVVVxx
+7256|1500|0|0|6|16|56|256|1256|2256|7256|112|113|CTAAAA|SFCAAA|AAAAxx
+961|1501|1|1|1|1|61|961|961|961|961|122|123|ZKAAAA|TFCAAA|HHHHxx
+4182|1502|0|2|2|2|82|182|182|4182|4182|164|165|WEAAAA|UFCAAA|OOOOxx
+639|1503|1|3|9|19|39|639|639|639|639|78|79|PYAAAA|VFCAAA|VVVVxx
+8836|1504|0|0|6|16|36|836|836|3836|8836|72|73|WBAAAA|WFCAAA|AAAAxx
+8705|1505|1|1|5|5|5|705|705|3705|8705|10|11|VWAAAA|XFCAAA|HHHHxx
+32|1506|0|0|2|12|32|32|32|32|32|64|65|GBAAAA|YFCAAA|OOOOxx
+7913|1507|1|1|3|13|13|913|1913|2913|7913|26|27|JSAAAA|ZFCAAA|VVVVxx
+229|1508|1|1|9|9|29|229|229|229|229|58|59|VIAAAA|AGCAAA|AAAAxx
+2393|1509|1|1|3|13|93|393|393|2393|2393|186|187|BOAAAA|BGCAAA|HHHHxx
+2815|1510|1|3|5|15|15|815|815|2815|2815|30|31|HEAAAA|CGCAAA|OOOOxx
+4858|1511|0|2|8|18|58|858|858|4858|4858|116|117|WEAAAA|DGCAAA|VVVVxx
+6283|1512|1|3|3|3|83|283|283|1283|6283|166|167|RHAAAA|EGCAAA|AAAAxx
+4147|1513|1|3|7|7|47|147|147|4147|4147|94|95|NDAAAA|FGCAAA|HHHHxx
+6801|1514|1|1|1|1|1|801|801|1801|6801|2|3|PBAAAA|GGCAAA|OOOOxx
+1011|1515|1|3|1|11|11|11|1011|1011|1011|22|23|XMAAAA|HGCAAA|VVVVxx
+2527|1516|1|3|7|7|27|527|527|2527|2527|54|55|FTAAAA|IGCAAA|AAAAxx
+381|1517|1|1|1|1|81|381|381|381|381|162|163|ROAAAA|JGCAAA|HHHHxx
+3366|1518|0|2|6|6|66|366|1366|3366|3366|132|133|MZAAAA|KGCAAA|OOOOxx
+9636|1519|0|0|6|16|36|636|1636|4636|9636|72|73|QGAAAA|LGCAAA|VVVVxx
+2239|1520|1|3|9|19|39|239|239|2239|2239|78|79|DIAAAA|MGCAAA|AAAAxx
+5911|1521|1|3|1|11|11|911|1911|911|5911|22|23|JTAAAA|NGCAAA|HHHHxx
+449|1522|1|1|9|9|49|449|449|449|449|98|99|HRAAAA|OGCAAA|OOOOxx
+5118|1523|0|2|8|18|18|118|1118|118|5118|36|37|WOAAAA|PGCAAA|VVVVxx
+7684|1524|0|0|4|4|84|684|1684|2684|7684|168|169|OJAAAA|QGCAAA|AAAAxx
+804|1525|0|0|4|4|4|804|804|804|804|8|9|YEAAAA|RGCAAA|HHHHxx
+8378|1526|0|2|8|18|78|378|378|3378|8378|156|157|GKAAAA|SGCAAA|OOOOxx
+9855|1527|1|3|5|15|55|855|1855|4855|9855|110|111|BPAAAA|TGCAAA|VVVVxx
+1995|1528|1|3|5|15|95|995|1995|1995|1995|190|191|TYAAAA|UGCAAA|AAAAxx
+1979|1529|1|3|9|19|79|979|1979|1979|1979|158|159|DYAAAA|VGCAAA|HHHHxx
+4510|1530|0|2|0|10|10|510|510|4510|4510|20|21|MRAAAA|WGCAAA|OOOOxx
+3792|1531|0|0|2|12|92|792|1792|3792|3792|184|185|WPAAAA|XGCAAA|VVVVxx
+3541|1532|1|1|1|1|41|541|1541|3541|3541|82|83|FGAAAA|YGCAAA|AAAAxx
+8847|1533|1|3|7|7|47|847|847|3847|8847|94|95|HCAAAA|ZGCAAA|HHHHxx
+1336|1534|0|0|6|16|36|336|1336|1336|1336|72|73|KZAAAA|AHCAAA|OOOOxx
+6780|1535|0|0|0|0|80|780|780|1780|6780|160|161|UAAAAA|BHCAAA|VVVVxx
+8711|1536|1|3|1|11|11|711|711|3711|8711|22|23|BXAAAA|CHCAAA|AAAAxx
+7839|1537|1|3|9|19|39|839|1839|2839|7839|78|79|NPAAAA|DHCAAA|HHHHxx
+677|1538|1|1|7|17|77|677|677|677|677|154|155|BAAAAA|EHCAAA|OOOOxx
+1574|1539|0|2|4|14|74|574|1574|1574|1574|148|149|OIAAAA|FHCAAA|VVVVxx
+2905|1540|1|1|5|5|5|905|905|2905|2905|10|11|THAAAA|GHCAAA|AAAAxx
+1879|1541|1|3|9|19|79|879|1879|1879|1879|158|159|HUAAAA|HHCAAA|HHHHxx
+7820|1542|0|0|0|0|20|820|1820|2820|7820|40|41|UOAAAA|IHCAAA|OOOOxx
+4308|1543|0|0|8|8|8|308|308|4308|4308|16|17|SJAAAA|JHCAAA|VVVVxx
+4474|1544|0|2|4|14|74|474|474|4474|4474|148|149|CQAAAA|KHCAAA|AAAAxx
+6985|1545|1|1|5|5|85|985|985|1985|6985|170|171|RIAAAA|LHCAAA|HHHHxx
+6929|1546|1|1|9|9|29|929|929|1929|6929|58|59|NGAAAA|MHCAAA|OOOOxx
+777|1547|1|1|7|17|77|777|777|777|777|154|155|XDAAAA|NHCAAA|VVVVxx
+8271|1548|1|3|1|11|71|271|271|3271|8271|142|143|DGAAAA|OHCAAA|AAAAxx
+2389|1549|1|1|9|9|89|389|389|2389|2389|178|179|XNAAAA|PHCAAA|HHHHxx
+946|1550|0|2|6|6|46|946|946|946|946|92|93|KKAAAA|QHCAAA|OOOOxx
+9682|1551|0|2|2|2|82|682|1682|4682|9682|164|165|KIAAAA|RHCAAA|VVVVxx
+8722|1552|0|2|2|2|22|722|722|3722|8722|44|45|MXAAAA|SHCAAA|AAAAxx
+470|1553|0|2|0|10|70|470|470|470|470|140|141|CSAAAA|THCAAA|HHHHxx
+7425|1554|1|1|5|5|25|425|1425|2425|7425|50|51|PZAAAA|UHCAAA|OOOOxx
+2372|1555|0|0|2|12|72|372|372|2372|2372|144|145|GNAAAA|VHCAAA|VVVVxx
+508|1556|0|0|8|8|8|508|508|508|508|16|17|OTAAAA|WHCAAA|AAAAxx
+163|1557|1|3|3|3|63|163|163|163|163|126|127|HGAAAA|XHCAAA|HHHHxx
+6579|1558|1|3|9|19|79|579|579|1579|6579|158|159|BTAAAA|YHCAAA|OOOOxx
+2355|1559|1|3|5|15|55|355|355|2355|2355|110|111|PMAAAA|ZHCAAA|VVVVxx
+70|1560|0|2|0|10|70|70|70|70|70|140|141|SCAAAA|AICAAA|AAAAxx
+651|1561|1|3|1|11|51|651|651|651|651|102|103|BZAAAA|BICAAA|HHHHxx
+4436|1562|0|0|6|16|36|436|436|4436|4436|72|73|QOAAAA|CICAAA|OOOOxx
+4240|1563|0|0|0|0|40|240|240|4240|4240|80|81|CHAAAA|DICAAA|VVVVxx
+2722|1564|0|2|2|2|22|722|722|2722|2722|44|45|SAAAAA|EICAAA|AAAAxx
+8937|1565|1|1|7|17|37|937|937|3937|8937|74|75|TFAAAA|FICAAA|HHHHxx
+8364|1566|0|0|4|4|64|364|364|3364|8364|128|129|SJAAAA|GICAAA|OOOOxx
+8317|1567|1|1|7|17|17|317|317|3317|8317|34|35|XHAAAA|HICAAA|VVVVxx
+8872|1568|0|0|2|12|72|872|872|3872|8872|144|145|GDAAAA|IICAAA|AAAAxx
+5512|1569|0|0|2|12|12|512|1512|512|5512|24|25|AEAAAA|JICAAA|HHHHxx
+6651|1570|1|3|1|11|51|651|651|1651|6651|102|103|VVAAAA|KICAAA|OOOOxx
+5976|1571|0|0|6|16|76|976|1976|976|5976|152|153|WVAAAA|LICAAA|VVVVxx
+3301|1572|1|1|1|1|1|301|1301|3301|3301|2|3|ZWAAAA|MICAAA|AAAAxx
+6784|1573|0|0|4|4|84|784|784|1784|6784|168|169|YAAAAA|NICAAA|HHHHxx
+573|1574|1|1|3|13|73|573|573|573|573|146|147|BWAAAA|OICAAA|OOOOxx
+3015|1575|1|3|5|15|15|15|1015|3015|3015|30|31|ZLAAAA|PICAAA|VVVVxx
+8245|1576|1|1|5|5|45|245|245|3245|8245|90|91|DFAAAA|QICAAA|AAAAxx
+5251|1577|1|3|1|11|51|251|1251|251|5251|102|103|ZTAAAA|RICAAA|HHHHxx
+2281|1578|1|1|1|1|81|281|281|2281|2281|162|163|TJAAAA|SICAAA|OOOOxx
+518|1579|0|2|8|18|18|518|518|518|518|36|37|YTAAAA|TICAAA|VVVVxx
+9839|1580|1|3|9|19|39|839|1839|4839|9839|78|79|LOAAAA|UICAAA|AAAAxx
+4526|1581|0|2|6|6|26|526|526|4526|4526|52|53|CSAAAA|VICAAA|HHHHxx
+1261|1582|1|1|1|1|61|261|1261|1261|1261|122|123|NWAAAA|WICAAA|OOOOxx
+4259|1583|1|3|9|19|59|259|259|4259|4259|118|119|VHAAAA|XICAAA|VVVVxx
+9098|1584|0|2|8|18|98|98|1098|4098|9098|196|197|YLAAAA|YICAAA|AAAAxx
+6037|1585|1|1|7|17|37|37|37|1037|6037|74|75|FYAAAA|ZICAAA|HHHHxx
+4284|1586|0|0|4|4|84|284|284|4284|4284|168|169|UIAAAA|AJCAAA|OOOOxx
+3267|1587|1|3|7|7|67|267|1267|3267|3267|134|135|RVAAAA|BJCAAA|VVVVxx
+5908|1588|0|0|8|8|8|908|1908|908|5908|16|17|GTAAAA|CJCAAA|AAAAxx
+1549|1589|1|1|9|9|49|549|1549|1549|1549|98|99|PHAAAA|DJCAAA|HHHHxx
+8736|1590|0|0|6|16|36|736|736|3736|8736|72|73|AYAAAA|EJCAAA|OOOOxx
+2008|1591|0|0|8|8|8|8|8|2008|2008|16|17|GZAAAA|FJCAAA|VVVVxx
+548|1592|0|0|8|8|48|548|548|548|548|96|97|CVAAAA|GJCAAA|AAAAxx
+8846|1593|0|2|6|6|46|846|846|3846|8846|92|93|GCAAAA|HJCAAA|HHHHxx
+8374|1594|0|2|4|14|74|374|374|3374|8374|148|149|CKAAAA|IJCAAA|OOOOxx
+7986|1595|0|2|6|6|86|986|1986|2986|7986|172|173|EVAAAA|JJCAAA|VVVVxx
+6819|1596|1|3|9|19|19|819|819|1819|6819|38|39|HCAAAA|KJCAAA|AAAAxx
+4418|1597|0|2|8|18|18|418|418|4418|4418|36|37|YNAAAA|LJCAAA|HHHHxx
+833|1598|1|1|3|13|33|833|833|833|833|66|67|BGAAAA|MJCAAA|OOOOxx
+4416|1599|0|0|6|16|16|416|416|4416|4416|32|33|WNAAAA|NJCAAA|VVVVxx
+4902|1600|0|2|2|2|2|902|902|4902|4902|4|5|OGAAAA|OJCAAA|AAAAxx
+6828|1601|0|0|8|8|28|828|828|1828|6828|56|57|QCAAAA|PJCAAA|HHHHxx
+1118|1602|0|2|8|18|18|118|1118|1118|1118|36|37|ARAAAA|QJCAAA|OOOOxx
+9993|1603|1|1|3|13|93|993|1993|4993|9993|186|187|JUAAAA|RJCAAA|VVVVxx
+1430|1604|0|2|0|10|30|430|1430|1430|1430|60|61|ADAAAA|SJCAAA|AAAAxx
+5670|1605|0|2|0|10|70|670|1670|670|5670|140|141|CKAAAA|TJCAAA|HHHHxx
+5424|1606|0|0|4|4|24|424|1424|424|5424|48|49|QAAAAA|UJCAAA|OOOOxx
+5561|1607|1|1|1|1|61|561|1561|561|5561|122|123|XFAAAA|VJCAAA|VVVVxx
+2027|1608|1|3|7|7|27|27|27|2027|2027|54|55|ZZAAAA|WJCAAA|AAAAxx
+6924|1609|0|0|4|4|24|924|924|1924|6924|48|49|IGAAAA|XJCAAA|HHHHxx
+5946|1610|0|2|6|6|46|946|1946|946|5946|92|93|SUAAAA|YJCAAA|OOOOxx
+4294|1611|0|2|4|14|94|294|294|4294|4294|188|189|EJAAAA|ZJCAAA|VVVVxx
+2936|1612|0|0|6|16|36|936|936|2936|2936|72|73|YIAAAA|AKCAAA|AAAAxx
+3855|1613|1|3|5|15|55|855|1855|3855|3855|110|111|HSAAAA|BKCAAA|HHHHxx
+455|1614|1|3|5|15|55|455|455|455|455|110|111|NRAAAA|CKCAAA|OOOOxx
+2918|1615|0|2|8|18|18|918|918|2918|2918|36|37|GIAAAA|DKCAAA|VVVVxx
+448|1616|0|0|8|8|48|448|448|448|448|96|97|GRAAAA|EKCAAA|AAAAxx
+2149|1617|1|1|9|9|49|149|149|2149|2149|98|99|REAAAA|FKCAAA|HHHHxx
+8890|1618|0|2|0|10|90|890|890|3890|8890|180|181|YDAAAA|GKCAAA|OOOOxx
+8919|1619|1|3|9|19|19|919|919|3919|8919|38|39|BFAAAA|HKCAAA|VVVVxx
+4957|1620|1|1|7|17|57|957|957|4957|4957|114|115|RIAAAA|IKCAAA|AAAAxx
+4|1621|0|0|4|4|4|4|4|4|4|8|9|EAAAAA|JKCAAA|HHHHxx
+4837|1622|1|1|7|17|37|837|837|4837|4837|74|75|BEAAAA|KKCAAA|OOOOxx
+3976|1623|0|0|6|16|76|976|1976|3976|3976|152|153|YWAAAA|LKCAAA|VVVVxx
+9459|1624|1|3|9|19|59|459|1459|4459|9459|118|119|VZAAAA|MKCAAA|AAAAxx
+7097|1625|1|1|7|17|97|97|1097|2097|7097|194|195|ZMAAAA|NKCAAA|HHHHxx
+9226|1626|0|2|6|6|26|226|1226|4226|9226|52|53|WQAAAA|OKCAAA|OOOOxx
+5803|1627|1|3|3|3|3|803|1803|803|5803|6|7|FPAAAA|PKCAAA|VVVVxx
+21|1628|1|1|1|1|21|21|21|21|21|42|43|VAAAAA|QKCAAA|AAAAxx
+5275|1629|1|3|5|15|75|275|1275|275|5275|150|151|XUAAAA|RKCAAA|HHHHxx
+3488|1630|0|0|8|8|88|488|1488|3488|3488|176|177|EEAAAA|SKCAAA|OOOOxx
+1595|1631|1|3|5|15|95|595|1595|1595|1595|190|191|JJAAAA|TKCAAA|VVVVxx
+5212|1632|0|0|2|12|12|212|1212|212|5212|24|25|MSAAAA|UKCAAA|AAAAxx
+6574|1633|0|2|4|14|74|574|574|1574|6574|148|149|WSAAAA|VKCAAA|HHHHxx
+7524|1634|0|0|4|4|24|524|1524|2524|7524|48|49|KDAAAA|WKCAAA|OOOOxx
+6100|1635|0|0|0|0|0|100|100|1100|6100|0|1|QAAAAA|XKCAAA|VVVVxx
+1198|1636|0|2|8|18|98|198|1198|1198|1198|196|197|CUAAAA|YKCAAA|AAAAxx
+7345|1637|1|1|5|5|45|345|1345|2345|7345|90|91|NWAAAA|ZKCAAA|HHHHxx
+5020|1638|0|0|0|0|20|20|1020|20|5020|40|41|CLAAAA|ALCAAA|OOOOxx
+6925|1639|1|1|5|5|25|925|925|1925|6925|50|51|JGAAAA|BLCAAA|VVVVxx
+8915|1640|1|3|5|15|15|915|915|3915|8915|30|31|XEAAAA|CLCAAA|AAAAxx
+3088|1641|0|0|8|8|88|88|1088|3088|3088|176|177|UOAAAA|DLCAAA|HHHHxx
+4828|1642|0|0|8|8|28|828|828|4828|4828|56|57|SDAAAA|ELCAAA|OOOOxx
+7276|1643|0|0|6|16|76|276|1276|2276|7276|152|153|WTAAAA|FLCAAA|VVVVxx
+299|1644|1|3|9|19|99|299|299|299|299|198|199|NLAAAA|GLCAAA|AAAAxx
+76|1645|0|0|6|16|76|76|76|76|76|152|153|YCAAAA|HLCAAA|HHHHxx
+8458|1646|0|2|8|18|58|458|458|3458|8458|116|117|INAAAA|ILCAAA|OOOOxx
+7207|1647|1|3|7|7|7|207|1207|2207|7207|14|15|FRAAAA|JLCAAA|VVVVxx
+5585|1648|1|1|5|5|85|585|1585|585|5585|170|171|VGAAAA|KLCAAA|AAAAxx
+3234|1649|0|2|4|14|34|234|1234|3234|3234|68|69|KUAAAA|LLCAAA|HHHHxx
+8001|1650|1|1|1|1|1|1|1|3001|8001|2|3|TVAAAA|MLCAAA|OOOOxx
+1319|1651|1|3|9|19|19|319|1319|1319|1319|38|39|TYAAAA|NLCAAA|VVVVxx
+6342|1652|0|2|2|2|42|342|342|1342|6342|84|85|YJAAAA|OLCAAA|AAAAxx
+9199|1653|1|3|9|19|99|199|1199|4199|9199|198|199|VPAAAA|PLCAAA|HHHHxx
+5696|1654|0|0|6|16|96|696|1696|696|5696|192|193|CLAAAA|QLCAAA|OOOOxx
+2562|1655|0|2|2|2|62|562|562|2562|2562|124|125|OUAAAA|RLCAAA|VVVVxx
+4226|1656|0|2|6|6|26|226|226|4226|4226|52|53|OGAAAA|SLCAAA|AAAAxx
+1184|1657|0|0|4|4|84|184|1184|1184|1184|168|169|OTAAAA|TLCAAA|HHHHxx
+5807|1658|1|3|7|7|7|807|1807|807|5807|14|15|JPAAAA|ULCAAA|OOOOxx
+1890|1659|0|2|0|10|90|890|1890|1890|1890|180|181|SUAAAA|VLCAAA|VVVVxx
+451|1660|1|3|1|11|51|451|451|451|451|102|103|JRAAAA|WLCAAA|AAAAxx
+1049|1661|1|1|9|9|49|49|1049|1049|1049|98|99|JOAAAA|XLCAAA|HHHHxx
+5272|1662|0|0|2|12|72|272|1272|272|5272|144|145|UUAAAA|YLCAAA|OOOOxx
+4588|1663|0|0|8|8|88|588|588|4588|4588|176|177|MUAAAA|ZLCAAA|VVVVxx
+5213|1664|1|1|3|13|13|213|1213|213|5213|26|27|NSAAAA|AMCAAA|AAAAxx
+9543|1665|1|3|3|3|43|543|1543|4543|9543|86|87|BDAAAA|BMCAAA|HHHHxx
+6318|1666|0|2|8|18|18|318|318|1318|6318|36|37|AJAAAA|CMCAAA|OOOOxx
+7992|1667|0|0|2|12|92|992|1992|2992|7992|184|185|KVAAAA|DMCAAA|VVVVxx
+4619|1668|1|3|9|19|19|619|619|4619|4619|38|39|RVAAAA|EMCAAA|AAAAxx
+7189|1669|1|1|9|9|89|189|1189|2189|7189|178|179|NQAAAA|FMCAAA|HHHHxx
+2178|1670|0|2|8|18|78|178|178|2178|2178|156|157|UFAAAA|GMCAAA|OOOOxx
+4928|1671|0|0|8|8|28|928|928|4928|4928|56|57|OHAAAA|HMCAAA|VVVVxx
+3966|1672|0|2|6|6|66|966|1966|3966|3966|132|133|OWAAAA|IMCAAA|AAAAxx
+9790|1673|0|2|0|10|90|790|1790|4790|9790|180|181|OMAAAA|JMCAAA|HHHHxx
+9150|1674|0|2|0|10|50|150|1150|4150|9150|100|101|YNAAAA|KMCAAA|OOOOxx
+313|1675|1|1|3|13|13|313|313|313|313|26|27|BMAAAA|LMCAAA|VVVVxx
+1614|1676|0|2|4|14|14|614|1614|1614|1614|28|29|CKAAAA|MMCAAA|AAAAxx
+1581|1677|1|1|1|1|81|581|1581|1581|1581|162|163|VIAAAA|NMCAAA|HHHHxx
+3674|1678|0|2|4|14|74|674|1674|3674|3674|148|149|ILAAAA|OMCAAA|OOOOxx
+3444|1679|0|0|4|4|44|444|1444|3444|3444|88|89|MCAAAA|PMCAAA|VVVVxx
+1050|1680|0|2|0|10|50|50|1050|1050|1050|100|101|KOAAAA|QMCAAA|AAAAxx
+8241|1681|1|1|1|1|41|241|241|3241|8241|82|83|ZEAAAA|RMCAAA|HHHHxx
+3382|1682|0|2|2|2|82|382|1382|3382|3382|164|165|CAAAAA|SMCAAA|OOOOxx
+7105|1683|1|1|5|5|5|105|1105|2105|7105|10|11|HNAAAA|TMCAAA|VVVVxx
+2957|1684|1|1|7|17|57|957|957|2957|2957|114|115|TJAAAA|UMCAAA|AAAAxx
+6162|1685|0|2|2|2|62|162|162|1162|6162|124|125|ADAAAA|VMCAAA|HHHHxx
+5150|1686|0|2|0|10|50|150|1150|150|5150|100|101|CQAAAA|WMCAAA|OOOOxx
+2622|1687|0|2|2|2|22|622|622|2622|2622|44|45|WWAAAA|XMCAAA|VVVVxx
+2240|1688|0|0|0|0|40|240|240|2240|2240|80|81|EIAAAA|YMCAAA|AAAAxx
+8880|1689|0|0|0|0|80|880|880|3880|8880|160|161|ODAAAA|ZMCAAA|HHHHxx
+9250|1690|0|2|0|10|50|250|1250|4250|9250|100|101|URAAAA|ANCAAA|OOOOxx
+7010|1691|0|2|0|10|10|10|1010|2010|7010|20|21|QJAAAA|BNCAAA|VVVVxx
+1098|1692|0|2|8|18|98|98|1098|1098|1098|196|197|GQAAAA|CNCAAA|AAAAxx
+648|1693|0|0|8|8|48|648|648|648|648|96|97|YYAAAA|DNCAAA|HHHHxx
+5536|1694|0|0|6|16|36|536|1536|536|5536|72|73|YEAAAA|ENCAAA|OOOOxx
+7858|1695|0|2|8|18|58|858|1858|2858|7858|116|117|GQAAAA|FNCAAA|VVVVxx
+7053|1696|1|1|3|13|53|53|1053|2053|7053|106|107|HLAAAA|GNCAAA|AAAAxx
+8681|1697|1|1|1|1|81|681|681|3681|8681|162|163|XVAAAA|HNCAAA|HHHHxx
+8832|1698|0|0|2|12|32|832|832|3832|8832|64|65|SBAAAA|INCAAA|OOOOxx
+6836|1699|0|0|6|16|36|836|836|1836|6836|72|73|YCAAAA|JNCAAA|VVVVxx
+4856|1700|0|0|6|16|56|856|856|4856|4856|112|113|UEAAAA|KNCAAA|AAAAxx
+345|1701|1|1|5|5|45|345|345|345|345|90|91|HNAAAA|LNCAAA|HHHHxx
+6559|1702|1|3|9|19|59|559|559|1559|6559|118|119|HSAAAA|MNCAAA|OOOOxx
+3017|1703|1|1|7|17|17|17|1017|3017|3017|34|35|BMAAAA|NNCAAA|VVVVxx
+4176|1704|0|0|6|16|76|176|176|4176|4176|152|153|QEAAAA|ONCAAA|AAAAxx
+2839|1705|1|3|9|19|39|839|839|2839|2839|78|79|FFAAAA|PNCAAA|HHHHxx
+6065|1706|1|1|5|5|65|65|65|1065|6065|130|131|HZAAAA|QNCAAA|OOOOxx
+7360|1707|0|0|0|0|60|360|1360|2360|7360|120|121|CXAAAA|RNCAAA|VVVVxx
+9527|1708|1|3|7|7|27|527|1527|4527|9527|54|55|LCAAAA|SNCAAA|AAAAxx
+8849|1709|1|1|9|9|49|849|849|3849|8849|98|99|JCAAAA|TNCAAA|HHHHxx
+7274|1710|0|2|4|14|74|274|1274|2274|7274|148|149|UTAAAA|UNCAAA|OOOOxx
+4368|1711|0|0|8|8|68|368|368|4368|4368|136|137|AMAAAA|VNCAAA|VVVVxx
+2488|1712|0|0|8|8|88|488|488|2488|2488|176|177|SRAAAA|WNCAAA|AAAAxx
+4674|1713|0|2|4|14|74|674|674|4674|4674|148|149|UXAAAA|XNCAAA|HHHHxx
+365|1714|1|1|5|5|65|365|365|365|365|130|131|BOAAAA|YNCAAA|OOOOxx
+5897|1715|1|1|7|17|97|897|1897|897|5897|194|195|VSAAAA|ZNCAAA|VVVVxx
+8918|1716|0|2|8|18|18|918|918|3918|8918|36|37|AFAAAA|AOCAAA|AAAAxx
+1988|1717|0|0|8|8|88|988|1988|1988|1988|176|177|MYAAAA|BOCAAA|HHHHxx
+1210|1718|0|2|0|10|10|210|1210|1210|1210|20|21|OUAAAA|COCAAA|OOOOxx
+2945|1719|1|1|5|5|45|945|945|2945|2945|90|91|HJAAAA|DOCAAA|VVVVxx
+555|1720|1|3|5|15|55|555|555|555|555|110|111|JVAAAA|EOCAAA|AAAAxx
+9615|1721|1|3|5|15|15|615|1615|4615|9615|30|31|VFAAAA|FOCAAA|HHHHxx
+9939|1722|1|3|9|19|39|939|1939|4939|9939|78|79|HSAAAA|GOCAAA|OOOOxx
+1216|1723|0|0|6|16|16|216|1216|1216|1216|32|33|UUAAAA|HOCAAA|VVVVxx
+745|1724|1|1|5|5|45|745|745|745|745|90|91|RCAAAA|IOCAAA|AAAAxx
+3326|1725|0|2|6|6|26|326|1326|3326|3326|52|53|YXAAAA|JOCAAA|HHHHxx
+953|1726|1|1|3|13|53|953|953|953|953|106|107|RKAAAA|KOCAAA|OOOOxx
+444|1727|0|0|4|4|44|444|444|444|444|88|89|CRAAAA|LOCAAA|VVVVxx
+280|1728|0|0|0|0|80|280|280|280|280|160|161|UKAAAA|MOCAAA|AAAAxx
+3707|1729|1|3|7|7|7|707|1707|3707|3707|14|15|PMAAAA|NOCAAA|HHHHxx
+1351|1730|1|3|1|11|51|351|1351|1351|1351|102|103|ZZAAAA|OOCAAA|OOOOxx
+1280|1731|0|0|0|0|80|280|1280|1280|1280|160|161|GXAAAA|POCAAA|VVVVxx
+628|1732|0|0|8|8|28|628|628|628|628|56|57|EYAAAA|QOCAAA|AAAAxx
+6198|1733|0|2|8|18|98|198|198|1198|6198|196|197|KEAAAA|ROCAAA|HHHHxx
+1957|1734|1|1|7|17|57|957|1957|1957|1957|114|115|HXAAAA|SOCAAA|OOOOxx
+9241|1735|1|1|1|1|41|241|1241|4241|9241|82|83|LRAAAA|TOCAAA|VVVVxx
+303|1736|1|3|3|3|3|303|303|303|303|6|7|RLAAAA|UOCAAA|AAAAxx
+1945|1737|1|1|5|5|45|945|1945|1945|1945|90|91|VWAAAA|VOCAAA|HHHHxx
+3634|1738|0|2|4|14|34|634|1634|3634|3634|68|69|UJAAAA|WOCAAA|OOOOxx
+4768|1739|0|0|8|8|68|768|768|4768|4768|136|137|KBAAAA|XOCAAA|VVVVxx
+9262|1740|0|2|2|2|62|262|1262|4262|9262|124|125|GSAAAA|YOCAAA|AAAAxx
+2610|1741|0|2|0|10|10|610|610|2610|2610|20|21|KWAAAA|ZOCAAA|HHHHxx
+6640|1742|0|0|0|0|40|640|640|1640|6640|80|81|KVAAAA|APCAAA|OOOOxx
+3338|1743|0|2|8|18|38|338|1338|3338|3338|76|77|KYAAAA|BPCAAA|VVVVxx
+6560|1744|0|0|0|0|60|560|560|1560|6560|120|121|ISAAAA|CPCAAA|AAAAxx
+5986|1745|0|2|6|6|86|986|1986|986|5986|172|173|GWAAAA|DPCAAA|HHHHxx
+2970|1746|0|2|0|10|70|970|970|2970|2970|140|141|GKAAAA|EPCAAA|OOOOxx
+4731|1747|1|3|1|11|31|731|731|4731|4731|62|63|ZZAAAA|FPCAAA|VVVVxx
+9486|1748|0|2|6|6|86|486|1486|4486|9486|172|173|WAAAAA|GPCAAA|AAAAxx
+7204|1749|0|0|4|4|4|204|1204|2204|7204|8|9|CRAAAA|HPCAAA|HHHHxx
+6685|1750|1|1|5|5|85|685|685|1685|6685|170|171|DXAAAA|IPCAAA|OOOOxx
+6852|1751|0|0|2|12|52|852|852|1852|6852|104|105|ODAAAA|JPCAAA|VVVVxx
+2325|1752|1|1|5|5|25|325|325|2325|2325|50|51|LLAAAA|KPCAAA|AAAAxx
+1063|1753|1|3|3|3|63|63|1063|1063|1063|126|127|XOAAAA|LPCAAA|HHHHxx
+6810|1754|0|2|0|10|10|810|810|1810|6810|20|21|YBAAAA|MPCAAA|OOOOxx
+7718|1755|0|2|8|18|18|718|1718|2718|7718|36|37|WKAAAA|NPCAAA|VVVVxx
+1680|1756|0|0|0|0|80|680|1680|1680|1680|160|161|QMAAAA|OPCAAA|AAAAxx
+7402|1757|0|2|2|2|2|402|1402|2402|7402|4|5|SYAAAA|PPCAAA|HHHHxx
+4134|1758|0|2|4|14|34|134|134|4134|4134|68|69|ADAAAA|QPCAAA|OOOOxx
+8232|1759|0|0|2|12|32|232|232|3232|8232|64|65|QEAAAA|RPCAAA|VVVVxx
+6682|1760|0|2|2|2|82|682|682|1682|6682|164|165|AXAAAA|SPCAAA|AAAAxx
+7952|1761|0|0|2|12|52|952|1952|2952|7952|104|105|WTAAAA|TPCAAA|HHHHxx
+5943|1762|1|3|3|3|43|943|1943|943|5943|86|87|PUAAAA|UPCAAA|OOOOxx
+5394|1763|0|2|4|14|94|394|1394|394|5394|188|189|MZAAAA|VPCAAA|VVVVxx
+6554|1764|0|2|4|14|54|554|554|1554|6554|108|109|CSAAAA|WPCAAA|AAAAxx
+8186|1765|0|2|6|6|86|186|186|3186|8186|172|173|WCAAAA|XPCAAA|HHHHxx
+199|1766|1|3|9|19|99|199|199|199|199|198|199|RHAAAA|YPCAAA|OOOOxx
+3386|1767|0|2|6|6|86|386|1386|3386|3386|172|173|GAAAAA|ZPCAAA|VVVVxx
+8974|1768|0|2|4|14|74|974|974|3974|8974|148|149|EHAAAA|AQCAAA|AAAAxx
+8140|1769|0|0|0|0|40|140|140|3140|8140|80|81|CBAAAA|BQCAAA|HHHHxx
+3723|1770|1|3|3|3|23|723|1723|3723|3723|46|47|FNAAAA|CQCAAA|OOOOxx
+8827|1771|1|3|7|7|27|827|827|3827|8827|54|55|NBAAAA|DQCAAA|VVVVxx
+1998|1772|0|2|8|18|98|998|1998|1998|1998|196|197|WYAAAA|EQCAAA|AAAAxx
+879|1773|1|3|9|19|79|879|879|879|879|158|159|VHAAAA|FQCAAA|HHHHxx
+892|1774|0|0|2|12|92|892|892|892|892|184|185|IIAAAA|GQCAAA|OOOOxx
+9468|1775|0|0|8|8|68|468|1468|4468|9468|136|137|EAAAAA|HQCAAA|VVVVxx
+3797|1776|1|1|7|17|97|797|1797|3797|3797|194|195|BQAAAA|IQCAAA|AAAAxx
+8379|1777|1|3|9|19|79|379|379|3379|8379|158|159|HKAAAA|JQCAAA|HHHHxx
+2817|1778|1|1|7|17|17|817|817|2817|2817|34|35|JEAAAA|KQCAAA|OOOOxx
+789|1779|1|1|9|9|89|789|789|789|789|178|179|JEAAAA|LQCAAA|VVVVxx
+3871|1780|1|3|1|11|71|871|1871|3871|3871|142|143|XSAAAA|MQCAAA|AAAAxx
+7931|1781|1|3|1|11|31|931|1931|2931|7931|62|63|BTAAAA|NQCAAA|HHHHxx
+3636|1782|0|0|6|16|36|636|1636|3636|3636|72|73|WJAAAA|OQCAAA|OOOOxx
+699|1783|1|3|9|19|99|699|699|699|699|198|199|XAAAAA|PQCAAA|VVVVxx
+6850|1784|0|2|0|10|50|850|850|1850|6850|100|101|MDAAAA|QQCAAA|AAAAxx
+6394|1785|0|2|4|14|94|394|394|1394|6394|188|189|YLAAAA|RQCAAA|HHHHxx
+3475|1786|1|3|5|15|75|475|1475|3475|3475|150|151|RDAAAA|SQCAAA|OOOOxx
+3026|1787|0|2|6|6|26|26|1026|3026|3026|52|53|KMAAAA|TQCAAA|VVVVxx
+876|1788|0|0|6|16|76|876|876|876|876|152|153|SHAAAA|UQCAAA|AAAAxx
+1992|1789|0|0|2|12|92|992|1992|1992|1992|184|185|QYAAAA|VQCAAA|HHHHxx
+3079|1790|1|3|9|19|79|79|1079|3079|3079|158|159|LOAAAA|WQCAAA|OOOOxx
+8128|1791|0|0|8|8|28|128|128|3128|8128|56|57|QAAAAA|XQCAAA|VVVVxx
+8123|1792|1|3|3|3|23|123|123|3123|8123|46|47|LAAAAA|YQCAAA|AAAAxx
+3285|1793|1|1|5|5|85|285|1285|3285|3285|170|171|JWAAAA|ZQCAAA|HHHHxx
+9315|1794|1|3|5|15|15|315|1315|4315|9315|30|31|HUAAAA|ARCAAA|OOOOxx
+9862|1795|0|2|2|2|62|862|1862|4862|9862|124|125|IPAAAA|BRCAAA|VVVVxx
+2764|1796|0|0|4|4|64|764|764|2764|2764|128|129|ICAAAA|CRCAAA|AAAAxx
+3544|1797|0|0|4|4|44|544|1544|3544|3544|88|89|IGAAAA|DRCAAA|HHHHxx
+7747|1798|1|3|7|7|47|747|1747|2747|7747|94|95|ZLAAAA|ERCAAA|OOOOxx
+7725|1799|1|1|5|5|25|725|1725|2725|7725|50|51|DLAAAA|FRCAAA|VVVVxx
+2449|1800|1|1|9|9|49|449|449|2449|2449|98|99|FQAAAA|GRCAAA|AAAAxx
+8967|1801|1|3|7|7|67|967|967|3967|8967|134|135|XGAAAA|HRCAAA|HHHHxx
+7371|1802|1|3|1|11|71|371|1371|2371|7371|142|143|NXAAAA|IRCAAA|OOOOxx
+2158|1803|0|2|8|18|58|158|158|2158|2158|116|117|AFAAAA|JRCAAA|VVVVxx
+5590|1804|0|2|0|10|90|590|1590|590|5590|180|181|AHAAAA|KRCAAA|AAAAxx
+8072|1805|0|0|2|12|72|72|72|3072|8072|144|145|MYAAAA|LRCAAA|HHHHxx
+1971|1806|1|3|1|11|71|971|1971|1971|1971|142|143|VXAAAA|MRCAAA|OOOOxx
+772|1807|0|0|2|12|72|772|772|772|772|144|145|SDAAAA|NRCAAA|VVVVxx
+3433|1808|1|1|3|13|33|433|1433|3433|3433|66|67|BCAAAA|ORCAAA|AAAAxx
+8419|1809|1|3|9|19|19|419|419|3419|8419|38|39|VLAAAA|PRCAAA|HHHHxx
+1493|1810|1|1|3|13|93|493|1493|1493|1493|186|187|LFAAAA|QRCAAA|OOOOxx
+2584|1811|0|0|4|4|84|584|584|2584|2584|168|169|KVAAAA|RRCAAA|VVVVxx
+9502|1812|0|2|2|2|2|502|1502|4502|9502|4|5|MBAAAA|SRCAAA|AAAAxx
+4673|1813|1|1|3|13|73|673|673|4673|4673|146|147|TXAAAA|TRCAAA|HHHHxx
+7403|1814|1|3|3|3|3|403|1403|2403|7403|6|7|TYAAAA|URCAAA|OOOOxx
+7103|1815|1|3|3|3|3|103|1103|2103|7103|6|7|FNAAAA|VRCAAA|VVVVxx
+7026|1816|0|2|6|6|26|26|1026|2026|7026|52|53|GKAAAA|WRCAAA|AAAAxx
+8574|1817|0|2|4|14|74|574|574|3574|8574|148|149|URAAAA|XRCAAA|HHHHxx
+1366|1818|0|2|6|6|66|366|1366|1366|1366|132|133|OAAAAA|YRCAAA|OOOOxx
+5787|1819|1|3|7|7|87|787|1787|787|5787|174|175|POAAAA|ZRCAAA|VVVVxx
+2552|1820|0|0|2|12|52|552|552|2552|2552|104|105|EUAAAA|ASCAAA|AAAAxx
+4557|1821|1|1|7|17|57|557|557|4557|4557|114|115|HTAAAA|BSCAAA|HHHHxx
+3237|1822|1|1|7|17|37|237|1237|3237|3237|74|75|NUAAAA|CSCAAA|OOOOxx
+6901|1823|1|1|1|1|1|901|901|1901|6901|2|3|LFAAAA|DSCAAA|VVVVxx
+7708|1824|0|0|8|8|8|708|1708|2708|7708|16|17|MKAAAA|ESCAAA|AAAAxx
+2011|1825|1|3|1|11|11|11|11|2011|2011|22|23|JZAAAA|FSCAAA|HHHHxx
+9455|1826|1|3|5|15|55|455|1455|4455|9455|110|111|RZAAAA|GSCAAA|OOOOxx
+5228|1827|0|0|8|8|28|228|1228|228|5228|56|57|CTAAAA|HSCAAA|VVVVxx
+4043|1828|1|3|3|3|43|43|43|4043|4043|86|87|NZAAAA|ISCAAA|AAAAxx
+8242|1829|0|2|2|2|42|242|242|3242|8242|84|85|AFAAAA|JSCAAA|HHHHxx
+6351|1830|1|3|1|11|51|351|351|1351|6351|102|103|HKAAAA|KSCAAA|OOOOxx
+5899|1831|1|3|9|19|99|899|1899|899|5899|198|199|XSAAAA|LSCAAA|VVVVxx
+4849|1832|1|1|9|9|49|849|849|4849|4849|98|99|NEAAAA|MSCAAA|AAAAxx
+9583|1833|1|3|3|3|83|583|1583|4583|9583|166|167|PEAAAA|NSCAAA|HHHHxx
+4994|1834|0|2|4|14|94|994|994|4994|4994|188|189|CKAAAA|OSCAAA|OOOOxx
+9787|1835|1|3|7|7|87|787|1787|4787|9787|174|175|LMAAAA|PSCAAA|VVVVxx
+243|1836|1|3|3|3|43|243|243|243|243|86|87|JJAAAA|QSCAAA|AAAAxx
+3931|1837|1|3|1|11|31|931|1931|3931|3931|62|63|FVAAAA|RSCAAA|HHHHxx
+5945|1838|1|1|5|5|45|945|1945|945|5945|90|91|RUAAAA|SSCAAA|OOOOxx
+1325|1839|1|1|5|5|25|325|1325|1325|1325|50|51|ZYAAAA|TSCAAA|VVVVxx
+4142|1840|0|2|2|2|42|142|142|4142|4142|84|85|IDAAAA|USCAAA|AAAAxx
+1963|1841|1|3|3|3|63|963|1963|1963|1963|126|127|NXAAAA|VSCAAA|HHHHxx
+7041|1842|1|1|1|1|41|41|1041|2041|7041|82|83|VKAAAA|WSCAAA|OOOOxx
+3074|1843|0|2|4|14|74|74|1074|3074|3074|148|149|GOAAAA|XSCAAA|VVVVxx
+3290|1844|0|2|0|10|90|290|1290|3290|3290|180|181|OWAAAA|YSCAAA|AAAAxx
+4146|1845|0|2|6|6|46|146|146|4146|4146|92|93|MDAAAA|ZSCAAA|HHHHxx
+3832|1846|0|0|2|12|32|832|1832|3832|3832|64|65|KRAAAA|ATCAAA|OOOOxx
+2217|1847|1|1|7|17|17|217|217|2217|2217|34|35|HHAAAA|BTCAAA|VVVVxx
+635|1848|1|3|5|15|35|635|635|635|635|70|71|LYAAAA|CTCAAA|AAAAxx
+6967|1849|1|3|7|7|67|967|967|1967|6967|134|135|ZHAAAA|DTCAAA|HHHHxx
+3522|1850|0|2|2|2|22|522|1522|3522|3522|44|45|MFAAAA|ETCAAA|OOOOxx
+2471|1851|1|3|1|11|71|471|471|2471|2471|142|143|BRAAAA|FTCAAA|VVVVxx
+4236|1852|0|0|6|16|36|236|236|4236|4236|72|73|YGAAAA|GTCAAA|AAAAxx
+853|1853|1|1|3|13|53|853|853|853|853|106|107|VGAAAA|HTCAAA|HHHHxx
+3754|1854|0|2|4|14|54|754|1754|3754|3754|108|109|KOAAAA|ITCAAA|OOOOxx
+796|1855|0|0|6|16|96|796|796|796|796|192|193|QEAAAA|JTCAAA|VVVVxx
+4640|1856|0|0|0|0|40|640|640|4640|4640|80|81|MWAAAA|KTCAAA|AAAAxx
+9496|1857|0|0|6|16|96|496|1496|4496|9496|192|193|GBAAAA|LTCAAA|HHHHxx
+6873|1858|1|1|3|13|73|873|873|1873|6873|146|147|JEAAAA|MTCAAA|OOOOxx
+4632|1859|0|0|2|12|32|632|632|4632|4632|64|65|EWAAAA|NTCAAA|VVVVxx
+5758|1860|0|2|8|18|58|758|1758|758|5758|116|117|MNAAAA|OTCAAA|AAAAxx
+6514|1861|0|2|4|14|14|514|514|1514|6514|28|29|OQAAAA|PTCAAA|HHHHxx
+9510|1862|0|2|0|10|10|510|1510|4510|9510|20|21|UBAAAA|QTCAAA|OOOOxx
+8411|1863|1|3|1|11|11|411|411|3411|8411|22|23|NLAAAA|RTCAAA|VVVVxx
+7762|1864|0|2|2|2|62|762|1762|2762|7762|124|125|OMAAAA|STCAAA|AAAAxx
+2225|1865|1|1|5|5|25|225|225|2225|2225|50|51|PHAAAA|TTCAAA|HHHHxx
+4373|1866|1|1|3|13|73|373|373|4373|4373|146|147|FMAAAA|UTCAAA|OOOOxx
+7326|1867|0|2|6|6|26|326|1326|2326|7326|52|53|UVAAAA|VTCAAA|VVVVxx
+8651|1868|1|3|1|11|51|651|651|3651|8651|102|103|TUAAAA|WTCAAA|AAAAxx
+9825|1869|1|1|5|5|25|825|1825|4825|9825|50|51|XNAAAA|XTCAAA|HHHHxx
+2988|1870|0|0|8|8|88|988|988|2988|2988|176|177|YKAAAA|YTCAAA|OOOOxx
+8138|1871|0|2|8|18|38|138|138|3138|8138|76|77|ABAAAA|ZTCAAA|VVVVxx
+7792|1872|0|0|2|12|92|792|1792|2792|7792|184|185|SNAAAA|AUCAAA|AAAAxx
+1232|1873|0|0|2|12|32|232|1232|1232|1232|64|65|KVAAAA|BUCAAA|HHHHxx
+8221|1874|1|1|1|1|21|221|221|3221|8221|42|43|FEAAAA|CUCAAA|OOOOxx
+4044|1875|0|0|4|4|44|44|44|4044|4044|88|89|OZAAAA|DUCAAA|VVVVxx
+1204|1876|0|0|4|4|4|204|1204|1204|1204|8|9|IUAAAA|EUCAAA|AAAAxx
+5145|1877|1|1|5|5|45|145|1145|145|5145|90|91|XPAAAA|FUCAAA|HHHHxx
+7791|1878|1|3|1|11|91|791|1791|2791|7791|182|183|RNAAAA|GUCAAA|OOOOxx
+8270|1879|0|2|0|10|70|270|270|3270|8270|140|141|CGAAAA|HUCAAA|VVVVxx
+9427|1880|1|3|7|7|27|427|1427|4427|9427|54|55|PYAAAA|IUCAAA|AAAAxx
+2152|1881|0|0|2|12|52|152|152|2152|2152|104|105|UEAAAA|JUCAAA|HHHHxx
+7790|1882|0|2|0|10|90|790|1790|2790|7790|180|181|QNAAAA|KUCAAA|OOOOxx
+5301|1883|1|1|1|1|1|301|1301|301|5301|2|3|XVAAAA|LUCAAA|VVVVxx
+626|1884|0|2|6|6|26|626|626|626|626|52|53|CYAAAA|MUCAAA|AAAAxx
+260|1885|0|0|0|0|60|260|260|260|260|120|121|AKAAAA|NUCAAA|HHHHxx
+4369|1886|1|1|9|9|69|369|369|4369|4369|138|139|BMAAAA|OUCAAA|OOOOxx
+5457|1887|1|1|7|17|57|457|1457|457|5457|114|115|XBAAAA|PUCAAA|VVVVxx
+3468|1888|0|0|8|8|68|468|1468|3468|3468|136|137|KDAAAA|QUCAAA|AAAAxx
+2257|1889|1|1|7|17|57|257|257|2257|2257|114|115|VIAAAA|RUCAAA|HHHHxx
+9318|1890|0|2|8|18|18|318|1318|4318|9318|36|37|KUAAAA|SUCAAA|OOOOxx
+8762|1891|0|2|2|2|62|762|762|3762|8762|124|125|AZAAAA|TUCAAA|VVVVxx
+9153|1892|1|1|3|13|53|153|1153|4153|9153|106|107|BOAAAA|UUCAAA|AAAAxx
+9220|1893|0|0|0|0|20|220|1220|4220|9220|40|41|QQAAAA|VUCAAA|HHHHxx
+8003|1894|1|3|3|3|3|3|3|3003|8003|6|7|VVAAAA|WUCAAA|OOOOxx
+7257|1895|1|1|7|17|57|257|1257|2257|7257|114|115|DTAAAA|XUCAAA|VVVVxx
+3930|1896|0|2|0|10|30|930|1930|3930|3930|60|61|EVAAAA|YUCAAA|AAAAxx
+2976|1897|0|0|6|16|76|976|976|2976|2976|152|153|MKAAAA|ZUCAAA|HHHHxx
+2531|1898|1|3|1|11|31|531|531|2531|2531|62|63|JTAAAA|AVCAAA|OOOOxx
+2250|1899|0|2|0|10|50|250|250|2250|2250|100|101|OIAAAA|BVCAAA|VVVVxx
+8549|1900|1|1|9|9|49|549|549|3549|8549|98|99|VQAAAA|CVCAAA|AAAAxx
+7197|1901|1|1|7|17|97|197|1197|2197|7197|194|195|VQAAAA|DVCAAA|HHHHxx
+5916|1902|0|0|6|16|16|916|1916|916|5916|32|33|OTAAAA|EVCAAA|OOOOxx
+5287|1903|1|3|7|7|87|287|1287|287|5287|174|175|JVAAAA|FVCAAA|VVVVxx
+9095|1904|1|3|5|15|95|95|1095|4095|9095|190|191|VLAAAA|GVCAAA|AAAAxx
+7137|1905|1|1|7|17|37|137|1137|2137|7137|74|75|NOAAAA|HVCAAA|HHHHxx
+7902|1906|0|2|2|2|2|902|1902|2902|7902|4|5|YRAAAA|IVCAAA|OOOOxx
+7598|1907|0|2|8|18|98|598|1598|2598|7598|196|197|GGAAAA|JVCAAA|VVVVxx
+5652|1908|0|0|2|12|52|652|1652|652|5652|104|105|KJAAAA|KVCAAA|AAAAxx
+2017|1909|1|1|7|17|17|17|17|2017|2017|34|35|PZAAAA|LVCAAA|HHHHxx
+7255|1910|1|3|5|15|55|255|1255|2255|7255|110|111|BTAAAA|MVCAAA|OOOOxx
+7999|1911|1|3|9|19|99|999|1999|2999|7999|198|199|RVAAAA|NVCAAA|VVVVxx
+5388|1912|0|0|8|8|88|388|1388|388|5388|176|177|GZAAAA|OVCAAA|AAAAxx
+8754|1913|0|2|4|14|54|754|754|3754|8754|108|109|SYAAAA|PVCAAA|HHHHxx
+5415|1914|1|3|5|15|15|415|1415|415|5415|30|31|HAAAAA|QVCAAA|OOOOxx
+8861|1915|1|1|1|1|61|861|861|3861|8861|122|123|VCAAAA|RVCAAA|VVVVxx
+2874|1916|0|2|4|14|74|874|874|2874|2874|148|149|OGAAAA|SVCAAA|AAAAxx
+9910|1917|0|2|0|10|10|910|1910|4910|9910|20|21|ERAAAA|TVCAAA|HHHHxx
+5178|1918|0|2|8|18|78|178|1178|178|5178|156|157|ERAAAA|UVCAAA|OOOOxx
+5698|1919|0|2|8|18|98|698|1698|698|5698|196|197|ELAAAA|VVCAAA|VVVVxx
+8500|1920|0|0|0|0|0|500|500|3500|8500|0|1|YOAAAA|WVCAAA|AAAAxx
+1814|1921|0|2|4|14|14|814|1814|1814|1814|28|29|URAAAA|XVCAAA|HHHHxx
+4968|1922|0|0|8|8|68|968|968|4968|4968|136|137|CJAAAA|YVCAAA|OOOOxx
+2642|1923|0|2|2|2|42|642|642|2642|2642|84|85|QXAAAA|ZVCAAA|VVVVxx
+1578|1924|0|2|8|18|78|578|1578|1578|1578|156|157|SIAAAA|AWCAAA|AAAAxx
+4774|1925|0|2|4|14|74|774|774|4774|4774|148|149|QBAAAA|BWCAAA|HHHHxx
+7062|1926|0|2|2|2|62|62|1062|2062|7062|124|125|QLAAAA|CWCAAA|OOOOxx
+5381|1927|1|1|1|1|81|381|1381|381|5381|162|163|ZYAAAA|DWCAAA|VVVVxx
+7985|1928|1|1|5|5|85|985|1985|2985|7985|170|171|DVAAAA|EWCAAA|AAAAxx
+3850|1929|0|2|0|10|50|850|1850|3850|3850|100|101|CSAAAA|FWCAAA|HHHHxx
+5624|1930|0|0|4|4|24|624|1624|624|5624|48|49|IIAAAA|GWCAAA|OOOOxx
+8948|1931|0|0|8|8|48|948|948|3948|8948|96|97|EGAAAA|HWCAAA|VVVVxx
+995|1932|1|3|5|15|95|995|995|995|995|190|191|HMAAAA|IWCAAA|AAAAxx
+5058|1933|0|2|8|18|58|58|1058|58|5058|116|117|OMAAAA|JWCAAA|HHHHxx
+9670|1934|0|2|0|10|70|670|1670|4670|9670|140|141|YHAAAA|KWCAAA|OOOOxx
+3115|1935|1|3|5|15|15|115|1115|3115|3115|30|31|VPAAAA|LWCAAA|VVVVxx
+4935|1936|1|3|5|15|35|935|935|4935|4935|70|71|VHAAAA|MWCAAA|AAAAxx
+4735|1937|1|3|5|15|35|735|735|4735|4735|70|71|DAAAAA|NWCAAA|HHHHxx
+1348|1938|0|0|8|8|48|348|1348|1348|1348|96|97|WZAAAA|OWCAAA|OOOOxx
+2380|1939|0|0|0|0|80|380|380|2380|2380|160|161|ONAAAA|PWCAAA|VVVVxx
+4246|1940|0|2|6|6|46|246|246|4246|4246|92|93|IHAAAA|QWCAAA|AAAAxx
+522|1941|0|2|2|2|22|522|522|522|522|44|45|CUAAAA|RWCAAA|HHHHxx
+1701|1942|1|1|1|1|1|701|1701|1701|1701|2|3|LNAAAA|SWCAAA|OOOOxx
+9709|1943|1|1|9|9|9|709|1709|4709|9709|18|19|LJAAAA|TWCAAA|VVVVxx
+8829|1944|1|1|9|9|29|829|829|3829|8829|58|59|PBAAAA|UWCAAA|AAAAxx
+7936|1945|0|0|6|16|36|936|1936|2936|7936|72|73|GTAAAA|VWCAAA|HHHHxx
+8474|1946|0|2|4|14|74|474|474|3474|8474|148|149|YNAAAA|WWCAAA|OOOOxx
+4676|1947|0|0|6|16|76|676|676|4676|4676|152|153|WXAAAA|XWCAAA|VVVVxx
+6303|1948|1|3|3|3|3|303|303|1303|6303|6|7|LIAAAA|YWCAAA|AAAAxx
+3485|1949|1|1|5|5|85|485|1485|3485|3485|170|171|BEAAAA|ZWCAAA|HHHHxx
+2695|1950|1|3|5|15|95|695|695|2695|2695|190|191|RZAAAA|AXCAAA|OOOOxx
+8830|1951|0|2|0|10|30|830|830|3830|8830|60|61|QBAAAA|BXCAAA|VVVVxx
+898|1952|0|2|8|18|98|898|898|898|898|196|197|OIAAAA|CXCAAA|AAAAxx
+7268|1953|0|0|8|8|68|268|1268|2268|7268|136|137|OTAAAA|DXCAAA|HHHHxx
+6568|1954|0|0|8|8|68|568|568|1568|6568|136|137|QSAAAA|EXCAAA|OOOOxx
+9724|1955|0|0|4|4|24|724|1724|4724|9724|48|49|AKAAAA|FXCAAA|VVVVxx
+3329|1956|1|1|9|9|29|329|1329|3329|3329|58|59|BYAAAA|GXCAAA|AAAAxx
+9860|1957|0|0|0|0|60|860|1860|4860|9860|120|121|GPAAAA|HXCAAA|HHHHxx
+6833|1958|1|1|3|13|33|833|833|1833|6833|66|67|VCAAAA|IXCAAA|OOOOxx
+5956|1959|0|0|6|16|56|956|1956|956|5956|112|113|CVAAAA|JXCAAA|VVVVxx
+3963|1960|1|3|3|3|63|963|1963|3963|3963|126|127|LWAAAA|KXCAAA|AAAAxx
+883|1961|1|3|3|3|83|883|883|883|883|166|167|ZHAAAA|LXCAAA|HHHHxx
+2761|1962|1|1|1|1|61|761|761|2761|2761|122|123|FCAAAA|MXCAAA|OOOOxx
+4644|1963|0|0|4|4|44|644|644|4644|4644|88|89|QWAAAA|NXCAAA|VVVVxx
+1358|1964|0|2|8|18|58|358|1358|1358|1358|116|117|GAAAAA|OXCAAA|AAAAxx
+2049|1965|1|1|9|9|49|49|49|2049|2049|98|99|VAAAAA|PXCAAA|HHHHxx
+2193|1966|1|1|3|13|93|193|193|2193|2193|186|187|JGAAAA|QXCAAA|OOOOxx
+9435|1967|1|3|5|15|35|435|1435|4435|9435|70|71|XYAAAA|RXCAAA|VVVVxx
+5890|1968|0|2|0|10|90|890|1890|890|5890|180|181|OSAAAA|SXCAAA|AAAAxx
+8149|1969|1|1|9|9|49|149|149|3149|8149|98|99|LBAAAA|TXCAAA|HHHHxx
+423|1970|1|3|3|3|23|423|423|423|423|46|47|HQAAAA|UXCAAA|OOOOxx
+7980|1971|0|0|0|0|80|980|1980|2980|7980|160|161|YUAAAA|VXCAAA|VVVVxx
+9019|1972|1|3|9|19|19|19|1019|4019|9019|38|39|XIAAAA|WXCAAA|AAAAxx
+1647|1973|1|3|7|7|47|647|1647|1647|1647|94|95|JLAAAA|XXCAAA|HHHHxx
+9495|1974|1|3|5|15|95|495|1495|4495|9495|190|191|FBAAAA|YXCAAA|OOOOxx
+3904|1975|0|0|4|4|4|904|1904|3904|3904|8|9|EUAAAA|ZXCAAA|VVVVxx
+5838|1976|0|2|8|18|38|838|1838|838|5838|76|77|OQAAAA|AYCAAA|AAAAxx
+3866|1977|0|2|6|6|66|866|1866|3866|3866|132|133|SSAAAA|BYCAAA|HHHHxx
+3093|1978|1|1|3|13|93|93|1093|3093|3093|186|187|ZOAAAA|CYCAAA|OOOOxx
+9666|1979|0|2|6|6|66|666|1666|4666|9666|132|133|UHAAAA|DYCAAA|VVVVxx
+1246|1980|0|2|6|6|46|246|1246|1246|1246|92|93|YVAAAA|EYCAAA|AAAAxx
+9759|1981|1|3|9|19|59|759|1759|4759|9759|118|119|JLAAAA|FYCAAA|HHHHxx
+7174|1982|0|2|4|14|74|174|1174|2174|7174|148|149|YPAAAA|GYCAAA|OOOOxx
+7678|1983|0|2|8|18|78|678|1678|2678|7678|156|157|IJAAAA|HYCAAA|VVVVxx
+3004|1984|0|0|4|4|4|4|1004|3004|3004|8|9|OLAAAA|IYCAAA|AAAAxx
+5607|1985|1|3|7|7|7|607|1607|607|5607|14|15|RHAAAA|JYCAAA|HHHHxx
+8510|1986|0|2|0|10|10|510|510|3510|8510|20|21|IPAAAA|KYCAAA|OOOOxx
+1483|1987|1|3|3|3|83|483|1483|1483|1483|166|167|BFAAAA|LYCAAA|VVVVxx
+2915|1988|1|3|5|15|15|915|915|2915|2915|30|31|DIAAAA|MYCAAA|AAAAxx
+1548|1989|0|0|8|8|48|548|1548|1548|1548|96|97|OHAAAA|NYCAAA|HHHHxx
+5767|1990|1|3|7|7|67|767|1767|767|5767|134|135|VNAAAA|OYCAAA|OOOOxx
+3214|1991|0|2|4|14|14|214|1214|3214|3214|28|29|QTAAAA|PYCAAA|VVVVxx
+8663|1992|1|3|3|3|63|663|663|3663|8663|126|127|FVAAAA|QYCAAA|AAAAxx
+5425|1993|1|1|5|5|25|425|1425|425|5425|50|51|RAAAAA|RYCAAA|HHHHxx
+8530|1994|0|2|0|10|30|530|530|3530|8530|60|61|CQAAAA|SYCAAA|OOOOxx
+821|1995|1|1|1|1|21|821|821|821|821|42|43|PFAAAA|TYCAAA|VVVVxx
+8816|1996|0|0|6|16|16|816|816|3816|8816|32|33|CBAAAA|UYCAAA|AAAAxx
+9367|1997|1|3|7|7|67|367|1367|4367|9367|134|135|HWAAAA|VYCAAA|HHHHxx
+4138|1998|0|2|8|18|38|138|138|4138|4138|76|77|EDAAAA|WYCAAA|OOOOxx
+94|1999|0|2|4|14|94|94|94|94|94|188|189|QDAAAA|XYCAAA|VVVVxx
+1858|2000|0|2|8|18|58|858|1858|1858|1858|116|117|MTAAAA|YYCAAA|AAAAxx
+5513|2001|1|1|3|13|13|513|1513|513|5513|26|27|BEAAAA|ZYCAAA|HHHHxx
+9620|2002|0|0|0|0|20|620|1620|4620|9620|40|41|AGAAAA|AZCAAA|OOOOxx
+4770|2003|0|2|0|10|70|770|770|4770|4770|140|141|MBAAAA|BZCAAA|VVVVxx
+5193|2004|1|1|3|13|93|193|1193|193|5193|186|187|TRAAAA|CZCAAA|AAAAxx
+198|2005|0|2|8|18|98|198|198|198|198|196|197|QHAAAA|DZCAAA|HHHHxx
+417|2006|1|1|7|17|17|417|417|417|417|34|35|BQAAAA|EZCAAA|OOOOxx
+173|2007|1|1|3|13|73|173|173|173|173|146|147|RGAAAA|FZCAAA|VVVVxx
+6248|2008|0|0|8|8|48|248|248|1248|6248|96|97|IGAAAA|GZCAAA|AAAAxx
+302|2009|0|2|2|2|2|302|302|302|302|4|5|QLAAAA|HZCAAA|HHHHxx
+8983|2010|1|3|3|3|83|983|983|3983|8983|166|167|NHAAAA|IZCAAA|OOOOxx
+4840|2011|0|0|0|0|40|840|840|4840|4840|80|81|EEAAAA|JZCAAA|VVVVxx
+2876|2012|0|0|6|16|76|876|876|2876|2876|152|153|QGAAAA|KZCAAA|AAAAxx
+5841|2013|1|1|1|1|41|841|1841|841|5841|82|83|RQAAAA|LZCAAA|HHHHxx
+2766|2014|0|2|6|6|66|766|766|2766|2766|132|133|KCAAAA|MZCAAA|OOOOxx
+9482|2015|0|2|2|2|82|482|1482|4482|9482|164|165|SAAAAA|NZCAAA|VVVVxx
+5335|2016|1|3|5|15|35|335|1335|335|5335|70|71|FXAAAA|OZCAAA|AAAAxx
+1502|2017|0|2|2|2|2|502|1502|1502|1502|4|5|UFAAAA|PZCAAA|HHHHxx
+9291|2018|1|3|1|11|91|291|1291|4291|9291|182|183|JTAAAA|QZCAAA|OOOOxx
+8655|2019|1|3|5|15|55|655|655|3655|8655|110|111|XUAAAA|RZCAAA|VVVVxx
+1687|2020|1|3|7|7|87|687|1687|1687|1687|174|175|XMAAAA|SZCAAA|AAAAxx
+8171|2021|1|3|1|11|71|171|171|3171|8171|142|143|HCAAAA|TZCAAA|HHHHxx
+5699|2022|1|3|9|19|99|699|1699|699|5699|198|199|FLAAAA|UZCAAA|OOOOxx
+1462|2023|0|2|2|2|62|462|1462|1462|1462|124|125|GEAAAA|VZCAAA|VVVVxx
+608|2024|0|0|8|8|8|608|608|608|608|16|17|KXAAAA|WZCAAA|AAAAxx
+6860|2025|0|0|0|0|60|860|860|1860|6860|120|121|WDAAAA|XZCAAA|HHHHxx
+6063|2026|1|3|3|3|63|63|63|1063|6063|126|127|FZAAAA|YZCAAA|OOOOxx
+1422|2027|0|2|2|2|22|422|1422|1422|1422|44|45|SCAAAA|ZZCAAA|VVVVxx
+1932|2028|0|0|2|12|32|932|1932|1932|1932|64|65|IWAAAA|AADAAA|AAAAxx
+5065|2029|1|1|5|5|65|65|1065|65|5065|130|131|VMAAAA|BADAAA|HHHHxx
+432|2030|0|0|2|12|32|432|432|432|432|64|65|QQAAAA|CADAAA|OOOOxx
+4680|2031|0|0|0|0|80|680|680|4680|4680|160|161|AYAAAA|DADAAA|VVVVxx
+8172|2032|0|0|2|12|72|172|172|3172|8172|144|145|ICAAAA|EADAAA|AAAAxx
+8668|2033|0|0|8|8|68|668|668|3668|8668|136|137|KVAAAA|FADAAA|HHHHxx
+256|2034|0|0|6|16|56|256|256|256|256|112|113|WJAAAA|GADAAA|OOOOxx
+2500|2035|0|0|0|0|0|500|500|2500|2500|0|1|ESAAAA|HADAAA|VVVVxx
+274|2036|0|2|4|14|74|274|274|274|274|148|149|OKAAAA|IADAAA|AAAAxx
+5907|2037|1|3|7|7|7|907|1907|907|5907|14|15|FTAAAA|JADAAA|HHHHxx
+8587|2038|1|3|7|7|87|587|587|3587|8587|174|175|HSAAAA|KADAAA|OOOOxx
+9942|2039|0|2|2|2|42|942|1942|4942|9942|84|85|KSAAAA|LADAAA|VVVVxx
+116|2040|0|0|6|16|16|116|116|116|116|32|33|MEAAAA|MADAAA|AAAAxx
+7134|2041|0|2|4|14|34|134|1134|2134|7134|68|69|KOAAAA|NADAAA|HHHHxx
+9002|2042|0|2|2|2|2|2|1002|4002|9002|4|5|GIAAAA|OADAAA|OOOOxx
+1209|2043|1|1|9|9|9|209|1209|1209|1209|18|19|NUAAAA|PADAAA|VVVVxx
+9983|2044|1|3|3|3|83|983|1983|4983|9983|166|167|ZTAAAA|QADAAA|AAAAxx
+1761|2045|1|1|1|1|61|761|1761|1761|1761|122|123|TPAAAA|RADAAA|HHHHxx
+7723|2046|1|3|3|3|23|723|1723|2723|7723|46|47|BLAAAA|SADAAA|OOOOxx
+6518|2047|0|2|8|18|18|518|518|1518|6518|36|37|SQAAAA|TADAAA|VVVVxx
+1372|2048|0|0|2|12|72|372|1372|1372|1372|144|145|UAAAAA|UADAAA|AAAAxx
+3587|2049|1|3|7|7|87|587|1587|3587|3587|174|175|ZHAAAA|VADAAA|HHHHxx
+5323|2050|1|3|3|3|23|323|1323|323|5323|46|47|TWAAAA|WADAAA|OOOOxx
+5902|2051|0|2|2|2|2|902|1902|902|5902|4|5|ATAAAA|XADAAA|VVVVxx
+3749|2052|1|1|9|9|49|749|1749|3749|3749|98|99|FOAAAA|YADAAA|AAAAxx
+5965|2053|1|1|5|5|65|965|1965|965|5965|130|131|LVAAAA|ZADAAA|HHHHxx
+663|2054|1|3|3|3|63|663|663|663|663|126|127|NZAAAA|ABDAAA|OOOOxx
+36|2055|0|0|6|16|36|36|36|36|36|72|73|KBAAAA|BBDAAA|VVVVxx
+9782|2056|0|2|2|2|82|782|1782|4782|9782|164|165|GMAAAA|CBDAAA|AAAAxx
+5412|2057|0|0|2|12|12|412|1412|412|5412|24|25|EAAAAA|DBDAAA|HHHHxx
+9961|2058|1|1|1|1|61|961|1961|4961|9961|122|123|DTAAAA|EBDAAA|OOOOxx
+6492|2059|0|0|2|12|92|492|492|1492|6492|184|185|SPAAAA|FBDAAA|VVVVxx
+4234|2060|0|2|4|14|34|234|234|4234|4234|68|69|WGAAAA|GBDAAA|AAAAxx
+4922|2061|0|2|2|2|22|922|922|4922|4922|44|45|IHAAAA|HBDAAA|HHHHxx
+6166|2062|0|2|6|6|66|166|166|1166|6166|132|133|EDAAAA|IBDAAA|OOOOxx
+7019|2063|1|3|9|19|19|19|1019|2019|7019|38|39|ZJAAAA|JBDAAA|VVVVxx
+7805|2064|1|1|5|5|5|805|1805|2805|7805|10|11|FOAAAA|KBDAAA|AAAAxx
+9808|2065|0|0|8|8|8|808|1808|4808|9808|16|17|GNAAAA|LBDAAA|HHHHxx
+2550|2066|0|2|0|10|50|550|550|2550|2550|100|101|CUAAAA|MBDAAA|OOOOxx
+8626|2067|0|2|6|6|26|626|626|3626|8626|52|53|UTAAAA|NBDAAA|VVVVxx
+5649|2068|1|1|9|9|49|649|1649|649|5649|98|99|HJAAAA|OBDAAA|AAAAxx
+3117|2069|1|1|7|17|17|117|1117|3117|3117|34|35|XPAAAA|PBDAAA|HHHHxx
+866|2070|0|2|6|6|66|866|866|866|866|132|133|IHAAAA|QBDAAA|OOOOxx
+2323|2071|1|3|3|3|23|323|323|2323|2323|46|47|JLAAAA|RBDAAA|VVVVxx
+5132|2072|0|0|2|12|32|132|1132|132|5132|64|65|KPAAAA|SBDAAA|AAAAxx
+9222|2073|0|2|2|2|22|222|1222|4222|9222|44|45|SQAAAA|TBDAAA|HHHHxx
+3934|2074|0|2|4|14|34|934|1934|3934|3934|68|69|IVAAAA|UBDAAA|OOOOxx
+4845|2075|1|1|5|5|45|845|845|4845|4845|90|91|JEAAAA|VBDAAA|VVVVxx
+7714|2076|0|2|4|14|14|714|1714|2714|7714|28|29|SKAAAA|WBDAAA|AAAAxx
+9818|2077|0|2|8|18|18|818|1818|4818|9818|36|37|QNAAAA|XBDAAA|HHHHxx
+2219|2078|1|3|9|19|19|219|219|2219|2219|38|39|JHAAAA|YBDAAA|OOOOxx
+6573|2079|1|1|3|13|73|573|573|1573|6573|146|147|VSAAAA|ZBDAAA|VVVVxx
+4555|2080|1|3|5|15|55|555|555|4555|4555|110|111|FTAAAA|ACDAAA|AAAAxx
+7306|2081|0|2|6|6|6|306|1306|2306|7306|12|13|AVAAAA|BCDAAA|HHHHxx
+9313|2082|1|1|3|13|13|313|1313|4313|9313|26|27|FUAAAA|CCDAAA|OOOOxx
+3924|2083|0|0|4|4|24|924|1924|3924|3924|48|49|YUAAAA|DCDAAA|VVVVxx
+5176|2084|0|0|6|16|76|176|1176|176|5176|152|153|CRAAAA|ECDAAA|AAAAxx
+9767|2085|1|3|7|7|67|767|1767|4767|9767|134|135|RLAAAA|FCDAAA|HHHHxx
+905|2086|1|1|5|5|5|905|905|905|905|10|11|VIAAAA|GCDAAA|OOOOxx
+8037|2087|1|1|7|17|37|37|37|3037|8037|74|75|DXAAAA|HCDAAA|VVVVxx
+8133|2088|1|1|3|13|33|133|133|3133|8133|66|67|VAAAAA|ICDAAA|AAAAxx
+2954|2089|0|2|4|14|54|954|954|2954|2954|108|109|QJAAAA|JCDAAA|HHHHxx
+7262|2090|0|2|2|2|62|262|1262|2262|7262|124|125|ITAAAA|KCDAAA|OOOOxx
+8768|2091|0|0|8|8|68|768|768|3768|8768|136|137|GZAAAA|LCDAAA|VVVVxx
+6953|2092|1|1|3|13|53|953|953|1953|6953|106|107|LHAAAA|MCDAAA|AAAAxx
+1984|2093|0|0|4|4|84|984|1984|1984|1984|168|169|IYAAAA|NCDAAA|HHHHxx
+9348|2094|0|0|8|8|48|348|1348|4348|9348|96|97|OVAAAA|OCDAAA|OOOOxx
+7769|2095|1|1|9|9|69|769|1769|2769|7769|138|139|VMAAAA|PCDAAA|VVVVxx
+2994|2096|0|2|4|14|94|994|994|2994|2994|188|189|ELAAAA|QCDAAA|AAAAxx
+5938|2097|0|2|8|18|38|938|1938|938|5938|76|77|KUAAAA|RCDAAA|HHHHxx
+556|2098|0|0|6|16|56|556|556|556|556|112|113|KVAAAA|SCDAAA|OOOOxx
+2577|2099|1|1|7|17|77|577|577|2577|2577|154|155|DVAAAA|TCDAAA|VVVVxx
+8733|2100|1|1|3|13|33|733|733|3733|8733|66|67|XXAAAA|UCDAAA|AAAAxx
+3108|2101|0|0|8|8|8|108|1108|3108|3108|16|17|OPAAAA|VCDAAA|HHHHxx
+4166|2102|0|2|6|6|66|166|166|4166|4166|132|133|GEAAAA|WCDAAA|OOOOxx
+3170|2103|0|2|0|10|70|170|1170|3170|3170|140|141|YRAAAA|XCDAAA|VVVVxx
+8118|2104|0|2|8|18|18|118|118|3118|8118|36|37|GAAAAA|YCDAAA|AAAAxx
+8454|2105|0|2|4|14|54|454|454|3454|8454|108|109|ENAAAA|ZCDAAA|HHHHxx
+5338|2106|0|2|8|18|38|338|1338|338|5338|76|77|IXAAAA|ADDAAA|OOOOxx
+402|2107|0|2|2|2|2|402|402|402|402|4|5|MPAAAA|BDDAAA|VVVVxx
+5673|2108|1|1|3|13|73|673|1673|673|5673|146|147|FKAAAA|CDDAAA|AAAAxx
+4324|2109|0|0|4|4|24|324|324|4324|4324|48|49|IKAAAA|DDDAAA|HHHHxx
+1943|2110|1|3|3|3|43|943|1943|1943|1943|86|87|TWAAAA|EDDAAA|OOOOxx
+7703|2111|1|3|3|3|3|703|1703|2703|7703|6|7|HKAAAA|FDDAAA|VVVVxx
+7180|2112|0|0|0|0|80|180|1180|2180|7180|160|161|EQAAAA|GDDAAA|AAAAxx
+5478|2113|0|2|8|18|78|478|1478|478|5478|156|157|SCAAAA|HDDAAA|HHHHxx
+5775|2114|1|3|5|15|75|775|1775|775|5775|150|151|DOAAAA|IDDAAA|OOOOxx
+6952|2115|0|0|2|12|52|952|952|1952|6952|104|105|KHAAAA|JDDAAA|VVVVxx
+9022|2116|0|2|2|2|22|22|1022|4022|9022|44|45|AJAAAA|KDDAAA|AAAAxx
+547|2117|1|3|7|7|47|547|547|547|547|94|95|BVAAAA|LDDAAA|HHHHxx
+5877|2118|1|1|7|17|77|877|1877|877|5877|154|155|BSAAAA|MDDAAA|OOOOxx
+9580|2119|0|0|0|0|80|580|1580|4580|9580|160|161|MEAAAA|NDDAAA|VVVVxx
+6094|2120|0|2|4|14|94|94|94|1094|6094|188|189|KAAAAA|ODDAAA|AAAAxx
+3398|2121|0|2|8|18|98|398|1398|3398|3398|196|197|SAAAAA|PDDAAA|HHHHxx
+4574|2122|0|2|4|14|74|574|574|4574|4574|148|149|YTAAAA|QDDAAA|OOOOxx
+3675|2123|1|3|5|15|75|675|1675|3675|3675|150|151|JLAAAA|RDDAAA|VVVVxx
+6413|2124|1|1|3|13|13|413|413|1413|6413|26|27|RMAAAA|SDDAAA|AAAAxx
+9851|2125|1|3|1|11|51|851|1851|4851|9851|102|103|XOAAAA|TDDAAA|HHHHxx
+126|2126|0|2|6|6|26|126|126|126|126|52|53|WEAAAA|UDDAAA|OOOOxx
+6803|2127|1|3|3|3|3|803|803|1803|6803|6|7|RBAAAA|VDDAAA|VVVVxx
+6949|2128|1|1|9|9|49|949|949|1949|6949|98|99|HHAAAA|WDDAAA|AAAAxx
+115|2129|1|3|5|15|15|115|115|115|115|30|31|LEAAAA|XDDAAA|HHHHxx
+4165|2130|1|1|5|5|65|165|165|4165|4165|130|131|FEAAAA|YDDAAA|OOOOxx
+201|2131|1|1|1|1|1|201|201|201|201|2|3|THAAAA|ZDDAAA|VVVVxx
+9324|2132|0|0|4|4|24|324|1324|4324|9324|48|49|QUAAAA|AEDAAA|AAAAxx
+6562|2133|0|2|2|2|62|562|562|1562|6562|124|125|KSAAAA|BEDAAA|HHHHxx
+1917|2134|1|1|7|17|17|917|1917|1917|1917|34|35|TVAAAA|CEDAAA|OOOOxx
+558|2135|0|2|8|18|58|558|558|558|558|116|117|MVAAAA|DEDAAA|VVVVxx
+8515|2136|1|3|5|15|15|515|515|3515|8515|30|31|NPAAAA|EEDAAA|AAAAxx
+6321|2137|1|1|1|1|21|321|321|1321|6321|42|43|DJAAAA|FEDAAA|HHHHxx
+6892|2138|0|0|2|12|92|892|892|1892|6892|184|185|CFAAAA|GEDAAA|OOOOxx
+1001|2139|1|1|1|1|1|1|1001|1001|1001|2|3|NMAAAA|HEDAAA|VVVVxx
+2858|2140|0|2|8|18|58|858|858|2858|2858|116|117|YFAAAA|IEDAAA|AAAAxx
+2434|2141|0|2|4|14|34|434|434|2434|2434|68|69|QPAAAA|JEDAAA|HHHHxx
+4460|2142|0|0|0|0|60|460|460|4460|4460|120|121|OPAAAA|KEDAAA|OOOOxx
+5447|2143|1|3|7|7|47|447|1447|447|5447|94|95|NBAAAA|LEDAAA|VVVVxx
+3799|2144|1|3|9|19|99|799|1799|3799|3799|198|199|DQAAAA|MEDAAA|AAAAxx
+4310|2145|0|2|0|10|10|310|310|4310|4310|20|21|UJAAAA|NEDAAA|HHHHxx
+405|2146|1|1|5|5|5|405|405|405|405|10|11|PPAAAA|OEDAAA|OOOOxx
+4573|2147|1|1|3|13|73|573|573|4573|4573|146|147|XTAAAA|PEDAAA|VVVVxx
+706|2148|0|2|6|6|6|706|706|706|706|12|13|EBAAAA|QEDAAA|AAAAxx
+7619|2149|1|3|9|19|19|619|1619|2619|7619|38|39|BHAAAA|REDAAA|HHHHxx
+7959|2150|1|3|9|19|59|959|1959|2959|7959|118|119|DUAAAA|SEDAAA|OOOOxx
+6712|2151|0|0|2|12|12|712|712|1712|6712|24|25|EYAAAA|TEDAAA|VVVVxx
+6959|2152|1|3|9|19|59|959|959|1959|6959|118|119|RHAAAA|UEDAAA|AAAAxx
+9791|2153|1|3|1|11|91|791|1791|4791|9791|182|183|PMAAAA|VEDAAA|HHHHxx
+2112|2154|0|0|2|12|12|112|112|2112|2112|24|25|GDAAAA|WEDAAA|OOOOxx
+9114|2155|0|2|4|14|14|114|1114|4114|9114|28|29|OMAAAA|XEDAAA|VVVVxx
+3506|2156|0|2|6|6|6|506|1506|3506|3506|12|13|WEAAAA|YEDAAA|AAAAxx
+5002|2157|0|2|2|2|2|2|1002|2|5002|4|5|KKAAAA|ZEDAAA|HHHHxx
+3518|2158|0|2|8|18|18|518|1518|3518|3518|36|37|IFAAAA|AFDAAA|OOOOxx
+602|2159|0|2|2|2|2|602|602|602|602|4|5|EXAAAA|BFDAAA|VVVVxx
+9060|2160|0|0|0|0|60|60|1060|4060|9060|120|121|MKAAAA|CFDAAA|AAAAxx
+3292|2161|0|0|2|12|92|292|1292|3292|3292|184|185|QWAAAA|DFDAAA|HHHHxx
+77|2162|1|1|7|17|77|77|77|77|77|154|155|ZCAAAA|EFDAAA|OOOOxx
+1420|2163|0|0|0|0|20|420|1420|1420|1420|40|41|QCAAAA|FFDAAA|VVVVxx
+6001|2164|1|1|1|1|1|1|1|1001|6001|2|3|VWAAAA|GFDAAA|AAAAxx
+7477|2165|1|1|7|17|77|477|1477|2477|7477|154|155|PBAAAA|HFDAAA|HHHHxx
+6655|2166|1|3|5|15|55|655|655|1655|6655|110|111|ZVAAAA|IFDAAA|OOOOxx
+7845|2167|1|1|5|5|45|845|1845|2845|7845|90|91|TPAAAA|JFDAAA|VVVVxx
+8484|2168|0|0|4|4|84|484|484|3484|8484|168|169|IOAAAA|KFDAAA|AAAAxx
+4345|2169|1|1|5|5|45|345|345|4345|4345|90|91|DLAAAA|LFDAAA|HHHHxx
+4250|2170|0|2|0|10|50|250|250|4250|4250|100|101|MHAAAA|MFDAAA|OOOOxx
+2391|2171|1|3|1|11|91|391|391|2391|2391|182|183|ZNAAAA|NFDAAA|VVVVxx
+6884|2172|0|0|4|4|84|884|884|1884|6884|168|169|UEAAAA|OFDAAA|AAAAxx
+7270|2173|0|2|0|10|70|270|1270|2270|7270|140|141|QTAAAA|PFDAAA|HHHHxx
+2499|2174|1|3|9|19|99|499|499|2499|2499|198|199|DSAAAA|QFDAAA|OOOOxx
+7312|2175|0|0|2|12|12|312|1312|2312|7312|24|25|GVAAAA|RFDAAA|VVVVxx
+7113|2176|1|1|3|13|13|113|1113|2113|7113|26|27|PNAAAA|SFDAAA|AAAAxx
+6695|2177|1|3|5|15|95|695|695|1695|6695|190|191|NXAAAA|TFDAAA|HHHHxx
+6521|2178|1|1|1|1|21|521|521|1521|6521|42|43|VQAAAA|UFDAAA|OOOOxx
+272|2179|0|0|2|12|72|272|272|272|272|144|145|MKAAAA|VFDAAA|VVVVxx
+9976|2180|0|0|6|16|76|976|1976|4976|9976|152|153|STAAAA|WFDAAA|AAAAxx
+992|2181|0|0|2|12|92|992|992|992|992|184|185|EMAAAA|XFDAAA|HHHHxx
+6158|2182|0|2|8|18|58|158|158|1158|6158|116|117|WCAAAA|YFDAAA|OOOOxx
+3281|2183|1|1|1|1|81|281|1281|3281|3281|162|163|FWAAAA|ZFDAAA|VVVVxx
+7446|2184|0|2|6|6|46|446|1446|2446|7446|92|93|KAAAAA|AGDAAA|AAAAxx
+4679|2185|1|3|9|19|79|679|679|4679|4679|158|159|ZXAAAA|BGDAAA|HHHHxx
+5203|2186|1|3|3|3|3|203|1203|203|5203|6|7|DSAAAA|CGDAAA|OOOOxx
+9874|2187|0|2|4|14|74|874|1874|4874|9874|148|149|UPAAAA|DGDAAA|VVVVxx
+8371|2188|1|3|1|11|71|371|371|3371|8371|142|143|ZJAAAA|EGDAAA|AAAAxx
+9086|2189|0|2|6|6|86|86|1086|4086|9086|172|173|MLAAAA|FGDAAA|HHHHxx
+430|2190|0|2|0|10|30|430|430|430|430|60|61|OQAAAA|GGDAAA|OOOOxx
+8749|2191|1|1|9|9|49|749|749|3749|8749|98|99|NYAAAA|HGDAAA|VVVVxx
+577|2192|1|1|7|17|77|577|577|577|577|154|155|FWAAAA|IGDAAA|AAAAxx
+4884|2193|0|0|4|4|84|884|884|4884|4884|168|169|WFAAAA|JGDAAA|HHHHxx
+3421|2194|1|1|1|1|21|421|1421|3421|3421|42|43|PBAAAA|KGDAAA|OOOOxx
+2812|2195|0|0|2|12|12|812|812|2812|2812|24|25|EEAAAA|LGDAAA|VVVVxx
+5958|2196|0|2|8|18|58|958|1958|958|5958|116|117|EVAAAA|MGDAAA|AAAAxx
+9901|2197|1|1|1|1|1|901|1901|4901|9901|2|3|VQAAAA|NGDAAA|HHHHxx
+8478|2198|0|2|8|18|78|478|478|3478|8478|156|157|COAAAA|OGDAAA|OOOOxx
+6545|2199|1|1|5|5|45|545|545|1545|6545|90|91|TRAAAA|PGDAAA|VVVVxx
+1479|2200|1|3|9|19|79|479|1479|1479|1479|158|159|XEAAAA|QGDAAA|AAAAxx
+1046|2201|0|2|6|6|46|46|1046|1046|1046|92|93|GOAAAA|RGDAAA|HHHHxx
+6372|2202|0|0|2|12|72|372|372|1372|6372|144|145|CLAAAA|SGDAAA|OOOOxx
+8206|2203|0|2|6|6|6|206|206|3206|8206|12|13|QDAAAA|TGDAAA|VVVVxx
+9544|2204|0|0|4|4|44|544|1544|4544|9544|88|89|CDAAAA|UGDAAA|AAAAxx
+9287|2205|1|3|7|7|87|287|1287|4287|9287|174|175|FTAAAA|VGDAAA|HHHHxx
+6786|2206|0|2|6|6|86|786|786|1786|6786|172|173|ABAAAA|WGDAAA|OOOOxx
+6511|2207|1|3|1|11|11|511|511|1511|6511|22|23|LQAAAA|XGDAAA|VVVVxx
+603|2208|1|3|3|3|3|603|603|603|603|6|7|FXAAAA|YGDAAA|AAAAxx
+2022|2209|0|2|2|2|22|22|22|2022|2022|44|45|UZAAAA|ZGDAAA|HHHHxx
+2086|2210|0|2|6|6|86|86|86|2086|2086|172|173|GCAAAA|AHDAAA|OOOOxx
+1969|2211|1|1|9|9|69|969|1969|1969|1969|138|139|TXAAAA|BHDAAA|VVVVxx
+4841|2212|1|1|1|1|41|841|841|4841|4841|82|83|FEAAAA|CHDAAA|AAAAxx
+5845|2213|1|1|5|5|45|845|1845|845|5845|90|91|VQAAAA|DHDAAA|HHHHxx
+4635|2214|1|3|5|15|35|635|635|4635|4635|70|71|HWAAAA|EHDAAA|OOOOxx
+4658|2215|0|2|8|18|58|658|658|4658|4658|116|117|EXAAAA|FHDAAA|VVVVxx
+2896|2216|0|0|6|16|96|896|896|2896|2896|192|193|KHAAAA|GHDAAA|AAAAxx
+5179|2217|1|3|9|19|79|179|1179|179|5179|158|159|FRAAAA|HHDAAA|HHHHxx
+8667|2218|1|3|7|7|67|667|667|3667|8667|134|135|JVAAAA|IHDAAA|OOOOxx
+7294|2219|0|2|4|14|94|294|1294|2294|7294|188|189|OUAAAA|JHDAAA|VVVVxx
+3706|2220|0|2|6|6|6|706|1706|3706|3706|12|13|OMAAAA|KHDAAA|AAAAxx
+8389|2221|1|1|9|9|89|389|389|3389|8389|178|179|RKAAAA|LHDAAA|HHHHxx
+2486|2222|0|2|6|6|86|486|486|2486|2486|172|173|QRAAAA|MHDAAA|OOOOxx
+8743|2223|1|3|3|3|43|743|743|3743|8743|86|87|HYAAAA|NHDAAA|VVVVxx
+2777|2224|1|1|7|17|77|777|777|2777|2777|154|155|VCAAAA|OHDAAA|AAAAxx
+2113|2225|1|1|3|13|13|113|113|2113|2113|26|27|HDAAAA|PHDAAA|HHHHxx
+2076|2226|0|0|6|16|76|76|76|2076|2076|152|153|WBAAAA|QHDAAA|OOOOxx
+2300|2227|0|0|0|0|0|300|300|2300|2300|0|1|MKAAAA|RHDAAA|VVVVxx
+6894|2228|0|2|4|14|94|894|894|1894|6894|188|189|EFAAAA|SHDAAA|AAAAxx
+6939|2229|1|3|9|19|39|939|939|1939|6939|78|79|XGAAAA|THDAAA|HHHHxx
+446|2230|0|2|6|6|46|446|446|446|446|92|93|ERAAAA|UHDAAA|OOOOxx
+6218|2231|0|2|8|18|18|218|218|1218|6218|36|37|EFAAAA|VHDAAA|VVVVxx
+1295|2232|1|3|5|15|95|295|1295|1295|1295|190|191|VXAAAA|WHDAAA|AAAAxx
+5135|2233|1|3|5|15|35|135|1135|135|5135|70|71|NPAAAA|XHDAAA|HHHHxx
+8122|2234|0|2|2|2|22|122|122|3122|8122|44|45|KAAAAA|YHDAAA|OOOOxx
+316|2235|0|0|6|16|16|316|316|316|316|32|33|EMAAAA|ZHDAAA|VVVVxx
+514|2236|0|2|4|14|14|514|514|514|514|28|29|UTAAAA|AIDAAA|AAAAxx
+7970|2237|0|2|0|10|70|970|1970|2970|7970|140|141|OUAAAA|BIDAAA|HHHHxx
+9350|2238|0|2|0|10|50|350|1350|4350|9350|100|101|QVAAAA|CIDAAA|OOOOxx
+3700|2239|0|0|0|0|0|700|1700|3700|3700|0|1|IMAAAA|DIDAAA|VVVVxx
+582|2240|0|2|2|2|82|582|582|582|582|164|165|KWAAAA|EIDAAA|AAAAxx
+9722|2241|0|2|2|2|22|722|1722|4722|9722|44|45|YJAAAA|FIDAAA|HHHHxx
+7398|2242|0|2|8|18|98|398|1398|2398|7398|196|197|OYAAAA|GIDAAA|OOOOxx
+2265|2243|1|1|5|5|65|265|265|2265|2265|130|131|DJAAAA|HIDAAA|VVVVxx
+3049|2244|1|1|9|9|49|49|1049|3049|3049|98|99|HNAAAA|IIDAAA|AAAAxx
+9121|2245|1|1|1|1|21|121|1121|4121|9121|42|43|VMAAAA|JIDAAA|HHHHxx
+4275|2246|1|3|5|15|75|275|275|4275|4275|150|151|LIAAAA|KIDAAA|OOOOxx
+6567|2247|1|3|7|7|67|567|567|1567|6567|134|135|PSAAAA|LIDAAA|VVVVxx
+6755|2248|1|3|5|15|55|755|755|1755|6755|110|111|VZAAAA|MIDAAA|AAAAxx
+4535|2249|1|3|5|15|35|535|535|4535|4535|70|71|LSAAAA|NIDAAA|HHHHxx
+7968|2250|0|0|8|8|68|968|1968|2968|7968|136|137|MUAAAA|OIDAAA|OOOOxx
+3412|2251|0|0|2|12|12|412|1412|3412|3412|24|25|GBAAAA|PIDAAA|VVVVxx
+6112|2252|0|0|2|12|12|112|112|1112|6112|24|25|CBAAAA|QIDAAA|AAAAxx
+6805|2253|1|1|5|5|5|805|805|1805|6805|10|11|TBAAAA|RIDAAA|HHHHxx
+2880|2254|0|0|0|0|80|880|880|2880|2880|160|161|UGAAAA|SIDAAA|OOOOxx
+7710|2255|0|2|0|10|10|710|1710|2710|7710|20|21|OKAAAA|TIDAAA|VVVVxx
+7949|2256|1|1|9|9|49|949|1949|2949|7949|98|99|TTAAAA|UIDAAA|AAAAxx
+7043|2257|1|3|3|3|43|43|1043|2043|7043|86|87|XKAAAA|VIDAAA|HHHHxx
+9012|2258|0|0|2|12|12|12|1012|4012|9012|24|25|QIAAAA|WIDAAA|OOOOxx
+878|2259|0|2|8|18|78|878|878|878|878|156|157|UHAAAA|XIDAAA|VVVVxx
+7930|2260|0|2|0|10|30|930|1930|2930|7930|60|61|ATAAAA|YIDAAA|AAAAxx
+667|2261|1|3|7|7|67|667|667|667|667|134|135|RZAAAA|ZIDAAA|HHHHxx
+1905|2262|1|1|5|5|5|905|1905|1905|1905|10|11|HVAAAA|AJDAAA|OOOOxx
+4958|2263|0|2|8|18|58|958|958|4958|4958|116|117|SIAAAA|BJDAAA|VVVVxx
+2973|2264|1|1|3|13|73|973|973|2973|2973|146|147|JKAAAA|CJDAAA|AAAAxx
+3631|2265|1|3|1|11|31|631|1631|3631|3631|62|63|RJAAAA|DJDAAA|HHHHxx
+5868|2266|0|0|8|8|68|868|1868|868|5868|136|137|SRAAAA|EJDAAA|OOOOxx
+2873|2267|1|1|3|13|73|873|873|2873|2873|146|147|NGAAAA|FJDAAA|VVVVxx
+6941|2268|1|1|1|1|41|941|941|1941|6941|82|83|ZGAAAA|GJDAAA|AAAAxx
+6384|2269|0|0|4|4|84|384|384|1384|6384|168|169|OLAAAA|HJDAAA|HHHHxx
+3806|2270|0|2|6|6|6|806|1806|3806|3806|12|13|KQAAAA|IJDAAA|OOOOxx
+5079|2271|1|3|9|19|79|79|1079|79|5079|158|159|JNAAAA|JJDAAA|VVVVxx
+1970|2272|0|2|0|10|70|970|1970|1970|1970|140|141|UXAAAA|KJDAAA|AAAAxx
+7810|2273|0|2|0|10|10|810|1810|2810|7810|20|21|KOAAAA|LJDAAA|HHHHxx
+4639|2274|1|3|9|19|39|639|639|4639|4639|78|79|LWAAAA|MJDAAA|OOOOxx
+6527|2275|1|3|7|7|27|527|527|1527|6527|54|55|BRAAAA|NJDAAA|VVVVxx
+8079|2276|1|3|9|19|79|79|79|3079|8079|158|159|TYAAAA|OJDAAA|AAAAxx
+2740|2277|0|0|0|0|40|740|740|2740|2740|80|81|KBAAAA|PJDAAA|HHHHxx
+2337|2278|1|1|7|17|37|337|337|2337|2337|74|75|XLAAAA|QJDAAA|OOOOxx
+6670|2279|0|2|0|10|70|670|670|1670|6670|140|141|OWAAAA|RJDAAA|VVVVxx
+2345|2280|1|1|5|5|45|345|345|2345|2345|90|91|FMAAAA|SJDAAA|AAAAxx
+401|2281|1|1|1|1|1|401|401|401|401|2|3|LPAAAA|TJDAAA|HHHHxx
+2704|2282|0|0|4|4|4|704|704|2704|2704|8|9|AAAAAA|UJDAAA|OOOOxx
+5530|2283|0|2|0|10|30|530|1530|530|5530|60|61|SEAAAA|VJDAAA|VVVVxx
+51|2284|1|3|1|11|51|51|51|51|51|102|103|ZBAAAA|WJDAAA|AAAAxx
+4282|2285|0|2|2|2|82|282|282|4282|4282|164|165|SIAAAA|XJDAAA|HHHHxx
+7336|2286|0|0|6|16|36|336|1336|2336|7336|72|73|EWAAAA|YJDAAA|OOOOxx
+8320|2287|0|0|0|0|20|320|320|3320|8320|40|41|AIAAAA|ZJDAAA|VVVVxx
+7772|2288|0|0|2|12|72|772|1772|2772|7772|144|145|YMAAAA|AKDAAA|AAAAxx
+1894|2289|0|2|4|14|94|894|1894|1894|1894|188|189|WUAAAA|BKDAAA|HHHHxx
+2320|2290|0|0|0|0|20|320|320|2320|2320|40|41|GLAAAA|CKDAAA|OOOOxx
+6232|2291|0|0|2|12|32|232|232|1232|6232|64|65|SFAAAA|DKDAAA|VVVVxx
+2833|2292|1|1|3|13|33|833|833|2833|2833|66|67|ZEAAAA|EKDAAA|AAAAxx
+8265|2293|1|1|5|5|65|265|265|3265|8265|130|131|XFAAAA|FKDAAA|HHHHxx
+4589|2294|1|1|9|9|89|589|589|4589|4589|178|179|NUAAAA|GKDAAA|OOOOxx
+8182|2295|0|2|2|2|82|182|182|3182|8182|164|165|SCAAAA|HKDAAA|VVVVxx
+8337|2296|1|1|7|17|37|337|337|3337|8337|74|75|RIAAAA|IKDAAA|AAAAxx
+8210|2297|0|2|0|10|10|210|210|3210|8210|20|21|UDAAAA|JKDAAA|HHHHxx
+1406|2298|0|2|6|6|6|406|1406|1406|1406|12|13|CCAAAA|KKDAAA|OOOOxx
+4463|2299|1|3|3|3|63|463|463|4463|4463|126|127|RPAAAA|LKDAAA|VVVVxx
+4347|2300|1|3|7|7|47|347|347|4347|4347|94|95|FLAAAA|MKDAAA|AAAAxx
+181|2301|1|1|1|1|81|181|181|181|181|162|163|ZGAAAA|NKDAAA|HHHHxx
+9986|2302|0|2|6|6|86|986|1986|4986|9986|172|173|CUAAAA|OKDAAA|OOOOxx
+661|2303|1|1|1|1|61|661|661|661|661|122|123|LZAAAA|PKDAAA|VVVVxx
+4105|2304|1|1|5|5|5|105|105|4105|4105|10|11|XBAAAA|QKDAAA|AAAAxx
+2187|2305|1|3|7|7|87|187|187|2187|2187|174|175|DGAAAA|RKDAAA|HHHHxx
+1628|2306|0|0|8|8|28|628|1628|1628|1628|56|57|QKAAAA|SKDAAA|OOOOxx
+3119|2307|1|3|9|19|19|119|1119|3119|3119|38|39|ZPAAAA|TKDAAA|VVVVxx
+6804|2308|0|0|4|4|4|804|804|1804|6804|8|9|SBAAAA|UKDAAA|AAAAxx
+9918|2309|0|2|8|18|18|918|1918|4918|9918|36|37|MRAAAA|VKDAAA|HHHHxx
+8916|2310|0|0|6|16|16|916|916|3916|8916|32|33|YEAAAA|WKDAAA|OOOOxx
+6057|2311|1|1|7|17|57|57|57|1057|6057|114|115|ZYAAAA|XKDAAA|VVVVxx
+3622|2312|0|2|2|2|22|622|1622|3622|3622|44|45|IJAAAA|YKDAAA|AAAAxx
+9168|2313|0|0|8|8|68|168|1168|4168|9168|136|137|QOAAAA|ZKDAAA|HHHHxx
+3720|2314|0|0|0|0|20|720|1720|3720|3720|40|41|CNAAAA|ALDAAA|OOOOxx
+9927|2315|1|3|7|7|27|927|1927|4927|9927|54|55|VRAAAA|BLDAAA|VVVVxx
+5616|2316|0|0|6|16|16|616|1616|616|5616|32|33|AIAAAA|CLDAAA|AAAAxx
+5210|2317|0|2|0|10|10|210|1210|210|5210|20|21|KSAAAA|DLDAAA|HHHHxx
+636|2318|0|0|6|16|36|636|636|636|636|72|73|MYAAAA|ELDAAA|OOOOxx
+9936|2319|0|0|6|16|36|936|1936|4936|9936|72|73|ESAAAA|FLDAAA|VVVVxx
+2316|2320|0|0|6|16|16|316|316|2316|2316|32|33|CLAAAA|GLDAAA|AAAAxx
+4363|2321|1|3|3|3|63|363|363|4363|4363|126|127|VLAAAA|HLDAAA|HHHHxx
+7657|2322|1|1|7|17|57|657|1657|2657|7657|114|115|NIAAAA|ILDAAA|OOOOxx
+697|2323|1|1|7|17|97|697|697|697|697|194|195|VAAAAA|JLDAAA|VVVVxx
+912|2324|0|0|2|12|12|912|912|912|912|24|25|CJAAAA|KLDAAA|AAAAxx
+8806|2325|0|2|6|6|6|806|806|3806|8806|12|13|SAAAAA|LLDAAA|HHHHxx
+9698|2326|0|2|8|18|98|698|1698|4698|9698|196|197|AJAAAA|MLDAAA|OOOOxx
+6191|2327|1|3|1|11|91|191|191|1191|6191|182|183|DEAAAA|NLDAAA|VVVVxx
+1188|2328|0|0|8|8|88|188|1188|1188|1188|176|177|STAAAA|OLDAAA|AAAAxx
+7676|2329|0|0|6|16|76|676|1676|2676|7676|152|153|GJAAAA|PLDAAA|HHHHxx
+7073|2330|1|1|3|13|73|73|1073|2073|7073|146|147|BMAAAA|QLDAAA|OOOOxx
+8019|2331|1|3|9|19|19|19|19|3019|8019|38|39|LWAAAA|RLDAAA|VVVVxx
+4726|2332|0|2|6|6|26|726|726|4726|4726|52|53|UZAAAA|SLDAAA|AAAAxx
+4648|2333|0|0|8|8|48|648|648|4648|4648|96|97|UWAAAA|TLDAAA|HHHHxx
+3227|2334|1|3|7|7|27|227|1227|3227|3227|54|55|DUAAAA|ULDAAA|OOOOxx
+7232|2335|0|0|2|12|32|232|1232|2232|7232|64|65|ESAAAA|VLDAAA|VVVVxx
+9761|2336|1|1|1|1|61|761|1761|4761|9761|122|123|LLAAAA|WLDAAA|AAAAxx
+3105|2337|1|1|5|5|5|105|1105|3105|3105|10|11|LPAAAA|XLDAAA|HHHHxx
+5266|2338|0|2|6|6|66|266|1266|266|5266|132|133|OUAAAA|YLDAAA|OOOOxx
+6788|2339|0|0|8|8|88|788|788|1788|6788|176|177|CBAAAA|ZLDAAA|VVVVxx
+2442|2340|0|2|2|2|42|442|442|2442|2442|84|85|YPAAAA|AMDAAA|AAAAxx
+8198|2341|0|2|8|18|98|198|198|3198|8198|196|197|IDAAAA|BMDAAA|HHHHxx
+5806|2342|0|2|6|6|6|806|1806|806|5806|12|13|IPAAAA|CMDAAA|OOOOxx
+8928|2343|0|0|8|8|28|928|928|3928|8928|56|57|KFAAAA|DMDAAA|VVVVxx
+1657|2344|1|1|7|17|57|657|1657|1657|1657|114|115|TLAAAA|EMDAAA|AAAAxx
+9164|2345|0|0|4|4|64|164|1164|4164|9164|128|129|MOAAAA|FMDAAA|HHHHxx
+1851|2346|1|3|1|11|51|851|1851|1851|1851|102|103|FTAAAA|GMDAAA|OOOOxx
+4744|2347|0|0|4|4|44|744|744|4744|4744|88|89|MAAAAA|HMDAAA|VVVVxx
+8055|2348|1|3|5|15|55|55|55|3055|8055|110|111|VXAAAA|IMDAAA|AAAAxx
+1533|2349|1|1|3|13|33|533|1533|1533|1533|66|67|ZGAAAA|JMDAAA|HHHHxx
+1260|2350|0|0|0|0|60|260|1260|1260|1260|120|121|MWAAAA|KMDAAA|OOOOxx
+1290|2351|0|2|0|10|90|290|1290|1290|1290|180|181|QXAAAA|LMDAAA|VVVVxx
+297|2352|1|1|7|17|97|297|297|297|297|194|195|LLAAAA|MMDAAA|AAAAxx
+4145|2353|1|1|5|5|45|145|145|4145|4145|90|91|LDAAAA|NMDAAA|HHHHxx
+863|2354|1|3|3|3|63|863|863|863|863|126|127|FHAAAA|OMDAAA|OOOOxx
+3423|2355|1|3|3|3|23|423|1423|3423|3423|46|47|RBAAAA|PMDAAA|VVVVxx
+8750|2356|0|2|0|10|50|750|750|3750|8750|100|101|OYAAAA|QMDAAA|AAAAxx
+3546|2357|0|2|6|6|46|546|1546|3546|3546|92|93|KGAAAA|RMDAAA|HHHHxx
+3678|2358|0|2|8|18|78|678|1678|3678|3678|156|157|MLAAAA|SMDAAA|OOOOxx
+5313|2359|1|1|3|13|13|313|1313|313|5313|26|27|JWAAAA|TMDAAA|VVVVxx
+6233|2360|1|1|3|13|33|233|233|1233|6233|66|67|TFAAAA|UMDAAA|AAAAxx
+5802|2361|0|2|2|2|2|802|1802|802|5802|4|5|EPAAAA|VMDAAA|HHHHxx
+7059|2362|1|3|9|19|59|59|1059|2059|7059|118|119|NLAAAA|WMDAAA|OOOOxx
+6481|2363|1|1|1|1|81|481|481|1481|6481|162|163|HPAAAA|XMDAAA|VVVVxx
+1596|2364|0|0|6|16|96|596|1596|1596|1596|192|193|KJAAAA|YMDAAA|AAAAxx
+8181|2365|1|1|1|1|81|181|181|3181|8181|162|163|RCAAAA|ZMDAAA|HHHHxx
+5368|2366|0|0|8|8|68|368|1368|368|5368|136|137|MYAAAA|ANDAAA|OOOOxx
+9416|2367|0|0|6|16|16|416|1416|4416|9416|32|33|EYAAAA|BNDAAA|VVVVxx
+9521|2368|1|1|1|1|21|521|1521|4521|9521|42|43|FCAAAA|CNDAAA|AAAAxx
+1042|2369|0|2|2|2|42|42|1042|1042|1042|84|85|COAAAA|DNDAAA|HHHHxx
+4503|2370|1|3|3|3|3|503|503|4503|4503|6|7|FRAAAA|ENDAAA|OOOOxx
+3023|2371|1|3|3|3|23|23|1023|3023|3023|46|47|HMAAAA|FNDAAA|VVVVxx
+1976|2372|0|0|6|16|76|976|1976|1976|1976|152|153|AYAAAA|GNDAAA|AAAAxx
+5610|2373|0|2|0|10|10|610|1610|610|5610|20|21|UHAAAA|HNDAAA|HHHHxx
+7410|2374|0|2|0|10|10|410|1410|2410|7410|20|21|AZAAAA|INDAAA|OOOOxx
+7872|2375|0|0|2|12|72|872|1872|2872|7872|144|145|UQAAAA|JNDAAA|VVVVxx
+8591|2376|1|3|1|11|91|591|591|3591|8591|182|183|LSAAAA|KNDAAA|AAAAxx
+1804|2377|0|0|4|4|4|804|1804|1804|1804|8|9|KRAAAA|LNDAAA|HHHHxx
+5299|2378|1|3|9|19|99|299|1299|299|5299|198|199|VVAAAA|MNDAAA|OOOOxx
+4695|2379|1|3|5|15|95|695|695|4695|4695|190|191|PYAAAA|NNDAAA|VVVVxx
+2672|2380|0|0|2|12|72|672|672|2672|2672|144|145|UYAAAA|ONDAAA|AAAAxx
+585|2381|1|1|5|5|85|585|585|585|585|170|171|NWAAAA|PNDAAA|HHHHxx
+8622|2382|0|2|2|2|22|622|622|3622|8622|44|45|QTAAAA|QNDAAA|OOOOxx
+3780|2383|0|0|0|0|80|780|1780|3780|3780|160|161|KPAAAA|RNDAAA|VVVVxx
+7941|2384|1|1|1|1|41|941|1941|2941|7941|82|83|LTAAAA|SNDAAA|AAAAxx
+3305|2385|1|1|5|5|5|305|1305|3305|3305|10|11|DXAAAA|TNDAAA|HHHHxx
+8653|2386|1|1|3|13|53|653|653|3653|8653|106|107|VUAAAA|UNDAAA|OOOOxx
+5756|2387|0|0|6|16|56|756|1756|756|5756|112|113|KNAAAA|VNDAAA|VVVVxx
+576|2388|0|0|6|16|76|576|576|576|576|152|153|EWAAAA|WNDAAA|AAAAxx
+1915|2389|1|3|5|15|15|915|1915|1915|1915|30|31|RVAAAA|XNDAAA|HHHHxx
+4627|2390|1|3|7|7|27|627|627|4627|4627|54|55|ZVAAAA|YNDAAA|OOOOxx
+920|2391|0|0|0|0|20|920|920|920|920|40|41|KJAAAA|ZNDAAA|VVVVxx
+2537|2392|1|1|7|17|37|537|537|2537|2537|74|75|PTAAAA|AODAAA|AAAAxx
+50|2393|0|2|0|10|50|50|50|50|50|100|101|YBAAAA|BODAAA|HHHHxx
+1313|2394|1|1|3|13|13|313|1313|1313|1313|26|27|NYAAAA|CODAAA|OOOOxx
+8542|2395|0|2|2|2|42|542|542|3542|8542|84|85|OQAAAA|DODAAA|VVVVxx
+6428|2396|0|0|8|8|28|428|428|1428|6428|56|57|GNAAAA|EODAAA|AAAAxx
+4351|2397|1|3|1|11|51|351|351|4351|4351|102|103|JLAAAA|FODAAA|HHHHxx
+2050|2398|0|2|0|10|50|50|50|2050|2050|100|101|WAAAAA|GODAAA|OOOOxx
+5162|2399|0|2|2|2|62|162|1162|162|5162|124|125|OQAAAA|HODAAA|VVVVxx
+8229|2400|1|1|9|9|29|229|229|3229|8229|58|59|NEAAAA|IODAAA|AAAAxx
+7782|2401|0|2|2|2|82|782|1782|2782|7782|164|165|INAAAA|JODAAA|HHHHxx
+1563|2402|1|3|3|3|63|563|1563|1563|1563|126|127|DIAAAA|KODAAA|OOOOxx
+267|2403|1|3|7|7|67|267|267|267|267|134|135|HKAAAA|LODAAA|VVVVxx
+5138|2404|0|2|8|18|38|138|1138|138|5138|76|77|QPAAAA|MODAAA|AAAAxx
+7022|2405|0|2|2|2|22|22|1022|2022|7022|44|45|CKAAAA|NODAAA|HHHHxx
+6705|2406|1|1|5|5|5|705|705|1705|6705|10|11|XXAAAA|OODAAA|OOOOxx
+6190|2407|0|2|0|10|90|190|190|1190|6190|180|181|CEAAAA|PODAAA|VVVVxx
+8226|2408|0|2|6|6|26|226|226|3226|8226|52|53|KEAAAA|QODAAA|AAAAxx
+8882|2409|0|2|2|2|82|882|882|3882|8882|164|165|QDAAAA|RODAAA|HHHHxx
+5181|2410|1|1|1|1|81|181|1181|181|5181|162|163|HRAAAA|SODAAA|OOOOxx
+4598|2411|0|2|8|18|98|598|598|4598|4598|196|197|WUAAAA|TODAAA|VVVVxx
+4882|2412|0|2|2|2|82|882|882|4882|4882|164|165|UFAAAA|UODAAA|AAAAxx
+7490|2413|0|2|0|10|90|490|1490|2490|7490|180|181|CCAAAA|VODAAA|HHHHxx
+5224|2414|0|0|4|4|24|224|1224|224|5224|48|49|YSAAAA|WODAAA|OOOOxx
+2174|2415|0|2|4|14|74|174|174|2174|2174|148|149|QFAAAA|XODAAA|VVVVxx
+3059|2416|1|3|9|19|59|59|1059|3059|3059|118|119|RNAAAA|YODAAA|AAAAxx
+8790|2417|0|2|0|10|90|790|790|3790|8790|180|181|CAAAAA|ZODAAA|HHHHxx
+2222|2418|0|2|2|2|22|222|222|2222|2222|44|45|MHAAAA|APDAAA|OOOOxx
+5473|2419|1|1|3|13|73|473|1473|473|5473|146|147|NCAAAA|BPDAAA|VVVVxx
+937|2420|1|1|7|17|37|937|937|937|937|74|75|BKAAAA|CPDAAA|AAAAxx
+2975|2421|1|3|5|15|75|975|975|2975|2975|150|151|LKAAAA|DPDAAA|HHHHxx
+9569|2422|1|1|9|9|69|569|1569|4569|9569|138|139|BEAAAA|EPDAAA|OOOOxx
+3456|2423|0|0|6|16|56|456|1456|3456|3456|112|113|YCAAAA|FPDAAA|VVVVxx
+6657|2424|1|1|7|17|57|657|657|1657|6657|114|115|BWAAAA|GPDAAA|AAAAxx
+3776|2425|0|0|6|16|76|776|1776|3776|3776|152|153|GPAAAA|HPDAAA|HHHHxx
+6072|2426|0|0|2|12|72|72|72|1072|6072|144|145|OZAAAA|IPDAAA|OOOOxx
+8129|2427|1|1|9|9|29|129|129|3129|8129|58|59|RAAAAA|JPDAAA|VVVVxx
+1085|2428|1|1|5|5|85|85|1085|1085|1085|170|171|TPAAAA|KPDAAA|AAAAxx
+2079|2429|1|3|9|19|79|79|79|2079|2079|158|159|ZBAAAA|LPDAAA|HHHHxx
+1200|2430|0|0|0|0|0|200|1200|1200|1200|0|1|EUAAAA|MPDAAA|OOOOxx
+3276|2431|0|0|6|16|76|276|1276|3276|3276|152|153|AWAAAA|NPDAAA|VVVVxx
+2608|2432|0|0|8|8|8|608|608|2608|2608|16|17|IWAAAA|OPDAAA|AAAAxx
+702|2433|0|2|2|2|2|702|702|702|702|4|5|ABAAAA|PPDAAA|HHHHxx
+5750|2434|0|2|0|10|50|750|1750|750|5750|100|101|ENAAAA|QPDAAA|OOOOxx
+2776|2435|0|0|6|16|76|776|776|2776|2776|152|153|UCAAAA|RPDAAA|VVVVxx
+9151|2436|1|3|1|11|51|151|1151|4151|9151|102|103|ZNAAAA|SPDAAA|AAAAxx
+3282|2437|0|2|2|2|82|282|1282|3282|3282|164|165|GWAAAA|TPDAAA|HHHHxx
+408|2438|0|0|8|8|8|408|408|408|408|16|17|SPAAAA|UPDAAA|OOOOxx
+3473|2439|1|1|3|13|73|473|1473|3473|3473|146|147|PDAAAA|VPDAAA|VVVVxx
+7095|2440|1|3|5|15|95|95|1095|2095|7095|190|191|XMAAAA|WPDAAA|AAAAxx
+3288|2441|0|0|8|8|88|288|1288|3288|3288|176|177|MWAAAA|XPDAAA|HHHHxx
+8215|2442|1|3|5|15|15|215|215|3215|8215|30|31|ZDAAAA|YPDAAA|OOOOxx
+6244|2443|0|0|4|4|44|244|244|1244|6244|88|89|EGAAAA|ZPDAAA|VVVVxx
+8440|2444|0|0|0|0|40|440|440|3440|8440|80|81|QMAAAA|AQDAAA|AAAAxx
+3800|2445|0|0|0|0|0|800|1800|3800|3800|0|1|EQAAAA|BQDAAA|HHHHxx
+7279|2446|1|3|9|19|79|279|1279|2279|7279|158|159|ZTAAAA|CQDAAA|OOOOxx
+9206|2447|0|2|6|6|6|206|1206|4206|9206|12|13|CQAAAA|DQDAAA|VVVVxx
+6465|2448|1|1|5|5|65|465|465|1465|6465|130|131|ROAAAA|EQDAAA|AAAAxx
+4127|2449|1|3|7|7|27|127|127|4127|4127|54|55|TCAAAA|FQDAAA|HHHHxx
+7463|2450|1|3|3|3|63|463|1463|2463|7463|126|127|BBAAAA|GQDAAA|OOOOxx
+5117|2451|1|1|7|17|17|117|1117|117|5117|34|35|VOAAAA|HQDAAA|VVVVxx
+4715|2452|1|3|5|15|15|715|715|4715|4715|30|31|JZAAAA|IQDAAA|AAAAxx
+2010|2453|0|2|0|10|10|10|10|2010|2010|20|21|IZAAAA|JQDAAA|HHHHxx
+6486|2454|0|2|6|6|86|486|486|1486|6486|172|173|MPAAAA|KQDAAA|OOOOxx
+6434|2455|0|2|4|14|34|434|434|1434|6434|68|69|MNAAAA|LQDAAA|VVVVxx
+2151|2456|1|3|1|11|51|151|151|2151|2151|102|103|TEAAAA|MQDAAA|AAAAxx
+4821|2457|1|1|1|1|21|821|821|4821|4821|42|43|LDAAAA|NQDAAA|HHHHxx
+6507|2458|1|3|7|7|7|507|507|1507|6507|14|15|HQAAAA|OQDAAA|OOOOxx
+8741|2459|1|1|1|1|41|741|741|3741|8741|82|83|FYAAAA|PQDAAA|VVVVxx
+6846|2460|0|2|6|6|46|846|846|1846|6846|92|93|IDAAAA|QQDAAA|AAAAxx
+4525|2461|1|1|5|5|25|525|525|4525|4525|50|51|BSAAAA|RQDAAA|HHHHxx
+8299|2462|1|3|9|19|99|299|299|3299|8299|198|199|FHAAAA|SQDAAA|OOOOxx
+5465|2463|1|1|5|5|65|465|1465|465|5465|130|131|FCAAAA|TQDAAA|VVVVxx
+7206|2464|0|2|6|6|6|206|1206|2206|7206|12|13|ERAAAA|UQDAAA|AAAAxx
+2616|2465|0|0|6|16|16|616|616|2616|2616|32|33|QWAAAA|VQDAAA|HHHHxx
+4440|2466|0|0|0|0|40|440|440|4440|4440|80|81|UOAAAA|WQDAAA|OOOOxx
+6109|2467|1|1|9|9|9|109|109|1109|6109|18|19|ZAAAAA|XQDAAA|VVVVxx
+7905|2468|1|1|5|5|5|905|1905|2905|7905|10|11|BSAAAA|YQDAAA|AAAAxx
+6498|2469|0|2|8|18|98|498|498|1498|6498|196|197|YPAAAA|ZQDAAA|HHHHxx
+2034|2470|0|2|4|14|34|34|34|2034|2034|68|69|GAAAAA|ARDAAA|OOOOxx
+7693|2471|1|1|3|13|93|693|1693|2693|7693|186|187|XJAAAA|BRDAAA|VVVVxx
+7511|2472|1|3|1|11|11|511|1511|2511|7511|22|23|XCAAAA|CRDAAA|AAAAxx
+7531|2473|1|3|1|11|31|531|1531|2531|7531|62|63|RDAAAA|DRDAAA|HHHHxx
+6869|2474|1|1|9|9|69|869|869|1869|6869|138|139|FEAAAA|ERDAAA|OOOOxx
+2763|2475|1|3|3|3|63|763|763|2763|2763|126|127|HCAAAA|FRDAAA|VVVVxx
+575|2476|1|3|5|15|75|575|575|575|575|150|151|DWAAAA|GRDAAA|AAAAxx
+8953|2477|1|1|3|13|53|953|953|3953|8953|106|107|JGAAAA|HRDAAA|HHHHxx
+5833|2478|1|1|3|13|33|833|1833|833|5833|66|67|JQAAAA|IRDAAA|OOOOxx
+9035|2479|1|3|5|15|35|35|1035|4035|9035|70|71|NJAAAA|JRDAAA|VVVVxx
+9123|2480|1|3|3|3|23|123|1123|4123|9123|46|47|XMAAAA|KRDAAA|AAAAxx
+206|2481|0|2|6|6|6|206|206|206|206|12|13|YHAAAA|LRDAAA|HHHHxx
+4155|2482|1|3|5|15|55|155|155|4155|4155|110|111|VDAAAA|MRDAAA|OOOOxx
+532|2483|0|0|2|12|32|532|532|532|532|64|65|MUAAAA|NRDAAA|VVVVxx
+1370|2484|0|2|0|10|70|370|1370|1370|1370|140|141|SAAAAA|ORDAAA|AAAAxx
+7656|2485|0|0|6|16|56|656|1656|2656|7656|112|113|MIAAAA|PRDAAA|HHHHxx
+7735|2486|1|3|5|15|35|735|1735|2735|7735|70|71|NLAAAA|QRDAAA|OOOOxx
+2118|2487|0|2|8|18|18|118|118|2118|2118|36|37|MDAAAA|RRDAAA|VVVVxx
+6914|2488|0|2|4|14|14|914|914|1914|6914|28|29|YFAAAA|SRDAAA|AAAAxx
+6277|2489|1|1|7|17|77|277|277|1277|6277|154|155|LHAAAA|TRDAAA|HHHHxx
+6347|2490|1|3|7|7|47|347|347|1347|6347|94|95|DKAAAA|URDAAA|OOOOxx
+4030|2491|0|2|0|10|30|30|30|4030|4030|60|61|AZAAAA|VRDAAA|VVVVxx
+9673|2492|1|1|3|13|73|673|1673|4673|9673|146|147|BIAAAA|WRDAAA|AAAAxx
+2015|2493|1|3|5|15|15|15|15|2015|2015|30|31|NZAAAA|XRDAAA|HHHHxx
+1317|2494|1|1|7|17|17|317|1317|1317|1317|34|35|RYAAAA|YRDAAA|OOOOxx
+404|2495|0|0|4|4|4|404|404|404|404|8|9|OPAAAA|ZRDAAA|VVVVxx
+1604|2496|0|0|4|4|4|604|1604|1604|1604|8|9|SJAAAA|ASDAAA|AAAAxx
+1912|2497|0|0|2|12|12|912|1912|1912|1912|24|25|OVAAAA|BSDAAA|HHHHxx
+5727|2498|1|3|7|7|27|727|1727|727|5727|54|55|HMAAAA|CSDAAA|OOOOxx
+4538|2499|0|2|8|18|38|538|538|4538|4538|76|77|OSAAAA|DSDAAA|VVVVxx
+6868|2500|0|0|8|8|68|868|868|1868|6868|136|137|EEAAAA|ESDAAA|AAAAxx
+9801|2501|1|1|1|1|1|801|1801|4801|9801|2|3|ZMAAAA|FSDAAA|HHHHxx
+1781|2502|1|1|1|1|81|781|1781|1781|1781|162|163|NQAAAA|GSDAAA|OOOOxx
+7061|2503|1|1|1|1|61|61|1061|2061|7061|122|123|PLAAAA|HSDAAA|VVVVxx
+2412|2504|0|0|2|12|12|412|412|2412|2412|24|25|UOAAAA|ISDAAA|AAAAxx
+9191|2505|1|3|1|11|91|191|1191|4191|9191|182|183|NPAAAA|JSDAAA|HHHHxx
+1958|2506|0|2|8|18|58|958|1958|1958|1958|116|117|IXAAAA|KSDAAA|OOOOxx
+2203|2507|1|3|3|3|3|203|203|2203|2203|6|7|TGAAAA|LSDAAA|VVVVxx
+9104|2508|0|0|4|4|4|104|1104|4104|9104|8|9|EMAAAA|MSDAAA|AAAAxx
+3837|2509|1|1|7|17|37|837|1837|3837|3837|74|75|PRAAAA|NSDAAA|HHHHxx
+7055|2510|1|3|5|15|55|55|1055|2055|7055|110|111|JLAAAA|OSDAAA|OOOOxx
+4612|2511|0|0|2|12|12|612|612|4612|4612|24|25|KVAAAA|PSDAAA|VVVVxx
+6420|2512|0|0|0|0|20|420|420|1420|6420|40|41|YMAAAA|QSDAAA|AAAAxx
+613|2513|1|1|3|13|13|613|613|613|613|26|27|PXAAAA|RSDAAA|HHHHxx
+1691|2514|1|3|1|11|91|691|1691|1691|1691|182|183|BNAAAA|SSDAAA|OOOOxx
+33|2515|1|1|3|13|33|33|33|33|33|66|67|HBAAAA|TSDAAA|VVVVxx
+875|2516|1|3|5|15|75|875|875|875|875|150|151|RHAAAA|USDAAA|AAAAxx
+9030|2517|0|2|0|10|30|30|1030|4030|9030|60|61|IJAAAA|VSDAAA|HHHHxx
+4285|2518|1|1|5|5|85|285|285|4285|4285|170|171|VIAAAA|WSDAAA|OOOOxx
+6236|2519|0|0|6|16|36|236|236|1236|6236|72|73|WFAAAA|XSDAAA|VVVVxx
+4702|2520|0|2|2|2|2|702|702|4702|4702|4|5|WYAAAA|YSDAAA|AAAAxx
+3441|2521|1|1|1|1|41|441|1441|3441|3441|82|83|JCAAAA|ZSDAAA|HHHHxx
+2150|2522|0|2|0|10|50|150|150|2150|2150|100|101|SEAAAA|ATDAAA|OOOOxx
+1852|2523|0|0|2|12|52|852|1852|1852|1852|104|105|GTAAAA|BTDAAA|VVVVxx
+7713|2524|1|1|3|13|13|713|1713|2713|7713|26|27|RKAAAA|CTDAAA|AAAAxx
+6849|2525|1|1|9|9|49|849|849|1849|6849|98|99|LDAAAA|DTDAAA|HHHHxx
+3425|2526|1|1|5|5|25|425|1425|3425|3425|50|51|TBAAAA|ETDAAA|OOOOxx
+4681|2527|1|1|1|1|81|681|681|4681|4681|162|163|BYAAAA|FTDAAA|VVVVxx
+1134|2528|0|2|4|14|34|134|1134|1134|1134|68|69|QRAAAA|GTDAAA|AAAAxx
+7462|2529|0|2|2|2|62|462|1462|2462|7462|124|125|ABAAAA|HTDAAA|HHHHxx
+2148|2530|0|0|8|8|48|148|148|2148|2148|96|97|QEAAAA|ITDAAA|OOOOxx
+5921|2531|1|1|1|1|21|921|1921|921|5921|42|43|TTAAAA|JTDAAA|VVVVxx
+118|2532|0|2|8|18|18|118|118|118|118|36|37|OEAAAA|KTDAAA|AAAAxx
+3065|2533|1|1|5|5|65|65|1065|3065|3065|130|131|XNAAAA|LTDAAA|HHHHxx
+6590|2534|0|2|0|10|90|590|590|1590|6590|180|181|MTAAAA|MTDAAA|OOOOxx
+4993|2535|1|1|3|13|93|993|993|4993|4993|186|187|BKAAAA|NTDAAA|VVVVxx
+6818|2536|0|2|8|18|18|818|818|1818|6818|36|37|GCAAAA|OTDAAA|AAAAxx
+1449|2537|1|1|9|9|49|449|1449|1449|1449|98|99|TDAAAA|PTDAAA|HHHHxx
+2039|2538|1|3|9|19|39|39|39|2039|2039|78|79|LAAAAA|QTDAAA|OOOOxx
+2524|2539|0|0|4|4|24|524|524|2524|2524|48|49|CTAAAA|RTDAAA|VVVVxx
+1481|2540|1|1|1|1|81|481|1481|1481|1481|162|163|ZEAAAA|STDAAA|AAAAxx
+6984|2541|0|0|4|4|84|984|984|1984|6984|168|169|QIAAAA|TTDAAA|HHHHxx
+3960|2542|0|0|0|0|60|960|1960|3960|3960|120|121|IWAAAA|UTDAAA|OOOOxx
+1983|2543|1|3|3|3|83|983|1983|1983|1983|166|167|HYAAAA|VTDAAA|VVVVxx
+6379|2544|1|3|9|19|79|379|379|1379|6379|158|159|JLAAAA|WTDAAA|AAAAxx
+8975|2545|1|3|5|15|75|975|975|3975|8975|150|151|FHAAAA|XTDAAA|HHHHxx
+1102|2546|0|2|2|2|2|102|1102|1102|1102|4|5|KQAAAA|YTDAAA|OOOOxx
+2517|2547|1|1|7|17|17|517|517|2517|2517|34|35|VSAAAA|ZTDAAA|VVVVxx
+712|2548|0|0|2|12|12|712|712|712|712|24|25|KBAAAA|AUDAAA|AAAAxx
+5419|2549|1|3|9|19|19|419|1419|419|5419|38|39|LAAAAA|BUDAAA|HHHHxx
+723|2550|1|3|3|3|23|723|723|723|723|46|47|VBAAAA|CUDAAA|OOOOxx
+8057|2551|1|1|7|17|57|57|57|3057|8057|114|115|XXAAAA|DUDAAA|VVVVxx
+7471|2552|1|3|1|11|71|471|1471|2471|7471|142|143|JBAAAA|EUDAAA|AAAAxx
+8855|2553|1|3|5|15|55|855|855|3855|8855|110|111|PCAAAA|FUDAAA|HHHHxx
+5074|2554|0|2|4|14|74|74|1074|74|5074|148|149|ENAAAA|GUDAAA|OOOOxx
+7139|2555|1|3|9|19|39|139|1139|2139|7139|78|79|POAAAA|HUDAAA|VVVVxx
+3833|2556|1|1|3|13|33|833|1833|3833|3833|66|67|LRAAAA|IUDAAA|AAAAxx
+5186|2557|0|2|6|6|86|186|1186|186|5186|172|173|MRAAAA|JUDAAA|HHHHxx
+9436|2558|0|0|6|16|36|436|1436|4436|9436|72|73|YYAAAA|KUDAAA|OOOOxx
+8859|2559|1|3|9|19|59|859|859|3859|8859|118|119|TCAAAA|LUDAAA|VVVVxx
+6943|2560|1|3|3|3|43|943|943|1943|6943|86|87|BHAAAA|MUDAAA|AAAAxx
+2315|2561|1|3|5|15|15|315|315|2315|2315|30|31|BLAAAA|NUDAAA|HHHHxx
+1394|2562|0|2|4|14|94|394|1394|1394|1394|188|189|QBAAAA|OUDAAA|OOOOxx
+8863|2563|1|3|3|3|63|863|863|3863|8863|126|127|XCAAAA|PUDAAA|VVVVxx
+8812|2564|0|0|2|12|12|812|812|3812|8812|24|25|YAAAAA|QUDAAA|AAAAxx
+7498|2565|0|2|8|18|98|498|1498|2498|7498|196|197|KCAAAA|RUDAAA|HHHHxx
+8962|2566|0|2|2|2|62|962|962|3962|8962|124|125|SGAAAA|SUDAAA|OOOOxx
+2533|2567|1|1|3|13|33|533|533|2533|2533|66|67|LTAAAA|TUDAAA|VVVVxx
+8188|2568|0|0|8|8|88|188|188|3188|8188|176|177|YCAAAA|UUDAAA|AAAAxx
+6137|2569|1|1|7|17|37|137|137|1137|6137|74|75|BCAAAA|VUDAAA|HHHHxx
+974|2570|0|2|4|14|74|974|974|974|974|148|149|MLAAAA|WUDAAA|OOOOxx
+2751|2571|1|3|1|11|51|751|751|2751|2751|102|103|VBAAAA|XUDAAA|VVVVxx
+4975|2572|1|3|5|15|75|975|975|4975|4975|150|151|JJAAAA|YUDAAA|AAAAxx
+3411|2573|1|3|1|11|11|411|1411|3411|3411|22|23|FBAAAA|ZUDAAA|HHHHxx
+3143|2574|1|3|3|3|43|143|1143|3143|3143|86|87|XQAAAA|AVDAAA|OOOOxx
+8011|2575|1|3|1|11|11|11|11|3011|8011|22|23|DWAAAA|BVDAAA|VVVVxx
+988|2576|0|0|8|8|88|988|988|988|988|176|177|AMAAAA|CVDAAA|AAAAxx
+4289|2577|1|1|9|9|89|289|289|4289|4289|178|179|ZIAAAA|DVDAAA|HHHHxx
+8105|2578|1|1|5|5|5|105|105|3105|8105|10|11|TZAAAA|EVDAAA|OOOOxx
+9885|2579|1|1|5|5|85|885|1885|4885|9885|170|171|FQAAAA|FVDAAA|VVVVxx
+1002|2580|0|2|2|2|2|2|1002|1002|1002|4|5|OMAAAA|GVDAAA|AAAAxx
+5827|2581|1|3|7|7|27|827|1827|827|5827|54|55|DQAAAA|HVDAAA|HHHHxx
+1228|2582|0|0|8|8|28|228|1228|1228|1228|56|57|GVAAAA|IVDAAA|OOOOxx
+6352|2583|0|0|2|12|52|352|352|1352|6352|104|105|IKAAAA|JVDAAA|VVVVxx
+8868|2584|0|0|8|8|68|868|868|3868|8868|136|137|CDAAAA|KVDAAA|AAAAxx
+3643|2585|1|3|3|3|43|643|1643|3643|3643|86|87|DKAAAA|LVDAAA|HHHHxx
+1468|2586|0|0|8|8|68|468|1468|1468|1468|136|137|MEAAAA|MVDAAA|OOOOxx
+8415|2587|1|3|5|15|15|415|415|3415|8415|30|31|RLAAAA|NVDAAA|VVVVxx
+9631|2588|1|3|1|11|31|631|1631|4631|9631|62|63|LGAAAA|OVDAAA|AAAAxx
+7408|2589|0|0|8|8|8|408|1408|2408|7408|16|17|YYAAAA|PVDAAA|HHHHxx
+1934|2590|0|2|4|14|34|934|1934|1934|1934|68|69|KWAAAA|QVDAAA|OOOOxx
+996|2591|0|0|6|16|96|996|996|996|996|192|193|IMAAAA|RVDAAA|VVVVxx
+8027|2592|1|3|7|7|27|27|27|3027|8027|54|55|TWAAAA|SVDAAA|AAAAxx
+8464|2593|0|0|4|4|64|464|464|3464|8464|128|129|ONAAAA|TVDAAA|HHHHxx
+5007|2594|1|3|7|7|7|7|1007|7|5007|14|15|PKAAAA|UVDAAA|OOOOxx
+8356|2595|0|0|6|16|56|356|356|3356|8356|112|113|KJAAAA|VVDAAA|VVVVxx
+4579|2596|1|3|9|19|79|579|579|4579|4579|158|159|DUAAAA|WVDAAA|AAAAxx
+8513|2597|1|1|3|13|13|513|513|3513|8513|26|27|LPAAAA|XVDAAA|HHHHxx
+383|2598|1|3|3|3|83|383|383|383|383|166|167|TOAAAA|YVDAAA|OOOOxx
+9304|2599|0|0|4|4|4|304|1304|4304|9304|8|9|WTAAAA|ZVDAAA|VVVVxx
+7224|2600|0|0|4|4|24|224|1224|2224|7224|48|49|WRAAAA|AWDAAA|AAAAxx
+6023|2601|1|3|3|3|23|23|23|1023|6023|46|47|RXAAAA|BWDAAA|HHHHxx
+2746|2602|0|2|6|6|46|746|746|2746|2746|92|93|QBAAAA|CWDAAA|OOOOxx
+137|2603|1|1|7|17|37|137|137|137|137|74|75|HFAAAA|DWDAAA|VVVVxx
+9441|2604|1|1|1|1|41|441|1441|4441|9441|82|83|DZAAAA|EWDAAA|AAAAxx
+3690|2605|0|2|0|10|90|690|1690|3690|3690|180|181|YLAAAA|FWDAAA|HHHHxx
+913|2606|1|1|3|13|13|913|913|913|913|26|27|DJAAAA|GWDAAA|OOOOxx
+1768|2607|0|0|8|8|68|768|1768|1768|1768|136|137|AQAAAA|HWDAAA|VVVVxx
+8492|2608|0|0|2|12|92|492|492|3492|8492|184|185|QOAAAA|IWDAAA|AAAAxx
+8083|2609|1|3|3|3|83|83|83|3083|8083|166|167|XYAAAA|JWDAAA|HHHHxx
+4609|2610|1|1|9|9|9|609|609|4609|4609|18|19|HVAAAA|KWDAAA|OOOOxx
+7520|2611|0|0|0|0|20|520|1520|2520|7520|40|41|GDAAAA|LWDAAA|VVVVxx
+4231|2612|1|3|1|11|31|231|231|4231|4231|62|63|TGAAAA|MWDAAA|AAAAxx
+6022|2613|0|2|2|2|22|22|22|1022|6022|44|45|QXAAAA|NWDAAA|HHHHxx
+9784|2614|0|0|4|4|84|784|1784|4784|9784|168|169|IMAAAA|OWDAAA|OOOOxx
+1343|2615|1|3|3|3|43|343|1343|1343|1343|86|87|RZAAAA|PWDAAA|VVVVxx
+7549|2616|1|1|9|9|49|549|1549|2549|7549|98|99|JEAAAA|QWDAAA|AAAAxx
+269|2617|1|1|9|9|69|269|269|269|269|138|139|JKAAAA|RWDAAA|HHHHxx
+1069|2618|1|1|9|9|69|69|1069|1069|1069|138|139|DPAAAA|SWDAAA|OOOOxx
+4610|2619|0|2|0|10|10|610|610|4610|4610|20|21|IVAAAA|TWDAAA|VVVVxx
+482|2620|0|2|2|2|82|482|482|482|482|164|165|OSAAAA|UWDAAA|AAAAxx
+3025|2621|1|1|5|5|25|25|1025|3025|3025|50|51|JMAAAA|VWDAAA|HHHHxx
+7914|2622|0|2|4|14|14|914|1914|2914|7914|28|29|KSAAAA|WWDAAA|OOOOxx
+3198|2623|0|2|8|18|98|198|1198|3198|3198|196|197|ATAAAA|XWDAAA|VVVVxx
+1187|2624|1|3|7|7|87|187|1187|1187|1187|174|175|RTAAAA|YWDAAA|AAAAxx
+4707|2625|1|3|7|7|7|707|707|4707|4707|14|15|BZAAAA|ZWDAAA|HHHHxx
+8279|2626|1|3|9|19|79|279|279|3279|8279|158|159|LGAAAA|AXDAAA|OOOOxx
+6127|2627|1|3|7|7|27|127|127|1127|6127|54|55|RBAAAA|BXDAAA|VVVVxx
+1305|2628|1|1|5|5|5|305|1305|1305|1305|10|11|FYAAAA|CXDAAA|AAAAxx
+4804|2629|0|0|4|4|4|804|804|4804|4804|8|9|UCAAAA|DXDAAA|HHHHxx
+6069|2630|1|1|9|9|69|69|69|1069|6069|138|139|LZAAAA|EXDAAA|OOOOxx
+9229|2631|1|1|9|9|29|229|1229|4229|9229|58|59|ZQAAAA|FXDAAA|VVVVxx
+4703|2632|1|3|3|3|3|703|703|4703|4703|6|7|XYAAAA|GXDAAA|AAAAxx
+6410|2633|0|2|0|10|10|410|410|1410|6410|20|21|OMAAAA|HXDAAA|HHHHxx
+944|2634|0|0|4|4|44|944|944|944|944|88|89|IKAAAA|IXDAAA|OOOOxx
+3744|2635|0|0|4|4|44|744|1744|3744|3744|88|89|AOAAAA|JXDAAA|VVVVxx
+1127|2636|1|3|7|7|27|127|1127|1127|1127|54|55|JRAAAA|KXDAAA|AAAAxx
+6693|2637|1|1|3|13|93|693|693|1693|6693|186|187|LXAAAA|LXDAAA|HHHHxx
+583|2638|1|3|3|3|83|583|583|583|583|166|167|LWAAAA|MXDAAA|OOOOxx
+2684|2639|0|0|4|4|84|684|684|2684|2684|168|169|GZAAAA|NXDAAA|VVVVxx
+6192|2640|0|0|2|12|92|192|192|1192|6192|184|185|EEAAAA|OXDAAA|AAAAxx
+4157|2641|1|1|7|17|57|157|157|4157|4157|114|115|XDAAAA|PXDAAA|HHHHxx
+6470|2642|0|2|0|10|70|470|470|1470|6470|140|141|WOAAAA|QXDAAA|OOOOxx
+8965|2643|1|1|5|5|65|965|965|3965|8965|130|131|VGAAAA|RXDAAA|VVVVxx
+1433|2644|1|1|3|13|33|433|1433|1433|1433|66|67|DDAAAA|SXDAAA|AAAAxx
+4570|2645|0|2|0|10|70|570|570|4570|4570|140|141|UTAAAA|TXDAAA|HHHHxx
+1806|2646|0|2|6|6|6|806|1806|1806|1806|12|13|MRAAAA|UXDAAA|OOOOxx
+1230|2647|0|2|0|10|30|230|1230|1230|1230|60|61|IVAAAA|VXDAAA|VVVVxx
+2283|2648|1|3|3|3|83|283|283|2283|2283|166|167|VJAAAA|WXDAAA|AAAAxx
+6456|2649|0|0|6|16|56|456|456|1456|6456|112|113|IOAAAA|XXDAAA|HHHHxx
+7427|2650|1|3|7|7|27|427|1427|2427|7427|54|55|RZAAAA|YXDAAA|OOOOxx
+8310|2651|0|2|0|10|10|310|310|3310|8310|20|21|QHAAAA|ZXDAAA|VVVVxx
+8103|2652|1|3|3|3|3|103|103|3103|8103|6|7|RZAAAA|AYDAAA|AAAAxx
+3947|2653|1|3|7|7|47|947|1947|3947|3947|94|95|VVAAAA|BYDAAA|HHHHxx
+3414|2654|0|2|4|14|14|414|1414|3414|3414|28|29|IBAAAA|CYDAAA|OOOOxx
+2043|2655|1|3|3|3|43|43|43|2043|2043|86|87|PAAAAA|DYDAAA|VVVVxx
+4393|2656|1|1|3|13|93|393|393|4393|4393|186|187|ZMAAAA|EYDAAA|AAAAxx
+6664|2657|0|0|4|4|64|664|664|1664|6664|128|129|IWAAAA|FYDAAA|HHHHxx
+4545|2658|1|1|5|5|45|545|545|4545|4545|90|91|VSAAAA|GYDAAA|OOOOxx
+7637|2659|1|1|7|17|37|637|1637|2637|7637|74|75|THAAAA|HYDAAA|VVVVxx
+1359|2660|1|3|9|19|59|359|1359|1359|1359|118|119|HAAAAA|IYDAAA|AAAAxx
+5018|2661|0|2|8|18|18|18|1018|18|5018|36|37|ALAAAA|JYDAAA|HHHHxx
+987|2662|1|3|7|7|87|987|987|987|987|174|175|ZLAAAA|KYDAAA|OOOOxx
+1320|2663|0|0|0|0|20|320|1320|1320|1320|40|41|UYAAAA|LYDAAA|VVVVxx
+9311|2664|1|3|1|11|11|311|1311|4311|9311|22|23|DUAAAA|MYDAAA|AAAAxx
+7993|2665|1|1|3|13|93|993|1993|2993|7993|186|187|LVAAAA|NYDAAA|HHHHxx
+7588|2666|0|0|8|8|88|588|1588|2588|7588|176|177|WFAAAA|OYDAAA|OOOOxx
+5983|2667|1|3|3|3|83|983|1983|983|5983|166|167|DWAAAA|PYDAAA|VVVVxx
+4070|2668|0|2|0|10|70|70|70|4070|4070|140|141|OAAAAA|QYDAAA|AAAAxx
+8349|2669|1|1|9|9|49|349|349|3349|8349|98|99|DJAAAA|RYDAAA|HHHHxx
+3810|2670|0|2|0|10|10|810|1810|3810|3810|20|21|OQAAAA|SYDAAA|OOOOxx
+6948|2671|0|0|8|8|48|948|948|1948|6948|96|97|GHAAAA|TYDAAA|VVVVxx
+7153|2672|1|1|3|13|53|153|1153|2153|7153|106|107|DPAAAA|UYDAAA|AAAAxx
+5371|2673|1|3|1|11|71|371|1371|371|5371|142|143|PYAAAA|VYDAAA|HHHHxx
+8316|2674|0|0|6|16|16|316|316|3316|8316|32|33|WHAAAA|WYDAAA|OOOOxx
+5903|2675|1|3|3|3|3|903|1903|903|5903|6|7|BTAAAA|XYDAAA|VVVVxx
+6718|2676|0|2|8|18|18|718|718|1718|6718|36|37|KYAAAA|YYDAAA|AAAAxx
+4759|2677|1|3|9|19|59|759|759|4759|4759|118|119|BBAAAA|ZYDAAA|HHHHxx
+2555|2678|1|3|5|15|55|555|555|2555|2555|110|111|HUAAAA|AZDAAA|OOOOxx
+3457|2679|1|1|7|17|57|457|1457|3457|3457|114|115|ZCAAAA|BZDAAA|VVVVxx
+9626|2680|0|2|6|6|26|626|1626|4626|9626|52|53|GGAAAA|CZDAAA|AAAAxx
+2570|2681|0|2|0|10|70|570|570|2570|2570|140|141|WUAAAA|DZDAAA|HHHHxx
+7964|2682|0|0|4|4|64|964|1964|2964|7964|128|129|IUAAAA|EZDAAA|OOOOxx
+1543|2683|1|3|3|3|43|543|1543|1543|1543|86|87|JHAAAA|FZDAAA|VVVVxx
+929|2684|1|1|9|9|29|929|929|929|929|58|59|TJAAAA|GZDAAA|AAAAxx
+9244|2685|0|0|4|4|44|244|1244|4244|9244|88|89|ORAAAA|HZDAAA|HHHHxx
+9210|2686|0|2|0|10|10|210|1210|4210|9210|20|21|GQAAAA|IZDAAA|OOOOxx
+8334|2687|0|2|4|14|34|334|334|3334|8334|68|69|OIAAAA|JZDAAA|VVVVxx
+9310|2688|0|2|0|10|10|310|1310|4310|9310|20|21|CUAAAA|KZDAAA|AAAAxx
+5024|2689|0|0|4|4|24|24|1024|24|5024|48|49|GLAAAA|LZDAAA|HHHHxx
+8794|2690|0|2|4|14|94|794|794|3794|8794|188|189|GAAAAA|MZDAAA|OOOOxx
+4091|2691|1|3|1|11|91|91|91|4091|4091|182|183|JBAAAA|NZDAAA|VVVVxx
+649|2692|1|1|9|9|49|649|649|649|649|98|99|ZYAAAA|OZDAAA|AAAAxx
+8505|2693|1|1|5|5|5|505|505|3505|8505|10|11|DPAAAA|PZDAAA|HHHHxx
+6652|2694|0|0|2|12|52|652|652|1652|6652|104|105|WVAAAA|QZDAAA|OOOOxx
+8945|2695|1|1|5|5|45|945|945|3945|8945|90|91|BGAAAA|RZDAAA|VVVVxx
+2095|2696|1|3|5|15|95|95|95|2095|2095|190|191|PCAAAA|SZDAAA|AAAAxx
+8676|2697|0|0|6|16|76|676|676|3676|8676|152|153|SVAAAA|TZDAAA|HHHHxx
+3994|2698|0|2|4|14|94|994|1994|3994|3994|188|189|QXAAAA|UZDAAA|OOOOxx
+2859|2699|1|3|9|19|59|859|859|2859|2859|118|119|ZFAAAA|VZDAAA|VVVVxx
+5403|2700|1|3|3|3|3|403|1403|403|5403|6|7|VZAAAA|WZDAAA|AAAAxx
+3254|2701|0|2|4|14|54|254|1254|3254|3254|108|109|EVAAAA|XZDAAA|HHHHxx
+7339|2702|1|3|9|19|39|339|1339|2339|7339|78|79|HWAAAA|YZDAAA|OOOOxx
+7220|2703|0|0|0|0|20|220|1220|2220|7220|40|41|SRAAAA|ZZDAAA|VVVVxx
+4154|2704|0|2|4|14|54|154|154|4154|4154|108|109|UDAAAA|AAEAAA|AAAAxx
+7570|2705|0|2|0|10|70|570|1570|2570|7570|140|141|EFAAAA|BAEAAA|HHHHxx
+2576|2706|0|0|6|16|76|576|576|2576|2576|152|153|CVAAAA|CAEAAA|OOOOxx
+5764|2707|0|0|4|4|64|764|1764|764|5764|128|129|SNAAAA|DAEAAA|VVVVxx
+4314|2708|0|2|4|14|14|314|314|4314|4314|28|29|YJAAAA|EAEAAA|AAAAxx
+2274|2709|0|2|4|14|74|274|274|2274|2274|148|149|MJAAAA|FAEAAA|HHHHxx
+9756|2710|0|0|6|16|56|756|1756|4756|9756|112|113|GLAAAA|GAEAAA|OOOOxx
+8274|2711|0|2|4|14|74|274|274|3274|8274|148|149|GGAAAA|HAEAAA|VVVVxx
+1289|2712|1|1|9|9|89|289|1289|1289|1289|178|179|PXAAAA|IAEAAA|AAAAxx
+7335|2713|1|3|5|15|35|335|1335|2335|7335|70|71|DWAAAA|JAEAAA|HHHHxx
+5351|2714|1|3|1|11|51|351|1351|351|5351|102|103|VXAAAA|KAEAAA|OOOOxx
+8978|2715|0|2|8|18|78|978|978|3978|8978|156|157|IHAAAA|LAEAAA|VVVVxx
+2|2716|0|2|2|2|2|2|2|2|2|4|5|CAAAAA|MAEAAA|AAAAxx
+8906|2717|0|2|6|6|6|906|906|3906|8906|12|13|OEAAAA|NAEAAA|HHHHxx
+6388|2718|0|0|8|8|88|388|388|1388|6388|176|177|SLAAAA|OAEAAA|OOOOxx
+5675|2719|1|3|5|15|75|675|1675|675|5675|150|151|HKAAAA|PAEAAA|VVVVxx
+255|2720|1|3|5|15|55|255|255|255|255|110|111|VJAAAA|QAEAAA|AAAAxx
+9538|2721|0|2|8|18|38|538|1538|4538|9538|76|77|WCAAAA|RAEAAA|HHHHxx
+1480|2722|0|0|0|0|80|480|1480|1480|1480|160|161|YEAAAA|SAEAAA|OOOOxx
+4015|2723|1|3|5|15|15|15|15|4015|4015|30|31|LYAAAA|TAEAAA|VVVVxx
+5166|2724|0|2|6|6|66|166|1166|166|5166|132|133|SQAAAA|UAEAAA|AAAAxx
+91|2725|1|3|1|11|91|91|91|91|91|182|183|NDAAAA|VAEAAA|HHHHxx
+2958|2726|0|2|8|18|58|958|958|2958|2958|116|117|UJAAAA|WAEAAA|OOOOxx
+9131|2727|1|3|1|11|31|131|1131|4131|9131|62|63|FNAAAA|XAEAAA|VVVVxx
+3944|2728|0|0|4|4|44|944|1944|3944|3944|88|89|SVAAAA|YAEAAA|AAAAxx
+4514|2729|0|2|4|14|14|514|514|4514|4514|28|29|QRAAAA|ZAEAAA|HHHHxx
+5661|2730|1|1|1|1|61|661|1661|661|5661|122|123|TJAAAA|ABEAAA|OOOOxx
+8724|2731|0|0|4|4|24|724|724|3724|8724|48|49|OXAAAA|BBEAAA|VVVVxx
+6408|2732|0|0|8|8|8|408|408|1408|6408|16|17|MMAAAA|CBEAAA|AAAAxx
+5013|2733|1|1|3|13|13|13|1013|13|5013|26|27|VKAAAA|DBEAAA|HHHHxx
+6156|2734|0|0|6|16|56|156|156|1156|6156|112|113|UCAAAA|EBEAAA|OOOOxx
+7350|2735|0|2|0|10|50|350|1350|2350|7350|100|101|SWAAAA|FBEAAA|VVVVxx
+9858|2736|0|2|8|18|58|858|1858|4858|9858|116|117|EPAAAA|GBEAAA|AAAAxx
+895|2737|1|3|5|15|95|895|895|895|895|190|191|LIAAAA|HBEAAA|HHHHxx
+8368|2738|0|0|8|8|68|368|368|3368|8368|136|137|WJAAAA|IBEAAA|OOOOxx
+179|2739|1|3|9|19|79|179|179|179|179|158|159|XGAAAA|JBEAAA|VVVVxx
+4048|2740|0|0|8|8|48|48|48|4048|4048|96|97|SZAAAA|KBEAAA|AAAAxx
+3073|2741|1|1|3|13|73|73|1073|3073|3073|146|147|FOAAAA|LBEAAA|HHHHxx
+321|2742|1|1|1|1|21|321|321|321|321|42|43|JMAAAA|MBEAAA|OOOOxx
+5352|2743|0|0|2|12|52|352|1352|352|5352|104|105|WXAAAA|NBEAAA|VVVVxx
+1940|2744|0|0|0|0|40|940|1940|1940|1940|80|81|QWAAAA|OBEAAA|AAAAxx
+8803|2745|1|3|3|3|3|803|803|3803|8803|6|7|PAAAAA|PBEAAA|HHHHxx
+791|2746|1|3|1|11|91|791|791|791|791|182|183|LEAAAA|QBEAAA|OOOOxx
+9809|2747|1|1|9|9|9|809|1809|4809|9809|18|19|HNAAAA|RBEAAA|VVVVxx
+5519|2748|1|3|9|19|19|519|1519|519|5519|38|39|HEAAAA|SBEAAA|AAAAxx
+7420|2749|0|0|0|0|20|420|1420|2420|7420|40|41|KZAAAA|TBEAAA|HHHHxx
+7541|2750|1|1|1|1|41|541|1541|2541|7541|82|83|BEAAAA|UBEAAA|OOOOxx
+6538|2751|0|2|8|18|38|538|538|1538|6538|76|77|MRAAAA|VBEAAA|VVVVxx
+710|2752|0|2|0|10|10|710|710|710|710|20|21|IBAAAA|WBEAAA|AAAAxx
+9488|2753|0|0|8|8|88|488|1488|4488|9488|176|177|YAAAAA|XBEAAA|HHHHxx
+3135|2754|1|3|5|15|35|135|1135|3135|3135|70|71|PQAAAA|YBEAAA|OOOOxx
+4273|2755|1|1|3|13|73|273|273|4273|4273|146|147|JIAAAA|ZBEAAA|VVVVxx
+629|2756|1|1|9|9|29|629|629|629|629|58|59|FYAAAA|ACEAAA|AAAAxx
+9167|2757|1|3|7|7|67|167|1167|4167|9167|134|135|POAAAA|BCEAAA|HHHHxx
+751|2758|1|3|1|11|51|751|751|751|751|102|103|XCAAAA|CCEAAA|OOOOxx
+1126|2759|0|2|6|6|26|126|1126|1126|1126|52|53|IRAAAA|DCEAAA|VVVVxx
+3724|2760|0|0|4|4|24|724|1724|3724|3724|48|49|GNAAAA|ECEAAA|AAAAxx
+1789|2761|1|1|9|9|89|789|1789|1789|1789|178|179|VQAAAA|FCEAAA|HHHHxx
+792|2762|0|0|2|12|92|792|792|792|792|184|185|MEAAAA|GCEAAA|OOOOxx
+2771|2763|1|3|1|11|71|771|771|2771|2771|142|143|PCAAAA|HCEAAA|VVVVxx
+4313|2764|1|1|3|13|13|313|313|4313|4313|26|27|XJAAAA|ICEAAA|AAAAxx
+9312|2765|0|0|2|12|12|312|1312|4312|9312|24|25|EUAAAA|JCEAAA|HHHHxx
+955|2766|1|3|5|15|55|955|955|955|955|110|111|TKAAAA|KCEAAA|OOOOxx
+6382|2767|0|2|2|2|82|382|382|1382|6382|164|165|MLAAAA|LCEAAA|VVVVxx
+7875|2768|1|3|5|15|75|875|1875|2875|7875|150|151|XQAAAA|MCEAAA|AAAAxx
+7491|2769|1|3|1|11|91|491|1491|2491|7491|182|183|DCAAAA|NCEAAA|HHHHxx
+8193|2770|1|1|3|13|93|193|193|3193|8193|186|187|DDAAAA|OCEAAA|OOOOxx
+968|2771|0|0|8|8|68|968|968|968|968|136|137|GLAAAA|PCEAAA|VVVVxx
+4951|2772|1|3|1|11|51|951|951|4951|4951|102|103|LIAAAA|QCEAAA|AAAAxx
+2204|2773|0|0|4|4|4|204|204|2204|2204|8|9|UGAAAA|RCEAAA|HHHHxx
+2066|2774|0|2|6|6|66|66|66|2066|2066|132|133|MBAAAA|SCEAAA|OOOOxx
+2631|2775|1|3|1|11|31|631|631|2631|2631|62|63|FXAAAA|TCEAAA|VVVVxx
+8947|2776|1|3|7|7|47|947|947|3947|8947|94|95|DGAAAA|UCEAAA|AAAAxx
+8033|2777|1|1|3|13|33|33|33|3033|8033|66|67|ZWAAAA|VCEAAA|HHHHxx
+6264|2778|0|0|4|4|64|264|264|1264|6264|128|129|YGAAAA|WCEAAA|OOOOxx
+7778|2779|0|2|8|18|78|778|1778|2778|7778|156|157|ENAAAA|XCEAAA|VVVVxx
+9701|2780|1|1|1|1|1|701|1701|4701|9701|2|3|DJAAAA|YCEAAA|AAAAxx
+5091|2781|1|3|1|11|91|91|1091|91|5091|182|183|VNAAAA|ZCEAAA|HHHHxx
+7577|2782|1|1|7|17|77|577|1577|2577|7577|154|155|LFAAAA|ADEAAA|OOOOxx
+3345|2783|1|1|5|5|45|345|1345|3345|3345|90|91|RYAAAA|BDEAAA|VVVVxx
+7329|2784|1|1|9|9|29|329|1329|2329|7329|58|59|XVAAAA|CDEAAA|AAAAxx
+7551|2785|1|3|1|11|51|551|1551|2551|7551|102|103|LEAAAA|DDEAAA|HHHHxx
+6207|2786|1|3|7|7|7|207|207|1207|6207|14|15|TEAAAA|EDEAAA|OOOOxx
+8664|2787|0|0|4|4|64|664|664|3664|8664|128|129|GVAAAA|FDEAAA|VVVVxx
+8394|2788|0|2|4|14|94|394|394|3394|8394|188|189|WKAAAA|GDEAAA|AAAAxx
+7324|2789|0|0|4|4|24|324|1324|2324|7324|48|49|SVAAAA|HDEAAA|HHHHxx
+2713|2790|1|1|3|13|13|713|713|2713|2713|26|27|JAAAAA|IDEAAA|OOOOxx
+2230|2791|0|2|0|10|30|230|230|2230|2230|60|61|UHAAAA|JDEAAA|VVVVxx
+9211|2792|1|3|1|11|11|211|1211|4211|9211|22|23|HQAAAA|KDEAAA|AAAAxx
+1296|2793|0|0|6|16|96|296|1296|1296|1296|192|193|WXAAAA|LDEAAA|HHHHxx
+8104|2794|0|0|4|4|4|104|104|3104|8104|8|9|SZAAAA|MDEAAA|OOOOxx
+6916|2795|0|0|6|16|16|916|916|1916|6916|32|33|AGAAAA|NDEAAA|VVVVxx
+2208|2796|0|0|8|8|8|208|208|2208|2208|16|17|YGAAAA|ODEAAA|AAAAxx
+3935|2797|1|3|5|15|35|935|1935|3935|3935|70|71|JVAAAA|PDEAAA|HHHHxx
+7814|2798|0|2|4|14|14|814|1814|2814|7814|28|29|OOAAAA|QDEAAA|OOOOxx
+6508|2799|0|0|8|8|8|508|508|1508|6508|16|17|IQAAAA|RDEAAA|VVVVxx
+1703|2800|1|3|3|3|3|703|1703|1703|1703|6|7|NNAAAA|SDEAAA|AAAAxx
+5640|2801|0|0|0|0|40|640|1640|640|5640|80|81|YIAAAA|TDEAAA|HHHHxx
+6417|2802|1|1|7|17|17|417|417|1417|6417|34|35|VMAAAA|UDEAAA|OOOOxx
+1713|2803|1|1|3|13|13|713|1713|1713|1713|26|27|XNAAAA|VDEAAA|VVVVxx
+5309|2804|1|1|9|9|9|309|1309|309|5309|18|19|FWAAAA|WDEAAA|AAAAxx
+4364|2805|0|0|4|4|64|364|364|4364|4364|128|129|WLAAAA|XDEAAA|HHHHxx
+619|2806|1|3|9|19|19|619|619|619|619|38|39|VXAAAA|YDEAAA|OOOOxx
+9498|2807|0|2|8|18|98|498|1498|4498|9498|196|197|IBAAAA|ZDEAAA|VVVVxx
+2804|2808|0|0|4|4|4|804|804|2804|2804|8|9|WDAAAA|AEEAAA|AAAAxx
+2220|2809|0|0|0|0|20|220|220|2220|2220|40|41|KHAAAA|BEEAAA|HHHHxx
+9542|2810|0|2|2|2|42|542|1542|4542|9542|84|85|ADAAAA|CEEAAA|OOOOxx
+3349|2811|1|1|9|9|49|349|1349|3349|3349|98|99|VYAAAA|DEEAAA|VVVVxx
+9198|2812|0|2|8|18|98|198|1198|4198|9198|196|197|UPAAAA|EEEAAA|AAAAxx
+2727|2813|1|3|7|7|27|727|727|2727|2727|54|55|XAAAAA|FEEAAA|HHHHxx
+3768|2814|0|0|8|8|68|768|1768|3768|3768|136|137|YOAAAA|GEEAAA|OOOOxx
+2334|2815|0|2|4|14|34|334|334|2334|2334|68|69|ULAAAA|HEEAAA|VVVVxx
+7770|2816|0|2|0|10|70|770|1770|2770|7770|140|141|WMAAAA|IEEAAA|AAAAxx
+5963|2817|1|3|3|3|63|963|1963|963|5963|126|127|JVAAAA|JEEAAA|HHHHxx
+4732|2818|0|0|2|12|32|732|732|4732|4732|64|65|AAAAAA|KEEAAA|OOOOxx
+2448|2819|0|0|8|8|48|448|448|2448|2448|96|97|EQAAAA|LEEAAA|VVVVxx
+5998|2820|0|2|8|18|98|998|1998|998|5998|196|197|SWAAAA|MEEAAA|AAAAxx
+8577|2821|1|1|7|17|77|577|577|3577|8577|154|155|XRAAAA|NEEAAA|HHHHxx
+266|2822|0|2|6|6|66|266|266|266|266|132|133|GKAAAA|OEEAAA|OOOOxx
+2169|2823|1|1|9|9|69|169|169|2169|2169|138|139|LFAAAA|PEEAAA|VVVVxx
+8228|2824|0|0|8|8|28|228|228|3228|8228|56|57|MEAAAA|QEEAAA|AAAAxx
+4813|2825|1|1|3|13|13|813|813|4813|4813|26|27|DDAAAA|REEAAA|HHHHxx
+2769|2826|1|1|9|9|69|769|769|2769|2769|138|139|NCAAAA|SEEAAA|OOOOxx
+8382|2827|0|2|2|2|82|382|382|3382|8382|164|165|KKAAAA|TEEAAA|VVVVxx
+1717|2828|1|1|7|17|17|717|1717|1717|1717|34|35|BOAAAA|UEEAAA|AAAAxx
+7178|2829|0|2|8|18|78|178|1178|2178|7178|156|157|CQAAAA|VEEAAA|HHHHxx
+9547|2830|1|3|7|7|47|547|1547|4547|9547|94|95|FDAAAA|WEEAAA|OOOOxx
+8187|2831|1|3|7|7|87|187|187|3187|8187|174|175|XCAAAA|XEEAAA|VVVVxx
+3168|2832|0|0|8|8|68|168|1168|3168|3168|136|137|WRAAAA|YEEAAA|AAAAxx
+2180|2833|0|0|0|0|80|180|180|2180|2180|160|161|WFAAAA|ZEEAAA|HHHHxx
+859|2834|1|3|9|19|59|859|859|859|859|118|119|BHAAAA|AFEAAA|OOOOxx
+1554|2835|0|2|4|14|54|554|1554|1554|1554|108|109|UHAAAA|BFEAAA|VVVVxx
+3567|2836|1|3|7|7|67|567|1567|3567|3567|134|135|FHAAAA|CFEAAA|AAAAxx
+5985|2837|1|1|5|5|85|985|1985|985|5985|170|171|FWAAAA|DFEAAA|HHHHxx
+1|2838|1|1|1|1|1|1|1|1|1|2|3|BAAAAA|EFEAAA|OOOOxx
+5937|2839|1|1|7|17|37|937|1937|937|5937|74|75|JUAAAA|FFEAAA|VVVVxx
+7594|2840|0|2|4|14|94|594|1594|2594|7594|188|189|CGAAAA|GFEAAA|AAAAxx
+3783|2841|1|3|3|3|83|783|1783|3783|3783|166|167|NPAAAA|HFEAAA|HHHHxx
+6841|2842|1|1|1|1|41|841|841|1841|6841|82|83|DDAAAA|IFEAAA|OOOOxx
+9694|2843|0|2|4|14|94|694|1694|4694|9694|188|189|WIAAAA|JFEAAA|VVVVxx
+4322|2844|0|2|2|2|22|322|322|4322|4322|44|45|GKAAAA|KFEAAA|AAAAxx
+6012|2845|0|0|2|12|12|12|12|1012|6012|24|25|GXAAAA|LFEAAA|HHHHxx
+108|2846|0|0|8|8|8|108|108|108|108|16|17|EEAAAA|MFEAAA|OOOOxx
+3396|2847|0|0|6|16|96|396|1396|3396|3396|192|193|QAAAAA|NFEAAA|VVVVxx
+8643|2848|1|3|3|3|43|643|643|3643|8643|86|87|LUAAAA|OFEAAA|AAAAxx
+6087|2849|1|3|7|7|87|87|87|1087|6087|174|175|DAAAAA|PFEAAA|HHHHxx
+2629|2850|1|1|9|9|29|629|629|2629|2629|58|59|DXAAAA|QFEAAA|OOOOxx
+3009|2851|1|1|9|9|9|9|1009|3009|3009|18|19|TLAAAA|RFEAAA|VVVVxx
+438|2852|0|2|8|18|38|438|438|438|438|76|77|WQAAAA|SFEAAA|AAAAxx
+2480|2853|0|0|0|0|80|480|480|2480|2480|160|161|KRAAAA|TFEAAA|HHHHxx
+936|2854|0|0|6|16|36|936|936|936|936|72|73|AKAAAA|UFEAAA|OOOOxx
+6|2855|0|2|6|6|6|6|6|6|6|12|13|GAAAAA|VFEAAA|VVVVxx
+768|2856|0|0|8|8|68|768|768|768|768|136|137|ODAAAA|WFEAAA|AAAAxx
+1564|2857|0|0|4|4|64|564|1564|1564|1564|128|129|EIAAAA|XFEAAA|HHHHxx
+3236|2858|0|0|6|16|36|236|1236|3236|3236|72|73|MUAAAA|YFEAAA|OOOOxx
+3932|2859|0|0|2|12|32|932|1932|3932|3932|64|65|GVAAAA|ZFEAAA|VVVVxx
+8914|2860|0|2|4|14|14|914|914|3914|8914|28|29|WEAAAA|AGEAAA|AAAAxx
+119|2861|1|3|9|19|19|119|119|119|119|38|39|PEAAAA|BGEAAA|HHHHxx
+6034|2862|0|2|4|14|34|34|34|1034|6034|68|69|CYAAAA|CGEAAA|OOOOxx
+5384|2863|0|0|4|4|84|384|1384|384|5384|168|169|CZAAAA|DGEAAA|VVVVxx
+6885|2864|1|1|5|5|85|885|885|1885|6885|170|171|VEAAAA|EGEAAA|AAAAxx
+232|2865|0|0|2|12|32|232|232|232|232|64|65|YIAAAA|FGEAAA|HHHHxx
+1293|2866|1|1|3|13|93|293|1293|1293|1293|186|187|TXAAAA|GGEAAA|OOOOxx
+9204|2867|0|0|4|4|4|204|1204|4204|9204|8|9|AQAAAA|HGEAAA|VVVVxx
+527|2868|1|3|7|7|27|527|527|527|527|54|55|HUAAAA|IGEAAA|AAAAxx
+6539|2869|1|3|9|19|39|539|539|1539|6539|78|79|NRAAAA|JGEAAA|HHHHxx
+3679|2870|1|3|9|19|79|679|1679|3679|3679|158|159|NLAAAA|KGEAAA|OOOOxx
+8282|2871|0|2|2|2|82|282|282|3282|8282|164|165|OGAAAA|LGEAAA|VVVVxx
+5027|2872|1|3|7|7|27|27|1027|27|5027|54|55|JLAAAA|MGEAAA|AAAAxx
+7694|2873|0|2|4|14|94|694|1694|2694|7694|188|189|YJAAAA|NGEAAA|HHHHxx
+473|2874|1|1|3|13|73|473|473|473|473|146|147|FSAAAA|OGEAAA|OOOOxx
+6325|2875|1|1|5|5|25|325|325|1325|6325|50|51|HJAAAA|PGEAAA|VVVVxx
+8761|2876|1|1|1|1|61|761|761|3761|8761|122|123|ZYAAAA|QGEAAA|AAAAxx
+6184|2877|0|0|4|4|84|184|184|1184|6184|168|169|WDAAAA|RGEAAA|HHHHxx
+419|2878|1|3|9|19|19|419|419|419|419|38|39|DQAAAA|SGEAAA|OOOOxx
+6111|2879|1|3|1|11|11|111|111|1111|6111|22|23|BBAAAA|TGEAAA|VVVVxx
+3836|2880|0|0|6|16|36|836|1836|3836|3836|72|73|ORAAAA|UGEAAA|AAAAxx
+4086|2881|0|2|6|6|86|86|86|4086|4086|172|173|EBAAAA|VGEAAA|HHHHxx
+5818|2882|0|2|8|18|18|818|1818|818|5818|36|37|UPAAAA|WGEAAA|OOOOxx
+4528|2883|0|0|8|8|28|528|528|4528|4528|56|57|ESAAAA|XGEAAA|VVVVxx
+7199|2884|1|3|9|19|99|199|1199|2199|7199|198|199|XQAAAA|YGEAAA|AAAAxx
+1847|2885|1|3|7|7|47|847|1847|1847|1847|94|95|BTAAAA|ZGEAAA|HHHHxx
+2875|2886|1|3|5|15|75|875|875|2875|2875|150|151|PGAAAA|AHEAAA|OOOOxx
+2872|2887|0|0|2|12|72|872|872|2872|2872|144|145|MGAAAA|BHEAAA|VVVVxx
+3972|2888|0|0|2|12|72|972|1972|3972|3972|144|145|UWAAAA|CHEAAA|AAAAxx
+7590|2889|0|2|0|10|90|590|1590|2590|7590|180|181|YFAAAA|DHEAAA|HHHHxx
+1914|2890|0|2|4|14|14|914|1914|1914|1914|28|29|QVAAAA|EHEAAA|OOOOxx
+1658|2891|0|2|8|18|58|658|1658|1658|1658|116|117|ULAAAA|FHEAAA|VVVVxx
+2126|2892|0|2|6|6|26|126|126|2126|2126|52|53|UDAAAA|GHEAAA|AAAAxx
+645|2893|1|1|5|5|45|645|645|645|645|90|91|VYAAAA|HHEAAA|HHHHxx
+6636|2894|0|0|6|16|36|636|636|1636|6636|72|73|GVAAAA|IHEAAA|OOOOxx
+1469|2895|1|1|9|9|69|469|1469|1469|1469|138|139|NEAAAA|JHEAAA|VVVVxx
+1377|2896|1|1|7|17|77|377|1377|1377|1377|154|155|ZAAAAA|KHEAAA|AAAAxx
+8425|2897|1|1|5|5|25|425|425|3425|8425|50|51|BMAAAA|LHEAAA|HHHHxx
+9300|2898|0|0|0|0|0|300|1300|4300|9300|0|1|STAAAA|MHEAAA|OOOOxx
+5355|2899|1|3|5|15|55|355|1355|355|5355|110|111|ZXAAAA|NHEAAA|VVVVxx
+840|2900|0|0|0|0|40|840|840|840|840|80|81|IGAAAA|OHEAAA|AAAAxx
+5185|2901|1|1|5|5|85|185|1185|185|5185|170|171|LRAAAA|PHEAAA|HHHHxx
+6467|2902|1|3|7|7|67|467|467|1467|6467|134|135|TOAAAA|QHEAAA|OOOOxx
+58|2903|0|2|8|18|58|58|58|58|58|116|117|GCAAAA|RHEAAA|VVVVxx
+5051|2904|1|3|1|11|51|51|1051|51|5051|102|103|HMAAAA|SHEAAA|AAAAxx
+8901|2905|1|1|1|1|1|901|901|3901|8901|2|3|JEAAAA|THEAAA|HHHHxx
+1550|2906|0|2|0|10|50|550|1550|1550|1550|100|101|QHAAAA|UHEAAA|OOOOxx
+1698|2907|0|2|8|18|98|698|1698|1698|1698|196|197|INAAAA|VHEAAA|VVVVxx
+802|2908|0|2|2|2|2|802|802|802|802|4|5|WEAAAA|WHEAAA|AAAAxx
+2440|2909|0|0|0|0|40|440|440|2440|2440|80|81|WPAAAA|XHEAAA|HHHHxx
+2260|2910|0|0|0|0|60|260|260|2260|2260|120|121|YIAAAA|YHEAAA|OOOOxx
+8218|2911|0|2|8|18|18|218|218|3218|8218|36|37|CEAAAA|ZHEAAA|VVVVxx
+5144|2912|0|0|4|4|44|144|1144|144|5144|88|89|WPAAAA|AIEAAA|AAAAxx
+4822|2913|0|2|2|2|22|822|822|4822|4822|44|45|MDAAAA|BIEAAA|HHHHxx
+9476|2914|0|0|6|16|76|476|1476|4476|9476|152|153|MAAAAA|CIEAAA|OOOOxx
+7535|2915|1|3|5|15|35|535|1535|2535|7535|70|71|VDAAAA|DIEAAA|VVVVxx
+8738|2916|0|2|8|18|38|738|738|3738|8738|76|77|CYAAAA|EIEAAA|AAAAxx
+7946|2917|0|2|6|6|46|946|1946|2946|7946|92|93|QTAAAA|FIEAAA|HHHHxx
+8143|2918|1|3|3|3|43|143|143|3143|8143|86|87|FBAAAA|GIEAAA|OOOOxx
+2623|2919|1|3|3|3|23|623|623|2623|2623|46|47|XWAAAA|HIEAAA|VVVVxx
+5209|2920|1|1|9|9|9|209|1209|209|5209|18|19|JSAAAA|IIEAAA|AAAAxx
+7674|2921|0|2|4|14|74|674|1674|2674|7674|148|149|EJAAAA|JIEAAA|HHHHxx
+1135|2922|1|3|5|15|35|135|1135|1135|1135|70|71|RRAAAA|KIEAAA|OOOOxx
+424|2923|0|0|4|4|24|424|424|424|424|48|49|IQAAAA|LIEAAA|VVVVxx
+942|2924|0|2|2|2|42|942|942|942|942|84|85|GKAAAA|MIEAAA|AAAAxx
+7813|2925|1|1|3|13|13|813|1813|2813|7813|26|27|NOAAAA|NIEAAA|HHHHxx
+3539|2926|1|3|9|19|39|539|1539|3539|3539|78|79|DGAAAA|OIEAAA|OOOOxx
+2909|2927|1|1|9|9|9|909|909|2909|2909|18|19|XHAAAA|PIEAAA|VVVVxx
+3748|2928|0|0|8|8|48|748|1748|3748|3748|96|97|EOAAAA|QIEAAA|AAAAxx
+2996|2929|0|0|6|16|96|996|996|2996|2996|192|193|GLAAAA|RIEAAA|HHHHxx
+1869|2930|1|1|9|9|69|869|1869|1869|1869|138|139|XTAAAA|SIEAAA|OOOOxx
+8151|2931|1|3|1|11|51|151|151|3151|8151|102|103|NBAAAA|TIEAAA|VVVVxx
+6361|2932|1|1|1|1|61|361|361|1361|6361|122|123|RKAAAA|UIEAAA|AAAAxx
+5568|2933|0|0|8|8|68|568|1568|568|5568|136|137|EGAAAA|VIEAAA|HHHHxx
+2796|2934|0|0|6|16|96|796|796|2796|2796|192|193|ODAAAA|WIEAAA|OOOOxx
+8489|2935|1|1|9|9|89|489|489|3489|8489|178|179|NOAAAA|XIEAAA|VVVVxx
+9183|2936|1|3|3|3|83|183|1183|4183|9183|166|167|FPAAAA|YIEAAA|AAAAxx
+8227|2937|1|3|7|7|27|227|227|3227|8227|54|55|LEAAAA|ZIEAAA|HHHHxx
+1844|2938|0|0|4|4|44|844|1844|1844|1844|88|89|YSAAAA|AJEAAA|OOOOxx
+3975|2939|1|3|5|15|75|975|1975|3975|3975|150|151|XWAAAA|BJEAAA|VVVVxx
+6490|2940|0|2|0|10|90|490|490|1490|6490|180|181|QPAAAA|CJEAAA|AAAAxx
+8303|2941|1|3|3|3|3|303|303|3303|8303|6|7|JHAAAA|DJEAAA|HHHHxx
+7334|2942|0|2|4|14|34|334|1334|2334|7334|68|69|CWAAAA|EJEAAA|OOOOxx
+2382|2943|0|2|2|2|82|382|382|2382|2382|164|165|QNAAAA|FJEAAA|VVVVxx
+177|2944|1|1|7|17|77|177|177|177|177|154|155|VGAAAA|GJEAAA|AAAAxx
+8117|2945|1|1|7|17|17|117|117|3117|8117|34|35|FAAAAA|HJEAAA|HHHHxx
+5485|2946|1|1|5|5|85|485|1485|485|5485|170|171|ZCAAAA|IJEAAA|OOOOxx
+6544|2947|0|0|4|4|44|544|544|1544|6544|88|89|SRAAAA|JJEAAA|VVVVxx
+8517|2948|1|1|7|17|17|517|517|3517|8517|34|35|PPAAAA|KJEAAA|AAAAxx
+2252|2949|0|0|2|12|52|252|252|2252|2252|104|105|QIAAAA|LJEAAA|HHHHxx
+4480|2950|0|0|0|0|80|480|480|4480|4480|160|161|IQAAAA|MJEAAA|OOOOxx
+4785|2951|1|1|5|5|85|785|785|4785|4785|170|171|BCAAAA|NJEAAA|VVVVxx
+9700|2952|0|0|0|0|0|700|1700|4700|9700|0|1|CJAAAA|OJEAAA|AAAAxx
+2122|2953|0|2|2|2|22|122|122|2122|2122|44|45|QDAAAA|PJEAAA|HHHHxx
+8783|2954|1|3|3|3|83|783|783|3783|8783|166|167|VZAAAA|QJEAAA|OOOOxx
+1453|2955|1|1|3|13|53|453|1453|1453|1453|106|107|XDAAAA|RJEAAA|VVVVxx
+3908|2956|0|0|8|8|8|908|1908|3908|3908|16|17|IUAAAA|SJEAAA|AAAAxx
+7707|2957|1|3|7|7|7|707|1707|2707|7707|14|15|LKAAAA|TJEAAA|HHHHxx
+9049|2958|1|1|9|9|49|49|1049|4049|9049|98|99|BKAAAA|UJEAAA|OOOOxx
+654|2959|0|2|4|14|54|654|654|654|654|108|109|EZAAAA|VJEAAA|VVVVxx
+3336|2960|0|0|6|16|36|336|1336|3336|3336|72|73|IYAAAA|WJEAAA|AAAAxx
+622|2961|0|2|2|2|22|622|622|622|622|44|45|YXAAAA|XJEAAA|HHHHxx
+8398|2962|0|2|8|18|98|398|398|3398|8398|196|197|ALAAAA|YJEAAA|OOOOxx
+9193|2963|1|1|3|13|93|193|1193|4193|9193|186|187|PPAAAA|ZJEAAA|VVVVxx
+7896|2964|0|0|6|16|96|896|1896|2896|7896|192|193|SRAAAA|AKEAAA|AAAAxx
+9798|2965|0|2|8|18|98|798|1798|4798|9798|196|197|WMAAAA|BKEAAA|HHHHxx
+2881|2966|1|1|1|1|81|881|881|2881|2881|162|163|VGAAAA|CKEAAA|OOOOxx
+672|2967|0|0|2|12|72|672|672|672|672|144|145|WZAAAA|DKEAAA|VVVVxx
+6743|2968|1|3|3|3|43|743|743|1743|6743|86|87|JZAAAA|EKEAAA|AAAAxx
+8935|2969|1|3|5|15|35|935|935|3935|8935|70|71|RFAAAA|FKEAAA|HHHHxx
+2426|2970|0|2|6|6|26|426|426|2426|2426|52|53|IPAAAA|GKEAAA|OOOOxx
+722|2971|0|2|2|2|22|722|722|722|722|44|45|UBAAAA|HKEAAA|VVVVxx
+5088|2972|0|0|8|8|88|88|1088|88|5088|176|177|SNAAAA|IKEAAA|AAAAxx
+8677|2973|1|1|7|17|77|677|677|3677|8677|154|155|TVAAAA|JKEAAA|HHHHxx
+6963|2974|1|3|3|3|63|963|963|1963|6963|126|127|VHAAAA|KKEAAA|OOOOxx
+1653|2975|1|1|3|13|53|653|1653|1653|1653|106|107|PLAAAA|LKEAAA|VVVVxx
+7295|2976|1|3|5|15|95|295|1295|2295|7295|190|191|PUAAAA|MKEAAA|AAAAxx
+6675|2977|1|3|5|15|75|675|675|1675|6675|150|151|TWAAAA|NKEAAA|HHHHxx
+7183|2978|1|3|3|3|83|183|1183|2183|7183|166|167|HQAAAA|OKEAAA|OOOOxx
+4378|2979|0|2|8|18|78|378|378|4378|4378|156|157|KMAAAA|PKEAAA|VVVVxx
+2157|2980|1|1|7|17|57|157|157|2157|2157|114|115|ZEAAAA|QKEAAA|AAAAxx
+2621|2981|1|1|1|1|21|621|621|2621|2621|42|43|VWAAAA|RKEAAA|HHHHxx
+9278|2982|0|2|8|18|78|278|1278|4278|9278|156|157|WSAAAA|SKEAAA|OOOOxx
+79|2983|1|3|9|19|79|79|79|79|79|158|159|BDAAAA|TKEAAA|VVVVxx
+7358|2984|0|2|8|18|58|358|1358|2358|7358|116|117|AXAAAA|UKEAAA|AAAAxx
+3589|2985|1|1|9|9|89|589|1589|3589|3589|178|179|BIAAAA|VKEAAA|HHHHxx
+1254|2986|0|2|4|14|54|254|1254|1254|1254|108|109|GWAAAA|WKEAAA|OOOOxx
+3490|2987|0|2|0|10|90|490|1490|3490|3490|180|181|GEAAAA|XKEAAA|VVVVxx
+7533|2988|1|1|3|13|33|533|1533|2533|7533|66|67|TDAAAA|YKEAAA|AAAAxx
+2800|2989|0|0|0|0|0|800|800|2800|2800|0|1|SDAAAA|ZKEAAA|HHHHxx
+351|2990|1|3|1|11|51|351|351|351|351|102|103|NNAAAA|ALEAAA|OOOOxx
+4359|2991|1|3|9|19|59|359|359|4359|4359|118|119|RLAAAA|BLEAAA|VVVVxx
+5788|2992|0|0|8|8|88|788|1788|788|5788|176|177|QOAAAA|CLEAAA|AAAAxx
+5521|2993|1|1|1|1|21|521|1521|521|5521|42|43|JEAAAA|DLEAAA|HHHHxx
+3351|2994|1|3|1|11|51|351|1351|3351|3351|102|103|XYAAAA|ELEAAA|OOOOxx
+5129|2995|1|1|9|9|29|129|1129|129|5129|58|59|HPAAAA|FLEAAA|VVVVxx
+315|2996|1|3|5|15|15|315|315|315|315|30|31|DMAAAA|GLEAAA|AAAAxx
+7552|2997|0|0|2|12|52|552|1552|2552|7552|104|105|MEAAAA|HLEAAA|HHHHxx
+9176|2998|0|0|6|16|76|176|1176|4176|9176|152|153|YOAAAA|ILEAAA|OOOOxx
+7458|2999|0|2|8|18|58|458|1458|2458|7458|116|117|WAAAAA|JLEAAA|VVVVxx
+279|3000|1|3|9|19|79|279|279|279|279|158|159|TKAAAA|KLEAAA|AAAAxx
+738|3001|0|2|8|18|38|738|738|738|738|76|77|KCAAAA|LLEAAA|HHHHxx
+2557|3002|1|1|7|17|57|557|557|2557|2557|114|115|JUAAAA|MLEAAA|OOOOxx
+9395|3003|1|3|5|15|95|395|1395|4395|9395|190|191|JXAAAA|NLEAAA|VVVVxx
+7214|3004|0|2|4|14|14|214|1214|2214|7214|28|29|MRAAAA|OLEAAA|AAAAxx
+6354|3005|0|2|4|14|54|354|354|1354|6354|108|109|KKAAAA|PLEAAA|HHHHxx
+4799|3006|1|3|9|19|99|799|799|4799|4799|198|199|PCAAAA|QLEAAA|OOOOxx
+1231|3007|1|3|1|11|31|231|1231|1231|1231|62|63|JVAAAA|RLEAAA|VVVVxx
+5252|3008|0|0|2|12|52|252|1252|252|5252|104|105|AUAAAA|SLEAAA|AAAAxx
+5250|3009|0|2|0|10|50|250|1250|250|5250|100|101|YTAAAA|TLEAAA|HHHHxx
+9319|3010|1|3|9|19|19|319|1319|4319|9319|38|39|LUAAAA|ULEAAA|OOOOxx
+1724|3011|0|0|4|4|24|724|1724|1724|1724|48|49|IOAAAA|VLEAAA|VVVVxx
+7947|3012|1|3|7|7|47|947|1947|2947|7947|94|95|RTAAAA|WLEAAA|AAAAxx
+1105|3013|1|1|5|5|5|105|1105|1105|1105|10|11|NQAAAA|XLEAAA|HHHHxx
+1417|3014|1|1|7|17|17|417|1417|1417|1417|34|35|NCAAAA|YLEAAA|OOOOxx
+7101|3015|1|1|1|1|1|101|1101|2101|7101|2|3|DNAAAA|ZLEAAA|VVVVxx
+1088|3016|0|0|8|8|88|88|1088|1088|1088|176|177|WPAAAA|AMEAAA|AAAAxx
+979|3017|1|3|9|19|79|979|979|979|979|158|159|RLAAAA|BMEAAA|HHHHxx
+7589|3018|1|1|9|9|89|589|1589|2589|7589|178|179|XFAAAA|CMEAAA|OOOOxx
+8952|3019|0|0|2|12|52|952|952|3952|8952|104|105|IGAAAA|DMEAAA|VVVVxx
+2864|3020|0|0|4|4|64|864|864|2864|2864|128|129|EGAAAA|EMEAAA|AAAAxx
+234|3021|0|2|4|14|34|234|234|234|234|68|69|AJAAAA|FMEAAA|HHHHxx
+7231|3022|1|3|1|11|31|231|1231|2231|7231|62|63|DSAAAA|GMEAAA|OOOOxx
+6792|3023|0|0|2|12|92|792|792|1792|6792|184|185|GBAAAA|HMEAAA|VVVVxx
+4311|3024|1|3|1|11|11|311|311|4311|4311|22|23|VJAAAA|IMEAAA|AAAAxx
+3374|3025|0|2|4|14|74|374|1374|3374|3374|148|149|UZAAAA|JMEAAA|HHHHxx
+3367|3026|1|3|7|7|67|367|1367|3367|3367|134|135|NZAAAA|KMEAAA|OOOOxx
+2598|3027|0|2|8|18|98|598|598|2598|2598|196|197|YVAAAA|LMEAAA|VVVVxx
+1033|3028|1|1|3|13|33|33|1033|1033|1033|66|67|TNAAAA|MMEAAA|AAAAxx
+7803|3029|1|3|3|3|3|803|1803|2803|7803|6|7|DOAAAA|NMEAAA|HHHHxx
+3870|3030|0|2|0|10|70|870|1870|3870|3870|140|141|WSAAAA|OMEAAA|OOOOxx
+4962|3031|0|2|2|2|62|962|962|4962|4962|124|125|WIAAAA|PMEAAA|VVVVxx
+4842|3032|0|2|2|2|42|842|842|4842|4842|84|85|GEAAAA|QMEAAA|AAAAxx
+8814|3033|0|2|4|14|14|814|814|3814|8814|28|29|ABAAAA|RMEAAA|HHHHxx
+3429|3034|1|1|9|9|29|429|1429|3429|3429|58|59|XBAAAA|SMEAAA|OOOOxx
+6550|3035|0|2|0|10|50|550|550|1550|6550|100|101|YRAAAA|TMEAAA|VVVVxx
+6317|3036|1|1|7|17|17|317|317|1317|6317|34|35|ZIAAAA|UMEAAA|AAAAxx
+5023|3037|1|3|3|3|23|23|1023|23|5023|46|47|FLAAAA|VMEAAA|HHHHxx
+5825|3038|1|1|5|5|25|825|1825|825|5825|50|51|BQAAAA|WMEAAA|OOOOxx
+5297|3039|1|1|7|17|97|297|1297|297|5297|194|195|TVAAAA|XMEAAA|VVVVxx
+8764|3040|0|0|4|4|64|764|764|3764|8764|128|129|CZAAAA|YMEAAA|AAAAxx
+5084|3041|0|0|4|4|84|84|1084|84|5084|168|169|ONAAAA|ZMEAAA|HHHHxx
+6808|3042|0|0|8|8|8|808|808|1808|6808|16|17|WBAAAA|ANEAAA|OOOOxx
+1780|3043|0|0|0|0|80|780|1780|1780|1780|160|161|MQAAAA|BNEAAA|VVVVxx
+4092|3044|0|0|2|12|92|92|92|4092|4092|184|185|KBAAAA|CNEAAA|AAAAxx
+3618|3045|0|2|8|18|18|618|1618|3618|3618|36|37|EJAAAA|DNEAAA|HHHHxx
+7299|3046|1|3|9|19|99|299|1299|2299|7299|198|199|TUAAAA|ENEAAA|OOOOxx
+8544|3047|0|0|4|4|44|544|544|3544|8544|88|89|QQAAAA|FNEAAA|VVVVxx
+2359|3048|1|3|9|19|59|359|359|2359|2359|118|119|TMAAAA|GNEAAA|AAAAxx
+1939|3049|1|3|9|19|39|939|1939|1939|1939|78|79|PWAAAA|HNEAAA|HHHHxx
+5834|3050|0|2|4|14|34|834|1834|834|5834|68|69|KQAAAA|INEAAA|OOOOxx
+1997|3051|1|1|7|17|97|997|1997|1997|1997|194|195|VYAAAA|JNEAAA|VVVVxx
+7917|3052|1|1|7|17|17|917|1917|2917|7917|34|35|NSAAAA|KNEAAA|AAAAxx
+2098|3053|0|2|8|18|98|98|98|2098|2098|196|197|SCAAAA|LNEAAA|HHHHxx
+7576|3054|0|0|6|16|76|576|1576|2576|7576|152|153|KFAAAA|MNEAAA|OOOOxx
+376|3055|0|0|6|16|76|376|376|376|376|152|153|MOAAAA|NNEAAA|VVVVxx
+8535|3056|1|3|5|15|35|535|535|3535|8535|70|71|HQAAAA|ONEAAA|AAAAxx
+5659|3057|1|3|9|19|59|659|1659|659|5659|118|119|RJAAAA|PNEAAA|HHHHxx
+2786|3058|0|2|6|6|86|786|786|2786|2786|172|173|EDAAAA|QNEAAA|OOOOxx
+8820|3059|0|0|0|0|20|820|820|3820|8820|40|41|GBAAAA|RNEAAA|VVVVxx
+1229|3060|1|1|9|9|29|229|1229|1229|1229|58|59|HVAAAA|SNEAAA|AAAAxx
+9321|3061|1|1|1|1|21|321|1321|4321|9321|42|43|NUAAAA|TNEAAA|HHHHxx
+7662|3062|0|2|2|2|62|662|1662|2662|7662|124|125|SIAAAA|UNEAAA|OOOOxx
+5535|3063|1|3|5|15|35|535|1535|535|5535|70|71|XEAAAA|VNEAAA|VVVVxx
+4889|3064|1|1|9|9|89|889|889|4889|4889|178|179|BGAAAA|WNEAAA|AAAAxx
+8259|3065|1|3|9|19|59|259|259|3259|8259|118|119|RFAAAA|XNEAAA|HHHHxx
+6789|3066|1|1|9|9|89|789|789|1789|6789|178|179|DBAAAA|YNEAAA|OOOOxx
+5411|3067|1|3|1|11|11|411|1411|411|5411|22|23|DAAAAA|ZNEAAA|VVVVxx
+6992|3068|0|0|2|12|92|992|992|1992|6992|184|185|YIAAAA|AOEAAA|AAAAxx
+7698|3069|0|2|8|18|98|698|1698|2698|7698|196|197|CKAAAA|BOEAAA|HHHHxx
+2342|3070|0|2|2|2|42|342|342|2342|2342|84|85|CMAAAA|COEAAA|OOOOxx
+1501|3071|1|1|1|1|1|501|1501|1501|1501|2|3|TFAAAA|DOEAAA|VVVVxx
+6322|3072|0|2|2|2|22|322|322|1322|6322|44|45|EJAAAA|EOEAAA|AAAAxx
+9861|3073|1|1|1|1|61|861|1861|4861|9861|122|123|HPAAAA|FOEAAA|HHHHxx
+9802|3074|0|2|2|2|2|802|1802|4802|9802|4|5|ANAAAA|GOEAAA|OOOOxx
+4750|3075|0|2|0|10|50|750|750|4750|4750|100|101|SAAAAA|HOEAAA|VVVVxx
+5855|3076|1|3|5|15|55|855|1855|855|5855|110|111|FRAAAA|IOEAAA|AAAAxx
+4304|3077|0|0|4|4|4|304|304|4304|4304|8|9|OJAAAA|JOEAAA|HHHHxx
+2605|3078|1|1|5|5|5|605|605|2605|2605|10|11|FWAAAA|KOEAAA|OOOOxx
+1802|3079|0|2|2|2|2|802|1802|1802|1802|4|5|IRAAAA|LOEAAA|VVVVxx
+9368|3080|0|0|8|8|68|368|1368|4368|9368|136|137|IWAAAA|MOEAAA|AAAAxx
+7107|3081|1|3|7|7|7|107|1107|2107|7107|14|15|JNAAAA|NOEAAA|HHHHxx
+8895|3082|1|3|5|15|95|895|895|3895|8895|190|191|DEAAAA|OOEAAA|OOOOxx
+3750|3083|0|2|0|10|50|750|1750|3750|3750|100|101|GOAAAA|POEAAA|VVVVxx
+8934|3084|0|2|4|14|34|934|934|3934|8934|68|69|QFAAAA|QOEAAA|AAAAxx
+9464|3085|0|0|4|4|64|464|1464|4464|9464|128|129|AAAAAA|ROEAAA|HHHHxx
+1928|3086|0|0|8|8|28|928|1928|1928|1928|56|57|EWAAAA|SOEAAA|OOOOxx
+3196|3087|0|0|6|16|96|196|1196|3196|3196|192|193|YSAAAA|TOEAAA|VVVVxx
+5256|3088|0|0|6|16|56|256|1256|256|5256|112|113|EUAAAA|UOEAAA|AAAAxx
+7119|3089|1|3|9|19|19|119|1119|2119|7119|38|39|VNAAAA|VOEAAA|HHHHxx
+4495|3090|1|3|5|15|95|495|495|4495|4495|190|191|XQAAAA|WOEAAA|OOOOxx
+9292|3091|0|0|2|12|92|292|1292|4292|9292|184|185|KTAAAA|XOEAAA|VVVVxx
+1617|3092|1|1|7|17|17|617|1617|1617|1617|34|35|FKAAAA|YOEAAA|AAAAxx
+481|3093|1|1|1|1|81|481|481|481|481|162|163|NSAAAA|ZOEAAA|HHHHxx
+56|3094|0|0|6|16|56|56|56|56|56|112|113|ECAAAA|APEAAA|OOOOxx
+9120|3095|0|0|0|0|20|120|1120|4120|9120|40|41|UMAAAA|BPEAAA|VVVVxx
+1306|3096|0|2|6|6|6|306|1306|1306|1306|12|13|GYAAAA|CPEAAA|AAAAxx
+7773|3097|1|1|3|13|73|773|1773|2773|7773|146|147|ZMAAAA|DPEAAA|HHHHxx
+4863|3098|1|3|3|3|63|863|863|4863|4863|126|127|BFAAAA|EPEAAA|OOOOxx
+1114|3099|0|2|4|14|14|114|1114|1114|1114|28|29|WQAAAA|FPEAAA|VVVVxx
+8124|3100|0|0|4|4|24|124|124|3124|8124|48|49|MAAAAA|GPEAAA|AAAAxx
+6254|3101|0|2|4|14|54|254|254|1254|6254|108|109|OGAAAA|HPEAAA|HHHHxx
+8109|3102|1|1|9|9|9|109|109|3109|8109|18|19|XZAAAA|IPEAAA|OOOOxx
+1747|3103|1|3|7|7|47|747|1747|1747|1747|94|95|FPAAAA|JPEAAA|VVVVxx
+6185|3104|1|1|5|5|85|185|185|1185|6185|170|171|XDAAAA|KPEAAA|AAAAxx
+3388|3105|0|0|8|8|88|388|1388|3388|3388|176|177|IAAAAA|LPEAAA|HHHHxx
+4905|3106|1|1|5|5|5|905|905|4905|4905|10|11|RGAAAA|MPEAAA|OOOOxx
+5728|3107|0|0|8|8|28|728|1728|728|5728|56|57|IMAAAA|NPEAAA|VVVVxx
+7507|3108|1|3|7|7|7|507|1507|2507|7507|14|15|TCAAAA|OPEAAA|AAAAxx
+5662|3109|0|2|2|2|62|662|1662|662|5662|124|125|UJAAAA|PPEAAA|HHHHxx
+1686|3110|0|2|6|6|86|686|1686|1686|1686|172|173|WMAAAA|QPEAAA|OOOOxx
+5202|3111|0|2|2|2|2|202|1202|202|5202|4|5|CSAAAA|RPEAAA|VVVVxx
+6905|3112|1|1|5|5|5|905|905|1905|6905|10|11|PFAAAA|SPEAAA|AAAAxx
+9577|3113|1|1|7|17|77|577|1577|4577|9577|154|155|JEAAAA|TPEAAA|HHHHxx
+7194|3114|0|2|4|14|94|194|1194|2194|7194|188|189|SQAAAA|UPEAAA|OOOOxx
+7016|3115|0|0|6|16|16|16|1016|2016|7016|32|33|WJAAAA|VPEAAA|VVVVxx
+8905|3116|1|1|5|5|5|905|905|3905|8905|10|11|NEAAAA|WPEAAA|AAAAxx
+3419|3117|1|3|9|19|19|419|1419|3419|3419|38|39|NBAAAA|XPEAAA|HHHHxx
+6881|3118|1|1|1|1|81|881|881|1881|6881|162|163|REAAAA|YPEAAA|OOOOxx
+8370|3119|0|2|0|10|70|370|370|3370|8370|140|141|YJAAAA|ZPEAAA|VVVVxx
+6117|3120|1|1|7|17|17|117|117|1117|6117|34|35|HBAAAA|AQEAAA|AAAAxx
+1636|3121|0|0|6|16|36|636|1636|1636|1636|72|73|YKAAAA|BQEAAA|HHHHxx
+6857|3122|1|1|7|17|57|857|857|1857|6857|114|115|TDAAAA|CQEAAA|OOOOxx
+7163|3123|1|3|3|3|63|163|1163|2163|7163|126|127|NPAAAA|DQEAAA|VVVVxx
+5040|3124|0|0|0|0|40|40|1040|40|5040|80|81|WLAAAA|EQEAAA|AAAAxx
+6263|3125|1|3|3|3|63|263|263|1263|6263|126|127|XGAAAA|FQEAAA|HHHHxx
+4809|3126|1|1|9|9|9|809|809|4809|4809|18|19|ZCAAAA|GQEAAA|OOOOxx
+900|3127|0|0|0|0|0|900|900|900|900|0|1|QIAAAA|HQEAAA|VVVVxx
+3199|3128|1|3|9|19|99|199|1199|3199|3199|198|199|BTAAAA|IQEAAA|AAAAxx
+4156|3129|0|0|6|16|56|156|156|4156|4156|112|113|WDAAAA|JQEAAA|HHHHxx
+3501|3130|1|1|1|1|1|501|1501|3501|3501|2|3|REAAAA|KQEAAA|OOOOxx
+164|3131|0|0|4|4|64|164|164|164|164|128|129|IGAAAA|LQEAAA|VVVVxx
+9548|3132|0|0|8|8|48|548|1548|4548|9548|96|97|GDAAAA|MQEAAA|AAAAxx
+1149|3133|1|1|9|9|49|149|1149|1149|1149|98|99|FSAAAA|NQEAAA|HHHHxx
+1962|3134|0|2|2|2|62|962|1962|1962|1962|124|125|MXAAAA|OQEAAA|OOOOxx
+4072|3135|0|0|2|12|72|72|72|4072|4072|144|145|QAAAAA|PQEAAA|VVVVxx
+4280|3136|0|0|0|0|80|280|280|4280|4280|160|161|QIAAAA|QQEAAA|AAAAxx
+1398|3137|0|2|8|18|98|398|1398|1398|1398|196|197|UBAAAA|RQEAAA|HHHHxx
+725|3138|1|1|5|5|25|725|725|725|725|50|51|XBAAAA|SQEAAA|OOOOxx
+3988|3139|0|0|8|8|88|988|1988|3988|3988|176|177|KXAAAA|TQEAAA|VVVVxx
+5059|3140|1|3|9|19|59|59|1059|59|5059|118|119|PMAAAA|UQEAAA|AAAAxx
+2632|3141|0|0|2|12|32|632|632|2632|2632|64|65|GXAAAA|VQEAAA|HHHHxx
+1909|3142|1|1|9|9|9|909|1909|1909|1909|18|19|LVAAAA|WQEAAA|OOOOxx
+6827|3143|1|3|7|7|27|827|827|1827|6827|54|55|PCAAAA|XQEAAA|VVVVxx
+8156|3144|0|0|6|16|56|156|156|3156|8156|112|113|SBAAAA|YQEAAA|AAAAxx
+1192|3145|0|0|2|12|92|192|1192|1192|1192|184|185|WTAAAA|ZQEAAA|HHHHxx
+9545|3146|1|1|5|5|45|545|1545|4545|9545|90|91|DDAAAA|AREAAA|OOOOxx
+2249|3147|1|1|9|9|49|249|249|2249|2249|98|99|NIAAAA|BREAAA|VVVVxx
+5580|3148|0|0|0|0|80|580|1580|580|5580|160|161|QGAAAA|CREAAA|AAAAxx
+8403|3149|1|3|3|3|3|403|403|3403|8403|6|7|FLAAAA|DREAAA|HHHHxx
+4024|3150|0|0|4|4|24|24|24|4024|4024|48|49|UYAAAA|EREAAA|OOOOxx
+1866|3151|0|2|6|6|66|866|1866|1866|1866|132|133|UTAAAA|FREAAA|VVVVxx
+9251|3152|1|3|1|11|51|251|1251|4251|9251|102|103|VRAAAA|GREAAA|AAAAxx
+9979|3153|1|3|9|19|79|979|1979|4979|9979|158|159|VTAAAA|HREAAA|HHHHxx
+9899|3154|1|3|9|19|99|899|1899|4899|9899|198|199|TQAAAA|IREAAA|OOOOxx
+2540|3155|0|0|0|0|40|540|540|2540|2540|80|81|STAAAA|JREAAA|VVVVxx
+8957|3156|1|1|7|17|57|957|957|3957|8957|114|115|NGAAAA|KREAAA|AAAAxx
+7702|3157|0|2|2|2|2|702|1702|2702|7702|4|5|GKAAAA|LREAAA|HHHHxx
+4211|3158|1|3|1|11|11|211|211|4211|4211|22|23|ZFAAAA|MREAAA|OOOOxx
+6684|3159|0|0|4|4|84|684|684|1684|6684|168|169|CXAAAA|NREAAA|VVVVxx
+3883|3160|1|3|3|3|83|883|1883|3883|3883|166|167|JTAAAA|OREAAA|AAAAxx
+3531|3161|1|3|1|11|31|531|1531|3531|3531|62|63|VFAAAA|PREAAA|HHHHxx
+9178|3162|0|2|8|18|78|178|1178|4178|9178|156|157|APAAAA|QREAAA|OOOOxx
+3389|3163|1|1|9|9|89|389|1389|3389|3389|178|179|JAAAAA|RREAAA|VVVVxx
+7874|3164|0|2|4|14|74|874|1874|2874|7874|148|149|WQAAAA|SREAAA|AAAAxx
+4522|3165|0|2|2|2|22|522|522|4522|4522|44|45|YRAAAA|TREAAA|HHHHxx
+9399|3166|1|3|9|19|99|399|1399|4399|9399|198|199|NXAAAA|UREAAA|OOOOxx
+9083|3167|1|3|3|3|83|83|1083|4083|9083|166|167|JLAAAA|VREAAA|VVVVxx
+1530|3168|0|2|0|10|30|530|1530|1530|1530|60|61|WGAAAA|WREAAA|AAAAxx
+2360|3169|0|0|0|0|60|360|360|2360|2360|120|121|UMAAAA|XREAAA|HHHHxx
+4908|3170|0|0|8|8|8|908|908|4908|4908|16|17|UGAAAA|YREAAA|OOOOxx
+4628|3171|0|0|8|8|28|628|628|4628|4628|56|57|AWAAAA|ZREAAA|VVVVxx
+3889|3172|1|1|9|9|89|889|1889|3889|3889|178|179|PTAAAA|ASEAAA|AAAAxx
+1331|3173|1|3|1|11|31|331|1331|1331|1331|62|63|FZAAAA|BSEAAA|HHHHxx
+1942|3174|0|2|2|2|42|942|1942|1942|1942|84|85|SWAAAA|CSEAAA|OOOOxx
+4734|3175|0|2|4|14|34|734|734|4734|4734|68|69|CAAAAA|DSEAAA|VVVVxx
+8386|3176|0|2|6|6|86|386|386|3386|8386|172|173|OKAAAA|ESEAAA|AAAAxx
+3586|3177|0|2|6|6|86|586|1586|3586|3586|172|173|YHAAAA|FSEAAA|HHHHxx
+2354|3178|0|2|4|14|54|354|354|2354|2354|108|109|OMAAAA|GSEAAA|OOOOxx
+7108|3179|0|0|8|8|8|108|1108|2108|7108|16|17|KNAAAA|HSEAAA|VVVVxx
+1857|3180|1|1|7|17|57|857|1857|1857|1857|114|115|LTAAAA|ISEAAA|AAAAxx
+2544|3181|0|0|4|4|44|544|544|2544|2544|88|89|WTAAAA|JSEAAA|HHHHxx
+819|3182|1|3|9|19|19|819|819|819|819|38|39|NFAAAA|KSEAAA|OOOOxx
+2878|3183|0|2|8|18|78|878|878|2878|2878|156|157|SGAAAA|LSEAAA|VVVVxx
+1772|3184|0|0|2|12|72|772|1772|1772|1772|144|145|EQAAAA|MSEAAA|AAAAxx
+354|3185|0|2|4|14|54|354|354|354|354|108|109|QNAAAA|NSEAAA|HHHHxx
+3259|3186|1|3|9|19|59|259|1259|3259|3259|118|119|JVAAAA|OSEAAA|OOOOxx
+2170|3187|0|2|0|10|70|170|170|2170|2170|140|141|MFAAAA|PSEAAA|VVVVxx
+1190|3188|0|2|0|10|90|190|1190|1190|1190|180|181|UTAAAA|QSEAAA|AAAAxx
+3607|3189|1|3|7|7|7|607|1607|3607|3607|14|15|TIAAAA|RSEAAA|HHHHxx
+4661|3190|1|1|1|1|61|661|661|4661|4661|122|123|HXAAAA|SSEAAA|OOOOxx
+1796|3191|0|0|6|16|96|796|1796|1796|1796|192|193|CRAAAA|TSEAAA|VVVVxx
+1561|3192|1|1|1|1|61|561|1561|1561|1561|122|123|BIAAAA|USEAAA|AAAAxx
+4336|3193|0|0|6|16|36|336|336|4336|4336|72|73|UKAAAA|VSEAAA|HHHHxx
+7550|3194|0|2|0|10|50|550|1550|2550|7550|100|101|KEAAAA|WSEAAA|OOOOxx
+3238|3195|0|2|8|18|38|238|1238|3238|3238|76|77|OUAAAA|XSEAAA|VVVVxx
+9870|3196|0|2|0|10|70|870|1870|4870|9870|140|141|QPAAAA|YSEAAA|AAAAxx
+6502|3197|0|2|2|2|2|502|502|1502|6502|4|5|CQAAAA|ZSEAAA|HHHHxx
+3903|3198|1|3|3|3|3|903|1903|3903|3903|6|7|DUAAAA|ATEAAA|OOOOxx
+2869|3199|1|1|9|9|69|869|869|2869|2869|138|139|JGAAAA|BTEAAA|VVVVxx
+5072|3200|0|0|2|12|72|72|1072|72|5072|144|145|CNAAAA|CTEAAA|AAAAxx
+1201|3201|1|1|1|1|1|201|1201|1201|1201|2|3|FUAAAA|DTEAAA|HHHHxx
+6245|3202|1|1|5|5|45|245|245|1245|6245|90|91|FGAAAA|ETEAAA|OOOOxx
+1402|3203|0|2|2|2|2|402|1402|1402|1402|4|5|YBAAAA|FTEAAA|VVVVxx
+2594|3204|0|2|4|14|94|594|594|2594|2594|188|189|UVAAAA|GTEAAA|AAAAxx
+9171|3205|1|3|1|11|71|171|1171|4171|9171|142|143|TOAAAA|HTEAAA|HHHHxx
+2620|3206|0|0|0|0|20|620|620|2620|2620|40|41|UWAAAA|ITEAAA|OOOOxx
+6309|3207|1|1|9|9|9|309|309|1309|6309|18|19|RIAAAA|JTEAAA|VVVVxx
+1285|3208|1|1|5|5|85|285|1285|1285|1285|170|171|LXAAAA|KTEAAA|AAAAxx
+5466|3209|0|2|6|6|66|466|1466|466|5466|132|133|GCAAAA|LTEAAA|HHHHxx
+168|3210|0|0|8|8|68|168|168|168|168|136|137|MGAAAA|MTEAAA|OOOOxx
+1410|3211|0|2|0|10|10|410|1410|1410|1410|20|21|GCAAAA|NTEAAA|VVVVxx
+6332|3212|0|0|2|12|32|332|332|1332|6332|64|65|OJAAAA|OTEAAA|AAAAxx
+9530|3213|0|2|0|10|30|530|1530|4530|9530|60|61|OCAAAA|PTEAAA|HHHHxx
+7749|3214|1|1|9|9|49|749|1749|2749|7749|98|99|BMAAAA|QTEAAA|OOOOxx
+3656|3215|0|0|6|16|56|656|1656|3656|3656|112|113|QKAAAA|RTEAAA|VVVVxx
+37|3216|1|1|7|17|37|37|37|37|37|74|75|LBAAAA|STEAAA|AAAAxx
+2744|3217|0|0|4|4|44|744|744|2744|2744|88|89|OBAAAA|TTEAAA|HHHHxx
+4206|3218|0|2|6|6|6|206|206|4206|4206|12|13|UFAAAA|UTEAAA|OOOOxx
+1846|3219|0|2|6|6|46|846|1846|1846|1846|92|93|ATAAAA|VTEAAA|VVVVxx
+9913|3220|1|1|3|13|13|913|1913|4913|9913|26|27|HRAAAA|WTEAAA|AAAAxx
+4078|3221|0|2|8|18|78|78|78|4078|4078|156|157|WAAAAA|XTEAAA|HHHHxx
+2080|3222|0|0|0|0|80|80|80|2080|2080|160|161|ACAAAA|YTEAAA|OOOOxx
+4169|3223|1|1|9|9|69|169|169|4169|4169|138|139|JEAAAA|ZTEAAA|VVVVxx
+2070|3224|0|2|0|10|70|70|70|2070|2070|140|141|QBAAAA|AUEAAA|AAAAxx
+4500|3225|0|0|0|0|0|500|500|4500|4500|0|1|CRAAAA|BUEAAA|HHHHxx
+4123|3226|1|3|3|3|23|123|123|4123|4123|46|47|PCAAAA|CUEAAA|OOOOxx
+5594|3227|0|2|4|14|94|594|1594|594|5594|188|189|EHAAAA|DUEAAA|VVVVxx
+9941|3228|1|1|1|1|41|941|1941|4941|9941|82|83|JSAAAA|EUEAAA|AAAAxx
+7154|3229|0|2|4|14|54|154|1154|2154|7154|108|109|EPAAAA|FUEAAA|HHHHxx
+8340|3230|0|0|0|0|40|340|340|3340|8340|80|81|UIAAAA|GUEAAA|OOOOxx
+7110|3231|0|2|0|10|10|110|1110|2110|7110|20|21|MNAAAA|HUEAAA|VVVVxx
+7795|3232|1|3|5|15|95|795|1795|2795|7795|190|191|VNAAAA|IUEAAA|AAAAxx
+132|3233|0|0|2|12|32|132|132|132|132|64|65|CFAAAA|JUEAAA|HHHHxx
+4603|3234|1|3|3|3|3|603|603|4603|4603|6|7|BVAAAA|KUEAAA|OOOOxx
+9720|3235|0|0|0|0|20|720|1720|4720|9720|40|41|WJAAAA|LUEAAA|VVVVxx
+1460|3236|0|0|0|0|60|460|1460|1460|1460|120|121|EEAAAA|MUEAAA|AAAAxx
+4677|3237|1|1|7|17|77|677|677|4677|4677|154|155|XXAAAA|NUEAAA|HHHHxx
+9272|3238|0|0|2|12|72|272|1272|4272|9272|144|145|QSAAAA|OUEAAA|OOOOxx
+2279|3239|1|3|9|19|79|279|279|2279|2279|158|159|RJAAAA|PUEAAA|VVVVxx
+4587|3240|1|3|7|7|87|587|587|4587|4587|174|175|LUAAAA|QUEAAA|AAAAxx
+2244|3241|0|0|4|4|44|244|244|2244|2244|88|89|IIAAAA|RUEAAA|HHHHxx
+742|3242|0|2|2|2|42|742|742|742|742|84|85|OCAAAA|SUEAAA|OOOOxx
+4426|3243|0|2|6|6|26|426|426|4426|4426|52|53|GOAAAA|TUEAAA|VVVVxx
+4571|3244|1|3|1|11|71|571|571|4571|4571|142|143|VTAAAA|UUEAAA|AAAAxx
+4775|3245|1|3|5|15|75|775|775|4775|4775|150|151|RBAAAA|VUEAAA|HHHHxx
+24|3246|0|0|4|4|24|24|24|24|24|48|49|YAAAAA|WUEAAA|OOOOxx
+4175|3247|1|3|5|15|75|175|175|4175|4175|150|151|PEAAAA|XUEAAA|VVVVxx
+9877|3248|1|1|7|17|77|877|1877|4877|9877|154|155|XPAAAA|YUEAAA|AAAAxx
+7271|3249|1|3|1|11|71|271|1271|2271|7271|142|143|RTAAAA|ZUEAAA|HHHHxx
+5468|3250|0|0|8|8|68|468|1468|468|5468|136|137|ICAAAA|AVEAAA|OOOOxx
+6106|3251|0|2|6|6|6|106|106|1106|6106|12|13|WAAAAA|BVEAAA|VVVVxx
+9005|3252|1|1|5|5|5|5|1005|4005|9005|10|11|JIAAAA|CVEAAA|AAAAxx
+109|3253|1|1|9|9|9|109|109|109|109|18|19|FEAAAA|DVEAAA|HHHHxx
+6365|3254|1|1|5|5|65|365|365|1365|6365|130|131|VKAAAA|EVEAAA|OOOOxx
+7437|3255|1|1|7|17|37|437|1437|2437|7437|74|75|BAAAAA|FVEAAA|VVVVxx
+7979|3256|1|3|9|19|79|979|1979|2979|7979|158|159|XUAAAA|GVEAAA|AAAAxx
+6050|3257|0|2|0|10|50|50|50|1050|6050|100|101|SYAAAA|HVEAAA|HHHHxx
+2853|3258|1|1|3|13|53|853|853|2853|2853|106|107|TFAAAA|IVEAAA|OOOOxx
+7603|3259|1|3|3|3|3|603|1603|2603|7603|6|7|LGAAAA|JVEAAA|VVVVxx
+483|3260|1|3|3|3|83|483|483|483|483|166|167|PSAAAA|KVEAAA|AAAAxx
+5994|3261|0|2|4|14|94|994|1994|994|5994|188|189|OWAAAA|LVEAAA|HHHHxx
+6708|3262|0|0|8|8|8|708|708|1708|6708|16|17|AYAAAA|MVEAAA|OOOOxx
+5090|3263|0|2|0|10|90|90|1090|90|5090|180|181|UNAAAA|NVEAAA|VVVVxx
+4608|3264|0|0|8|8|8|608|608|4608|4608|16|17|GVAAAA|OVEAAA|AAAAxx
+4551|3265|1|3|1|11|51|551|551|4551|4551|102|103|BTAAAA|PVEAAA|HHHHxx
+5437|3266|1|1|7|17|37|437|1437|437|5437|74|75|DBAAAA|QVEAAA|OOOOxx
+4130|3267|0|2|0|10|30|130|130|4130|4130|60|61|WCAAAA|RVEAAA|VVVVxx
+6363|3268|1|3|3|3|63|363|363|1363|6363|126|127|TKAAAA|SVEAAA|AAAAxx
+1499|3269|1|3|9|19|99|499|1499|1499|1499|198|199|RFAAAA|TVEAAA|HHHHxx
+384|3270|0|0|4|4|84|384|384|384|384|168|169|UOAAAA|UVEAAA|OOOOxx
+2266|3271|0|2|6|6|66|266|266|2266|2266|132|133|EJAAAA|VVEAAA|VVVVxx
+6018|3272|0|2|8|18|18|18|18|1018|6018|36|37|MXAAAA|WVEAAA|AAAAxx
+7915|3273|1|3|5|15|15|915|1915|2915|7915|30|31|LSAAAA|XVEAAA|HHHHxx
+6167|3274|1|3|7|7|67|167|167|1167|6167|134|135|FDAAAA|YVEAAA|OOOOxx
+9988|3275|0|0|8|8|88|988|1988|4988|9988|176|177|EUAAAA|ZVEAAA|VVVVxx
+6599|3276|1|3|9|19|99|599|599|1599|6599|198|199|VTAAAA|AWEAAA|AAAAxx
+1693|3277|1|1|3|13|93|693|1693|1693|1693|186|187|DNAAAA|BWEAAA|HHHHxx
+5971|3278|1|3|1|11|71|971|1971|971|5971|142|143|RVAAAA|CWEAAA|OOOOxx
+8470|3279|0|2|0|10|70|470|470|3470|8470|140|141|UNAAAA|DWEAAA|VVVVxx
+2807|3280|1|3|7|7|7|807|807|2807|2807|14|15|ZDAAAA|EWEAAA|AAAAxx
+1120|3281|0|0|0|0|20|120|1120|1120|1120|40|41|CRAAAA|FWEAAA|HHHHxx
+5924|3282|0|0|4|4|24|924|1924|924|5924|48|49|WTAAAA|GWEAAA|OOOOxx
+9025|3283|1|1|5|5|25|25|1025|4025|9025|50|51|DJAAAA|HWEAAA|VVVVxx
+9454|3284|0|2|4|14|54|454|1454|4454|9454|108|109|QZAAAA|IWEAAA|AAAAxx
+2259|3285|1|3|9|19|59|259|259|2259|2259|118|119|XIAAAA|JWEAAA|HHHHxx
+5249|3286|1|1|9|9|49|249|1249|249|5249|98|99|XTAAAA|KWEAAA|OOOOxx
+6350|3287|0|2|0|10|50|350|350|1350|6350|100|101|GKAAAA|LWEAAA|VVVVxx
+2930|3288|0|2|0|10|30|930|930|2930|2930|60|61|SIAAAA|MWEAAA|AAAAxx
+6055|3289|1|3|5|15|55|55|55|1055|6055|110|111|XYAAAA|NWEAAA|HHHHxx
+7691|3290|1|3|1|11|91|691|1691|2691|7691|182|183|VJAAAA|OWEAAA|OOOOxx
+1573|3291|1|1|3|13|73|573|1573|1573|1573|146|147|NIAAAA|PWEAAA|VVVVxx
+9943|3292|1|3|3|3|43|943|1943|4943|9943|86|87|LSAAAA|QWEAAA|AAAAxx
+3085|3293|1|1|5|5|85|85|1085|3085|3085|170|171|ROAAAA|RWEAAA|HHHHxx
+5928|3294|0|0|8|8|28|928|1928|928|5928|56|57|AUAAAA|SWEAAA|OOOOxx
+887|3295|1|3|7|7|87|887|887|887|887|174|175|DIAAAA|TWEAAA|VVVVxx
+4630|3296|0|2|0|10|30|630|630|4630|4630|60|61|CWAAAA|UWEAAA|AAAAxx
+9827|3297|1|3|7|7|27|827|1827|4827|9827|54|55|ZNAAAA|VWEAAA|HHHHxx
+8926|3298|0|2|6|6|26|926|926|3926|8926|52|53|IFAAAA|WWEAAA|OOOOxx
+5726|3299|0|2|6|6|26|726|1726|726|5726|52|53|GMAAAA|XWEAAA|VVVVxx
+1569|3300|1|1|9|9|69|569|1569|1569|1569|138|139|JIAAAA|YWEAAA|AAAAxx
+8074|3301|0|2|4|14|74|74|74|3074|8074|148|149|OYAAAA|ZWEAAA|HHHHxx
+7909|3302|1|1|9|9|9|909|1909|2909|7909|18|19|FSAAAA|AXEAAA|OOOOxx
+8367|3303|1|3|7|7|67|367|367|3367|8367|134|135|VJAAAA|BXEAAA|VVVVxx
+7217|3304|1|1|7|17|17|217|1217|2217|7217|34|35|PRAAAA|CXEAAA|AAAAxx
+5254|3305|0|2|4|14|54|254|1254|254|5254|108|109|CUAAAA|DXEAAA|HHHHxx
+1181|3306|1|1|1|1|81|181|1181|1181|1181|162|163|LTAAAA|EXEAAA|OOOOxx
+6907|3307|1|3|7|7|7|907|907|1907|6907|14|15|RFAAAA|FXEAAA|VVVVxx
+5508|3308|0|0|8|8|8|508|1508|508|5508|16|17|WDAAAA|GXEAAA|AAAAxx
+4782|3309|0|2|2|2|82|782|782|4782|4782|164|165|YBAAAA|HXEAAA|HHHHxx
+793|3310|1|1|3|13|93|793|793|793|793|186|187|NEAAAA|IXEAAA|OOOOxx
+5740|3311|0|0|0|0|40|740|1740|740|5740|80|81|UMAAAA|JXEAAA|VVVVxx
+3107|3312|1|3|7|7|7|107|1107|3107|3107|14|15|NPAAAA|KXEAAA|AAAAxx
+1197|3313|1|1|7|17|97|197|1197|1197|1197|194|195|BUAAAA|LXEAAA|HHHHxx
+4376|3314|0|0|6|16|76|376|376|4376|4376|152|153|IMAAAA|MXEAAA|OOOOxx
+6226|3315|0|2|6|6|26|226|226|1226|6226|52|53|MFAAAA|NXEAAA|VVVVxx
+5033|3316|1|1|3|13|33|33|1033|33|5033|66|67|PLAAAA|OXEAAA|AAAAxx
+5494|3317|0|2|4|14|94|494|1494|494|5494|188|189|IDAAAA|PXEAAA|HHHHxx
+3244|3318|0|0|4|4|44|244|1244|3244|3244|88|89|UUAAAA|QXEAAA|OOOOxx
+7670|3319|0|2|0|10|70|670|1670|2670|7670|140|141|AJAAAA|RXEAAA|VVVVxx
+9273|3320|1|1|3|13|73|273|1273|4273|9273|146|147|RSAAAA|SXEAAA|AAAAxx
+5248|3321|0|0|8|8|48|248|1248|248|5248|96|97|WTAAAA|TXEAAA|HHHHxx
+3381|3322|1|1|1|1|81|381|1381|3381|3381|162|163|BAAAAA|UXEAAA|OOOOxx
+4136|3323|0|0|6|16|36|136|136|4136|4136|72|73|CDAAAA|VXEAAA|VVVVxx
+4163|3324|1|3|3|3|63|163|163|4163|4163|126|127|DEAAAA|WXEAAA|AAAAxx
+4270|3325|0|2|0|10|70|270|270|4270|4270|140|141|GIAAAA|XXEAAA|HHHHxx
+1729|3326|1|1|9|9|29|729|1729|1729|1729|58|59|NOAAAA|YXEAAA|OOOOxx
+2778|3327|0|2|8|18|78|778|778|2778|2778|156|157|WCAAAA|ZXEAAA|VVVVxx
+5082|3328|0|2|2|2|82|82|1082|82|5082|164|165|MNAAAA|AYEAAA|AAAAxx
+870|3329|0|2|0|10|70|870|870|870|870|140|141|MHAAAA|BYEAAA|HHHHxx
+4192|3330|0|0|2|12|92|192|192|4192|4192|184|185|GFAAAA|CYEAAA|OOOOxx
+308|3331|0|0|8|8|8|308|308|308|308|16|17|WLAAAA|DYEAAA|VVVVxx
+6783|3332|1|3|3|3|83|783|783|1783|6783|166|167|XAAAAA|EYEAAA|AAAAxx
+7611|3333|1|3|1|11|11|611|1611|2611|7611|22|23|TGAAAA|FYEAAA|HHHHxx
+4221|3334|1|1|1|1|21|221|221|4221|4221|42|43|JGAAAA|GYEAAA|OOOOxx
+6353|3335|1|1|3|13|53|353|353|1353|6353|106|107|JKAAAA|HYEAAA|VVVVxx
+1830|3336|0|2|0|10|30|830|1830|1830|1830|60|61|KSAAAA|IYEAAA|AAAAxx
+2437|3337|1|1|7|17|37|437|437|2437|2437|74|75|TPAAAA|JYEAAA|HHHHxx
+3360|3338|0|0|0|0|60|360|1360|3360|3360|120|121|GZAAAA|KYEAAA|OOOOxx
+1829|3339|1|1|9|9|29|829|1829|1829|1829|58|59|JSAAAA|LYEAAA|VVVVxx
+9475|3340|1|3|5|15|75|475|1475|4475|9475|150|151|LAAAAA|MYEAAA|AAAAxx
+4566|3341|0|2|6|6|66|566|566|4566|4566|132|133|QTAAAA|NYEAAA|HHHHxx
+9944|3342|0|0|4|4|44|944|1944|4944|9944|88|89|MSAAAA|OYEAAA|OOOOxx
+6054|3343|0|2|4|14|54|54|54|1054|6054|108|109|WYAAAA|PYEAAA|VVVVxx
+4722|3344|0|2|2|2|22|722|722|4722|4722|44|45|QZAAAA|QYEAAA|AAAAxx
+2779|3345|1|3|9|19|79|779|779|2779|2779|158|159|XCAAAA|RYEAAA|HHHHxx
+8051|3346|1|3|1|11|51|51|51|3051|8051|102|103|RXAAAA|SYEAAA|OOOOxx
+9671|3347|1|3|1|11|71|671|1671|4671|9671|142|143|ZHAAAA|TYEAAA|VVVVxx
+6084|3348|0|0|4|4|84|84|84|1084|6084|168|169|AAAAAA|UYEAAA|AAAAxx
+3729|3349|1|1|9|9|29|729|1729|3729|3729|58|59|LNAAAA|VYEAAA|HHHHxx
+6627|3350|1|3|7|7|27|627|627|1627|6627|54|55|XUAAAA|WYEAAA|OOOOxx
+4769|3351|1|1|9|9|69|769|769|4769|4769|138|139|LBAAAA|XYEAAA|VVVVxx
+2224|3352|0|0|4|4|24|224|224|2224|2224|48|49|OHAAAA|YYEAAA|AAAAxx
+1404|3353|0|0|4|4|4|404|1404|1404|1404|8|9|ACAAAA|ZYEAAA|HHHHxx
+8532|3354|0|0|2|12|32|532|532|3532|8532|64|65|EQAAAA|AZEAAA|OOOOxx
+6759|3355|1|3|9|19|59|759|759|1759|6759|118|119|ZZAAAA|BZEAAA|VVVVxx
+6404|3356|0|0|4|4|4|404|404|1404|6404|8|9|IMAAAA|CZEAAA|AAAAxx
+3144|3357|0|0|4|4|44|144|1144|3144|3144|88|89|YQAAAA|DZEAAA|HHHHxx
+973|3358|1|1|3|13|73|973|973|973|973|146|147|LLAAAA|EZEAAA|OOOOxx
+9789|3359|1|1|9|9|89|789|1789|4789|9789|178|179|NMAAAA|FZEAAA|VVVVxx
+6181|3360|1|1|1|1|81|181|181|1181|6181|162|163|TDAAAA|GZEAAA|AAAAxx
+1519|3361|1|3|9|19|19|519|1519|1519|1519|38|39|LGAAAA|HZEAAA|HHHHxx
+9729|3362|1|1|9|9|29|729|1729|4729|9729|58|59|FKAAAA|IZEAAA|OOOOxx
+8167|3363|1|3|7|7|67|167|167|3167|8167|134|135|DCAAAA|JZEAAA|VVVVxx
+3830|3364|0|2|0|10|30|830|1830|3830|3830|60|61|IRAAAA|KZEAAA|AAAAxx
+6286|3365|0|2|6|6|86|286|286|1286|6286|172|173|UHAAAA|LZEAAA|HHHHxx
+3047|3366|1|3|7|7|47|47|1047|3047|3047|94|95|FNAAAA|MZEAAA|OOOOxx
+3183|3367|1|3|3|3|83|183|1183|3183|3183|166|167|LSAAAA|NZEAAA|VVVVxx
+6687|3368|1|3|7|7|87|687|687|1687|6687|174|175|FXAAAA|OZEAAA|AAAAxx
+2783|3369|1|3|3|3|83|783|783|2783|2783|166|167|BDAAAA|PZEAAA|HHHHxx
+9920|3370|0|0|0|0|20|920|1920|4920|9920|40|41|ORAAAA|QZEAAA|OOOOxx
+4847|3371|1|3|7|7|47|847|847|4847|4847|94|95|LEAAAA|RZEAAA|VVVVxx
+3645|3372|1|1|5|5|45|645|1645|3645|3645|90|91|FKAAAA|SZEAAA|AAAAxx
+7406|3373|0|2|6|6|6|406|1406|2406|7406|12|13|WYAAAA|TZEAAA|HHHHxx
+6003|3374|1|3|3|3|3|3|3|1003|6003|6|7|XWAAAA|UZEAAA|OOOOxx
+3408|3375|0|0|8|8|8|408|1408|3408|3408|16|17|CBAAAA|VZEAAA|VVVVxx
+4243|3376|1|3|3|3|43|243|243|4243|4243|86|87|FHAAAA|WZEAAA|AAAAxx
+1622|3377|0|2|2|2|22|622|1622|1622|1622|44|45|KKAAAA|XZEAAA|HHHHxx
+5319|3378|1|3|9|19|19|319|1319|319|5319|38|39|PWAAAA|YZEAAA|OOOOxx
+4033|3379|1|1|3|13|33|33|33|4033|4033|66|67|DZAAAA|ZZEAAA|VVVVxx
+8573|3380|1|1|3|13|73|573|573|3573|8573|146|147|TRAAAA|AAFAAA|AAAAxx
+8404|3381|0|0|4|4|4|404|404|3404|8404|8|9|GLAAAA|BAFAAA|HHHHxx
+6993|3382|1|1|3|13|93|993|993|1993|6993|186|187|ZIAAAA|CAFAAA|OOOOxx
+660|3383|0|0|0|0|60|660|660|660|660|120|121|KZAAAA|DAFAAA|VVVVxx
+1136|3384|0|0|6|16|36|136|1136|1136|1136|72|73|SRAAAA|EAFAAA|AAAAxx
+3393|3385|1|1|3|13|93|393|1393|3393|3393|186|187|NAAAAA|FAFAAA|HHHHxx
+9743|3386|1|3|3|3|43|743|1743|4743|9743|86|87|TKAAAA|GAFAAA|OOOOxx
+9705|3387|1|1|5|5|5|705|1705|4705|9705|10|11|HJAAAA|HAFAAA|VVVVxx
+6960|3388|0|0|0|0|60|960|960|1960|6960|120|121|SHAAAA|IAFAAA|AAAAxx
+2753|3389|1|1|3|13|53|753|753|2753|2753|106|107|XBAAAA|JAFAAA|HHHHxx
+906|3390|0|2|6|6|6|906|906|906|906|12|13|WIAAAA|KAFAAA|OOOOxx
+999|3391|1|3|9|19|99|999|999|999|999|198|199|LMAAAA|LAFAAA|VVVVxx
+6927|3392|1|3|7|7|27|927|927|1927|6927|54|55|LGAAAA|MAFAAA|AAAAxx
+4846|3393|0|2|6|6|46|846|846|4846|4846|92|93|KEAAAA|NAFAAA|HHHHxx
+676|3394|0|0|6|16|76|676|676|676|676|152|153|AAAAAA|OAFAAA|OOOOxx
+8612|3395|0|0|2|12|12|612|612|3612|8612|24|25|GTAAAA|PAFAAA|VVVVxx
+4111|3396|1|3|1|11|11|111|111|4111|4111|22|23|DCAAAA|QAFAAA|AAAAxx
+9994|3397|0|2|4|14|94|994|1994|4994|9994|188|189|KUAAAA|RAFAAA|HHHHxx
+4399|3398|1|3|9|19|99|399|399|4399|4399|198|199|FNAAAA|SAFAAA|OOOOxx
+4464|3399|0|0|4|4|64|464|464|4464|4464|128|129|SPAAAA|TAFAAA|VVVVxx
+7316|3400|0|0|6|16|16|316|1316|2316|7316|32|33|KVAAAA|UAFAAA|AAAAxx
+8982|3401|0|2|2|2|82|982|982|3982|8982|164|165|MHAAAA|VAFAAA|HHHHxx
+1871|3402|1|3|1|11|71|871|1871|1871|1871|142|143|ZTAAAA|WAFAAA|OOOOxx
+4082|3403|0|2|2|2|82|82|82|4082|4082|164|165|ABAAAA|XAFAAA|VVVVxx
+3949|3404|1|1|9|9|49|949|1949|3949|3949|98|99|XVAAAA|YAFAAA|AAAAxx
+9352|3405|0|0|2|12|52|352|1352|4352|9352|104|105|SVAAAA|ZAFAAA|HHHHxx
+9638|3406|0|2|8|18|38|638|1638|4638|9638|76|77|SGAAAA|ABFAAA|OOOOxx
+8177|3407|1|1|7|17|77|177|177|3177|8177|154|155|NCAAAA|BBFAAA|VVVVxx
+3499|3408|1|3|9|19|99|499|1499|3499|3499|198|199|PEAAAA|CBFAAA|AAAAxx
+4233|3409|1|1|3|13|33|233|233|4233|4233|66|67|VGAAAA|DBFAAA|HHHHxx
+1953|3410|1|1|3|13|53|953|1953|1953|1953|106|107|DXAAAA|EBFAAA|OOOOxx
+7372|3411|0|0|2|12|72|372|1372|2372|7372|144|145|OXAAAA|FBFAAA|VVVVxx
+5127|3412|1|3|7|7|27|127|1127|127|5127|54|55|FPAAAA|GBFAAA|AAAAxx
+4384|3413|0|0|4|4|84|384|384|4384|4384|168|169|QMAAAA|HBFAAA|HHHHxx
+9964|3414|0|0|4|4|64|964|1964|4964|9964|128|129|GTAAAA|IBFAAA|OOOOxx
+5392|3415|0|0|2|12|92|392|1392|392|5392|184|185|KZAAAA|JBFAAA|VVVVxx
+616|3416|0|0|6|16|16|616|616|616|616|32|33|SXAAAA|KBFAAA|AAAAxx
+591|3417|1|3|1|11|91|591|591|591|591|182|183|TWAAAA|LBFAAA|HHHHxx
+6422|3418|0|2|2|2|22|422|422|1422|6422|44|45|ANAAAA|MBFAAA|OOOOxx
+6551|3419|1|3|1|11|51|551|551|1551|6551|102|103|ZRAAAA|NBFAAA|VVVVxx
+9286|3420|0|2|6|6|86|286|1286|4286|9286|172|173|ETAAAA|OBFAAA|AAAAxx
+3817|3421|1|1|7|17|17|817|1817|3817|3817|34|35|VQAAAA|PBFAAA|HHHHxx
+7717|3422|1|1|7|17|17|717|1717|2717|7717|34|35|VKAAAA|QBFAAA|OOOOxx
+8718|3423|0|2|8|18|18|718|718|3718|8718|36|37|IXAAAA|RBFAAA|VVVVxx
+8608|3424|0|0|8|8|8|608|608|3608|8608|16|17|CTAAAA|SBFAAA|AAAAxx
+2242|3425|0|2|2|2|42|242|242|2242|2242|84|85|GIAAAA|TBFAAA|HHHHxx
+4811|3426|1|3|1|11|11|811|811|4811|4811|22|23|BDAAAA|UBFAAA|OOOOxx
+6838|3427|0|2|8|18|38|838|838|1838|6838|76|77|ADAAAA|VBFAAA|VVVVxx
+787|3428|1|3|7|7|87|787|787|787|787|174|175|HEAAAA|WBFAAA|AAAAxx
+7940|3429|0|0|0|0|40|940|1940|2940|7940|80|81|KTAAAA|XBFAAA|HHHHxx
+336|3430|0|0|6|16|36|336|336|336|336|72|73|YMAAAA|YBFAAA|OOOOxx
+9859|3431|1|3|9|19|59|859|1859|4859|9859|118|119|FPAAAA|ZBFAAA|VVVVxx
+3864|3432|0|0|4|4|64|864|1864|3864|3864|128|129|QSAAAA|ACFAAA|AAAAxx
+7162|3433|0|2|2|2|62|162|1162|2162|7162|124|125|MPAAAA|BCFAAA|HHHHxx
+2071|3434|1|3|1|11|71|71|71|2071|2071|142|143|RBAAAA|CCFAAA|OOOOxx
+7469|3435|1|1|9|9|69|469|1469|2469|7469|138|139|HBAAAA|DCFAAA|VVVVxx
+2917|3436|1|1|7|17|17|917|917|2917|2917|34|35|FIAAAA|ECFAAA|AAAAxx
+7486|3437|0|2|6|6|86|486|1486|2486|7486|172|173|YBAAAA|FCFAAA|HHHHxx
+3355|3438|1|3|5|15|55|355|1355|3355|3355|110|111|BZAAAA|GCFAAA|OOOOxx
+6998|3439|0|2|8|18|98|998|998|1998|6998|196|197|EJAAAA|HCFAAA|VVVVxx
+5498|3440|0|2|8|18|98|498|1498|498|5498|196|197|MDAAAA|ICFAAA|AAAAxx
+5113|3441|1|1|3|13|13|113|1113|113|5113|26|27|ROAAAA|JCFAAA|HHHHxx
+2846|3442|0|2|6|6|46|846|846|2846|2846|92|93|MFAAAA|KCFAAA|OOOOxx
+6834|3443|0|2|4|14|34|834|834|1834|6834|68|69|WCAAAA|LCFAAA|VVVVxx
+8925|3444|1|1|5|5|25|925|925|3925|8925|50|51|HFAAAA|MCFAAA|AAAAxx
+2757|3445|1|1|7|17|57|757|757|2757|2757|114|115|BCAAAA|NCFAAA|HHHHxx
+2775|3446|1|3|5|15|75|775|775|2775|2775|150|151|TCAAAA|OCFAAA|OOOOxx
+6182|3447|0|2|2|2|82|182|182|1182|6182|164|165|UDAAAA|PCFAAA|VVVVxx
+4488|3448|0|0|8|8|88|488|488|4488|4488|176|177|QQAAAA|QCFAAA|AAAAxx
+8523|3449|1|3|3|3|23|523|523|3523|8523|46|47|VPAAAA|RCFAAA|HHHHxx
+52|3450|0|0|2|12|52|52|52|52|52|104|105|ACAAAA|SCFAAA|OOOOxx
+7251|3451|1|3|1|11|51|251|1251|2251|7251|102|103|XSAAAA|TCFAAA|VVVVxx
+6130|3452|0|2|0|10|30|130|130|1130|6130|60|61|UBAAAA|UCFAAA|AAAAxx
+205|3453|1|1|5|5|5|205|205|205|205|10|11|XHAAAA|VCFAAA|HHHHxx
+1186|3454|0|2|6|6|86|186|1186|1186|1186|172|173|QTAAAA|WCFAAA|OOOOxx
+1738|3455|0|2|8|18|38|738|1738|1738|1738|76|77|WOAAAA|XCFAAA|VVVVxx
+9485|3456|1|1|5|5|85|485|1485|4485|9485|170|171|VAAAAA|YCFAAA|AAAAxx
+4235|3457|1|3|5|15|35|235|235|4235|4235|70|71|XGAAAA|ZCFAAA|HHHHxx
+7891|3458|1|3|1|11|91|891|1891|2891|7891|182|183|NRAAAA|ADFAAA|OOOOxx
+4960|3459|0|0|0|0|60|960|960|4960|4960|120|121|UIAAAA|BDFAAA|VVVVxx
+8911|3460|1|3|1|11|11|911|911|3911|8911|22|23|TEAAAA|CDFAAA|AAAAxx
+1219|3461|1|3|9|19|19|219|1219|1219|1219|38|39|XUAAAA|DDFAAA|HHHHxx
+9652|3462|0|0|2|12|52|652|1652|4652|9652|104|105|GHAAAA|EDFAAA|OOOOxx
+9715|3463|1|3|5|15|15|715|1715|4715|9715|30|31|RJAAAA|FDFAAA|VVVVxx
+6629|3464|1|1|9|9|29|629|629|1629|6629|58|59|ZUAAAA|GDFAAA|AAAAxx
+700|3465|0|0|0|0|0|700|700|700|700|0|1|YAAAAA|HDFAAA|HHHHxx
+9819|3466|1|3|9|19|19|819|1819|4819|9819|38|39|RNAAAA|IDFAAA|OOOOxx
+5188|3467|0|0|8|8|88|188|1188|188|5188|176|177|ORAAAA|JDFAAA|VVVVxx
+5367|3468|1|3|7|7|67|367|1367|367|5367|134|135|LYAAAA|KDFAAA|AAAAxx
+6447|3469|1|3|7|7|47|447|447|1447|6447|94|95|ZNAAAA|LDFAAA|HHHHxx
+720|3470|0|0|0|0|20|720|720|720|720|40|41|SBAAAA|MDFAAA|OOOOxx
+9157|3471|1|1|7|17|57|157|1157|4157|9157|114|115|FOAAAA|NDFAAA|VVVVxx
+1082|3472|0|2|2|2|82|82|1082|1082|1082|164|165|QPAAAA|ODFAAA|AAAAxx
+3179|3473|1|3|9|19|79|179|1179|3179|3179|158|159|HSAAAA|PDFAAA|HHHHxx
+4818|3474|0|2|8|18|18|818|818|4818|4818|36|37|IDAAAA|QDFAAA|OOOOxx
+7607|3475|1|3|7|7|7|607|1607|2607|7607|14|15|PGAAAA|RDFAAA|VVVVxx
+2352|3476|0|0|2|12|52|352|352|2352|2352|104|105|MMAAAA|SDFAAA|AAAAxx
+1170|3477|0|2|0|10|70|170|1170|1170|1170|140|141|ATAAAA|TDFAAA|HHHHxx
+4269|3478|1|1|9|9|69|269|269|4269|4269|138|139|FIAAAA|UDFAAA|OOOOxx
+8767|3479|1|3|7|7|67|767|767|3767|8767|134|135|FZAAAA|VDFAAA|VVVVxx
+3984|3480|0|0|4|4|84|984|1984|3984|3984|168|169|GXAAAA|WDFAAA|AAAAxx
+3190|3481|0|2|0|10|90|190|1190|3190|3190|180|181|SSAAAA|XDFAAA|HHHHxx
+7456|3482|0|0|6|16|56|456|1456|2456|7456|112|113|UAAAAA|YDFAAA|OOOOxx
+4348|3483|0|0|8|8|48|348|348|4348|4348|96|97|GLAAAA|ZDFAAA|VVVVxx
+3150|3484|0|2|0|10|50|150|1150|3150|3150|100|101|ERAAAA|AEFAAA|AAAAxx
+8780|3485|0|0|0|0|80|780|780|3780|8780|160|161|SZAAAA|BEFAAA|HHHHxx
+2553|3486|1|1|3|13|53|553|553|2553|2553|106|107|FUAAAA|CEFAAA|OOOOxx
+7526|3487|0|2|6|6|26|526|1526|2526|7526|52|53|MDAAAA|DEFAAA|VVVVxx
+2031|3488|1|3|1|11|31|31|31|2031|2031|62|63|DAAAAA|EEFAAA|AAAAxx
+8793|3489|1|1|3|13|93|793|793|3793|8793|186|187|FAAAAA|FEFAAA|HHHHxx
+1122|3490|0|2|2|2|22|122|1122|1122|1122|44|45|ERAAAA|GEFAAA|OOOOxx
+1855|3491|1|3|5|15|55|855|1855|1855|1855|110|111|JTAAAA|HEFAAA|VVVVxx
+6613|3492|1|1|3|13|13|613|613|1613|6613|26|27|JUAAAA|IEFAAA|AAAAxx
+3231|3493|1|3|1|11|31|231|1231|3231|3231|62|63|HUAAAA|JEFAAA|HHHHxx
+9101|3494|1|1|1|1|1|101|1101|4101|9101|2|3|BMAAAA|KEFAAA|OOOOxx
+4937|3495|1|1|7|17|37|937|937|4937|4937|74|75|XHAAAA|LEFAAA|VVVVxx
+666|3496|0|2|6|6|66|666|666|666|666|132|133|QZAAAA|MEFAAA|AAAAxx
+8943|3497|1|3|3|3|43|943|943|3943|8943|86|87|ZFAAAA|NEFAAA|HHHHxx
+6164|3498|0|0|4|4|64|164|164|1164|6164|128|129|CDAAAA|OEFAAA|OOOOxx
+1081|3499|1|1|1|1|81|81|1081|1081|1081|162|163|PPAAAA|PEFAAA|VVVVxx
+210|3500|0|2|0|10|10|210|210|210|210|20|21|CIAAAA|QEFAAA|AAAAxx
+6024|3501|0|0|4|4|24|24|24|1024|6024|48|49|SXAAAA|REFAAA|HHHHxx
+5715|3502|1|3|5|15|15|715|1715|715|5715|30|31|VLAAAA|SEFAAA|OOOOxx
+8938|3503|0|2|8|18|38|938|938|3938|8938|76|77|UFAAAA|TEFAAA|VVVVxx
+1326|3504|0|2|6|6|26|326|1326|1326|1326|52|53|AZAAAA|UEFAAA|AAAAxx
+7111|3505|1|3|1|11|11|111|1111|2111|7111|22|23|NNAAAA|VEFAAA|HHHHxx
+757|3506|1|1|7|17|57|757|757|757|757|114|115|DDAAAA|WEFAAA|OOOOxx
+8933|3507|1|1|3|13|33|933|933|3933|8933|66|67|PFAAAA|XEFAAA|VVVVxx
+6495|3508|1|3|5|15|95|495|495|1495|6495|190|191|VPAAAA|YEFAAA|AAAAxx
+3134|3509|0|2|4|14|34|134|1134|3134|3134|68|69|OQAAAA|ZEFAAA|HHHHxx
+1304|3510|0|0|4|4|4|304|1304|1304|1304|8|9|EYAAAA|AFFAAA|OOOOxx
+1835|3511|1|3|5|15|35|835|1835|1835|1835|70|71|PSAAAA|BFFAAA|VVVVxx
+7275|3512|1|3|5|15|75|275|1275|2275|7275|150|151|VTAAAA|CFFAAA|AAAAxx
+7337|3513|1|1|7|17|37|337|1337|2337|7337|74|75|FWAAAA|DFFAAA|HHHHxx
+1282|3514|0|2|2|2|82|282|1282|1282|1282|164|165|IXAAAA|EFFAAA|OOOOxx
+6566|3515|0|2|6|6|66|566|566|1566|6566|132|133|OSAAAA|FFFAAA|VVVVxx
+3786|3516|0|2|6|6|86|786|1786|3786|3786|172|173|QPAAAA|GFFAAA|AAAAxx
+5741|3517|1|1|1|1|41|741|1741|741|5741|82|83|VMAAAA|HFFAAA|HHHHxx
+6076|3518|0|0|6|16|76|76|76|1076|6076|152|153|SZAAAA|IFFAAA|OOOOxx
+9998|3519|0|2|8|18|98|998|1998|4998|9998|196|197|OUAAAA|JFFAAA|VVVVxx
+6268|3520|0|0|8|8|68|268|268|1268|6268|136|137|CHAAAA|KFFAAA|AAAAxx
+9647|3521|1|3|7|7|47|647|1647|4647|9647|94|95|BHAAAA|LFFAAA|HHHHxx
+4877|3522|1|1|7|17|77|877|877|4877|4877|154|155|PFAAAA|MFFAAA|OOOOxx
+2652|3523|0|0|2|12|52|652|652|2652|2652|104|105|AYAAAA|NFFAAA|VVVVxx
+1247|3524|1|3|7|7|47|247|1247|1247|1247|94|95|ZVAAAA|OFFAAA|AAAAxx
+2721|3525|1|1|1|1|21|721|721|2721|2721|42|43|RAAAAA|PFFAAA|HHHHxx
+5968|3526|0|0|8|8|68|968|1968|968|5968|136|137|OVAAAA|QFFAAA|OOOOxx
+9570|3527|0|2|0|10|70|570|1570|4570|9570|140|141|CEAAAA|RFFAAA|VVVVxx
+6425|3528|1|1|5|5|25|425|425|1425|6425|50|51|DNAAAA|SFFAAA|AAAAxx
+5451|3529|1|3|1|11|51|451|1451|451|5451|102|103|RBAAAA|TFFAAA|HHHHxx
+5668|3530|0|0|8|8|68|668|1668|668|5668|136|137|AKAAAA|UFFAAA|OOOOxx
+9493|3531|1|1|3|13|93|493|1493|4493|9493|186|187|DBAAAA|VFFAAA|VVVVxx
+7973|3532|1|1|3|13|73|973|1973|2973|7973|146|147|RUAAAA|WFFAAA|AAAAxx
+8250|3533|0|2|0|10|50|250|250|3250|8250|100|101|IFAAAA|XFFAAA|HHHHxx
+82|3534|0|2|2|2|82|82|82|82|82|164|165|EDAAAA|YFFAAA|OOOOxx
+6258|3535|0|2|8|18|58|258|258|1258|6258|116|117|SGAAAA|ZFFAAA|VVVVxx
+9978|3536|0|2|8|18|78|978|1978|4978|9978|156|157|UTAAAA|AGFAAA|AAAAxx
+6930|3537|0|2|0|10|30|930|930|1930|6930|60|61|OGAAAA|BGFAAA|HHHHxx
+3746|3538|0|2|6|6|46|746|1746|3746|3746|92|93|COAAAA|CGFAAA|OOOOxx
+7065|3539|1|1|5|5|65|65|1065|2065|7065|130|131|TLAAAA|DGFAAA|VVVVxx
+4281|3540|1|1|1|1|81|281|281|4281|4281|162|163|RIAAAA|EGFAAA|AAAAxx
+4367|3541|1|3|7|7|67|367|367|4367|4367|134|135|ZLAAAA|FGFAAA|HHHHxx
+9526|3542|0|2|6|6|26|526|1526|4526|9526|52|53|KCAAAA|GGFAAA|OOOOxx
+5880|3543|0|0|0|0|80|880|1880|880|5880|160|161|ESAAAA|HGFAAA|VVVVxx
+8480|3544|0|0|0|0|80|480|480|3480|8480|160|161|EOAAAA|IGFAAA|AAAAxx
+2476|3545|0|0|6|16|76|476|476|2476|2476|152|153|GRAAAA|JGFAAA|HHHHxx
+9074|3546|0|2|4|14|74|74|1074|4074|9074|148|149|ALAAAA|KGFAAA|OOOOxx
+4830|3547|0|2|0|10|30|830|830|4830|4830|60|61|UDAAAA|LGFAAA|VVVVxx
+3207|3548|1|3|7|7|7|207|1207|3207|3207|14|15|JTAAAA|MGFAAA|AAAAxx
+7894|3549|0|2|4|14|94|894|1894|2894|7894|188|189|QRAAAA|NGFAAA|HHHHxx
+3860|3550|0|0|0|0|60|860|1860|3860|3860|120|121|MSAAAA|OGFAAA|OOOOxx
+5293|3551|1|1|3|13|93|293|1293|293|5293|186|187|PVAAAA|PGFAAA|VVVVxx
+6895|3552|1|3|5|15|95|895|895|1895|6895|190|191|FFAAAA|QGFAAA|AAAAxx
+9908|3553|0|0|8|8|8|908|1908|4908|9908|16|17|CRAAAA|RGFAAA|HHHHxx
+9247|3554|1|3|7|7|47|247|1247|4247|9247|94|95|RRAAAA|SGFAAA|OOOOxx
+8110|3555|0|2|0|10|10|110|110|3110|8110|20|21|YZAAAA|TGFAAA|VVVVxx
+4716|3556|0|0|6|16|16|716|716|4716|4716|32|33|KZAAAA|UGFAAA|AAAAxx
+4979|3557|1|3|9|19|79|979|979|4979|4979|158|159|NJAAAA|VGFAAA|HHHHxx
+5280|3558|0|0|0|0|80|280|1280|280|5280|160|161|CVAAAA|WGFAAA|OOOOxx
+8326|3559|0|2|6|6|26|326|326|3326|8326|52|53|GIAAAA|XGFAAA|VVVVxx
+5572|3560|0|0|2|12|72|572|1572|572|5572|144|145|IGAAAA|YGFAAA|AAAAxx
+4665|3561|1|1|5|5|65|665|665|4665|4665|130|131|LXAAAA|ZGFAAA|HHHHxx
+3665|3562|1|1|5|5|65|665|1665|3665|3665|130|131|ZKAAAA|AHFAAA|OOOOxx
+6744|3563|0|0|4|4|44|744|744|1744|6744|88|89|KZAAAA|BHFAAA|VVVVxx
+1897|3564|1|1|7|17|97|897|1897|1897|1897|194|195|ZUAAAA|CHFAAA|AAAAxx
+1220|3565|0|0|0|0|20|220|1220|1220|1220|40|41|YUAAAA|DHFAAA|HHHHxx
+2614|3566|0|2|4|14|14|614|614|2614|2614|28|29|OWAAAA|EHFAAA|OOOOxx
+8509|3567|1|1|9|9|9|509|509|3509|8509|18|19|HPAAAA|FHFAAA|VVVVxx
+8521|3568|1|1|1|1|21|521|521|3521|8521|42|43|TPAAAA|GHFAAA|AAAAxx
+4121|3569|1|1|1|1|21|121|121|4121|4121|42|43|NCAAAA|HHFAAA|HHHHxx
+9663|3570|1|3|3|3|63|663|1663|4663|9663|126|127|RHAAAA|IHFAAA|OOOOxx
+2346|3571|0|2|6|6|46|346|346|2346|2346|92|93|GMAAAA|JHFAAA|VVVVxx
+3370|3572|0|2|0|10|70|370|1370|3370|3370|140|141|QZAAAA|KHFAAA|AAAAxx
+1498|3573|0|2|8|18|98|498|1498|1498|1498|196|197|QFAAAA|LHFAAA|HHHHxx
+7422|3574|0|2|2|2|22|422|1422|2422|7422|44|45|MZAAAA|MHFAAA|OOOOxx
+3472|3575|0|0|2|12|72|472|1472|3472|3472|144|145|ODAAAA|NHFAAA|VVVVxx
+4126|3576|0|2|6|6|26|126|126|4126|4126|52|53|SCAAAA|OHFAAA|AAAAxx
+4494|3577|0|2|4|14|94|494|494|4494|4494|188|189|WQAAAA|PHFAAA|HHHHxx
+6323|3578|1|3|3|3|23|323|323|1323|6323|46|47|FJAAAA|QHFAAA|OOOOxx
+2823|3579|1|3|3|3|23|823|823|2823|2823|46|47|PEAAAA|RHFAAA|VVVVxx
+8596|3580|0|0|6|16|96|596|596|3596|8596|192|193|QSAAAA|SHFAAA|AAAAxx
+6642|3581|0|2|2|2|42|642|642|1642|6642|84|85|MVAAAA|THFAAA|HHHHxx
+9276|3582|0|0|6|16|76|276|1276|4276|9276|152|153|USAAAA|UHFAAA|OOOOxx
+4148|3583|0|0|8|8|48|148|148|4148|4148|96|97|ODAAAA|VHFAAA|VVVVxx
+9770|3584|0|2|0|10|70|770|1770|4770|9770|140|141|ULAAAA|WHFAAA|AAAAxx
+9812|3585|0|0|2|12|12|812|1812|4812|9812|24|25|KNAAAA|XHFAAA|HHHHxx
+4419|3586|1|3|9|19|19|419|419|4419|4419|38|39|ZNAAAA|YHFAAA|OOOOxx
+3802|3587|0|2|2|2|2|802|1802|3802|3802|4|5|GQAAAA|ZHFAAA|VVVVxx
+3210|3588|0|2|0|10|10|210|1210|3210|3210|20|21|MTAAAA|AIFAAA|AAAAxx
+6794|3589|0|2|4|14|94|794|794|1794|6794|188|189|IBAAAA|BIFAAA|HHHHxx
+242|3590|0|2|2|2|42|242|242|242|242|84|85|IJAAAA|CIFAAA|OOOOxx
+962|3591|0|2|2|2|62|962|962|962|962|124|125|ALAAAA|DIFAAA|VVVVxx
+7151|3592|1|3|1|11|51|151|1151|2151|7151|102|103|BPAAAA|EIFAAA|AAAAxx
+9440|3593|0|0|0|0|40|440|1440|4440|9440|80|81|CZAAAA|FIFAAA|HHHHxx
+721|3594|1|1|1|1|21|721|721|721|721|42|43|TBAAAA|GIFAAA|OOOOxx
+2119|3595|1|3|9|19|19|119|119|2119|2119|38|39|NDAAAA|HIFAAA|VVVVxx
+9883|3596|1|3|3|3|83|883|1883|4883|9883|166|167|DQAAAA|IIFAAA|AAAAxx
+5071|3597|1|3|1|11|71|71|1071|71|5071|142|143|BNAAAA|JIFAAA|HHHHxx
+8239|3598|1|3|9|19|39|239|239|3239|8239|78|79|XEAAAA|KIFAAA|OOOOxx
+7451|3599|1|3|1|11|51|451|1451|2451|7451|102|103|PAAAAA|LIFAAA|VVVVxx
+9517|3600|1|1|7|17|17|517|1517|4517|9517|34|35|BCAAAA|MIFAAA|AAAAxx
+9180|3601|0|0|0|0|80|180|1180|4180|9180|160|161|CPAAAA|NIFAAA|HHHHxx
+9327|3602|1|3|7|7|27|327|1327|4327|9327|54|55|TUAAAA|OIFAAA|OOOOxx
+5462|3603|0|2|2|2|62|462|1462|462|5462|124|125|CCAAAA|PIFAAA|VVVVxx
+8306|3604|0|2|6|6|6|306|306|3306|8306|12|13|MHAAAA|QIFAAA|AAAAxx
+6234|3605|0|2|4|14|34|234|234|1234|6234|68|69|UFAAAA|RIFAAA|HHHHxx
+8771|3606|1|3|1|11|71|771|771|3771|8771|142|143|JZAAAA|SIFAAA|OOOOxx
+5853|3607|1|1|3|13|53|853|1853|853|5853|106|107|DRAAAA|TIFAAA|VVVVxx
+8373|3608|1|1|3|13|73|373|373|3373|8373|146|147|BKAAAA|UIFAAA|AAAAxx
+5017|3609|1|1|7|17|17|17|1017|17|5017|34|35|ZKAAAA|VIFAAA|HHHHxx
+8025|3610|1|1|5|5|25|25|25|3025|8025|50|51|RWAAAA|WIFAAA|OOOOxx
+2526|3611|0|2|6|6|26|526|526|2526|2526|52|53|ETAAAA|XIFAAA|VVVVxx
+7419|3612|1|3|9|19|19|419|1419|2419|7419|38|39|JZAAAA|YIFAAA|AAAAxx
+4572|3613|0|0|2|12|72|572|572|4572|4572|144|145|WTAAAA|ZIFAAA|HHHHxx
+7744|3614|0|0|4|4|44|744|1744|2744|7744|88|89|WLAAAA|AJFAAA|OOOOxx
+8825|3615|1|1|5|5|25|825|825|3825|8825|50|51|LBAAAA|BJFAAA|VVVVxx
+6067|3616|1|3|7|7|67|67|67|1067|6067|134|135|JZAAAA|CJFAAA|AAAAxx
+3291|3617|1|3|1|11|91|291|1291|3291|3291|182|183|PWAAAA|DJFAAA|HHHHxx
+7115|3618|1|3|5|15|15|115|1115|2115|7115|30|31|RNAAAA|EJFAAA|OOOOxx
+2626|3619|0|2|6|6|26|626|626|2626|2626|52|53|AXAAAA|FJFAAA|VVVVxx
+4109|3620|1|1|9|9|9|109|109|4109|4109|18|19|BCAAAA|GJFAAA|AAAAxx
+4056|3621|0|0|6|16|56|56|56|4056|4056|112|113|AAAAAA|HJFAAA|HHHHxx
+6811|3622|1|3|1|11|11|811|811|1811|6811|22|23|ZBAAAA|IJFAAA|OOOOxx
+680|3623|0|0|0|0|80|680|680|680|680|160|161|EAAAAA|JJFAAA|VVVVxx
+474|3624|0|2|4|14|74|474|474|474|474|148|149|GSAAAA|KJFAAA|AAAAxx
+9294|3625|0|2|4|14|94|294|1294|4294|9294|188|189|MTAAAA|LJFAAA|HHHHxx
+7555|3626|1|3|5|15|55|555|1555|2555|7555|110|111|PEAAAA|MJFAAA|OOOOxx
+8076|3627|0|0|6|16|76|76|76|3076|8076|152|153|QYAAAA|NJFAAA|VVVVxx
+3840|3628|0|0|0|0|40|840|1840|3840|3840|80|81|SRAAAA|OJFAAA|AAAAxx
+5955|3629|1|3|5|15|55|955|1955|955|5955|110|111|BVAAAA|PJFAAA|HHHHxx
+994|3630|0|2|4|14|94|994|994|994|994|188|189|GMAAAA|QJFAAA|OOOOxx
+2089|3631|1|1|9|9|89|89|89|2089|2089|178|179|JCAAAA|RJFAAA|VVVVxx
+869|3632|1|1|9|9|69|869|869|869|869|138|139|LHAAAA|SJFAAA|AAAAxx
+1223|3633|1|3|3|3|23|223|1223|1223|1223|46|47|BVAAAA|TJFAAA|HHHHxx
+1514|3634|0|2|4|14|14|514|1514|1514|1514|28|29|GGAAAA|UJFAAA|OOOOxx
+4891|3635|1|3|1|11|91|891|891|4891|4891|182|183|DGAAAA|VJFAAA|VVVVxx
+4190|3636|0|2|0|10|90|190|190|4190|4190|180|181|EFAAAA|WJFAAA|AAAAxx
+4377|3637|1|1|7|17|77|377|377|4377|4377|154|155|JMAAAA|XJFAAA|HHHHxx
+9195|3638|1|3|5|15|95|195|1195|4195|9195|190|191|RPAAAA|YJFAAA|OOOOxx
+3827|3639|1|3|7|7|27|827|1827|3827|3827|54|55|FRAAAA|ZJFAAA|VVVVxx
+7386|3640|0|2|6|6|86|386|1386|2386|7386|172|173|CYAAAA|AKFAAA|AAAAxx
+6665|3641|1|1|5|5|65|665|665|1665|6665|130|131|JWAAAA|BKFAAA|HHHHxx
+7514|3642|0|2|4|14|14|514|1514|2514|7514|28|29|ADAAAA|CKFAAA|OOOOxx
+6431|3643|1|3|1|11|31|431|431|1431|6431|62|63|JNAAAA|DKFAAA|VVVVxx
+3251|3644|1|3|1|11|51|251|1251|3251|3251|102|103|BVAAAA|EKFAAA|AAAAxx
+8439|3645|1|3|9|19|39|439|439|3439|8439|78|79|PMAAAA|FKFAAA|HHHHxx
+831|3646|1|3|1|11|31|831|831|831|831|62|63|ZFAAAA|GKFAAA|OOOOxx
+8485|3647|1|1|5|5|85|485|485|3485|8485|170|171|JOAAAA|HKFAAA|VVVVxx
+7314|3648|0|2|4|14|14|314|1314|2314|7314|28|29|IVAAAA|IKFAAA|AAAAxx
+3044|3649|0|0|4|4|44|44|1044|3044|3044|88|89|CNAAAA|JKFAAA|HHHHxx
+4283|3650|1|3|3|3|83|283|283|4283|4283|166|167|TIAAAA|KKFAAA|OOOOxx
+298|3651|0|2|8|18|98|298|298|298|298|196|197|MLAAAA|LKFAAA|VVVVxx
+7114|3652|0|2|4|14|14|114|1114|2114|7114|28|29|QNAAAA|MKFAAA|AAAAxx
+9664|3653|0|0|4|4|64|664|1664|4664|9664|128|129|SHAAAA|NKFAAA|HHHHxx
+5315|3654|1|3|5|15|15|315|1315|315|5315|30|31|LWAAAA|OKFAAA|OOOOxx
+2164|3655|0|0|4|4|64|164|164|2164|2164|128|129|GFAAAA|PKFAAA|VVVVxx
+3390|3656|0|2|0|10|90|390|1390|3390|3390|180|181|KAAAAA|QKFAAA|AAAAxx
+836|3657|0|0|6|16|36|836|836|836|836|72|73|EGAAAA|RKFAAA|HHHHxx
+3316|3658|0|0|6|16|16|316|1316|3316|3316|32|33|OXAAAA|SKFAAA|OOOOxx
+1284|3659|0|0|4|4|84|284|1284|1284|1284|168|169|KXAAAA|TKFAAA|VVVVxx
+2497|3660|1|1|7|17|97|497|497|2497|2497|194|195|BSAAAA|UKFAAA|AAAAxx
+1374|3661|0|2|4|14|74|374|1374|1374|1374|148|149|WAAAAA|VKFAAA|HHHHxx
+9525|3662|1|1|5|5|25|525|1525|4525|9525|50|51|JCAAAA|WKFAAA|OOOOxx
+2911|3663|1|3|1|11|11|911|911|2911|2911|22|23|ZHAAAA|XKFAAA|VVVVxx
+9686|3664|0|2|6|6|86|686|1686|4686|9686|172|173|OIAAAA|YKFAAA|AAAAxx
+584|3665|0|0|4|4|84|584|584|584|584|168|169|MWAAAA|ZKFAAA|HHHHxx
+5653|3666|1|1|3|13|53|653|1653|653|5653|106|107|LJAAAA|ALFAAA|OOOOxx
+4986|3667|0|2|6|6|86|986|986|4986|4986|172|173|UJAAAA|BLFAAA|VVVVxx
+6049|3668|1|1|9|9|49|49|49|1049|6049|98|99|RYAAAA|CLFAAA|AAAAxx
+9891|3669|1|3|1|11|91|891|1891|4891|9891|182|183|LQAAAA|DLFAAA|HHHHxx
+8809|3670|1|1|9|9|9|809|809|3809|8809|18|19|VAAAAA|ELFAAA|OOOOxx
+8598|3671|0|2|8|18|98|598|598|3598|8598|196|197|SSAAAA|FLFAAA|VVVVxx
+2573|3672|1|1|3|13|73|573|573|2573|2573|146|147|ZUAAAA|GLFAAA|AAAAxx
+6864|3673|0|0|4|4|64|864|864|1864|6864|128|129|AEAAAA|HLFAAA|HHHHxx
+7932|3674|0|0|2|12|32|932|1932|2932|7932|64|65|CTAAAA|ILFAAA|OOOOxx
+6605|3675|1|1|5|5|5|605|605|1605|6605|10|11|BUAAAA|JLFAAA|VVVVxx
+9500|3676|0|0|0|0|0|500|1500|4500|9500|0|1|KBAAAA|KLFAAA|AAAAxx
+8742|3677|0|2|2|2|42|742|742|3742|8742|84|85|GYAAAA|LLFAAA|HHHHxx
+9815|3678|1|3|5|15|15|815|1815|4815|9815|30|31|NNAAAA|MLFAAA|OOOOxx
+3319|3679|1|3|9|19|19|319|1319|3319|3319|38|39|RXAAAA|NLFAAA|VVVVxx
+184|3680|0|0|4|4|84|184|184|184|184|168|169|CHAAAA|OLFAAA|AAAAxx
+8886|3681|0|2|6|6|86|886|886|3886|8886|172|173|UDAAAA|PLFAAA|HHHHxx
+7050|3682|0|2|0|10|50|50|1050|2050|7050|100|101|ELAAAA|QLFAAA|OOOOxx
+9781|3683|1|1|1|1|81|781|1781|4781|9781|162|163|FMAAAA|RLFAAA|VVVVxx
+2443|3684|1|3|3|3|43|443|443|2443|2443|86|87|ZPAAAA|SLFAAA|AAAAxx
+1160|3685|0|0|0|0|60|160|1160|1160|1160|120|121|QSAAAA|TLFAAA|HHHHxx
+4600|3686|0|0|0|0|0|600|600|4600|4600|0|1|YUAAAA|ULFAAA|OOOOxx
+813|3687|1|1|3|13|13|813|813|813|813|26|27|HFAAAA|VLFAAA|VVVVxx
+5078|3688|0|2|8|18|78|78|1078|78|5078|156|157|INAAAA|WLFAAA|AAAAxx
+9008|3689|0|0|8|8|8|8|1008|4008|9008|16|17|MIAAAA|XLFAAA|HHHHxx
+9016|3690|0|0|6|16|16|16|1016|4016|9016|32|33|UIAAAA|YLFAAA|OOOOxx
+2747|3691|1|3|7|7|47|747|747|2747|2747|94|95|RBAAAA|ZLFAAA|VVVVxx
+3106|3692|0|2|6|6|6|106|1106|3106|3106|12|13|MPAAAA|AMFAAA|AAAAxx
+8235|3693|1|3|5|15|35|235|235|3235|8235|70|71|TEAAAA|BMFAAA|HHHHxx
+5582|3694|0|2|2|2|82|582|1582|582|5582|164|165|SGAAAA|CMFAAA|OOOOxx
+4334|3695|0|2|4|14|34|334|334|4334|4334|68|69|SKAAAA|DMFAAA|VVVVxx
+1612|3696|0|0|2|12|12|612|1612|1612|1612|24|25|AKAAAA|EMFAAA|AAAAxx
+5650|3697|0|2|0|10|50|650|1650|650|5650|100|101|IJAAAA|FMFAAA|HHHHxx
+6086|3698|0|2|6|6|86|86|86|1086|6086|172|173|CAAAAA|GMFAAA|OOOOxx
+9667|3699|1|3|7|7|67|667|1667|4667|9667|134|135|VHAAAA|HMFAAA|VVVVxx
+4215|3700|1|3|5|15|15|215|215|4215|4215|30|31|DGAAAA|IMFAAA|AAAAxx
+8553|3701|1|1|3|13|53|553|553|3553|8553|106|107|ZQAAAA|JMFAAA|HHHHxx
+9066|3702|0|2|6|6|66|66|1066|4066|9066|132|133|SKAAAA|KMFAAA|OOOOxx
+1092|3703|0|0|2|12|92|92|1092|1092|1092|184|185|AQAAAA|LMFAAA|VVVVxx
+2848|3704|0|0|8|8|48|848|848|2848|2848|96|97|OFAAAA|MMFAAA|AAAAxx
+2765|3705|1|1|5|5|65|765|765|2765|2765|130|131|JCAAAA|NMFAAA|HHHHxx
+6513|3706|1|1|3|13|13|513|513|1513|6513|26|27|NQAAAA|OMFAAA|OOOOxx
+6541|3707|1|1|1|1|41|541|541|1541|6541|82|83|PRAAAA|PMFAAA|VVVVxx
+9617|3708|1|1|7|17|17|617|1617|4617|9617|34|35|XFAAAA|QMFAAA|AAAAxx
+5870|3709|0|2|0|10|70|870|1870|870|5870|140|141|URAAAA|RMFAAA|HHHHxx
+8811|3710|1|3|1|11|11|811|811|3811|8811|22|23|XAAAAA|SMFAAA|OOOOxx
+4529|3711|1|1|9|9|29|529|529|4529|4529|58|59|FSAAAA|TMFAAA|VVVVxx
+161|3712|1|1|1|1|61|161|161|161|161|122|123|FGAAAA|UMFAAA|AAAAxx
+641|3713|1|1|1|1|41|641|641|641|641|82|83|RYAAAA|VMFAAA|HHHHxx
+4767|3714|1|3|7|7|67|767|767|4767|4767|134|135|JBAAAA|WMFAAA|OOOOxx
+6293|3715|1|1|3|13|93|293|293|1293|6293|186|187|BIAAAA|XMFAAA|VVVVxx
+3816|3716|0|0|6|16|16|816|1816|3816|3816|32|33|UQAAAA|YMFAAA|AAAAxx
+4748|3717|0|0|8|8|48|748|748|4748|4748|96|97|QAAAAA|ZMFAAA|HHHHxx
+9924|3718|0|0|4|4|24|924|1924|4924|9924|48|49|SRAAAA|ANFAAA|OOOOxx
+6716|3719|0|0|6|16|16|716|716|1716|6716|32|33|IYAAAA|BNFAAA|VVVVxx
+8828|3720|0|0|8|8|28|828|828|3828|8828|56|57|OBAAAA|CNFAAA|AAAAxx
+4967|3721|1|3|7|7|67|967|967|4967|4967|134|135|BJAAAA|DNFAAA|HHHHxx
+9680|3722|0|0|0|0|80|680|1680|4680|9680|160|161|IIAAAA|ENFAAA|OOOOxx
+2784|3723|0|0|4|4|84|784|784|2784|2784|168|169|CDAAAA|FNFAAA|VVVVxx
+2882|3724|0|2|2|2|82|882|882|2882|2882|164|165|WGAAAA|GNFAAA|AAAAxx
+3641|3725|1|1|1|1|41|641|1641|3641|3641|82|83|BKAAAA|HNFAAA|HHHHxx
+5537|3726|1|1|7|17|37|537|1537|537|5537|74|75|ZEAAAA|INFAAA|OOOOxx
+820|3727|0|0|0|0|20|820|820|820|820|40|41|OFAAAA|JNFAAA|VVVVxx
+5847|3728|1|3|7|7|47|847|1847|847|5847|94|95|XQAAAA|KNFAAA|AAAAxx
+566|3729|0|2|6|6|66|566|566|566|566|132|133|UVAAAA|LNFAAA|HHHHxx
+2246|3730|0|2|6|6|46|246|246|2246|2246|92|93|KIAAAA|MNFAAA|OOOOxx
+6680|3731|0|0|0|0|80|680|680|1680|6680|160|161|YWAAAA|NNFAAA|VVVVxx
+2014|3732|0|2|4|14|14|14|14|2014|2014|28|29|MZAAAA|ONFAAA|AAAAxx
+8355|3733|1|3|5|15|55|355|355|3355|8355|110|111|JJAAAA|PNFAAA|HHHHxx
+1610|3734|0|2|0|10|10|610|1610|1610|1610|20|21|YJAAAA|QNFAAA|OOOOxx
+9719|3735|1|3|9|19|19|719|1719|4719|9719|38|39|VJAAAA|RNFAAA|VVVVxx
+8498|3736|0|2|8|18|98|498|498|3498|8498|196|197|WOAAAA|SNFAAA|AAAAxx
+5883|3737|1|3|3|3|83|883|1883|883|5883|166|167|HSAAAA|TNFAAA|HHHHxx
+7380|3738|0|0|0|0|80|380|1380|2380|7380|160|161|WXAAAA|UNFAAA|OOOOxx
+8865|3739|1|1|5|5|65|865|865|3865|8865|130|131|ZCAAAA|VNFAAA|VVVVxx
+4743|3740|1|3|3|3|43|743|743|4743|4743|86|87|LAAAAA|WNFAAA|AAAAxx
+5086|3741|0|2|6|6|86|86|1086|86|5086|172|173|QNAAAA|XNFAAA|HHHHxx
+2739|3742|1|3|9|19|39|739|739|2739|2739|78|79|JBAAAA|YNFAAA|OOOOxx
+9375|3743|1|3|5|15|75|375|1375|4375|9375|150|151|PWAAAA|ZNFAAA|VVVVxx
+7876|3744|0|0|6|16|76|876|1876|2876|7876|152|153|YQAAAA|AOFAAA|AAAAxx
+453|3745|1|1|3|13|53|453|453|453|453|106|107|LRAAAA|BOFAAA|HHHHxx
+6987|3746|1|3|7|7|87|987|987|1987|6987|174|175|TIAAAA|COFAAA|OOOOxx
+2860|3747|0|0|0|0|60|860|860|2860|2860|120|121|AGAAAA|DOFAAA|VVVVxx
+8372|3748|0|0|2|12|72|372|372|3372|8372|144|145|AKAAAA|EOFAAA|AAAAxx
+2048|3749|0|0|8|8|48|48|48|2048|2048|96|97|UAAAAA|FOFAAA|HHHHxx
+9231|3750|1|3|1|11|31|231|1231|4231|9231|62|63|BRAAAA|GOFAAA|OOOOxx
+634|3751|0|2|4|14|34|634|634|634|634|68|69|KYAAAA|HOFAAA|VVVVxx
+3998|3752|0|2|8|18|98|998|1998|3998|3998|196|197|UXAAAA|IOFAAA|AAAAxx
+4728|3753|0|0|8|8|28|728|728|4728|4728|56|57|WZAAAA|JOFAAA|HHHHxx
+579|3754|1|3|9|19|79|579|579|579|579|158|159|HWAAAA|KOFAAA|OOOOxx
+815|3755|1|3|5|15|15|815|815|815|815|30|31|JFAAAA|LOFAAA|VVVVxx
+1009|3756|1|1|9|9|9|9|1009|1009|1009|18|19|VMAAAA|MOFAAA|AAAAxx
+6596|3757|0|0|6|16|96|596|596|1596|6596|192|193|STAAAA|NOFAAA|HHHHxx
+2793|3758|1|1|3|13|93|793|793|2793|2793|186|187|LDAAAA|OOFAAA|OOOOxx
+9589|3759|1|1|9|9|89|589|1589|4589|9589|178|179|VEAAAA|POFAAA|VVVVxx
+2794|3760|0|2|4|14|94|794|794|2794|2794|188|189|MDAAAA|QOFAAA|AAAAxx
+2551|3761|1|3|1|11|51|551|551|2551|2551|102|103|DUAAAA|ROFAAA|HHHHxx
+1588|3762|0|0|8|8|88|588|1588|1588|1588|176|177|CJAAAA|SOFAAA|OOOOxx
+4443|3763|1|3|3|3|43|443|443|4443|4443|86|87|XOAAAA|TOFAAA|VVVVxx
+5009|3764|1|1|9|9|9|9|1009|9|5009|18|19|RKAAAA|UOFAAA|AAAAxx
+4287|3765|1|3|7|7|87|287|287|4287|4287|174|175|XIAAAA|VOFAAA|HHHHxx
+2167|3766|1|3|7|7|67|167|167|2167|2167|134|135|JFAAAA|WOFAAA|OOOOxx
+2290|3767|0|2|0|10|90|290|290|2290|2290|180|181|CKAAAA|XOFAAA|VVVVxx
+7225|3768|1|1|5|5|25|225|1225|2225|7225|50|51|XRAAAA|YOFAAA|AAAAxx
+8992|3769|0|0|2|12|92|992|992|3992|8992|184|185|WHAAAA|ZOFAAA|HHHHxx
+1540|3770|0|0|0|0|40|540|1540|1540|1540|80|81|GHAAAA|APFAAA|OOOOxx
+2029|3771|1|1|9|9|29|29|29|2029|2029|58|59|BAAAAA|BPFAAA|VVVVxx
+2855|3772|1|3|5|15|55|855|855|2855|2855|110|111|VFAAAA|CPFAAA|AAAAxx
+3534|3773|0|2|4|14|34|534|1534|3534|3534|68|69|YFAAAA|DPFAAA|HHHHxx
+8078|3774|0|2|8|18|78|78|78|3078|8078|156|157|SYAAAA|EPFAAA|OOOOxx
+9778|3775|0|2|8|18|78|778|1778|4778|9778|156|157|CMAAAA|FPFAAA|VVVVxx
+3543|3776|1|3|3|3|43|543|1543|3543|3543|86|87|HGAAAA|GPFAAA|AAAAxx
+4778|3777|0|2|8|18|78|778|778|4778|4778|156|157|UBAAAA|HPFAAA|HHHHxx
+8931|3778|1|3|1|11|31|931|931|3931|8931|62|63|NFAAAA|IPFAAA|OOOOxx
+557|3779|1|1|7|17|57|557|557|557|557|114|115|LVAAAA|JPFAAA|VVVVxx
+5546|3780|0|2|6|6|46|546|1546|546|5546|92|93|IFAAAA|KPFAAA|AAAAxx
+7527|3781|1|3|7|7|27|527|1527|2527|7527|54|55|NDAAAA|LPFAAA|HHHHxx
+5000|3782|0|0|0|0|0|0|1000|0|5000|0|1|IKAAAA|MPFAAA|OOOOxx
+7587|3783|1|3|7|7|87|587|1587|2587|7587|174|175|VFAAAA|NPFAAA|VVVVxx
+3014|3784|0|2|4|14|14|14|1014|3014|3014|28|29|YLAAAA|OPFAAA|AAAAxx
+5276|3785|0|0|6|16|76|276|1276|276|5276|152|153|YUAAAA|PPFAAA|HHHHxx
+6457|3786|1|1|7|17|57|457|457|1457|6457|114|115|JOAAAA|QPFAAA|OOOOxx
+389|3787|1|1|9|9|89|389|389|389|389|178|179|ZOAAAA|RPFAAA|VVVVxx
+7104|3788|0|0|4|4|4|104|1104|2104|7104|8|9|GNAAAA|SPFAAA|AAAAxx
+9995|3789|1|3|5|15|95|995|1995|4995|9995|190|191|LUAAAA|TPFAAA|HHHHxx
+7368|3790|0|0|8|8|68|368|1368|2368|7368|136|137|KXAAAA|UPFAAA|OOOOxx
+3258|3791|0|2|8|18|58|258|1258|3258|3258|116|117|IVAAAA|VPFAAA|VVVVxx
+9208|3792|0|0|8|8|8|208|1208|4208|9208|16|17|EQAAAA|WPFAAA|AAAAxx
+2396|3793|0|0|6|16|96|396|396|2396|2396|192|193|EOAAAA|XPFAAA|HHHHxx
+1715|3794|1|3|5|15|15|715|1715|1715|1715|30|31|ZNAAAA|YPFAAA|OOOOxx
+1240|3795|0|0|0|0|40|240|1240|1240|1240|80|81|SVAAAA|ZPFAAA|VVVVxx
+1952|3796|0|0|2|12|52|952|1952|1952|1952|104|105|CXAAAA|AQFAAA|AAAAxx
+4403|3797|1|3|3|3|3|403|403|4403|4403|6|7|JNAAAA|BQFAAA|HHHHxx
+6333|3798|1|1|3|13|33|333|333|1333|6333|66|67|PJAAAA|CQFAAA|OOOOxx
+2492|3799|0|0|2|12|92|492|492|2492|2492|184|185|WRAAAA|DQFAAA|VVVVxx
+6543|3800|1|3|3|3|43|543|543|1543|6543|86|87|RRAAAA|EQFAAA|AAAAxx
+5548|3801|0|0|8|8|48|548|1548|548|5548|96|97|KFAAAA|FQFAAA|HHHHxx
+3458|3802|0|2|8|18|58|458|1458|3458|3458|116|117|ADAAAA|GQFAAA|OOOOxx
+2588|3803|0|0|8|8|88|588|588|2588|2588|176|177|OVAAAA|HQFAAA|VVVVxx
+1364|3804|0|0|4|4|64|364|1364|1364|1364|128|129|MAAAAA|IQFAAA|AAAAxx
+9856|3805|0|0|6|16|56|856|1856|4856|9856|112|113|CPAAAA|JQFAAA|HHHHxx
+4964|3806|0|0|4|4|64|964|964|4964|4964|128|129|YIAAAA|KQFAAA|OOOOxx
+773|3807|1|1|3|13|73|773|773|773|773|146|147|TDAAAA|LQFAAA|VVVVxx
+6402|3808|0|2|2|2|2|402|402|1402|6402|4|5|GMAAAA|MQFAAA|AAAAxx
+7213|3809|1|1|3|13|13|213|1213|2213|7213|26|27|LRAAAA|NQFAAA|HHHHxx
+3385|3810|1|1|5|5|85|385|1385|3385|3385|170|171|FAAAAA|OQFAAA|OOOOxx
+6005|3811|1|1|5|5|5|5|5|1005|6005|10|11|ZWAAAA|PQFAAA|VVVVxx
+9346|3812|0|2|6|6|46|346|1346|4346|9346|92|93|MVAAAA|QQFAAA|AAAAxx
+1831|3813|1|3|1|11|31|831|1831|1831|1831|62|63|LSAAAA|RQFAAA|HHHHxx
+5406|3814|0|2|6|6|6|406|1406|406|5406|12|13|YZAAAA|SQFAAA|OOOOxx
+2154|3815|0|2|4|14|54|154|154|2154|2154|108|109|WEAAAA|TQFAAA|VVVVxx
+3721|3816|1|1|1|1|21|721|1721|3721|3721|42|43|DNAAAA|UQFAAA|AAAAxx
+2889|3817|1|1|9|9|89|889|889|2889|2889|178|179|DHAAAA|VQFAAA|HHHHxx
+4410|3818|0|2|0|10|10|410|410|4410|4410|20|21|QNAAAA|WQFAAA|OOOOxx
+7102|3819|0|2|2|2|2|102|1102|2102|7102|4|5|ENAAAA|XQFAAA|VVVVxx
+4057|3820|1|1|7|17|57|57|57|4057|4057|114|115|BAAAAA|YQFAAA|AAAAxx
+9780|3821|0|0|0|0|80|780|1780|4780|9780|160|161|EMAAAA|ZQFAAA|HHHHxx
+9481|3822|1|1|1|1|81|481|1481|4481|9481|162|163|RAAAAA|ARFAAA|OOOOxx
+2366|3823|0|2|6|6|66|366|366|2366|2366|132|133|ANAAAA|BRFAAA|VVVVxx
+2708|3824|0|0|8|8|8|708|708|2708|2708|16|17|EAAAAA|CRFAAA|AAAAxx
+7399|3825|1|3|9|19|99|399|1399|2399|7399|198|199|PYAAAA|DRFAAA|HHHHxx
+5234|3826|0|2|4|14|34|234|1234|234|5234|68|69|ITAAAA|ERFAAA|OOOOxx
+1843|3827|1|3|3|3|43|843|1843|1843|1843|86|87|XSAAAA|FRFAAA|VVVVxx
+1006|3828|0|2|6|6|6|6|1006|1006|1006|12|13|SMAAAA|GRFAAA|AAAAxx
+7696|3829|0|0|6|16|96|696|1696|2696|7696|192|193|AKAAAA|HRFAAA|HHHHxx
+6411|3830|1|3|1|11|11|411|411|1411|6411|22|23|PMAAAA|IRFAAA|OOOOxx
+3913|3831|1|1|3|13|13|913|1913|3913|3913|26|27|NUAAAA|JRFAAA|VVVVxx
+2538|3832|0|2|8|18|38|538|538|2538|2538|76|77|QTAAAA|KRFAAA|AAAAxx
+3019|3833|1|3|9|19|19|19|1019|3019|3019|38|39|DMAAAA|LRFAAA|HHHHxx
+107|3834|1|3|7|7|7|107|107|107|107|14|15|DEAAAA|MRFAAA|OOOOxx
+427|3835|1|3|7|7|27|427|427|427|427|54|55|LQAAAA|NRFAAA|VVVVxx
+9849|3836|1|1|9|9|49|849|1849|4849|9849|98|99|VOAAAA|ORFAAA|AAAAxx
+4195|3837|1|3|5|15|95|195|195|4195|4195|190|191|JFAAAA|PRFAAA|HHHHxx
+9215|3838|1|3|5|15|15|215|1215|4215|9215|30|31|LQAAAA|QRFAAA|OOOOxx
+3165|3839|1|1|5|5|65|165|1165|3165|3165|130|131|TRAAAA|RRFAAA|VVVVxx
+3280|3840|0|0|0|0|80|280|1280|3280|3280|160|161|EWAAAA|SRFAAA|AAAAxx
+4477|3841|1|1|7|17|77|477|477|4477|4477|154|155|FQAAAA|TRFAAA|HHHHxx
+5885|3842|1|1|5|5|85|885|1885|885|5885|170|171|JSAAAA|URFAAA|OOOOxx
+3311|3843|1|3|1|11|11|311|1311|3311|3311|22|23|JXAAAA|VRFAAA|VVVVxx
+6453|3844|1|1|3|13|53|453|453|1453|6453|106|107|FOAAAA|WRFAAA|AAAAxx
+8527|3845|1|3|7|7|27|527|527|3527|8527|54|55|ZPAAAA|XRFAAA|HHHHxx
+1921|3846|1|1|1|1|21|921|1921|1921|1921|42|43|XVAAAA|YRFAAA|OOOOxx
+2427|3847|1|3|7|7|27|427|427|2427|2427|54|55|JPAAAA|ZRFAAA|VVVVxx
+3691|3848|1|3|1|11|91|691|1691|3691|3691|182|183|ZLAAAA|ASFAAA|AAAAxx
+3882|3849|0|2|2|2|82|882|1882|3882|3882|164|165|ITAAAA|BSFAAA|HHHHxx
+562|3850|0|2|2|2|62|562|562|562|562|124|125|QVAAAA|CSFAAA|OOOOxx
+377|3851|1|1|7|17|77|377|377|377|377|154|155|NOAAAA|DSFAAA|VVVVxx
+1497|3852|1|1|7|17|97|497|1497|1497|1497|194|195|PFAAAA|ESFAAA|AAAAxx
+4453|3853|1|1|3|13|53|453|453|4453|4453|106|107|HPAAAA|FSFAAA|HHHHxx
+4678|3854|0|2|8|18|78|678|678|4678|4678|156|157|YXAAAA|GSFAAA|OOOOxx
+2234|3855|0|2|4|14|34|234|234|2234|2234|68|69|YHAAAA|HSFAAA|VVVVxx
+1073|3856|1|1|3|13|73|73|1073|1073|1073|146|147|HPAAAA|ISFAAA|AAAAxx
+6479|3857|1|3|9|19|79|479|479|1479|6479|158|159|FPAAAA|JSFAAA|HHHHxx
+5665|3858|1|1|5|5|65|665|1665|665|5665|130|131|XJAAAA|KSFAAA|OOOOxx
+586|3859|0|2|6|6|86|586|586|586|586|172|173|OWAAAA|LSFAAA|VVVVxx
+1584|3860|0|0|4|4|84|584|1584|1584|1584|168|169|YIAAAA|MSFAAA|AAAAxx
+2574|3861|0|2|4|14|74|574|574|2574|2574|148|149|AVAAAA|NSFAAA|HHHHxx
+9833|3862|1|1|3|13|33|833|1833|4833|9833|66|67|FOAAAA|OSFAAA|OOOOxx
+6726|3863|0|2|6|6|26|726|726|1726|6726|52|53|SYAAAA|PSFAAA|VVVVxx
+8497|3864|1|1|7|17|97|497|497|3497|8497|194|195|VOAAAA|QSFAAA|AAAAxx
+2914|3865|0|2|4|14|14|914|914|2914|2914|28|29|CIAAAA|RSFAAA|HHHHxx
+8586|3866|0|2|6|6|86|586|586|3586|8586|172|173|GSAAAA|SSFAAA|OOOOxx
+6973|3867|1|1|3|13|73|973|973|1973|6973|146|147|FIAAAA|TSFAAA|VVVVxx
+1322|3868|0|2|2|2|22|322|1322|1322|1322|44|45|WYAAAA|USFAAA|AAAAxx
+5242|3869|0|2|2|2|42|242|1242|242|5242|84|85|QTAAAA|VSFAAA|HHHHxx
+5581|3870|1|1|1|1|81|581|1581|581|5581|162|163|RGAAAA|WSFAAA|OOOOxx
+1365|3871|1|1|5|5|65|365|1365|1365|1365|130|131|NAAAAA|XSFAAA|VVVVxx
+2818|3872|0|2|8|18|18|818|818|2818|2818|36|37|KEAAAA|YSFAAA|AAAAxx
+3758|3873|0|2|8|18|58|758|1758|3758|3758|116|117|OOAAAA|ZSFAAA|HHHHxx
+2665|3874|1|1|5|5|65|665|665|2665|2665|130|131|NYAAAA|ATFAAA|OOOOxx
+9823|3875|1|3|3|3|23|823|1823|4823|9823|46|47|VNAAAA|BTFAAA|VVVVxx
+7057|3876|1|1|7|17|57|57|1057|2057|7057|114|115|LLAAAA|CTFAAA|AAAAxx
+543|3877|1|3|3|3|43|543|543|543|543|86|87|XUAAAA|DTFAAA|HHHHxx
+4008|3878|0|0|8|8|8|8|8|4008|4008|16|17|EYAAAA|ETFAAA|OOOOxx
+4397|3879|1|1|7|17|97|397|397|4397|4397|194|195|DNAAAA|FTFAAA|VVVVxx
+8533|3880|1|1|3|13|33|533|533|3533|8533|66|67|FQAAAA|GTFAAA|AAAAxx
+9728|3881|0|0|8|8|28|728|1728|4728|9728|56|57|EKAAAA|HTFAAA|HHHHxx
+5198|3882|0|2|8|18|98|198|1198|198|5198|196|197|YRAAAA|ITFAAA|OOOOxx
+5036|3883|0|0|6|16|36|36|1036|36|5036|72|73|SLAAAA|JTFAAA|VVVVxx
+4394|3884|0|2|4|14|94|394|394|4394|4394|188|189|ANAAAA|KTFAAA|AAAAxx
+9633|3885|1|1|3|13|33|633|1633|4633|9633|66|67|NGAAAA|LTFAAA|HHHHxx
+3339|3886|1|3|9|19|39|339|1339|3339|3339|78|79|LYAAAA|MTFAAA|OOOOxx
+9529|3887|1|1|9|9|29|529|1529|4529|9529|58|59|NCAAAA|NTFAAA|VVVVxx
+4780|3888|0|0|0|0|80|780|780|4780|4780|160|161|WBAAAA|OTFAAA|AAAAxx
+4862|3889|0|2|2|2|62|862|862|4862|4862|124|125|AFAAAA|PTFAAA|HHHHxx
+8152|3890|0|0|2|12|52|152|152|3152|8152|104|105|OBAAAA|QTFAAA|OOOOxx
+9330|3891|0|2|0|10|30|330|1330|4330|9330|60|61|WUAAAA|RTFAAA|VVVVxx
+4362|3892|0|2|2|2|62|362|362|4362|4362|124|125|ULAAAA|STFAAA|AAAAxx
+4688|3893|0|0|8|8|88|688|688|4688|4688|176|177|IYAAAA|TTFAAA|HHHHxx
+1903|3894|1|3|3|3|3|903|1903|1903|1903|6|7|FVAAAA|UTFAAA|OOOOxx
+9027|3895|1|3|7|7|27|27|1027|4027|9027|54|55|FJAAAA|VTFAAA|VVVVxx
+5385|3896|1|1|5|5|85|385|1385|385|5385|170|171|DZAAAA|WTFAAA|AAAAxx
+9854|3897|0|2|4|14|54|854|1854|4854|9854|108|109|APAAAA|XTFAAA|HHHHxx
+9033|3898|1|1|3|13|33|33|1033|4033|9033|66|67|LJAAAA|YTFAAA|OOOOxx
+3185|3899|1|1|5|5|85|185|1185|3185|3185|170|171|NSAAAA|ZTFAAA|VVVVxx
+2618|3900|0|2|8|18|18|618|618|2618|2618|36|37|SWAAAA|AUFAAA|AAAAxx
+371|3901|1|3|1|11|71|371|371|371|371|142|143|HOAAAA|BUFAAA|HHHHxx
+3697|3902|1|1|7|17|97|697|1697|3697|3697|194|195|FMAAAA|CUFAAA|OOOOxx
+1682|3903|0|2|2|2|82|682|1682|1682|1682|164|165|SMAAAA|DUFAAA|VVVVxx
+3333|3904|1|1|3|13|33|333|1333|3333|3333|66|67|FYAAAA|EUFAAA|AAAAxx
+1722|3905|0|2|2|2|22|722|1722|1722|1722|44|45|GOAAAA|FUFAAA|HHHHxx
+2009|3906|1|1|9|9|9|9|9|2009|2009|18|19|HZAAAA|GUFAAA|OOOOxx
+3517|3907|1|1|7|17|17|517|1517|3517|3517|34|35|HFAAAA|HUFAAA|VVVVxx
+7640|3908|0|0|0|0|40|640|1640|2640|7640|80|81|WHAAAA|IUFAAA|AAAAxx
+259|3909|1|3|9|19|59|259|259|259|259|118|119|ZJAAAA|JUFAAA|HHHHxx
+1400|3910|0|0|0|0|0|400|1400|1400|1400|0|1|WBAAAA|KUFAAA|OOOOxx
+6663|3911|1|3|3|3|63|663|663|1663|6663|126|127|HWAAAA|LUFAAA|VVVVxx
+1576|3912|0|0|6|16|76|576|1576|1576|1576|152|153|QIAAAA|MUFAAA|AAAAxx
+8843|3913|1|3|3|3|43|843|843|3843|8843|86|87|DCAAAA|NUFAAA|HHHHxx
+9474|3914|0|2|4|14|74|474|1474|4474|9474|148|149|KAAAAA|OUFAAA|OOOOxx
+1597|3915|1|1|7|17|97|597|1597|1597|1597|194|195|LJAAAA|PUFAAA|VVVVxx
+1143|3916|1|3|3|3|43|143|1143|1143|1143|86|87|ZRAAAA|QUFAAA|AAAAxx
+4162|3917|0|2|2|2|62|162|162|4162|4162|124|125|CEAAAA|RUFAAA|HHHHxx
+1301|3918|1|1|1|1|1|301|1301|1301|1301|2|3|BYAAAA|SUFAAA|OOOOxx
+2935|3919|1|3|5|15|35|935|935|2935|2935|70|71|XIAAAA|TUFAAA|VVVVxx
+886|3920|0|2|6|6|86|886|886|886|886|172|173|CIAAAA|UUFAAA|AAAAxx
+1661|3921|1|1|1|1|61|661|1661|1661|1661|122|123|XLAAAA|VUFAAA|HHHHxx
+1026|3922|0|2|6|6|26|26|1026|1026|1026|52|53|MNAAAA|WUFAAA|OOOOxx
+7034|3923|0|2|4|14|34|34|1034|2034|7034|68|69|OKAAAA|XUFAAA|VVVVxx
+2305|3924|1|1|5|5|5|305|305|2305|2305|10|11|RKAAAA|YUFAAA|AAAAxx
+1725|3925|1|1|5|5|25|725|1725|1725|1725|50|51|JOAAAA|ZUFAAA|HHHHxx
+909|3926|1|1|9|9|9|909|909|909|909|18|19|ZIAAAA|AVFAAA|OOOOxx
+9906|3927|0|2|6|6|6|906|1906|4906|9906|12|13|ARAAAA|BVFAAA|VVVVxx
+3309|3928|1|1|9|9|9|309|1309|3309|3309|18|19|HXAAAA|CVFAAA|AAAAxx
+515|3929|1|3|5|15|15|515|515|515|515|30|31|VTAAAA|DVFAAA|HHHHxx
+932|3930|0|0|2|12|32|932|932|932|932|64|65|WJAAAA|EVFAAA|OOOOxx
+8144|3931|0|0|4|4|44|144|144|3144|8144|88|89|GBAAAA|FVFAAA|VVVVxx
+5592|3932|0|0|2|12|92|592|1592|592|5592|184|185|CHAAAA|GVFAAA|AAAAxx
+4003|3933|1|3|3|3|3|3|3|4003|4003|6|7|ZXAAAA|HVFAAA|HHHHxx
+9566|3934|0|2|6|6|66|566|1566|4566|9566|132|133|YDAAAA|IVFAAA|OOOOxx
+4556|3935|0|0|6|16|56|556|556|4556|4556|112|113|GTAAAA|JVFAAA|VVVVxx
+268|3936|0|0|8|8|68|268|268|268|268|136|137|IKAAAA|KVFAAA|AAAAxx
+8107|3937|1|3|7|7|7|107|107|3107|8107|14|15|VZAAAA|LVFAAA|HHHHxx
+5816|3938|0|0|6|16|16|816|1816|816|5816|32|33|SPAAAA|MVFAAA|OOOOxx
+8597|3939|1|1|7|17|97|597|597|3597|8597|194|195|RSAAAA|NVFAAA|VVVVxx
+9611|3940|1|3|1|11|11|611|1611|4611|9611|22|23|RFAAAA|OVFAAA|AAAAxx
+8070|3941|0|2|0|10|70|70|70|3070|8070|140|141|KYAAAA|PVFAAA|HHHHxx
+6040|3942|0|0|0|0|40|40|40|1040|6040|80|81|IYAAAA|QVFAAA|OOOOxx
+3184|3943|0|0|4|4|84|184|1184|3184|3184|168|169|MSAAAA|RVFAAA|VVVVxx
+9656|3944|0|0|6|16|56|656|1656|4656|9656|112|113|KHAAAA|SVFAAA|AAAAxx
+1577|3945|1|1|7|17|77|577|1577|1577|1577|154|155|RIAAAA|TVFAAA|HHHHxx
+1805|3946|1|1|5|5|5|805|1805|1805|1805|10|11|LRAAAA|UVFAAA|OOOOxx
+8268|3947|0|0|8|8|68|268|268|3268|8268|136|137|AGAAAA|VVFAAA|VVVVxx
+3489|3948|1|1|9|9|89|489|1489|3489|3489|178|179|FEAAAA|WVFAAA|AAAAxx
+4564|3949|0|0|4|4|64|564|564|4564|4564|128|129|OTAAAA|XVFAAA|HHHHxx
+4006|3950|0|2|6|6|6|6|6|4006|4006|12|13|CYAAAA|YVFAAA|OOOOxx
+8466|3951|0|2|6|6|66|466|466|3466|8466|132|133|QNAAAA|ZVFAAA|VVVVxx
+938|3952|0|2|8|18|38|938|938|938|938|76|77|CKAAAA|AWFAAA|AAAAxx
+5944|3953|0|0|4|4|44|944|1944|944|5944|88|89|QUAAAA|BWFAAA|HHHHxx
+8363|3954|1|3|3|3|63|363|363|3363|8363|126|127|RJAAAA|CWFAAA|OOOOxx
+5348|3955|0|0|8|8|48|348|1348|348|5348|96|97|SXAAAA|DWFAAA|VVVVxx
+71|3956|1|3|1|11|71|71|71|71|71|142|143|TCAAAA|EWFAAA|AAAAxx
+3620|3957|0|0|0|0|20|620|1620|3620|3620|40|41|GJAAAA|FWFAAA|HHHHxx
+3230|3958|0|2|0|10|30|230|1230|3230|3230|60|61|GUAAAA|GWFAAA|OOOOxx
+6132|3959|0|0|2|12|32|132|132|1132|6132|64|65|WBAAAA|HWFAAA|VVVVxx
+6143|3960|1|3|3|3|43|143|143|1143|6143|86|87|HCAAAA|IWFAAA|AAAAxx
+8781|3961|1|1|1|1|81|781|781|3781|8781|162|163|TZAAAA|JWFAAA|HHHHxx
+5522|3962|0|2|2|2|22|522|1522|522|5522|44|45|KEAAAA|KWFAAA|OOOOxx
+6320|3963|0|0|0|0|20|320|320|1320|6320|40|41|CJAAAA|LWFAAA|VVVVxx
+3923|3964|1|3|3|3|23|923|1923|3923|3923|46|47|XUAAAA|MWFAAA|AAAAxx
+2207|3965|1|3|7|7|7|207|207|2207|2207|14|15|XGAAAA|NWFAAA|HHHHxx
+966|3966|0|2|6|6|66|966|966|966|966|132|133|ELAAAA|OWFAAA|OOOOxx
+9020|3967|0|0|0|0|20|20|1020|4020|9020|40|41|YIAAAA|PWFAAA|VVVVxx
+4616|3968|0|0|6|16|16|616|616|4616|4616|32|33|OVAAAA|QWFAAA|AAAAxx
+8289|3969|1|1|9|9|89|289|289|3289|8289|178|179|VGAAAA|RWFAAA|HHHHxx
+5796|3970|0|0|6|16|96|796|1796|796|5796|192|193|YOAAAA|SWFAAA|OOOOxx
+9259|3971|1|3|9|19|59|259|1259|4259|9259|118|119|DSAAAA|TWFAAA|VVVVxx
+3710|3972|0|2|0|10|10|710|1710|3710|3710|20|21|SMAAAA|UWFAAA|AAAAxx
+251|3973|1|3|1|11|51|251|251|251|251|102|103|RJAAAA|VWFAAA|HHHHxx
+7669|3974|1|1|9|9|69|669|1669|2669|7669|138|139|ZIAAAA|WWFAAA|OOOOxx
+6304|3975|0|0|4|4|4|304|304|1304|6304|8|9|MIAAAA|XWFAAA|VVVVxx
+6454|3976|0|2|4|14|54|454|454|1454|6454|108|109|GOAAAA|YWFAAA|AAAAxx
+1489|3977|1|1|9|9|89|489|1489|1489|1489|178|179|HFAAAA|ZWFAAA|HHHHxx
+715|3978|1|3|5|15|15|715|715|715|715|30|31|NBAAAA|AXFAAA|OOOOxx
+4319|3979|1|3|9|19|19|319|319|4319|4319|38|39|DKAAAA|BXFAAA|VVVVxx
+7112|3980|0|0|2|12|12|112|1112|2112|7112|24|25|ONAAAA|CXFAAA|AAAAxx
+3726|3981|0|2|6|6|26|726|1726|3726|3726|52|53|INAAAA|DXFAAA|HHHHxx
+7727|3982|1|3|7|7|27|727|1727|2727|7727|54|55|FLAAAA|EXFAAA|OOOOxx
+8387|3983|1|3|7|7|87|387|387|3387|8387|174|175|PKAAAA|FXFAAA|VVVVxx
+6555|3984|1|3|5|15|55|555|555|1555|6555|110|111|DSAAAA|GXFAAA|AAAAxx
+1148|3985|0|0|8|8|48|148|1148|1148|1148|96|97|ESAAAA|HXFAAA|HHHHxx
+9000|3986|0|0|0|0|0|0|1000|4000|9000|0|1|EIAAAA|IXFAAA|OOOOxx
+5278|3987|0|2|8|18|78|278|1278|278|5278|156|157|AVAAAA|JXFAAA|VVVVxx
+2388|3988|0|0|8|8|88|388|388|2388|2388|176|177|WNAAAA|KXFAAA|AAAAxx
+7984|3989|0|0|4|4|84|984|1984|2984|7984|168|169|CVAAAA|LXFAAA|HHHHxx
+881|3990|1|1|1|1|81|881|881|881|881|162|163|XHAAAA|MXFAAA|OOOOxx
+6830|3991|0|2|0|10|30|830|830|1830|6830|60|61|SCAAAA|NXFAAA|VVVVxx
+7056|3992|0|0|6|16|56|56|1056|2056|7056|112|113|KLAAAA|OXFAAA|AAAAxx
+7581|3993|1|1|1|1|81|581|1581|2581|7581|162|163|PFAAAA|PXFAAA|HHHHxx
+5214|3994|0|2|4|14|14|214|1214|214|5214|28|29|OSAAAA|QXFAAA|OOOOxx
+2505|3995|1|1|5|5|5|505|505|2505|2505|10|11|JSAAAA|RXFAAA|VVVVxx
+5112|3996|0|0|2|12|12|112|1112|112|5112|24|25|QOAAAA|SXFAAA|AAAAxx
+9884|3997|0|0|4|4|84|884|1884|4884|9884|168|169|EQAAAA|TXFAAA|HHHHxx
+8040|3998|0|0|0|0|40|40|40|3040|8040|80|81|GXAAAA|UXFAAA|OOOOxx
+7033|3999|1|1|3|13|33|33|1033|2033|7033|66|67|NKAAAA|VXFAAA|VVVVxx
+9343|4000|1|3|3|3|43|343|1343|4343|9343|86|87|JVAAAA|WXFAAA|AAAAxx
+2931|4001|1|3|1|11|31|931|931|2931|2931|62|63|TIAAAA|XXFAAA|HHHHxx
+9024|4002|0|0|4|4|24|24|1024|4024|9024|48|49|CJAAAA|YXFAAA|OOOOxx
+6485|4003|1|1|5|5|85|485|485|1485|6485|170|171|LPAAAA|ZXFAAA|VVVVxx
+3465|4004|1|1|5|5|65|465|1465|3465|3465|130|131|HDAAAA|AYFAAA|AAAAxx
+3357|4005|1|1|7|17|57|357|1357|3357|3357|114|115|DZAAAA|BYFAAA|HHHHxx
+2929|4006|1|1|9|9|29|929|929|2929|2929|58|59|RIAAAA|CYFAAA|OOOOxx
+3086|4007|0|2|6|6|86|86|1086|3086|3086|172|173|SOAAAA|DYFAAA|VVVVxx
+8897|4008|1|1|7|17|97|897|897|3897|8897|194|195|FEAAAA|EYFAAA|AAAAxx
+9688|4009|0|0|8|8|88|688|1688|4688|9688|176|177|QIAAAA|FYFAAA|HHHHxx
+6522|4010|0|2|2|2|22|522|522|1522|6522|44|45|WQAAAA|GYFAAA|OOOOxx
+3241|4011|1|1|1|1|41|241|1241|3241|3241|82|83|RUAAAA|HYFAAA|VVVVxx
+8770|4012|0|2|0|10|70|770|770|3770|8770|140|141|IZAAAA|IYFAAA|AAAAxx
+2884|4013|0|0|4|4|84|884|884|2884|2884|168|169|YGAAAA|JYFAAA|HHHHxx
+9579|4014|1|3|9|19|79|579|1579|4579|9579|158|159|LEAAAA|KYFAAA|OOOOxx
+3125|4015|1|1|5|5|25|125|1125|3125|3125|50|51|FQAAAA|LYFAAA|VVVVxx
+4604|4016|0|0|4|4|4|604|604|4604|4604|8|9|CVAAAA|MYFAAA|AAAAxx
+2682|4017|0|2|2|2|82|682|682|2682|2682|164|165|EZAAAA|NYFAAA|HHHHxx
+254|4018|0|2|4|14|54|254|254|254|254|108|109|UJAAAA|OYFAAA|OOOOxx
+6569|4019|1|1|9|9|69|569|569|1569|6569|138|139|RSAAAA|PYFAAA|VVVVxx
+2686|4020|0|2|6|6|86|686|686|2686|2686|172|173|IZAAAA|QYFAAA|AAAAxx
+2123|4021|1|3|3|3|23|123|123|2123|2123|46|47|RDAAAA|RYFAAA|HHHHxx
+1745|4022|1|1|5|5|45|745|1745|1745|1745|90|91|DPAAAA|SYFAAA|OOOOxx
+247|4023|1|3|7|7|47|247|247|247|247|94|95|NJAAAA|TYFAAA|VVVVxx
+5800|4024|0|0|0|0|0|800|1800|800|5800|0|1|CPAAAA|UYFAAA|AAAAxx
+1121|4025|1|1|1|1|21|121|1121|1121|1121|42|43|DRAAAA|VYFAAA|HHHHxx
+8893|4026|1|1|3|13|93|893|893|3893|8893|186|187|BEAAAA|WYFAAA|OOOOxx
+7819|4027|1|3|9|19|19|819|1819|2819|7819|38|39|TOAAAA|XYFAAA|VVVVxx
+1339|4028|1|3|9|19|39|339|1339|1339|1339|78|79|NZAAAA|YYFAAA|AAAAxx
+5680|4029|0|0|0|0|80|680|1680|680|5680|160|161|MKAAAA|ZYFAAA|HHHHxx
+5093|4030|1|1|3|13|93|93|1093|93|5093|186|187|XNAAAA|AZFAAA|OOOOxx
+3508|4031|0|0|8|8|8|508|1508|3508|3508|16|17|YEAAAA|BZFAAA|VVVVxx
+933|4032|1|1|3|13|33|933|933|933|933|66|67|XJAAAA|CZFAAA|AAAAxx
+1106|4033|0|2|6|6|6|106|1106|1106|1106|12|13|OQAAAA|DZFAAA|HHHHxx
+4386|4034|0|2|6|6|86|386|386|4386|4386|172|173|SMAAAA|EZFAAA|OOOOxx
+5895|4035|1|3|5|15|95|895|1895|895|5895|190|191|TSAAAA|FZFAAA|VVVVxx
+2980|4036|0|0|0|0|80|980|980|2980|2980|160|161|QKAAAA|GZFAAA|AAAAxx
+4400|4037|0|0|0|0|0|400|400|4400|4400|0|1|GNAAAA|HZFAAA|HHHHxx
+7433|4038|1|1|3|13|33|433|1433|2433|7433|66|67|XZAAAA|IZFAAA|OOOOxx
+6110|4039|0|2|0|10|10|110|110|1110|6110|20|21|ABAAAA|JZFAAA|VVVVxx
+867|4040|1|3|7|7|67|867|867|867|867|134|135|JHAAAA|KZFAAA|AAAAxx
+5292|4041|0|0|2|12|92|292|1292|292|5292|184|185|OVAAAA|LZFAAA|HHHHxx
+3926|4042|0|2|6|6|26|926|1926|3926|3926|52|53|AVAAAA|MZFAAA|OOOOxx
+1107|4043|1|3|7|7|7|107|1107|1107|1107|14|15|PQAAAA|NZFAAA|VVVVxx
+7355|4044|1|3|5|15|55|355|1355|2355|7355|110|111|XWAAAA|OZFAAA|AAAAxx
+4689|4045|1|1|9|9|89|689|689|4689|4689|178|179|JYAAAA|PZFAAA|HHHHxx
+4872|4046|0|0|2|12|72|872|872|4872|4872|144|145|KFAAAA|QZFAAA|OOOOxx
+7821|4047|1|1|1|1|21|821|1821|2821|7821|42|43|VOAAAA|RZFAAA|VVVVxx
+7277|4048|1|1|7|17|77|277|1277|2277|7277|154|155|XTAAAA|SZFAAA|AAAAxx
+3268|4049|0|0|8|8|68|268|1268|3268|3268|136|137|SVAAAA|TZFAAA|HHHHxx
+8877|4050|1|1|7|17|77|877|877|3877|8877|154|155|LDAAAA|UZFAAA|OOOOxx
+343|4051|1|3|3|3|43|343|343|343|343|86|87|FNAAAA|VZFAAA|VVVVxx
+621|4052|1|1|1|1|21|621|621|621|621|42|43|XXAAAA|WZFAAA|AAAAxx
+5429|4053|1|1|9|9|29|429|1429|429|5429|58|59|VAAAAA|XZFAAA|HHHHxx
+392|4054|0|0|2|12|92|392|392|392|392|184|185|CPAAAA|YZFAAA|OOOOxx
+6004|4055|0|0|4|4|4|4|4|1004|6004|8|9|YWAAAA|ZZFAAA|VVVVxx
+6377|4056|1|1|7|17|77|377|377|1377|6377|154|155|HLAAAA|AAGAAA|AAAAxx
+3037|4057|1|1|7|17|37|37|1037|3037|3037|74|75|VMAAAA|BAGAAA|HHHHxx
+3514|4058|0|2|4|14|14|514|1514|3514|3514|28|29|EFAAAA|CAGAAA|OOOOxx
+8740|4059|0|0|0|0|40|740|740|3740|8740|80|81|EYAAAA|DAGAAA|VVVVxx
+3877|4060|1|1|7|17|77|877|1877|3877|3877|154|155|DTAAAA|EAGAAA|AAAAxx
+5731|4061|1|3|1|11|31|731|1731|731|5731|62|63|LMAAAA|FAGAAA|HHHHxx
+6407|4062|1|3|7|7|7|407|407|1407|6407|14|15|LMAAAA|GAGAAA|OOOOxx
+2044|4063|0|0|4|4|44|44|44|2044|2044|88|89|QAAAAA|HAGAAA|VVVVxx
+7362|4064|0|2|2|2|62|362|1362|2362|7362|124|125|EXAAAA|IAGAAA|AAAAxx
+5458|4065|0|2|8|18|58|458|1458|458|5458|116|117|YBAAAA|JAGAAA|HHHHxx
+6437|4066|1|1|7|17|37|437|437|1437|6437|74|75|PNAAAA|KAGAAA|OOOOxx
+1051|4067|1|3|1|11|51|51|1051|1051|1051|102|103|LOAAAA|LAGAAA|VVVVxx
+1203|4068|1|3|3|3|3|203|1203|1203|1203|6|7|HUAAAA|MAGAAA|AAAAxx
+2176|4069|0|0|6|16|76|176|176|2176|2176|152|153|SFAAAA|NAGAAA|HHHHxx
+8997|4070|1|1|7|17|97|997|997|3997|8997|194|195|BIAAAA|OAGAAA|OOOOxx
+6378|4071|0|2|8|18|78|378|378|1378|6378|156|157|ILAAAA|PAGAAA|VVVVxx
+6006|4072|0|2|6|6|6|6|6|1006|6006|12|13|AXAAAA|QAGAAA|AAAAxx
+2308|4073|0|0|8|8|8|308|308|2308|2308|16|17|UKAAAA|RAGAAA|HHHHxx
+625|4074|1|1|5|5|25|625|625|625|625|50|51|BYAAAA|SAGAAA|OOOOxx
+7298|4075|0|2|8|18|98|298|1298|2298|7298|196|197|SUAAAA|TAGAAA|VVVVxx
+5575|4076|1|3|5|15|75|575|1575|575|5575|150|151|LGAAAA|UAGAAA|AAAAxx
+3565|4077|1|1|5|5|65|565|1565|3565|3565|130|131|DHAAAA|VAGAAA|HHHHxx
+47|4078|1|3|7|7|47|47|47|47|47|94|95|VBAAAA|WAGAAA|OOOOxx
+2413|4079|1|1|3|13|13|413|413|2413|2413|26|27|VOAAAA|XAGAAA|VVVVxx
+2153|4080|1|1|3|13|53|153|153|2153|2153|106|107|VEAAAA|YAGAAA|AAAAxx
+752|4081|0|0|2|12|52|752|752|752|752|104|105|YCAAAA|ZAGAAA|HHHHxx
+4095|4082|1|3|5|15|95|95|95|4095|4095|190|191|NBAAAA|ABGAAA|OOOOxx
+2518|4083|0|2|8|18|18|518|518|2518|2518|36|37|WSAAAA|BBGAAA|VVVVxx
+3681|4084|1|1|1|1|81|681|1681|3681|3681|162|163|PLAAAA|CBGAAA|AAAAxx
+4213|4085|1|1|3|13|13|213|213|4213|4213|26|27|BGAAAA|DBGAAA|HHHHxx
+2615|4086|1|3|5|15|15|615|615|2615|2615|30|31|PWAAAA|EBGAAA|OOOOxx
+1471|4087|1|3|1|11|71|471|1471|1471|1471|142|143|PEAAAA|FBGAAA|VVVVxx
+7315|4088|1|3|5|15|15|315|1315|2315|7315|30|31|JVAAAA|GBGAAA|AAAAxx
+6013|4089|1|1|3|13|13|13|13|1013|6013|26|27|HXAAAA|HBGAAA|HHHHxx
+3077|4090|1|1|7|17|77|77|1077|3077|3077|154|155|JOAAAA|IBGAAA|OOOOxx
+2190|4091|0|2|0|10|90|190|190|2190|2190|180|181|GGAAAA|JBGAAA|VVVVxx
+528|4092|0|0|8|8|28|528|528|528|528|56|57|IUAAAA|KBGAAA|AAAAxx
+9508|4093|0|0|8|8|8|508|1508|4508|9508|16|17|SBAAAA|LBGAAA|HHHHxx
+2473|4094|1|1|3|13|73|473|473|2473|2473|146|147|DRAAAA|MBGAAA|OOOOxx
+167|4095|1|3|7|7|67|167|167|167|167|134|135|LGAAAA|NBGAAA|VVVVxx
+8448|4096|0|0|8|8|48|448|448|3448|8448|96|97|YMAAAA|OBGAAA|AAAAxx
+7538|4097|0|2|8|18|38|538|1538|2538|7538|76|77|YDAAAA|PBGAAA|HHHHxx
+7638|4098|0|2|8|18|38|638|1638|2638|7638|76|77|UHAAAA|QBGAAA|OOOOxx
+4328|4099|0|0|8|8|28|328|328|4328|4328|56|57|MKAAAA|RBGAAA|VVVVxx
+3812|4100|0|0|2|12|12|812|1812|3812|3812|24|25|QQAAAA|SBGAAA|AAAAxx
+2879|4101|1|3|9|19|79|879|879|2879|2879|158|159|TGAAAA|TBGAAA|HHHHxx
+4741|4102|1|1|1|1|41|741|741|4741|4741|82|83|JAAAAA|UBGAAA|OOOOxx
+9155|4103|1|3|5|15|55|155|1155|4155|9155|110|111|DOAAAA|VBGAAA|VVVVxx
+5151|4104|1|3|1|11|51|151|1151|151|5151|102|103|DQAAAA|WBGAAA|AAAAxx
+5591|4105|1|3|1|11|91|591|1591|591|5591|182|183|BHAAAA|XBGAAA|HHHHxx
+1034|4106|0|2|4|14|34|34|1034|1034|1034|68|69|UNAAAA|YBGAAA|OOOOxx
+765|4107|1|1|5|5|65|765|765|765|765|130|131|LDAAAA|ZBGAAA|VVVVxx
+2664|4108|0|0|4|4|64|664|664|2664|2664|128|129|MYAAAA|ACGAAA|AAAAxx
+6854|4109|0|2|4|14|54|854|854|1854|6854|108|109|QDAAAA|BCGAAA|HHHHxx
+8263|4110|1|3|3|3|63|263|263|3263|8263|126|127|VFAAAA|CCGAAA|OOOOxx
+8658|4111|0|2|8|18|58|658|658|3658|8658|116|117|AVAAAA|DCGAAA|VVVVxx
+587|4112|1|3|7|7|87|587|587|587|587|174|175|PWAAAA|ECGAAA|AAAAxx
+4553|4113|1|1|3|13|53|553|553|4553|4553|106|107|DTAAAA|FCGAAA|HHHHxx
+1368|4114|0|0|8|8|68|368|1368|1368|1368|136|137|QAAAAA|GCGAAA|OOOOxx
+1718|4115|0|2|8|18|18|718|1718|1718|1718|36|37|COAAAA|HCGAAA|VVVVxx
+140|4116|0|0|0|0|40|140|140|140|140|80|81|KFAAAA|ICGAAA|AAAAxx
+8341|4117|1|1|1|1|41|341|341|3341|8341|82|83|VIAAAA|JCGAAA|HHHHxx
+72|4118|0|0|2|12|72|72|72|72|72|144|145|UCAAAA|KCGAAA|OOOOxx
+6589|4119|1|1|9|9|89|589|589|1589|6589|178|179|LTAAAA|LCGAAA|VVVVxx
+2024|4120|0|0|4|4|24|24|24|2024|2024|48|49|WZAAAA|MCGAAA|AAAAxx
+8024|4121|0|0|4|4|24|24|24|3024|8024|48|49|QWAAAA|NCGAAA|HHHHxx
+9564|4122|0|0|4|4|64|564|1564|4564|9564|128|129|WDAAAA|OCGAAA|OOOOxx
+8625|4123|1|1|5|5|25|625|625|3625|8625|50|51|TTAAAA|PCGAAA|VVVVxx
+2680|4124|0|0|0|0|80|680|680|2680|2680|160|161|CZAAAA|QCGAAA|AAAAxx
+4323|4125|1|3|3|3|23|323|323|4323|4323|46|47|HKAAAA|RCGAAA|HHHHxx
+8981|4126|1|1|1|1|81|981|981|3981|8981|162|163|LHAAAA|SCGAAA|OOOOxx
+8909|4127|1|1|9|9|9|909|909|3909|8909|18|19|REAAAA|TCGAAA|VVVVxx
+5288|4128|0|0|8|8|88|288|1288|288|5288|176|177|KVAAAA|UCGAAA|AAAAxx
+2057|4129|1|1|7|17|57|57|57|2057|2057|114|115|DBAAAA|VCGAAA|HHHHxx
+5931|4130|1|3|1|11|31|931|1931|931|5931|62|63|DUAAAA|WCGAAA|OOOOxx
+9794|4131|0|2|4|14|94|794|1794|4794|9794|188|189|SMAAAA|XCGAAA|VVVVxx
+1012|4132|0|0|2|12|12|12|1012|1012|1012|24|25|YMAAAA|YCGAAA|AAAAxx
+5496|4133|0|0|6|16|96|496|1496|496|5496|192|193|KDAAAA|ZCGAAA|HHHHxx
+9182|4134|0|2|2|2|82|182|1182|4182|9182|164|165|EPAAAA|ADGAAA|OOOOxx
+5258|4135|0|2|8|18|58|258|1258|258|5258|116|117|GUAAAA|BDGAAA|VVVVxx
+3050|4136|0|2|0|10|50|50|1050|3050|3050|100|101|INAAAA|CDGAAA|AAAAxx
+2083|4137|1|3|3|3|83|83|83|2083|2083|166|167|DCAAAA|DDGAAA|HHHHxx
+3069|4138|1|1|9|9|69|69|1069|3069|3069|138|139|BOAAAA|EDGAAA|OOOOxx
+8459|4139|1|3|9|19|59|459|459|3459|8459|118|119|JNAAAA|FDGAAA|VVVVxx
+169|4140|1|1|9|9|69|169|169|169|169|138|139|NGAAAA|GDGAAA|AAAAxx
+4379|4141|1|3|9|19|79|379|379|4379|4379|158|159|LMAAAA|HDGAAA|HHHHxx
+5126|4142|0|2|6|6|26|126|1126|126|5126|52|53|EPAAAA|IDGAAA|OOOOxx
+1415|4143|1|3|5|15|15|415|1415|1415|1415|30|31|LCAAAA|JDGAAA|VVVVxx
+1163|4144|1|3|3|3|63|163|1163|1163|1163|126|127|TSAAAA|KDGAAA|AAAAxx
+3500|4145|0|0|0|0|0|500|1500|3500|3500|0|1|QEAAAA|LDGAAA|HHHHxx
+7202|4146|0|2|2|2|2|202|1202|2202|7202|4|5|ARAAAA|MDGAAA|OOOOxx
+747|4147|1|3|7|7|47|747|747|747|747|94|95|TCAAAA|NDGAAA|VVVVxx
+9264|4148|0|0|4|4|64|264|1264|4264|9264|128|129|ISAAAA|ODGAAA|AAAAxx
+8548|4149|0|0|8|8|48|548|548|3548|8548|96|97|UQAAAA|PDGAAA|HHHHxx
+4228|4150|0|0|8|8|28|228|228|4228|4228|56|57|QGAAAA|QDGAAA|OOOOxx
+7122|4151|0|2|2|2|22|122|1122|2122|7122|44|45|YNAAAA|RDGAAA|VVVVxx
+3395|4152|1|3|5|15|95|395|1395|3395|3395|190|191|PAAAAA|SDGAAA|AAAAxx
+5674|4153|0|2|4|14|74|674|1674|674|5674|148|149|GKAAAA|TDGAAA|HHHHxx
+7293|4154|1|1|3|13|93|293|1293|2293|7293|186|187|NUAAAA|UDGAAA|OOOOxx
+737|4155|1|1|7|17|37|737|737|737|737|74|75|JCAAAA|VDGAAA|VVVVxx
+9595|4156|1|3|5|15|95|595|1595|4595|9595|190|191|BFAAAA|WDGAAA|AAAAxx
+594|4157|0|2|4|14|94|594|594|594|594|188|189|WWAAAA|XDGAAA|HHHHxx
+5322|4158|0|2|2|2|22|322|1322|322|5322|44|45|SWAAAA|YDGAAA|OOOOxx
+2933|4159|1|1|3|13|33|933|933|2933|2933|66|67|VIAAAA|ZDGAAA|VVVVxx
+4955|4160|1|3|5|15|55|955|955|4955|4955|110|111|PIAAAA|AEGAAA|AAAAxx
+4073|4161|1|1|3|13|73|73|73|4073|4073|146|147|RAAAAA|BEGAAA|HHHHxx
+7249|4162|1|1|9|9|49|249|1249|2249|7249|98|99|VSAAAA|CEGAAA|OOOOxx
+192|4163|0|0|2|12|92|192|192|192|192|184|185|KHAAAA|DEGAAA|VVVVxx
+2617|4164|1|1|7|17|17|617|617|2617|2617|34|35|RWAAAA|EEGAAA|AAAAxx
+7409|4165|1|1|9|9|9|409|1409|2409|7409|18|19|ZYAAAA|FEGAAA|HHHHxx
+4903|4166|1|3|3|3|3|903|903|4903|4903|6|7|PGAAAA|GEGAAA|OOOOxx
+9797|4167|1|1|7|17|97|797|1797|4797|9797|194|195|VMAAAA|HEGAAA|VVVVxx
+9919|4168|1|3|9|19|19|919|1919|4919|9919|38|39|NRAAAA|IEGAAA|AAAAxx
+1878|4169|0|2|8|18|78|878|1878|1878|1878|156|157|GUAAAA|JEGAAA|HHHHxx
+4851|4170|1|3|1|11|51|851|851|4851|4851|102|103|PEAAAA|KEGAAA|OOOOxx
+5514|4171|0|2|4|14|14|514|1514|514|5514|28|29|CEAAAA|LEGAAA|VVVVxx
+2582|4172|0|2|2|2|82|582|582|2582|2582|164|165|IVAAAA|MEGAAA|AAAAxx
+3564|4173|0|0|4|4|64|564|1564|3564|3564|128|129|CHAAAA|NEGAAA|HHHHxx
+7085|4174|1|1|5|5|85|85|1085|2085|7085|170|171|NMAAAA|OEGAAA|OOOOxx
+3619|4175|1|3|9|19|19|619|1619|3619|3619|38|39|FJAAAA|PEGAAA|VVVVxx
+261|4176|1|1|1|1|61|261|261|261|261|122|123|BKAAAA|QEGAAA|AAAAxx
+7338|4177|0|2|8|18|38|338|1338|2338|7338|76|77|GWAAAA|REGAAA|HHHHxx
+4251|4178|1|3|1|11|51|251|251|4251|4251|102|103|NHAAAA|SEGAAA|OOOOxx
+5360|4179|0|0|0|0|60|360|1360|360|5360|120|121|EYAAAA|TEGAAA|VVVVxx
+5678|4180|0|2|8|18|78|678|1678|678|5678|156|157|KKAAAA|UEGAAA|AAAAxx
+9162|4181|0|2|2|2|62|162|1162|4162|9162|124|125|KOAAAA|VEGAAA|HHHHxx
+5920|4182|0|0|0|0|20|920|1920|920|5920|40|41|STAAAA|WEGAAA|OOOOxx
+7156|4183|0|0|6|16|56|156|1156|2156|7156|112|113|GPAAAA|XEGAAA|VVVVxx
+4271|4184|1|3|1|11|71|271|271|4271|4271|142|143|HIAAAA|YEGAAA|AAAAxx
+4698|4185|0|2|8|18|98|698|698|4698|4698|196|197|SYAAAA|ZEGAAA|HHHHxx
+1572|4186|0|0|2|12|72|572|1572|1572|1572|144|145|MIAAAA|AFGAAA|OOOOxx
+6974|4187|0|2|4|14|74|974|974|1974|6974|148|149|GIAAAA|BFGAAA|VVVVxx
+4291|4188|1|3|1|11|91|291|291|4291|4291|182|183|BJAAAA|CFGAAA|AAAAxx
+4036|4189|0|0|6|16|36|36|36|4036|4036|72|73|GZAAAA|DFGAAA|HHHHxx
+7473|4190|1|1|3|13|73|473|1473|2473|7473|146|147|LBAAAA|EFGAAA|OOOOxx
+4786|4191|0|2|6|6|86|786|786|4786|4786|172|173|CCAAAA|FFGAAA|VVVVxx
+2662|4192|0|2|2|2|62|662|662|2662|2662|124|125|KYAAAA|GFGAAA|AAAAxx
+916|4193|0|0|6|16|16|916|916|916|916|32|33|GJAAAA|HFGAAA|HHHHxx
+668|4194|0|0|8|8|68|668|668|668|668|136|137|SZAAAA|IFGAAA|OOOOxx
+4874|4195|0|2|4|14|74|874|874|4874|4874|148|149|MFAAAA|JFGAAA|VVVVxx
+3752|4196|0|0|2|12|52|752|1752|3752|3752|104|105|IOAAAA|KFGAAA|AAAAxx
+4865|4197|1|1|5|5|65|865|865|4865|4865|130|131|DFAAAA|LFGAAA|HHHHxx
+7052|4198|0|0|2|12|52|52|1052|2052|7052|104|105|GLAAAA|MFGAAA|OOOOxx
+5712|4199|0|0|2|12|12|712|1712|712|5712|24|25|SLAAAA|NFGAAA|VVVVxx
+31|4200|1|3|1|11|31|31|31|31|31|62|63|FBAAAA|OFGAAA|AAAAxx
+4944|4201|0|0|4|4|44|944|944|4944|4944|88|89|EIAAAA|PFGAAA|HHHHxx
+1435|4202|1|3|5|15|35|435|1435|1435|1435|70|71|FDAAAA|QFGAAA|OOOOxx
+501|4203|1|1|1|1|1|501|501|501|501|2|3|HTAAAA|RFGAAA|VVVVxx
+9401|4204|1|1|1|1|1|401|1401|4401|9401|2|3|PXAAAA|SFGAAA|AAAAxx
+5014|4205|0|2|4|14|14|14|1014|14|5014|28|29|WKAAAA|TFGAAA|HHHHxx
+9125|4206|1|1|5|5|25|125|1125|4125|9125|50|51|ZMAAAA|UFGAAA|OOOOxx
+6144|4207|0|0|4|4|44|144|144|1144|6144|88|89|ICAAAA|VFGAAA|VVVVxx
+1743|4208|1|3|3|3|43|743|1743|1743|1743|86|87|BPAAAA|WFGAAA|AAAAxx
+4316|4209|0|0|6|16|16|316|316|4316|4316|32|33|AKAAAA|XFGAAA|HHHHxx
+8212|4210|0|0|2|12|12|212|212|3212|8212|24|25|WDAAAA|YFGAAA|OOOOxx
+7344|4211|0|0|4|4|44|344|1344|2344|7344|88|89|MWAAAA|ZFGAAA|VVVVxx
+2051|4212|1|3|1|11|51|51|51|2051|2051|102|103|XAAAAA|AGGAAA|AAAAxx
+8131|4213|1|3|1|11|31|131|131|3131|8131|62|63|TAAAAA|BGGAAA|HHHHxx
+7023|4214|1|3|3|3|23|23|1023|2023|7023|46|47|DKAAAA|CGGAAA|OOOOxx
+9674|4215|0|2|4|14|74|674|1674|4674|9674|148|149|CIAAAA|DGGAAA|VVVVxx
+4984|4216|0|0|4|4|84|984|984|4984|4984|168|169|SJAAAA|EGGAAA|AAAAxx
+111|4217|1|3|1|11|11|111|111|111|111|22|23|HEAAAA|FGGAAA|HHHHxx
+2296|4218|0|0|6|16|96|296|296|2296|2296|192|193|IKAAAA|GGGAAA|OOOOxx
+5025|4219|1|1|5|5|25|25|1025|25|5025|50|51|HLAAAA|HGGAAA|VVVVxx
+1756|4220|0|0|6|16|56|756|1756|1756|1756|112|113|OPAAAA|IGGAAA|AAAAxx
+2885|4221|1|1|5|5|85|885|885|2885|2885|170|171|ZGAAAA|JGGAAA|HHHHxx
+2541|4222|1|1|1|1|41|541|541|2541|2541|82|83|TTAAAA|KGGAAA|OOOOxx
+1919|4223|1|3|9|19|19|919|1919|1919|1919|38|39|VVAAAA|LGGAAA|VVVVxx
+6496|4224|0|0|6|16|96|496|496|1496|6496|192|193|WPAAAA|MGGAAA|AAAAxx
+6103|4225|1|3|3|3|3|103|103|1103|6103|6|7|TAAAAA|NGGAAA|HHHHxx
+98|4226|0|2|8|18|98|98|98|98|98|196|197|UDAAAA|OGGAAA|OOOOxx
+3727|4227|1|3|7|7|27|727|1727|3727|3727|54|55|JNAAAA|PGGAAA|VVVVxx
+689|4228|1|1|9|9|89|689|689|689|689|178|179|NAAAAA|QGGAAA|AAAAxx
+7181|4229|1|1|1|1|81|181|1181|2181|7181|162|163|FQAAAA|RGGAAA|HHHHxx
+8447|4230|1|3|7|7|47|447|447|3447|8447|94|95|XMAAAA|SGGAAA|OOOOxx
+4569|4231|1|1|9|9|69|569|569|4569|4569|138|139|TTAAAA|TGGAAA|VVVVxx
+8844|4232|0|0|4|4|44|844|844|3844|8844|88|89|ECAAAA|UGGAAA|AAAAxx
+2436|4233|0|0|6|16|36|436|436|2436|2436|72|73|SPAAAA|VGGAAA|HHHHxx
+391|4234|1|3|1|11|91|391|391|391|391|182|183|BPAAAA|WGGAAA|OOOOxx
+3035|4235|1|3|5|15|35|35|1035|3035|3035|70|71|TMAAAA|XGGAAA|VVVVxx
+7583|4236|1|3|3|3|83|583|1583|2583|7583|166|167|RFAAAA|YGGAAA|AAAAxx
+1145|4237|1|1|5|5|45|145|1145|1145|1145|90|91|BSAAAA|ZGGAAA|HHHHxx
+93|4238|1|1|3|13|93|93|93|93|93|186|187|PDAAAA|AHGAAA|OOOOxx
+8896|4239|0|0|6|16|96|896|896|3896|8896|192|193|EEAAAA|BHGAAA|VVVVxx
+6719|4240|1|3|9|19|19|719|719|1719|6719|38|39|LYAAAA|CHGAAA|AAAAxx
+7728|4241|0|0|8|8|28|728|1728|2728|7728|56|57|GLAAAA|DHGAAA|HHHHxx
+1349|4242|1|1|9|9|49|349|1349|1349|1349|98|99|XZAAAA|EHGAAA|OOOOxx
+5349|4243|1|1|9|9|49|349|1349|349|5349|98|99|TXAAAA|FHGAAA|VVVVxx
+3040|4244|0|0|0|0|40|40|1040|3040|3040|80|81|YMAAAA|GHGAAA|AAAAxx
+2414|4245|0|2|4|14|14|414|414|2414|2414|28|29|WOAAAA|HHGAAA|HHHHxx
+5122|4246|0|2|2|2|22|122|1122|122|5122|44|45|APAAAA|IHGAAA|OOOOxx
+9553|4247|1|1|3|13|53|553|1553|4553|9553|106|107|LDAAAA|JHGAAA|VVVVxx
+5987|4248|1|3|7|7|87|987|1987|987|5987|174|175|HWAAAA|KHGAAA|AAAAxx
+5939|4249|1|3|9|19|39|939|1939|939|5939|78|79|LUAAAA|LHGAAA|HHHHxx
+3525|4250|1|1|5|5|25|525|1525|3525|3525|50|51|PFAAAA|MHGAAA|OOOOxx
+1371|4251|1|3|1|11|71|371|1371|1371|1371|142|143|TAAAAA|NHGAAA|VVVVxx
+618|4252|0|2|8|18|18|618|618|618|618|36|37|UXAAAA|OHGAAA|AAAAxx
+6529|4253|1|1|9|9|29|529|529|1529|6529|58|59|DRAAAA|PHGAAA|HHHHxx
+4010|4254|0|2|0|10|10|10|10|4010|4010|20|21|GYAAAA|QHGAAA|OOOOxx
+328|4255|0|0|8|8|28|328|328|328|328|56|57|QMAAAA|RHGAAA|VVVVxx
+6121|4256|1|1|1|1|21|121|121|1121|6121|42|43|LBAAAA|SHGAAA|AAAAxx
+3505|4257|1|1|5|5|5|505|1505|3505|3505|10|11|VEAAAA|THGAAA|HHHHxx
+2033|4258|1|1|3|13|33|33|33|2033|2033|66|67|FAAAAA|UHGAAA|OOOOxx
+4724|4259|0|0|4|4|24|724|724|4724|4724|48|49|SZAAAA|VHGAAA|VVVVxx
+8717|4260|1|1|7|17|17|717|717|3717|8717|34|35|HXAAAA|WHGAAA|AAAAxx
+5639|4261|1|3|9|19|39|639|1639|639|5639|78|79|XIAAAA|XHGAAA|HHHHxx
+3448|4262|0|0|8|8|48|448|1448|3448|3448|96|97|QCAAAA|YHGAAA|OOOOxx
+2919|4263|1|3|9|19|19|919|919|2919|2919|38|39|HIAAAA|ZHGAAA|VVVVxx
+3417|4264|1|1|7|17|17|417|1417|3417|3417|34|35|LBAAAA|AIGAAA|AAAAxx
+943|4265|1|3|3|3|43|943|943|943|943|86|87|HKAAAA|BIGAAA|HHHHxx
+775|4266|1|3|5|15|75|775|775|775|775|150|151|VDAAAA|CIGAAA|OOOOxx
+2333|4267|1|1|3|13|33|333|333|2333|2333|66|67|TLAAAA|DIGAAA|VVVVxx
+4801|4268|1|1|1|1|1|801|801|4801|4801|2|3|RCAAAA|EIGAAA|AAAAxx
+7169|4269|1|1|9|9|69|169|1169|2169|7169|138|139|TPAAAA|FIGAAA|HHHHxx
+2840|4270|0|0|0|0|40|840|840|2840|2840|80|81|GFAAAA|GIGAAA|OOOOxx
+9034|4271|0|2|4|14|34|34|1034|4034|9034|68|69|MJAAAA|HIGAAA|VVVVxx
+6154|4272|0|2|4|14|54|154|154|1154|6154|108|109|SCAAAA|IIGAAA|AAAAxx
+1412|4273|0|0|2|12|12|412|1412|1412|1412|24|25|ICAAAA|JIGAAA|HHHHxx
+2263|4274|1|3|3|3|63|263|263|2263|2263|126|127|BJAAAA|KIGAAA|OOOOxx
+7118|4275|0|2|8|18|18|118|1118|2118|7118|36|37|UNAAAA|LIGAAA|VVVVxx
+1526|4276|0|2|6|6|26|526|1526|1526|1526|52|53|SGAAAA|MIGAAA|AAAAxx
+491|4277|1|3|1|11|91|491|491|491|491|182|183|XSAAAA|NIGAAA|HHHHxx
+9732|4278|0|0|2|12|32|732|1732|4732|9732|64|65|IKAAAA|OIGAAA|OOOOxx
+7067|4279|1|3|7|7|67|67|1067|2067|7067|134|135|VLAAAA|PIGAAA|VVVVxx
+212|4280|0|0|2|12|12|212|212|212|212|24|25|EIAAAA|QIGAAA|AAAAxx
+1955|4281|1|3|5|15|55|955|1955|1955|1955|110|111|FXAAAA|RIGAAA|HHHHxx
+3303|4282|1|3|3|3|3|303|1303|3303|3303|6|7|BXAAAA|SIGAAA|OOOOxx
+2715|4283|1|3|5|15|15|715|715|2715|2715|30|31|LAAAAA|TIGAAA|VVVVxx
+8168|4284|0|0|8|8|68|168|168|3168|8168|136|137|ECAAAA|UIGAAA|AAAAxx
+6799|4285|1|3|9|19|99|799|799|1799|6799|198|199|NBAAAA|VIGAAA|HHHHxx
+5080|4286|0|0|0|0|80|80|1080|80|5080|160|161|KNAAAA|WIGAAA|OOOOxx
+4939|4287|1|3|9|19|39|939|939|4939|4939|78|79|ZHAAAA|XIGAAA|VVVVxx
+6604|4288|0|0|4|4|4|604|604|1604|6604|8|9|AUAAAA|YIGAAA|AAAAxx
+6531|4289|1|3|1|11|31|531|531|1531|6531|62|63|FRAAAA|ZIGAAA|HHHHxx
+9948|4290|0|0|8|8|48|948|1948|4948|9948|96|97|QSAAAA|AJGAAA|OOOOxx
+7923|4291|1|3|3|3|23|923|1923|2923|7923|46|47|TSAAAA|BJGAAA|VVVVxx
+9905|4292|1|1|5|5|5|905|1905|4905|9905|10|11|ZQAAAA|CJGAAA|AAAAxx
+340|4293|0|0|0|0|40|340|340|340|340|80|81|CNAAAA|DJGAAA|HHHHxx
+1721|4294|1|1|1|1|21|721|1721|1721|1721|42|43|FOAAAA|EJGAAA|OOOOxx
+9047|4295|1|3|7|7|47|47|1047|4047|9047|94|95|ZJAAAA|FJGAAA|VVVVxx
+4723|4296|1|3|3|3|23|723|723|4723|4723|46|47|RZAAAA|GJGAAA|AAAAxx
+5748|4297|0|0|8|8|48|748|1748|748|5748|96|97|CNAAAA|HJGAAA|HHHHxx
+6845|4298|1|1|5|5|45|845|845|1845|6845|90|91|HDAAAA|IJGAAA|OOOOxx
+1556|4299|0|0|6|16|56|556|1556|1556|1556|112|113|WHAAAA|JJGAAA|VVVVxx
+9505|4300|1|1|5|5|5|505|1505|4505|9505|10|11|PBAAAA|KJGAAA|AAAAxx
+3573|4301|1|1|3|13|73|573|1573|3573|3573|146|147|LHAAAA|LJGAAA|HHHHxx
+3785|4302|1|1|5|5|85|785|1785|3785|3785|170|171|PPAAAA|MJGAAA|OOOOxx
+2772|4303|0|0|2|12|72|772|772|2772|2772|144|145|QCAAAA|NJGAAA|VVVVxx
+7282|4304|0|2|2|2|82|282|1282|2282|7282|164|165|CUAAAA|OJGAAA|AAAAxx
+8106|4305|0|2|6|6|6|106|106|3106|8106|12|13|UZAAAA|PJGAAA|HHHHxx
+2847|4306|1|3|7|7|47|847|847|2847|2847|94|95|NFAAAA|QJGAAA|OOOOxx
+9803|4307|1|3|3|3|3|803|1803|4803|9803|6|7|BNAAAA|RJGAAA|VVVVxx
+7719|4308|1|3|9|19|19|719|1719|2719|7719|38|39|XKAAAA|SJGAAA|AAAAxx
+4649|4309|1|1|9|9|49|649|649|4649|4649|98|99|VWAAAA|TJGAAA|HHHHxx
+6196|4310|0|0|6|16|96|196|196|1196|6196|192|193|IEAAAA|UJGAAA|OOOOxx
+6026|4311|0|2|6|6|26|26|26|1026|6026|52|53|UXAAAA|VJGAAA|VVVVxx
+1646|4312|0|2|6|6|46|646|1646|1646|1646|92|93|ILAAAA|WJGAAA|AAAAxx
+6526|4313|0|2|6|6|26|526|526|1526|6526|52|53|ARAAAA|XJGAAA|HHHHxx
+5110|4314|0|2|0|10|10|110|1110|110|5110|20|21|OOAAAA|YJGAAA|OOOOxx
+3946|4315|0|2|6|6|46|946|1946|3946|3946|92|93|UVAAAA|ZJGAAA|VVVVxx
+445|4316|1|1|5|5|45|445|445|445|445|90|91|DRAAAA|AKGAAA|AAAAxx
+3249|4317|1|1|9|9|49|249|1249|3249|3249|98|99|ZUAAAA|BKGAAA|HHHHxx
+2501|4318|1|1|1|1|1|501|501|2501|2501|2|3|FSAAAA|CKGAAA|OOOOxx
+3243|4319|1|3|3|3|43|243|1243|3243|3243|86|87|TUAAAA|DKGAAA|VVVVxx
+4701|4320|1|1|1|1|1|701|701|4701|4701|2|3|VYAAAA|EKGAAA|AAAAxx
+472|4321|0|0|2|12|72|472|472|472|472|144|145|ESAAAA|FKGAAA|HHHHxx
+3356|4322|0|0|6|16|56|356|1356|3356|3356|112|113|CZAAAA|GKGAAA|OOOOxx
+9967|4323|1|3|7|7|67|967|1967|4967|9967|134|135|JTAAAA|HKGAAA|VVVVxx
+4292|4324|0|0|2|12|92|292|292|4292|4292|184|185|CJAAAA|IKGAAA|AAAAxx
+7005|4325|1|1|5|5|5|5|1005|2005|7005|10|11|LJAAAA|JKGAAA|HHHHxx
+6267|4326|1|3|7|7|67|267|267|1267|6267|134|135|BHAAAA|KKGAAA|OOOOxx
+6678|4327|0|2|8|18|78|678|678|1678|6678|156|157|WWAAAA|LKGAAA|VVVVxx
+6083|4328|1|3|3|3|83|83|83|1083|6083|166|167|ZZAAAA|MKGAAA|AAAAxx
+760|4329|0|0|0|0|60|760|760|760|760|120|121|GDAAAA|NKGAAA|HHHHxx
+7833|4330|1|1|3|13|33|833|1833|2833|7833|66|67|HPAAAA|OKGAAA|OOOOxx
+2877|4331|1|1|7|17|77|877|877|2877|2877|154|155|RGAAAA|PKGAAA|VVVVxx
+8810|4332|0|2|0|10|10|810|810|3810|8810|20|21|WAAAAA|QKGAAA|AAAAxx
+1560|4333|0|0|0|0|60|560|1560|1560|1560|120|121|AIAAAA|RKGAAA|HHHHxx
+1367|4334|1|3|7|7|67|367|1367|1367|1367|134|135|PAAAAA|SKGAAA|OOOOxx
+8756|4335|0|0|6|16|56|756|756|3756|8756|112|113|UYAAAA|TKGAAA|VVVVxx
+1346|4336|0|2|6|6|46|346|1346|1346|1346|92|93|UZAAAA|UKGAAA|AAAAxx
+6449|4337|1|1|9|9|49|449|449|1449|6449|98|99|BOAAAA|VKGAAA|HHHHxx
+6658|4338|0|2|8|18|58|658|658|1658|6658|116|117|CWAAAA|WKGAAA|OOOOxx
+6745|4339|1|1|5|5|45|745|745|1745|6745|90|91|LZAAAA|XKGAAA|VVVVxx
+4866|4340|0|2|6|6|66|866|866|4866|4866|132|133|EFAAAA|YKGAAA|AAAAxx
+14|4341|0|2|4|14|14|14|14|14|14|28|29|OAAAAA|ZKGAAA|HHHHxx
+4506|4342|0|2|6|6|6|506|506|4506|4506|12|13|IRAAAA|ALGAAA|OOOOxx
+1923|4343|1|3|3|3|23|923|1923|1923|1923|46|47|ZVAAAA|BLGAAA|VVVVxx
+8365|4344|1|1|5|5|65|365|365|3365|8365|130|131|TJAAAA|CLGAAA|AAAAxx
+1279|4345|1|3|9|19|79|279|1279|1279|1279|158|159|FXAAAA|DLGAAA|HHHHxx
+7666|4346|0|2|6|6|66|666|1666|2666|7666|132|133|WIAAAA|ELGAAA|OOOOxx
+7404|4347|0|0|4|4|4|404|1404|2404|7404|8|9|UYAAAA|FLGAAA|VVVVxx
+65|4348|1|1|5|5|65|65|65|65|65|130|131|NCAAAA|GLGAAA|AAAAxx
+5820|4349|0|0|0|0|20|820|1820|820|5820|40|41|WPAAAA|HLGAAA|HHHHxx
+459|4350|1|3|9|19|59|459|459|459|459|118|119|RRAAAA|ILGAAA|OOOOxx
+4787|4351|1|3|7|7|87|787|787|4787|4787|174|175|DCAAAA|JLGAAA|VVVVxx
+5631|4352|1|3|1|11|31|631|1631|631|5631|62|63|PIAAAA|KLGAAA|AAAAxx
+9717|4353|1|1|7|17|17|717|1717|4717|9717|34|35|TJAAAA|LLGAAA|HHHHxx
+2560|4354|0|0|0|0|60|560|560|2560|2560|120|121|MUAAAA|MLGAAA|OOOOxx
+8295|4355|1|3|5|15|95|295|295|3295|8295|190|191|BHAAAA|NLGAAA|VVVVxx
+3596|4356|0|0|6|16|96|596|1596|3596|3596|192|193|IIAAAA|OLGAAA|AAAAxx
+2023|4357|1|3|3|3|23|23|23|2023|2023|46|47|VZAAAA|PLGAAA|HHHHxx
+5055|4358|1|3|5|15|55|55|1055|55|5055|110|111|LMAAAA|QLGAAA|OOOOxx
+763|4359|1|3|3|3|63|763|763|763|763|126|127|JDAAAA|RLGAAA|VVVVxx
+6733|4360|1|1|3|13|33|733|733|1733|6733|66|67|ZYAAAA|SLGAAA|AAAAxx
+9266|4361|0|2|6|6|66|266|1266|4266|9266|132|133|KSAAAA|TLGAAA|HHHHxx
+4479|4362|1|3|9|19|79|479|479|4479|4479|158|159|HQAAAA|ULGAAA|OOOOxx
+1816|4363|0|0|6|16|16|816|1816|1816|1816|32|33|WRAAAA|VLGAAA|VVVVxx
+899|4364|1|3|9|19|99|899|899|899|899|198|199|PIAAAA|WLGAAA|AAAAxx
+230|4365|0|2|0|10|30|230|230|230|230|60|61|WIAAAA|XLGAAA|HHHHxx
+5362|4366|0|2|2|2|62|362|1362|362|5362|124|125|GYAAAA|YLGAAA|OOOOxx
+1609|4367|1|1|9|9|9|609|1609|1609|1609|18|19|XJAAAA|ZLGAAA|VVVVxx
+6750|4368|0|2|0|10|50|750|750|1750|6750|100|101|QZAAAA|AMGAAA|AAAAxx
+9704|4369|0|0|4|4|4|704|1704|4704|9704|8|9|GJAAAA|BMGAAA|HHHHxx
+3991|4370|1|3|1|11|91|991|1991|3991|3991|182|183|NXAAAA|CMGAAA|OOOOxx
+3959|4371|1|3|9|19|59|959|1959|3959|3959|118|119|HWAAAA|DMGAAA|VVVVxx
+9021|4372|1|1|1|1|21|21|1021|4021|9021|42|43|ZIAAAA|EMGAAA|AAAAxx
+7585|4373|1|1|5|5|85|585|1585|2585|7585|170|171|TFAAAA|FMGAAA|HHHHxx
+7083|4374|1|3|3|3|83|83|1083|2083|7083|166|167|LMAAAA|GMGAAA|OOOOxx
+7688|4375|0|0|8|8|88|688|1688|2688|7688|176|177|SJAAAA|HMGAAA|VVVVxx
+2673|4376|1|1|3|13|73|673|673|2673|2673|146|147|VYAAAA|IMGAAA|AAAAxx
+3554|4377|0|2|4|14|54|554|1554|3554|3554|108|109|SGAAAA|JMGAAA|HHHHxx
+7416|4378|0|0|6|16|16|416|1416|2416|7416|32|33|GZAAAA|KMGAAA|OOOOxx
+5672|4379|0|0|2|12|72|672|1672|672|5672|144|145|EKAAAA|LMGAAA|VVVVxx
+1355|4380|1|3|5|15|55|355|1355|1355|1355|110|111|DAAAAA|MMGAAA|AAAAxx
+3149|4381|1|1|9|9|49|149|1149|3149|3149|98|99|DRAAAA|NMGAAA|HHHHxx
+5811|4382|1|3|1|11|11|811|1811|811|5811|22|23|NPAAAA|OMGAAA|OOOOxx
+3759|4383|1|3|9|19|59|759|1759|3759|3759|118|119|POAAAA|PMGAAA|VVVVxx
+5634|4384|0|2|4|14|34|634|1634|634|5634|68|69|SIAAAA|QMGAAA|AAAAxx
+8617|4385|1|1|7|17|17|617|617|3617|8617|34|35|LTAAAA|RMGAAA|HHHHxx
+8949|4386|1|1|9|9|49|949|949|3949|8949|98|99|FGAAAA|SMGAAA|OOOOxx
+3964|4387|0|0|4|4|64|964|1964|3964|3964|128|129|MWAAAA|TMGAAA|VVVVxx
+3852|4388|0|0|2|12|52|852|1852|3852|3852|104|105|ESAAAA|UMGAAA|AAAAxx
+1555|4389|1|3|5|15|55|555|1555|1555|1555|110|111|VHAAAA|VMGAAA|HHHHxx
+6536|4390|0|0|6|16|36|536|536|1536|6536|72|73|KRAAAA|WMGAAA|OOOOxx
+4779|4391|1|3|9|19|79|779|779|4779|4779|158|159|VBAAAA|XMGAAA|VVVVxx
+1893|4392|1|1|3|13|93|893|1893|1893|1893|186|187|VUAAAA|YMGAAA|AAAAxx
+9358|4393|0|2|8|18|58|358|1358|4358|9358|116|117|YVAAAA|ZMGAAA|HHHHxx
+7438|4394|0|2|8|18|38|438|1438|2438|7438|76|77|CAAAAA|ANGAAA|OOOOxx
+941|4395|1|1|1|1|41|941|941|941|941|82|83|FKAAAA|BNGAAA|VVVVxx
+4844|4396|0|0|4|4|44|844|844|4844|4844|88|89|IEAAAA|CNGAAA|AAAAxx
+4745|4397|1|1|5|5|45|745|745|4745|4745|90|91|NAAAAA|DNGAAA|HHHHxx
+1017|4398|1|1|7|17|17|17|1017|1017|1017|34|35|DNAAAA|ENGAAA|OOOOxx
+327|4399|1|3|7|7|27|327|327|327|327|54|55|PMAAAA|FNGAAA|VVVVxx
+3152|4400|0|0|2|12|52|152|1152|3152|3152|104|105|GRAAAA|GNGAAA|AAAAxx
+4711|4401|1|3|1|11|11|711|711|4711|4711|22|23|FZAAAA|HNGAAA|HHHHxx
+141|4402|1|1|1|1|41|141|141|141|141|82|83|LFAAAA|INGAAA|OOOOxx
+1303|4403|1|3|3|3|3|303|1303|1303|1303|6|7|DYAAAA|JNGAAA|VVVVxx
+8873|4404|1|1|3|13|73|873|873|3873|8873|146|147|HDAAAA|KNGAAA|AAAAxx
+8481|4405|1|1|1|1|81|481|481|3481|8481|162|163|FOAAAA|LNGAAA|HHHHxx
+5445|4406|1|1|5|5|45|445|1445|445|5445|90|91|LBAAAA|MNGAAA|OOOOxx
+7868|4407|0|0|8|8|68|868|1868|2868|7868|136|137|QQAAAA|NNGAAA|VVVVxx
+6722|4408|0|2|2|2|22|722|722|1722|6722|44|45|OYAAAA|ONGAAA|AAAAxx
+6628|4409|0|0|8|8|28|628|628|1628|6628|56|57|YUAAAA|PNGAAA|HHHHxx
+7738|4410|0|2|8|18|38|738|1738|2738|7738|76|77|QLAAAA|QNGAAA|OOOOxx
+1018|4411|0|2|8|18|18|18|1018|1018|1018|36|37|ENAAAA|RNGAAA|VVVVxx
+3296|4412|0|0|6|16|96|296|1296|3296|3296|192|193|UWAAAA|SNGAAA|AAAAxx
+1946|4413|0|2|6|6|46|946|1946|1946|1946|92|93|WWAAAA|TNGAAA|HHHHxx
+6603|4414|1|3|3|3|3|603|603|1603|6603|6|7|ZTAAAA|UNGAAA|OOOOxx
+3562|4415|0|2|2|2|62|562|1562|3562|3562|124|125|AHAAAA|VNGAAA|VVVVxx
+1147|4416|1|3|7|7|47|147|1147|1147|1147|94|95|DSAAAA|WNGAAA|AAAAxx
+6031|4417|1|3|1|11|31|31|31|1031|6031|62|63|ZXAAAA|XNGAAA|HHHHxx
+6484|4418|0|0|4|4|84|484|484|1484|6484|168|169|KPAAAA|YNGAAA|OOOOxx
+496|4419|0|0|6|16|96|496|496|496|496|192|193|CTAAAA|ZNGAAA|VVVVxx
+4563|4420|1|3|3|3|63|563|563|4563|4563|126|127|NTAAAA|AOGAAA|AAAAxx
+1037|4421|1|1|7|17|37|37|1037|1037|1037|74|75|XNAAAA|BOGAAA|HHHHxx
+9672|4422|0|0|2|12|72|672|1672|4672|9672|144|145|AIAAAA|COGAAA|OOOOxx
+9053|4423|1|1|3|13|53|53|1053|4053|9053|106|107|FKAAAA|DOGAAA|VVVVxx
+2523|4424|1|3|3|3|23|523|523|2523|2523|46|47|BTAAAA|EOGAAA|AAAAxx
+8519|4425|1|3|9|19|19|519|519|3519|8519|38|39|RPAAAA|FOGAAA|HHHHxx
+8190|4426|0|2|0|10|90|190|190|3190|8190|180|181|ADAAAA|GOGAAA|OOOOxx
+2068|4427|0|0|8|8|68|68|68|2068|2068|136|137|OBAAAA|HOGAAA|VVVVxx
+8569|4428|1|1|9|9|69|569|569|3569|8569|138|139|PRAAAA|IOGAAA|AAAAxx
+6535|4429|1|3|5|15|35|535|535|1535|6535|70|71|JRAAAA|JOGAAA|HHHHxx
+1810|4430|0|2|0|10|10|810|1810|1810|1810|20|21|QRAAAA|KOGAAA|OOOOxx
+3099|4431|1|3|9|19|99|99|1099|3099|3099|198|199|FPAAAA|LOGAAA|VVVVxx
+7466|4432|0|2|6|6|66|466|1466|2466|7466|132|133|EBAAAA|MOGAAA|AAAAxx
+4017|4433|1|1|7|17|17|17|17|4017|4017|34|35|NYAAAA|NOGAAA|HHHHxx
+1097|4434|1|1|7|17|97|97|1097|1097|1097|194|195|FQAAAA|OOGAAA|OOOOxx
+7686|4435|0|2|6|6|86|686|1686|2686|7686|172|173|QJAAAA|POGAAA|VVVVxx
+6742|4436|0|2|2|2|42|742|742|1742|6742|84|85|IZAAAA|QOGAAA|AAAAxx
+5966|4437|0|2|6|6|66|966|1966|966|5966|132|133|MVAAAA|ROGAAA|HHHHxx
+3632|4438|0|0|2|12|32|632|1632|3632|3632|64|65|SJAAAA|SOGAAA|OOOOxx
+8837|4439|1|1|7|17|37|837|837|3837|8837|74|75|XBAAAA|TOGAAA|VVVVxx
+1667|4440|1|3|7|7|67|667|1667|1667|1667|134|135|DMAAAA|UOGAAA|AAAAxx
+8833|4441|1|1|3|13|33|833|833|3833|8833|66|67|TBAAAA|VOGAAA|HHHHxx
+9805|4442|1|1|5|5|5|805|1805|4805|9805|10|11|DNAAAA|WOGAAA|OOOOxx
+3650|4443|0|2|0|10|50|650|1650|3650|3650|100|101|KKAAAA|XOGAAA|VVVVxx
+2237|4444|1|1|7|17|37|237|237|2237|2237|74|75|BIAAAA|YOGAAA|AAAAxx
+9980|4445|0|0|0|0|80|980|1980|4980|9980|160|161|WTAAAA|ZOGAAA|HHHHxx
+2861|4446|1|1|1|1|61|861|861|2861|2861|122|123|BGAAAA|APGAAA|OOOOxx
+1334|4447|0|2|4|14|34|334|1334|1334|1334|68|69|IZAAAA|BPGAAA|VVVVxx
+842|4448|0|2|2|2|42|842|842|842|842|84|85|KGAAAA|CPGAAA|AAAAxx
+1116|4449|0|0|6|16|16|116|1116|1116|1116|32|33|YQAAAA|DPGAAA|HHHHxx
+4055|4450|1|3|5|15|55|55|55|4055|4055|110|111|ZZAAAA|EPGAAA|OOOOxx
+3842|4451|0|2|2|2|42|842|1842|3842|3842|84|85|URAAAA|FPGAAA|VVVVxx
+1886|4452|0|2|6|6|86|886|1886|1886|1886|172|173|OUAAAA|GPGAAA|AAAAxx
+8589|4453|1|1|9|9|89|589|589|3589|8589|178|179|JSAAAA|HPGAAA|HHHHxx
+5873|4454|1|1|3|13|73|873|1873|873|5873|146|147|XRAAAA|IPGAAA|OOOOxx
+7711|4455|1|3|1|11|11|711|1711|2711|7711|22|23|PKAAAA|JPGAAA|VVVVxx
+911|4456|1|3|1|11|11|911|911|911|911|22|23|BJAAAA|KPGAAA|AAAAxx
+5837|4457|1|1|7|17|37|837|1837|837|5837|74|75|NQAAAA|LPGAAA|HHHHxx
+897|4458|1|1|7|17|97|897|897|897|897|194|195|NIAAAA|MPGAAA|OOOOxx
+4299|4459|1|3|9|19|99|299|299|4299|4299|198|199|JJAAAA|NPGAAA|VVVVxx
+7774|4460|0|2|4|14|74|774|1774|2774|7774|148|149|ANAAAA|OPGAAA|AAAAxx
+7832|4461|0|0|2|12|32|832|1832|2832|7832|64|65|GPAAAA|PPGAAA|HHHHxx
+9915|4462|1|3|5|15|15|915|1915|4915|9915|30|31|JRAAAA|QPGAAA|OOOOxx
+9|4463|1|1|9|9|9|9|9|9|9|18|19|JAAAAA|RPGAAA|VVVVxx
+9675|4464|1|3|5|15|75|675|1675|4675|9675|150|151|DIAAAA|SPGAAA|AAAAxx
+7953|4465|1|1|3|13|53|953|1953|2953|7953|106|107|XTAAAA|TPGAAA|HHHHxx
+8912|4466|0|0|2|12|12|912|912|3912|8912|24|25|UEAAAA|UPGAAA|OOOOxx
+4188|4467|0|0|8|8|88|188|188|4188|4188|176|177|CFAAAA|VPGAAA|VVVVxx
+8446|4468|0|2|6|6|46|446|446|3446|8446|92|93|WMAAAA|WPGAAA|AAAAxx
+1600|4469|0|0|0|0|0|600|1600|1600|1600|0|1|OJAAAA|XPGAAA|HHHHxx
+43|4470|1|3|3|3|43|43|43|43|43|86|87|RBAAAA|YPGAAA|OOOOxx
+544|4471|0|0|4|4|44|544|544|544|544|88|89|YUAAAA|ZPGAAA|VVVVxx
+6977|4472|1|1|7|17|77|977|977|1977|6977|154|155|JIAAAA|AQGAAA|AAAAxx
+3191|4473|1|3|1|11|91|191|1191|3191|3191|182|183|TSAAAA|BQGAAA|HHHHxx
+418|4474|0|2|8|18|18|418|418|418|418|36|37|CQAAAA|CQGAAA|OOOOxx
+3142|4475|0|2|2|2|42|142|1142|3142|3142|84|85|WQAAAA|DQGAAA|VVVVxx
+5042|4476|0|2|2|2|42|42|1042|42|5042|84|85|YLAAAA|EQGAAA|AAAAxx
+2194|4477|0|2|4|14|94|194|194|2194|2194|188|189|KGAAAA|FQGAAA|HHHHxx
+2397|4478|1|1|7|17|97|397|397|2397|2397|194|195|FOAAAA|GQGAAA|OOOOxx
+4684|4479|0|0|4|4|84|684|684|4684|4684|168|169|EYAAAA|HQGAAA|VVVVxx
+34|4480|0|2|4|14|34|34|34|34|34|68|69|IBAAAA|IQGAAA|AAAAxx
+3844|4481|0|0|4|4|44|844|1844|3844|3844|88|89|WRAAAA|JQGAAA|HHHHxx
+7824|4482|0|0|4|4|24|824|1824|2824|7824|48|49|YOAAAA|KQGAAA|OOOOxx
+6177|4483|1|1|7|17|77|177|177|1177|6177|154|155|PDAAAA|LQGAAA|VVVVxx
+9657|4484|1|1|7|17|57|657|1657|4657|9657|114|115|LHAAAA|MQGAAA|AAAAxx
+4546|4485|0|2|6|6|46|546|546|4546|4546|92|93|WSAAAA|NQGAAA|HHHHxx
+599|4486|1|3|9|19|99|599|599|599|599|198|199|BXAAAA|OQGAAA|OOOOxx
+153|4487|1|1|3|13|53|153|153|153|153|106|107|XFAAAA|PQGAAA|VVVVxx
+6910|4488|0|2|0|10|10|910|910|1910|6910|20|21|UFAAAA|QQGAAA|AAAAxx
+4408|4489|0|0|8|8|8|408|408|4408|4408|16|17|ONAAAA|RQGAAA|HHHHxx
+1164|4490|0|0|4|4|64|164|1164|1164|1164|128|129|USAAAA|SQGAAA|OOOOxx
+6469|4491|1|1|9|9|69|469|469|1469|6469|138|139|VOAAAA|TQGAAA|VVVVxx
+5996|4492|0|0|6|16|96|996|1996|996|5996|192|193|QWAAAA|UQGAAA|AAAAxx
+2639|4493|1|3|9|19|39|639|639|2639|2639|78|79|NXAAAA|VQGAAA|HHHHxx
+2678|4494|0|2|8|18|78|678|678|2678|2678|156|157|AZAAAA|WQGAAA|OOOOxx
+8392|4495|0|0|2|12|92|392|392|3392|8392|184|185|UKAAAA|XQGAAA|VVVVxx
+1386|4496|0|2|6|6|86|386|1386|1386|1386|172|173|IBAAAA|YQGAAA|AAAAxx
+5125|4497|1|1|5|5|25|125|1125|125|5125|50|51|DPAAAA|ZQGAAA|HHHHxx
+8453|4498|1|1|3|13|53|453|453|3453|8453|106|107|DNAAAA|ARGAAA|OOOOxx
+2369|4499|1|1|9|9|69|369|369|2369|2369|138|139|DNAAAA|BRGAAA|VVVVxx
+1608|4500|0|0|8|8|8|608|1608|1608|1608|16|17|WJAAAA|CRGAAA|AAAAxx
+3781|4501|1|1|1|1|81|781|1781|3781|3781|162|163|LPAAAA|DRGAAA|HHHHxx
+903|4502|1|3|3|3|3|903|903|903|903|6|7|TIAAAA|ERGAAA|OOOOxx
+2099|4503|1|3|9|19|99|99|99|2099|2099|198|199|TCAAAA|FRGAAA|VVVVxx
+538|4504|0|2|8|18|38|538|538|538|538|76|77|SUAAAA|GRGAAA|AAAAxx
+9177|4505|1|1|7|17|77|177|1177|4177|9177|154|155|ZOAAAA|HRGAAA|HHHHxx
+420|4506|0|0|0|0|20|420|420|420|420|40|41|EQAAAA|IRGAAA|OOOOxx
+9080|4507|0|0|0|0|80|80|1080|4080|9080|160|161|GLAAAA|JRGAAA|VVVVxx
+2630|4508|0|2|0|10|30|630|630|2630|2630|60|61|EXAAAA|KRGAAA|AAAAxx
+5978|4509|0|2|8|18|78|978|1978|978|5978|156|157|YVAAAA|LRGAAA|HHHHxx
+9239|4510|1|3|9|19|39|239|1239|4239|9239|78|79|JRAAAA|MRGAAA|OOOOxx
+4372|4511|0|0|2|12|72|372|372|4372|4372|144|145|EMAAAA|NRGAAA|VVVVxx
+4357|4512|1|1|7|17|57|357|357|4357|4357|114|115|PLAAAA|ORGAAA|AAAAxx
+9857|4513|1|1|7|17|57|857|1857|4857|9857|114|115|DPAAAA|PRGAAA|HHHHxx
+7933|4514|1|1|3|13|33|933|1933|2933|7933|66|67|DTAAAA|QRGAAA|OOOOxx
+9574|4515|0|2|4|14|74|574|1574|4574|9574|148|149|GEAAAA|RRGAAA|VVVVxx
+8294|4516|0|2|4|14|94|294|294|3294|8294|188|189|AHAAAA|SRGAAA|AAAAxx
+627|4517|1|3|7|7|27|627|627|627|627|54|55|DYAAAA|TRGAAA|HHHHxx
+3229|4518|1|1|9|9|29|229|1229|3229|3229|58|59|FUAAAA|URGAAA|OOOOxx
+3163|4519|1|3|3|3|63|163|1163|3163|3163|126|127|RRAAAA|VRGAAA|VVVVxx
+7349|4520|1|1|9|9|49|349|1349|2349|7349|98|99|RWAAAA|WRGAAA|AAAAxx
+6889|4521|1|1|9|9|89|889|889|1889|6889|178|179|ZEAAAA|XRGAAA|HHHHxx
+2101|4522|1|1|1|1|1|101|101|2101|2101|2|3|VCAAAA|YRGAAA|OOOOxx
+6476|4523|0|0|6|16|76|476|476|1476|6476|152|153|CPAAAA|ZRGAAA|VVVVxx
+6765|4524|1|1|5|5|65|765|765|1765|6765|130|131|FAAAAA|ASGAAA|AAAAxx
+4204|4525|0|0|4|4|4|204|204|4204|4204|8|9|SFAAAA|BSGAAA|HHHHxx
+5915|4526|1|3|5|15|15|915|1915|915|5915|30|31|NTAAAA|CSGAAA|OOOOxx
+2318|4527|0|2|8|18|18|318|318|2318|2318|36|37|ELAAAA|DSGAAA|VVVVxx
+294|4528|0|2|4|14|94|294|294|294|294|188|189|ILAAAA|ESGAAA|AAAAxx
+5245|4529|1|1|5|5|45|245|1245|245|5245|90|91|TTAAAA|FSGAAA|HHHHxx
+4481|4530|1|1|1|1|81|481|481|4481|4481|162|163|JQAAAA|GSGAAA|OOOOxx
+7754|4531|0|2|4|14|54|754|1754|2754|7754|108|109|GMAAAA|HSGAAA|VVVVxx
+8494|4532|0|2|4|14|94|494|494|3494|8494|188|189|SOAAAA|ISGAAA|AAAAxx
+4014|4533|0|2|4|14|14|14|14|4014|4014|28|29|KYAAAA|JSGAAA|HHHHxx
+2197|4534|1|1|7|17|97|197|197|2197|2197|194|195|NGAAAA|KSGAAA|OOOOxx
+1297|4535|1|1|7|17|97|297|1297|1297|1297|194|195|XXAAAA|LSGAAA|VVVVxx
+1066|4536|0|2|6|6|66|66|1066|1066|1066|132|133|APAAAA|MSGAAA|AAAAxx
+5710|4537|0|2|0|10|10|710|1710|710|5710|20|21|QLAAAA|NSGAAA|HHHHxx
+4100|4538|0|0|0|0|0|100|100|4100|4100|0|1|SBAAAA|OSGAAA|OOOOxx
+7356|4539|0|0|6|16|56|356|1356|2356|7356|112|113|YWAAAA|PSGAAA|VVVVxx
+7658|4540|0|2|8|18|58|658|1658|2658|7658|116|117|OIAAAA|QSGAAA|AAAAxx
+3666|4541|0|2|6|6|66|666|1666|3666|3666|132|133|ALAAAA|RSGAAA|HHHHxx
+9713|4542|1|1|3|13|13|713|1713|4713|9713|26|27|PJAAAA|SSGAAA|OOOOxx
+691|4543|1|3|1|11|91|691|691|691|691|182|183|PAAAAA|TSGAAA|VVVVxx
+3112|4544|0|0|2|12|12|112|1112|3112|3112|24|25|SPAAAA|USGAAA|AAAAxx
+6035|4545|1|3|5|15|35|35|35|1035|6035|70|71|DYAAAA|VSGAAA|HHHHxx
+8353|4546|1|1|3|13|53|353|353|3353|8353|106|107|HJAAAA|WSGAAA|OOOOxx
+5679|4547|1|3|9|19|79|679|1679|679|5679|158|159|LKAAAA|XSGAAA|VVVVxx
+2124|4548|0|0|4|4|24|124|124|2124|2124|48|49|SDAAAA|YSGAAA|AAAAxx
+4714|4549|0|2|4|14|14|714|714|4714|4714|28|29|IZAAAA|ZSGAAA|HHHHxx
+9048|4550|0|0|8|8|48|48|1048|4048|9048|96|97|AKAAAA|ATGAAA|OOOOxx
+7692|4551|0|0|2|12|92|692|1692|2692|7692|184|185|WJAAAA|BTGAAA|VVVVxx
+4542|4552|0|2|2|2|42|542|542|4542|4542|84|85|SSAAAA|CTGAAA|AAAAxx
+8737|4553|1|1|7|17|37|737|737|3737|8737|74|75|BYAAAA|DTGAAA|HHHHxx
+4977|4554|1|1|7|17|77|977|977|4977|4977|154|155|LJAAAA|ETGAAA|OOOOxx
+9349|4555|1|1|9|9|49|349|1349|4349|9349|98|99|PVAAAA|FTGAAA|VVVVxx
+731|4556|1|3|1|11|31|731|731|731|731|62|63|DCAAAA|GTGAAA|AAAAxx
+1788|4557|0|0|8|8|88|788|1788|1788|1788|176|177|UQAAAA|HTGAAA|HHHHxx
+7830|4558|0|2|0|10|30|830|1830|2830|7830|60|61|EPAAAA|ITGAAA|OOOOxx
+3977|4559|1|1|7|17|77|977|1977|3977|3977|154|155|ZWAAAA|JTGAAA|VVVVxx
+2421|4560|1|1|1|1|21|421|421|2421|2421|42|43|DPAAAA|KTGAAA|AAAAxx
+5891|4561|1|3|1|11|91|891|1891|891|5891|182|183|PSAAAA|LTGAAA|HHHHxx
+1111|4562|1|3|1|11|11|111|1111|1111|1111|22|23|TQAAAA|MTGAAA|OOOOxx
+9224|4563|0|0|4|4|24|224|1224|4224|9224|48|49|UQAAAA|NTGAAA|VVVVxx
+9872|4564|0|0|2|12|72|872|1872|4872|9872|144|145|SPAAAA|OTGAAA|AAAAxx
+2433|4565|1|1|3|13|33|433|433|2433|2433|66|67|PPAAAA|PTGAAA|HHHHxx
+1491|4566|1|3|1|11|91|491|1491|1491|1491|182|183|JFAAAA|QTGAAA|OOOOxx
+6653|4567|1|1|3|13|53|653|653|1653|6653|106|107|XVAAAA|RTGAAA|VVVVxx
+1907|4568|1|3|7|7|7|907|1907|1907|1907|14|15|JVAAAA|STGAAA|AAAAxx
+889|4569|1|1|9|9|89|889|889|889|889|178|179|FIAAAA|TTGAAA|HHHHxx
+561|4570|1|1|1|1|61|561|561|561|561|122|123|PVAAAA|UTGAAA|OOOOxx
+7415|4571|1|3|5|15|15|415|1415|2415|7415|30|31|FZAAAA|VTGAAA|VVVVxx
+2703|4572|1|3|3|3|3|703|703|2703|2703|6|7|ZZAAAA|WTGAAA|AAAAxx
+2561|4573|1|1|1|1|61|561|561|2561|2561|122|123|NUAAAA|XTGAAA|HHHHxx
+1257|4574|1|1|7|17|57|257|1257|1257|1257|114|115|JWAAAA|YTGAAA|OOOOxx
+2390|4575|0|2|0|10|90|390|390|2390|2390|180|181|YNAAAA|ZTGAAA|VVVVxx
+3915|4576|1|3|5|15|15|915|1915|3915|3915|30|31|PUAAAA|AUGAAA|AAAAxx
+8476|4577|0|0|6|16|76|476|476|3476|8476|152|153|AOAAAA|BUGAAA|HHHHxx
+607|4578|1|3|7|7|7|607|607|607|607|14|15|JXAAAA|CUGAAA|OOOOxx
+3891|4579|1|3|1|11|91|891|1891|3891|3891|182|183|RTAAAA|DUGAAA|VVVVxx
+7269|4580|1|1|9|9|69|269|1269|2269|7269|138|139|PTAAAA|EUGAAA|AAAAxx
+9537|4581|1|1|7|17|37|537|1537|4537|9537|74|75|VCAAAA|FUGAAA|HHHHxx
+8518|4582|0|2|8|18|18|518|518|3518|8518|36|37|QPAAAA|GUGAAA|OOOOxx
+5221|4583|1|1|1|1|21|221|1221|221|5221|42|43|VSAAAA|HUGAAA|VVVVxx
+3274|4584|0|2|4|14|74|274|1274|3274|3274|148|149|YVAAAA|IUGAAA|AAAAxx
+6677|4585|1|1|7|17|77|677|677|1677|6677|154|155|VWAAAA|JUGAAA|HHHHxx
+3114|4586|0|2|4|14|14|114|1114|3114|3114|28|29|UPAAAA|KUGAAA|OOOOxx
+1966|4587|0|2|6|6|66|966|1966|1966|1966|132|133|QXAAAA|LUGAAA|VVVVxx
+5941|4588|1|1|1|1|41|941|1941|941|5941|82|83|NUAAAA|MUGAAA|AAAAxx
+9463|4589|1|3|3|3|63|463|1463|4463|9463|126|127|ZZAAAA|NUGAAA|HHHHxx
+8966|4590|0|2|6|6|66|966|966|3966|8966|132|133|WGAAAA|OUGAAA|OOOOxx
+4402|4591|0|2|2|2|2|402|402|4402|4402|4|5|INAAAA|PUGAAA|VVVVxx
+3364|4592|0|0|4|4|64|364|1364|3364|3364|128|129|KZAAAA|QUGAAA|AAAAxx
+3698|4593|0|2|8|18|98|698|1698|3698|3698|196|197|GMAAAA|RUGAAA|HHHHxx
+4651|4594|1|3|1|11|51|651|651|4651|4651|102|103|XWAAAA|SUGAAA|OOOOxx
+2127|4595|1|3|7|7|27|127|127|2127|2127|54|55|VDAAAA|TUGAAA|VVVVxx
+3614|4596|0|2|4|14|14|614|1614|3614|3614|28|29|AJAAAA|UUGAAA|AAAAxx
+5430|4597|0|2|0|10|30|430|1430|430|5430|60|61|WAAAAA|VUGAAA|HHHHxx
+3361|4598|1|1|1|1|61|361|1361|3361|3361|122|123|HZAAAA|WUGAAA|OOOOxx
+4798|4599|0|2|8|18|98|798|798|4798|4798|196|197|OCAAAA|XUGAAA|VVVVxx
+8269|4600|1|1|9|9|69|269|269|3269|8269|138|139|BGAAAA|YUGAAA|AAAAxx
+6458|4601|0|2|8|18|58|458|458|1458|6458|116|117|KOAAAA|ZUGAAA|HHHHxx
+3358|4602|0|2|8|18|58|358|1358|3358|3358|116|117|EZAAAA|AVGAAA|OOOOxx
+5898|4603|0|2|8|18|98|898|1898|898|5898|196|197|WSAAAA|BVGAAA|VVVVxx
+1880|4604|0|0|0|0|80|880|1880|1880|1880|160|161|IUAAAA|CVGAAA|AAAAxx
+782|4605|0|2|2|2|82|782|782|782|782|164|165|CEAAAA|DVGAAA|HHHHxx
+3102|4606|0|2|2|2|2|102|1102|3102|3102|4|5|IPAAAA|EVGAAA|OOOOxx
+6366|4607|0|2|6|6|66|366|366|1366|6366|132|133|WKAAAA|FVGAAA|VVVVxx
+399|4608|1|3|9|19|99|399|399|399|399|198|199|JPAAAA|GVGAAA|AAAAxx
+6773|4609|1|1|3|13|73|773|773|1773|6773|146|147|NAAAAA|HVGAAA|HHHHxx
+7942|4610|0|2|2|2|42|942|1942|2942|7942|84|85|MTAAAA|IVGAAA|OOOOxx
+6274|4611|0|2|4|14|74|274|274|1274|6274|148|149|IHAAAA|JVGAAA|VVVVxx
+7447|4612|1|3|7|7|47|447|1447|2447|7447|94|95|LAAAAA|KVGAAA|AAAAxx
+7648|4613|0|0|8|8|48|648|1648|2648|7648|96|97|EIAAAA|LVGAAA|HHHHxx
+3997|4614|1|1|7|17|97|997|1997|3997|3997|194|195|TXAAAA|MVGAAA|OOOOxx
+1759|4615|1|3|9|19|59|759|1759|1759|1759|118|119|RPAAAA|NVGAAA|VVVVxx
+1785|4616|1|1|5|5|85|785|1785|1785|1785|170|171|RQAAAA|OVGAAA|AAAAxx
+8930|4617|0|2|0|10|30|930|930|3930|8930|60|61|MFAAAA|PVGAAA|HHHHxx
+7595|4618|1|3|5|15|95|595|1595|2595|7595|190|191|DGAAAA|QVGAAA|OOOOxx
+6752|4619|0|0|2|12|52|752|752|1752|6752|104|105|SZAAAA|RVGAAA|VVVVxx
+5635|4620|1|3|5|15|35|635|1635|635|5635|70|71|TIAAAA|SVGAAA|AAAAxx
+1579|4621|1|3|9|19|79|579|1579|1579|1579|158|159|TIAAAA|TVGAAA|HHHHxx
+7743|4622|1|3|3|3|43|743|1743|2743|7743|86|87|VLAAAA|UVGAAA|OOOOxx
+5856|4623|0|0|6|16|56|856|1856|856|5856|112|113|GRAAAA|VVGAAA|VVVVxx
+7273|4624|1|1|3|13|73|273|1273|2273|7273|146|147|TTAAAA|WVGAAA|AAAAxx
+1399|4625|1|3|9|19|99|399|1399|1399|1399|198|199|VBAAAA|XVGAAA|HHHHxx
+3694|4626|0|2|4|14|94|694|1694|3694|3694|188|189|CMAAAA|YVGAAA|OOOOxx
+2782|4627|0|2|2|2|82|782|782|2782|2782|164|165|ADAAAA|ZVGAAA|VVVVxx
+6951|4628|1|3|1|11|51|951|951|1951|6951|102|103|JHAAAA|AWGAAA|AAAAxx
+6053|4629|1|1|3|13|53|53|53|1053|6053|106|107|VYAAAA|BWGAAA|HHHHxx
+1753|4630|1|1|3|13|53|753|1753|1753|1753|106|107|LPAAAA|CWGAAA|OOOOxx
+3985|4631|1|1|5|5|85|985|1985|3985|3985|170|171|HXAAAA|DWGAAA|VVVVxx
+6159|4632|1|3|9|19|59|159|159|1159|6159|118|119|XCAAAA|EWGAAA|AAAAxx
+6250|4633|0|2|0|10|50|250|250|1250|6250|100|101|KGAAAA|FWGAAA|HHHHxx
+6240|4634|0|0|0|0|40|240|240|1240|6240|80|81|AGAAAA|GWGAAA|OOOOxx
+6571|4635|1|3|1|11|71|571|571|1571|6571|142|143|TSAAAA|HWGAAA|VVVVxx
+8624|4636|0|0|4|4|24|624|624|3624|8624|48|49|STAAAA|IWGAAA|AAAAxx
+9718|4637|0|2|8|18|18|718|1718|4718|9718|36|37|UJAAAA|JWGAAA|HHHHxx
+5529|4638|1|1|9|9|29|529|1529|529|5529|58|59|REAAAA|KWGAAA|OOOOxx
+7089|4639|1|1|9|9|89|89|1089|2089|7089|178|179|RMAAAA|LWGAAA|VVVVxx
+5488|4640|0|0|8|8|88|488|1488|488|5488|176|177|CDAAAA|MWGAAA|AAAAxx
+5444|4641|0|0|4|4|44|444|1444|444|5444|88|89|KBAAAA|NWGAAA|HHHHxx
+4899|4642|1|3|9|19|99|899|899|4899|4899|198|199|LGAAAA|OWGAAA|OOOOxx
+7928|4643|0|0|8|8|28|928|1928|2928|7928|56|57|YSAAAA|PWGAAA|VVVVxx
+4736|4644|0|0|6|16|36|736|736|4736|4736|72|73|EAAAAA|QWGAAA|AAAAxx
+4317|4645|1|1|7|17|17|317|317|4317|4317|34|35|BKAAAA|RWGAAA|HHHHxx
+1174|4646|0|2|4|14|74|174|1174|1174|1174|148|149|ETAAAA|SWGAAA|OOOOxx
+6138|4647|0|2|8|18|38|138|138|1138|6138|76|77|CCAAAA|TWGAAA|VVVVxx
+3943|4648|1|3|3|3|43|943|1943|3943|3943|86|87|RVAAAA|UWGAAA|AAAAxx
+1545|4649|1|1|5|5|45|545|1545|1545|1545|90|91|LHAAAA|VWGAAA|HHHHxx
+6867|4650|1|3|7|7|67|867|867|1867|6867|134|135|DEAAAA|WWGAAA|OOOOxx
+6832|4651|0|0|2|12|32|832|832|1832|6832|64|65|UCAAAA|XWGAAA|VVVVxx
+2987|4652|1|3|7|7|87|987|987|2987|2987|174|175|XKAAAA|YWGAAA|AAAAxx
+5169|4653|1|1|9|9|69|169|1169|169|5169|138|139|VQAAAA|ZWGAAA|HHHHxx
+8998|4654|0|2|8|18|98|998|998|3998|8998|196|197|CIAAAA|AXGAAA|OOOOxx
+9347|4655|1|3|7|7|47|347|1347|4347|9347|94|95|NVAAAA|BXGAAA|VVVVxx
+4800|4656|0|0|0|0|0|800|800|4800|4800|0|1|QCAAAA|CXGAAA|AAAAxx
+4200|4657|0|0|0|0|0|200|200|4200|4200|0|1|OFAAAA|DXGAAA|HHHHxx
+4046|4658|0|2|6|6|46|46|46|4046|4046|92|93|QZAAAA|EXGAAA|OOOOxx
+7142|4659|0|2|2|2|42|142|1142|2142|7142|84|85|SOAAAA|FXGAAA|VVVVxx
+2733|4660|1|1|3|13|33|733|733|2733|2733|66|67|DBAAAA|GXGAAA|AAAAxx
+1568|4661|0|0|8|8|68|568|1568|1568|1568|136|137|IIAAAA|HXGAAA|HHHHxx
+5105|4662|1|1|5|5|5|105|1105|105|5105|10|11|JOAAAA|IXGAAA|OOOOxx
+9115|4663|1|3|5|15|15|115|1115|4115|9115|30|31|PMAAAA|JXGAAA|VVVVxx
+6475|4664|1|3|5|15|75|475|475|1475|6475|150|151|BPAAAA|KXGAAA|AAAAxx
+3796|4665|0|0|6|16|96|796|1796|3796|3796|192|193|AQAAAA|LXGAAA|HHHHxx
+5410|4666|0|2|0|10|10|410|1410|410|5410|20|21|CAAAAA|MXGAAA|OOOOxx
+4023|4667|1|3|3|3|23|23|23|4023|4023|46|47|TYAAAA|NXGAAA|VVVVxx
+8904|4668|0|0|4|4|4|904|904|3904|8904|8|9|MEAAAA|OXGAAA|AAAAxx
+450|4669|0|2|0|10|50|450|450|450|450|100|101|IRAAAA|PXGAAA|HHHHxx
+8087|4670|1|3|7|7|87|87|87|3087|8087|174|175|BZAAAA|QXGAAA|OOOOxx
+6478|4671|0|2|8|18|78|478|478|1478|6478|156|157|EPAAAA|RXGAAA|VVVVxx
+2696|4672|0|0|6|16|96|696|696|2696|2696|192|193|SZAAAA|SXGAAA|AAAAxx
+1792|4673|0|0|2|12|92|792|1792|1792|1792|184|185|YQAAAA|TXGAAA|HHHHxx
+9699|4674|1|3|9|19|99|699|1699|4699|9699|198|199|BJAAAA|UXGAAA|OOOOxx
+9160|4675|0|0|0|0|60|160|1160|4160|9160|120|121|IOAAAA|VXGAAA|VVVVxx
+9989|4676|1|1|9|9|89|989|1989|4989|9989|178|179|FUAAAA|WXGAAA|AAAAxx
+9568|4677|0|0|8|8|68|568|1568|4568|9568|136|137|AEAAAA|XXGAAA|HHHHxx
+487|4678|1|3|7|7|87|487|487|487|487|174|175|TSAAAA|YXGAAA|OOOOxx
+7863|4679|1|3|3|3|63|863|1863|2863|7863|126|127|LQAAAA|ZXGAAA|VVVVxx
+1884|4680|0|0|4|4|84|884|1884|1884|1884|168|169|MUAAAA|AYGAAA|AAAAxx
+2651|4681|1|3|1|11|51|651|651|2651|2651|102|103|ZXAAAA|BYGAAA|HHHHxx
+8285|4682|1|1|5|5|85|285|285|3285|8285|170|171|RGAAAA|CYGAAA|OOOOxx
+3927|4683|1|3|7|7|27|927|1927|3927|3927|54|55|BVAAAA|DYGAAA|VVVVxx
+4076|4684|0|0|6|16|76|76|76|4076|4076|152|153|UAAAAA|EYGAAA|AAAAxx
+6149|4685|1|1|9|9|49|149|149|1149|6149|98|99|NCAAAA|FYGAAA|HHHHxx
+6581|4686|1|1|1|1|81|581|581|1581|6581|162|163|DTAAAA|GYGAAA|OOOOxx
+8293|4687|1|1|3|13|93|293|293|3293|8293|186|187|ZGAAAA|HYGAAA|VVVVxx
+7665|4688|1|1|5|5|65|665|1665|2665|7665|130|131|VIAAAA|IYGAAA|AAAAxx
+4435|4689|1|3|5|15|35|435|435|4435|4435|70|71|POAAAA|JYGAAA|HHHHxx
+1271|4690|1|3|1|11|71|271|1271|1271|1271|142|143|XWAAAA|KYGAAA|OOOOxx
+3928|4691|0|0|8|8|28|928|1928|3928|3928|56|57|CVAAAA|LYGAAA|VVVVxx
+7045|4692|1|1|5|5|45|45|1045|2045|7045|90|91|ZKAAAA|MYGAAA|AAAAxx
+4943|4693|1|3|3|3|43|943|943|4943|4943|86|87|DIAAAA|NYGAAA|HHHHxx
+8473|4694|1|1|3|13|73|473|473|3473|8473|146|147|XNAAAA|OYGAAA|OOOOxx
+1707|4695|1|3|7|7|7|707|1707|1707|1707|14|15|RNAAAA|PYGAAA|VVVVxx
+7509|4696|1|1|9|9|9|509|1509|2509|7509|18|19|VCAAAA|QYGAAA|AAAAxx
+1593|4697|1|1|3|13|93|593|1593|1593|1593|186|187|HJAAAA|RYGAAA|HHHHxx
+9281|4698|1|1|1|1|81|281|1281|4281|9281|162|163|ZSAAAA|SYGAAA|OOOOxx
+8986|4699|0|2|6|6|86|986|986|3986|8986|172|173|QHAAAA|TYGAAA|VVVVxx
+3740|4700|0|0|0|0|40|740|1740|3740|3740|80|81|WNAAAA|UYGAAA|AAAAxx
+9265|4701|1|1|5|5|65|265|1265|4265|9265|130|131|JSAAAA|VYGAAA|HHHHxx
+1510|4702|0|2|0|10|10|510|1510|1510|1510|20|21|CGAAAA|WYGAAA|OOOOxx
+3022|4703|0|2|2|2|22|22|1022|3022|3022|44|45|GMAAAA|XYGAAA|VVVVxx
+9014|4704|0|2|4|14|14|14|1014|4014|9014|28|29|SIAAAA|YYGAAA|AAAAxx
+6816|4705|0|0|6|16|16|816|816|1816|6816|32|33|ECAAAA|ZYGAAA|HHHHxx
+5518|4706|0|2|8|18|18|518|1518|518|5518|36|37|GEAAAA|AZGAAA|OOOOxx
+4451|4707|1|3|1|11|51|451|451|4451|4451|102|103|FPAAAA|BZGAAA|VVVVxx
+8747|4708|1|3|7|7|47|747|747|3747|8747|94|95|LYAAAA|CZGAAA|AAAAxx
+4646|4709|0|2|6|6|46|646|646|4646|4646|92|93|SWAAAA|DZGAAA|HHHHxx
+7296|4710|0|0|6|16|96|296|1296|2296|7296|192|193|QUAAAA|EZGAAA|OOOOxx
+9644|4711|0|0|4|4|44|644|1644|4644|9644|88|89|YGAAAA|FZGAAA|VVVVxx
+5977|4712|1|1|7|17|77|977|1977|977|5977|154|155|XVAAAA|GZGAAA|AAAAxx
+6270|4713|0|2|0|10|70|270|270|1270|6270|140|141|EHAAAA|HZGAAA|HHHHxx
+5578|4714|0|2|8|18|78|578|1578|578|5578|156|157|OGAAAA|IZGAAA|OOOOxx
+2465|4715|1|1|5|5|65|465|465|2465|2465|130|131|VQAAAA|JZGAAA|VVVVxx
+6436|4716|0|0|6|16|36|436|436|1436|6436|72|73|ONAAAA|KZGAAA|AAAAxx
+8089|4717|1|1|9|9|89|89|89|3089|8089|178|179|DZAAAA|LZGAAA|HHHHxx
+2409|4718|1|1|9|9|9|409|409|2409|2409|18|19|ROAAAA|MZGAAA|OOOOxx
+284|4719|0|0|4|4|84|284|284|284|284|168|169|YKAAAA|NZGAAA|VVVVxx
+5576|4720|0|0|6|16|76|576|1576|576|5576|152|153|MGAAAA|OZGAAA|AAAAxx
+6534|4721|0|2|4|14|34|534|534|1534|6534|68|69|IRAAAA|PZGAAA|HHHHxx
+8848|4722|0|0|8|8|48|848|848|3848|8848|96|97|ICAAAA|QZGAAA|OOOOxx
+4305|4723|1|1|5|5|5|305|305|4305|4305|10|11|PJAAAA|RZGAAA|VVVVxx
+5574|4724|0|2|4|14|74|574|1574|574|5574|148|149|KGAAAA|SZGAAA|AAAAxx
+596|4725|0|0|6|16|96|596|596|596|596|192|193|YWAAAA|TZGAAA|HHHHxx
+1253|4726|1|1|3|13|53|253|1253|1253|1253|106|107|FWAAAA|UZGAAA|OOOOxx
+521|4727|1|1|1|1|21|521|521|521|521|42|43|BUAAAA|VZGAAA|VVVVxx
+8739|4728|1|3|9|19|39|739|739|3739|8739|78|79|DYAAAA|WZGAAA|AAAAxx
+908|4729|0|0|8|8|8|908|908|908|908|16|17|YIAAAA|XZGAAA|HHHHxx
+6937|4730|1|1|7|17|37|937|937|1937|6937|74|75|VGAAAA|YZGAAA|OOOOxx
+4515|4731|1|3|5|15|15|515|515|4515|4515|30|31|RRAAAA|ZZGAAA|VVVVxx
+8630|4732|0|2|0|10|30|630|630|3630|8630|60|61|YTAAAA|AAHAAA|AAAAxx
+7518|4733|0|2|8|18|18|518|1518|2518|7518|36|37|EDAAAA|BAHAAA|HHHHxx
+8300|4734|0|0|0|0|0|300|300|3300|8300|0|1|GHAAAA|CAHAAA|OOOOxx
+8434|4735|0|2|4|14|34|434|434|3434|8434|68|69|KMAAAA|DAHAAA|VVVVxx
+6000|4736|0|0|0|0|0|0|0|1000|6000|0|1|UWAAAA|EAHAAA|AAAAxx
+4508|4737|0|0|8|8|8|508|508|4508|4508|16|17|KRAAAA|FAHAAA|HHHHxx
+7861|4738|1|1|1|1|61|861|1861|2861|7861|122|123|JQAAAA|GAHAAA|OOOOxx
+5953|4739|1|1|3|13|53|953|1953|953|5953|106|107|ZUAAAA|HAHAAA|VVVVxx
+5063|4740|1|3|3|3|63|63|1063|63|5063|126|127|TMAAAA|IAHAAA|AAAAxx
+4501|4741|1|1|1|1|1|501|501|4501|4501|2|3|DRAAAA|JAHAAA|HHHHxx
+7092|4742|0|0|2|12|92|92|1092|2092|7092|184|185|UMAAAA|KAHAAA|OOOOxx
+4388|4743|0|0|8|8|88|388|388|4388|4388|176|177|UMAAAA|LAHAAA|VVVVxx
+1826|4744|0|2|6|6|26|826|1826|1826|1826|52|53|GSAAAA|MAHAAA|AAAAxx
+568|4745|0|0|8|8|68|568|568|568|568|136|137|WVAAAA|NAHAAA|HHHHxx
+8184|4746|0|0|4|4|84|184|184|3184|8184|168|169|UCAAAA|OAHAAA|OOOOxx
+4268|4747|0|0|8|8|68|268|268|4268|4268|136|137|EIAAAA|PAHAAA|VVVVxx
+5798|4748|0|2|8|18|98|798|1798|798|5798|196|197|APAAAA|QAHAAA|AAAAxx
+5190|4749|0|2|0|10|90|190|1190|190|5190|180|181|QRAAAA|RAHAAA|HHHHxx
+1298|4750|0|2|8|18|98|298|1298|1298|1298|196|197|YXAAAA|SAHAAA|OOOOxx
+4035|4751|1|3|5|15|35|35|35|4035|4035|70|71|FZAAAA|TAHAAA|VVVVxx
+4504|4752|0|0|4|4|4|504|504|4504|4504|8|9|GRAAAA|UAHAAA|AAAAxx
+5992|4753|0|0|2|12|92|992|1992|992|5992|184|185|MWAAAA|VAHAAA|HHHHxx
+770|4754|0|2|0|10|70|770|770|770|770|140|141|QDAAAA|WAHAAA|OOOOxx
+7502|4755|0|2|2|2|2|502|1502|2502|7502|4|5|OCAAAA|XAHAAA|VVVVxx
+824|4756|0|0|4|4|24|824|824|824|824|48|49|SFAAAA|YAHAAA|AAAAxx
+7716|4757|0|0|6|16|16|716|1716|2716|7716|32|33|UKAAAA|ZAHAAA|HHHHxx
+5749|4758|1|1|9|9|49|749|1749|749|5749|98|99|DNAAAA|ABHAAA|OOOOxx
+9814|4759|0|2|4|14|14|814|1814|4814|9814|28|29|MNAAAA|BBHAAA|VVVVxx
+350|4760|0|2|0|10|50|350|350|350|350|100|101|MNAAAA|CBHAAA|AAAAxx
+1390|4761|0|2|0|10|90|390|1390|1390|1390|180|181|MBAAAA|DBHAAA|HHHHxx
+6994|4762|0|2|4|14|94|994|994|1994|6994|188|189|AJAAAA|EBHAAA|OOOOxx
+3629|4763|1|1|9|9|29|629|1629|3629|3629|58|59|PJAAAA|FBHAAA|VVVVxx
+9937|4764|1|1|7|17|37|937|1937|4937|9937|74|75|FSAAAA|GBHAAA|AAAAxx
+5285|4765|1|1|5|5|85|285|1285|285|5285|170|171|HVAAAA|HBHAAA|HHHHxx
+3157|4766|1|1|7|17|57|157|1157|3157|3157|114|115|LRAAAA|IBHAAA|OOOOxx
+9549|4767|1|1|9|9|49|549|1549|4549|9549|98|99|HDAAAA|JBHAAA|VVVVxx
+4118|4768|0|2|8|18|18|118|118|4118|4118|36|37|KCAAAA|KBHAAA|AAAAxx
+756|4769|0|0|6|16|56|756|756|756|756|112|113|CDAAAA|LBHAAA|HHHHxx
+5964|4770|0|0|4|4|64|964|1964|964|5964|128|129|KVAAAA|MBHAAA|OOOOxx
+7701|4771|1|1|1|1|1|701|1701|2701|7701|2|3|FKAAAA|NBHAAA|VVVVxx
+1242|4772|0|2|2|2|42|242|1242|1242|1242|84|85|UVAAAA|OBHAAA|AAAAxx
+7890|4773|0|2|0|10|90|890|1890|2890|7890|180|181|MRAAAA|PBHAAA|HHHHxx
+1991|4774|1|3|1|11|91|991|1991|1991|1991|182|183|PYAAAA|QBHAAA|OOOOxx
+110|4775|0|2|0|10|10|110|110|110|110|20|21|GEAAAA|RBHAAA|VVVVxx
+9334|4776|0|2|4|14|34|334|1334|4334|9334|68|69|AVAAAA|SBHAAA|AAAAxx
+6231|4777|1|3|1|11|31|231|231|1231|6231|62|63|RFAAAA|TBHAAA|HHHHxx
+9871|4778|1|3|1|11|71|871|1871|4871|9871|142|143|RPAAAA|UBHAAA|OOOOxx
+9471|4779|1|3|1|11|71|471|1471|4471|9471|142|143|HAAAAA|VBHAAA|VVVVxx
+2697|4780|1|1|7|17|97|697|697|2697|2697|194|195|TZAAAA|WBHAAA|AAAAxx
+4761|4781|1|1|1|1|61|761|761|4761|4761|122|123|DBAAAA|XBHAAA|HHHHxx
+8493|4782|1|1|3|13|93|493|493|3493|8493|186|187|ROAAAA|YBHAAA|OOOOxx
+1045|4783|1|1|5|5|45|45|1045|1045|1045|90|91|FOAAAA|ZBHAAA|VVVVxx
+3403|4784|1|3|3|3|3|403|1403|3403|3403|6|7|XAAAAA|ACHAAA|AAAAxx
+9412|4785|0|0|2|12|12|412|1412|4412|9412|24|25|AYAAAA|BCHAAA|HHHHxx
+7652|4786|0|0|2|12|52|652|1652|2652|7652|104|105|IIAAAA|CCHAAA|OOOOxx
+5866|4787|0|2|6|6|66|866|1866|866|5866|132|133|QRAAAA|DCHAAA|VVVVxx
+6942|4788|0|2|2|2|42|942|942|1942|6942|84|85|AHAAAA|ECHAAA|AAAAxx
+9353|4789|1|1|3|13|53|353|1353|4353|9353|106|107|TVAAAA|FCHAAA|HHHHxx
+2600|4790|0|0|0|0|0|600|600|2600|2600|0|1|AWAAAA|GCHAAA|OOOOxx
+6971|4791|1|3|1|11|71|971|971|1971|6971|142|143|DIAAAA|HCHAAA|VVVVxx
+5391|4792|1|3|1|11|91|391|1391|391|5391|182|183|JZAAAA|ICHAAA|AAAAxx
+7654|4793|0|2|4|14|54|654|1654|2654|7654|108|109|KIAAAA|JCHAAA|HHHHxx
+1797|4794|1|1|7|17|97|797|1797|1797|1797|194|195|DRAAAA|KCHAAA|OOOOxx
+4530|4795|0|2|0|10|30|530|530|4530|4530|60|61|GSAAAA|LCHAAA|VVVVxx
+3130|4796|0|2|0|10|30|130|1130|3130|3130|60|61|KQAAAA|MCHAAA|AAAAxx
+9442|4797|0|2|2|2|42|442|1442|4442|9442|84|85|EZAAAA|NCHAAA|HHHHxx
+6659|4798|1|3|9|19|59|659|659|1659|6659|118|119|DWAAAA|OCHAAA|OOOOxx
+9714|4799|0|2|4|14|14|714|1714|4714|9714|28|29|QJAAAA|PCHAAA|VVVVxx
+3660|4800|0|0|0|0|60|660|1660|3660|3660|120|121|UKAAAA|QCHAAA|AAAAxx
+1906|4801|0|2|6|6|6|906|1906|1906|1906|12|13|IVAAAA|RCHAAA|HHHHxx
+7927|4802|1|3|7|7|27|927|1927|2927|7927|54|55|XSAAAA|SCHAAA|OOOOxx
+1767|4803|1|3|7|7|67|767|1767|1767|1767|134|135|ZPAAAA|TCHAAA|VVVVxx
+5523|4804|1|3|3|3|23|523|1523|523|5523|46|47|LEAAAA|UCHAAA|AAAAxx
+9289|4805|1|1|9|9|89|289|1289|4289|9289|178|179|HTAAAA|VCHAAA|HHHHxx
+2717|4806|1|1|7|17|17|717|717|2717|2717|34|35|NAAAAA|WCHAAA|OOOOxx
+4099|4807|1|3|9|19|99|99|99|4099|4099|198|199|RBAAAA|XCHAAA|VVVVxx
+4387|4808|1|3|7|7|87|387|387|4387|4387|174|175|TMAAAA|YCHAAA|AAAAxx
+8864|4809|0|0|4|4|64|864|864|3864|8864|128|129|YCAAAA|ZCHAAA|HHHHxx
+1774|4810|0|2|4|14|74|774|1774|1774|1774|148|149|GQAAAA|ADHAAA|OOOOxx
+6292|4811|0|0|2|12|92|292|292|1292|6292|184|185|AIAAAA|BDHAAA|VVVVxx
+847|4812|1|3|7|7|47|847|847|847|847|94|95|PGAAAA|CDHAAA|AAAAxx
+5954|4813|0|2|4|14|54|954|1954|954|5954|108|109|AVAAAA|DDHAAA|HHHHxx
+8032|4814|0|0|2|12|32|32|32|3032|8032|64|65|YWAAAA|EDHAAA|OOOOxx
+3295|4815|1|3|5|15|95|295|1295|3295|3295|190|191|TWAAAA|FDHAAA|VVVVxx
+8984|4816|0|0|4|4|84|984|984|3984|8984|168|169|OHAAAA|GDHAAA|AAAAxx
+7809|4817|1|1|9|9|9|809|1809|2809|7809|18|19|JOAAAA|HDHAAA|HHHHxx
+1670|4818|0|2|0|10|70|670|1670|1670|1670|140|141|GMAAAA|IDHAAA|OOOOxx
+7733|4819|1|1|3|13|33|733|1733|2733|7733|66|67|LLAAAA|JDHAAA|VVVVxx
+6187|4820|1|3|7|7|87|187|187|1187|6187|174|175|ZDAAAA|KDHAAA|AAAAxx
+9326|4821|0|2|6|6|26|326|1326|4326|9326|52|53|SUAAAA|LDHAAA|HHHHxx
+2493|4822|1|1|3|13|93|493|493|2493|2493|186|187|XRAAAA|MDHAAA|OOOOxx
+9512|4823|0|0|2|12|12|512|1512|4512|9512|24|25|WBAAAA|NDHAAA|VVVVxx
+4342|4824|0|2|2|2|42|342|342|4342|4342|84|85|ALAAAA|ODHAAA|AAAAxx
+5350|4825|0|2|0|10|50|350|1350|350|5350|100|101|UXAAAA|PDHAAA|HHHHxx
+6009|4826|1|1|9|9|9|9|9|1009|6009|18|19|DXAAAA|QDHAAA|OOOOxx
+1208|4827|0|0|8|8|8|208|1208|1208|1208|16|17|MUAAAA|RDHAAA|VVVVxx
+7014|4828|0|2|4|14|14|14|1014|2014|7014|28|29|UJAAAA|SDHAAA|AAAAxx
+2967|4829|1|3|7|7|67|967|967|2967|2967|134|135|DKAAAA|TDHAAA|HHHHxx
+5831|4830|1|3|1|11|31|831|1831|831|5831|62|63|HQAAAA|UDHAAA|OOOOxx
+3097|4831|1|1|7|17|97|97|1097|3097|3097|194|195|DPAAAA|VDHAAA|VVVVxx
+1528|4832|0|0|8|8|28|528|1528|1528|1528|56|57|UGAAAA|WDHAAA|AAAAxx
+6429|4833|1|1|9|9|29|429|429|1429|6429|58|59|HNAAAA|XDHAAA|HHHHxx
+7320|4834|0|0|0|0|20|320|1320|2320|7320|40|41|OVAAAA|YDHAAA|OOOOxx
+844|4835|0|0|4|4|44|844|844|844|844|88|89|MGAAAA|ZDHAAA|VVVVxx
+7054|4836|0|2|4|14|54|54|1054|2054|7054|108|109|ILAAAA|AEHAAA|AAAAxx
+1643|4837|1|3|3|3|43|643|1643|1643|1643|86|87|FLAAAA|BEHAAA|HHHHxx
+7626|4838|0|2|6|6|26|626|1626|2626|7626|52|53|IHAAAA|CEHAAA|OOOOxx
+8728|4839|0|0|8|8|28|728|728|3728|8728|56|57|SXAAAA|DEHAAA|VVVVxx
+8277|4840|1|1|7|17|77|277|277|3277|8277|154|155|JGAAAA|EEHAAA|AAAAxx
+189|4841|1|1|9|9|89|189|189|189|189|178|179|HHAAAA|FEHAAA|HHHHxx
+3717|4842|1|1|7|17|17|717|1717|3717|3717|34|35|ZMAAAA|GEHAAA|OOOOxx
+1020|4843|0|0|0|0|20|20|1020|1020|1020|40|41|GNAAAA|HEHAAA|VVVVxx
+9234|4844|0|2|4|14|34|234|1234|4234|9234|68|69|ERAAAA|IEHAAA|AAAAxx
+9541|4845|1|1|1|1|41|541|1541|4541|9541|82|83|ZCAAAA|JEHAAA|HHHHxx
+380|4846|0|0|0|0|80|380|380|380|380|160|161|QOAAAA|KEHAAA|OOOOxx
+397|4847|1|1|7|17|97|397|397|397|397|194|195|HPAAAA|LEHAAA|VVVVxx
+835|4848|1|3|5|15|35|835|835|835|835|70|71|DGAAAA|MEHAAA|AAAAxx
+347|4849|1|3|7|7|47|347|347|347|347|94|95|JNAAAA|NEHAAA|HHHHxx
+2490|4850|0|2|0|10|90|490|490|2490|2490|180|181|URAAAA|OEHAAA|OOOOxx
+605|4851|1|1|5|5|5|605|605|605|605|10|11|HXAAAA|PEHAAA|VVVVxx
+7960|4852|0|0|0|0|60|960|1960|2960|7960|120|121|EUAAAA|QEHAAA|AAAAxx
+9681|4853|1|1|1|1|81|681|1681|4681|9681|162|163|JIAAAA|REHAAA|HHHHxx
+5753|4854|1|1|3|13|53|753|1753|753|5753|106|107|HNAAAA|SEHAAA|OOOOxx
+1676|4855|0|0|6|16|76|676|1676|1676|1676|152|153|MMAAAA|TEHAAA|VVVVxx
+5533|4856|1|1|3|13|33|533|1533|533|5533|66|67|VEAAAA|UEHAAA|AAAAxx
+8958|4857|0|2|8|18|58|958|958|3958|8958|116|117|OGAAAA|VEHAAA|HHHHxx
+664|4858|0|0|4|4|64|664|664|664|664|128|129|OZAAAA|WEHAAA|OOOOxx
+3005|4859|1|1|5|5|5|5|1005|3005|3005|10|11|PLAAAA|XEHAAA|VVVVxx
+8576|4860|0|0|6|16|76|576|576|3576|8576|152|153|WRAAAA|YEHAAA|AAAAxx
+7304|4861|0|0|4|4|4|304|1304|2304|7304|8|9|YUAAAA|ZEHAAA|HHHHxx
+3375|4862|1|3|5|15|75|375|1375|3375|3375|150|151|VZAAAA|AFHAAA|OOOOxx
+6336|4863|0|0|6|16|36|336|336|1336|6336|72|73|SJAAAA|BFHAAA|VVVVxx
+1392|4864|0|0|2|12|92|392|1392|1392|1392|184|185|OBAAAA|CFHAAA|AAAAxx
+2925|4865|1|1|5|5|25|925|925|2925|2925|50|51|NIAAAA|DFHAAA|HHHHxx
+1217|4866|1|1|7|17|17|217|1217|1217|1217|34|35|VUAAAA|EFHAAA|OOOOxx
+3714|4867|0|2|4|14|14|714|1714|3714|3714|28|29|WMAAAA|FFHAAA|VVVVxx
+2120|4868|0|0|0|0|20|120|120|2120|2120|40|41|ODAAAA|GFHAAA|AAAAxx
+2845|4869|1|1|5|5|45|845|845|2845|2845|90|91|LFAAAA|HFHAAA|HHHHxx
+3865|4870|1|1|5|5|65|865|1865|3865|3865|130|131|RSAAAA|IFHAAA|OOOOxx
+124|4871|0|0|4|4|24|124|124|124|124|48|49|UEAAAA|JFHAAA|VVVVxx
+865|4872|1|1|5|5|65|865|865|865|865|130|131|HHAAAA|KFHAAA|AAAAxx
+9361|4873|1|1|1|1|61|361|1361|4361|9361|122|123|BWAAAA|LFHAAA|HHHHxx
+6338|4874|0|2|8|18|38|338|338|1338|6338|76|77|UJAAAA|MFHAAA|OOOOxx
+7330|4875|0|2|0|10|30|330|1330|2330|7330|60|61|YVAAAA|NFHAAA|VVVVxx
+513|4876|1|1|3|13|13|513|513|513|513|26|27|TTAAAA|OFHAAA|AAAAxx
+5001|4877|1|1|1|1|1|1|1001|1|5001|2|3|JKAAAA|PFHAAA|HHHHxx
+549|4878|1|1|9|9|49|549|549|549|549|98|99|DVAAAA|QFHAAA|OOOOxx
+1808|4879|0|0|8|8|8|808|1808|1808|1808|16|17|ORAAAA|RFHAAA|VVVVxx
+7168|4880|0|0|8|8|68|168|1168|2168|7168|136|137|SPAAAA|SFHAAA|AAAAxx
+9878|4881|0|2|8|18|78|878|1878|4878|9878|156|157|YPAAAA|TFHAAA|HHHHxx
+233|4882|1|1|3|13|33|233|233|233|233|66|67|ZIAAAA|UFHAAA|OOOOxx
+4262|4883|0|2|2|2|62|262|262|4262|4262|124|125|YHAAAA|VFHAAA|VVVVxx
+7998|4884|0|2|8|18|98|998|1998|2998|7998|196|197|QVAAAA|WFHAAA|AAAAxx
+2419|4885|1|3|9|19|19|419|419|2419|2419|38|39|BPAAAA|XFHAAA|HHHHxx
+9960|4886|0|0|0|0|60|960|1960|4960|9960|120|121|CTAAAA|YFHAAA|OOOOxx
+3523|4887|1|3|3|3|23|523|1523|3523|3523|46|47|NFAAAA|ZFHAAA|VVVVxx
+5440|4888|0|0|0|0|40|440|1440|440|5440|80|81|GBAAAA|AGHAAA|AAAAxx
+3030|4889|0|2|0|10|30|30|1030|3030|3030|60|61|OMAAAA|BGHAAA|HHHHxx
+2745|4890|1|1|5|5|45|745|745|2745|2745|90|91|PBAAAA|CGHAAA|OOOOxx
+7175|4891|1|3|5|15|75|175|1175|2175|7175|150|151|ZPAAAA|DGHAAA|VVVVxx
+640|4892|0|0|0|0|40|640|640|640|640|80|81|QYAAAA|EGHAAA|AAAAxx
+1798|4893|0|2|8|18|98|798|1798|1798|1798|196|197|ERAAAA|FGHAAA|HHHHxx
+7499|4894|1|3|9|19|99|499|1499|2499|7499|198|199|LCAAAA|GGHAAA|OOOOxx
+1924|4895|0|0|4|4|24|924|1924|1924|1924|48|49|AWAAAA|HGHAAA|VVVVxx
+1327|4896|1|3|7|7|27|327|1327|1327|1327|54|55|BZAAAA|IGHAAA|AAAAxx
+73|4897|1|1|3|13|73|73|73|73|73|146|147|VCAAAA|JGHAAA|HHHHxx
+9558|4898|0|2|8|18|58|558|1558|4558|9558|116|117|QDAAAA|KGHAAA|OOOOxx
+818|4899|0|2|8|18|18|818|818|818|818|36|37|MFAAAA|LGHAAA|VVVVxx
+9916|4900|0|0|6|16|16|916|1916|4916|9916|32|33|KRAAAA|MGHAAA|AAAAxx
+2978|4901|0|2|8|18|78|978|978|2978|2978|156|157|OKAAAA|NGHAAA|HHHHxx
+8469|4902|1|1|9|9|69|469|469|3469|8469|138|139|TNAAAA|OGHAAA|OOOOxx
+9845|4903|1|1|5|5|45|845|1845|4845|9845|90|91|ROAAAA|PGHAAA|VVVVxx
+2326|4904|0|2|6|6|26|326|326|2326|2326|52|53|MLAAAA|QGHAAA|AAAAxx
+4032|4905|0|0|2|12|32|32|32|4032|4032|64|65|CZAAAA|RGHAAA|HHHHxx
+5604|4906|0|0|4|4|4|604|1604|604|5604|8|9|OHAAAA|SGHAAA|OOOOxx
+9610|4907|0|2|0|10|10|610|1610|4610|9610|20|21|QFAAAA|TGHAAA|VVVVxx
+5101|4908|1|1|1|1|1|101|1101|101|5101|2|3|FOAAAA|UGHAAA|AAAAxx
+7246|4909|0|2|6|6|46|246|1246|2246|7246|92|93|SSAAAA|VGHAAA|HHHHxx
+1292|4910|0|0|2|12|92|292|1292|1292|1292|184|185|SXAAAA|WGHAAA|OOOOxx
+6235|4911|1|3|5|15|35|235|235|1235|6235|70|71|VFAAAA|XGHAAA|VVVVxx
+1733|4912|1|1|3|13|33|733|1733|1733|1733|66|67|ROAAAA|YGHAAA|AAAAxx
+4647|4913|1|3|7|7|47|647|647|4647|4647|94|95|TWAAAA|ZGHAAA|HHHHxx
+258|4914|0|2|8|18|58|258|258|258|258|116|117|YJAAAA|AHHAAA|OOOOxx
+8438|4915|0|2|8|18|38|438|438|3438|8438|76|77|OMAAAA|BHHAAA|VVVVxx
+7869|4916|1|1|9|9|69|869|1869|2869|7869|138|139|RQAAAA|CHHAAA|AAAAxx
+9691|4917|1|3|1|11|91|691|1691|4691|9691|182|183|TIAAAA|DHHAAA|HHHHxx
+5422|4918|0|2|2|2|22|422|1422|422|5422|44|45|OAAAAA|EHHAAA|OOOOxx
+9630|4919|0|2|0|10|30|630|1630|4630|9630|60|61|KGAAAA|FHHAAA|VVVVxx
+4439|4920|1|3|9|19|39|439|439|4439|4439|78|79|TOAAAA|GHHAAA|AAAAxx
+3140|4921|0|0|0|0|40|140|1140|3140|3140|80|81|UQAAAA|HHHAAA|HHHHxx
+9111|4922|1|3|1|11|11|111|1111|4111|9111|22|23|LMAAAA|IHHAAA|OOOOxx
+4606|4923|0|2|6|6|6|606|606|4606|4606|12|13|EVAAAA|JHHAAA|VVVVxx
+8620|4924|0|0|0|0|20|620|620|3620|8620|40|41|OTAAAA|KHHAAA|AAAAxx
+7849|4925|1|1|9|9|49|849|1849|2849|7849|98|99|XPAAAA|LHHAAA|HHHHxx
+346|4926|0|2|6|6|46|346|346|346|346|92|93|INAAAA|MHHAAA|OOOOxx
+9528|4927|0|0|8|8|28|528|1528|4528|9528|56|57|MCAAAA|NHHAAA|VVVVxx
+1811|4928|1|3|1|11|11|811|1811|1811|1811|22|23|RRAAAA|OHHAAA|AAAAxx
+6068|4929|0|0|8|8|68|68|68|1068|6068|136|137|KZAAAA|PHHAAA|HHHHxx
+6260|4930|0|0|0|0|60|260|260|1260|6260|120|121|UGAAAA|QHHAAA|OOOOxx
+5909|4931|1|1|9|9|9|909|1909|909|5909|18|19|HTAAAA|RHHAAA|VVVVxx
+4518|4932|0|2|8|18|18|518|518|4518|4518|36|37|URAAAA|SHHAAA|AAAAxx
+7530|4933|0|2|0|10|30|530|1530|2530|7530|60|61|QDAAAA|THHAAA|HHHHxx
+3900|4934|0|0|0|0|0|900|1900|3900|3900|0|1|AUAAAA|UHHAAA|OOOOxx
+3969|4935|1|1|9|9|69|969|1969|3969|3969|138|139|RWAAAA|VHHAAA|VVVVxx
+8690|4936|0|2|0|10|90|690|690|3690|8690|180|181|GWAAAA|WHHAAA|AAAAxx
+5532|4937|0|0|2|12|32|532|1532|532|5532|64|65|UEAAAA|XHHAAA|HHHHxx
+5989|4938|1|1|9|9|89|989|1989|989|5989|178|179|JWAAAA|YHHAAA|OOOOxx
+1870|4939|0|2|0|10|70|870|1870|1870|1870|140|141|YTAAAA|ZHHAAA|VVVVxx
+1113|4940|1|1|3|13|13|113|1113|1113|1113|26|27|VQAAAA|AIHAAA|AAAAxx
+5155|4941|1|3|5|15|55|155|1155|155|5155|110|111|HQAAAA|BIHAAA|HHHHxx
+7460|4942|0|0|0|0|60|460|1460|2460|7460|120|121|YAAAAA|CIHAAA|OOOOxx
+6217|4943|1|1|7|17|17|217|217|1217|6217|34|35|DFAAAA|DIHAAA|VVVVxx
+8333|4944|1|1|3|13|33|333|333|3333|8333|66|67|NIAAAA|EIHAAA|AAAAxx
+6341|4945|1|1|1|1|41|341|341|1341|6341|82|83|XJAAAA|FIHAAA|HHHHxx
+6230|4946|0|2|0|10|30|230|230|1230|6230|60|61|QFAAAA|GIHAAA|OOOOxx
+6902|4947|0|2|2|2|2|902|902|1902|6902|4|5|MFAAAA|HIHAAA|VVVVxx
+670|4948|0|2|0|10|70|670|670|670|670|140|141|UZAAAA|IIHAAA|AAAAxx
+805|4949|1|1|5|5|5|805|805|805|805|10|11|ZEAAAA|JIHAAA|HHHHxx
+1340|4950|0|0|0|0|40|340|1340|1340|1340|80|81|OZAAAA|KIHAAA|OOOOxx
+8649|4951|1|1|9|9|49|649|649|3649|8649|98|99|RUAAAA|LIHAAA|VVVVxx
+3887|4952|1|3|7|7|87|887|1887|3887|3887|174|175|NTAAAA|MIHAAA|AAAAxx
+5400|4953|0|0|0|0|0|400|1400|400|5400|0|1|SZAAAA|NIHAAA|HHHHxx
+4354|4954|0|2|4|14|54|354|354|4354|4354|108|109|MLAAAA|OIHAAA|OOOOxx
+950|4955|0|2|0|10|50|950|950|950|950|100|101|OKAAAA|PIHAAA|VVVVxx
+1544|4956|0|0|4|4|44|544|1544|1544|1544|88|89|KHAAAA|QIHAAA|AAAAxx
+3898|4957|0|2|8|18|98|898|1898|3898|3898|196|197|YTAAAA|RIHAAA|HHHHxx
+8038|4958|0|2|8|18|38|38|38|3038|8038|76|77|EXAAAA|SIHAAA|OOOOxx
+1095|4959|1|3|5|15|95|95|1095|1095|1095|190|191|DQAAAA|TIHAAA|VVVVxx
+1748|4960|0|0|8|8|48|748|1748|1748|1748|96|97|GPAAAA|UIHAAA|AAAAxx
+9154|4961|0|2|4|14|54|154|1154|4154|9154|108|109|COAAAA|VIHAAA|HHHHxx
+2182|4962|0|2|2|2|82|182|182|2182|2182|164|165|YFAAAA|WIHAAA|OOOOxx
+6797|4963|1|1|7|17|97|797|797|1797|6797|194|195|LBAAAA|XIHAAA|VVVVxx
+9149|4964|1|1|9|9|49|149|1149|4149|9149|98|99|XNAAAA|YIHAAA|AAAAxx
+7351|4965|1|3|1|11|51|351|1351|2351|7351|102|103|TWAAAA|ZIHAAA|HHHHxx
+2820|4966|0|0|0|0|20|820|820|2820|2820|40|41|MEAAAA|AJHAAA|OOOOxx
+9696|4967|0|0|6|16|96|696|1696|4696|9696|192|193|YIAAAA|BJHAAA|VVVVxx
+253|4968|1|1|3|13|53|253|253|253|253|106|107|TJAAAA|CJHAAA|AAAAxx
+3600|4969|0|0|0|0|0|600|1600|3600|3600|0|1|MIAAAA|DJHAAA|HHHHxx
+3892|4970|0|0|2|12|92|892|1892|3892|3892|184|185|STAAAA|EJHAAA|OOOOxx
+231|4971|1|3|1|11|31|231|231|231|231|62|63|XIAAAA|FJHAAA|VVVVxx
+8331|4972|1|3|1|11|31|331|331|3331|8331|62|63|LIAAAA|GJHAAA|AAAAxx
+403|4973|1|3|3|3|3|403|403|403|403|6|7|NPAAAA|HJHAAA|HHHHxx
+8642|4974|0|2|2|2|42|642|642|3642|8642|84|85|KUAAAA|IJHAAA|OOOOxx
+3118|4975|0|2|8|18|18|118|1118|3118|3118|36|37|YPAAAA|JJHAAA|VVVVxx
+3835|4976|1|3|5|15|35|835|1835|3835|3835|70|71|NRAAAA|KJHAAA|AAAAxx
+1117|4977|1|1|7|17|17|117|1117|1117|1117|34|35|ZQAAAA|LJHAAA|HHHHxx
+7024|4978|0|0|4|4|24|24|1024|2024|7024|48|49|EKAAAA|MJHAAA|OOOOxx
+2636|4979|0|0|6|16|36|636|636|2636|2636|72|73|KXAAAA|NJHAAA|VVVVxx
+3778|4980|0|2|8|18|78|778|1778|3778|3778|156|157|IPAAAA|OJHAAA|AAAAxx
+2003|4981|1|3|3|3|3|3|3|2003|2003|6|7|BZAAAA|PJHAAA|HHHHxx
+5717|4982|1|1|7|17|17|717|1717|717|5717|34|35|XLAAAA|QJHAAA|OOOOxx
+4869|4983|1|1|9|9|69|869|869|4869|4869|138|139|HFAAAA|RJHAAA|VVVVxx
+8921|4984|1|1|1|1|21|921|921|3921|8921|42|43|DFAAAA|SJHAAA|AAAAxx
+888|4985|0|0|8|8|88|888|888|888|888|176|177|EIAAAA|TJHAAA|HHHHxx
+7599|4986|1|3|9|19|99|599|1599|2599|7599|198|199|HGAAAA|UJHAAA|OOOOxx
+8621|4987|1|1|1|1|21|621|621|3621|8621|42|43|PTAAAA|VJHAAA|VVVVxx
+811|4988|1|3|1|11|11|811|811|811|811|22|23|FFAAAA|WJHAAA|AAAAxx
+9147|4989|1|3|7|7|47|147|1147|4147|9147|94|95|VNAAAA|XJHAAA|HHHHxx
+1413|4990|1|1|3|13|13|413|1413|1413|1413|26|27|JCAAAA|YJHAAA|OOOOxx
+5232|4991|0|0|2|12|32|232|1232|232|5232|64|65|GTAAAA|ZJHAAA|VVVVxx
+5912|4992|0|0|2|12|12|912|1912|912|5912|24|25|KTAAAA|AKHAAA|AAAAxx
+3418|4993|0|2|8|18|18|418|1418|3418|3418|36|37|MBAAAA|BKHAAA|HHHHxx
+3912|4994|0|0|2|12|12|912|1912|3912|3912|24|25|MUAAAA|CKHAAA|OOOOxx
+9576|4995|0|0|6|16|76|576|1576|4576|9576|152|153|IEAAAA|DKHAAA|VVVVxx
+4225|4996|1|1|5|5|25|225|225|4225|4225|50|51|NGAAAA|EKHAAA|AAAAxx
+8222|4997|0|2|2|2|22|222|222|3222|8222|44|45|GEAAAA|FKHAAA|HHHHxx
+7013|4998|1|1|3|13|13|13|1013|2013|7013|26|27|TJAAAA|GKHAAA|OOOOxx
+7037|4999|1|1|7|17|37|37|1037|2037|7037|74|75|RKAAAA|HKHAAA|VVVVxx
+1205|5000|1|1|5|5|5|205|1205|1205|1205|10|11|JUAAAA|IKHAAA|AAAAxx
+8114|5001|0|2|4|14|14|114|114|3114|8114|28|29|CAAAAA|JKHAAA|HHHHxx
+6585|5002|1|1|5|5|85|585|585|1585|6585|170|171|HTAAAA|KKHAAA|OOOOxx
+155|5003|1|3|5|15|55|155|155|155|155|110|111|ZFAAAA|LKHAAA|VVVVxx
+2841|5004|1|1|1|1|41|841|841|2841|2841|82|83|HFAAAA|MKHAAA|AAAAxx
+1996|5005|0|0|6|16|96|996|1996|1996|1996|192|193|UYAAAA|NKHAAA|HHHHxx
+4948|5006|0|0|8|8|48|948|948|4948|4948|96|97|IIAAAA|OKHAAA|OOOOxx
+3304|5007|0|0|4|4|4|304|1304|3304|3304|8|9|CXAAAA|PKHAAA|VVVVxx
+5684|5008|0|0|4|4|84|684|1684|684|5684|168|169|QKAAAA|QKHAAA|AAAAxx
+6962|5009|0|2|2|2|62|962|962|1962|6962|124|125|UHAAAA|RKHAAA|HHHHxx
+8691|5010|1|3|1|11|91|691|691|3691|8691|182|183|HWAAAA|SKHAAA|OOOOxx
+8501|5011|1|1|1|1|1|501|501|3501|8501|2|3|ZOAAAA|TKHAAA|VVVVxx
+4783|5012|1|3|3|3|83|783|783|4783|4783|166|167|ZBAAAA|UKHAAA|AAAAxx
+3762|5013|0|2|2|2|62|762|1762|3762|3762|124|125|SOAAAA|VKHAAA|HHHHxx
+4534|5014|0|2|4|14|34|534|534|4534|4534|68|69|KSAAAA|WKHAAA|OOOOxx
+4999|5015|1|3|9|19|99|999|999|4999|4999|198|199|HKAAAA|XKHAAA|VVVVxx
+4618|5016|0|2|8|18|18|618|618|4618|4618|36|37|QVAAAA|YKHAAA|AAAAxx
+4220|5017|0|0|0|0|20|220|220|4220|4220|40|41|IGAAAA|ZKHAAA|HHHHxx
+3384|5018|0|0|4|4|84|384|1384|3384|3384|168|169|EAAAAA|ALHAAA|OOOOxx
+3036|5019|0|0|6|16|36|36|1036|3036|3036|72|73|UMAAAA|BLHAAA|VVVVxx
+545|5020|1|1|5|5|45|545|545|545|545|90|91|ZUAAAA|CLHAAA|AAAAxx
+9946|5021|0|2|6|6|46|946|1946|4946|9946|92|93|OSAAAA|DLHAAA|HHHHxx
+1985|5022|1|1|5|5|85|985|1985|1985|1985|170|171|JYAAAA|ELHAAA|OOOOxx
+2310|5023|0|2|0|10|10|310|310|2310|2310|20|21|WKAAAA|FLHAAA|VVVVxx
+6563|5024|1|3|3|3|63|563|563|1563|6563|126|127|LSAAAA|GLHAAA|AAAAxx
+4886|5025|0|2|6|6|86|886|886|4886|4886|172|173|YFAAAA|HLHAAA|HHHHxx
+9359|5026|1|3|9|19|59|359|1359|4359|9359|118|119|ZVAAAA|ILHAAA|OOOOxx
+400|5027|0|0|0|0|0|400|400|400|400|0|1|KPAAAA|JLHAAA|VVVVxx
+9742|5028|0|2|2|2|42|742|1742|4742|9742|84|85|SKAAAA|KLHAAA|AAAAxx
+6736|5029|0|0|6|16|36|736|736|1736|6736|72|73|CZAAAA|LLHAAA|HHHHxx
+8166|5030|0|2|6|6|66|166|166|3166|8166|132|133|CCAAAA|MLHAAA|OOOOxx
+861|5031|1|1|1|1|61|861|861|861|861|122|123|DHAAAA|NLHAAA|VVVVxx
+7492|5032|0|0|2|12|92|492|1492|2492|7492|184|185|ECAAAA|OLHAAA|AAAAxx
+1155|5033|1|3|5|15|55|155|1155|1155|1155|110|111|LSAAAA|PLHAAA|HHHHxx
+9769|5034|1|1|9|9|69|769|1769|4769|9769|138|139|TLAAAA|QLHAAA|OOOOxx
+6843|5035|1|3|3|3|43|843|843|1843|6843|86|87|FDAAAA|RLHAAA|VVVVxx
+5625|5036|1|1|5|5|25|625|1625|625|5625|50|51|JIAAAA|SLHAAA|AAAAxx
+1910|5037|0|2|0|10|10|910|1910|1910|1910|20|21|MVAAAA|TLHAAA|HHHHxx
+9796|5038|0|0|6|16|96|796|1796|4796|9796|192|193|UMAAAA|ULHAAA|OOOOxx
+6950|5039|0|2|0|10|50|950|950|1950|6950|100|101|IHAAAA|VLHAAA|VVVVxx
+3084|5040|0|0|4|4|84|84|1084|3084|3084|168|169|QOAAAA|WLHAAA|AAAAxx
+2959|5041|1|3|9|19|59|959|959|2959|2959|118|119|VJAAAA|XLHAAA|HHHHxx
+2093|5042|1|1|3|13|93|93|93|2093|2093|186|187|NCAAAA|YLHAAA|OOOOxx
+2738|5043|0|2|8|18|38|738|738|2738|2738|76|77|IBAAAA|ZLHAAA|VVVVxx
+6406|5044|0|2|6|6|6|406|406|1406|6406|12|13|KMAAAA|AMHAAA|AAAAxx
+9082|5045|0|2|2|2|82|82|1082|4082|9082|164|165|ILAAAA|BMHAAA|HHHHxx
+8568|5046|0|0|8|8|68|568|568|3568|8568|136|137|ORAAAA|CMHAAA|OOOOxx
+3566|5047|0|2|6|6|66|566|1566|3566|3566|132|133|EHAAAA|DMHAAA|VVVVxx
+3016|5048|0|0|6|16|16|16|1016|3016|3016|32|33|AMAAAA|EMHAAA|AAAAxx
+1207|5049|1|3|7|7|7|207|1207|1207|1207|14|15|LUAAAA|FMHAAA|HHHHxx
+4045|5050|1|1|5|5|45|45|45|4045|4045|90|91|PZAAAA|GMHAAA|OOOOxx
+4173|5051|1|1|3|13|73|173|173|4173|4173|146|147|NEAAAA|HMHAAA|VVVVxx
+3939|5052|1|3|9|19|39|939|1939|3939|3939|78|79|NVAAAA|IMHAAA|AAAAxx
+9683|5053|1|3|3|3|83|683|1683|4683|9683|166|167|LIAAAA|JMHAAA|HHHHxx
+1684|5054|0|0|4|4|84|684|1684|1684|1684|168|169|UMAAAA|KMHAAA|OOOOxx
+9271|5055|1|3|1|11|71|271|1271|4271|9271|142|143|PSAAAA|LMHAAA|VVVVxx
+9317|5056|1|1|7|17|17|317|1317|4317|9317|34|35|JUAAAA|MMHAAA|AAAAxx
+5793|5057|1|1|3|13|93|793|1793|793|5793|186|187|VOAAAA|NMHAAA|HHHHxx
+352|5058|0|0|2|12|52|352|352|352|352|104|105|ONAAAA|OMHAAA|OOOOxx
+7328|5059|0|0|8|8|28|328|1328|2328|7328|56|57|WVAAAA|PMHAAA|VVVVxx
+4582|5060|0|2|2|2|82|582|582|4582|4582|164|165|GUAAAA|QMHAAA|AAAAxx
+7413|5061|1|1|3|13|13|413|1413|2413|7413|26|27|DZAAAA|RMHAAA|HHHHxx
+6772|5062|0|0|2|12|72|772|772|1772|6772|144|145|MAAAAA|SMHAAA|OOOOxx
+4973|5063|1|1|3|13|73|973|973|4973|4973|146|147|HJAAAA|TMHAAA|VVVVxx
+7480|5064|0|0|0|0|80|480|1480|2480|7480|160|161|SBAAAA|UMHAAA|AAAAxx
+5555|5065|1|3|5|15|55|555|1555|555|5555|110|111|RFAAAA|VMHAAA|HHHHxx
+4227|5066|1|3|7|7|27|227|227|4227|4227|54|55|PGAAAA|WMHAAA|OOOOxx
+4153|5067|1|1|3|13|53|153|153|4153|4153|106|107|TDAAAA|XMHAAA|VVVVxx
+4601|5068|1|1|1|1|1|601|601|4601|4601|2|3|ZUAAAA|YMHAAA|AAAAxx
+3782|5069|0|2|2|2|82|782|1782|3782|3782|164|165|MPAAAA|ZMHAAA|HHHHxx
+3872|5070|0|0|2|12|72|872|1872|3872|3872|144|145|YSAAAA|ANHAAA|OOOOxx
+893|5071|1|1|3|13|93|893|893|893|893|186|187|JIAAAA|BNHAAA|VVVVxx
+2430|5072|0|2|0|10|30|430|430|2430|2430|60|61|MPAAAA|CNHAAA|AAAAxx
+2591|5073|1|3|1|11|91|591|591|2591|2591|182|183|RVAAAA|DNHAAA|HHHHxx
+264|5074|0|0|4|4|64|264|264|264|264|128|129|EKAAAA|ENHAAA|OOOOxx
+6238|5075|0|2|8|18|38|238|238|1238|6238|76|77|YFAAAA|FNHAAA|VVVVxx
+633|5076|1|1|3|13|33|633|633|633|633|66|67|JYAAAA|GNHAAA|AAAAxx
+1029|5077|1|1|9|9|29|29|1029|1029|1029|58|59|PNAAAA|HNHAAA|HHHHxx
+5934|5078|0|2|4|14|34|934|1934|934|5934|68|69|GUAAAA|INHAAA|OOOOxx
+8694|5079|0|2|4|14|94|694|694|3694|8694|188|189|KWAAAA|JNHAAA|VVVVxx
+7401|5080|1|1|1|1|1|401|1401|2401|7401|2|3|RYAAAA|KNHAAA|AAAAxx
+1165|5081|1|1|5|5|65|165|1165|1165|1165|130|131|VSAAAA|LNHAAA|HHHHxx
+9438|5082|0|2|8|18|38|438|1438|4438|9438|76|77|AZAAAA|MNHAAA|OOOOxx
+4790|5083|0|2|0|10|90|790|790|4790|4790|180|181|GCAAAA|NNHAAA|VVVVxx
+4531|5084|1|3|1|11|31|531|531|4531|4531|62|63|HSAAAA|ONHAAA|AAAAxx
+6099|5085|1|3|9|19|99|99|99|1099|6099|198|199|PAAAAA|PNHAAA|HHHHxx
+8236|5086|0|0|6|16|36|236|236|3236|8236|72|73|UEAAAA|QNHAAA|OOOOxx
+8551|5087|1|3|1|11|51|551|551|3551|8551|102|103|XQAAAA|RNHAAA|VVVVxx
+3128|5088|0|0|8|8|28|128|1128|3128|3128|56|57|IQAAAA|SNHAAA|AAAAxx
+3504|5089|0|0|4|4|4|504|1504|3504|3504|8|9|UEAAAA|TNHAAA|HHHHxx
+9071|5090|1|3|1|11|71|71|1071|4071|9071|142|143|XKAAAA|UNHAAA|OOOOxx
+5930|5091|0|2|0|10|30|930|1930|930|5930|60|61|CUAAAA|VNHAAA|VVVVxx
+6825|5092|1|1|5|5|25|825|825|1825|6825|50|51|NCAAAA|WNHAAA|AAAAxx
+2218|5093|0|2|8|18|18|218|218|2218|2218|36|37|IHAAAA|XNHAAA|HHHHxx
+3604|5094|0|0|4|4|4|604|1604|3604|3604|8|9|QIAAAA|YNHAAA|OOOOxx
+5761|5095|1|1|1|1|61|761|1761|761|5761|122|123|PNAAAA|ZNHAAA|VVVVxx
+5414|5096|0|2|4|14|14|414|1414|414|5414|28|29|GAAAAA|AOHAAA|AAAAxx
+5892|5097|0|0|2|12|92|892|1892|892|5892|184|185|QSAAAA|BOHAAA|HHHHxx
+4080|5098|0|0|0|0|80|80|80|4080|4080|160|161|YAAAAA|COHAAA|OOOOxx
+8018|5099|0|2|8|18|18|18|18|3018|8018|36|37|KWAAAA|DOHAAA|VVVVxx
+1757|5100|1|1|7|17|57|757|1757|1757|1757|114|115|PPAAAA|EOHAAA|AAAAxx
+5854|5101|0|2|4|14|54|854|1854|854|5854|108|109|ERAAAA|FOHAAA|HHHHxx
+1335|5102|1|3|5|15|35|335|1335|1335|1335|70|71|JZAAAA|GOHAAA|OOOOxx
+3811|5103|1|3|1|11|11|811|1811|3811|3811|22|23|PQAAAA|HOHAAA|VVVVxx
+9917|5104|1|1|7|17|17|917|1917|4917|9917|34|35|LRAAAA|IOHAAA|AAAAxx
+5947|5105|1|3|7|7|47|947|1947|947|5947|94|95|TUAAAA|JOHAAA|HHHHxx
+7263|5106|1|3|3|3|63|263|1263|2263|7263|126|127|JTAAAA|KOHAAA|OOOOxx
+1730|5107|0|2|0|10|30|730|1730|1730|1730|60|61|OOAAAA|LOHAAA|VVVVxx
+5747|5108|1|3|7|7|47|747|1747|747|5747|94|95|BNAAAA|MOHAAA|AAAAxx
+3876|5109|0|0|6|16|76|876|1876|3876|3876|152|153|CTAAAA|NOHAAA|HHHHxx
+2762|5110|0|2|2|2|62|762|762|2762|2762|124|125|GCAAAA|OOHAAA|OOOOxx
+7613|5111|1|1|3|13|13|613|1613|2613|7613|26|27|VGAAAA|POHAAA|VVVVxx
+152|5112|0|0|2|12|52|152|152|152|152|104|105|WFAAAA|QOHAAA|AAAAxx
+3941|5113|1|1|1|1|41|941|1941|3941|3941|82|83|PVAAAA|ROHAAA|HHHHxx
+5614|5114|0|2|4|14|14|614|1614|614|5614|28|29|YHAAAA|SOHAAA|OOOOxx
+9279|5115|1|3|9|19|79|279|1279|4279|9279|158|159|XSAAAA|TOHAAA|VVVVxx
+3048|5116|0|0|8|8|48|48|1048|3048|3048|96|97|GNAAAA|UOHAAA|AAAAxx
+6152|5117|0|0|2|12|52|152|152|1152|6152|104|105|QCAAAA|VOHAAA|HHHHxx
+5481|5118|1|1|1|1|81|481|1481|481|5481|162|163|VCAAAA|WOHAAA|OOOOxx
+4675|5119|1|3|5|15|75|675|675|4675|4675|150|151|VXAAAA|XOHAAA|VVVVxx
+3334|5120|0|2|4|14|34|334|1334|3334|3334|68|69|GYAAAA|YOHAAA|AAAAxx
+4691|5121|1|3|1|11|91|691|691|4691|4691|182|183|LYAAAA|ZOHAAA|HHHHxx
+803|5122|1|3|3|3|3|803|803|803|803|6|7|XEAAAA|APHAAA|OOOOxx
+5409|5123|1|1|9|9|9|409|1409|409|5409|18|19|BAAAAA|BPHAAA|VVVVxx
+1054|5124|0|2|4|14|54|54|1054|1054|1054|108|109|OOAAAA|CPHAAA|AAAAxx
+103|5125|1|3|3|3|3|103|103|103|103|6|7|ZDAAAA|DPHAAA|HHHHxx
+8565|5126|1|1|5|5|65|565|565|3565|8565|130|131|LRAAAA|EPHAAA|OOOOxx
+4666|5127|0|2|6|6|66|666|666|4666|4666|132|133|MXAAAA|FPHAAA|VVVVxx
+6634|5128|0|2|4|14|34|634|634|1634|6634|68|69|EVAAAA|GPHAAA|AAAAxx
+5538|5129|0|2|8|18|38|538|1538|538|5538|76|77|AFAAAA|HPHAAA|HHHHxx
+3789|5130|1|1|9|9|89|789|1789|3789|3789|178|179|TPAAAA|IPHAAA|OOOOxx
+4641|5131|1|1|1|1|41|641|641|4641|4641|82|83|NWAAAA|JPHAAA|VVVVxx
+2458|5132|0|2|8|18|58|458|458|2458|2458|116|117|OQAAAA|KPHAAA|AAAAxx
+5667|5133|1|3|7|7|67|667|1667|667|5667|134|135|ZJAAAA|LPHAAA|HHHHxx
+6524|5134|0|0|4|4|24|524|524|1524|6524|48|49|YQAAAA|MPHAAA|OOOOxx
+9179|5135|1|3|9|19|79|179|1179|4179|9179|158|159|BPAAAA|NPHAAA|VVVVxx
+6358|5136|0|2|8|18|58|358|358|1358|6358|116|117|OKAAAA|OPHAAA|AAAAxx
+6668|5137|0|0|8|8|68|668|668|1668|6668|136|137|MWAAAA|PPHAAA|HHHHxx
+6414|5138|0|2|4|14|14|414|414|1414|6414|28|29|SMAAAA|QPHAAA|OOOOxx
+2813|5139|1|1|3|13|13|813|813|2813|2813|26|27|FEAAAA|RPHAAA|VVVVxx
+8927|5140|1|3|7|7|27|927|927|3927|8927|54|55|JFAAAA|SPHAAA|AAAAxx
+8695|5141|1|3|5|15|95|695|695|3695|8695|190|191|LWAAAA|TPHAAA|HHHHxx
+363|5142|1|3|3|3|63|363|363|363|363|126|127|ZNAAAA|UPHAAA|OOOOxx
+9966|5143|0|2|6|6|66|966|1966|4966|9966|132|133|ITAAAA|VPHAAA|VVVVxx
+1323|5144|1|3|3|3|23|323|1323|1323|1323|46|47|XYAAAA|WPHAAA|AAAAxx
+8211|5145|1|3|1|11|11|211|211|3211|8211|22|23|VDAAAA|XPHAAA|HHHHxx
+4375|5146|1|3|5|15|75|375|375|4375|4375|150|151|HMAAAA|YPHAAA|OOOOxx
+3257|5147|1|1|7|17|57|257|1257|3257|3257|114|115|HVAAAA|ZPHAAA|VVVVxx
+6239|5148|1|3|9|19|39|239|239|1239|6239|78|79|ZFAAAA|AQHAAA|AAAAxx
+3602|5149|0|2|2|2|2|602|1602|3602|3602|4|5|OIAAAA|BQHAAA|HHHHxx
+9830|5150|0|2|0|10|30|830|1830|4830|9830|60|61|COAAAA|CQHAAA|OOOOxx
+7826|5151|0|2|6|6|26|826|1826|2826|7826|52|53|APAAAA|DQHAAA|VVVVxx
+2108|5152|0|0|8|8|8|108|108|2108|2108|16|17|CDAAAA|EQHAAA|AAAAxx
+7245|5153|1|1|5|5|45|245|1245|2245|7245|90|91|RSAAAA|FQHAAA|HHHHxx
+8330|5154|0|2|0|10|30|330|330|3330|8330|60|61|KIAAAA|GQHAAA|OOOOxx
+7441|5155|1|1|1|1|41|441|1441|2441|7441|82|83|FAAAAA|HQHAAA|VVVVxx
+9848|5156|0|0|8|8|48|848|1848|4848|9848|96|97|UOAAAA|IQHAAA|AAAAxx
+1226|5157|0|2|6|6|26|226|1226|1226|1226|52|53|EVAAAA|JQHAAA|HHHHxx
+414|5158|0|2|4|14|14|414|414|414|414|28|29|YPAAAA|KQHAAA|OOOOxx
+1273|5159|1|1|3|13|73|273|1273|1273|1273|146|147|ZWAAAA|LQHAAA|VVVVxx
+9866|5160|0|2|6|6|66|866|1866|4866|9866|132|133|MPAAAA|MQHAAA|AAAAxx
+4633|5161|1|1|3|13|33|633|633|4633|4633|66|67|FWAAAA|NQHAAA|HHHHxx
+8727|5162|1|3|7|7|27|727|727|3727|8727|54|55|RXAAAA|OQHAAA|OOOOxx
+5308|5163|0|0|8|8|8|308|1308|308|5308|16|17|EWAAAA|PQHAAA|VVVVxx
+1395|5164|1|3|5|15|95|395|1395|1395|1395|190|191|RBAAAA|QQHAAA|AAAAxx
+1825|5165|1|1|5|5|25|825|1825|1825|1825|50|51|FSAAAA|RQHAAA|HHHHxx
+7606|5166|0|2|6|6|6|606|1606|2606|7606|12|13|OGAAAA|SQHAAA|OOOOxx
+9390|5167|0|2|0|10|90|390|1390|4390|9390|180|181|EXAAAA|TQHAAA|VVVVxx
+2376|5168|0|0|6|16|76|376|376|2376|2376|152|153|KNAAAA|UQHAAA|AAAAxx
+2377|5169|1|1|7|17|77|377|377|2377|2377|154|155|LNAAAA|VQHAAA|HHHHxx
+5346|5170|0|2|6|6|46|346|1346|346|5346|92|93|QXAAAA|WQHAAA|OOOOxx
+4140|5171|0|0|0|0|40|140|140|4140|4140|80|81|GDAAAA|XQHAAA|VVVVxx
+6032|5172|0|0|2|12|32|32|32|1032|6032|64|65|AYAAAA|YQHAAA|AAAAxx
+9453|5173|1|1|3|13|53|453|1453|4453|9453|106|107|PZAAAA|ZQHAAA|HHHHxx
+9297|5174|1|1|7|17|97|297|1297|4297|9297|194|195|PTAAAA|ARHAAA|OOOOxx
+6455|5175|1|3|5|15|55|455|455|1455|6455|110|111|HOAAAA|BRHAAA|VVVVxx
+4458|5176|0|2|8|18|58|458|458|4458|4458|116|117|MPAAAA|CRHAAA|AAAAxx
+9516|5177|0|0|6|16|16|516|1516|4516|9516|32|33|ACAAAA|DRHAAA|HHHHxx
+6211|5178|1|3|1|11|11|211|211|1211|6211|22|23|XEAAAA|ERHAAA|OOOOxx
+526|5179|0|2|6|6|26|526|526|526|526|52|53|GUAAAA|FRHAAA|VVVVxx
+3570|5180|0|2|0|10|70|570|1570|3570|3570|140|141|IHAAAA|GRHAAA|AAAAxx
+4885|5181|1|1|5|5|85|885|885|4885|4885|170|171|XFAAAA|HRHAAA|HHHHxx
+6390|5182|0|2|0|10|90|390|390|1390|6390|180|181|ULAAAA|IRHAAA|OOOOxx
+1606|5183|0|2|6|6|6|606|1606|1606|1606|12|13|UJAAAA|JRHAAA|VVVVxx
+7850|5184|0|2|0|10|50|850|1850|2850|7850|100|101|YPAAAA|KRHAAA|AAAAxx
+3315|5185|1|3|5|15|15|315|1315|3315|3315|30|31|NXAAAA|LRHAAA|HHHHxx
+8322|5186|0|2|2|2|22|322|322|3322|8322|44|45|CIAAAA|MRHAAA|OOOOxx
+3703|5187|1|3|3|3|3|703|1703|3703|3703|6|7|LMAAAA|NRHAAA|VVVVxx
+9489|5188|1|1|9|9|89|489|1489|4489|9489|178|179|ZAAAAA|ORHAAA|AAAAxx
+6104|5189|0|0|4|4|4|104|104|1104|6104|8|9|UAAAAA|PRHAAA|HHHHxx
+3067|5190|1|3|7|7|67|67|1067|3067|3067|134|135|ZNAAAA|QRHAAA|OOOOxx
+2521|5191|1|1|1|1|21|521|521|2521|2521|42|43|ZSAAAA|RRHAAA|VVVVxx
+2581|5192|1|1|1|1|81|581|581|2581|2581|162|163|HVAAAA|SRHAAA|AAAAxx
+595|5193|1|3|5|15|95|595|595|595|595|190|191|XWAAAA|TRHAAA|HHHHxx
+8291|5194|1|3|1|11|91|291|291|3291|8291|182|183|XGAAAA|URHAAA|OOOOxx
+1727|5195|1|3|7|7|27|727|1727|1727|1727|54|55|LOAAAA|VRHAAA|VVVVxx
+6847|5196|1|3|7|7|47|847|847|1847|6847|94|95|JDAAAA|WRHAAA|AAAAxx
+7494|5197|0|2|4|14|94|494|1494|2494|7494|188|189|GCAAAA|XRHAAA|HHHHxx
+7093|5198|1|1|3|13|93|93|1093|2093|7093|186|187|VMAAAA|YRHAAA|OOOOxx
+7357|5199|1|1|7|17|57|357|1357|2357|7357|114|115|ZWAAAA|ZRHAAA|VVVVxx
+620|5200|0|0|0|0|20|620|620|620|620|40|41|WXAAAA|ASHAAA|AAAAxx
+2460|5201|0|0|0|0|60|460|460|2460|2460|120|121|QQAAAA|BSHAAA|HHHHxx
+1598|5202|0|2|8|18|98|598|1598|1598|1598|196|197|MJAAAA|CSHAAA|OOOOxx
+4112|5203|0|0|2|12|12|112|112|4112|4112|24|25|ECAAAA|DSHAAA|VVVVxx
+2956|5204|0|0|6|16|56|956|956|2956|2956|112|113|SJAAAA|ESHAAA|AAAAxx
+3193|5205|1|1|3|13|93|193|1193|3193|3193|186|187|VSAAAA|FSHAAA|HHHHxx
+6356|5206|0|0|6|16|56|356|356|1356|6356|112|113|MKAAAA|GSHAAA|OOOOxx
+730|5207|0|2|0|10|30|730|730|730|730|60|61|CCAAAA|HSHAAA|VVVVxx
+8826|5208|0|2|6|6|26|826|826|3826|8826|52|53|MBAAAA|ISHAAA|AAAAxx
+9036|5209|0|0|6|16|36|36|1036|4036|9036|72|73|OJAAAA|JSHAAA|HHHHxx
+2085|5210|1|1|5|5|85|85|85|2085|2085|170|171|FCAAAA|KSHAAA|OOOOxx
+9007|5211|1|3|7|7|7|7|1007|4007|9007|14|15|LIAAAA|LSHAAA|VVVVxx
+6047|5212|1|3|7|7|47|47|47|1047|6047|94|95|PYAAAA|MSHAAA|AAAAxx
+3953|5213|1|1|3|13|53|953|1953|3953|3953|106|107|BWAAAA|NSHAAA|HHHHxx
+1214|5214|0|2|4|14|14|214|1214|1214|1214|28|29|SUAAAA|OSHAAA|OOOOxx
+4814|5215|0|2|4|14|14|814|814|4814|4814|28|29|EDAAAA|PSHAAA|VVVVxx
+5738|5216|0|2|8|18|38|738|1738|738|5738|76|77|SMAAAA|QSHAAA|AAAAxx
+7176|5217|0|0|6|16|76|176|1176|2176|7176|152|153|AQAAAA|RSHAAA|HHHHxx
+3609|5218|1|1|9|9|9|609|1609|3609|3609|18|19|VIAAAA|SSHAAA|OOOOxx
+592|5219|0|0|2|12|92|592|592|592|592|184|185|UWAAAA|TSHAAA|VVVVxx
+9391|5220|1|3|1|11|91|391|1391|4391|9391|182|183|FXAAAA|USHAAA|AAAAxx
+5345|5221|1|1|5|5|45|345|1345|345|5345|90|91|PXAAAA|VSHAAA|HHHHxx
+1171|5222|1|3|1|11|71|171|1171|1171|1171|142|143|BTAAAA|WSHAAA|OOOOxx
+7238|5223|0|2|8|18|38|238|1238|2238|7238|76|77|KSAAAA|XSHAAA|VVVVxx
+7561|5224|1|1|1|1|61|561|1561|2561|7561|122|123|VEAAAA|YSHAAA|AAAAxx
+5876|5225|0|0|6|16|76|876|1876|876|5876|152|153|ASAAAA|ZSHAAA|HHHHxx
+6611|5226|1|3|1|11|11|611|611|1611|6611|22|23|HUAAAA|ATHAAA|OOOOxx
+7300|5227|0|0|0|0|0|300|1300|2300|7300|0|1|UUAAAA|BTHAAA|VVVVxx
+1506|5228|0|2|6|6|6|506|1506|1506|1506|12|13|YFAAAA|CTHAAA|AAAAxx
+1153|5229|1|1|3|13|53|153|1153|1153|1153|106|107|JSAAAA|DTHAAA|HHHHxx
+3831|5230|1|3|1|11|31|831|1831|3831|3831|62|63|JRAAAA|ETHAAA|OOOOxx
+9255|5231|1|3|5|15|55|255|1255|4255|9255|110|111|ZRAAAA|FTHAAA|VVVVxx
+1841|5232|1|1|1|1|41|841|1841|1841|1841|82|83|VSAAAA|GTHAAA|AAAAxx
+5075|5233|1|3|5|15|75|75|1075|75|5075|150|151|FNAAAA|HTHAAA|HHHHxx
+101|5234|1|1|1|1|1|101|101|101|101|2|3|XDAAAA|ITHAAA|OOOOxx
+2627|5235|1|3|7|7|27|627|627|2627|2627|54|55|BXAAAA|JTHAAA|VVVVxx
+7078|5236|0|2|8|18|78|78|1078|2078|7078|156|157|GMAAAA|KTHAAA|AAAAxx
+2850|5237|0|2|0|10|50|850|850|2850|2850|100|101|QFAAAA|LTHAAA|HHHHxx
+8703|5238|1|3|3|3|3|703|703|3703|8703|6|7|TWAAAA|MTHAAA|OOOOxx
+4101|5239|1|1|1|1|1|101|101|4101|4101|2|3|TBAAAA|NTHAAA|VVVVxx
+318|5240|0|2|8|18|18|318|318|318|318|36|37|GMAAAA|OTHAAA|AAAAxx
+6452|5241|0|0|2|12|52|452|452|1452|6452|104|105|EOAAAA|PTHAAA|HHHHxx
+5558|5242|0|2|8|18|58|558|1558|558|5558|116|117|UFAAAA|QTHAAA|OOOOxx
+3127|5243|1|3|7|7|27|127|1127|3127|3127|54|55|HQAAAA|RTHAAA|VVVVxx
+535|5244|1|3|5|15|35|535|535|535|535|70|71|PUAAAA|STHAAA|AAAAxx
+270|5245|0|2|0|10|70|270|270|270|270|140|141|KKAAAA|TTHAAA|HHHHxx
+4038|5246|0|2|8|18|38|38|38|4038|4038|76|77|IZAAAA|UTHAAA|OOOOxx
+3404|5247|0|0|4|4|4|404|1404|3404|3404|8|9|YAAAAA|VTHAAA|VVVVxx
+2374|5248|0|2|4|14|74|374|374|2374|2374|148|149|INAAAA|WTHAAA|AAAAxx
+6446|5249|0|2|6|6|46|446|446|1446|6446|92|93|YNAAAA|XTHAAA|HHHHxx
+7758|5250|0|2|8|18|58|758|1758|2758|7758|116|117|KMAAAA|YTHAAA|OOOOxx
+356|5251|0|0|6|16|56|356|356|356|356|112|113|SNAAAA|ZTHAAA|VVVVxx
+9197|5252|1|1|7|17|97|197|1197|4197|9197|194|195|TPAAAA|AUHAAA|AAAAxx
+9765|5253|1|1|5|5|65|765|1765|4765|9765|130|131|PLAAAA|BUHAAA|HHHHxx
+4974|5254|0|2|4|14|74|974|974|4974|4974|148|149|IJAAAA|CUHAAA|OOOOxx
+442|5255|0|2|2|2|42|442|442|442|442|84|85|ARAAAA|DUHAAA|VVVVxx
+4349|5256|1|1|9|9|49|349|349|4349|4349|98|99|HLAAAA|EUHAAA|AAAAxx
+6119|5257|1|3|9|19|19|119|119|1119|6119|38|39|JBAAAA|FUHAAA|HHHHxx
+7574|5258|0|2|4|14|74|574|1574|2574|7574|148|149|IFAAAA|GUHAAA|OOOOxx
+4445|5259|1|1|5|5|45|445|445|4445|4445|90|91|ZOAAAA|HUHAAA|VVVVxx
+940|5260|0|0|0|0|40|940|940|940|940|80|81|EKAAAA|IUHAAA|AAAAxx
+1875|5261|1|3|5|15|75|875|1875|1875|1875|150|151|DUAAAA|JUHAAA|HHHHxx
+5951|5262|1|3|1|11|51|951|1951|951|5951|102|103|XUAAAA|KUHAAA|OOOOxx
+9132|5263|0|0|2|12|32|132|1132|4132|9132|64|65|GNAAAA|LUHAAA|VVVVxx
+6913|5264|1|1|3|13|13|913|913|1913|6913|26|27|XFAAAA|MUHAAA|AAAAxx
+3308|5265|0|0|8|8|8|308|1308|3308|3308|16|17|GXAAAA|NUHAAA|HHHHxx
+7553|5266|1|1|3|13|53|553|1553|2553|7553|106|107|NEAAAA|OUHAAA|OOOOxx
+2138|5267|0|2|8|18|38|138|138|2138|2138|76|77|GEAAAA|PUHAAA|VVVVxx
+6252|5268|0|0|2|12|52|252|252|1252|6252|104|105|MGAAAA|QUHAAA|AAAAxx
+2171|5269|1|3|1|11|71|171|171|2171|2171|142|143|NFAAAA|RUHAAA|HHHHxx
+4159|5270|1|3|9|19|59|159|159|4159|4159|118|119|ZDAAAA|SUHAAA|OOOOxx
+2401|5271|1|1|1|1|1|401|401|2401|2401|2|3|JOAAAA|TUHAAA|VVVVxx
+6553|5272|1|1|3|13|53|553|553|1553|6553|106|107|BSAAAA|UUHAAA|AAAAxx
+5217|5273|1|1|7|17|17|217|1217|217|5217|34|35|RSAAAA|VUHAAA|HHHHxx
+1405|5274|1|1|5|5|5|405|1405|1405|1405|10|11|BCAAAA|WUHAAA|OOOOxx
+1494|5275|0|2|4|14|94|494|1494|1494|1494|188|189|MFAAAA|XUHAAA|VVVVxx
+5553|5276|1|1|3|13|53|553|1553|553|5553|106|107|PFAAAA|YUHAAA|AAAAxx
+8296|5277|0|0|6|16|96|296|296|3296|8296|192|193|CHAAAA|ZUHAAA|HHHHxx
+6565|5278|1|1|5|5|65|565|565|1565|6565|130|131|NSAAAA|AVHAAA|OOOOxx
+817|5279|1|1|7|17|17|817|817|817|817|34|35|LFAAAA|BVHAAA|VVVVxx
+6947|5280|1|3|7|7|47|947|947|1947|6947|94|95|FHAAAA|CVHAAA|AAAAxx
+4184|5281|0|0|4|4|84|184|184|4184|4184|168|169|YEAAAA|DVHAAA|HHHHxx
+6577|5282|1|1|7|17|77|577|577|1577|6577|154|155|ZSAAAA|EVHAAA|OOOOxx
+6424|5283|0|0|4|4|24|424|424|1424|6424|48|49|CNAAAA|FVHAAA|VVVVxx
+2482|5284|0|2|2|2|82|482|482|2482|2482|164|165|MRAAAA|GVHAAA|AAAAxx
+6874|5285|0|2|4|14|74|874|874|1874|6874|148|149|KEAAAA|HVHAAA|HHHHxx
+7601|5286|1|1|1|1|1|601|1601|2601|7601|2|3|JGAAAA|IVHAAA|OOOOxx
+4552|5287|0|0|2|12|52|552|552|4552|4552|104|105|CTAAAA|JVHAAA|VVVVxx
+8406|5288|0|2|6|6|6|406|406|3406|8406|12|13|ILAAAA|KVHAAA|AAAAxx
+2924|5289|0|0|4|4|24|924|924|2924|2924|48|49|MIAAAA|LVHAAA|HHHHxx
+8255|5290|1|3|5|15|55|255|255|3255|8255|110|111|NFAAAA|MVHAAA|OOOOxx
+4920|5291|0|0|0|0|20|920|920|4920|4920|40|41|GHAAAA|NVHAAA|VVVVxx
+228|5292|0|0|8|8|28|228|228|228|228|56|57|UIAAAA|OVHAAA|AAAAxx
+9431|5293|1|3|1|11|31|431|1431|4431|9431|62|63|TYAAAA|PVHAAA|HHHHxx
+4021|5294|1|1|1|1|21|21|21|4021|4021|42|43|RYAAAA|QVHAAA|OOOOxx
+2966|5295|0|2|6|6|66|966|966|2966|2966|132|133|CKAAAA|RVHAAA|VVVVxx
+2862|5296|0|2|2|2|62|862|862|2862|2862|124|125|CGAAAA|SVHAAA|AAAAxx
+4303|5297|1|3|3|3|3|303|303|4303|4303|6|7|NJAAAA|TVHAAA|HHHHxx
+9643|5298|1|3|3|3|43|643|1643|4643|9643|86|87|XGAAAA|UVHAAA|OOOOxx
+3008|5299|0|0|8|8|8|8|1008|3008|3008|16|17|SLAAAA|VVHAAA|VVVVxx
+7476|5300|0|0|6|16|76|476|1476|2476|7476|152|153|OBAAAA|WVHAAA|AAAAxx
+3686|5301|0|2|6|6|86|686|1686|3686|3686|172|173|ULAAAA|XVHAAA|HHHHxx
+9051|5302|1|3|1|11|51|51|1051|4051|9051|102|103|DKAAAA|YVHAAA|OOOOxx
+6592|5303|0|0|2|12|92|592|592|1592|6592|184|185|OTAAAA|ZVHAAA|VVVVxx
+924|5304|0|0|4|4|24|924|924|924|924|48|49|OJAAAA|AWHAAA|AAAAxx
+4406|5305|0|2|6|6|6|406|406|4406|4406|12|13|MNAAAA|BWHAAA|HHHHxx
+5233|5306|1|1|3|13|33|233|1233|233|5233|66|67|HTAAAA|CWHAAA|OOOOxx
+8881|5307|1|1|1|1|81|881|881|3881|8881|162|163|PDAAAA|DWHAAA|VVVVxx
+2212|5308|0|0|2|12|12|212|212|2212|2212|24|25|CHAAAA|EWHAAA|AAAAxx
+5804|5309|0|0|4|4|4|804|1804|804|5804|8|9|GPAAAA|FWHAAA|HHHHxx
+2990|5310|0|2|0|10|90|990|990|2990|2990|180|181|ALAAAA|GWHAAA|OOOOxx
+4069|5311|1|1|9|9|69|69|69|4069|4069|138|139|NAAAAA|HWHAAA|VVVVxx
+5380|5312|0|0|0|0|80|380|1380|380|5380|160|161|YYAAAA|IWHAAA|AAAAxx
+5016|5313|0|0|6|16|16|16|1016|16|5016|32|33|YKAAAA|JWHAAA|HHHHxx
+5056|5314|0|0|6|16|56|56|1056|56|5056|112|113|MMAAAA|KWHAAA|OOOOxx
+3732|5315|0|0|2|12|32|732|1732|3732|3732|64|65|ONAAAA|LWHAAA|VVVVxx
+5527|5316|1|3|7|7|27|527|1527|527|5527|54|55|PEAAAA|MWHAAA|AAAAxx
+1151|5317|1|3|1|11|51|151|1151|1151|1151|102|103|HSAAAA|NWHAAA|HHHHxx
+7900|5318|0|0|0|0|0|900|1900|2900|7900|0|1|WRAAAA|OWHAAA|OOOOxx
+1660|5319|0|0|0|0|60|660|1660|1660|1660|120|121|WLAAAA|PWHAAA|VVVVxx
+8064|5320|0|0|4|4|64|64|64|3064|8064|128|129|EYAAAA|QWHAAA|AAAAxx
+8240|5321|0|0|0|0|40|240|240|3240|8240|80|81|YEAAAA|RWHAAA|HHHHxx
+413|5322|1|1|3|13|13|413|413|413|413|26|27|XPAAAA|SWHAAA|OOOOxx
+8311|5323|1|3|1|11|11|311|311|3311|8311|22|23|RHAAAA|TWHAAA|VVVVxx
+1065|5324|1|1|5|5|65|65|1065|1065|1065|130|131|ZOAAAA|UWHAAA|AAAAxx
+2741|5325|1|1|1|1|41|741|741|2741|2741|82|83|LBAAAA|VWHAAA|HHHHxx
+5306|5326|0|2|6|6|6|306|1306|306|5306|12|13|CWAAAA|WWHAAA|OOOOxx
+5464|5327|0|0|4|4|64|464|1464|464|5464|128|129|ECAAAA|XWHAAA|VVVVxx
+4237|5328|1|1|7|17|37|237|237|4237|4237|74|75|ZGAAAA|YWHAAA|AAAAxx
+3822|5329|0|2|2|2|22|822|1822|3822|3822|44|45|ARAAAA|ZWHAAA|HHHHxx
+2548|5330|0|0|8|8|48|548|548|2548|2548|96|97|AUAAAA|AXHAAA|OOOOxx
+2688|5331|0|0|8|8|88|688|688|2688|2688|176|177|KZAAAA|BXHAAA|VVVVxx
+8061|5332|1|1|1|1|61|61|61|3061|8061|122|123|BYAAAA|CXHAAA|AAAAxx
+9340|5333|0|0|0|0|40|340|1340|4340|9340|80|81|GVAAAA|DXHAAA|HHHHxx
+4031|5334|1|3|1|11|31|31|31|4031|4031|62|63|BZAAAA|EXHAAA|OOOOxx
+2635|5335|1|3|5|15|35|635|635|2635|2635|70|71|JXAAAA|FXHAAA|VVVVxx
+809|5336|1|1|9|9|9|809|809|809|809|18|19|DFAAAA|GXHAAA|AAAAxx
+3209|5337|1|1|9|9|9|209|1209|3209|3209|18|19|LTAAAA|HXHAAA|HHHHxx
+3825|5338|1|1|5|5|25|825|1825|3825|3825|50|51|DRAAAA|IXHAAA|OOOOxx
+1448|5339|0|0|8|8|48|448|1448|1448|1448|96|97|SDAAAA|JXHAAA|VVVVxx
+9077|5340|1|1|7|17|77|77|1077|4077|9077|154|155|DLAAAA|KXHAAA|AAAAxx
+3730|5341|0|2|0|10|30|730|1730|3730|3730|60|61|MNAAAA|LXHAAA|HHHHxx
+9596|5342|0|0|6|16|96|596|1596|4596|9596|192|193|CFAAAA|MXHAAA|OOOOxx
+3563|5343|1|3|3|3|63|563|1563|3563|3563|126|127|BHAAAA|NXHAAA|VVVVxx
+4116|5344|0|0|6|16|16|116|116|4116|4116|32|33|ICAAAA|OXHAAA|AAAAxx
+4825|5345|1|1|5|5|25|825|825|4825|4825|50|51|PDAAAA|PXHAAA|HHHHxx
+8376|5346|0|0|6|16|76|376|376|3376|8376|152|153|EKAAAA|QXHAAA|OOOOxx
+3917|5347|1|1|7|17|17|917|1917|3917|3917|34|35|RUAAAA|RXHAAA|VVVVxx
+4407|5348|1|3|7|7|7|407|407|4407|4407|14|15|NNAAAA|SXHAAA|AAAAxx
+8202|5349|0|2|2|2|2|202|202|3202|8202|4|5|MDAAAA|TXHAAA|HHHHxx
+7675|5350|1|3|5|15|75|675|1675|2675|7675|150|151|FJAAAA|UXHAAA|OOOOxx
+4104|5351|0|0|4|4|4|104|104|4104|4104|8|9|WBAAAA|VXHAAA|VVVVxx
+9225|5352|1|1|5|5|25|225|1225|4225|9225|50|51|VQAAAA|WXHAAA|AAAAxx
+2834|5353|0|2|4|14|34|834|834|2834|2834|68|69|AFAAAA|XXHAAA|HHHHxx
+1227|5354|1|3|7|7|27|227|1227|1227|1227|54|55|FVAAAA|YXHAAA|OOOOxx
+3383|5355|1|3|3|3|83|383|1383|3383|3383|166|167|DAAAAA|ZXHAAA|VVVVxx
+67|5356|1|3|7|7|67|67|67|67|67|134|135|PCAAAA|AYHAAA|AAAAxx
+1751|5357|1|3|1|11|51|751|1751|1751|1751|102|103|JPAAAA|BYHAAA|HHHHxx
+8054|5358|0|2|4|14|54|54|54|3054|8054|108|109|UXAAAA|CYHAAA|OOOOxx
+8571|5359|1|3|1|11|71|571|571|3571|8571|142|143|RRAAAA|DYHAAA|VVVVxx
+2466|5360|0|2|6|6|66|466|466|2466|2466|132|133|WQAAAA|EYHAAA|AAAAxx
+9405|5361|1|1|5|5|5|405|1405|4405|9405|10|11|TXAAAA|FYHAAA|HHHHxx
+6883|5362|1|3|3|3|83|883|883|1883|6883|166|167|TEAAAA|GYHAAA|OOOOxx
+4301|5363|1|1|1|1|1|301|301|4301|4301|2|3|LJAAAA|HYHAAA|VVVVxx
+3705|5364|1|1|5|5|5|705|1705|3705|3705|10|11|NMAAAA|IYHAAA|AAAAxx
+5420|5365|0|0|0|0|20|420|1420|420|5420|40|41|MAAAAA|JYHAAA|HHHHxx
+3692|5366|0|0|2|12|92|692|1692|3692|3692|184|185|AMAAAA|KYHAAA|OOOOxx
+6851|5367|1|3|1|11|51|851|851|1851|6851|102|103|NDAAAA|LYHAAA|VVVVxx
+9363|5368|1|3|3|3|63|363|1363|4363|9363|126|127|DWAAAA|MYHAAA|AAAAxx
+2269|5369|1|1|9|9|69|269|269|2269|2269|138|139|HJAAAA|NYHAAA|HHHHxx
+4918|5370|0|2|8|18|18|918|918|4918|4918|36|37|EHAAAA|OYHAAA|OOOOxx
+4297|5371|1|1|7|17|97|297|297|4297|4297|194|195|HJAAAA|PYHAAA|VVVVxx
+1836|5372|0|0|6|16|36|836|1836|1836|1836|72|73|QSAAAA|QYHAAA|AAAAxx
+237|5373|1|1|7|17|37|237|237|237|237|74|75|DJAAAA|RYHAAA|HHHHxx
+6131|5374|1|3|1|11|31|131|131|1131|6131|62|63|VBAAAA|SYHAAA|OOOOxx
+3174|5375|0|2|4|14|74|174|1174|3174|3174|148|149|CSAAAA|TYHAAA|VVVVxx
+9987|5376|1|3|7|7|87|987|1987|4987|9987|174|175|DUAAAA|UYHAAA|AAAAxx
+3630|5377|0|2|0|10|30|630|1630|3630|3630|60|61|QJAAAA|VYHAAA|HHHHxx
+2899|5378|1|3|9|19|99|899|899|2899|2899|198|199|NHAAAA|WYHAAA|OOOOxx
+4079|5379|1|3|9|19|79|79|79|4079|4079|158|159|XAAAAA|XYHAAA|VVVVxx
+5049|5380|1|1|9|9|49|49|1049|49|5049|98|99|FMAAAA|YYHAAA|AAAAxx
+2963|5381|1|3|3|3|63|963|963|2963|2963|126|127|ZJAAAA|ZYHAAA|HHHHxx
+3962|5382|0|2|2|2|62|962|1962|3962|3962|124|125|KWAAAA|AZHAAA|OOOOxx
+7921|5383|1|1|1|1|21|921|1921|2921|7921|42|43|RSAAAA|BZHAAA|VVVVxx
+3967|5384|1|3|7|7|67|967|1967|3967|3967|134|135|PWAAAA|CZHAAA|AAAAxx
+2752|5385|0|0|2|12|52|752|752|2752|2752|104|105|WBAAAA|DZHAAA|HHHHxx
+7944|5386|0|0|4|4|44|944|1944|2944|7944|88|89|OTAAAA|EZHAAA|OOOOxx
+2205|5387|1|1|5|5|5|205|205|2205|2205|10|11|VGAAAA|FZHAAA|VVVVxx
+5035|5388|1|3|5|15|35|35|1035|35|5035|70|71|RLAAAA|GZHAAA|AAAAxx
+1425|5389|1|1|5|5|25|425|1425|1425|1425|50|51|VCAAAA|HZHAAA|HHHHxx
+832|5390|0|0|2|12|32|832|832|832|832|64|65|AGAAAA|IZHAAA|OOOOxx
+1447|5391|1|3|7|7|47|447|1447|1447|1447|94|95|RDAAAA|JZHAAA|VVVVxx
+6108|5392|0|0|8|8|8|108|108|1108|6108|16|17|YAAAAA|KZHAAA|AAAAxx
+4936|5393|0|0|6|16|36|936|936|4936|4936|72|73|WHAAAA|LZHAAA|HHHHxx
+7704|5394|0|0|4|4|4|704|1704|2704|7704|8|9|IKAAAA|MZHAAA|OOOOxx
+142|5395|0|2|2|2|42|142|142|142|142|84|85|MFAAAA|NZHAAA|VVVVxx
+4272|5396|0|0|2|12|72|272|272|4272|4272|144|145|IIAAAA|OZHAAA|AAAAxx
+7667|5397|1|3|7|7|67|667|1667|2667|7667|134|135|XIAAAA|PZHAAA|HHHHxx
+366|5398|0|2|6|6|66|366|366|366|366|132|133|COAAAA|QZHAAA|OOOOxx
+8866|5399|0|2|6|6|66|866|866|3866|8866|132|133|ADAAAA|RZHAAA|VVVVxx
+7712|5400|0|0|2|12|12|712|1712|2712|7712|24|25|QKAAAA|SZHAAA|AAAAxx
+3880|5401|0|0|0|0|80|880|1880|3880|3880|160|161|GTAAAA|TZHAAA|HHHHxx
+4631|5402|1|3|1|11|31|631|631|4631|4631|62|63|DWAAAA|UZHAAA|OOOOxx
+2789|5403|1|1|9|9|89|789|789|2789|2789|178|179|HDAAAA|VZHAAA|VVVVxx
+7720|5404|0|0|0|0|20|720|1720|2720|7720|40|41|YKAAAA|WZHAAA|AAAAxx
+7618|5405|0|2|8|18|18|618|1618|2618|7618|36|37|AHAAAA|XZHAAA|HHHHxx
+4990|5406|0|2|0|10|90|990|990|4990|4990|180|181|YJAAAA|YZHAAA|OOOOxx
+7918|5407|0|2|8|18|18|918|1918|2918|7918|36|37|OSAAAA|ZZHAAA|VVVVxx
+5067|5408|1|3|7|7|67|67|1067|67|5067|134|135|XMAAAA|AAIAAA|AAAAxx
+6370|5409|0|2|0|10|70|370|370|1370|6370|140|141|ALAAAA|BAIAAA|HHHHxx
+2268|5410|0|0|8|8|68|268|268|2268|2268|136|137|GJAAAA|CAIAAA|OOOOxx
+1949|5411|1|1|9|9|49|949|1949|1949|1949|98|99|ZWAAAA|DAIAAA|VVVVxx
+5503|5412|1|3|3|3|3|503|1503|503|5503|6|7|RDAAAA|EAIAAA|AAAAxx
+9951|5413|1|3|1|11|51|951|1951|4951|9951|102|103|TSAAAA|FAIAAA|HHHHxx
+6823|5414|1|3|3|3|23|823|823|1823|6823|46|47|LCAAAA|GAIAAA|OOOOxx
+6287|5415|1|3|7|7|87|287|287|1287|6287|174|175|VHAAAA|HAIAAA|VVVVxx
+6016|5416|0|0|6|16|16|16|16|1016|6016|32|33|KXAAAA|IAIAAA|AAAAxx
+1977|5417|1|1|7|17|77|977|1977|1977|1977|154|155|BYAAAA|JAIAAA|HHHHxx
+8579|5418|1|3|9|19|79|579|579|3579|8579|158|159|ZRAAAA|KAIAAA|OOOOxx
+6204|5419|0|0|4|4|4|204|204|1204|6204|8|9|QEAAAA|LAIAAA|VVVVxx
+9764|5420|0|0|4|4|64|764|1764|4764|9764|128|129|OLAAAA|MAIAAA|AAAAxx
+2005|5421|1|1|5|5|5|5|5|2005|2005|10|11|DZAAAA|NAIAAA|HHHHxx
+1648|5422|0|0|8|8|48|648|1648|1648|1648|96|97|KLAAAA|OAIAAA|OOOOxx
+2457|5423|1|1|7|17|57|457|457|2457|2457|114|115|NQAAAA|PAIAAA|VVVVxx
+2698|5424|0|2|8|18|98|698|698|2698|2698|196|197|UZAAAA|QAIAAA|AAAAxx
+7730|5425|0|2|0|10|30|730|1730|2730|7730|60|61|ILAAAA|RAIAAA|HHHHxx
+7287|5426|1|3|7|7|87|287|1287|2287|7287|174|175|HUAAAA|SAIAAA|OOOOxx
+2937|5427|1|1|7|17|37|937|937|2937|2937|74|75|ZIAAAA|TAIAAA|VVVVxx
+6824|5428|0|0|4|4|24|824|824|1824|6824|48|49|MCAAAA|UAIAAA|AAAAxx
+9256|5429|0|0|6|16|56|256|1256|4256|9256|112|113|ASAAAA|VAIAAA|HHHHxx
+4810|5430|0|2|0|10|10|810|810|4810|4810|20|21|ADAAAA|WAIAAA|OOOOxx
+3869|5431|1|1|9|9|69|869|1869|3869|3869|138|139|VSAAAA|XAIAAA|VVVVxx
+1993|5432|1|1|3|13|93|993|1993|1993|1993|186|187|RYAAAA|YAIAAA|AAAAxx
+6048|5433|0|0|8|8|48|48|48|1048|6048|96|97|QYAAAA|ZAIAAA|HHHHxx
+6922|5434|0|2|2|2|22|922|922|1922|6922|44|45|GGAAAA|ABIAAA|OOOOxx
+8|5435|0|0|8|8|8|8|8|8|8|16|17|IAAAAA|BBIAAA|VVVVxx
+6706|5436|0|2|6|6|6|706|706|1706|6706|12|13|YXAAAA|CBIAAA|AAAAxx
+9159|5437|1|3|9|19|59|159|1159|4159|9159|118|119|HOAAAA|DBIAAA|HHHHxx
+7020|5438|0|0|0|0|20|20|1020|2020|7020|40|41|AKAAAA|EBIAAA|OOOOxx
+767|5439|1|3|7|7|67|767|767|767|767|134|135|NDAAAA|FBIAAA|VVVVxx
+8602|5440|0|2|2|2|2|602|602|3602|8602|4|5|WSAAAA|GBIAAA|AAAAxx
+4442|5441|0|2|2|2|42|442|442|4442|4442|84|85|WOAAAA|HBIAAA|HHHHxx
+2040|5442|0|0|0|0|40|40|40|2040|2040|80|81|MAAAAA|IBIAAA|OOOOxx
+5493|5443|1|1|3|13|93|493|1493|493|5493|186|187|HDAAAA|JBIAAA|VVVVxx
+275|5444|1|3|5|15|75|275|275|275|275|150|151|PKAAAA|KBIAAA|AAAAxx
+8876|5445|0|0|6|16|76|876|876|3876|8876|152|153|KDAAAA|LBIAAA|HHHHxx
+7381|5446|1|1|1|1|81|381|1381|2381|7381|162|163|XXAAAA|MBIAAA|OOOOxx
+1827|5447|1|3|7|7|27|827|1827|1827|1827|54|55|HSAAAA|NBIAAA|VVVVxx
+3537|5448|1|1|7|17|37|537|1537|3537|3537|74|75|BGAAAA|OBIAAA|AAAAxx
+6978|5449|0|2|8|18|78|978|978|1978|6978|156|157|KIAAAA|PBIAAA|HHHHxx
+6160|5450|0|0|0|0|60|160|160|1160|6160|120|121|YCAAAA|QBIAAA|OOOOxx
+9219|5451|1|3|9|19|19|219|1219|4219|9219|38|39|PQAAAA|RBIAAA|VVVVxx
+5034|5452|0|2|4|14|34|34|1034|34|5034|68|69|QLAAAA|SBIAAA|AAAAxx
+8463|5453|1|3|3|3|63|463|463|3463|8463|126|127|NNAAAA|TBIAAA|HHHHxx
+2038|5454|0|2|8|18|38|38|38|2038|2038|76|77|KAAAAA|UBIAAA|OOOOxx
+9562|5455|0|2|2|2|62|562|1562|4562|9562|124|125|UDAAAA|VBIAAA|VVVVxx
+2687|5456|1|3|7|7|87|687|687|2687|2687|174|175|JZAAAA|WBIAAA|AAAAxx
+5092|5457|0|0|2|12|92|92|1092|92|5092|184|185|WNAAAA|XBIAAA|HHHHxx
+539|5458|1|3|9|19|39|539|539|539|539|78|79|TUAAAA|YBIAAA|OOOOxx
+2139|5459|1|3|9|19|39|139|139|2139|2139|78|79|HEAAAA|ZBIAAA|VVVVxx
+9221|5460|1|1|1|1|21|221|1221|4221|9221|42|43|RQAAAA|ACIAAA|AAAAxx
+965|5461|1|1|5|5|65|965|965|965|965|130|131|DLAAAA|BCIAAA|HHHHxx
+6051|5462|1|3|1|11|51|51|51|1051|6051|102|103|TYAAAA|CCIAAA|OOOOxx
+5822|5463|0|2|2|2|22|822|1822|822|5822|44|45|YPAAAA|DCIAAA|VVVVxx
+6397|5464|1|1|7|17|97|397|397|1397|6397|194|195|BMAAAA|ECIAAA|AAAAxx
+2375|5465|1|3|5|15|75|375|375|2375|2375|150|151|JNAAAA|FCIAAA|HHHHxx
+9415|5466|1|3|5|15|15|415|1415|4415|9415|30|31|DYAAAA|GCIAAA|OOOOxx
+6552|5467|0|0|2|12|52|552|552|1552|6552|104|105|ASAAAA|HCIAAA|VVVVxx
+2248|5468|0|0|8|8|48|248|248|2248|2248|96|97|MIAAAA|ICIAAA|AAAAxx
+2611|5469|1|3|1|11|11|611|611|2611|2611|22|23|LWAAAA|JCIAAA|HHHHxx
+9609|5470|1|1|9|9|9|609|1609|4609|9609|18|19|PFAAAA|KCIAAA|OOOOxx
+2132|5471|0|0|2|12|32|132|132|2132|2132|64|65|AEAAAA|LCIAAA|VVVVxx
+8452|5472|0|0|2|12|52|452|452|3452|8452|104|105|CNAAAA|MCIAAA|AAAAxx
+9407|5473|1|3|7|7|7|407|1407|4407|9407|14|15|VXAAAA|NCIAAA|HHHHxx
+2814|5474|0|2|4|14|14|814|814|2814|2814|28|29|GEAAAA|OCIAAA|OOOOxx
+1889|5475|1|1|9|9|89|889|1889|1889|1889|178|179|RUAAAA|PCIAAA|VVVVxx
+7489|5476|1|1|9|9|89|489|1489|2489|7489|178|179|BCAAAA|QCIAAA|AAAAxx
+2255|5477|1|3|5|15|55|255|255|2255|2255|110|111|TIAAAA|RCIAAA|HHHHxx
+3380|5478|0|0|0|0|80|380|1380|3380|3380|160|161|AAAAAA|SCIAAA|OOOOxx
+1167|5479|1|3|7|7|67|167|1167|1167|1167|134|135|XSAAAA|TCIAAA|VVVVxx
+5369|5480|1|1|9|9|69|369|1369|369|5369|138|139|NYAAAA|UCIAAA|AAAAxx
+2378|5481|0|2|8|18|78|378|378|2378|2378|156|157|MNAAAA|VCIAAA|HHHHxx
+8315|5482|1|3|5|15|15|315|315|3315|8315|30|31|VHAAAA|WCIAAA|OOOOxx
+2934|5483|0|2|4|14|34|934|934|2934|2934|68|69|WIAAAA|XCIAAA|VVVVxx
+7924|5484|0|0|4|4|24|924|1924|2924|7924|48|49|USAAAA|YCIAAA|AAAAxx
+2867|5485|1|3|7|7|67|867|867|2867|2867|134|135|HGAAAA|ZCIAAA|HHHHxx
+9141|5486|1|1|1|1|41|141|1141|4141|9141|82|83|PNAAAA|ADIAAA|OOOOxx
+3613|5487|1|1|3|13|13|613|1613|3613|3613|26|27|ZIAAAA|BDIAAA|VVVVxx
+2461|5488|1|1|1|1|61|461|461|2461|2461|122|123|RQAAAA|CDIAAA|AAAAxx
+4567|5489|1|3|7|7|67|567|567|4567|4567|134|135|RTAAAA|DDIAAA|HHHHxx
+2906|5490|0|2|6|6|6|906|906|2906|2906|12|13|UHAAAA|EDIAAA|OOOOxx
+4848|5491|0|0|8|8|48|848|848|4848|4848|96|97|MEAAAA|FDIAAA|VVVVxx
+6614|5492|0|2|4|14|14|614|614|1614|6614|28|29|KUAAAA|GDIAAA|AAAAxx
+6200|5493|0|0|0|0|0|200|200|1200|6200|0|1|MEAAAA|HDIAAA|HHHHxx
+7895|5494|1|3|5|15|95|895|1895|2895|7895|190|191|RRAAAA|IDIAAA|OOOOxx
+6829|5495|1|1|9|9|29|829|829|1829|6829|58|59|RCAAAA|JDIAAA|VVVVxx
+4087|5496|1|3|7|7|87|87|87|4087|4087|174|175|FBAAAA|KDIAAA|AAAAxx
+8787|5497|1|3|7|7|87|787|787|3787|8787|174|175|ZZAAAA|LDIAAA|HHHHxx
+3322|5498|0|2|2|2|22|322|1322|3322|3322|44|45|UXAAAA|MDIAAA|OOOOxx
+9091|5499|1|3|1|11|91|91|1091|4091|9091|182|183|RLAAAA|NDIAAA|VVVVxx
+5268|5500|0|0|8|8|68|268|1268|268|5268|136|137|QUAAAA|ODIAAA|AAAAxx
+2719|5501|1|3|9|19|19|719|719|2719|2719|38|39|PAAAAA|PDIAAA|HHHHxx
+30|5502|0|2|0|10|30|30|30|30|30|60|61|EBAAAA|QDIAAA|OOOOxx
+1975|5503|1|3|5|15|75|975|1975|1975|1975|150|151|ZXAAAA|RDIAAA|VVVVxx
+2641|5504|1|1|1|1|41|641|641|2641|2641|82|83|PXAAAA|SDIAAA|AAAAxx
+8616|5505|0|0|6|16|16|616|616|3616|8616|32|33|KTAAAA|TDIAAA|HHHHxx
+5980|5506|0|0|0|0|80|980|1980|980|5980|160|161|AWAAAA|UDIAAA|OOOOxx
+5170|5507|0|2|0|10|70|170|1170|170|5170|140|141|WQAAAA|VDIAAA|VVVVxx
+1960|5508|0|0|0|0|60|960|1960|1960|1960|120|121|KXAAAA|WDIAAA|AAAAxx
+8141|5509|1|1|1|1|41|141|141|3141|8141|82|83|DBAAAA|XDIAAA|HHHHxx
+6692|5510|0|0|2|12|92|692|692|1692|6692|184|185|KXAAAA|YDIAAA|OOOOxx
+7621|5511|1|1|1|1|21|621|1621|2621|7621|42|43|DHAAAA|ZDIAAA|VVVVxx
+3890|5512|0|2|0|10|90|890|1890|3890|3890|180|181|QTAAAA|AEIAAA|AAAAxx
+4300|5513|0|0|0|0|0|300|300|4300|4300|0|1|KJAAAA|BEIAAA|HHHHxx
+736|5514|0|0|6|16|36|736|736|736|736|72|73|ICAAAA|CEIAAA|OOOOxx
+6626|5515|0|2|6|6|26|626|626|1626|6626|52|53|WUAAAA|DEIAAA|VVVVxx
+1800|5516|0|0|0|0|0|800|1800|1800|1800|0|1|GRAAAA|EEIAAA|AAAAxx
+3430|5517|0|2|0|10|30|430|1430|3430|3430|60|61|YBAAAA|FEIAAA|HHHHxx
+9519|5518|1|3|9|19|19|519|1519|4519|9519|38|39|DCAAAA|GEIAAA|OOOOxx
+5111|5519|1|3|1|11|11|111|1111|111|5111|22|23|POAAAA|HEIAAA|VVVVxx
+6915|5520|1|3|5|15|15|915|915|1915|6915|30|31|ZFAAAA|IEIAAA|AAAAxx
+9246|5521|0|2|6|6|46|246|1246|4246|9246|92|93|QRAAAA|JEIAAA|HHHHxx
+5141|5522|1|1|1|1|41|141|1141|141|5141|82|83|TPAAAA|KEIAAA|OOOOxx
+5922|5523|0|2|2|2|22|922|1922|922|5922|44|45|UTAAAA|LEIAAA|VVVVxx
+3087|5524|1|3|7|7|87|87|1087|3087|3087|174|175|TOAAAA|MEIAAA|AAAAxx
+1859|5525|1|3|9|19|59|859|1859|1859|1859|118|119|NTAAAA|NEIAAA|HHHHxx
+8482|5526|0|2|2|2|82|482|482|3482|8482|164|165|GOAAAA|OEIAAA|OOOOxx
+8414|5527|0|2|4|14|14|414|414|3414|8414|28|29|QLAAAA|PEIAAA|VVVVxx
+6662|5528|0|2|2|2|62|662|662|1662|6662|124|125|GWAAAA|QEIAAA|AAAAxx
+8614|5529|0|2|4|14|14|614|614|3614|8614|28|29|ITAAAA|REIAAA|HHHHxx
+42|5530|0|2|2|2|42|42|42|42|42|84|85|QBAAAA|SEIAAA|OOOOxx
+7582|5531|0|2|2|2|82|582|1582|2582|7582|164|165|QFAAAA|TEIAAA|VVVVxx
+8183|5532|1|3|3|3|83|183|183|3183|8183|166|167|TCAAAA|UEIAAA|AAAAxx
+1299|5533|1|3|9|19|99|299|1299|1299|1299|198|199|ZXAAAA|VEIAAA|HHHHxx
+7004|5534|0|0|4|4|4|4|1004|2004|7004|8|9|KJAAAA|WEIAAA|OOOOxx
+3298|5535|0|2|8|18|98|298|1298|3298|3298|196|197|WWAAAA|XEIAAA|VVVVxx
+7884|5536|0|0|4|4|84|884|1884|2884|7884|168|169|GRAAAA|YEIAAA|AAAAxx
+4191|5537|1|3|1|11|91|191|191|4191|4191|182|183|FFAAAA|ZEIAAA|HHHHxx
+7346|5538|0|2|6|6|46|346|1346|2346|7346|92|93|OWAAAA|AFIAAA|OOOOxx
+7989|5539|1|1|9|9|89|989|1989|2989|7989|178|179|HVAAAA|BFIAAA|VVVVxx
+5719|5540|1|3|9|19|19|719|1719|719|5719|38|39|ZLAAAA|CFIAAA|AAAAxx
+800|5541|0|0|0|0|0|800|800|800|800|0|1|UEAAAA|DFIAAA|HHHHxx
+6509|5542|1|1|9|9|9|509|509|1509|6509|18|19|JQAAAA|EFIAAA|OOOOxx
+4672|5543|0|0|2|12|72|672|672|4672|4672|144|145|SXAAAA|FFIAAA|VVVVxx
+4434|5544|0|2|4|14|34|434|434|4434|4434|68|69|OOAAAA|GFIAAA|AAAAxx
+8309|5545|1|1|9|9|9|309|309|3309|8309|18|19|PHAAAA|HFIAAA|HHHHxx
+5134|5546|0|2|4|14|34|134|1134|134|5134|68|69|MPAAAA|IFIAAA|OOOOxx
+5153|5547|1|1|3|13|53|153|1153|153|5153|106|107|FQAAAA|JFIAAA|VVVVxx
+1522|5548|0|2|2|2|22|522|1522|1522|1522|44|45|OGAAAA|KFIAAA|AAAAxx
+8629|5549|1|1|9|9|29|629|629|3629|8629|58|59|XTAAAA|LFIAAA|HHHHxx
+4549|5550|1|1|9|9|49|549|549|4549|4549|98|99|ZSAAAA|MFIAAA|OOOOxx
+9506|5551|0|2|6|6|6|506|1506|4506|9506|12|13|QBAAAA|NFIAAA|VVVVxx
+6542|5552|0|2|2|2|42|542|542|1542|6542|84|85|QRAAAA|OFIAAA|AAAAxx
+2579|5553|1|3|9|19|79|579|579|2579|2579|158|159|FVAAAA|PFIAAA|HHHHxx
+4664|5554|0|0|4|4|64|664|664|4664|4664|128|129|KXAAAA|QFIAAA|OOOOxx
+696|5555|0|0|6|16|96|696|696|696|696|192|193|UAAAAA|RFIAAA|VVVVxx
+7950|5556|0|2|0|10|50|950|1950|2950|7950|100|101|UTAAAA|SFIAAA|AAAAxx
+5|5557|1|1|5|5|5|5|5|5|5|10|11|FAAAAA|TFIAAA|HHHHxx
+7806|5558|0|2|6|6|6|806|1806|2806|7806|12|13|GOAAAA|UFIAAA|OOOOxx
+2770|5559|0|2|0|10|70|770|770|2770|2770|140|141|OCAAAA|VFIAAA|VVVVxx
+1344|5560|0|0|4|4|44|344|1344|1344|1344|88|89|SZAAAA|WFIAAA|AAAAxx
+511|5561|1|3|1|11|11|511|511|511|511|22|23|RTAAAA|XFIAAA|HHHHxx
+9070|5562|0|2|0|10|70|70|1070|4070|9070|140|141|WKAAAA|YFIAAA|OOOOxx
+2961|5563|1|1|1|1|61|961|961|2961|2961|122|123|XJAAAA|ZFIAAA|VVVVxx
+8031|5564|1|3|1|11|31|31|31|3031|8031|62|63|XWAAAA|AGIAAA|AAAAxx
+326|5565|0|2|6|6|26|326|326|326|326|52|53|OMAAAA|BGIAAA|HHHHxx
+183|5566|1|3|3|3|83|183|183|183|183|166|167|BHAAAA|CGIAAA|OOOOxx
+5917|5567|1|1|7|17|17|917|1917|917|5917|34|35|PTAAAA|DGIAAA|VVVVxx
+8256|5568|0|0|6|16|56|256|256|3256|8256|112|113|OFAAAA|EGIAAA|AAAAxx
+7889|5569|1|1|9|9|89|889|1889|2889|7889|178|179|LRAAAA|FGIAAA|HHHHxx
+9029|5570|1|1|9|9|29|29|1029|4029|9029|58|59|HJAAAA|GGIAAA|OOOOxx
+1316|5571|0|0|6|16|16|316|1316|1316|1316|32|33|QYAAAA|HGIAAA|VVVVxx
+7442|5572|0|2|2|2|42|442|1442|2442|7442|84|85|GAAAAA|IGIAAA|AAAAxx
+2810|5573|0|2|0|10|10|810|810|2810|2810|20|21|CEAAAA|JGIAAA|HHHHxx
+20|5574|0|0|0|0|20|20|20|20|20|40|41|UAAAAA|KGIAAA|OOOOxx
+2306|5575|0|2|6|6|6|306|306|2306|2306|12|13|SKAAAA|LGIAAA|VVVVxx
+4694|5576|0|2|4|14|94|694|694|4694|4694|188|189|OYAAAA|MGIAAA|AAAAxx
+9710|5577|0|2|0|10|10|710|1710|4710|9710|20|21|MJAAAA|NGIAAA|HHHHxx
+1791|5578|1|3|1|11|91|791|1791|1791|1791|182|183|XQAAAA|OGIAAA|OOOOxx
+6730|5579|0|2|0|10|30|730|730|1730|6730|60|61|WYAAAA|PGIAAA|VVVVxx
+359|5580|1|3|9|19|59|359|359|359|359|118|119|VNAAAA|QGIAAA|AAAAxx
+8097|5581|1|1|7|17|97|97|97|3097|8097|194|195|LZAAAA|RGIAAA|HHHHxx
+6147|5582|1|3|7|7|47|147|147|1147|6147|94|95|LCAAAA|SGIAAA|OOOOxx
+643|5583|1|3|3|3|43|643|643|643|643|86|87|TYAAAA|TGIAAA|VVVVxx
+698|5584|0|2|8|18|98|698|698|698|698|196|197|WAAAAA|UGIAAA|AAAAxx
+3881|5585|1|1|1|1|81|881|1881|3881|3881|162|163|HTAAAA|VGIAAA|HHHHxx
+7600|5586|0|0|0|0|0|600|1600|2600|7600|0|1|IGAAAA|WGIAAA|OOOOxx
+1583|5587|1|3|3|3|83|583|1583|1583|1583|166|167|XIAAAA|XGIAAA|VVVVxx
+9612|5588|0|0|2|12|12|612|1612|4612|9612|24|25|SFAAAA|YGIAAA|AAAAxx
+1032|5589|0|0|2|12|32|32|1032|1032|1032|64|65|SNAAAA|ZGIAAA|HHHHxx
+4834|5590|0|2|4|14|34|834|834|4834|4834|68|69|YDAAAA|AHIAAA|OOOOxx
+5076|5591|0|0|6|16|76|76|1076|76|5076|152|153|GNAAAA|BHIAAA|VVVVxx
+3070|5592|0|2|0|10|70|70|1070|3070|3070|140|141|COAAAA|CHIAAA|AAAAxx
+1421|5593|1|1|1|1|21|421|1421|1421|1421|42|43|RCAAAA|DHIAAA|HHHHxx
+8970|5594|0|2|0|10|70|970|970|3970|8970|140|141|AHAAAA|EHIAAA|OOOOxx
+6271|5595|1|3|1|11|71|271|271|1271|6271|142|143|FHAAAA|FHIAAA|VVVVxx
+8547|5596|1|3|7|7|47|547|547|3547|8547|94|95|TQAAAA|GHIAAA|AAAAxx
+1259|5597|1|3|9|19|59|259|1259|1259|1259|118|119|LWAAAA|HHIAAA|HHHHxx
+8328|5598|0|0|8|8|28|328|328|3328|8328|56|57|IIAAAA|IHIAAA|OOOOxx
+1503|5599|1|3|3|3|3|503|1503|1503|1503|6|7|VFAAAA|JHIAAA|VVVVxx
+2253|5600|1|1|3|13|53|253|253|2253|2253|106|107|RIAAAA|KHIAAA|AAAAxx
+7449|5601|1|1|9|9|49|449|1449|2449|7449|98|99|NAAAAA|LHIAAA|HHHHxx
+3579|5602|1|3|9|19|79|579|1579|3579|3579|158|159|RHAAAA|MHIAAA|OOOOxx
+1585|5603|1|1|5|5|85|585|1585|1585|1585|170|171|ZIAAAA|NHIAAA|VVVVxx
+5543|5604|1|3|3|3|43|543|1543|543|5543|86|87|FFAAAA|OHIAAA|AAAAxx
+8627|5605|1|3|7|7|27|627|627|3627|8627|54|55|VTAAAA|PHIAAA|HHHHxx
+8618|5606|0|2|8|18|18|618|618|3618|8618|36|37|MTAAAA|QHIAAA|OOOOxx
+1911|5607|1|3|1|11|11|911|1911|1911|1911|22|23|NVAAAA|RHIAAA|VVVVxx
+2758|5608|0|2|8|18|58|758|758|2758|2758|116|117|CCAAAA|SHIAAA|AAAAxx
+5744|5609|0|0|4|4|44|744|1744|744|5744|88|89|YMAAAA|THIAAA|HHHHxx
+4976|5610|0|0|6|16|76|976|976|4976|4976|152|153|KJAAAA|UHIAAA|OOOOxx
+6380|5611|0|0|0|0|80|380|380|1380|6380|160|161|KLAAAA|VHIAAA|VVVVxx
+1937|5612|1|1|7|17|37|937|1937|1937|1937|74|75|NWAAAA|WHIAAA|AAAAxx
+9903|5613|1|3|3|3|3|903|1903|4903|9903|6|7|XQAAAA|XHIAAA|HHHHxx
+4409|5614|1|1|9|9|9|409|409|4409|4409|18|19|PNAAAA|YHIAAA|OOOOxx
+4133|5615|1|1|3|13|33|133|133|4133|4133|66|67|ZCAAAA|ZHIAAA|VVVVxx
+5263|5616|1|3|3|3|63|263|1263|263|5263|126|127|LUAAAA|AIIAAA|AAAAxx
+7888|5617|0|0|8|8|88|888|1888|2888|7888|176|177|KRAAAA|BIIAAA|HHHHxx
+6060|5618|0|0|0|0|60|60|60|1060|6060|120|121|CZAAAA|CIIAAA|OOOOxx
+2522|5619|0|2|2|2|22|522|522|2522|2522|44|45|ATAAAA|DIIAAA|VVVVxx
+5550|5620|0|2|0|10|50|550|1550|550|5550|100|101|MFAAAA|EIIAAA|AAAAxx
+9396|5621|0|0|6|16|96|396|1396|4396|9396|192|193|KXAAAA|FIIAAA|HHHHxx
+176|5622|0|0|6|16|76|176|176|176|176|152|153|UGAAAA|GIIAAA|OOOOxx
+5148|5623|0|0|8|8|48|148|1148|148|5148|96|97|AQAAAA|HIIAAA|VVVVxx
+6691|5624|1|3|1|11|91|691|691|1691|6691|182|183|JXAAAA|IIIAAA|AAAAxx
+4652|5625|0|0|2|12|52|652|652|4652|4652|104|105|YWAAAA|JIIAAA|HHHHxx
+5096|5626|0|0|6|16|96|96|1096|96|5096|192|193|AOAAAA|KIIAAA|OOOOxx
+2408|5627|0|0|8|8|8|408|408|2408|2408|16|17|QOAAAA|LIIAAA|VVVVxx
+7322|5628|0|2|2|2|22|322|1322|2322|7322|44|45|QVAAAA|MIIAAA|AAAAxx
+6782|5629|0|2|2|2|82|782|782|1782|6782|164|165|WAAAAA|NIIAAA|HHHHxx
+4642|5630|0|2|2|2|42|642|642|4642|4642|84|85|OWAAAA|OIIAAA|OOOOxx
+5427|5631|1|3|7|7|27|427|1427|427|5427|54|55|TAAAAA|PIIAAA|VVVVxx
+4461|5632|1|1|1|1|61|461|461|4461|4461|122|123|PPAAAA|QIIAAA|AAAAxx
+8416|5633|0|0|6|16|16|416|416|3416|8416|32|33|SLAAAA|RIIAAA|HHHHxx
+2593|5634|1|1|3|13|93|593|593|2593|2593|186|187|TVAAAA|SIIAAA|OOOOxx
+6202|5635|0|2|2|2|2|202|202|1202|6202|4|5|OEAAAA|TIIAAA|VVVVxx
+3826|5636|0|2|6|6|26|826|1826|3826|3826|52|53|ERAAAA|UIIAAA|AAAAxx
+4417|5637|1|1|7|17|17|417|417|4417|4417|34|35|XNAAAA|VIIAAA|HHHHxx
+7871|5638|1|3|1|11|71|871|1871|2871|7871|142|143|TQAAAA|WIIAAA|OOOOxx
+5622|5639|0|2|2|2|22|622|1622|622|5622|44|45|GIAAAA|XIIAAA|VVVVxx
+3010|5640|0|2|0|10|10|10|1010|3010|3010|20|21|ULAAAA|YIIAAA|AAAAxx
+3407|5641|1|3|7|7|7|407|1407|3407|3407|14|15|BBAAAA|ZIIAAA|HHHHxx
+1274|5642|0|2|4|14|74|274|1274|1274|1274|148|149|AXAAAA|AJIAAA|OOOOxx
+2828|5643|0|0|8|8|28|828|828|2828|2828|56|57|UEAAAA|BJIAAA|VVVVxx
+3427|5644|1|3|7|7|27|427|1427|3427|3427|54|55|VBAAAA|CJIAAA|AAAAxx
+612|5645|0|0|2|12|12|612|612|612|612|24|25|OXAAAA|DJIAAA|HHHHxx
+8729|5646|1|1|9|9|29|729|729|3729|8729|58|59|TXAAAA|EJIAAA|OOOOxx
+1239|5647|1|3|9|19|39|239|1239|1239|1239|78|79|RVAAAA|FJIAAA|VVVVxx
+8990|5648|0|2|0|10|90|990|990|3990|8990|180|181|UHAAAA|GJIAAA|AAAAxx
+5609|5649|1|1|9|9|9|609|1609|609|5609|18|19|THAAAA|HJIAAA|HHHHxx
+4441|5650|1|1|1|1|41|441|441|4441|4441|82|83|VOAAAA|IJIAAA|OOOOxx
+9078|5651|0|2|8|18|78|78|1078|4078|9078|156|157|ELAAAA|JJIAAA|VVVVxx
+6699|5652|1|3|9|19|99|699|699|1699|6699|198|199|RXAAAA|KJIAAA|AAAAxx
+8390|5653|0|2|0|10|90|390|390|3390|8390|180|181|SKAAAA|LJIAAA|HHHHxx
+5455|5654|1|3|5|15|55|455|1455|455|5455|110|111|VBAAAA|MJIAAA|OOOOxx
+7537|5655|1|1|7|17|37|537|1537|2537|7537|74|75|XDAAAA|NJIAAA|VVVVxx
+4669|5656|1|1|9|9|69|669|669|4669|4669|138|139|PXAAAA|OJIAAA|AAAAxx
+5534|5657|0|2|4|14|34|534|1534|534|5534|68|69|WEAAAA|PJIAAA|HHHHxx
+1920|5658|0|0|0|0|20|920|1920|1920|1920|40|41|WVAAAA|QJIAAA|OOOOxx
+9465|5659|1|1|5|5|65|465|1465|4465|9465|130|131|BAAAAA|RJIAAA|VVVVxx
+4897|5660|1|1|7|17|97|897|897|4897|4897|194|195|JGAAAA|SJIAAA|AAAAxx
+1990|5661|0|2|0|10|90|990|1990|1990|1990|180|181|OYAAAA|TJIAAA|HHHHxx
+7148|5662|0|0|8|8|48|148|1148|2148|7148|96|97|YOAAAA|UJIAAA|OOOOxx
+533|5663|1|1|3|13|33|533|533|533|533|66|67|NUAAAA|VJIAAA|VVVVxx
+4339|5664|1|3|9|19|39|339|339|4339|4339|78|79|XKAAAA|WJIAAA|AAAAxx
+6450|5665|0|2|0|10|50|450|450|1450|6450|100|101|COAAAA|XJIAAA|HHHHxx
+9627|5666|1|3|7|7|27|627|1627|4627|9627|54|55|HGAAAA|YJIAAA|OOOOxx
+5539|5667|1|3|9|19|39|539|1539|539|5539|78|79|BFAAAA|ZJIAAA|VVVVxx
+6758|5668|0|2|8|18|58|758|758|1758|6758|116|117|YZAAAA|AKIAAA|AAAAxx
+3435|5669|1|3|5|15|35|435|1435|3435|3435|70|71|DCAAAA|BKIAAA|HHHHxx
+4350|5670|0|2|0|10|50|350|350|4350|4350|100|101|ILAAAA|CKIAAA|OOOOxx
+9088|5671|0|0|8|8|88|88|1088|4088|9088|176|177|OLAAAA|DKIAAA|VVVVxx
+6368|5672|0|0|8|8|68|368|368|1368|6368|136|137|YKAAAA|EKIAAA|AAAAxx
+6337|5673|1|1|7|17|37|337|337|1337|6337|74|75|TJAAAA|FKIAAA|HHHHxx
+4361|5674|1|1|1|1|61|361|361|4361|4361|122|123|TLAAAA|GKIAAA|OOOOxx
+1719|5675|1|3|9|19|19|719|1719|1719|1719|38|39|DOAAAA|HKIAAA|VVVVxx
+3109|5676|1|1|9|9|9|109|1109|3109|3109|18|19|PPAAAA|IKIAAA|AAAAxx
+7135|5677|1|3|5|15|35|135|1135|2135|7135|70|71|LOAAAA|JKIAAA|HHHHxx
+1964|5678|0|0|4|4|64|964|1964|1964|1964|128|129|OXAAAA|KKIAAA|OOOOxx
+3|5679|1|3|3|3|3|3|3|3|3|6|7|DAAAAA|LKIAAA|VVVVxx
+1868|5680|0|0|8|8|68|868|1868|1868|1868|136|137|WTAAAA|MKIAAA|AAAAxx
+5182|5681|0|2|2|2|82|182|1182|182|5182|164|165|IRAAAA|NKIAAA|HHHHxx
+7567|5682|1|3|7|7|67|567|1567|2567|7567|134|135|BFAAAA|OKIAAA|OOOOxx
+3676|5683|0|0|6|16|76|676|1676|3676|3676|152|153|KLAAAA|PKIAAA|VVVVxx
+9382|5684|0|2|2|2|82|382|1382|4382|9382|164|165|WWAAAA|QKIAAA|AAAAxx
+8645|5685|1|1|5|5|45|645|645|3645|8645|90|91|NUAAAA|RKIAAA|HHHHxx
+2018|5686|0|2|8|18|18|18|18|2018|2018|36|37|QZAAAA|SKIAAA|OOOOxx
+217|5687|1|1|7|17|17|217|217|217|217|34|35|JIAAAA|TKIAAA|VVVVxx
+6793|5688|1|1|3|13|93|793|793|1793|6793|186|187|HBAAAA|UKIAAA|AAAAxx
+7280|5689|0|0|0|0|80|280|1280|2280|7280|160|161|AUAAAA|VKIAAA|HHHHxx
+2168|5690|0|0|8|8|68|168|168|2168|2168|136|137|KFAAAA|WKIAAA|OOOOxx
+5259|5691|1|3|9|19|59|259|1259|259|5259|118|119|HUAAAA|XKIAAA|VVVVxx
+6019|5692|1|3|9|19|19|19|19|1019|6019|38|39|NXAAAA|YKIAAA|AAAAxx
+877|5693|1|1|7|17|77|877|877|877|877|154|155|THAAAA|ZKIAAA|HHHHxx
+4961|5694|1|1|1|1|61|961|961|4961|4961|122|123|VIAAAA|ALIAAA|OOOOxx
+1873|5695|1|1|3|13|73|873|1873|1873|1873|146|147|BUAAAA|BLIAAA|VVVVxx
+13|5696|1|1|3|13|13|13|13|13|13|26|27|NAAAAA|CLIAAA|AAAAxx
+1537|5697|1|1|7|17|37|537|1537|1537|1537|74|75|DHAAAA|DLIAAA|HHHHxx
+3129|5698|1|1|9|9|29|129|1129|3129|3129|58|59|JQAAAA|ELIAAA|OOOOxx
+6473|5699|1|1|3|13|73|473|473|1473|6473|146|147|ZOAAAA|FLIAAA|VVVVxx
+7865|5700|1|1|5|5|65|865|1865|2865|7865|130|131|NQAAAA|GLIAAA|AAAAxx
+7822|5701|0|2|2|2|22|822|1822|2822|7822|44|45|WOAAAA|HLIAAA|HHHHxx
+239|5702|1|3|9|19|39|239|239|239|239|78|79|FJAAAA|ILIAAA|OOOOxx
+2062|5703|0|2|2|2|62|62|62|2062|2062|124|125|IBAAAA|JLIAAA|VVVVxx
+762|5704|0|2|2|2|62|762|762|762|762|124|125|IDAAAA|KLIAAA|AAAAxx
+3764|5705|0|0|4|4|64|764|1764|3764|3764|128|129|UOAAAA|LLIAAA|HHHHxx
+465|5706|1|1|5|5|65|465|465|465|465|130|131|XRAAAA|MLIAAA|OOOOxx
+2587|5707|1|3|7|7|87|587|587|2587|2587|174|175|NVAAAA|NLIAAA|VVVVxx
+8402|5708|0|2|2|2|2|402|402|3402|8402|4|5|ELAAAA|OLIAAA|AAAAxx
+1055|5709|1|3|5|15|55|55|1055|1055|1055|110|111|POAAAA|PLIAAA|HHHHxx
+3072|5710|0|0|2|12|72|72|1072|3072|3072|144|145|EOAAAA|QLIAAA|OOOOxx
+7359|5711|1|3|9|19|59|359|1359|2359|7359|118|119|BXAAAA|RLIAAA|VVVVxx
+6558|5712|0|2|8|18|58|558|558|1558|6558|116|117|GSAAAA|SLIAAA|AAAAxx
+48|5713|0|0|8|8|48|48|48|48|48|96|97|WBAAAA|TLIAAA|HHHHxx
+5382|5714|0|2|2|2|82|382|1382|382|5382|164|165|AZAAAA|ULIAAA|OOOOxx
+947|5715|1|3|7|7|47|947|947|947|947|94|95|LKAAAA|VLIAAA|VVVVxx
+2644|5716|0|0|4|4|44|644|644|2644|2644|88|89|SXAAAA|WLIAAA|AAAAxx
+7516|5717|0|0|6|16|16|516|1516|2516|7516|32|33|CDAAAA|XLIAAA|HHHHxx
+2362|5718|0|2|2|2|62|362|362|2362|2362|124|125|WMAAAA|YLIAAA|OOOOxx
+839|5719|1|3|9|19|39|839|839|839|839|78|79|HGAAAA|ZLIAAA|VVVVxx
+2216|5720|0|0|6|16|16|216|216|2216|2216|32|33|GHAAAA|AMIAAA|AAAAxx
+7673|5721|1|1|3|13|73|673|1673|2673|7673|146|147|DJAAAA|BMIAAA|HHHHxx
+8173|5722|1|1|3|13|73|173|173|3173|8173|146|147|JCAAAA|CMIAAA|OOOOxx
+1630|5723|0|2|0|10|30|630|1630|1630|1630|60|61|SKAAAA|DMIAAA|VVVVxx
+9057|5724|1|1|7|17|57|57|1057|4057|9057|114|115|JKAAAA|EMIAAA|AAAAxx
+4392|5725|0|0|2|12|92|392|392|4392|4392|184|185|YMAAAA|FMIAAA|HHHHxx
+3695|5726|1|3|5|15|95|695|1695|3695|3695|190|191|DMAAAA|GMIAAA|OOOOxx
+5751|5727|1|3|1|11|51|751|1751|751|5751|102|103|FNAAAA|HMIAAA|VVVVxx
+5745|5728|1|1|5|5|45|745|1745|745|5745|90|91|ZMAAAA|IMIAAA|AAAAxx
+7945|5729|1|1|5|5|45|945|1945|2945|7945|90|91|PTAAAA|JMIAAA|HHHHxx
+5174|5730|0|2|4|14|74|174|1174|174|5174|148|149|ARAAAA|KMIAAA|OOOOxx
+3829|5731|1|1|9|9|29|829|1829|3829|3829|58|59|HRAAAA|LMIAAA|VVVVxx
+3317|5732|1|1|7|17|17|317|1317|3317|3317|34|35|PXAAAA|MMIAAA|AAAAxx
+4253|5733|1|1|3|13|53|253|253|4253|4253|106|107|PHAAAA|NMIAAA|HHHHxx
+1291|5734|1|3|1|11|91|291|1291|1291|1291|182|183|RXAAAA|OMIAAA|OOOOxx
+3266|5735|0|2|6|6|66|266|1266|3266|3266|132|133|QVAAAA|PMIAAA|VVVVxx
+2939|5736|1|3|9|19|39|939|939|2939|2939|78|79|BJAAAA|QMIAAA|AAAAxx
+2755|5737|1|3|5|15|55|755|755|2755|2755|110|111|ZBAAAA|RMIAAA|HHHHxx
+6844|5738|0|0|4|4|44|844|844|1844|6844|88|89|GDAAAA|SMIAAA|OOOOxx
+8594|5739|0|2|4|14|94|594|594|3594|8594|188|189|OSAAAA|TMIAAA|VVVVxx
+704|5740|0|0|4|4|4|704|704|704|704|8|9|CBAAAA|UMIAAA|AAAAxx
+1681|5741|1|1|1|1|81|681|1681|1681|1681|162|163|RMAAAA|VMIAAA|HHHHxx
+364|5742|0|0|4|4|64|364|364|364|364|128|129|AOAAAA|WMIAAA|OOOOxx
+2928|5743|0|0|8|8|28|928|928|2928|2928|56|57|QIAAAA|XMIAAA|VVVVxx
+117|5744|1|1|7|17|17|117|117|117|117|34|35|NEAAAA|YMIAAA|AAAAxx
+96|5745|0|0|6|16|96|96|96|96|96|192|193|SDAAAA|ZMIAAA|HHHHxx
+7796|5746|0|0|6|16|96|796|1796|2796|7796|192|193|WNAAAA|ANIAAA|OOOOxx
+3101|5747|1|1|1|1|1|101|1101|3101|3101|2|3|HPAAAA|BNIAAA|VVVVxx
+3397|5748|1|1|7|17|97|397|1397|3397|3397|194|195|RAAAAA|CNIAAA|AAAAxx
+1605|5749|1|1|5|5|5|605|1605|1605|1605|10|11|TJAAAA|DNIAAA|HHHHxx
+4881|5750|1|1|1|1|81|881|881|4881|4881|162|163|TFAAAA|ENIAAA|OOOOxx
+4521|5751|1|1|1|1|21|521|521|4521|4521|42|43|XRAAAA|FNIAAA|VVVVxx
+6430|5752|0|2|0|10|30|430|430|1430|6430|60|61|INAAAA|GNIAAA|AAAAxx
+282|5753|0|2|2|2|82|282|282|282|282|164|165|WKAAAA|HNIAAA|HHHHxx
+9645|5754|1|1|5|5|45|645|1645|4645|9645|90|91|ZGAAAA|INIAAA|OOOOxx
+8946|5755|0|2|6|6|46|946|946|3946|8946|92|93|CGAAAA|JNIAAA|VVVVxx
+5064|5756|0|0|4|4|64|64|1064|64|5064|128|129|UMAAAA|KNIAAA|AAAAxx
+7470|5757|0|2|0|10|70|470|1470|2470|7470|140|141|IBAAAA|LNIAAA|HHHHxx
+5886|5758|0|2|6|6|86|886|1886|886|5886|172|173|KSAAAA|MNIAAA|OOOOxx
+6280|5759|0|0|0|0|80|280|280|1280|6280|160|161|OHAAAA|NNIAAA|VVVVxx
+5247|5760|1|3|7|7|47|247|1247|247|5247|94|95|VTAAAA|ONIAAA|AAAAxx
+412|5761|0|0|2|12|12|412|412|412|412|24|25|WPAAAA|PNIAAA|HHHHxx
+5342|5762|0|2|2|2|42|342|1342|342|5342|84|85|MXAAAA|QNIAAA|OOOOxx
+2271|5763|1|3|1|11|71|271|271|2271|2271|142|143|JJAAAA|RNIAAA|VVVVxx
+849|5764|1|1|9|9|49|849|849|849|849|98|99|RGAAAA|SNIAAA|AAAAxx
+1885|5765|1|1|5|5|85|885|1885|1885|1885|170|171|NUAAAA|TNIAAA|HHHHxx
+5620|5766|0|0|0|0|20|620|1620|620|5620|40|41|EIAAAA|UNIAAA|OOOOxx
+7079|5767|1|3|9|19|79|79|1079|2079|7079|158|159|HMAAAA|VNIAAA|VVVVxx
+5819|5768|1|3|9|19|19|819|1819|819|5819|38|39|VPAAAA|WNIAAA|AAAAxx
+7497|5769|1|1|7|17|97|497|1497|2497|7497|194|195|JCAAAA|XNIAAA|HHHHxx
+5993|5770|1|1|3|13|93|993|1993|993|5993|186|187|NWAAAA|YNIAAA|OOOOxx
+3739|5771|1|3|9|19|39|739|1739|3739|3739|78|79|VNAAAA|ZNIAAA|VVVVxx
+6296|5772|0|0|6|16|96|296|296|1296|6296|192|193|EIAAAA|AOIAAA|AAAAxx
+2716|5773|0|0|6|16|16|716|716|2716|2716|32|33|MAAAAA|BOIAAA|HHHHxx
+1130|5774|0|2|0|10|30|130|1130|1130|1130|60|61|MRAAAA|COIAAA|OOOOxx
+5593|5775|1|1|3|13|93|593|1593|593|5593|186|187|DHAAAA|DOIAAA|VVVVxx
+6972|5776|0|0|2|12|72|972|972|1972|6972|144|145|EIAAAA|EOIAAA|AAAAxx
+8360|5777|0|0|0|0|60|360|360|3360|8360|120|121|OJAAAA|FOIAAA|HHHHxx
+6448|5778|0|0|8|8|48|448|448|1448|6448|96|97|AOAAAA|GOIAAA|OOOOxx
+3689|5779|1|1|9|9|89|689|1689|3689|3689|178|179|XLAAAA|HOIAAA|VVVVxx
+7951|5780|1|3|1|11|51|951|1951|2951|7951|102|103|VTAAAA|IOIAAA|AAAAxx
+2974|5781|0|2|4|14|74|974|974|2974|2974|148|149|KKAAAA|JOIAAA|HHHHxx
+6600|5782|0|0|0|0|0|600|600|1600|6600|0|1|WTAAAA|KOIAAA|OOOOxx
+4662|5783|0|2|2|2|62|662|662|4662|4662|124|125|IXAAAA|LOIAAA|VVVVxx
+4765|5784|1|1|5|5|65|765|765|4765|4765|130|131|HBAAAA|MOIAAA|AAAAxx
+355|5785|1|3|5|15|55|355|355|355|355|110|111|RNAAAA|NOIAAA|HHHHxx
+6228|5786|0|0|8|8|28|228|228|1228|6228|56|57|OFAAAA|OOIAAA|OOOOxx
+964|5787|0|0|4|4|64|964|964|964|964|128|129|CLAAAA|POIAAA|VVVVxx
+3082|5788|0|2|2|2|82|82|1082|3082|3082|164|165|OOAAAA|QOIAAA|AAAAxx
+7028|5789|0|0|8|8|28|28|1028|2028|7028|56|57|IKAAAA|ROIAAA|HHHHxx
+4505|5790|1|1|5|5|5|505|505|4505|4505|10|11|HRAAAA|SOIAAA|OOOOxx
+8961|5791|1|1|1|1|61|961|961|3961|8961|122|123|RGAAAA|TOIAAA|VVVVxx
+9571|5792|1|3|1|11|71|571|1571|4571|9571|142|143|DEAAAA|UOIAAA|AAAAxx
+9394|5793|0|2|4|14|94|394|1394|4394|9394|188|189|IXAAAA|VOIAAA|HHHHxx
+4245|5794|1|1|5|5|45|245|245|4245|4245|90|91|HHAAAA|WOIAAA|OOOOxx
+7560|5795|0|0|0|0|60|560|1560|2560|7560|120|121|UEAAAA|XOIAAA|VVVVxx
+2907|5796|1|3|7|7|7|907|907|2907|2907|14|15|VHAAAA|YOIAAA|AAAAxx
+7817|5797|1|1|7|17|17|817|1817|2817|7817|34|35|ROAAAA|ZOIAAA|HHHHxx
+5408|5798|0|0|8|8|8|408|1408|408|5408|16|17|AAAAAA|APIAAA|OOOOxx
+8092|5799|0|0|2|12|92|92|92|3092|8092|184|185|GZAAAA|BPIAAA|VVVVxx
+1309|5800|1|1|9|9|9|309|1309|1309|1309|18|19|JYAAAA|CPIAAA|AAAAxx
+6673|5801|1|1|3|13|73|673|673|1673|6673|146|147|RWAAAA|DPIAAA|HHHHxx
+1245|5802|1|1|5|5|45|245|1245|1245|1245|90|91|XVAAAA|EPIAAA|OOOOxx
+6790|5803|0|2|0|10|90|790|790|1790|6790|180|181|EBAAAA|FPIAAA|VVVVxx
+8380|5804|0|0|0|0|80|380|380|3380|8380|160|161|IKAAAA|GPIAAA|AAAAxx
+5786|5805|0|2|6|6|86|786|1786|786|5786|172|173|OOAAAA|HPIAAA|HHHHxx
+9590|5806|0|2|0|10|90|590|1590|4590|9590|180|181|WEAAAA|IPIAAA|OOOOxx
+5763|5807|1|3|3|3|63|763|1763|763|5763|126|127|RNAAAA|JPIAAA|VVVVxx
+1345|5808|1|1|5|5|45|345|1345|1345|1345|90|91|TZAAAA|KPIAAA|AAAAxx
+3480|5809|0|0|0|0|80|480|1480|3480|3480|160|161|WDAAAA|LPIAAA|HHHHxx
+7864|5810|0|0|4|4|64|864|1864|2864|7864|128|129|MQAAAA|MPIAAA|OOOOxx
+4853|5811|1|1|3|13|53|853|853|4853|4853|106|107|REAAAA|NPIAAA|VVVVxx
+1445|5812|1|1|5|5|45|445|1445|1445|1445|90|91|PDAAAA|OPIAAA|AAAAxx
+170|5813|0|2|0|10|70|170|170|170|170|140|141|OGAAAA|PPIAAA|HHHHxx
+7348|5814|0|0|8|8|48|348|1348|2348|7348|96|97|QWAAAA|QPIAAA|OOOOxx
+3920|5815|0|0|0|0|20|920|1920|3920|3920|40|41|UUAAAA|RPIAAA|VVVVxx
+3307|5816|1|3|7|7|7|307|1307|3307|3307|14|15|FXAAAA|SPIAAA|AAAAxx
+4584|5817|0|0|4|4|84|584|584|4584|4584|168|169|IUAAAA|TPIAAA|HHHHxx
+3344|5818|0|0|4|4|44|344|1344|3344|3344|88|89|QYAAAA|UPIAAA|OOOOxx
+4360|5819|0|0|0|0|60|360|360|4360|4360|120|121|SLAAAA|VPIAAA|VVVVxx
+8757|5820|1|1|7|17|57|757|757|3757|8757|114|115|VYAAAA|WPIAAA|AAAAxx
+4315|5821|1|3|5|15|15|315|315|4315|4315|30|31|ZJAAAA|XPIAAA|HHHHxx
+5243|5822|1|3|3|3|43|243|1243|243|5243|86|87|RTAAAA|YPIAAA|OOOOxx
+8550|5823|0|2|0|10|50|550|550|3550|8550|100|101|WQAAAA|ZPIAAA|VVVVxx
+159|5824|1|3|9|19|59|159|159|159|159|118|119|DGAAAA|AQIAAA|AAAAxx
+4710|5825|0|2|0|10|10|710|710|4710|4710|20|21|EZAAAA|BQIAAA|HHHHxx
+7179|5826|1|3|9|19|79|179|1179|2179|7179|158|159|DQAAAA|CQIAAA|OOOOxx
+2509|5827|1|1|9|9|9|509|509|2509|2509|18|19|NSAAAA|DQIAAA|VVVVxx
+6981|5828|1|1|1|1|81|981|981|1981|6981|162|163|NIAAAA|EQIAAA|AAAAxx
+5060|5829|0|0|0|0|60|60|1060|60|5060|120|121|QMAAAA|FQIAAA|HHHHxx
+5601|5830|1|1|1|1|1|601|1601|601|5601|2|3|LHAAAA|GQIAAA|OOOOxx
+703|5831|1|3|3|3|3|703|703|703|703|6|7|BBAAAA|HQIAAA|VVVVxx
+8719|5832|1|3|9|19|19|719|719|3719|8719|38|39|JXAAAA|IQIAAA|AAAAxx
+1570|5833|0|2|0|10|70|570|1570|1570|1570|140|141|KIAAAA|JQIAAA|HHHHxx
+1036|5834|0|0|6|16|36|36|1036|1036|1036|72|73|WNAAAA|KQIAAA|OOOOxx
+6703|5835|1|3|3|3|3|703|703|1703|6703|6|7|VXAAAA|LQIAAA|VVVVxx
+252|5836|0|0|2|12|52|252|252|252|252|104|105|SJAAAA|MQIAAA|AAAAxx
+631|5837|1|3|1|11|31|631|631|631|631|62|63|HYAAAA|NQIAAA|HHHHxx
+5098|5838|0|2|8|18|98|98|1098|98|5098|196|197|COAAAA|OQIAAA|OOOOxx
+8346|5839|0|2|6|6|46|346|346|3346|8346|92|93|AJAAAA|PQIAAA|VVVVxx
+4910|5840|0|2|0|10|10|910|910|4910|4910|20|21|WGAAAA|QQIAAA|AAAAxx
+559|5841|1|3|9|19|59|559|559|559|559|118|119|NVAAAA|RQIAAA|HHHHxx
+1477|5842|1|1|7|17|77|477|1477|1477|1477|154|155|VEAAAA|SQIAAA|OOOOxx
+5115|5843|1|3|5|15|15|115|1115|115|5115|30|31|TOAAAA|TQIAAA|VVVVxx
+8784|5844|0|0|4|4|84|784|784|3784|8784|168|169|WZAAAA|UQIAAA|AAAAxx
+4422|5845|0|2|2|2|22|422|422|4422|4422|44|45|COAAAA|VQIAAA|HHHHxx
+2702|5846|0|2|2|2|2|702|702|2702|2702|4|5|YZAAAA|WQIAAA|OOOOxx
+9599|5847|1|3|9|19|99|599|1599|4599|9599|198|199|FFAAAA|XQIAAA|VVVVxx
+2463|5848|1|3|3|3|63|463|463|2463|2463|126|127|TQAAAA|YQIAAA|AAAAxx
+498|5849|0|2|8|18|98|498|498|498|498|196|197|ETAAAA|ZQIAAA|HHHHxx
+494|5850|0|2|4|14|94|494|494|494|494|188|189|ATAAAA|ARIAAA|OOOOxx
+8632|5851|0|0|2|12|32|632|632|3632|8632|64|65|AUAAAA|BRIAAA|VVVVxx
+3449|5852|1|1|9|9|49|449|1449|3449|3449|98|99|RCAAAA|CRIAAA|AAAAxx
+5888|5853|0|0|8|8|88|888|1888|888|5888|176|177|MSAAAA|DRIAAA|HHHHxx
+2211|5854|1|3|1|11|11|211|211|2211|2211|22|23|BHAAAA|ERIAAA|OOOOxx
+2835|5855|1|3|5|15|35|835|835|2835|2835|70|71|BFAAAA|FRIAAA|VVVVxx
+4196|5856|0|0|6|16|96|196|196|4196|4196|192|193|KFAAAA|GRIAAA|AAAAxx
+2177|5857|1|1|7|17|77|177|177|2177|2177|154|155|TFAAAA|HRIAAA|HHHHxx
+1959|5858|1|3|9|19|59|959|1959|1959|1959|118|119|JXAAAA|IRIAAA|OOOOxx
+5172|5859|0|0|2|12|72|172|1172|172|5172|144|145|YQAAAA|JRIAAA|VVVVxx
+7898|5860|0|2|8|18|98|898|1898|2898|7898|196|197|URAAAA|KRIAAA|AAAAxx
+5729|5861|1|1|9|9|29|729|1729|729|5729|58|59|JMAAAA|LRIAAA|HHHHxx
+469|5862|1|1|9|9|69|469|469|469|469|138|139|BSAAAA|MRIAAA|OOOOxx
+4456|5863|0|0|6|16|56|456|456|4456|4456|112|113|KPAAAA|NRIAAA|VVVVxx
+3578|5864|0|2|8|18|78|578|1578|3578|3578|156|157|QHAAAA|ORIAAA|AAAAxx
+8623|5865|1|3|3|3|23|623|623|3623|8623|46|47|RTAAAA|PRIAAA|HHHHxx
+6749|5866|1|1|9|9|49|749|749|1749|6749|98|99|PZAAAA|QRIAAA|OOOOxx
+6735|5867|1|3|5|15|35|735|735|1735|6735|70|71|BZAAAA|RRIAAA|VVVVxx
+5197|5868|1|1|7|17|97|197|1197|197|5197|194|195|XRAAAA|SRIAAA|AAAAxx
+2067|5869|1|3|7|7|67|67|67|2067|2067|134|135|NBAAAA|TRIAAA|HHHHxx
+5600|5870|0|0|0|0|0|600|1600|600|5600|0|1|KHAAAA|URIAAA|OOOOxx
+7741|5871|1|1|1|1|41|741|1741|2741|7741|82|83|TLAAAA|VRIAAA|VVVVxx
+9925|5872|1|1|5|5|25|925|1925|4925|9925|50|51|TRAAAA|WRIAAA|AAAAxx
+9685|5873|1|1|5|5|85|685|1685|4685|9685|170|171|NIAAAA|XRIAAA|HHHHxx
+7622|5874|0|2|2|2|22|622|1622|2622|7622|44|45|EHAAAA|YRIAAA|OOOOxx
+6859|5875|1|3|9|19|59|859|859|1859|6859|118|119|VDAAAA|ZRIAAA|VVVVxx
+3094|5876|0|2|4|14|94|94|1094|3094|3094|188|189|APAAAA|ASIAAA|AAAAxx
+2628|5877|0|0|8|8|28|628|628|2628|2628|56|57|CXAAAA|BSIAAA|HHHHxx
+40|5878|0|0|0|0|40|40|40|40|40|80|81|OBAAAA|CSIAAA|OOOOxx
+1644|5879|0|0|4|4|44|644|1644|1644|1644|88|89|GLAAAA|DSIAAA|VVVVxx
+588|5880|0|0|8|8|88|588|588|588|588|176|177|QWAAAA|ESIAAA|AAAAxx
+7522|5881|0|2|2|2|22|522|1522|2522|7522|44|45|IDAAAA|FSIAAA|HHHHxx
+162|5882|0|2|2|2|62|162|162|162|162|124|125|GGAAAA|GSIAAA|OOOOxx
+3610|5883|0|2|0|10|10|610|1610|3610|3610|20|21|WIAAAA|HSIAAA|VVVVxx
+3561|5884|1|1|1|1|61|561|1561|3561|3561|122|123|ZGAAAA|ISIAAA|AAAAxx
+8185|5885|1|1|5|5|85|185|185|3185|8185|170|171|VCAAAA|JSIAAA|HHHHxx
+7237|5886|1|1|7|17|37|237|1237|2237|7237|74|75|JSAAAA|KSIAAA|OOOOxx
+4592|5887|0|0|2|12|92|592|592|4592|4592|184|185|QUAAAA|LSIAAA|VVVVxx
+7082|5888|0|2|2|2|82|82|1082|2082|7082|164|165|KMAAAA|MSIAAA|AAAAxx
+4719|5889|1|3|9|19|19|719|719|4719|4719|38|39|NZAAAA|NSIAAA|HHHHxx
+3879|5890|1|3|9|19|79|879|1879|3879|3879|158|159|FTAAAA|OSIAAA|OOOOxx
+1662|5891|0|2|2|2|62|662|1662|1662|1662|124|125|YLAAAA|PSIAAA|VVVVxx
+3995|5892|1|3|5|15|95|995|1995|3995|3995|190|191|RXAAAA|QSIAAA|AAAAxx
+5828|5893|0|0|8|8|28|828|1828|828|5828|56|57|EQAAAA|RSIAAA|HHHHxx
+4197|5894|1|1|7|17|97|197|197|4197|4197|194|195|LFAAAA|SSIAAA|OOOOxx
+5146|5895|0|2|6|6|46|146|1146|146|5146|92|93|YPAAAA|TSIAAA|VVVVxx
+753|5896|1|1|3|13|53|753|753|753|753|106|107|ZCAAAA|USIAAA|AAAAxx
+7064|5897|0|0|4|4|64|64|1064|2064|7064|128|129|SLAAAA|VSIAAA|HHHHxx
+1312|5898|0|0|2|12|12|312|1312|1312|1312|24|25|MYAAAA|WSIAAA|OOOOxx
+5573|5899|1|1|3|13|73|573|1573|573|5573|146|147|JGAAAA|XSIAAA|VVVVxx
+7634|5900|0|2|4|14|34|634|1634|2634|7634|68|69|QHAAAA|YSIAAA|AAAAxx
+2459|5901|1|3|9|19|59|459|459|2459|2459|118|119|PQAAAA|ZSIAAA|HHHHxx
+8636|5902|0|0|6|16|36|636|636|3636|8636|72|73|EUAAAA|ATIAAA|OOOOxx
+5318|5903|0|2|8|18|18|318|1318|318|5318|36|37|OWAAAA|BTIAAA|VVVVxx
+1064|5904|0|0|4|4|64|64|1064|1064|1064|128|129|YOAAAA|CTIAAA|AAAAxx
+9779|5905|1|3|9|19|79|779|1779|4779|9779|158|159|DMAAAA|DTIAAA|HHHHxx
+6512|5906|0|0|2|12|12|512|512|1512|6512|24|25|MQAAAA|ETIAAA|OOOOxx
+3572|5907|0|0|2|12|72|572|1572|3572|3572|144|145|KHAAAA|FTIAAA|VVVVxx
+816|5908|0|0|6|16|16|816|816|816|816|32|33|KFAAAA|GTIAAA|AAAAxx
+3978|5909|0|2|8|18|78|978|1978|3978|3978|156|157|AXAAAA|HTIAAA|HHHHxx
+5390|5910|0|2|0|10|90|390|1390|390|5390|180|181|IZAAAA|ITIAAA|OOOOxx
+4685|5911|1|1|5|5|85|685|685|4685|4685|170|171|FYAAAA|JTIAAA|VVVVxx
+3003|5912|1|3|3|3|3|3|1003|3003|3003|6|7|NLAAAA|KTIAAA|AAAAxx
+2638|5913|0|2|8|18|38|638|638|2638|2638|76|77|MXAAAA|LTIAAA|HHHHxx
+9716|5914|0|0|6|16|16|716|1716|4716|9716|32|33|SJAAAA|MTIAAA|OOOOxx
+9598|5915|0|2|8|18|98|598|1598|4598|9598|196|197|EFAAAA|NTIAAA|VVVVxx
+9501|5916|1|1|1|1|1|501|1501|4501|9501|2|3|LBAAAA|OTIAAA|AAAAxx
+1704|5917|0|0|4|4|4|704|1704|1704|1704|8|9|ONAAAA|PTIAAA|HHHHxx
+8609|5918|1|1|9|9|9|609|609|3609|8609|18|19|DTAAAA|QTIAAA|OOOOxx
+5211|5919|1|3|1|11|11|211|1211|211|5211|22|23|LSAAAA|RTIAAA|VVVVxx
+3605|5920|1|1|5|5|5|605|1605|3605|3605|10|11|RIAAAA|STIAAA|AAAAxx
+8730|5921|0|2|0|10|30|730|730|3730|8730|60|61|UXAAAA|TTIAAA|HHHHxx
+4208|5922|0|0|8|8|8|208|208|4208|4208|16|17|WFAAAA|UTIAAA|OOOOxx
+7784|5923|0|0|4|4|84|784|1784|2784|7784|168|169|KNAAAA|VTIAAA|VVVVxx
+7501|5924|1|1|1|1|1|501|1501|2501|7501|2|3|NCAAAA|WTIAAA|AAAAxx
+7862|5925|0|2|2|2|62|862|1862|2862|7862|124|125|KQAAAA|XTIAAA|HHHHxx
+8922|5926|0|2|2|2|22|922|922|3922|8922|44|45|EFAAAA|YTIAAA|OOOOxx
+3857|5927|1|1|7|17|57|857|1857|3857|3857|114|115|JSAAAA|ZTIAAA|VVVVxx
+6393|5928|1|1|3|13|93|393|393|1393|6393|186|187|XLAAAA|AUIAAA|AAAAxx
+506|5929|0|2|6|6|6|506|506|506|506|12|13|MTAAAA|BUIAAA|HHHHxx
+4232|5930|0|0|2|12|32|232|232|4232|4232|64|65|UGAAAA|CUIAAA|OOOOxx
+8991|5931|1|3|1|11|91|991|991|3991|8991|182|183|VHAAAA|DUIAAA|VVVVxx
+8578|5932|0|2|8|18|78|578|578|3578|8578|156|157|YRAAAA|EUIAAA|AAAAxx
+3235|5933|1|3|5|15|35|235|1235|3235|3235|70|71|LUAAAA|FUIAAA|HHHHxx
+963|5934|1|3|3|3|63|963|963|963|963|126|127|BLAAAA|GUIAAA|OOOOxx
+113|5935|1|1|3|13|13|113|113|113|113|26|27|JEAAAA|HUIAAA|VVVVxx
+8234|5936|0|2|4|14|34|234|234|3234|8234|68|69|SEAAAA|IUIAAA|AAAAxx
+2613|5937|1|1|3|13|13|613|613|2613|2613|26|27|NWAAAA|JUIAAA|HHHHxx
+5540|5938|0|0|0|0|40|540|1540|540|5540|80|81|CFAAAA|KUIAAA|OOOOxx
+9727|5939|1|3|7|7|27|727|1727|4727|9727|54|55|DKAAAA|LUIAAA|VVVVxx
+2229|5940|1|1|9|9|29|229|229|2229|2229|58|59|THAAAA|MUIAAA|AAAAxx
+6242|5941|0|2|2|2|42|242|242|1242|6242|84|85|CGAAAA|NUIAAA|HHHHxx
+2502|5942|0|2|2|2|2|502|502|2502|2502|4|5|GSAAAA|OUIAAA|OOOOxx
+6212|5943|0|0|2|12|12|212|212|1212|6212|24|25|YEAAAA|PUIAAA|VVVVxx
+3495|5944|1|3|5|15|95|495|1495|3495|3495|190|191|LEAAAA|QUIAAA|AAAAxx
+2364|5945|0|0|4|4|64|364|364|2364|2364|128|129|YMAAAA|RUIAAA|HHHHxx
+6777|5946|1|1|7|17|77|777|777|1777|6777|154|155|RAAAAA|SUIAAA|OOOOxx
+9811|5947|1|3|1|11|11|811|1811|4811|9811|22|23|JNAAAA|TUIAAA|VVVVxx
+1450|5948|0|2|0|10|50|450|1450|1450|1450|100|101|UDAAAA|UUIAAA|AAAAxx
+5008|5949|0|0|8|8|8|8|1008|8|5008|16|17|QKAAAA|VUIAAA|HHHHxx
+1318|5950|0|2|8|18|18|318|1318|1318|1318|36|37|SYAAAA|WUIAAA|OOOOxx
+3373|5951|1|1|3|13|73|373|1373|3373|3373|146|147|TZAAAA|XUIAAA|VVVVxx
+398|5952|0|2|8|18|98|398|398|398|398|196|197|IPAAAA|YUIAAA|AAAAxx
+3804|5953|0|0|4|4|4|804|1804|3804|3804|8|9|IQAAAA|ZUIAAA|HHHHxx
+9148|5954|0|0|8|8|48|148|1148|4148|9148|96|97|WNAAAA|AVIAAA|OOOOxx
+4382|5955|0|2|2|2|82|382|382|4382|4382|164|165|OMAAAA|BVIAAA|VVVVxx
+4026|5956|0|2|6|6|26|26|26|4026|4026|52|53|WYAAAA|CVIAAA|AAAAxx
+7804|5957|0|0|4|4|4|804|1804|2804|7804|8|9|EOAAAA|DVIAAA|HHHHxx
+6839|5958|1|3|9|19|39|839|839|1839|6839|78|79|BDAAAA|EVIAAA|OOOOxx
+3756|5959|0|0|6|16|56|756|1756|3756|3756|112|113|MOAAAA|FVIAAA|VVVVxx
+6734|5960|0|2|4|14|34|734|734|1734|6734|68|69|AZAAAA|GVIAAA|AAAAxx
+2228|5961|0|0|8|8|28|228|228|2228|2228|56|57|SHAAAA|HVIAAA|HHHHxx
+3273|5962|1|1|3|13|73|273|1273|3273|3273|146|147|XVAAAA|IVIAAA|OOOOxx
+3708|5963|0|0|8|8|8|708|1708|3708|3708|16|17|QMAAAA|JVIAAA|VVVVxx
+4320|5964|0|0|0|0|20|320|320|4320|4320|40|41|EKAAAA|KVIAAA|AAAAxx
+74|5965|0|2|4|14|74|74|74|74|74|148|149|WCAAAA|LVIAAA|HHHHxx
+2520|5966|0|0|0|0|20|520|520|2520|2520|40|41|YSAAAA|MVIAAA|OOOOxx
+9619|5967|1|3|9|19|19|619|1619|4619|9619|38|39|ZFAAAA|NVIAAA|VVVVxx
+1801|5968|1|1|1|1|1|801|1801|1801|1801|2|3|HRAAAA|OVIAAA|AAAAxx
+6399|5969|1|3|9|19|99|399|399|1399|6399|198|199|DMAAAA|PVIAAA|HHHHxx
+8313|5970|1|1|3|13|13|313|313|3313|8313|26|27|THAAAA|QVIAAA|OOOOxx
+7003|5971|1|3|3|3|3|3|1003|2003|7003|6|7|JJAAAA|RVIAAA|VVVVxx
+329|5972|1|1|9|9|29|329|329|329|329|58|59|RMAAAA|SVIAAA|AAAAxx
+9090|5973|0|2|0|10|90|90|1090|4090|9090|180|181|QLAAAA|TVIAAA|HHHHxx
+2299|5974|1|3|9|19|99|299|299|2299|2299|198|199|LKAAAA|UVIAAA|OOOOxx
+3925|5975|1|1|5|5|25|925|1925|3925|3925|50|51|ZUAAAA|VVIAAA|VVVVxx
+8145|5976|1|1|5|5|45|145|145|3145|8145|90|91|HBAAAA|WVIAAA|AAAAxx
+8561|5977|1|1|1|1|61|561|561|3561|8561|122|123|HRAAAA|XVIAAA|HHHHxx
+2797|5978|1|1|7|17|97|797|797|2797|2797|194|195|PDAAAA|YVIAAA|OOOOxx
+1451|5979|1|3|1|11|51|451|1451|1451|1451|102|103|VDAAAA|ZVIAAA|VVVVxx
+7977|5980|1|1|7|17|77|977|1977|2977|7977|154|155|VUAAAA|AWIAAA|AAAAxx
+112|5981|0|0|2|12|12|112|112|112|112|24|25|IEAAAA|BWIAAA|HHHHxx
+5265|5982|1|1|5|5|65|265|1265|265|5265|130|131|NUAAAA|CWIAAA|OOOOxx
+3819|5983|1|3|9|19|19|819|1819|3819|3819|38|39|XQAAAA|DWIAAA|VVVVxx
+3648|5984|0|0|8|8|48|648|1648|3648|3648|96|97|IKAAAA|EWIAAA|AAAAxx
+6306|5985|0|2|6|6|6|306|306|1306|6306|12|13|OIAAAA|FWIAAA|HHHHxx
+2385|5986|1|1|5|5|85|385|385|2385|2385|170|171|TNAAAA|GWIAAA|OOOOxx
+9084|5987|0|0|4|4|84|84|1084|4084|9084|168|169|KLAAAA|HWIAAA|VVVVxx
+4499|5988|1|3|9|19|99|499|499|4499|4499|198|199|BRAAAA|IWIAAA|AAAAxx
+1154|5989|0|2|4|14|54|154|1154|1154|1154|108|109|KSAAAA|JWIAAA|HHHHxx
+6800|5990|0|0|0|0|0|800|800|1800|6800|0|1|OBAAAA|KWIAAA|OOOOxx
+8049|5991|1|1|9|9|49|49|49|3049|8049|98|99|PXAAAA|LWIAAA|VVVVxx
+3733|5992|1|1|3|13|33|733|1733|3733|3733|66|67|PNAAAA|MWIAAA|AAAAxx
+8496|5993|0|0|6|16|96|496|496|3496|8496|192|193|UOAAAA|NWIAAA|HHHHxx
+9952|5994|0|0|2|12|52|952|1952|4952|9952|104|105|USAAAA|OWIAAA|OOOOxx
+9792|5995|0|0|2|12|92|792|1792|4792|9792|184|185|QMAAAA|PWIAAA|VVVVxx
+5081|5996|1|1|1|1|81|81|1081|81|5081|162|163|LNAAAA|QWIAAA|AAAAxx
+7908|5997|0|0|8|8|8|908|1908|2908|7908|16|17|ESAAAA|RWIAAA|HHHHxx
+5398|5998|0|2|8|18|98|398|1398|398|5398|196|197|QZAAAA|SWIAAA|OOOOxx
+8423|5999|1|3|3|3|23|423|423|3423|8423|46|47|ZLAAAA|TWIAAA|VVVVxx
+3362|6000|0|2|2|2|62|362|1362|3362|3362|124|125|IZAAAA|UWIAAA|AAAAxx
+7767|6001|1|3|7|7|67|767|1767|2767|7767|134|135|TMAAAA|VWIAAA|HHHHxx
+7063|6002|1|3|3|3|63|63|1063|2063|7063|126|127|RLAAAA|WWIAAA|OOOOxx
+8350|6003|0|2|0|10|50|350|350|3350|8350|100|101|EJAAAA|XWIAAA|VVVVxx
+6779|6004|1|3|9|19|79|779|779|1779|6779|158|159|TAAAAA|YWIAAA|AAAAxx
+5742|6005|0|2|2|2|42|742|1742|742|5742|84|85|WMAAAA|ZWIAAA|HHHHxx
+9045|6006|1|1|5|5|45|45|1045|4045|9045|90|91|XJAAAA|AXIAAA|OOOOxx
+8792|6007|0|0|2|12|92|792|792|3792|8792|184|185|EAAAAA|BXIAAA|VVVVxx
+8160|6008|0|0|0|0|60|160|160|3160|8160|120|121|WBAAAA|CXIAAA|AAAAxx
+3061|6009|1|1|1|1|61|61|1061|3061|3061|122|123|TNAAAA|DXIAAA|HHHHxx
+4721|6010|1|1|1|1|21|721|721|4721|4721|42|43|PZAAAA|EXIAAA|OOOOxx
+9817|6011|1|1|7|17|17|817|1817|4817|9817|34|35|PNAAAA|FXIAAA|VVVVxx
+9257|6012|1|1|7|17|57|257|1257|4257|9257|114|115|BSAAAA|GXIAAA|AAAAxx
+7779|6013|1|3|9|19|79|779|1779|2779|7779|158|159|FNAAAA|HXIAAA|HHHHxx
+2663|6014|1|3|3|3|63|663|663|2663|2663|126|127|LYAAAA|IXIAAA|OOOOxx
+3885|6015|1|1|5|5|85|885|1885|3885|3885|170|171|LTAAAA|JXIAAA|VVVVxx
+9469|6016|1|1|9|9|69|469|1469|4469|9469|138|139|FAAAAA|KXIAAA|AAAAxx
+6766|6017|0|2|6|6|66|766|766|1766|6766|132|133|GAAAAA|LXIAAA|HHHHxx
+7173|6018|1|1|3|13|73|173|1173|2173|7173|146|147|XPAAAA|MXIAAA|OOOOxx
+4709|6019|1|1|9|9|9|709|709|4709|4709|18|19|DZAAAA|NXIAAA|VVVVxx
+4210|6020|0|2|0|10|10|210|210|4210|4210|20|21|YFAAAA|OXIAAA|AAAAxx
+3715|6021|1|3|5|15|15|715|1715|3715|3715|30|31|XMAAAA|PXIAAA|HHHHxx
+5089|6022|1|1|9|9|89|89|1089|89|5089|178|179|TNAAAA|QXIAAA|OOOOxx
+1639|6023|1|3|9|19|39|639|1639|1639|1639|78|79|BLAAAA|RXIAAA|VVVVxx
+5757|6024|1|1|7|17|57|757|1757|757|5757|114|115|LNAAAA|SXIAAA|AAAAxx
+3545|6025|1|1|5|5|45|545|1545|3545|3545|90|91|JGAAAA|TXIAAA|HHHHxx
+709|6026|1|1|9|9|9|709|709|709|709|18|19|HBAAAA|UXIAAA|OOOOxx
+6519|6027|1|3|9|19|19|519|519|1519|6519|38|39|TQAAAA|VXIAAA|VVVVxx
+4341|6028|1|1|1|1|41|341|341|4341|4341|82|83|ZKAAAA|WXIAAA|AAAAxx
+2381|6029|1|1|1|1|81|381|381|2381|2381|162|163|PNAAAA|XXIAAA|HHHHxx
+7215|6030|1|3|5|15|15|215|1215|2215|7215|30|31|NRAAAA|YXIAAA|OOOOxx
+9323|6031|1|3|3|3|23|323|1323|4323|9323|46|47|PUAAAA|ZXIAAA|VVVVxx
+3593|6032|1|1|3|13|93|593|1593|3593|3593|186|187|FIAAAA|AYIAAA|AAAAxx
+3123|6033|1|3|3|3|23|123|1123|3123|3123|46|47|DQAAAA|BYIAAA|HHHHxx
+8673|6034|1|1|3|13|73|673|673|3673|8673|146|147|PVAAAA|CYIAAA|OOOOxx
+5094|6035|0|2|4|14|94|94|1094|94|5094|188|189|YNAAAA|DYIAAA|VVVVxx
+6477|6036|1|1|7|17|77|477|477|1477|6477|154|155|DPAAAA|EYIAAA|AAAAxx
+9734|6037|0|2|4|14|34|734|1734|4734|9734|68|69|KKAAAA|FYIAAA|HHHHxx
+2998|6038|0|2|8|18|98|998|998|2998|2998|196|197|ILAAAA|GYIAAA|OOOOxx
+7807|6039|1|3|7|7|7|807|1807|2807|7807|14|15|HOAAAA|HYIAAA|VVVVxx
+5739|6040|1|3|9|19|39|739|1739|739|5739|78|79|TMAAAA|IYIAAA|AAAAxx
+138|6041|0|2|8|18|38|138|138|138|138|76|77|IFAAAA|JYIAAA|HHHHxx
+2403|6042|1|3|3|3|3|403|403|2403|2403|6|7|LOAAAA|KYIAAA|OOOOxx
+2484|6043|0|0|4|4|84|484|484|2484|2484|168|169|ORAAAA|LYIAAA|VVVVxx
+2805|6044|1|1|5|5|5|805|805|2805|2805|10|11|XDAAAA|MYIAAA|AAAAxx
+5189|6045|1|1|9|9|89|189|1189|189|5189|178|179|PRAAAA|NYIAAA|HHHHxx
+8336|6046|0|0|6|16|36|336|336|3336|8336|72|73|QIAAAA|OYIAAA|OOOOxx
+5241|6047|1|1|1|1|41|241|1241|241|5241|82|83|PTAAAA|PYIAAA|VVVVxx
+2612|6048|0|0|2|12|12|612|612|2612|2612|24|25|MWAAAA|QYIAAA|AAAAxx
+2571|6049|1|3|1|11|71|571|571|2571|2571|142|143|XUAAAA|RYIAAA|HHHHxx
+926|6050|0|2|6|6|26|926|926|926|926|52|53|QJAAAA|SYIAAA|OOOOxx
+337|6051|1|1|7|17|37|337|337|337|337|74|75|ZMAAAA|TYIAAA|VVVVxx
+2821|6052|1|1|1|1|21|821|821|2821|2821|42|43|NEAAAA|UYIAAA|AAAAxx
+2658|6053|0|2|8|18|58|658|658|2658|2658|116|117|GYAAAA|VYIAAA|HHHHxx
+9054|6054|0|2|4|14|54|54|1054|4054|9054|108|109|GKAAAA|WYIAAA|OOOOxx
+5492|6055|0|0|2|12|92|492|1492|492|5492|184|185|GDAAAA|XYIAAA|VVVVxx
+7313|6056|1|1|3|13|13|313|1313|2313|7313|26|27|HVAAAA|YYIAAA|AAAAxx
+75|6057|1|3|5|15|75|75|75|75|75|150|151|XCAAAA|ZYIAAA|HHHHxx
+5489|6058|1|1|9|9|89|489|1489|489|5489|178|179|DDAAAA|AZIAAA|OOOOxx
+8413|6059|1|1|3|13|13|413|413|3413|8413|26|27|PLAAAA|BZIAAA|VVVVxx
+3693|6060|1|1|3|13|93|693|1693|3693|3693|186|187|BMAAAA|CZIAAA|AAAAxx
+9820|6061|0|0|0|0|20|820|1820|4820|9820|40|41|SNAAAA|DZIAAA|HHHHxx
+8157|6062|1|1|7|17|57|157|157|3157|8157|114|115|TBAAAA|EZIAAA|OOOOxx
+4161|6063|1|1|1|1|61|161|161|4161|4161|122|123|BEAAAA|FZIAAA|VVVVxx
+8339|6064|1|3|9|19|39|339|339|3339|8339|78|79|TIAAAA|GZIAAA|AAAAxx
+4141|6065|1|1|1|1|41|141|141|4141|4141|82|83|HDAAAA|HZIAAA|HHHHxx
+9001|6066|1|1|1|1|1|1|1001|4001|9001|2|3|FIAAAA|IZIAAA|OOOOxx
+8247|6067|1|3|7|7|47|247|247|3247|8247|94|95|FFAAAA|JZIAAA|VVVVxx
+1182|6068|0|2|2|2|82|182|1182|1182|1182|164|165|MTAAAA|KZIAAA|AAAAxx
+9876|6069|0|0|6|16|76|876|1876|4876|9876|152|153|WPAAAA|LZIAAA|HHHHxx
+4302|6070|0|2|2|2|2|302|302|4302|4302|4|5|MJAAAA|MZIAAA|OOOOxx
+6674|6071|0|2|4|14|74|674|674|1674|6674|148|149|SWAAAA|NZIAAA|VVVVxx
+4214|6072|0|2|4|14|14|214|214|4214|4214|28|29|CGAAAA|OZIAAA|AAAAxx
+5584|6073|0|0|4|4|84|584|1584|584|5584|168|169|UGAAAA|PZIAAA|HHHHxx
+265|6074|1|1|5|5|65|265|265|265|265|130|131|FKAAAA|QZIAAA|OOOOxx
+9207|6075|1|3|7|7|7|207|1207|4207|9207|14|15|DQAAAA|RZIAAA|VVVVxx
+9434|6076|0|2|4|14|34|434|1434|4434|9434|68|69|WYAAAA|SZIAAA|AAAAxx
+2921|6077|1|1|1|1|21|921|921|2921|2921|42|43|JIAAAA|TZIAAA|HHHHxx
+9355|6078|1|3|5|15|55|355|1355|4355|9355|110|111|VVAAAA|UZIAAA|OOOOxx
+8538|6079|0|2|8|18|38|538|538|3538|8538|76|77|KQAAAA|VZIAAA|VVVVxx
+4559|6080|1|3|9|19|59|559|559|4559|4559|118|119|JTAAAA|WZIAAA|AAAAxx
+9175|6081|1|3|5|15|75|175|1175|4175|9175|150|151|XOAAAA|XZIAAA|HHHHxx
+4489|6082|1|1|9|9|89|489|489|4489|4489|178|179|RQAAAA|YZIAAA|OOOOxx
+1485|6083|1|1|5|5|85|485|1485|1485|1485|170|171|DFAAAA|ZZIAAA|VVVVxx
+8853|6084|1|1|3|13|53|853|853|3853|8853|106|107|NCAAAA|AAJAAA|AAAAxx
+9143|6085|1|3|3|3|43|143|1143|4143|9143|86|87|RNAAAA|BAJAAA|HHHHxx
+9551|6086|1|3|1|11|51|551|1551|4551|9551|102|103|JDAAAA|CAJAAA|OOOOxx
+49|6087|1|1|9|9|49|49|49|49|49|98|99|XBAAAA|DAJAAA|VVVVxx
+8351|6088|1|3|1|11|51|351|351|3351|8351|102|103|FJAAAA|EAJAAA|AAAAxx
+9748|6089|0|0|8|8|48|748|1748|4748|9748|96|97|YKAAAA|FAJAAA|HHHHxx
+4536|6090|0|0|6|16|36|536|536|4536|4536|72|73|MSAAAA|GAJAAA|OOOOxx
+930|6091|0|2|0|10|30|930|930|930|930|60|61|UJAAAA|HAJAAA|VVVVxx
+2206|6092|0|2|6|6|6|206|206|2206|2206|12|13|WGAAAA|IAJAAA|AAAAxx
+8004|6093|0|0|4|4|4|4|4|3004|8004|8|9|WVAAAA|JAJAAA|HHHHxx
+219|6094|1|3|9|19|19|219|219|219|219|38|39|LIAAAA|KAJAAA|OOOOxx
+2724|6095|0|0|4|4|24|724|724|2724|2724|48|49|UAAAAA|LAJAAA|VVVVxx
+4868|6096|0|0|8|8|68|868|868|4868|4868|136|137|GFAAAA|MAJAAA|AAAAxx
+5952|6097|0|0|2|12|52|952|1952|952|5952|104|105|YUAAAA|NAJAAA|HHHHxx
+2094|6098|0|2|4|14|94|94|94|2094|2094|188|189|OCAAAA|OAJAAA|OOOOxx
+5707|6099|1|3|7|7|7|707|1707|707|5707|14|15|NLAAAA|PAJAAA|VVVVxx
+5200|6100|0|0|0|0|0|200|1200|200|5200|0|1|ASAAAA|QAJAAA|AAAAxx
+967|6101|1|3|7|7|67|967|967|967|967|134|135|FLAAAA|RAJAAA|HHHHxx
+1982|6102|0|2|2|2|82|982|1982|1982|1982|164|165|GYAAAA|SAJAAA|OOOOxx
+3410|6103|0|2|0|10|10|410|1410|3410|3410|20|21|EBAAAA|TAJAAA|VVVVxx
+174|6104|0|2|4|14|74|174|174|174|174|148|149|SGAAAA|UAJAAA|AAAAxx
+9217|6105|1|1|7|17|17|217|1217|4217|9217|34|35|NQAAAA|VAJAAA|HHHHxx
+9103|6106|1|3|3|3|3|103|1103|4103|9103|6|7|DMAAAA|WAJAAA|OOOOxx
+868|6107|0|0|8|8|68|868|868|868|868|136|137|KHAAAA|XAJAAA|VVVVxx
+8261|6108|1|1|1|1|61|261|261|3261|8261|122|123|TFAAAA|YAJAAA|AAAAxx
+2720|6109|0|0|0|0|20|720|720|2720|2720|40|41|QAAAAA|ZAJAAA|HHHHxx
+2999|6110|1|3|9|19|99|999|999|2999|2999|198|199|JLAAAA|ABJAAA|OOOOxx
+769|6111|1|1|9|9|69|769|769|769|769|138|139|PDAAAA|BBJAAA|VVVVxx
+4533|6112|1|1|3|13|33|533|533|4533|4533|66|67|JSAAAA|CBJAAA|AAAAxx
+2030|6113|0|2|0|10|30|30|30|2030|2030|60|61|CAAAAA|DBJAAA|HHHHxx
+5824|6114|0|0|4|4|24|824|1824|824|5824|48|49|AQAAAA|EBJAAA|OOOOxx
+2328|6115|0|0|8|8|28|328|328|2328|2328|56|57|OLAAAA|FBJAAA|VVVVxx
+9970|6116|0|2|0|10|70|970|1970|4970|9970|140|141|MTAAAA|GBJAAA|AAAAxx
+3192|6117|0|0|2|12|92|192|1192|3192|3192|184|185|USAAAA|HBJAAA|HHHHxx
+3387|6118|1|3|7|7|87|387|1387|3387|3387|174|175|HAAAAA|IBJAAA|OOOOxx
+1936|6119|0|0|6|16|36|936|1936|1936|1936|72|73|MWAAAA|JBJAAA|VVVVxx
+6934|6120|0|2|4|14|34|934|934|1934|6934|68|69|SGAAAA|KBJAAA|AAAAxx
+5615|6121|1|3|5|15|15|615|1615|615|5615|30|31|ZHAAAA|LBJAAA|HHHHxx
+2241|6122|1|1|1|1|41|241|241|2241|2241|82|83|FIAAAA|MBJAAA|OOOOxx
+1842|6123|0|2|2|2|42|842|1842|1842|1842|84|85|WSAAAA|NBJAAA|VVVVxx
+8044|6124|0|0|4|4|44|44|44|3044|8044|88|89|KXAAAA|OBJAAA|AAAAxx
+8902|6125|0|2|2|2|2|902|902|3902|8902|4|5|KEAAAA|PBJAAA|HHHHxx
+4519|6126|1|3|9|19|19|519|519|4519|4519|38|39|VRAAAA|QBJAAA|OOOOxx
+492|6127|0|0|2|12|92|492|492|492|492|184|185|YSAAAA|RBJAAA|VVVVxx
+2694|6128|0|2|4|14|94|694|694|2694|2694|188|189|QZAAAA|SBJAAA|AAAAxx
+5861|6129|1|1|1|1|61|861|1861|861|5861|122|123|LRAAAA|TBJAAA|HHHHxx
+2104|6130|0|0|4|4|4|104|104|2104|2104|8|9|YCAAAA|UBJAAA|OOOOxx
+5376|6131|0|0|6|16|76|376|1376|376|5376|152|153|UYAAAA|VBJAAA|VVVVxx
+3147|6132|1|3|7|7|47|147|1147|3147|3147|94|95|BRAAAA|WBJAAA|AAAAxx
+9880|6133|0|0|0|0|80|880|1880|4880|9880|160|161|AQAAAA|XBJAAA|HHHHxx
+6171|6134|1|3|1|11|71|171|171|1171|6171|142|143|JDAAAA|YBJAAA|OOOOxx
+1850|6135|0|2|0|10|50|850|1850|1850|1850|100|101|ETAAAA|ZBJAAA|VVVVxx
+1775|6136|1|3|5|15|75|775|1775|1775|1775|150|151|HQAAAA|ACJAAA|AAAAxx
+9261|6137|1|1|1|1|61|261|1261|4261|9261|122|123|FSAAAA|BCJAAA|HHHHxx
+9648|6138|0|0|8|8|48|648|1648|4648|9648|96|97|CHAAAA|CCJAAA|OOOOxx
+7846|6139|0|2|6|6|46|846|1846|2846|7846|92|93|UPAAAA|DCJAAA|VVVVxx
+1446|6140|0|2|6|6|46|446|1446|1446|1446|92|93|QDAAAA|ECJAAA|AAAAxx
+3139|6141|1|3|9|19|39|139|1139|3139|3139|78|79|TQAAAA|FCJAAA|HHHHxx
+6142|6142|0|2|2|2|42|142|142|1142|6142|84|85|GCAAAA|GCJAAA|OOOOxx
+5812|6143|0|0|2|12|12|812|1812|812|5812|24|25|OPAAAA|HCJAAA|VVVVxx
+6728|6144|0|0|8|8|28|728|728|1728|6728|56|57|UYAAAA|ICJAAA|AAAAxx
+4428|6145|0|0|8|8|28|428|428|4428|4428|56|57|IOAAAA|JCJAAA|HHHHxx
+502|6146|0|2|2|2|2|502|502|502|502|4|5|ITAAAA|KCJAAA|OOOOxx
+2363|6147|1|3|3|3|63|363|363|2363|2363|126|127|XMAAAA|LCJAAA|VVVVxx
+3808|6148|0|0|8|8|8|808|1808|3808|3808|16|17|MQAAAA|MCJAAA|AAAAxx
+1010|6149|0|2|0|10|10|10|1010|1010|1010|20|21|WMAAAA|NCJAAA|HHHHxx
+9565|6150|1|1|5|5|65|565|1565|4565|9565|130|131|XDAAAA|OCJAAA|OOOOxx
+1587|6151|1|3|7|7|87|587|1587|1587|1587|174|175|BJAAAA|PCJAAA|VVVVxx
+1474|6152|0|2|4|14|74|474|1474|1474|1474|148|149|SEAAAA|QCJAAA|AAAAxx
+6215|6153|1|3|5|15|15|215|215|1215|6215|30|31|BFAAAA|RCJAAA|HHHHxx
+2395|6154|1|3|5|15|95|395|395|2395|2395|190|191|DOAAAA|SCJAAA|OOOOxx
+8753|6155|1|1|3|13|53|753|753|3753|8753|106|107|RYAAAA|TCJAAA|VVVVxx
+2446|6156|0|2|6|6|46|446|446|2446|2446|92|93|CQAAAA|UCJAAA|AAAAxx
+60|6157|0|0|0|0|60|60|60|60|60|120|121|ICAAAA|VCJAAA|HHHHxx
+982|6158|0|2|2|2|82|982|982|982|982|164|165|ULAAAA|WCJAAA|OOOOxx
+6489|6159|1|1|9|9|89|489|489|1489|6489|178|179|PPAAAA|XCJAAA|VVVVxx
+5334|6160|0|2|4|14|34|334|1334|334|5334|68|69|EXAAAA|YCJAAA|AAAAxx
+8540|6161|0|0|0|0|40|540|540|3540|8540|80|81|MQAAAA|ZCJAAA|HHHHxx
+490|6162|0|2|0|10|90|490|490|490|490|180|181|WSAAAA|ADJAAA|OOOOxx
+6763|6163|1|3|3|3|63|763|763|1763|6763|126|127|DAAAAA|BDJAAA|VVVVxx
+8273|6164|1|1|3|13|73|273|273|3273|8273|146|147|FGAAAA|CDJAAA|AAAAxx
+8327|6165|1|3|7|7|27|327|327|3327|8327|54|55|HIAAAA|DDJAAA|HHHHxx
+8541|6166|1|1|1|1|41|541|541|3541|8541|82|83|NQAAAA|EDJAAA|OOOOxx
+3459|6167|1|3|9|19|59|459|1459|3459|3459|118|119|BDAAAA|FDJAAA|VVVVxx
+5557|6168|1|1|7|17|57|557|1557|557|5557|114|115|TFAAAA|GDJAAA|AAAAxx
+158|6169|0|2|8|18|58|158|158|158|158|116|117|CGAAAA|HDJAAA|HHHHxx
+1741|6170|1|1|1|1|41|741|1741|1741|1741|82|83|ZOAAAA|IDJAAA|OOOOxx
+8385|6171|1|1|5|5|85|385|385|3385|8385|170|171|NKAAAA|JDJAAA|VVVVxx
+617|6172|1|1|7|17|17|617|617|617|617|34|35|TXAAAA|KDJAAA|AAAAxx
+3560|6173|0|0|0|0|60|560|1560|3560|3560|120|121|YGAAAA|LDJAAA|HHHHxx
+5216|6174|0|0|6|16|16|216|1216|216|5216|32|33|QSAAAA|MDJAAA|OOOOxx
+8443|6175|1|3|3|3|43|443|443|3443|8443|86|87|TMAAAA|NDJAAA|VVVVxx
+2700|6176|0|0|0|0|0|700|700|2700|2700|0|1|WZAAAA|ODJAAA|AAAAxx
+3661|6177|1|1|1|1|61|661|1661|3661|3661|122|123|VKAAAA|PDJAAA|HHHHxx
+4875|6178|1|3|5|15|75|875|875|4875|4875|150|151|NFAAAA|QDJAAA|OOOOxx
+6721|6179|1|1|1|1|21|721|721|1721|6721|42|43|NYAAAA|RDJAAA|VVVVxx
+3659|6180|1|3|9|19|59|659|1659|3659|3659|118|119|TKAAAA|SDJAAA|AAAAxx
+8944|6181|0|0|4|4|44|944|944|3944|8944|88|89|AGAAAA|TDJAAA|HHHHxx
+9133|6182|1|1|3|13|33|133|1133|4133|9133|66|67|HNAAAA|UDJAAA|OOOOxx
+9882|6183|0|2|2|2|82|882|1882|4882|9882|164|165|CQAAAA|VDJAAA|VVVVxx
+2102|6184|0|2|2|2|2|102|102|2102|2102|4|5|WCAAAA|WDJAAA|AAAAxx
+9445|6185|1|1|5|5|45|445|1445|4445|9445|90|91|HZAAAA|XDJAAA|HHHHxx
+5559|6186|1|3|9|19|59|559|1559|559|5559|118|119|VFAAAA|YDJAAA|OOOOxx
+6096|6187|0|0|6|16|96|96|96|1096|6096|192|193|MAAAAA|ZDJAAA|VVVVxx
+9336|6188|0|0|6|16|36|336|1336|4336|9336|72|73|CVAAAA|AEJAAA|AAAAxx
+2162|6189|0|2|2|2|62|162|162|2162|2162|124|125|EFAAAA|BEJAAA|HHHHxx
+7459|6190|1|3|9|19|59|459|1459|2459|7459|118|119|XAAAAA|CEJAAA|OOOOxx
+3248|6191|0|0|8|8|48|248|1248|3248|3248|96|97|YUAAAA|DEJAAA|VVVVxx
+9539|6192|1|3|9|19|39|539|1539|4539|9539|78|79|XCAAAA|EEJAAA|AAAAxx
+4449|6193|1|1|9|9|49|449|449|4449|4449|98|99|DPAAAA|FEJAAA|HHHHxx
+2809|6194|1|1|9|9|9|809|809|2809|2809|18|19|BEAAAA|GEJAAA|OOOOxx
+7058|6195|0|2|8|18|58|58|1058|2058|7058|116|117|MLAAAA|HEJAAA|VVVVxx
+3512|6196|0|0|2|12|12|512|1512|3512|3512|24|25|CFAAAA|IEJAAA|AAAAxx
+2802|6197|0|2|2|2|2|802|802|2802|2802|4|5|UDAAAA|JEJAAA|HHHHxx
+6289|6198|1|1|9|9|89|289|289|1289|6289|178|179|XHAAAA|KEJAAA|OOOOxx
+1947|6199|1|3|7|7|47|947|1947|1947|1947|94|95|XWAAAA|LEJAAA|VVVVxx
+9572|6200|0|0|2|12|72|572|1572|4572|9572|144|145|EEAAAA|MEJAAA|AAAAxx
+2356|6201|0|0|6|16|56|356|356|2356|2356|112|113|QMAAAA|NEJAAA|HHHHxx
+3039|6202|1|3|9|19|39|39|1039|3039|3039|78|79|XMAAAA|OEJAAA|OOOOxx
+9452|6203|0|0|2|12|52|452|1452|4452|9452|104|105|OZAAAA|PEJAAA|VVVVxx
+6328|6204|0|0|8|8|28|328|328|1328|6328|56|57|KJAAAA|QEJAAA|AAAAxx
+7661|6205|1|1|1|1|61|661|1661|2661|7661|122|123|RIAAAA|REJAAA|HHHHxx
+2566|6206|0|2|6|6|66|566|566|2566|2566|132|133|SUAAAA|SEJAAA|OOOOxx
+6095|6207|1|3|5|15|95|95|95|1095|6095|190|191|LAAAAA|TEJAAA|VVVVxx
+6367|6208|1|3|7|7|67|367|367|1367|6367|134|135|XKAAAA|UEJAAA|AAAAxx
+3368|6209|0|0|8|8|68|368|1368|3368|3368|136|137|OZAAAA|VEJAAA|HHHHxx
+5567|6210|1|3|7|7|67|567|1567|567|5567|134|135|DGAAAA|WEJAAA|OOOOxx
+9834|6211|0|2|4|14|34|834|1834|4834|9834|68|69|GOAAAA|XEJAAA|VVVVxx
+9695|6212|1|3|5|15|95|695|1695|4695|9695|190|191|XIAAAA|YEJAAA|AAAAxx
+7291|6213|1|3|1|11|91|291|1291|2291|7291|182|183|LUAAAA|ZEJAAA|HHHHxx
+4806|6214|0|2|6|6|6|806|806|4806|4806|12|13|WCAAAA|AFJAAA|OOOOxx
+2000|6215|0|0|0|0|0|0|0|2000|2000|0|1|YYAAAA|BFJAAA|VVVVxx
+6817|6216|1|1|7|17|17|817|817|1817|6817|34|35|FCAAAA|CFJAAA|AAAAxx
+8487|6217|1|3|7|7|87|487|487|3487|8487|174|175|LOAAAA|DFJAAA|HHHHxx
+3245|6218|1|1|5|5|45|245|1245|3245|3245|90|91|VUAAAA|EFJAAA|OOOOxx
+632|6219|0|0|2|12|32|632|632|632|632|64|65|IYAAAA|FFJAAA|VVVVxx
+8067|6220|1|3|7|7|67|67|67|3067|8067|134|135|HYAAAA|GFJAAA|AAAAxx
+7140|6221|0|0|0|0|40|140|1140|2140|7140|80|81|QOAAAA|HFJAAA|HHHHxx
+6802|6222|0|2|2|2|2|802|802|1802|6802|4|5|QBAAAA|IFJAAA|OOOOxx
+3980|6223|0|0|0|0|80|980|1980|3980|3980|160|161|CXAAAA|JFJAAA|VVVVxx
+1321|6224|1|1|1|1|21|321|1321|1321|1321|42|43|VYAAAA|KFJAAA|AAAAxx
+2273|6225|1|1|3|13|73|273|273|2273|2273|146|147|LJAAAA|LFJAAA|HHHHxx
+6787|6226|1|3|7|7|87|787|787|1787|6787|174|175|BBAAAA|MFJAAA|OOOOxx
+9480|6227|0|0|0|0|80|480|1480|4480|9480|160|161|QAAAAA|NFJAAA|VVVVxx
+9404|6228|0|0|4|4|4|404|1404|4404|9404|8|9|SXAAAA|OFJAAA|AAAAxx
+3914|6229|0|2|4|14|14|914|1914|3914|3914|28|29|OUAAAA|PFJAAA|HHHHxx
+5507|6230|1|3|7|7|7|507|1507|507|5507|14|15|VDAAAA|QFJAAA|OOOOxx
+1813|6231|1|1|3|13|13|813|1813|1813|1813|26|27|TRAAAA|RFJAAA|VVVVxx
+1999|6232|1|3|9|19|99|999|1999|1999|1999|198|199|XYAAAA|SFJAAA|AAAAxx
+3848|6233|0|0|8|8|48|848|1848|3848|3848|96|97|ASAAAA|TFJAAA|HHHHxx
+9693|6234|1|1|3|13|93|693|1693|4693|9693|186|187|VIAAAA|UFJAAA|OOOOxx
+1353|6235|1|1|3|13|53|353|1353|1353|1353|106|107|BAAAAA|VFJAAA|VVVVxx
+7218|6236|0|2|8|18|18|218|1218|2218|7218|36|37|QRAAAA|WFJAAA|AAAAxx
+8223|6237|1|3|3|3|23|223|223|3223|8223|46|47|HEAAAA|XFJAAA|HHHHxx
+9982|6238|0|2|2|2|82|982|1982|4982|9982|164|165|YTAAAA|YFJAAA|OOOOxx
+8799|6239|1|3|9|19|99|799|799|3799|8799|198|199|LAAAAA|ZFJAAA|VVVVxx
+8929|6240|1|1|9|9|29|929|929|3929|8929|58|59|LFAAAA|AGJAAA|AAAAxx
+4626|6241|0|2|6|6|26|626|626|4626|4626|52|53|YVAAAA|BGJAAA|HHHHxx
+7958|6242|0|2|8|18|58|958|1958|2958|7958|116|117|CUAAAA|CGJAAA|OOOOxx
+3743|6243|1|3|3|3|43|743|1743|3743|3743|86|87|ZNAAAA|DGJAAA|VVVVxx
+8165|6244|1|1|5|5|65|165|165|3165|8165|130|131|BCAAAA|EGJAAA|AAAAxx
+7899|6245|1|3|9|19|99|899|1899|2899|7899|198|199|VRAAAA|FGJAAA|HHHHxx
+8698|6246|0|2|8|18|98|698|698|3698|8698|196|197|OWAAAA|GGJAAA|OOOOxx
+9270|6247|0|2|0|10|70|270|1270|4270|9270|140|141|OSAAAA|HGJAAA|VVVVxx
+6348|6248|0|0|8|8|48|348|348|1348|6348|96|97|EKAAAA|IGJAAA|AAAAxx
+6999|6249|1|3|9|19|99|999|999|1999|6999|198|199|FJAAAA|JGJAAA|HHHHxx
+8467|6250|1|3|7|7|67|467|467|3467|8467|134|135|RNAAAA|KGJAAA|OOOOxx
+3907|6251|1|3|7|7|7|907|1907|3907|3907|14|15|HUAAAA|LGJAAA|VVVVxx
+4738|6252|0|2|8|18|38|738|738|4738|4738|76|77|GAAAAA|MGJAAA|AAAAxx
+248|6253|0|0|8|8|48|248|248|248|248|96|97|OJAAAA|NGJAAA|HHHHxx
+8769|6254|1|1|9|9|69|769|769|3769|8769|138|139|HZAAAA|OGJAAA|OOOOxx
+9922|6255|0|2|2|2|22|922|1922|4922|9922|44|45|QRAAAA|PGJAAA|VVVVxx
+778|6256|0|2|8|18|78|778|778|778|778|156|157|YDAAAA|QGJAAA|AAAAxx
+1233|6257|1|1|3|13|33|233|1233|1233|1233|66|67|LVAAAA|RGJAAA|HHHHxx
+1183|6258|1|3|3|3|83|183|1183|1183|1183|166|167|NTAAAA|SGJAAA|OOOOxx
+2838|6259|0|2|8|18|38|838|838|2838|2838|76|77|EFAAAA|TGJAAA|VVVVxx
+3096|6260|0|0|6|16|96|96|1096|3096|3096|192|193|CPAAAA|UGJAAA|AAAAxx
+8566|6261|0|2|6|6|66|566|566|3566|8566|132|133|MRAAAA|VGJAAA|HHHHxx
+7635|6262|1|3|5|15|35|635|1635|2635|7635|70|71|RHAAAA|WGJAAA|OOOOxx
+5428|6263|0|0|8|8|28|428|1428|428|5428|56|57|UAAAAA|XGJAAA|VVVVxx
+7430|6264|0|2|0|10|30|430|1430|2430|7430|60|61|UZAAAA|YGJAAA|AAAAxx
+7210|6265|0|2|0|10|10|210|1210|2210|7210|20|21|IRAAAA|ZGJAAA|HHHHxx
+4485|6266|1|1|5|5|85|485|485|4485|4485|170|171|NQAAAA|AHJAAA|OOOOxx
+9623|6267|1|3|3|3|23|623|1623|4623|9623|46|47|DGAAAA|BHJAAA|VVVVxx
+3670|6268|0|2|0|10|70|670|1670|3670|3670|140|141|ELAAAA|CHJAAA|AAAAxx
+1575|6269|1|3|5|15|75|575|1575|1575|1575|150|151|PIAAAA|DHJAAA|HHHHxx
+5874|6270|0|2|4|14|74|874|1874|874|5874|148|149|YRAAAA|EHJAAA|OOOOxx
+673|6271|1|1|3|13|73|673|673|673|673|146|147|XZAAAA|FHJAAA|VVVVxx
+9712|6272|0|0|2|12|12|712|1712|4712|9712|24|25|OJAAAA|GHJAAA|AAAAxx
+7729|6273|1|1|9|9|29|729|1729|2729|7729|58|59|HLAAAA|HHJAAA|HHHHxx
+4318|6274|0|2|8|18|18|318|318|4318|4318|36|37|CKAAAA|IHJAAA|OOOOxx
+4143|6275|1|3|3|3|43|143|143|4143|4143|86|87|JDAAAA|JHJAAA|VVVVxx
+4932|6276|0|0|2|12|32|932|932|4932|4932|64|65|SHAAAA|KHJAAA|AAAAxx
+5835|6277|1|3|5|15|35|835|1835|835|5835|70|71|LQAAAA|LHJAAA|HHHHxx
+4966|6278|0|2|6|6|66|966|966|4966|4966|132|133|AJAAAA|MHJAAA|OOOOxx
+6711|6279|1|3|1|11|11|711|711|1711|6711|22|23|DYAAAA|NHJAAA|VVVVxx
+3990|6280|0|2|0|10|90|990|1990|3990|3990|180|181|MXAAAA|OHJAAA|AAAAxx
+990|6281|0|2|0|10|90|990|990|990|990|180|181|CMAAAA|PHJAAA|HHHHxx
+220|6282|0|0|0|0|20|220|220|220|220|40|41|MIAAAA|QHJAAA|OOOOxx
+5693|6283|1|1|3|13|93|693|1693|693|5693|186|187|ZKAAAA|RHJAAA|VVVVxx
+3662|6284|0|2|2|2|62|662|1662|3662|3662|124|125|WKAAAA|SHJAAA|AAAAxx
+7844|6285|0|0|4|4|44|844|1844|2844|7844|88|89|SPAAAA|THJAAA|HHHHxx
+5515|6286|1|3|5|15|15|515|1515|515|5515|30|31|DEAAAA|UHJAAA|OOOOxx
+5551|6287|1|3|1|11|51|551|1551|551|5551|102|103|NFAAAA|VHJAAA|VVVVxx
+2358|6288|0|2|8|18|58|358|358|2358|2358|116|117|SMAAAA|WHJAAA|AAAAxx
+8977|6289|1|1|7|17|77|977|977|3977|8977|154|155|HHAAAA|XHJAAA|HHHHxx
+7040|6290|0|0|0|0|40|40|1040|2040|7040|80|81|UKAAAA|YHJAAA|OOOOxx
+105|6291|1|1|5|5|5|105|105|105|105|10|11|BEAAAA|ZHJAAA|VVVVxx
+4496|6292|0|0|6|16|96|496|496|4496|4496|192|193|YQAAAA|AIJAAA|AAAAxx
+2254|6293|0|2|4|14|54|254|254|2254|2254|108|109|SIAAAA|BIJAAA|HHHHxx
+411|6294|1|3|1|11|11|411|411|411|411|22|23|VPAAAA|CIJAAA|OOOOxx
+2373|6295|1|1|3|13|73|373|373|2373|2373|146|147|HNAAAA|DIJAAA|VVVVxx
+3477|6296|1|1|7|17|77|477|1477|3477|3477|154|155|TDAAAA|EIJAAA|AAAAxx
+8964|6297|0|0|4|4|64|964|964|3964|8964|128|129|UGAAAA|FIJAAA|HHHHxx
+8471|6298|1|3|1|11|71|471|471|3471|8471|142|143|VNAAAA|GIJAAA|OOOOxx
+5776|6299|0|0|6|16|76|776|1776|776|5776|152|153|EOAAAA|HIJAAA|VVVVxx
+9921|6300|1|1|1|1|21|921|1921|4921|9921|42|43|PRAAAA|IIJAAA|AAAAxx
+7816|6301|0|0|6|16|16|816|1816|2816|7816|32|33|QOAAAA|JIJAAA|HHHHxx
+2439|6302|1|3|9|19|39|439|439|2439|2439|78|79|VPAAAA|KIJAAA|OOOOxx
+9298|6303|0|2|8|18|98|298|1298|4298|9298|196|197|QTAAAA|LIJAAA|VVVVxx
+9424|6304|0|0|4|4|24|424|1424|4424|9424|48|49|MYAAAA|MIJAAA|AAAAxx
+3252|6305|0|0|2|12|52|252|1252|3252|3252|104|105|CVAAAA|NIJAAA|HHHHxx
+1401|6306|1|1|1|1|1|401|1401|1401|1401|2|3|XBAAAA|OIJAAA|OOOOxx
+9632|6307|0|0|2|12|32|632|1632|4632|9632|64|65|MGAAAA|PIJAAA|VVVVxx
+370|6308|0|2|0|10|70|370|370|370|370|140|141|GOAAAA|QIJAAA|AAAAxx
+728|6309|0|0|8|8|28|728|728|728|728|56|57|ACAAAA|RIJAAA|HHHHxx
+2888|6310|0|0|8|8|88|888|888|2888|2888|176|177|CHAAAA|SIJAAA|OOOOxx
+1441|6311|1|1|1|1|41|441|1441|1441|1441|82|83|LDAAAA|TIJAAA|VVVVxx
+8308|6312|0|0|8|8|8|308|308|3308|8308|16|17|OHAAAA|UIJAAA|AAAAxx
+2165|6313|1|1|5|5|65|165|165|2165|2165|130|131|HFAAAA|VIJAAA|HHHHxx
+6359|6314|1|3|9|19|59|359|359|1359|6359|118|119|PKAAAA|WIJAAA|OOOOxx
+9637|6315|1|1|7|17|37|637|1637|4637|9637|74|75|RGAAAA|XIJAAA|VVVVxx
+5208|6316|0|0|8|8|8|208|1208|208|5208|16|17|ISAAAA|YIJAAA|AAAAxx
+4705|6317|1|1|5|5|5|705|705|4705|4705|10|11|ZYAAAA|ZIJAAA|HHHHxx
+2341|6318|1|1|1|1|41|341|341|2341|2341|82|83|BMAAAA|AJJAAA|OOOOxx
+8539|6319|1|3|9|19|39|539|539|3539|8539|78|79|LQAAAA|BJJAAA|VVVVxx
+7528|6320|0|0|8|8|28|528|1528|2528|7528|56|57|ODAAAA|CJJAAA|AAAAxx
+7969|6321|1|1|9|9|69|969|1969|2969|7969|138|139|NUAAAA|DJJAAA|HHHHxx
+6381|6322|1|1|1|1|81|381|381|1381|6381|162|163|LLAAAA|EJJAAA|OOOOxx
+4906|6323|0|2|6|6|6|906|906|4906|4906|12|13|SGAAAA|FJJAAA|VVVVxx
+8697|6324|1|1|7|17|97|697|697|3697|8697|194|195|NWAAAA|GJJAAA|AAAAxx
+6301|6325|1|1|1|1|1|301|301|1301|6301|2|3|JIAAAA|HJJAAA|HHHHxx
+7554|6326|0|2|4|14|54|554|1554|2554|7554|108|109|OEAAAA|IJJAAA|OOOOxx
+5107|6327|1|3|7|7|7|107|1107|107|5107|14|15|LOAAAA|JJJAAA|VVVVxx
+5046|6328|0|2|6|6|46|46|1046|46|5046|92|93|CMAAAA|KJJAAA|AAAAxx
+4063|6329|1|3|3|3|63|63|63|4063|4063|126|127|HAAAAA|LJJAAA|HHHHxx
+7580|6330|0|0|0|0|80|580|1580|2580|7580|160|161|OFAAAA|MJJAAA|OOOOxx
+2245|6331|1|1|5|5|45|245|245|2245|2245|90|91|JIAAAA|NJJAAA|VVVVxx
+3711|6332|1|3|1|11|11|711|1711|3711|3711|22|23|TMAAAA|OJJAAA|AAAAxx
+3220|6333|0|0|0|0|20|220|1220|3220|3220|40|41|WTAAAA|PJJAAA|HHHHxx
+6463|6334|1|3|3|3|63|463|463|1463|6463|126|127|POAAAA|QJJAAA|OOOOxx
+8196|6335|0|0|6|16|96|196|196|3196|8196|192|193|GDAAAA|RJJAAA|VVVVxx
+9875|6336|1|3|5|15|75|875|1875|4875|9875|150|151|VPAAAA|SJJAAA|AAAAxx
+1333|6337|1|1|3|13|33|333|1333|1333|1333|66|67|HZAAAA|TJJAAA|HHHHxx
+7880|6338|0|0|0|0|80|880|1880|2880|7880|160|161|CRAAAA|UJJAAA|OOOOxx
+2322|6339|0|2|2|2|22|322|322|2322|2322|44|45|ILAAAA|VJJAAA|VVVVxx
+2163|6340|1|3|3|3|63|163|163|2163|2163|126|127|FFAAAA|WJJAAA|AAAAxx
+421|6341|1|1|1|1|21|421|421|421|421|42|43|FQAAAA|XJJAAA|HHHHxx
+2042|6342|0|2|2|2|42|42|42|2042|2042|84|85|OAAAAA|YJJAAA|OOOOxx
+1424|6343|0|0|4|4|24|424|1424|1424|1424|48|49|UCAAAA|ZJJAAA|VVVVxx
+7870|6344|0|2|0|10|70|870|1870|2870|7870|140|141|SQAAAA|AKJAAA|AAAAxx
+2653|6345|1|1|3|13|53|653|653|2653|2653|106|107|BYAAAA|BKJAAA|HHHHxx
+4216|6346|0|0|6|16|16|216|216|4216|4216|32|33|EGAAAA|CKJAAA|OOOOxx
+1515|6347|1|3|5|15|15|515|1515|1515|1515|30|31|HGAAAA|DKJAAA|VVVVxx
+7860|6348|0|0|0|0|60|860|1860|2860|7860|120|121|IQAAAA|EKJAAA|AAAAxx
+2984|6349|0|0|4|4|84|984|984|2984|2984|168|169|UKAAAA|FKJAAA|HHHHxx
+6269|6350|1|1|9|9|69|269|269|1269|6269|138|139|DHAAAA|GKJAAA|OOOOxx
+2609|6351|1|1|9|9|9|609|609|2609|2609|18|19|JWAAAA|HKJAAA|VVVVxx
+3671|6352|1|3|1|11|71|671|1671|3671|3671|142|143|FLAAAA|IKJAAA|AAAAxx
+4544|6353|0|0|4|4|44|544|544|4544|4544|88|89|USAAAA|JKJAAA|HHHHxx
+4668|6354|0|0|8|8|68|668|668|4668|4668|136|137|OXAAAA|KKJAAA|OOOOxx
+2565|6355|1|1|5|5|65|565|565|2565|2565|130|131|RUAAAA|LKJAAA|VVVVxx
+3126|6356|0|2|6|6|26|126|1126|3126|3126|52|53|GQAAAA|MKJAAA|AAAAxx
+7573|6357|1|1|3|13|73|573|1573|2573|7573|146|147|HFAAAA|NKJAAA|HHHHxx
+1476|6358|0|0|6|16|76|476|1476|1476|1476|152|153|UEAAAA|OKJAAA|OOOOxx
+2146|6359|0|2|6|6|46|146|146|2146|2146|92|93|OEAAAA|PKJAAA|VVVVxx
+9990|6360|0|2|0|10|90|990|1990|4990|9990|180|181|GUAAAA|QKJAAA|AAAAxx
+2530|6361|0|2|0|10|30|530|530|2530|2530|60|61|ITAAAA|RKJAAA|HHHHxx
+9288|6362|0|0|8|8|88|288|1288|4288|9288|176|177|GTAAAA|SKJAAA|OOOOxx
+9755|6363|1|3|5|15|55|755|1755|4755|9755|110|111|FLAAAA|TKJAAA|VVVVxx
+5305|6364|1|1|5|5|5|305|1305|305|5305|10|11|BWAAAA|UKJAAA|AAAAxx
+2495|6365|1|3|5|15|95|495|495|2495|2495|190|191|ZRAAAA|VKJAAA|HHHHxx
+5443|6366|1|3|3|3|43|443|1443|443|5443|86|87|JBAAAA|WKJAAA|OOOOxx
+1930|6367|0|2|0|10|30|930|1930|1930|1930|60|61|GWAAAA|XKJAAA|VVVVxx
+9134|6368|0|2|4|14|34|134|1134|4134|9134|68|69|INAAAA|YKJAAA|AAAAxx
+2844|6369|0|0|4|4|44|844|844|2844|2844|88|89|KFAAAA|ZKJAAA|HHHHxx
+896|6370|0|0|6|16|96|896|896|896|896|192|193|MIAAAA|ALJAAA|OOOOxx
+1330|6371|0|2|0|10|30|330|1330|1330|1330|60|61|EZAAAA|BLJAAA|VVVVxx
+8980|6372|0|0|0|0|80|980|980|3980|8980|160|161|KHAAAA|CLJAAA|AAAAxx
+5940|6373|0|0|0|0|40|940|1940|940|5940|80|81|MUAAAA|DLJAAA|HHHHxx
+6494|6374|0|2|4|14|94|494|494|1494|6494|188|189|UPAAAA|ELJAAA|OOOOxx
+165|6375|1|1|5|5|65|165|165|165|165|130|131|JGAAAA|FLJAAA|VVVVxx
+2510|6376|0|2|0|10|10|510|510|2510|2510|20|21|OSAAAA|GLJAAA|AAAAxx
+9950|6377|0|2|0|10|50|950|1950|4950|9950|100|101|SSAAAA|HLJAAA|HHHHxx
+3854|6378|0|2|4|14|54|854|1854|3854|3854|108|109|GSAAAA|ILJAAA|OOOOxx
+7493|6379|1|1|3|13|93|493|1493|2493|7493|186|187|FCAAAA|JLJAAA|VVVVxx
+4124|6380|0|0|4|4|24|124|124|4124|4124|48|49|QCAAAA|KLJAAA|AAAAxx
+8563|6381|1|3|3|3|63|563|563|3563|8563|126|127|JRAAAA|LLJAAA|HHHHxx
+8735|6382|1|3|5|15|35|735|735|3735|8735|70|71|ZXAAAA|MLJAAA|OOOOxx
+9046|6383|0|2|6|6|46|46|1046|4046|9046|92|93|YJAAAA|NLJAAA|VVVVxx
+1754|6384|0|2|4|14|54|754|1754|1754|1754|108|109|MPAAAA|OLJAAA|AAAAxx
+6954|6385|0|2|4|14|54|954|954|1954|6954|108|109|MHAAAA|PLJAAA|HHHHxx
+4953|6386|1|1|3|13|53|953|953|4953|4953|106|107|NIAAAA|QLJAAA|OOOOxx
+8142|6387|0|2|2|2|42|142|142|3142|8142|84|85|EBAAAA|RLJAAA|VVVVxx
+9661|6388|1|1|1|1|61|661|1661|4661|9661|122|123|PHAAAA|SLJAAA|AAAAxx
+6415|6389|1|3|5|15|15|415|415|1415|6415|30|31|TMAAAA|TLJAAA|HHHHxx
+5782|6390|0|2|2|2|82|782|1782|782|5782|164|165|KOAAAA|ULJAAA|OOOOxx
+7721|6391|1|1|1|1|21|721|1721|2721|7721|42|43|ZKAAAA|VLJAAA|VVVVxx
+580|6392|0|0|0|0|80|580|580|580|580|160|161|IWAAAA|WLJAAA|AAAAxx
+3784|6393|0|0|4|4|84|784|1784|3784|3784|168|169|OPAAAA|XLJAAA|HHHHxx
+9810|6394|0|2|0|10|10|810|1810|4810|9810|20|21|INAAAA|YLJAAA|OOOOxx
+8488|6395|0|0|8|8|88|488|488|3488|8488|176|177|MOAAAA|ZLJAAA|VVVVxx
+6214|6396|0|2|4|14|14|214|214|1214|6214|28|29|AFAAAA|AMJAAA|AAAAxx
+9433|6397|1|1|3|13|33|433|1433|4433|9433|66|67|VYAAAA|BMJAAA|HHHHxx
+9959|6398|1|3|9|19|59|959|1959|4959|9959|118|119|BTAAAA|CMJAAA|OOOOxx
+554|6399|0|2|4|14|54|554|554|554|554|108|109|IVAAAA|DMJAAA|VVVVxx
+6646|6400|0|2|6|6|46|646|646|1646|6646|92|93|QVAAAA|EMJAAA|AAAAxx
+1138|6401|0|2|8|18|38|138|1138|1138|1138|76|77|URAAAA|FMJAAA|HHHHxx
+9331|6402|1|3|1|11|31|331|1331|4331|9331|62|63|XUAAAA|GMJAAA|OOOOxx
+7331|6403|1|3|1|11|31|331|1331|2331|7331|62|63|ZVAAAA|HMJAAA|VVVVxx
+3482|6404|0|2|2|2|82|482|1482|3482|3482|164|165|YDAAAA|IMJAAA|AAAAxx
+3795|6405|1|3|5|15|95|795|1795|3795|3795|190|191|ZPAAAA|JMJAAA|HHHHxx
+2441|6406|1|1|1|1|41|441|441|2441|2441|82|83|XPAAAA|KMJAAA|OOOOxx
+5229|6407|1|1|9|9|29|229|1229|229|5229|58|59|DTAAAA|LMJAAA|VVVVxx
+7012|6408|0|0|2|12|12|12|1012|2012|7012|24|25|SJAAAA|MMJAAA|AAAAxx
+7036|6409|0|0|6|16|36|36|1036|2036|7036|72|73|QKAAAA|NMJAAA|HHHHxx
+8243|6410|1|3|3|3|43|243|243|3243|8243|86|87|BFAAAA|OMJAAA|OOOOxx
+9320|6411|0|0|0|0|20|320|1320|4320|9320|40|41|MUAAAA|PMJAAA|VVVVxx
+4693|6412|1|1|3|13|93|693|693|4693|4693|186|187|NYAAAA|QMJAAA|AAAAxx
+6741|6413|1|1|1|1|41|741|741|1741|6741|82|83|HZAAAA|RMJAAA|HHHHxx
+2997|6414|1|1|7|17|97|997|997|2997|2997|194|195|HLAAAA|SMJAAA|OOOOxx
+4838|6415|0|2|8|18|38|838|838|4838|4838|76|77|CEAAAA|TMJAAA|VVVVxx
+6945|6416|1|1|5|5|45|945|945|1945|6945|90|91|DHAAAA|UMJAAA|AAAAxx
+8253|6417|1|1|3|13|53|253|253|3253|8253|106|107|LFAAAA|VMJAAA|HHHHxx
+8989|6418|1|1|9|9|89|989|989|3989|8989|178|179|THAAAA|WMJAAA|OOOOxx
+2640|6419|0|0|0|0|40|640|640|2640|2640|80|81|OXAAAA|XMJAAA|VVVVxx
+5647|6420|1|3|7|7|47|647|1647|647|5647|94|95|FJAAAA|YMJAAA|AAAAxx
+7186|6421|0|2|6|6|86|186|1186|2186|7186|172|173|KQAAAA|ZMJAAA|HHHHxx
+3278|6422|0|2|8|18|78|278|1278|3278|3278|156|157|CWAAAA|ANJAAA|OOOOxx
+8546|6423|0|2|6|6|46|546|546|3546|8546|92|93|SQAAAA|BNJAAA|VVVVxx
+8297|6424|1|1|7|17|97|297|297|3297|8297|194|195|DHAAAA|CNJAAA|AAAAxx
+9534|6425|0|2|4|14|34|534|1534|4534|9534|68|69|SCAAAA|DNJAAA|HHHHxx
+9618|6426|0|2|8|18|18|618|1618|4618|9618|36|37|YFAAAA|ENJAAA|OOOOxx
+8839|6427|1|3|9|19|39|839|839|3839|8839|78|79|ZBAAAA|FNJAAA|VVVVxx
+7605|6428|1|1|5|5|5|605|1605|2605|7605|10|11|NGAAAA|GNJAAA|AAAAxx
+6421|6429|1|1|1|1|21|421|421|1421|6421|42|43|ZMAAAA|HNJAAA|HHHHxx
+3582|6430|0|2|2|2|82|582|1582|3582|3582|164|165|UHAAAA|INJAAA|OOOOxx
+485|6431|1|1|5|5|85|485|485|485|485|170|171|RSAAAA|JNJAAA|VVVVxx
+1925|6432|1|1|5|5|25|925|1925|1925|1925|50|51|BWAAAA|KNJAAA|AAAAxx
+4296|6433|0|0|6|16|96|296|296|4296|4296|192|193|GJAAAA|LNJAAA|HHHHxx
+8874|6434|0|2|4|14|74|874|874|3874|8874|148|149|IDAAAA|MNJAAA|OOOOxx
+1443|6435|1|3|3|3|43|443|1443|1443|1443|86|87|NDAAAA|NNJAAA|VVVVxx
+4239|6436|1|3|9|19|39|239|239|4239|4239|78|79|BHAAAA|ONJAAA|AAAAxx
+9760|6437|0|0|0|0|60|760|1760|4760|9760|120|121|KLAAAA|PNJAAA|HHHHxx
+136|6438|0|0|6|16|36|136|136|136|136|72|73|GFAAAA|QNJAAA|OOOOxx
+6472|6439|0|0|2|12|72|472|472|1472|6472|144|145|YOAAAA|RNJAAA|VVVVxx
+4896|6440|0|0|6|16|96|896|896|4896|4896|192|193|IGAAAA|SNJAAA|AAAAxx
+9028|6441|0|0|8|8|28|28|1028|4028|9028|56|57|GJAAAA|TNJAAA|HHHHxx
+8354|6442|0|2|4|14|54|354|354|3354|8354|108|109|IJAAAA|UNJAAA|OOOOxx
+8648|6443|0|0|8|8|48|648|648|3648|8648|96|97|QUAAAA|VNJAAA|VVVVxx
+918|6444|0|2|8|18|18|918|918|918|918|36|37|IJAAAA|WNJAAA|AAAAxx
+6606|6445|0|2|6|6|6|606|606|1606|6606|12|13|CUAAAA|XNJAAA|HHHHxx
+2462|6446|0|2|2|2|62|462|462|2462|2462|124|125|SQAAAA|YNJAAA|OOOOxx
+7536|6447|0|0|6|16|36|536|1536|2536|7536|72|73|WDAAAA|ZNJAAA|VVVVxx
+1700|6448|0|0|0|0|0|700|1700|1700|1700|0|1|KNAAAA|AOJAAA|AAAAxx
+6740|6449|0|0|0|0|40|740|740|1740|6740|80|81|GZAAAA|BOJAAA|HHHHxx
+28|6450|0|0|8|8|28|28|28|28|28|56|57|CBAAAA|COJAAA|OOOOxx
+6044|6451|0|0|4|4|44|44|44|1044|6044|88|89|MYAAAA|DOJAAA|VVVVxx
+5053|6452|1|1|3|13|53|53|1053|53|5053|106|107|JMAAAA|EOJAAA|AAAAxx
+4832|6453|0|0|2|12|32|832|832|4832|4832|64|65|WDAAAA|FOJAAA|HHHHxx
+9145|6454|1|1|5|5|45|145|1145|4145|9145|90|91|TNAAAA|GOJAAA|OOOOxx
+5482|6455|0|2|2|2|82|482|1482|482|5482|164|165|WCAAAA|HOJAAA|VVVVxx
+7644|6456|0|0|4|4|44|644|1644|2644|7644|88|89|AIAAAA|IOJAAA|AAAAxx
+2128|6457|0|0|8|8|28|128|128|2128|2128|56|57|WDAAAA|JOJAAA|HHHHxx
+6583|6458|1|3|3|3|83|583|583|1583|6583|166|167|FTAAAA|KOJAAA|OOOOxx
+4224|6459|0|0|4|4|24|224|224|4224|4224|48|49|MGAAAA|LOJAAA|VVVVxx
+5253|6460|1|1|3|13|53|253|1253|253|5253|106|107|BUAAAA|MOJAAA|AAAAxx
+8219|6461|1|3|9|19|19|219|219|3219|8219|38|39|DEAAAA|NOJAAA|HHHHxx
+8113|6462|1|1|3|13|13|113|113|3113|8113|26|27|BAAAAA|OOJAAA|OOOOxx
+3616|6463|0|0|6|16|16|616|1616|3616|3616|32|33|CJAAAA|POJAAA|VVVVxx
+1361|6464|1|1|1|1|61|361|1361|1361|1361|122|123|JAAAAA|QOJAAA|AAAAxx
+949|6465|1|1|9|9|49|949|949|949|949|98|99|NKAAAA|ROJAAA|HHHHxx
+8582|6466|0|2|2|2|82|582|582|3582|8582|164|165|CSAAAA|SOJAAA|OOOOxx
+5104|6467|0|0|4|4|4|104|1104|104|5104|8|9|IOAAAA|TOJAAA|VVVVxx
+6146|6468|0|2|6|6|46|146|146|1146|6146|92|93|KCAAAA|UOJAAA|AAAAxx
+7681|6469|1|1|1|1|81|681|1681|2681|7681|162|163|LJAAAA|VOJAAA|HHHHxx
+1904|6470|0|0|4|4|4|904|1904|1904|1904|8|9|GVAAAA|WOJAAA|OOOOxx
+1989|6471|1|1|9|9|89|989|1989|1989|1989|178|179|NYAAAA|XOJAAA|VVVVxx
+4179|6472|1|3|9|19|79|179|179|4179|4179|158|159|TEAAAA|YOJAAA|AAAAxx
+1739|6473|1|3|9|19|39|739|1739|1739|1739|78|79|XOAAAA|ZOJAAA|HHHHxx
+2447|6474|1|3|7|7|47|447|447|2447|2447|94|95|DQAAAA|APJAAA|OOOOxx
+3029|6475|1|1|9|9|29|29|1029|3029|3029|58|59|NMAAAA|BPJAAA|VVVVxx
+9783|6476|1|3|3|3|83|783|1783|4783|9783|166|167|HMAAAA|CPJAAA|AAAAxx
+8381|6477|1|1|1|1|81|381|381|3381|8381|162|163|JKAAAA|DPJAAA|HHHHxx
+8755|6478|1|3|5|15|55|755|755|3755|8755|110|111|TYAAAA|EPJAAA|OOOOxx
+8384|6479|0|0|4|4|84|384|384|3384|8384|168|169|MKAAAA|FPJAAA|VVVVxx
+7655|6480|1|3|5|15|55|655|1655|2655|7655|110|111|LIAAAA|GPJAAA|AAAAxx
+4766|6481|0|2|6|6|66|766|766|4766|4766|132|133|IBAAAA|HPJAAA|HHHHxx
+3324|6482|0|0|4|4|24|324|1324|3324|3324|48|49|WXAAAA|IPJAAA|OOOOxx
+5022|6483|0|2|2|2|22|22|1022|22|5022|44|45|ELAAAA|JPJAAA|VVVVxx
+2856|6484|0|0|6|16|56|856|856|2856|2856|112|113|WFAAAA|KPJAAA|AAAAxx
+6503|6485|1|3|3|3|3|503|503|1503|6503|6|7|DQAAAA|LPJAAA|HHHHxx
+6872|6486|0|0|2|12|72|872|872|1872|6872|144|145|IEAAAA|MPJAAA|OOOOxx
+1663|6487|1|3|3|3|63|663|1663|1663|1663|126|127|ZLAAAA|NPJAAA|VVVVxx
+6964|6488|0|0|4|4|64|964|964|1964|6964|128|129|WHAAAA|OPJAAA|AAAAxx
+4622|6489|0|2|2|2|22|622|622|4622|4622|44|45|UVAAAA|PPJAAA|HHHHxx
+6089|6490|1|1|9|9|89|89|89|1089|6089|178|179|FAAAAA|QPJAAA|OOOOxx
+8567|6491|1|3|7|7|67|567|567|3567|8567|134|135|NRAAAA|RPJAAA|VVVVxx
+597|6492|1|1|7|17|97|597|597|597|597|194|195|ZWAAAA|SPJAAA|AAAAxx
+4222|6493|0|2|2|2|22|222|222|4222|4222|44|45|KGAAAA|TPJAAA|HHHHxx
+9322|6494|0|2|2|2|22|322|1322|4322|9322|44|45|OUAAAA|UPJAAA|OOOOxx
+624|6495|0|0|4|4|24|624|624|624|624|48|49|AYAAAA|VPJAAA|VVVVxx
+4329|6496|1|1|9|9|29|329|329|4329|4329|58|59|NKAAAA|WPJAAA|AAAAxx
+6781|6497|1|1|1|1|81|781|781|1781|6781|162|163|VAAAAA|XPJAAA|HHHHxx
+1673|6498|1|1|3|13|73|673|1673|1673|1673|146|147|JMAAAA|YPJAAA|OOOOxx
+6633|6499|1|1|3|13|33|633|633|1633|6633|66|67|DVAAAA|ZPJAAA|VVVVxx
+2569|6500|1|1|9|9|69|569|569|2569|2569|138|139|VUAAAA|AQJAAA|AAAAxx
+4995|6501|1|3|5|15|95|995|995|4995|4995|190|191|DKAAAA|BQJAAA|HHHHxx
+2749|6502|1|1|9|9|49|749|749|2749|2749|98|99|TBAAAA|CQJAAA|OOOOxx
+9044|6503|0|0|4|4|44|44|1044|4044|9044|88|89|WJAAAA|DQJAAA|VVVVxx
+5823|6504|1|3|3|3|23|823|1823|823|5823|46|47|ZPAAAA|EQJAAA|AAAAxx
+9366|6505|0|2|6|6|66|366|1366|4366|9366|132|133|GWAAAA|FQJAAA|HHHHxx
+1169|6506|1|1|9|9|69|169|1169|1169|1169|138|139|ZSAAAA|GQJAAA|OOOOxx
+1300|6507|0|0|0|0|0|300|1300|1300|1300|0|1|AYAAAA|HQJAAA|VVVVxx
+9973|6508|1|1|3|13|73|973|1973|4973|9973|146|147|PTAAAA|IQJAAA|AAAAxx
+2092|6509|0|0|2|12|92|92|92|2092|2092|184|185|MCAAAA|JQJAAA|HHHHxx
+9776|6510|0|0|6|16|76|776|1776|4776|9776|152|153|AMAAAA|KQJAAA|OOOOxx
+7612|6511|0|0|2|12|12|612|1612|2612|7612|24|25|UGAAAA|LQJAAA|VVVVxx
+7190|6512|0|2|0|10|90|190|1190|2190|7190|180|181|OQAAAA|MQJAAA|AAAAxx
+5147|6513|1|3|7|7|47|147|1147|147|5147|94|95|ZPAAAA|NQJAAA|HHHHxx
+3722|6514|0|2|2|2|22|722|1722|3722|3722|44|45|ENAAAA|OQJAAA|OOOOxx
+5858|6515|0|2|8|18|58|858|1858|858|5858|116|117|IRAAAA|PQJAAA|VVVVxx
+3204|6516|0|0|4|4|4|204|1204|3204|3204|8|9|GTAAAA|QQJAAA|AAAAxx
+8994|6517|0|2|4|14|94|994|994|3994|8994|188|189|YHAAAA|RQJAAA|HHHHxx
+7478|6518|0|2|8|18|78|478|1478|2478|7478|156|157|QBAAAA|SQJAAA|OOOOxx
+9624|6519|0|0|4|4|24|624|1624|4624|9624|48|49|EGAAAA|TQJAAA|VVVVxx
+6639|6520|1|3|9|19|39|639|639|1639|6639|78|79|JVAAAA|UQJAAA|AAAAxx
+369|6521|1|1|9|9|69|369|369|369|369|138|139|FOAAAA|VQJAAA|HHHHxx
+7766|6522|0|2|6|6|66|766|1766|2766|7766|132|133|SMAAAA|WQJAAA|OOOOxx
+4094|6523|0|2|4|14|94|94|94|4094|4094|188|189|MBAAAA|XQJAAA|VVVVxx
+9556|6524|0|0|6|16|56|556|1556|4556|9556|112|113|ODAAAA|YQJAAA|AAAAxx
+4887|6525|1|3|7|7|87|887|887|4887|4887|174|175|ZFAAAA|ZQJAAA|HHHHxx
+2321|6526|1|1|1|1|21|321|321|2321|2321|42|43|HLAAAA|ARJAAA|OOOOxx
+9201|6527|1|1|1|1|1|201|1201|4201|9201|2|3|XPAAAA|BRJAAA|VVVVxx
+1627|6528|1|3|7|7|27|627|1627|1627|1627|54|55|PKAAAA|CRJAAA|AAAAxx
+150|6529|0|2|0|10|50|150|150|150|150|100|101|UFAAAA|DRJAAA|HHHHxx
+8010|6530|0|2|0|10|10|10|10|3010|8010|20|21|CWAAAA|ERJAAA|OOOOxx
+8026|6531|0|2|6|6|26|26|26|3026|8026|52|53|SWAAAA|FRJAAA|VVVVxx
+5495|6532|1|3|5|15|95|495|1495|495|5495|190|191|JDAAAA|GRJAAA|AAAAxx
+6213|6533|1|1|3|13|13|213|213|1213|6213|26|27|ZEAAAA|HRJAAA|HHHHxx
+6464|6534|0|0|4|4|64|464|464|1464|6464|128|129|QOAAAA|IRJAAA|OOOOxx
+1158|6535|0|2|8|18|58|158|1158|1158|1158|116|117|OSAAAA|JRJAAA|VVVVxx
+8669|6536|1|1|9|9|69|669|669|3669|8669|138|139|LVAAAA|KRJAAA|AAAAxx
+3225|6537|1|1|5|5|25|225|1225|3225|3225|50|51|BUAAAA|LRJAAA|HHHHxx
+1294|6538|0|2|4|14|94|294|1294|1294|1294|188|189|UXAAAA|MRJAAA|OOOOxx
+2166|6539|0|2|6|6|66|166|166|2166|2166|132|133|IFAAAA|NRJAAA|VVVVxx
+9328|6540|0|0|8|8|28|328|1328|4328|9328|56|57|UUAAAA|ORJAAA|AAAAxx
+8431|6541|1|3|1|11|31|431|431|3431|8431|62|63|HMAAAA|PRJAAA|HHHHxx
+7100|6542|0|0|0|0|0|100|1100|2100|7100|0|1|CNAAAA|QRJAAA|OOOOxx
+8126|6543|0|2|6|6|26|126|126|3126|8126|52|53|OAAAAA|RRJAAA|VVVVxx
+2185|6544|1|1|5|5|85|185|185|2185|2185|170|171|BGAAAA|SRJAAA|AAAAxx
+5697|6545|1|1|7|17|97|697|1697|697|5697|194|195|DLAAAA|TRJAAA|HHHHxx
+5531|6546|1|3|1|11|31|531|1531|531|5531|62|63|TEAAAA|URJAAA|OOOOxx
+3020|6547|0|0|0|0|20|20|1020|3020|3020|40|41|EMAAAA|VRJAAA|VVVVxx
+3076|6548|0|0|6|16|76|76|1076|3076|3076|152|153|IOAAAA|WRJAAA|AAAAxx
+9228|6549|0|0|8|8|28|228|1228|4228|9228|56|57|YQAAAA|XRJAAA|HHHHxx
+1734|6550|0|2|4|14|34|734|1734|1734|1734|68|69|SOAAAA|YRJAAA|OOOOxx
+7616|6551|0|0|6|16|16|616|1616|2616|7616|32|33|YGAAAA|ZRJAAA|VVVVxx
+9059|6552|1|3|9|19|59|59|1059|4059|9059|118|119|LKAAAA|ASJAAA|AAAAxx
+323|6553|1|3|3|3|23|323|323|323|323|46|47|LMAAAA|BSJAAA|HHHHxx
+1283|6554|1|3|3|3|83|283|1283|1283|1283|166|167|JXAAAA|CSJAAA|OOOOxx
+9535|6555|1|3|5|15|35|535|1535|4535|9535|70|71|TCAAAA|DSJAAA|VVVVxx
+2580|6556|0|0|0|0|80|580|580|2580|2580|160|161|GVAAAA|ESJAAA|AAAAxx
+7633|6557|1|1|3|13|33|633|1633|2633|7633|66|67|PHAAAA|FSJAAA|HHHHxx
+9497|6558|1|1|7|17|97|497|1497|4497|9497|194|195|HBAAAA|GSJAAA|OOOOxx
+9842|6559|0|2|2|2|42|842|1842|4842|9842|84|85|OOAAAA|HSJAAA|VVVVxx
+3426|6560|0|2|6|6|26|426|1426|3426|3426|52|53|UBAAAA|ISJAAA|AAAAxx
+7650|6561|0|2|0|10|50|650|1650|2650|7650|100|101|GIAAAA|JSJAAA|HHHHxx
+9935|6562|1|3|5|15|35|935|1935|4935|9935|70|71|DSAAAA|KSJAAA|OOOOxx
+9354|6563|0|2|4|14|54|354|1354|4354|9354|108|109|UVAAAA|LSJAAA|VVVVxx
+5569|6564|1|1|9|9|69|569|1569|569|5569|138|139|FGAAAA|MSJAAA|AAAAxx
+5765|6565|1|1|5|5|65|765|1765|765|5765|130|131|TNAAAA|NSJAAA|HHHHxx
+7283|6566|1|3|3|3|83|283|1283|2283|7283|166|167|DUAAAA|OSJAAA|OOOOxx
+1068|6567|0|0|8|8|68|68|1068|1068|1068|136|137|CPAAAA|PSJAAA|VVVVxx
+1641|6568|1|1|1|1|41|641|1641|1641|1641|82|83|DLAAAA|QSJAAA|AAAAxx
+1688|6569|0|0|8|8|88|688|1688|1688|1688|176|177|YMAAAA|RSJAAA|HHHHxx
+1133|6570|1|1|3|13|33|133|1133|1133|1133|66|67|PRAAAA|SSJAAA|OOOOxx
+4493|6571|1|1|3|13|93|493|493|4493|4493|186|187|VQAAAA|TSJAAA|VVVVxx
+3354|6572|0|2|4|14|54|354|1354|3354|3354|108|109|AZAAAA|USJAAA|AAAAxx
+4029|6573|1|1|9|9|29|29|29|4029|4029|58|59|ZYAAAA|VSJAAA|HHHHxx
+6704|6574|0|0|4|4|4|704|704|1704|6704|8|9|WXAAAA|WSJAAA|OOOOxx
+3221|6575|1|1|1|1|21|221|1221|3221|3221|42|43|XTAAAA|XSJAAA|VVVVxx
+9432|6576|0|0|2|12|32|432|1432|4432|9432|64|65|UYAAAA|YSJAAA|AAAAxx
+6990|6577|0|2|0|10|90|990|990|1990|6990|180|181|WIAAAA|ZSJAAA|HHHHxx
+1760|6578|0|0|0|0|60|760|1760|1760|1760|120|121|SPAAAA|ATJAAA|OOOOxx
+4754|6579|0|2|4|14|54|754|754|4754|4754|108|109|WAAAAA|BTJAAA|VVVVxx
+7724|6580|0|0|4|4|24|724|1724|2724|7724|48|49|CLAAAA|CTJAAA|AAAAxx
+9487|6581|1|3|7|7|87|487|1487|4487|9487|174|175|XAAAAA|DTJAAA|HHHHxx
+166|6582|0|2|6|6|66|166|166|166|166|132|133|KGAAAA|ETJAAA|OOOOxx
+5479|6583|1|3|9|19|79|479|1479|479|5479|158|159|TCAAAA|FTJAAA|VVVVxx
+8744|6584|0|0|4|4|44|744|744|3744|8744|88|89|IYAAAA|GTJAAA|AAAAxx
+5746|6585|0|2|6|6|46|746|1746|746|5746|92|93|ANAAAA|HTJAAA|HHHHxx
+907|6586|1|3|7|7|7|907|907|907|907|14|15|XIAAAA|ITJAAA|OOOOxx
+3968|6587|0|0|8|8|68|968|1968|3968|3968|136|137|QWAAAA|JTJAAA|VVVVxx
+5721|6588|1|1|1|1|21|721|1721|721|5721|42|43|BMAAAA|KTJAAA|AAAAxx
+6738|6589|0|2|8|18|38|738|738|1738|6738|76|77|EZAAAA|LTJAAA|HHHHxx
+4097|6590|1|1|7|17|97|97|97|4097|4097|194|195|PBAAAA|MTJAAA|OOOOxx
+8456|6591|0|0|6|16|56|456|456|3456|8456|112|113|GNAAAA|NTJAAA|VVVVxx
+1269|6592|1|1|9|9|69|269|1269|1269|1269|138|139|VWAAAA|OTJAAA|AAAAxx
+7997|6593|1|1|7|17|97|997|1997|2997|7997|194|195|PVAAAA|PTJAAA|HHHHxx
+9457|6594|1|1|7|17|57|457|1457|4457|9457|114|115|TZAAAA|QTJAAA|OOOOxx
+1159|6595|1|3|9|19|59|159|1159|1159|1159|118|119|PSAAAA|RTJAAA|VVVVxx
+1631|6596|1|3|1|11|31|631|1631|1631|1631|62|63|TKAAAA|STJAAA|AAAAxx
+2019|6597|1|3|9|19|19|19|19|2019|2019|38|39|RZAAAA|TTJAAA|HHHHxx
+3186|6598|0|2|6|6|86|186|1186|3186|3186|172|173|OSAAAA|UTJAAA|OOOOxx
+5587|6599|1|3|7|7|87|587|1587|587|5587|174|175|XGAAAA|VTJAAA|VVVVxx
+9172|6600|0|0|2|12|72|172|1172|4172|9172|144|145|UOAAAA|WTJAAA|AAAAxx
+5589|6601|1|1|9|9|89|589|1589|589|5589|178|179|ZGAAAA|XTJAAA|HHHHxx
+5103|6602|1|3|3|3|3|103|1103|103|5103|6|7|HOAAAA|YTJAAA|OOOOxx
+3177|6603|1|1|7|17|77|177|1177|3177|3177|154|155|FSAAAA|ZTJAAA|VVVVxx
+8887|6604|1|3|7|7|87|887|887|3887|8887|174|175|VDAAAA|AUJAAA|AAAAxx
+12|6605|0|0|2|12|12|12|12|12|12|24|25|MAAAAA|BUJAAA|HHHHxx
+8575|6606|1|3|5|15|75|575|575|3575|8575|150|151|VRAAAA|CUJAAA|OOOOxx
+4335|6607|1|3|5|15|35|335|335|4335|4335|70|71|TKAAAA|DUJAAA|VVVVxx
+4581|6608|1|1|1|1|81|581|581|4581|4581|162|163|FUAAAA|EUJAAA|AAAAxx
+4444|6609|0|0|4|4|44|444|444|4444|4444|88|89|YOAAAA|FUJAAA|HHHHxx
+7978|6610|0|2|8|18|78|978|1978|2978|7978|156|157|WUAAAA|GUJAAA|OOOOxx
+3081|6611|1|1|1|1|81|81|1081|3081|3081|162|163|NOAAAA|HUJAAA|VVVVxx
+4059|6612|1|3|9|19|59|59|59|4059|4059|118|119|DAAAAA|IUJAAA|AAAAxx
+5711|6613|1|3|1|11|11|711|1711|711|5711|22|23|RLAAAA|JUJAAA|HHHHxx
+7069|6614|1|1|9|9|69|69|1069|2069|7069|138|139|XLAAAA|KUJAAA|OOOOxx
+6150|6615|0|2|0|10|50|150|150|1150|6150|100|101|OCAAAA|LUJAAA|VVVVxx
+9550|6616|0|2|0|10|50|550|1550|4550|9550|100|101|IDAAAA|MUJAAA|AAAAxx
+7087|6617|1|3|7|7|87|87|1087|2087|7087|174|175|PMAAAA|NUJAAA|HHHHxx
+9557|6618|1|1|7|17|57|557|1557|4557|9557|114|115|PDAAAA|OUJAAA|OOOOxx
+7856|6619|0|0|6|16|56|856|1856|2856|7856|112|113|EQAAAA|PUJAAA|VVVVxx
+1115|6620|1|3|5|15|15|115|1115|1115|1115|30|31|XQAAAA|QUJAAA|AAAAxx
+1086|6621|0|2|6|6|86|86|1086|1086|1086|172|173|UPAAAA|RUJAAA|HHHHxx
+5048|6622|0|0|8|8|48|48|1048|48|5048|96|97|EMAAAA|SUJAAA|OOOOxx
+5168|6623|0|0|8|8|68|168|1168|168|5168|136|137|UQAAAA|TUJAAA|VVVVxx
+6029|6624|1|1|9|9|29|29|29|1029|6029|58|59|XXAAAA|UUJAAA|AAAAxx
+546|6625|0|2|6|6|46|546|546|546|546|92|93|AVAAAA|VUJAAA|HHHHxx
+2908|6626|0|0|8|8|8|908|908|2908|2908|16|17|WHAAAA|WUJAAA|OOOOxx
+779|6627|1|3|9|19|79|779|779|779|779|158|159|ZDAAAA|XUJAAA|VVVVxx
+4202|6628|0|2|2|2|2|202|202|4202|4202|4|5|QFAAAA|YUJAAA|AAAAxx
+9984|6629|0|0|4|4|84|984|1984|4984|9984|168|169|AUAAAA|ZUJAAA|HHHHxx
+4730|6630|0|2|0|10|30|730|730|4730|4730|60|61|YZAAAA|AVJAAA|OOOOxx
+6517|6631|1|1|7|17|17|517|517|1517|6517|34|35|RQAAAA|BVJAAA|VVVVxx
+8410|6632|0|2|0|10|10|410|410|3410|8410|20|21|MLAAAA|CVJAAA|AAAAxx
+4793|6633|1|1|3|13|93|793|793|4793|4793|186|187|JCAAAA|DVJAAA|HHHHxx
+3431|6634|1|3|1|11|31|431|1431|3431|3431|62|63|ZBAAAA|EVJAAA|OOOOxx
+2481|6635|1|1|1|1|81|481|481|2481|2481|162|163|LRAAAA|FVJAAA|VVVVxx
+3905|6636|1|1|5|5|5|905|1905|3905|3905|10|11|FUAAAA|GVJAAA|AAAAxx
+8807|6637|1|3|7|7|7|807|807|3807|8807|14|15|TAAAAA|HVJAAA|HHHHxx
+2660|6638|0|0|0|0|60|660|660|2660|2660|120|121|IYAAAA|IVJAAA|OOOOxx
+4985|6639|1|1|5|5|85|985|985|4985|4985|170|171|TJAAAA|JVJAAA|VVVVxx
+3080|6640|0|0|0|0|80|80|1080|3080|3080|160|161|MOAAAA|KVJAAA|AAAAxx
+1090|6641|0|2|0|10|90|90|1090|1090|1090|180|181|YPAAAA|LVJAAA|HHHHxx
+6917|6642|1|1|7|17|17|917|917|1917|6917|34|35|BGAAAA|MVJAAA|OOOOxx
+5177|6643|1|1|7|17|77|177|1177|177|5177|154|155|DRAAAA|NVJAAA|VVVVxx
+2729|6644|1|1|9|9|29|729|729|2729|2729|58|59|ZAAAAA|OVJAAA|AAAAxx
+9706|6645|0|2|6|6|6|706|1706|4706|9706|12|13|IJAAAA|PVJAAA|HHHHxx
+9929|6646|1|1|9|9|29|929|1929|4929|9929|58|59|XRAAAA|QVJAAA|OOOOxx
+1547|6647|1|3|7|7|47|547|1547|1547|1547|94|95|NHAAAA|RVJAAA|VVVVxx
+2798|6648|0|2|8|18|98|798|798|2798|2798|196|197|QDAAAA|SVJAAA|AAAAxx
+4420|6649|0|0|0|0|20|420|420|4420|4420|40|41|AOAAAA|TVJAAA|HHHHxx
+6771|6650|1|3|1|11|71|771|771|1771|6771|142|143|LAAAAA|UVJAAA|OOOOxx
+2004|6651|0|0|4|4|4|4|4|2004|2004|8|9|CZAAAA|VVJAAA|VVVVxx
+8686|6652|0|2|6|6|86|686|686|3686|8686|172|173|CWAAAA|WVJAAA|AAAAxx
+3663|6653|1|3|3|3|63|663|1663|3663|3663|126|127|XKAAAA|XVJAAA|HHHHxx
+806|6654|0|2|6|6|6|806|806|806|806|12|13|AFAAAA|YVJAAA|OOOOxx
+4309|6655|1|1|9|9|9|309|309|4309|4309|18|19|TJAAAA|ZVJAAA|VVVVxx
+7443|6656|1|3|3|3|43|443|1443|2443|7443|86|87|HAAAAA|AWJAAA|AAAAxx
+5779|6657|1|3|9|19|79|779|1779|779|5779|158|159|HOAAAA|BWJAAA|HHHHxx
+8821|6658|1|1|1|1|21|821|821|3821|8821|42|43|HBAAAA|CWJAAA|OOOOxx
+4198|6659|0|2|8|18|98|198|198|4198|4198|196|197|MFAAAA|DWJAAA|VVVVxx
+8115|6660|1|3|5|15|15|115|115|3115|8115|30|31|DAAAAA|EWJAAA|AAAAxx
+9554|6661|0|2|4|14|54|554|1554|4554|9554|108|109|MDAAAA|FWJAAA|HHHHxx
+8956|6662|0|0|6|16|56|956|956|3956|8956|112|113|MGAAAA|GWJAAA|OOOOxx
+4733|6663|1|1|3|13|33|733|733|4733|4733|66|67|BAAAAA|HWJAAA|VVVVxx
+5417|6664|1|1|7|17|17|417|1417|417|5417|34|35|JAAAAA|IWJAAA|AAAAxx
+4792|6665|0|0|2|12|92|792|792|4792|4792|184|185|ICAAAA|JWJAAA|HHHHxx
+462|6666|0|2|2|2|62|462|462|462|462|124|125|URAAAA|KWJAAA|OOOOxx
+3687|6667|1|3|7|7|87|687|1687|3687|3687|174|175|VLAAAA|LWJAAA|VVVVxx
+2013|6668|1|1|3|13|13|13|13|2013|2013|26|27|LZAAAA|MWJAAA|AAAAxx
+5386|6669|0|2|6|6|86|386|1386|386|5386|172|173|EZAAAA|NWJAAA|HHHHxx
+2816|6670|0|0|6|16|16|816|816|2816|2816|32|33|IEAAAA|OWJAAA|OOOOxx
+7827|6671|1|3|7|7|27|827|1827|2827|7827|54|55|BPAAAA|PWJAAA|VVVVxx
+5077|6672|1|1|7|17|77|77|1077|77|5077|154|155|HNAAAA|QWJAAA|AAAAxx
+6039|6673|1|3|9|19|39|39|39|1039|6039|78|79|HYAAAA|RWJAAA|HHHHxx
+215|6674|1|3|5|15|15|215|215|215|215|30|31|HIAAAA|SWJAAA|OOOOxx
+855|6675|1|3|5|15|55|855|855|855|855|110|111|XGAAAA|TWJAAA|VVVVxx
+9692|6676|0|0|2|12|92|692|1692|4692|9692|184|185|UIAAAA|UWJAAA|AAAAxx
+8391|6677|1|3|1|11|91|391|391|3391|8391|182|183|TKAAAA|VWJAAA|HHHHxx
+8424|6678|0|0|4|4|24|424|424|3424|8424|48|49|AMAAAA|WWJAAA|OOOOxx
+6331|6679|1|3|1|11|31|331|331|1331|6331|62|63|NJAAAA|XWJAAA|VVVVxx
+6561|6680|1|1|1|1|61|561|561|1561|6561|122|123|JSAAAA|YWJAAA|AAAAxx
+8955|6681|1|3|5|15|55|955|955|3955|8955|110|111|LGAAAA|ZWJAAA|HHHHxx
+1764|6682|0|0|4|4|64|764|1764|1764|1764|128|129|WPAAAA|AXJAAA|OOOOxx
+6623|6683|1|3|3|3|23|623|623|1623|6623|46|47|TUAAAA|BXJAAA|VVVVxx
+2900|6684|0|0|0|0|0|900|900|2900|2900|0|1|OHAAAA|CXJAAA|AAAAxx
+7048|6685|0|0|8|8|48|48|1048|2048|7048|96|97|CLAAAA|DXJAAA|HHHHxx
+3843|6686|1|3|3|3|43|843|1843|3843|3843|86|87|VRAAAA|EXJAAA|OOOOxx
+4855|6687|1|3|5|15|55|855|855|4855|4855|110|111|TEAAAA|FXJAAA|VVVVxx
+7383|6688|1|3|3|3|83|383|1383|2383|7383|166|167|ZXAAAA|GXJAAA|AAAAxx
+7765|6689|1|1|5|5|65|765|1765|2765|7765|130|131|RMAAAA|HXJAAA|HHHHxx
+1125|6690|1|1|5|5|25|125|1125|1125|1125|50|51|HRAAAA|IXJAAA|OOOOxx
+755|6691|1|3|5|15|55|755|755|755|755|110|111|BDAAAA|JXJAAA|VVVVxx
+2995|6692|1|3|5|15|95|995|995|2995|2995|190|191|FLAAAA|KXJAAA|AAAAxx
+8907|6693|1|3|7|7|7|907|907|3907|8907|14|15|PEAAAA|LXJAAA|HHHHxx
+9357|6694|1|1|7|17|57|357|1357|4357|9357|114|115|XVAAAA|MXJAAA|OOOOxx
+4469|6695|1|1|9|9|69|469|469|4469|4469|138|139|XPAAAA|NXJAAA|VVVVxx
+2147|6696|1|3|7|7|47|147|147|2147|2147|94|95|PEAAAA|OXJAAA|AAAAxx
+2952|6697|0|0|2|12|52|952|952|2952|2952|104|105|OJAAAA|PXJAAA|HHHHxx
+1324|6698|0|0|4|4|24|324|1324|1324|1324|48|49|YYAAAA|QXJAAA|OOOOxx
+1173|6699|1|1|3|13|73|173|1173|1173|1173|146|147|DTAAAA|RXJAAA|VVVVxx
+3169|6700|1|1|9|9|69|169|1169|3169|3169|138|139|XRAAAA|SXJAAA|AAAAxx
+5149|6701|1|1|9|9|49|149|1149|149|5149|98|99|BQAAAA|TXJAAA|HHHHxx
+9660|6702|0|0|0|0|60|660|1660|4660|9660|120|121|OHAAAA|UXJAAA|OOOOxx
+3446|6703|0|2|6|6|46|446|1446|3446|3446|92|93|OCAAAA|VXJAAA|VVVVxx
+6988|6704|0|0|8|8|88|988|988|1988|6988|176|177|UIAAAA|WXJAAA|AAAAxx
+5829|6705|1|1|9|9|29|829|1829|829|5829|58|59|FQAAAA|XXJAAA|HHHHxx
+7166|6706|0|2|6|6|66|166|1166|2166|7166|132|133|QPAAAA|YXJAAA|OOOOxx
+3940|6707|0|0|0|0|40|940|1940|3940|3940|80|81|OVAAAA|ZXJAAA|VVVVxx
+2645|6708|1|1|5|5|45|645|645|2645|2645|90|91|TXAAAA|AYJAAA|AAAAxx
+478|6709|0|2|8|18|78|478|478|478|478|156|157|KSAAAA|BYJAAA|HHHHxx
+1156|6710|0|0|6|16|56|156|1156|1156|1156|112|113|MSAAAA|CYJAAA|OOOOxx
+2731|6711|1|3|1|11|31|731|731|2731|2731|62|63|BBAAAA|DYJAAA|VVVVxx
+5637|6712|1|1|7|17|37|637|1637|637|5637|74|75|VIAAAA|EYJAAA|AAAAxx
+7517|6713|1|1|7|17|17|517|1517|2517|7517|34|35|DDAAAA|FYJAAA|HHHHxx
+5331|6714|1|3|1|11|31|331|1331|331|5331|62|63|BXAAAA|GYJAAA|OOOOxx
+9640|6715|0|0|0|0|40|640|1640|4640|9640|80|81|UGAAAA|HYJAAA|VVVVxx
+4108|6716|0|0|8|8|8|108|108|4108|4108|16|17|ACAAAA|IYJAAA|AAAAxx
+1087|6717|1|3|7|7|87|87|1087|1087|1087|174|175|VPAAAA|JYJAAA|HHHHxx
+8017|6718|1|1|7|17|17|17|17|3017|8017|34|35|JWAAAA|KYJAAA|OOOOxx
+8795|6719|1|3|5|15|95|795|795|3795|8795|190|191|HAAAAA|LYJAAA|VVVVxx
+7060|6720|0|0|0|0|60|60|1060|2060|7060|120|121|OLAAAA|MYJAAA|AAAAxx
+9450|6721|0|2|0|10|50|450|1450|4450|9450|100|101|MZAAAA|NYJAAA|HHHHxx
+390|6722|0|2|0|10|90|390|390|390|390|180|181|APAAAA|OYJAAA|OOOOxx
+66|6723|0|2|6|6|66|66|66|66|66|132|133|OCAAAA|PYJAAA|VVVVxx
+8789|6724|1|1|9|9|89|789|789|3789|8789|178|179|BAAAAA|QYJAAA|AAAAxx
+9260|6725|0|0|0|0|60|260|1260|4260|9260|120|121|ESAAAA|RYJAAA|HHHHxx
+6679|6726|1|3|9|19|79|679|679|1679|6679|158|159|XWAAAA|SYJAAA|OOOOxx
+9052|6727|0|0|2|12|52|52|1052|4052|9052|104|105|EKAAAA|TYJAAA|VVVVxx
+9561|6728|1|1|1|1|61|561|1561|4561|9561|122|123|TDAAAA|UYJAAA|AAAAxx
+9725|6729|1|1|5|5|25|725|1725|4725|9725|50|51|BKAAAA|VYJAAA|HHHHxx
+6298|6730|0|2|8|18|98|298|298|1298|6298|196|197|GIAAAA|WYJAAA|OOOOxx
+8654|6731|0|2|4|14|54|654|654|3654|8654|108|109|WUAAAA|XYJAAA|VVVVxx
+8725|6732|1|1|5|5|25|725|725|3725|8725|50|51|PXAAAA|YYJAAA|AAAAxx
+9377|6733|1|1|7|17|77|377|1377|4377|9377|154|155|RWAAAA|ZYJAAA|HHHHxx
+3807|6734|1|3|7|7|7|807|1807|3807|3807|14|15|LQAAAA|AZJAAA|OOOOxx
+8048|6735|0|0|8|8|48|48|48|3048|8048|96|97|OXAAAA|BZJAAA|VVVVxx
+764|6736|0|0|4|4|64|764|764|764|764|128|129|KDAAAA|CZJAAA|AAAAxx
+9702|6737|0|2|2|2|2|702|1702|4702|9702|4|5|EJAAAA|DZJAAA|HHHHxx
+8060|6738|0|0|0|0|60|60|60|3060|8060|120|121|AYAAAA|EZJAAA|OOOOxx
+6371|6739|1|3|1|11|71|371|371|1371|6371|142|143|BLAAAA|FZJAAA|VVVVxx
+5237|6740|1|1|7|17|37|237|1237|237|5237|74|75|LTAAAA|GZJAAA|AAAAxx
+743|6741|1|3|3|3|43|743|743|743|743|86|87|PCAAAA|HZJAAA|HHHHxx
+7395|6742|1|3|5|15|95|395|1395|2395|7395|190|191|LYAAAA|IZJAAA|OOOOxx
+3365|6743|1|1|5|5|65|365|1365|3365|3365|130|131|LZAAAA|JZJAAA|VVVVxx
+6667|6744|1|3|7|7|67|667|667|1667|6667|134|135|LWAAAA|KZJAAA|AAAAxx
+3445|6745|1|1|5|5|45|445|1445|3445|3445|90|91|NCAAAA|LZJAAA|HHHHxx
+4019|6746|1|3|9|19|19|19|19|4019|4019|38|39|PYAAAA|MZJAAA|OOOOxx
+7035|6747|1|3|5|15|35|35|1035|2035|7035|70|71|PKAAAA|NZJAAA|VVVVxx
+5274|6748|0|2|4|14|74|274|1274|274|5274|148|149|WUAAAA|OZJAAA|AAAAxx
+519|6749|1|3|9|19|19|519|519|519|519|38|39|ZTAAAA|PZJAAA|HHHHxx
+2801|6750|1|1|1|1|1|801|801|2801|2801|2|3|TDAAAA|QZJAAA|OOOOxx
+3320|6751|0|0|0|0|20|320|1320|3320|3320|40|41|SXAAAA|RZJAAA|VVVVxx
+3153|6752|1|1|3|13|53|153|1153|3153|3153|106|107|HRAAAA|SZJAAA|AAAAxx
+7680|6753|0|0|0|0|80|680|1680|2680|7680|160|161|KJAAAA|TZJAAA|HHHHxx
+8942|6754|0|2|2|2|42|942|942|3942|8942|84|85|YFAAAA|UZJAAA|OOOOxx
+3195|6755|1|3|5|15|95|195|1195|3195|3195|190|191|XSAAAA|VZJAAA|VVVVxx
+2287|6756|1|3|7|7|87|287|287|2287|2287|174|175|ZJAAAA|WZJAAA|AAAAxx
+8325|6757|1|1|5|5|25|325|325|3325|8325|50|51|FIAAAA|XZJAAA|HHHHxx
+2603|6758|1|3|3|3|3|603|603|2603|2603|6|7|DWAAAA|YZJAAA|OOOOxx
+5871|6759|1|3|1|11|71|871|1871|871|5871|142|143|VRAAAA|ZZJAAA|VVVVxx
+1773|6760|1|1|3|13|73|773|1773|1773|1773|146|147|FQAAAA|AAKAAA|AAAAxx
+3323|6761|1|3|3|3|23|323|1323|3323|3323|46|47|VXAAAA|BAKAAA|HHHHxx
+2053|6762|1|1|3|13|53|53|53|2053|2053|106|107|ZAAAAA|CAKAAA|OOOOxx
+4062|6763|0|2|2|2|62|62|62|4062|4062|124|125|GAAAAA|DAKAAA|VVVVxx
+4611|6764|1|3|1|11|11|611|611|4611|4611|22|23|JVAAAA|EAKAAA|AAAAxx
+3451|6765|1|3|1|11|51|451|1451|3451|3451|102|103|TCAAAA|FAKAAA|HHHHxx
+1819|6766|1|3|9|19|19|819|1819|1819|1819|38|39|ZRAAAA|GAKAAA|OOOOxx
+9806|6767|0|2|6|6|6|806|1806|4806|9806|12|13|ENAAAA|HAKAAA|VVVVxx
+6619|6768|1|3|9|19|19|619|619|1619|6619|38|39|PUAAAA|IAKAAA|AAAAxx
+1031|6769|1|3|1|11|31|31|1031|1031|1031|62|63|RNAAAA|JAKAAA|HHHHxx
+1865|6770|1|1|5|5|65|865|1865|1865|1865|130|131|TTAAAA|KAKAAA|OOOOxx
+6282|6771|0|2|2|2|82|282|282|1282|6282|164|165|QHAAAA|LAKAAA|VVVVxx
+1178|6772|0|2|8|18|78|178|1178|1178|1178|156|157|ITAAAA|MAKAAA|AAAAxx
+8007|6773|1|3|7|7|7|7|7|3007|8007|14|15|ZVAAAA|NAKAAA|HHHHxx
+9126|6774|0|2|6|6|26|126|1126|4126|9126|52|53|ANAAAA|OAKAAA|OOOOxx
+9113|6775|1|1|3|13|13|113|1113|4113|9113|26|27|NMAAAA|PAKAAA|VVVVxx
+537|6776|1|1|7|17|37|537|537|537|537|74|75|RUAAAA|QAKAAA|AAAAxx
+6208|6777|0|0|8|8|8|208|208|1208|6208|16|17|UEAAAA|RAKAAA|HHHHxx
+1626|6778|0|2|6|6|26|626|1626|1626|1626|52|53|OKAAAA|SAKAAA|OOOOxx
+7188|6779|0|0|8|8|88|188|1188|2188|7188|176|177|MQAAAA|TAKAAA|VVVVxx
+9216|6780|0|0|6|16|16|216|1216|4216|9216|32|33|MQAAAA|UAKAAA|AAAAxx
+6134|6781|0|2|4|14|34|134|134|1134|6134|68|69|YBAAAA|VAKAAA|HHHHxx
+2074|6782|0|2|4|14|74|74|74|2074|2074|148|149|UBAAAA|WAKAAA|OOOOxx
+6369|6783|1|1|9|9|69|369|369|1369|6369|138|139|ZKAAAA|XAKAAA|VVVVxx
+9306|6784|0|2|6|6|6|306|1306|4306|9306|12|13|YTAAAA|YAKAAA|AAAAxx
+3155|6785|1|3|5|15|55|155|1155|3155|3155|110|111|JRAAAA|ZAKAAA|HHHHxx
+3611|6786|1|3|1|11|11|611|1611|3611|3611|22|23|XIAAAA|ABKAAA|OOOOxx
+6530|6787|0|2|0|10|30|530|530|1530|6530|60|61|ERAAAA|BBKAAA|VVVVxx
+6979|6788|1|3|9|19|79|979|979|1979|6979|158|159|LIAAAA|CBKAAA|AAAAxx
+9129|6789|1|1|9|9|29|129|1129|4129|9129|58|59|DNAAAA|DBKAAA|HHHHxx
+8013|6790|1|1|3|13|13|13|13|3013|8013|26|27|FWAAAA|EBKAAA|OOOOxx
+6926|6791|0|2|6|6|26|926|926|1926|6926|52|53|KGAAAA|FBKAAA|VVVVxx
+1877|6792|1|1|7|17|77|877|1877|1877|1877|154|155|FUAAAA|GBKAAA|AAAAxx
+1882|6793|0|2|2|2|82|882|1882|1882|1882|164|165|KUAAAA|HBKAAA|HHHHxx
+6720|6794|0|0|0|0|20|720|720|1720|6720|40|41|MYAAAA|IBKAAA|OOOOxx
+690|6795|0|2|0|10|90|690|690|690|690|180|181|OAAAAA|JBKAAA|VVVVxx
+143|6796|1|3|3|3|43|143|143|143|143|86|87|NFAAAA|KBKAAA|AAAAxx
+7241|6797|1|1|1|1|41|241|1241|2241|7241|82|83|NSAAAA|LBKAAA|HHHHxx
+6461|6798|1|1|1|1|61|461|461|1461|6461|122|123|NOAAAA|MBKAAA|OOOOxx
+2258|6799|0|2|8|18|58|258|258|2258|2258|116|117|WIAAAA|NBKAAA|VVVVxx
+2280|6800|0|0|0|0|80|280|280|2280|2280|160|161|SJAAAA|OBKAAA|AAAAxx
+7556|6801|0|0|6|16|56|556|1556|2556|7556|112|113|QEAAAA|PBKAAA|HHHHxx
+1038|6802|0|2|8|18|38|38|1038|1038|1038|76|77|YNAAAA|QBKAAA|OOOOxx
+2634|6803|0|2|4|14|34|634|634|2634|2634|68|69|IXAAAA|RBKAAA|VVVVxx
+7847|6804|1|3|7|7|47|847|1847|2847|7847|94|95|VPAAAA|SBKAAA|AAAAxx
+4415|6805|1|3|5|15|15|415|415|4415|4415|30|31|VNAAAA|TBKAAA|HHHHxx
+1933|6806|1|1|3|13|33|933|1933|1933|1933|66|67|JWAAAA|UBKAAA|OOOOxx
+8034|6807|0|2|4|14|34|34|34|3034|8034|68|69|AXAAAA|VBKAAA|VVVVxx
+9233|6808|1|1|3|13|33|233|1233|4233|9233|66|67|DRAAAA|WBKAAA|AAAAxx
+6572|6809|0|0|2|12|72|572|572|1572|6572|144|145|USAAAA|XBKAAA|HHHHxx
+1586|6810|0|2|6|6|86|586|1586|1586|1586|172|173|AJAAAA|YBKAAA|OOOOxx
+8512|6811|0|0|2|12|12|512|512|3512|8512|24|25|KPAAAA|ZBKAAA|VVVVxx
+7421|6812|1|1|1|1|21|421|1421|2421|7421|42|43|LZAAAA|ACKAAA|AAAAxx
+503|6813|1|3|3|3|3|503|503|503|503|6|7|JTAAAA|BCKAAA|HHHHxx
+5332|6814|0|0|2|12|32|332|1332|332|5332|64|65|CXAAAA|CCKAAA|OOOOxx
+2602|6815|0|2|2|2|2|602|602|2602|2602|4|5|CWAAAA|DCKAAA|VVVVxx
+2902|6816|0|2|2|2|2|902|902|2902|2902|4|5|QHAAAA|ECKAAA|AAAAxx
+2979|6817|1|3|9|19|79|979|979|2979|2979|158|159|PKAAAA|FCKAAA|HHHHxx
+1431|6818|1|3|1|11|31|431|1431|1431|1431|62|63|BDAAAA|GCKAAA|OOOOxx
+8639|6819|1|3|9|19|39|639|639|3639|8639|78|79|HUAAAA|HCKAAA|VVVVxx
+4218|6820|0|2|8|18|18|218|218|4218|4218|36|37|GGAAAA|ICKAAA|AAAAxx
+7453|6821|1|1|3|13|53|453|1453|2453|7453|106|107|RAAAAA|JCKAAA|HHHHxx
+5448|6822|0|0|8|8|48|448|1448|448|5448|96|97|OBAAAA|KCKAAA|OOOOxx
+6768|6823|0|0|8|8|68|768|768|1768|6768|136|137|IAAAAA|LCKAAA|VVVVxx
+3104|6824|0|0|4|4|4|104|1104|3104|3104|8|9|KPAAAA|MCKAAA|AAAAxx
+2297|6825|1|1|7|17|97|297|297|2297|2297|194|195|JKAAAA|NCKAAA|HHHHxx
+7994|6826|0|2|4|14|94|994|1994|2994|7994|188|189|MVAAAA|OCKAAA|OOOOxx
+550|6827|0|2|0|10|50|550|550|550|550|100|101|EVAAAA|PCKAAA|VVVVxx
+4777|6828|1|1|7|17|77|777|777|4777|4777|154|155|TBAAAA|QCKAAA|AAAAxx
+5962|6829|0|2|2|2|62|962|1962|962|5962|124|125|IVAAAA|RCKAAA|HHHHxx
+1763|6830|1|3|3|3|63|763|1763|1763|1763|126|127|VPAAAA|SCKAAA|OOOOxx
+3654|6831|0|2|4|14|54|654|1654|3654|3654|108|109|OKAAAA|TCKAAA|VVVVxx
+4106|6832|0|2|6|6|6|106|106|4106|4106|12|13|YBAAAA|UCKAAA|AAAAxx
+5156|6833|0|0|6|16|56|156|1156|156|5156|112|113|IQAAAA|VCKAAA|HHHHxx
+422|6834|0|2|2|2|22|422|422|422|422|44|45|GQAAAA|WCKAAA|OOOOxx
+5011|6835|1|3|1|11|11|11|1011|11|5011|22|23|TKAAAA|XCKAAA|VVVVxx
+218|6836|0|2|8|18|18|218|218|218|218|36|37|KIAAAA|YCKAAA|AAAAxx
+9762|6837|0|2|2|2|62|762|1762|4762|9762|124|125|MLAAAA|ZCKAAA|HHHHxx
+6074|6838|0|2|4|14|74|74|74|1074|6074|148|149|QZAAAA|ADKAAA|OOOOxx
+4060|6839|0|0|0|0|60|60|60|4060|4060|120|121|EAAAAA|BDKAAA|VVVVxx
+8680|6840|0|0|0|0|80|680|680|3680|8680|160|161|WVAAAA|CDKAAA|AAAAxx
+5863|6841|1|3|3|3|63|863|1863|863|5863|126|127|NRAAAA|DDKAAA|HHHHxx
+8042|6842|0|2|2|2|42|42|42|3042|8042|84|85|IXAAAA|EDKAAA|OOOOxx
+2964|6843|0|0|4|4|64|964|964|2964|2964|128|129|AKAAAA|FDKAAA|VVVVxx
+6931|6844|1|3|1|11|31|931|931|1931|6931|62|63|PGAAAA|GDKAAA|AAAAxx
+6715|6845|1|3|5|15|15|715|715|1715|6715|30|31|HYAAAA|HDKAAA|HHHHxx
+5859|6846|1|3|9|19|59|859|1859|859|5859|118|119|JRAAAA|IDKAAA|OOOOxx
+6173|6847|1|1|3|13|73|173|173|1173|6173|146|147|LDAAAA|JDKAAA|VVVVxx
+7788|6848|0|0|8|8|88|788|1788|2788|7788|176|177|ONAAAA|KDKAAA|AAAAxx
+9370|6849|0|2|0|10|70|370|1370|4370|9370|140|141|KWAAAA|LDKAAA|HHHHxx
+3038|6850|0|2|8|18|38|38|1038|3038|3038|76|77|WMAAAA|MDKAAA|OOOOxx
+6483|6851|1|3|3|3|83|483|483|1483|6483|166|167|JPAAAA|NDKAAA|VVVVxx
+7534|6852|0|2|4|14|34|534|1534|2534|7534|68|69|UDAAAA|ODKAAA|AAAAxx
+5769|6853|1|1|9|9|69|769|1769|769|5769|138|139|XNAAAA|PDKAAA|HHHHxx
+9152|6854|0|0|2|12|52|152|1152|4152|9152|104|105|AOAAAA|QDKAAA|OOOOxx
+6251|6855|1|3|1|11|51|251|251|1251|6251|102|103|LGAAAA|RDKAAA|VVVVxx
+9209|6856|1|1|9|9|9|209|1209|4209|9209|18|19|FQAAAA|SDKAAA|AAAAxx
+5365|6857|1|1|5|5|65|365|1365|365|5365|130|131|JYAAAA|TDKAAA|HHHHxx
+509|6858|1|1|9|9|9|509|509|509|509|18|19|PTAAAA|UDKAAA|OOOOxx
+3132|6859|0|0|2|12|32|132|1132|3132|3132|64|65|MQAAAA|VDKAAA|VVVVxx
+5373|6860|1|1|3|13|73|373|1373|373|5373|146|147|RYAAAA|WDKAAA|AAAAxx
+4247|6861|1|3|7|7|47|247|247|4247|4247|94|95|JHAAAA|XDKAAA|HHHHxx
+3491|6862|1|3|1|11|91|491|1491|3491|3491|182|183|HEAAAA|YDKAAA|OOOOxx
+495|6863|1|3|5|15|95|495|495|495|495|190|191|BTAAAA|ZDKAAA|VVVVxx
+1594|6864|0|2|4|14|94|594|1594|1594|1594|188|189|IJAAAA|AEKAAA|AAAAxx
+2243|6865|1|3|3|3|43|243|243|2243|2243|86|87|HIAAAA|BEKAAA|HHHHxx
+7780|6866|0|0|0|0|80|780|1780|2780|7780|160|161|GNAAAA|CEKAAA|OOOOxx
+5632|6867|0|0|2|12|32|632|1632|632|5632|64|65|QIAAAA|DEKAAA|VVVVxx
+2679|6868|1|3|9|19|79|679|679|2679|2679|158|159|BZAAAA|EEKAAA|AAAAxx
+1354|6869|0|2|4|14|54|354|1354|1354|1354|108|109|CAAAAA|FEKAAA|HHHHxx
+180|6870|0|0|0|0|80|180|180|180|180|160|161|YGAAAA|GEKAAA|OOOOxx
+7017|6871|1|1|7|17|17|17|1017|2017|7017|34|35|XJAAAA|HEKAAA|VVVVxx
+1867|6872|1|3|7|7|67|867|1867|1867|1867|134|135|VTAAAA|IEKAAA|AAAAxx
+2213|6873|1|1|3|13|13|213|213|2213|2213|26|27|DHAAAA|JEKAAA|HHHHxx
+8773|6874|1|1|3|13|73|773|773|3773|8773|146|147|LZAAAA|KEKAAA|OOOOxx
+1784|6875|0|0|4|4|84|784|1784|1784|1784|168|169|QQAAAA|LEKAAA|VVVVxx
+5961|6876|1|1|1|1|61|961|1961|961|5961|122|123|HVAAAA|MEKAAA|AAAAxx
+8801|6877|1|1|1|1|1|801|801|3801|8801|2|3|NAAAAA|NEKAAA|HHHHxx
+4860|6878|0|0|0|0|60|860|860|4860|4860|120|121|YEAAAA|OEKAAA|OOOOxx
+2214|6879|0|2|4|14|14|214|214|2214|2214|28|29|EHAAAA|PEKAAA|VVVVxx
+1735|6880|1|3|5|15|35|735|1735|1735|1735|70|71|TOAAAA|QEKAAA|AAAAxx
+578|6881|0|2|8|18|78|578|578|578|578|156|157|GWAAAA|REKAAA|HHHHxx
+7853|6882|1|1|3|13|53|853|1853|2853|7853|106|107|BQAAAA|SEKAAA|OOOOxx
+2215|6883|1|3|5|15|15|215|215|2215|2215|30|31|FHAAAA|TEKAAA|VVVVxx
+4704|6884|0|0|4|4|4|704|704|4704|4704|8|9|YYAAAA|UEKAAA|AAAAxx
+9379|6885|1|3|9|19|79|379|1379|4379|9379|158|159|TWAAAA|VEKAAA|HHHHxx
+9745|6886|1|1|5|5|45|745|1745|4745|9745|90|91|VKAAAA|WEKAAA|OOOOxx
+5636|6887|0|0|6|16|36|636|1636|636|5636|72|73|UIAAAA|XEKAAA|VVVVxx
+4548|6888|0|0|8|8|48|548|548|4548|4548|96|97|YSAAAA|YEKAAA|AAAAxx
+6537|6889|1|1|7|17|37|537|537|1537|6537|74|75|LRAAAA|ZEKAAA|HHHHxx
+7748|6890|0|0|8|8|48|748|1748|2748|7748|96|97|AMAAAA|AFKAAA|OOOOxx
+687|6891|1|3|7|7|87|687|687|687|687|174|175|LAAAAA|BFKAAA|VVVVxx
+1243|6892|1|3|3|3|43|243|1243|1243|1243|86|87|VVAAAA|CFKAAA|AAAAxx
+852|6893|0|0|2|12|52|852|852|852|852|104|105|UGAAAA|DFKAAA|HHHHxx
+785|6894|1|1|5|5|85|785|785|785|785|170|171|FEAAAA|EFKAAA|OOOOxx
+2002|6895|0|2|2|2|2|2|2|2002|2002|4|5|AZAAAA|FFKAAA|VVVVxx
+2748|6896|0|0|8|8|48|748|748|2748|2748|96|97|SBAAAA|GFKAAA|AAAAxx
+6075|6897|1|3|5|15|75|75|75|1075|6075|150|151|RZAAAA|HFKAAA|HHHHxx
+7029|6898|1|1|9|9|29|29|1029|2029|7029|58|59|JKAAAA|IFKAAA|OOOOxx
+7474|6899|0|2|4|14|74|474|1474|2474|7474|148|149|MBAAAA|JFKAAA|VVVVxx
+7755|6900|1|3|5|15|55|755|1755|2755|7755|110|111|HMAAAA|KFKAAA|AAAAxx
+1456|6901|0|0|6|16|56|456|1456|1456|1456|112|113|AEAAAA|LFKAAA|HHHHxx
+2808|6902|0|0|8|8|8|808|808|2808|2808|16|17|AEAAAA|MFKAAA|OOOOxx
+4089|6903|1|1|9|9|89|89|89|4089|4089|178|179|HBAAAA|NFKAAA|VVVVxx
+4718|6904|0|2|8|18|18|718|718|4718|4718|36|37|MZAAAA|OFKAAA|AAAAxx
+910|6905|0|2|0|10|10|910|910|910|910|20|21|AJAAAA|PFKAAA|HHHHxx
+2868|6906|0|0|8|8|68|868|868|2868|2868|136|137|IGAAAA|QFKAAA|OOOOxx
+2103|6907|1|3|3|3|3|103|103|2103|2103|6|7|XCAAAA|RFKAAA|VVVVxx
+2407|6908|1|3|7|7|7|407|407|2407|2407|14|15|POAAAA|SFKAAA|AAAAxx
+4353|6909|1|1|3|13|53|353|353|4353|4353|106|107|LLAAAA|TFKAAA|HHHHxx
+7988|6910|0|0|8|8|88|988|1988|2988|7988|176|177|GVAAAA|UFKAAA|OOOOxx
+2750|6911|0|2|0|10|50|750|750|2750|2750|100|101|UBAAAA|VFKAAA|VVVVxx
+2006|6912|0|2|6|6|6|6|6|2006|2006|12|13|EZAAAA|WFKAAA|AAAAxx
+4617|6913|1|1|7|17|17|617|617|4617|4617|34|35|PVAAAA|XFKAAA|HHHHxx
+1251|6914|1|3|1|11|51|251|1251|1251|1251|102|103|DWAAAA|YFKAAA|OOOOxx
+4590|6915|0|2|0|10|90|590|590|4590|4590|180|181|OUAAAA|ZFKAAA|VVVVxx
+1144|6916|0|0|4|4|44|144|1144|1144|1144|88|89|ASAAAA|AGKAAA|AAAAxx
+7131|6917|1|3|1|11|31|131|1131|2131|7131|62|63|HOAAAA|BGKAAA|HHHHxx
+95|6918|1|3|5|15|95|95|95|95|95|190|191|RDAAAA|CGKAAA|OOOOxx
+4827|6919|1|3|7|7|27|827|827|4827|4827|54|55|RDAAAA|DGKAAA|VVVVxx
+4307|6920|1|3|7|7|7|307|307|4307|4307|14|15|RJAAAA|EGKAAA|AAAAxx
+1505|6921|1|1|5|5|5|505|1505|1505|1505|10|11|XFAAAA|FGKAAA|HHHHxx
+8191|6922|1|3|1|11|91|191|191|3191|8191|182|183|BDAAAA|GGKAAA|OOOOxx
+5037|6923|1|1|7|17|37|37|1037|37|5037|74|75|TLAAAA|HGKAAA|VVVVxx
+7363|6924|1|3|3|3|63|363|1363|2363|7363|126|127|FXAAAA|IGKAAA|AAAAxx
+8427|6925|1|3|7|7|27|427|427|3427|8427|54|55|DMAAAA|JGKAAA|HHHHxx
+5231|6926|1|3|1|11|31|231|1231|231|5231|62|63|FTAAAA|KGKAAA|OOOOxx
+2943|6927|1|3|3|3|43|943|943|2943|2943|86|87|FJAAAA|LGKAAA|VVVVxx
+4624|6928|0|0|4|4|24|624|624|4624|4624|48|49|WVAAAA|MGKAAA|AAAAxx
+2020|6929|0|0|0|0|20|20|20|2020|2020|40|41|SZAAAA|NGKAAA|HHHHxx
+6155|6930|1|3|5|15|55|155|155|1155|6155|110|111|TCAAAA|OGKAAA|OOOOxx
+4381|6931|1|1|1|1|81|381|381|4381|4381|162|163|NMAAAA|PGKAAA|VVVVxx
+1057|6932|1|1|7|17|57|57|1057|1057|1057|114|115|ROAAAA|QGKAAA|AAAAxx
+9010|6933|0|2|0|10|10|10|1010|4010|9010|20|21|OIAAAA|RGKAAA|HHHHxx
+4947|6934|1|3|7|7|47|947|947|4947|4947|94|95|HIAAAA|SGKAAA|OOOOxx
+335|6935|1|3|5|15|35|335|335|335|335|70|71|XMAAAA|TGKAAA|VVVVxx
+6890|6936|0|2|0|10|90|890|890|1890|6890|180|181|AFAAAA|UGKAAA|AAAAxx
+5070|6937|0|2|0|10|70|70|1070|70|5070|140|141|ANAAAA|VGKAAA|HHHHxx
+5270|6938|0|2|0|10|70|270|1270|270|5270|140|141|SUAAAA|WGKAAA|OOOOxx
+8657|6939|1|1|7|17|57|657|657|3657|8657|114|115|ZUAAAA|XGKAAA|VVVVxx
+7625|6940|1|1|5|5|25|625|1625|2625|7625|50|51|HHAAAA|YGKAAA|AAAAxx
+5759|6941|1|3|9|19|59|759|1759|759|5759|118|119|NNAAAA|ZGKAAA|HHHHxx
+9483|6942|1|3|3|3|83|483|1483|4483|9483|166|167|TAAAAA|AHKAAA|OOOOxx
+8304|6943|0|0|4|4|4|304|304|3304|8304|8|9|KHAAAA|BHKAAA|VVVVxx
+296|6944|0|0|6|16|96|296|296|296|296|192|193|KLAAAA|CHKAAA|AAAAxx
+1176|6945|0|0|6|16|76|176|1176|1176|1176|152|153|GTAAAA|DHKAAA|HHHHxx
+2069|6946|1|1|9|9|69|69|69|2069|2069|138|139|PBAAAA|EHKAAA|OOOOxx
+1531|6947|1|3|1|11|31|531|1531|1531|1531|62|63|XGAAAA|FHKAAA|VVVVxx
+5329|6948|1|1|9|9|29|329|1329|329|5329|58|59|ZWAAAA|GHKAAA|AAAAxx
+3702|6949|0|2|2|2|2|702|1702|3702|3702|4|5|KMAAAA|HHKAAA|HHHHxx
+6520|6950|0|0|0|0|20|520|520|1520|6520|40|41|UQAAAA|IHKAAA|OOOOxx
+7310|6951|0|2|0|10|10|310|1310|2310|7310|20|21|EVAAAA|JHKAAA|VVVVxx
+1175|6952|1|3|5|15|75|175|1175|1175|1175|150|151|FTAAAA|KHKAAA|AAAAxx
+9107|6953|1|3|7|7|7|107|1107|4107|9107|14|15|HMAAAA|LHKAAA|HHHHxx
+2737|6954|1|1|7|17|37|737|737|2737|2737|74|75|HBAAAA|MHKAAA|OOOOxx
+3437|6955|1|1|7|17|37|437|1437|3437|3437|74|75|FCAAAA|NHKAAA|VVVVxx
+281|6956|1|1|1|1|81|281|281|281|281|162|163|VKAAAA|OHKAAA|AAAAxx
+6676|6957|0|0|6|16|76|676|676|1676|6676|152|153|UWAAAA|PHKAAA|HHHHxx
+145|6958|1|1|5|5|45|145|145|145|145|90|91|PFAAAA|QHKAAA|OOOOxx
+3172|6959|0|0|2|12|72|172|1172|3172|3172|144|145|ASAAAA|RHKAAA|VVVVxx
+4049|6960|1|1|9|9|49|49|49|4049|4049|98|99|TZAAAA|SHKAAA|AAAAxx
+6042|6961|0|2|2|2|42|42|42|1042|6042|84|85|KYAAAA|THKAAA|HHHHxx
+9122|6962|0|2|2|2|22|122|1122|4122|9122|44|45|WMAAAA|UHKAAA|OOOOxx
+7244|6963|0|0|4|4|44|244|1244|2244|7244|88|89|QSAAAA|VHKAAA|VVVVxx
+5361|6964|1|1|1|1|61|361|1361|361|5361|122|123|FYAAAA|WHKAAA|AAAAxx
+8647|6965|1|3|7|7|47|647|647|3647|8647|94|95|PUAAAA|XHKAAA|HHHHxx
+7956|6966|0|0|6|16|56|956|1956|2956|7956|112|113|AUAAAA|YHKAAA|OOOOxx
+7812|6967|0|0|2|12|12|812|1812|2812|7812|24|25|MOAAAA|ZHKAAA|VVVVxx
+570|6968|0|2|0|10|70|570|570|570|570|140|141|YVAAAA|AIKAAA|AAAAxx
+4115|6969|1|3|5|15|15|115|115|4115|4115|30|31|HCAAAA|BIKAAA|HHHHxx
+1856|6970|0|0|6|16|56|856|1856|1856|1856|112|113|KTAAAA|CIKAAA|OOOOxx
+9582|6971|0|2|2|2|82|582|1582|4582|9582|164|165|OEAAAA|DIKAAA|VVVVxx
+2025|6972|1|1|5|5|25|25|25|2025|2025|50|51|XZAAAA|EIKAAA|AAAAxx
+986|6973|0|2|6|6|86|986|986|986|986|172|173|YLAAAA|FIKAAA|HHHHxx
+8358|6974|0|2|8|18|58|358|358|3358|8358|116|117|MJAAAA|GIKAAA|OOOOxx
+510|6975|0|2|0|10|10|510|510|510|510|20|21|QTAAAA|HIKAAA|VVVVxx
+6101|6976|1|1|1|1|1|101|101|1101|6101|2|3|RAAAAA|IIKAAA|AAAAxx
+4167|6977|1|3|7|7|67|167|167|4167|4167|134|135|HEAAAA|JIKAAA|HHHHxx
+6139|6978|1|3|9|19|39|139|139|1139|6139|78|79|DCAAAA|KIKAAA|OOOOxx
+6912|6979|0|0|2|12|12|912|912|1912|6912|24|25|WFAAAA|LIKAAA|VVVVxx
+339|6980|1|3|9|19|39|339|339|339|339|78|79|BNAAAA|MIKAAA|AAAAxx
+8759|6981|1|3|9|19|59|759|759|3759|8759|118|119|XYAAAA|NIKAAA|HHHHxx
+246|6982|0|2|6|6|46|246|246|246|246|92|93|MJAAAA|OIKAAA|OOOOxx
+2831|6983|1|3|1|11|31|831|831|2831|2831|62|63|XEAAAA|PIKAAA|VVVVxx
+2327|6984|1|3|7|7|27|327|327|2327|2327|54|55|NLAAAA|QIKAAA|AAAAxx
+7001|6985|1|1|1|1|1|1|1001|2001|7001|2|3|HJAAAA|RIKAAA|HHHHxx
+4398|6986|0|2|8|18|98|398|398|4398|4398|196|197|ENAAAA|SIKAAA|OOOOxx
+1495|6987|1|3|5|15|95|495|1495|1495|1495|190|191|NFAAAA|TIKAAA|VVVVxx
+8522|6988|0|2|2|2|22|522|522|3522|8522|44|45|UPAAAA|UIKAAA|AAAAxx
+7090|6989|0|2|0|10|90|90|1090|2090|7090|180|181|SMAAAA|VIKAAA|HHHHxx
+8457|6990|1|1|7|17|57|457|457|3457|8457|114|115|HNAAAA|WIKAAA|OOOOxx
+4238|6991|0|2|8|18|38|238|238|4238|4238|76|77|AHAAAA|XIKAAA|VVVVxx
+6791|6992|1|3|1|11|91|791|791|1791|6791|182|183|FBAAAA|YIKAAA|AAAAxx
+1342|6993|0|2|2|2|42|342|1342|1342|1342|84|85|QZAAAA|ZIKAAA|HHHHxx
+4580|6994|0|0|0|0|80|580|580|4580|4580|160|161|EUAAAA|AJKAAA|OOOOxx
+1475|6995|1|3|5|15|75|475|1475|1475|1475|150|151|TEAAAA|BJKAAA|VVVVxx
+9184|6996|0|0|4|4|84|184|1184|4184|9184|168|169|GPAAAA|CJKAAA|AAAAxx
+1189|6997|1|1|9|9|89|189|1189|1189|1189|178|179|TTAAAA|DJKAAA|HHHHxx
+638|6998|0|2|8|18|38|638|638|638|638|76|77|OYAAAA|EJKAAA|OOOOxx
+5867|6999|1|3|7|7|67|867|1867|867|5867|134|135|RRAAAA|FJKAAA|VVVVxx
+9911|7000|1|3|1|11|11|911|1911|4911|9911|22|23|FRAAAA|GJKAAA|AAAAxx
+8147|7001|1|3|7|7|47|147|147|3147|8147|94|95|JBAAAA|HJKAAA|HHHHxx
+4492|7002|0|0|2|12|92|492|492|4492|4492|184|185|UQAAAA|IJKAAA|OOOOxx
+385|7003|1|1|5|5|85|385|385|385|385|170|171|VOAAAA|JJKAAA|VVVVxx
+5235|7004|1|3|5|15|35|235|1235|235|5235|70|71|JTAAAA|KJKAAA|AAAAxx
+4812|7005|0|0|2|12|12|812|812|4812|4812|24|25|CDAAAA|LJKAAA|HHHHxx
+9807|7006|1|3|7|7|7|807|1807|4807|9807|14|15|FNAAAA|MJKAAA|OOOOxx
+9588|7007|0|0|8|8|88|588|1588|4588|9588|176|177|UEAAAA|NJKAAA|VVVVxx
+9832|7008|0|0|2|12|32|832|1832|4832|9832|64|65|EOAAAA|OJKAAA|AAAAxx
+3757|7009|1|1|7|17|57|757|1757|3757|3757|114|115|NOAAAA|PJKAAA|HHHHxx
+9703|7010|1|3|3|3|3|703|1703|4703|9703|6|7|FJAAAA|QJKAAA|OOOOxx
+1022|7011|0|2|2|2|22|22|1022|1022|1022|44|45|INAAAA|RJKAAA|VVVVxx
+5165|7012|1|1|5|5|65|165|1165|165|5165|130|131|RQAAAA|SJKAAA|AAAAxx
+7129|7013|1|1|9|9|29|129|1129|2129|7129|58|59|FOAAAA|TJKAAA|HHHHxx
+4164|7014|0|0|4|4|64|164|164|4164|4164|128|129|EEAAAA|UJKAAA|OOOOxx
+7239|7015|1|3|9|19|39|239|1239|2239|7239|78|79|LSAAAA|VJKAAA|VVVVxx
+523|7016|1|3|3|3|23|523|523|523|523|46|47|DUAAAA|WJKAAA|AAAAxx
+4670|7017|0|2|0|10|70|670|670|4670|4670|140|141|QXAAAA|XJKAAA|HHHHxx
+8503|7018|1|3|3|3|3|503|503|3503|8503|6|7|BPAAAA|YJKAAA|OOOOxx
+714|7019|0|2|4|14|14|714|714|714|714|28|29|MBAAAA|ZJKAAA|VVVVxx
+1350|7020|0|2|0|10|50|350|1350|1350|1350|100|101|YZAAAA|AKKAAA|AAAAxx
+8318|7021|0|2|8|18|18|318|318|3318|8318|36|37|YHAAAA|BKKAAA|HHHHxx
+1834|7022|0|2|4|14|34|834|1834|1834|1834|68|69|OSAAAA|CKKAAA|OOOOxx
+4306|7023|0|2|6|6|6|306|306|4306|4306|12|13|QJAAAA|DKKAAA|VVVVxx
+8543|7024|1|3|3|3|43|543|543|3543|8543|86|87|PQAAAA|EKKAAA|AAAAxx
+9397|7025|1|1|7|17|97|397|1397|4397|9397|194|195|LXAAAA|FKKAAA|HHHHxx
+3145|7026|1|1|5|5|45|145|1145|3145|3145|90|91|ZQAAAA|GKKAAA|OOOOxx
+3942|7027|0|2|2|2|42|942|1942|3942|3942|84|85|QVAAAA|HKKAAA|VVVVxx
+8583|7028|1|3|3|3|83|583|583|3583|8583|166|167|DSAAAA|IKKAAA|AAAAxx
+8073|7029|1|1|3|13|73|73|73|3073|8073|146|147|NYAAAA|JKKAAA|HHHHxx
+4940|7030|0|0|0|0|40|940|940|4940|4940|80|81|AIAAAA|KKKAAA|OOOOxx
+9573|7031|1|1|3|13|73|573|1573|4573|9573|146|147|FEAAAA|LKKAAA|VVVVxx
+5325|7032|1|1|5|5|25|325|1325|325|5325|50|51|VWAAAA|MKKAAA|AAAAxx
+1833|7033|1|1|3|13|33|833|1833|1833|1833|66|67|NSAAAA|NKKAAA|HHHHxx
+1337|7034|1|1|7|17|37|337|1337|1337|1337|74|75|LZAAAA|OKKAAA|OOOOxx
+9749|7035|1|1|9|9|49|749|1749|4749|9749|98|99|ZKAAAA|PKKAAA|VVVVxx
+7505|7036|1|1|5|5|5|505|1505|2505|7505|10|11|RCAAAA|QKKAAA|AAAAxx
+9731|7037|1|3|1|11|31|731|1731|4731|9731|62|63|HKAAAA|RKKAAA|HHHHxx
+4098|7038|0|2|8|18|98|98|98|4098|4098|196|197|QBAAAA|SKKAAA|OOOOxx
+1418|7039|0|2|8|18|18|418|1418|1418|1418|36|37|OCAAAA|TKKAAA|VVVVxx
+63|7040|1|3|3|3|63|63|63|63|63|126|127|LCAAAA|UKKAAA|AAAAxx
+9889|7041|1|1|9|9|89|889|1889|4889|9889|178|179|JQAAAA|VKKAAA|HHHHxx
+2871|7042|1|3|1|11|71|871|871|2871|2871|142|143|LGAAAA|WKKAAA|OOOOxx
+1003|7043|1|3|3|3|3|3|1003|1003|1003|6|7|PMAAAA|XKKAAA|VVVVxx
+8796|7044|0|0|6|16|96|796|796|3796|8796|192|193|IAAAAA|YKKAAA|AAAAxx
+22|7045|0|2|2|2|22|22|22|22|22|44|45|WAAAAA|ZKKAAA|HHHHxx
+8244|7046|0|0|4|4|44|244|244|3244|8244|88|89|CFAAAA|ALKAAA|OOOOxx
+2282|7047|0|2|2|2|82|282|282|2282|2282|164|165|UJAAAA|BLKAAA|VVVVxx
+3487|7048|1|3|7|7|87|487|1487|3487|3487|174|175|DEAAAA|CLKAAA|AAAAxx
+8633|7049|1|1|3|13|33|633|633|3633|8633|66|67|BUAAAA|DLKAAA|HHHHxx
+6418|7050|0|2|8|18|18|418|418|1418|6418|36|37|WMAAAA|ELKAAA|OOOOxx
+4682|7051|0|2|2|2|82|682|682|4682|4682|164|165|CYAAAA|FLKAAA|VVVVxx
+4103|7052|1|3|3|3|3|103|103|4103|4103|6|7|VBAAAA|GLKAAA|AAAAxx
+6256|7053|0|0|6|16|56|256|256|1256|6256|112|113|QGAAAA|HLKAAA|HHHHxx
+4040|7054|0|0|0|0|40|40|40|4040|4040|80|81|KZAAAA|ILKAAA|OOOOxx
+9342|7055|0|2|2|2|42|342|1342|4342|9342|84|85|IVAAAA|JLKAAA|VVVVxx
+9969|7056|1|1|9|9|69|969|1969|4969|9969|138|139|LTAAAA|KLKAAA|AAAAxx
+223|7057|1|3|3|3|23|223|223|223|223|46|47|PIAAAA|LLKAAA|HHHHxx
+4593|7058|1|1|3|13|93|593|593|4593|4593|186|187|RUAAAA|MLKAAA|OOOOxx
+44|7059|0|0|4|4|44|44|44|44|44|88|89|SBAAAA|NLKAAA|VVVVxx
+3513|7060|1|1|3|13|13|513|1513|3513|3513|26|27|DFAAAA|OLKAAA|AAAAxx
+5771|7061|1|3|1|11|71|771|1771|771|5771|142|143|ZNAAAA|PLKAAA|HHHHxx
+5083|7062|1|3|3|3|83|83|1083|83|5083|166|167|NNAAAA|QLKAAA|OOOOxx
+3839|7063|1|3|9|19|39|839|1839|3839|3839|78|79|RRAAAA|RLKAAA|VVVVxx
+2986|7064|0|2|6|6|86|986|986|2986|2986|172|173|WKAAAA|SLKAAA|AAAAxx
+2200|7065|0|0|0|0|0|200|200|2200|2200|0|1|QGAAAA|TLKAAA|HHHHxx
+197|7066|1|1|7|17|97|197|197|197|197|194|195|PHAAAA|ULKAAA|OOOOxx
+7455|7067|1|3|5|15|55|455|1455|2455|7455|110|111|TAAAAA|VLKAAA|VVVVxx
+1379|7068|1|3|9|19|79|379|1379|1379|1379|158|159|BBAAAA|WLKAAA|AAAAxx
+4356|7069|0|0|6|16|56|356|356|4356|4356|112|113|OLAAAA|XLKAAA|HHHHxx
+6888|7070|0|0|8|8|88|888|888|1888|6888|176|177|YEAAAA|YLKAAA|OOOOxx
+9139|7071|1|3|9|19|39|139|1139|4139|9139|78|79|NNAAAA|ZLKAAA|VVVVxx
+7682|7072|0|2|2|2|82|682|1682|2682|7682|164|165|MJAAAA|AMKAAA|AAAAxx
+4873|7073|1|1|3|13|73|873|873|4873|4873|146|147|LFAAAA|BMKAAA|HHHHxx
+783|7074|1|3|3|3|83|783|783|783|783|166|167|DEAAAA|CMKAAA|OOOOxx
+6071|7075|1|3|1|11|71|71|71|1071|6071|142|143|NZAAAA|DMKAAA|VVVVxx
+5160|7076|0|0|0|0|60|160|1160|160|5160|120|121|MQAAAA|EMKAAA|AAAAxx
+2291|7077|1|3|1|11|91|291|291|2291|2291|182|183|DKAAAA|FMKAAA|HHHHxx
+187|7078|1|3|7|7|87|187|187|187|187|174|175|FHAAAA|GMKAAA|OOOOxx
+7786|7079|0|2|6|6|86|786|1786|2786|7786|172|173|MNAAAA|HMKAAA|VVVVxx
+3432|7080|0|0|2|12|32|432|1432|3432|3432|64|65|ACAAAA|IMKAAA|AAAAxx
+5450|7081|0|2|0|10|50|450|1450|450|5450|100|101|QBAAAA|JMKAAA|HHHHxx
+2699|7082|1|3|9|19|99|699|699|2699|2699|198|199|VZAAAA|KMKAAA|OOOOxx
+692|7083|0|0|2|12|92|692|692|692|692|184|185|QAAAAA|LMKAAA|VVVVxx
+6081|7084|1|1|1|1|81|81|81|1081|6081|162|163|XZAAAA|MMKAAA|AAAAxx
+4829|7085|1|1|9|9|29|829|829|4829|4829|58|59|TDAAAA|NMKAAA|HHHHxx
+238|7086|0|2|8|18|38|238|238|238|238|76|77|EJAAAA|OMKAAA|OOOOxx
+9100|7087|0|0|0|0|0|100|1100|4100|9100|0|1|AMAAAA|PMKAAA|VVVVxx
+1968|7088|0|0|8|8|68|968|1968|1968|1968|136|137|SXAAAA|QMKAAA|AAAAxx
+1872|7089|0|0|2|12|72|872|1872|1872|1872|144|145|AUAAAA|RMKAAA|HHHHxx
+7051|7090|1|3|1|11|51|51|1051|2051|7051|102|103|FLAAAA|SMKAAA|OOOOxx
+2743|7091|1|3|3|3|43|743|743|2743|2743|86|87|NBAAAA|TMKAAA|VVVVxx
+1237|7092|1|1|7|17|37|237|1237|1237|1237|74|75|PVAAAA|UMKAAA|AAAAxx
+3052|7093|0|0|2|12|52|52|1052|3052|3052|104|105|KNAAAA|VMKAAA|HHHHxx
+8021|7094|1|1|1|1|21|21|21|3021|8021|42|43|NWAAAA|WMKAAA|OOOOxx
+657|7095|1|1|7|17|57|657|657|657|657|114|115|HZAAAA|XMKAAA|VVVVxx
+2236|7096|0|0|6|16|36|236|236|2236|2236|72|73|AIAAAA|YMKAAA|AAAAxx
+7011|7097|1|3|1|11|11|11|1011|2011|7011|22|23|RJAAAA|ZMKAAA|HHHHxx
+4067|7098|1|3|7|7|67|67|67|4067|4067|134|135|LAAAAA|ANKAAA|OOOOxx
+9449|7099|1|1|9|9|49|449|1449|4449|9449|98|99|LZAAAA|BNKAAA|VVVVxx
+7428|7100|0|0|8|8|28|428|1428|2428|7428|56|57|SZAAAA|CNKAAA|AAAAxx
+1272|7101|0|0|2|12|72|272|1272|1272|1272|144|145|YWAAAA|DNKAAA|HHHHxx
+6897|7102|1|1|7|17|97|897|897|1897|6897|194|195|HFAAAA|ENKAAA|OOOOxx
+5839|7103|1|3|9|19|39|839|1839|839|5839|78|79|PQAAAA|FNKAAA|VVVVxx
+6835|7104|1|3|5|15|35|835|835|1835|6835|70|71|XCAAAA|GNKAAA|AAAAxx
+1887|7105|1|3|7|7|87|887|1887|1887|1887|174|175|PUAAAA|HNKAAA|HHHHxx
+1551|7106|1|3|1|11|51|551|1551|1551|1551|102|103|RHAAAA|INKAAA|OOOOxx
+4667|7107|1|3|7|7|67|667|667|4667|4667|134|135|NXAAAA|JNKAAA|VVVVxx
+9603|7108|1|3|3|3|3|603|1603|4603|9603|6|7|JFAAAA|KNKAAA|AAAAxx
+4332|7109|0|0|2|12|32|332|332|4332|4332|64|65|QKAAAA|LNKAAA|HHHHxx
+5681|7110|1|1|1|1|81|681|1681|681|5681|162|163|NKAAAA|MNKAAA|OOOOxx
+8062|7111|0|2|2|2|62|62|62|3062|8062|124|125|CYAAAA|NNKAAA|VVVVxx
+2302|7112|0|2|2|2|2|302|302|2302|2302|4|5|OKAAAA|ONKAAA|AAAAxx
+2825|7113|1|1|5|5|25|825|825|2825|2825|50|51|REAAAA|PNKAAA|HHHHxx
+4527|7114|1|3|7|7|27|527|527|4527|4527|54|55|DSAAAA|QNKAAA|OOOOxx
+4230|7115|0|2|0|10|30|230|230|4230|4230|60|61|SGAAAA|RNKAAA|VVVVxx
+3053|7116|1|1|3|13|53|53|1053|3053|3053|106|107|LNAAAA|SNKAAA|AAAAxx
+983|7117|1|3|3|3|83|983|983|983|983|166|167|VLAAAA|TNKAAA|HHHHxx
+9458|7118|0|2|8|18|58|458|1458|4458|9458|116|117|UZAAAA|UNKAAA|OOOOxx
+4128|7119|0|0|8|8|28|128|128|4128|4128|56|57|UCAAAA|VNKAAA|VVVVxx
+425|7120|1|1|5|5|25|425|425|425|425|50|51|JQAAAA|WNKAAA|AAAAxx
+3911|7121|1|3|1|11|11|911|1911|3911|3911|22|23|LUAAAA|XNKAAA|HHHHxx
+6607|7122|1|3|7|7|7|607|607|1607|6607|14|15|DUAAAA|YNKAAA|OOOOxx
+5431|7123|1|3|1|11|31|431|1431|431|5431|62|63|XAAAAA|ZNKAAA|VVVVxx
+6330|7124|0|2|0|10|30|330|330|1330|6330|60|61|MJAAAA|AOKAAA|AAAAxx
+3592|7125|0|0|2|12|92|592|1592|3592|3592|184|185|EIAAAA|BOKAAA|HHHHxx
+154|7126|0|2|4|14|54|154|154|154|154|108|109|YFAAAA|COKAAA|OOOOxx
+9879|7127|1|3|9|19|79|879|1879|4879|9879|158|159|ZPAAAA|DOKAAA|VVVVxx
+3202|7128|0|2|2|2|2|202|1202|3202|3202|4|5|ETAAAA|EOKAAA|AAAAxx
+3056|7129|0|0|6|16|56|56|1056|3056|3056|112|113|ONAAAA|FOKAAA|HHHHxx
+9890|7130|0|2|0|10|90|890|1890|4890|9890|180|181|KQAAAA|GOKAAA|OOOOxx
+5840|7131|0|0|0|0|40|840|1840|840|5840|80|81|QQAAAA|HOKAAA|VVVVxx
+9804|7132|0|0|4|4|4|804|1804|4804|9804|8|9|CNAAAA|IOKAAA|AAAAxx
+681|7133|1|1|1|1|81|681|681|681|681|162|163|FAAAAA|JOKAAA|HHHHxx
+3443|7134|1|3|3|3|43|443|1443|3443|3443|86|87|LCAAAA|KOKAAA|OOOOxx
+8088|7135|0|0|8|8|88|88|88|3088|8088|176|177|CZAAAA|LOKAAA|VVVVxx
+9447|7136|1|3|7|7|47|447|1447|4447|9447|94|95|JZAAAA|MOKAAA|AAAAxx
+1490|7137|0|2|0|10|90|490|1490|1490|1490|180|181|IFAAAA|NOKAAA|HHHHxx
+3684|7138|0|0|4|4|84|684|1684|3684|3684|168|169|SLAAAA|OOKAAA|OOOOxx
+3113|7139|1|1|3|13|13|113|1113|3113|3113|26|27|TPAAAA|POKAAA|VVVVxx
+9004|7140|0|0|4|4|4|4|1004|4004|9004|8|9|IIAAAA|QOKAAA|AAAAxx
+7147|7141|1|3|7|7|47|147|1147|2147|7147|94|95|XOAAAA|ROKAAA|HHHHxx
+7571|7142|1|3|1|11|71|571|1571|2571|7571|142|143|FFAAAA|SOKAAA|OOOOxx
+5545|7143|1|1|5|5|45|545|1545|545|5545|90|91|HFAAAA|TOKAAA|VVVVxx
+4558|7144|0|2|8|18|58|558|558|4558|4558|116|117|ITAAAA|UOKAAA|AAAAxx
+6206|7145|0|2|6|6|6|206|206|1206|6206|12|13|SEAAAA|VOKAAA|HHHHxx
+5695|7146|1|3|5|15|95|695|1695|695|5695|190|191|BLAAAA|WOKAAA|OOOOxx
+9600|7147|0|0|0|0|0|600|1600|4600|9600|0|1|GFAAAA|XOKAAA|VVVVxx
+5432|7148|0|0|2|12|32|432|1432|432|5432|64|65|YAAAAA|YOKAAA|AAAAxx
+9299|7149|1|3|9|19|99|299|1299|4299|9299|198|199|RTAAAA|ZOKAAA|HHHHxx
+2386|7150|0|2|6|6|86|386|386|2386|2386|172|173|UNAAAA|APKAAA|OOOOxx
+2046|7151|0|2|6|6|46|46|46|2046|2046|92|93|SAAAAA|BPKAAA|VVVVxx
+3293|7152|1|1|3|13|93|293|1293|3293|3293|186|187|RWAAAA|CPKAAA|AAAAxx
+3046|7153|0|2|6|6|46|46|1046|3046|3046|92|93|ENAAAA|DPKAAA|HHHHxx
+214|7154|0|2|4|14|14|214|214|214|214|28|29|GIAAAA|EPKAAA|OOOOxx
+7893|7155|1|1|3|13|93|893|1893|2893|7893|186|187|PRAAAA|FPKAAA|VVVVxx
+891|7156|1|3|1|11|91|891|891|891|891|182|183|HIAAAA|GPKAAA|AAAAxx
+6499|7157|1|3|9|19|99|499|499|1499|6499|198|199|ZPAAAA|HPKAAA|HHHHxx
+5003|7158|1|3|3|3|3|3|1003|3|5003|6|7|LKAAAA|IPKAAA|OOOOxx
+6487|7159|1|3|7|7|87|487|487|1487|6487|174|175|NPAAAA|JPKAAA|VVVVxx
+9403|7160|1|3|3|3|3|403|1403|4403|9403|6|7|RXAAAA|KPKAAA|AAAAxx
+945|7161|1|1|5|5|45|945|945|945|945|90|91|JKAAAA|LPKAAA|HHHHxx
+6713|7162|1|1|3|13|13|713|713|1713|6713|26|27|FYAAAA|MPKAAA|OOOOxx
+9928|7163|0|0|8|8|28|928|1928|4928|9928|56|57|WRAAAA|NPKAAA|VVVVxx
+8585|7164|1|1|5|5|85|585|585|3585|8585|170|171|FSAAAA|OPKAAA|AAAAxx
+4004|7165|0|0|4|4|4|4|4|4004|4004|8|9|AYAAAA|PPKAAA|HHHHxx
+2528|7166|0|0|8|8|28|528|528|2528|2528|56|57|GTAAAA|QPKAAA|OOOOxx
+3350|7167|0|2|0|10|50|350|1350|3350|3350|100|101|WYAAAA|RPKAAA|VVVVxx
+2160|7168|0|0|0|0|60|160|160|2160|2160|120|121|CFAAAA|SPKAAA|AAAAxx
+1521|7169|1|1|1|1|21|521|1521|1521|1521|42|43|NGAAAA|TPKAAA|HHHHxx
+5660|7170|0|0|0|0|60|660|1660|660|5660|120|121|SJAAAA|UPKAAA|OOOOxx
+5755|7171|1|3|5|15|55|755|1755|755|5755|110|111|JNAAAA|VPKAAA|VVVVxx
+7614|7172|0|2|4|14|14|614|1614|2614|7614|28|29|WGAAAA|WPKAAA|AAAAxx
+3121|7173|1|1|1|1|21|121|1121|3121|3121|42|43|BQAAAA|XPKAAA|HHHHxx
+2735|7174|1|3|5|15|35|735|735|2735|2735|70|71|FBAAAA|YPKAAA|OOOOxx
+7506|7175|0|2|6|6|6|506|1506|2506|7506|12|13|SCAAAA|ZPKAAA|VVVVxx
+2693|7176|1|1|3|13|93|693|693|2693|2693|186|187|PZAAAA|AQKAAA|AAAAxx
+2892|7177|0|0|2|12|92|892|892|2892|2892|184|185|GHAAAA|BQKAAA|HHHHxx
+3310|7178|0|2|0|10|10|310|1310|3310|3310|20|21|IXAAAA|CQKAAA|OOOOxx
+3484|7179|0|0|4|4|84|484|1484|3484|3484|168|169|AEAAAA|DQKAAA|VVVVxx
+9733|7180|1|1|3|13|33|733|1733|4733|9733|66|67|JKAAAA|EQKAAA|AAAAxx
+29|7181|1|1|9|9|29|29|29|29|29|58|59|DBAAAA|FQKAAA|HHHHxx
+9013|7182|1|1|3|13|13|13|1013|4013|9013|26|27|RIAAAA|GQKAAA|OOOOxx
+3847|7183|1|3|7|7|47|847|1847|3847|3847|94|95|ZRAAAA|HQKAAA|VVVVxx
+6724|7184|0|0|4|4|24|724|724|1724|6724|48|49|QYAAAA|IQKAAA|AAAAxx
+2559|7185|1|3|9|19|59|559|559|2559|2559|118|119|LUAAAA|JQKAAA|HHHHxx
+5326|7186|0|2|6|6|26|326|1326|326|5326|52|53|WWAAAA|KQKAAA|OOOOxx
+4802|7187|0|2|2|2|2|802|802|4802|4802|4|5|SCAAAA|LQKAAA|VVVVxx
+131|7188|1|3|1|11|31|131|131|131|131|62|63|BFAAAA|MQKAAA|AAAAxx
+1634|7189|0|2|4|14|34|634|1634|1634|1634|68|69|WKAAAA|NQKAAA|HHHHxx
+919|7190|1|3|9|19|19|919|919|919|919|38|39|JJAAAA|OQKAAA|OOOOxx
+9575|7191|1|3|5|15|75|575|1575|4575|9575|150|151|HEAAAA|PQKAAA|VVVVxx
+1256|7192|0|0|6|16|56|256|1256|1256|1256|112|113|IWAAAA|QQKAAA|AAAAxx
+9428|7193|0|0|8|8|28|428|1428|4428|9428|56|57|QYAAAA|RQKAAA|HHHHxx
+5121|7194|1|1|1|1|21|121|1121|121|5121|42|43|ZOAAAA|SQKAAA|OOOOxx
+6584|7195|0|0|4|4|84|584|584|1584|6584|168|169|GTAAAA|TQKAAA|VVVVxx
+7193|7196|1|1|3|13|93|193|1193|2193|7193|186|187|RQAAAA|UQKAAA|AAAAxx
+4047|7197|1|3|7|7|47|47|47|4047|4047|94|95|RZAAAA|VQKAAA|HHHHxx
+104|7198|0|0|4|4|4|104|104|104|104|8|9|AEAAAA|WQKAAA|OOOOxx
+1527|7199|1|3|7|7|27|527|1527|1527|1527|54|55|TGAAAA|XQKAAA|VVVVxx
+3460|7200|0|0|0|0|60|460|1460|3460|3460|120|121|CDAAAA|YQKAAA|AAAAxx
+8526|7201|0|2|6|6|26|526|526|3526|8526|52|53|YPAAAA|ZQKAAA|HHHHxx
+8959|7202|1|3|9|19|59|959|959|3959|8959|118|119|PGAAAA|ARKAAA|OOOOxx
+3633|7203|1|1|3|13|33|633|1633|3633|3633|66|67|TJAAAA|BRKAAA|VVVVxx
+1799|7204|1|3|9|19|99|799|1799|1799|1799|198|199|FRAAAA|CRKAAA|AAAAxx
+461|7205|1|1|1|1|61|461|461|461|461|122|123|TRAAAA|DRKAAA|HHHHxx
+718|7206|0|2|8|18|18|718|718|718|718|36|37|QBAAAA|ERKAAA|OOOOxx
+3219|7207|1|3|9|19|19|219|1219|3219|3219|38|39|VTAAAA|FRKAAA|VVVVxx
+3494|7208|0|2|4|14|94|494|1494|3494|3494|188|189|KEAAAA|GRKAAA|AAAAxx
+9402|7209|0|2|2|2|2|402|1402|4402|9402|4|5|QXAAAA|HRKAAA|HHHHxx
+7983|7210|1|3|3|3|83|983|1983|2983|7983|166|167|BVAAAA|IRKAAA|OOOOxx
+7919|7211|1|3|9|19|19|919|1919|2919|7919|38|39|PSAAAA|JRKAAA|VVVVxx
+8036|7212|0|0|6|16|36|36|36|3036|8036|72|73|CXAAAA|KRKAAA|AAAAxx
+5164|7213|0|0|4|4|64|164|1164|164|5164|128|129|QQAAAA|LRKAAA|HHHHxx
+4160|7214|0|0|0|0|60|160|160|4160|4160|120|121|AEAAAA|MRKAAA|OOOOxx
+5370|7215|0|2|0|10|70|370|1370|370|5370|140|141|OYAAAA|NRKAAA|VVVVxx
+5347|7216|1|3|7|7|47|347|1347|347|5347|94|95|RXAAAA|ORKAAA|AAAAxx
+7109|7217|1|1|9|9|9|109|1109|2109|7109|18|19|LNAAAA|PRKAAA|HHHHxx
+4826|7218|0|2|6|6|26|826|826|4826|4826|52|53|QDAAAA|QRKAAA|OOOOxx
+1338|7219|0|2|8|18|38|338|1338|1338|1338|76|77|MZAAAA|RRKAAA|VVVVxx
+2711|7220|1|3|1|11|11|711|711|2711|2711|22|23|HAAAAA|SRKAAA|AAAAxx
+6299|7221|1|3|9|19|99|299|299|1299|6299|198|199|HIAAAA|TRKAAA|HHHHxx
+1616|7222|0|0|6|16|16|616|1616|1616|1616|32|33|EKAAAA|URKAAA|OOOOxx
+7519|7223|1|3|9|19|19|519|1519|2519|7519|38|39|FDAAAA|VRKAAA|VVVVxx
+1262|7224|0|2|2|2|62|262|1262|1262|1262|124|125|OWAAAA|WRKAAA|AAAAxx
+7228|7225|0|0|8|8|28|228|1228|2228|7228|56|57|ASAAAA|XRKAAA|HHHHxx
+7892|7226|0|0|2|12|92|892|1892|2892|7892|184|185|ORAAAA|YRKAAA|OOOOxx
+7929|7227|1|1|9|9|29|929|1929|2929|7929|58|59|ZSAAAA|ZRKAAA|VVVVxx
+7705|7228|1|1|5|5|5|705|1705|2705|7705|10|11|JKAAAA|ASKAAA|AAAAxx
+3111|7229|1|3|1|11|11|111|1111|3111|3111|22|23|RPAAAA|BSKAAA|HHHHxx
+3066|7230|0|2|6|6|66|66|1066|3066|3066|132|133|YNAAAA|CSKAAA|OOOOxx
+9559|7231|1|3|9|19|59|559|1559|4559|9559|118|119|RDAAAA|DSKAAA|VVVVxx
+3787|7232|1|3|7|7|87|787|1787|3787|3787|174|175|RPAAAA|ESKAAA|AAAAxx
+8710|7233|0|2|0|10|10|710|710|3710|8710|20|21|AXAAAA|FSKAAA|HHHHxx
+4870|7234|0|2|0|10|70|870|870|4870|4870|140|141|IFAAAA|GSKAAA|OOOOxx
+1883|7235|1|3|3|3|83|883|1883|1883|1883|166|167|LUAAAA|HSKAAA|VVVVxx
+9689|7236|1|1|9|9|89|689|1689|4689|9689|178|179|RIAAAA|ISKAAA|AAAAxx
+9491|7237|1|3|1|11|91|491|1491|4491|9491|182|183|BBAAAA|JSKAAA|HHHHxx
+2035|7238|1|3|5|15|35|35|35|2035|2035|70|71|HAAAAA|KSKAAA|OOOOxx
+655|7239|1|3|5|15|55|655|655|655|655|110|111|FZAAAA|LSKAAA|VVVVxx
+6305|7240|1|1|5|5|5|305|305|1305|6305|10|11|NIAAAA|MSKAAA|AAAAxx
+9423|7241|1|3|3|3|23|423|1423|4423|9423|46|47|LYAAAA|NSKAAA|HHHHxx
+283|7242|1|3|3|3|83|283|283|283|283|166|167|XKAAAA|OSKAAA|OOOOxx
+2607|7243|1|3|7|7|7|607|607|2607|2607|14|15|HWAAAA|PSKAAA|VVVVxx
+7740|7244|0|0|0|0|40|740|1740|2740|7740|80|81|SLAAAA|QSKAAA|AAAAxx
+6956|7245|0|0|6|16|56|956|956|1956|6956|112|113|OHAAAA|RSKAAA|HHHHxx
+884|7246|0|0|4|4|84|884|884|884|884|168|169|AIAAAA|SSKAAA|OOOOxx
+5730|7247|0|2|0|10|30|730|1730|730|5730|60|61|KMAAAA|TSKAAA|VVVVxx
+3438|7248|0|2|8|18|38|438|1438|3438|3438|76|77|GCAAAA|USKAAA|AAAAxx
+3250|7249|0|2|0|10|50|250|1250|3250|3250|100|101|AVAAAA|VSKAAA|HHHHxx
+5470|7250|0|2|0|10|70|470|1470|470|5470|140|141|KCAAAA|WSKAAA|OOOOxx
+2037|7251|1|1|7|17|37|37|37|2037|2037|74|75|JAAAAA|XSKAAA|VVVVxx
+6593|7252|1|1|3|13|93|593|593|1593|6593|186|187|PTAAAA|YSKAAA|AAAAxx
+3893|7253|1|1|3|13|93|893|1893|3893|3893|186|187|TTAAAA|ZSKAAA|HHHHxx
+3200|7254|0|0|0|0|0|200|1200|3200|3200|0|1|CTAAAA|ATKAAA|OOOOxx
+7125|7255|1|1|5|5|25|125|1125|2125|7125|50|51|BOAAAA|BTKAAA|VVVVxx
+2295|7256|1|3|5|15|95|295|295|2295|2295|190|191|HKAAAA|CTKAAA|AAAAxx
+2056|7257|0|0|6|16|56|56|56|2056|2056|112|113|CBAAAA|DTKAAA|HHHHxx
+2962|7258|0|2|2|2|62|962|962|2962|2962|124|125|YJAAAA|ETKAAA|OOOOxx
+993|7259|1|1|3|13|93|993|993|993|993|186|187|FMAAAA|FTKAAA|VVVVxx
+9127|7260|1|3|7|7|27|127|1127|4127|9127|54|55|BNAAAA|GTKAAA|AAAAxx
+2075|7261|1|3|5|15|75|75|75|2075|2075|150|151|VBAAAA|HTKAAA|HHHHxx
+9338|7262|0|2|8|18|38|338|1338|4338|9338|76|77|EVAAAA|ITKAAA|OOOOxx
+8100|7263|0|0|0|0|0|100|100|3100|8100|0|1|OZAAAA|JTKAAA|VVVVxx
+5047|7264|1|3|7|7|47|47|1047|47|5047|94|95|DMAAAA|KTKAAA|AAAAxx
+7032|7265|0|0|2|12|32|32|1032|2032|7032|64|65|MKAAAA|LTKAAA|HHHHxx
+6374|7266|0|2|4|14|74|374|374|1374|6374|148|149|ELAAAA|MTKAAA|OOOOxx
+4137|7267|1|1|7|17|37|137|137|4137|4137|74|75|DDAAAA|NTKAAA|VVVVxx
+7132|7268|0|0|2|12|32|132|1132|2132|7132|64|65|IOAAAA|OTKAAA|AAAAxx
+3064|7269|0|0|4|4|64|64|1064|3064|3064|128|129|WNAAAA|PTKAAA|HHHHxx
+3621|7270|1|1|1|1|21|621|1621|3621|3621|42|43|HJAAAA|QTKAAA|OOOOxx
+6199|7271|1|3|9|19|99|199|199|1199|6199|198|199|LEAAAA|RTKAAA|VVVVxx
+4926|7272|0|2|6|6|26|926|926|4926|4926|52|53|MHAAAA|STKAAA|AAAAxx
+8035|7273|1|3|5|15|35|35|35|3035|8035|70|71|BXAAAA|TTKAAA|HHHHxx
+2195|7274|1|3|5|15|95|195|195|2195|2195|190|191|LGAAAA|UTKAAA|OOOOxx
+5366|7275|0|2|6|6|66|366|1366|366|5366|132|133|KYAAAA|VTKAAA|VVVVxx
+3478|7276|0|2|8|18|78|478|1478|3478|3478|156|157|UDAAAA|WTKAAA|AAAAxx
+1926|7277|0|2|6|6|26|926|1926|1926|1926|52|53|CWAAAA|XTKAAA|HHHHxx
+7265|7278|1|1|5|5|65|265|1265|2265|7265|130|131|LTAAAA|YTKAAA|OOOOxx
+7668|7279|0|0|8|8|68|668|1668|2668|7668|136|137|YIAAAA|ZTKAAA|VVVVxx
+3335|7280|1|3|5|15|35|335|1335|3335|3335|70|71|HYAAAA|AUKAAA|AAAAxx
+7660|7281|0|0|0|0|60|660|1660|2660|7660|120|121|QIAAAA|BUKAAA|HHHHxx
+9604|7282|0|0|4|4|4|604|1604|4604|9604|8|9|KFAAAA|CUKAAA|OOOOxx
+7301|7283|1|1|1|1|1|301|1301|2301|7301|2|3|VUAAAA|DUKAAA|VVVVxx
+4475|7284|1|3|5|15|75|475|475|4475|4475|150|151|DQAAAA|EUKAAA|AAAAxx
+9954|7285|0|2|4|14|54|954|1954|4954|9954|108|109|WSAAAA|FUKAAA|HHHHxx
+5723|7286|1|3|3|3|23|723|1723|723|5723|46|47|DMAAAA|GUKAAA|OOOOxx
+2669|7287|1|1|9|9|69|669|669|2669|2669|138|139|RYAAAA|HUKAAA|VVVVxx
+1685|7288|1|1|5|5|85|685|1685|1685|1685|170|171|VMAAAA|IUKAAA|AAAAxx
+2233|7289|1|1|3|13|33|233|233|2233|2233|66|67|XHAAAA|JUKAAA|HHHHxx
+8111|7290|1|3|1|11|11|111|111|3111|8111|22|23|ZZAAAA|KUKAAA|OOOOxx
+7685|7291|1|1|5|5|85|685|1685|2685|7685|170|171|PJAAAA|LUKAAA|VVVVxx
+3773|7292|1|1|3|13|73|773|1773|3773|3773|146|147|DPAAAA|MUKAAA|AAAAxx
+7172|7293|0|0|2|12|72|172|1172|2172|7172|144|145|WPAAAA|NUKAAA|HHHHxx
+1740|7294|0|0|0|0|40|740|1740|1740|1740|80|81|YOAAAA|OUKAAA|OOOOxx
+5416|7295|0|0|6|16|16|416|1416|416|5416|32|33|IAAAAA|PUKAAA|VVVVxx
+1823|7296|1|3|3|3|23|823|1823|1823|1823|46|47|DSAAAA|QUKAAA|AAAAxx
+1668|7297|0|0|8|8|68|668|1668|1668|1668|136|137|EMAAAA|RUKAAA|HHHHxx
+1795|7298|1|3|5|15|95|795|1795|1795|1795|190|191|BRAAAA|SUKAAA|OOOOxx
+8599|7299|1|3|9|19|99|599|599|3599|8599|198|199|TSAAAA|TUKAAA|VVVVxx
+5542|7300|0|2|2|2|42|542|1542|542|5542|84|85|EFAAAA|UUKAAA|AAAAxx
+5658|7301|0|2|8|18|58|658|1658|658|5658|116|117|QJAAAA|VUKAAA|HHHHxx
+9824|7302|0|0|4|4|24|824|1824|4824|9824|48|49|WNAAAA|WUKAAA|OOOOxx
+19|7303|1|3|9|19|19|19|19|19|19|38|39|TAAAAA|XUKAAA|VVVVxx
+9344|7304|0|0|4|4|44|344|1344|4344|9344|88|89|KVAAAA|YUKAAA|AAAAxx
+5900|7305|0|0|0|0|0|900|1900|900|5900|0|1|YSAAAA|ZUKAAA|HHHHxx
+7818|7306|0|2|8|18|18|818|1818|2818|7818|36|37|SOAAAA|AVKAAA|OOOOxx
+8377|7307|1|1|7|17|77|377|377|3377|8377|154|155|FKAAAA|BVKAAA|VVVVxx
+6886|7308|0|2|6|6|86|886|886|1886|6886|172|173|WEAAAA|CVKAAA|AAAAxx
+3201|7309|1|1|1|1|1|201|1201|3201|3201|2|3|DTAAAA|DVKAAA|HHHHxx
+87|7310|1|3|7|7|87|87|87|87|87|174|175|JDAAAA|EVKAAA|OOOOxx
+1089|7311|1|1|9|9|89|89|1089|1089|1089|178|179|XPAAAA|FVKAAA|VVVVxx
+3948|7312|0|0|8|8|48|948|1948|3948|3948|96|97|WVAAAA|GVKAAA|AAAAxx
+6383|7313|1|3|3|3|83|383|383|1383|6383|166|167|NLAAAA|HVKAAA|HHHHxx
+837|7314|1|1|7|17|37|837|837|837|837|74|75|FGAAAA|IVKAAA|OOOOxx
+6285|7315|1|1|5|5|85|285|285|1285|6285|170|171|THAAAA|JVKAAA|VVVVxx
+78|7316|0|2|8|18|78|78|78|78|78|156|157|ADAAAA|KVKAAA|AAAAxx
+4389|7317|1|1|9|9|89|389|389|4389|4389|178|179|VMAAAA|LVKAAA|HHHHxx
+4795|7318|1|3|5|15|95|795|795|4795|4795|190|191|LCAAAA|MVKAAA|OOOOxx
+9369|7319|1|1|9|9|69|369|1369|4369|9369|138|139|JWAAAA|NVKAAA|VVVVxx
+69|7320|1|1|9|9|69|69|69|69|69|138|139|RCAAAA|OVKAAA|AAAAxx
+7689|7321|1|1|9|9|89|689|1689|2689|7689|178|179|TJAAAA|PVKAAA|HHHHxx
+5642|7322|0|2|2|2|42|642|1642|642|5642|84|85|AJAAAA|QVKAAA|OOOOxx
+2348|7323|0|0|8|8|48|348|348|2348|2348|96|97|IMAAAA|RVKAAA|VVVVxx
+9308|7324|0|0|8|8|8|308|1308|4308|9308|16|17|AUAAAA|SVKAAA|AAAAxx
+9093|7325|1|1|3|13|93|93|1093|4093|9093|186|187|TLAAAA|TVKAAA|HHHHxx
+1199|7326|1|3|9|19|99|199|1199|1199|1199|198|199|DUAAAA|UVKAAA|OOOOxx
+307|7327|1|3|7|7|7|307|307|307|307|14|15|VLAAAA|VVKAAA|VVVVxx
+3814|7328|0|2|4|14|14|814|1814|3814|3814|28|29|SQAAAA|WVKAAA|AAAAxx
+8817|7329|1|1|7|17|17|817|817|3817|8817|34|35|DBAAAA|XVKAAA|HHHHxx
+2329|7330|1|1|9|9|29|329|329|2329|2329|58|59|PLAAAA|YVKAAA|OOOOxx
+2932|7331|0|0|2|12|32|932|932|2932|2932|64|65|UIAAAA|ZVKAAA|VVVVxx
+1986|7332|0|2|6|6|86|986|1986|1986|1986|172|173|KYAAAA|AWKAAA|AAAAxx
+5279|7333|1|3|9|19|79|279|1279|279|5279|158|159|BVAAAA|BWKAAA|HHHHxx
+5357|7334|1|1|7|17|57|357|1357|357|5357|114|115|BYAAAA|CWKAAA|OOOOxx
+6778|7335|0|2|8|18|78|778|778|1778|6778|156|157|SAAAAA|DWKAAA|VVVVxx
+2773|7336|1|1|3|13|73|773|773|2773|2773|146|147|RCAAAA|EWKAAA|AAAAxx
+244|7337|0|0|4|4|44|244|244|244|244|88|89|KJAAAA|FWKAAA|HHHHxx
+6900|7338|0|0|0|0|0|900|900|1900|6900|0|1|KFAAAA|GWKAAA|OOOOxx
+4739|7339|1|3|9|19|39|739|739|4739|4739|78|79|HAAAAA|HWKAAA|VVVVxx
+3217|7340|1|1|7|17|17|217|1217|3217|3217|34|35|TTAAAA|IWKAAA|AAAAxx
+7563|7341|1|3|3|3|63|563|1563|2563|7563|126|127|XEAAAA|JWKAAA|HHHHxx
+1807|7342|1|3|7|7|7|807|1807|1807|1807|14|15|NRAAAA|KWKAAA|OOOOxx
+4199|7343|1|3|9|19|99|199|199|4199|4199|198|199|NFAAAA|LWKAAA|VVVVxx
+1077|7344|1|1|7|17|77|77|1077|1077|1077|154|155|LPAAAA|MWKAAA|AAAAxx
+8348|7345|0|0|8|8|48|348|348|3348|8348|96|97|CJAAAA|NWKAAA|HHHHxx
+841|7346|1|1|1|1|41|841|841|841|841|82|83|JGAAAA|OWKAAA|OOOOxx
+8154|7347|0|2|4|14|54|154|154|3154|8154|108|109|QBAAAA|PWKAAA|VVVVxx
+5261|7348|1|1|1|1|61|261|1261|261|5261|122|123|JUAAAA|QWKAAA|AAAAxx
+1950|7349|0|2|0|10|50|950|1950|1950|1950|100|101|AXAAAA|RWKAAA|HHHHxx
+8472|7350|0|0|2|12|72|472|472|3472|8472|144|145|WNAAAA|SWKAAA|OOOOxx
+8745|7351|1|1|5|5|45|745|745|3745|8745|90|91|JYAAAA|TWKAAA|VVVVxx
+8715|7352|1|3|5|15|15|715|715|3715|8715|30|31|FXAAAA|UWKAAA|AAAAxx
+9708|7353|0|0|8|8|8|708|1708|4708|9708|16|17|KJAAAA|VWKAAA|HHHHxx
+5860|7354|0|0|0|0|60|860|1860|860|5860|120|121|KRAAAA|WWKAAA|OOOOxx
+9142|7355|0|2|2|2|42|142|1142|4142|9142|84|85|QNAAAA|XWKAAA|VVVVxx
+6582|7356|0|2|2|2|82|582|582|1582|6582|164|165|ETAAAA|YWKAAA|AAAAxx
+1255|7357|1|3|5|15|55|255|1255|1255|1255|110|111|HWAAAA|ZWKAAA|HHHHxx
+6459|7358|1|3|9|19|59|459|459|1459|6459|118|119|LOAAAA|AXKAAA|OOOOxx
+6327|7359|1|3|7|7|27|327|327|1327|6327|54|55|JJAAAA|BXKAAA|VVVVxx
+4692|7360|0|0|2|12|92|692|692|4692|4692|184|185|MYAAAA|CXKAAA|AAAAxx
+3772|7361|0|0|2|12|72|772|1772|3772|3772|144|145|CPAAAA|DXKAAA|HHHHxx
+4203|7362|1|3|3|3|3|203|203|4203|4203|6|7|RFAAAA|EXKAAA|OOOOxx
+2946|7363|0|2|6|6|46|946|946|2946|2946|92|93|IJAAAA|FXKAAA|VVVVxx
+3524|7364|0|0|4|4|24|524|1524|3524|3524|48|49|OFAAAA|GXKAAA|AAAAxx
+8409|7365|1|1|9|9|9|409|409|3409|8409|18|19|LLAAAA|HXKAAA|HHHHxx
+1824|7366|0|0|4|4|24|824|1824|1824|1824|48|49|ESAAAA|IXKAAA|OOOOxx
+4637|7367|1|1|7|17|37|637|637|4637|4637|74|75|JWAAAA|JXKAAA|VVVVxx
+589|7368|1|1|9|9|89|589|589|589|589|178|179|RWAAAA|KXKAAA|AAAAxx
+484|7369|0|0|4|4|84|484|484|484|484|168|169|QSAAAA|LXKAAA|HHHHxx
+8963|7370|1|3|3|3|63|963|963|3963|8963|126|127|TGAAAA|MXKAAA|OOOOxx
+5502|7371|0|2|2|2|2|502|1502|502|5502|4|5|QDAAAA|NXKAAA|VVVVxx
+6982|7372|0|2|2|2|82|982|982|1982|6982|164|165|OIAAAA|OXKAAA|AAAAxx
+8029|7373|1|1|9|9|29|29|29|3029|8029|58|59|VWAAAA|PXKAAA|HHHHxx
+4395|7374|1|3|5|15|95|395|395|4395|4395|190|191|BNAAAA|QXKAAA|OOOOxx
+2595|7375|1|3|5|15|95|595|595|2595|2595|190|191|VVAAAA|RXKAAA|VVVVxx
+2133|7376|1|1|3|13|33|133|133|2133|2133|66|67|BEAAAA|SXKAAA|AAAAxx
+1414|7377|0|2|4|14|14|414|1414|1414|1414|28|29|KCAAAA|TXKAAA|HHHHxx
+8201|7378|1|1|1|1|1|201|201|3201|8201|2|3|LDAAAA|UXKAAA|OOOOxx
+4706|7379|0|2|6|6|6|706|706|4706|4706|12|13|AZAAAA|VXKAAA|VVVVxx
+5310|7380|0|2|0|10|10|310|1310|310|5310|20|21|GWAAAA|WXKAAA|AAAAxx
+7333|7381|1|1|3|13|33|333|1333|2333|7333|66|67|BWAAAA|XXKAAA|HHHHxx
+9420|7382|0|0|0|0|20|420|1420|4420|9420|40|41|IYAAAA|YXKAAA|OOOOxx
+1383|7383|1|3|3|3|83|383|1383|1383|1383|166|167|FBAAAA|ZXKAAA|VVVVxx
+6225|7384|1|1|5|5|25|225|225|1225|6225|50|51|LFAAAA|AYKAAA|AAAAxx
+2064|7385|0|0|4|4|64|64|64|2064|2064|128|129|KBAAAA|BYKAAA|HHHHxx
+6700|7386|0|0|0|0|0|700|700|1700|6700|0|1|SXAAAA|CYKAAA|OOOOxx
+1352|7387|0|0|2|12|52|352|1352|1352|1352|104|105|AAAAAA|DYKAAA|VVVVxx
+4249|7388|1|1|9|9|49|249|249|4249|4249|98|99|LHAAAA|EYKAAA|AAAAxx
+9429|7389|1|1|9|9|29|429|1429|4429|9429|58|59|RYAAAA|FYKAAA|HHHHxx
+8090|7390|0|2|0|10|90|90|90|3090|8090|180|181|EZAAAA|GYKAAA|OOOOxx
+5378|7391|0|2|8|18|78|378|1378|378|5378|156|157|WYAAAA|HYKAAA|VVVVxx
+9085|7392|1|1|5|5|85|85|1085|4085|9085|170|171|LLAAAA|IYKAAA|AAAAxx
+7468|7393|0|0|8|8|68|468|1468|2468|7468|136|137|GBAAAA|JYKAAA|HHHHxx
+9955|7394|1|3|5|15|55|955|1955|4955|9955|110|111|XSAAAA|KYKAAA|OOOOxx
+8692|7395|0|0|2|12|92|692|692|3692|8692|184|185|IWAAAA|LYKAAA|VVVVxx
+1463|7396|1|3|3|3|63|463|1463|1463|1463|126|127|HEAAAA|MYKAAA|AAAAxx
+3577|7397|1|1|7|17|77|577|1577|3577|3577|154|155|PHAAAA|NYKAAA|HHHHxx
+5654|7398|0|2|4|14|54|654|1654|654|5654|108|109|MJAAAA|OYKAAA|OOOOxx
+7955|7399|1|3|5|15|55|955|1955|2955|7955|110|111|ZTAAAA|PYKAAA|VVVVxx
+4843|7400|1|3|3|3|43|843|843|4843|4843|86|87|HEAAAA|QYKAAA|AAAAxx
+1776|7401|0|0|6|16|76|776|1776|1776|1776|152|153|IQAAAA|RYKAAA|HHHHxx
+2223|7402|1|3|3|3|23|223|223|2223|2223|46|47|NHAAAA|SYKAAA|OOOOxx
+8442|7403|0|2|2|2|42|442|442|3442|8442|84|85|SMAAAA|TYKAAA|VVVVxx
+9738|7404|0|2|8|18|38|738|1738|4738|9738|76|77|OKAAAA|UYKAAA|AAAAxx
+4867|7405|1|3|7|7|67|867|867|4867|4867|134|135|FFAAAA|VYKAAA|HHHHxx
+2983|7406|1|3|3|3|83|983|983|2983|2983|166|167|TKAAAA|WYKAAA|OOOOxx
+3300|7407|0|0|0|0|0|300|1300|3300|3300|0|1|YWAAAA|XYKAAA|VVVVxx
+3815|7408|1|3|5|15|15|815|1815|3815|3815|30|31|TQAAAA|YYKAAA|AAAAxx
+1779|7409|1|3|9|19|79|779|1779|1779|1779|158|159|LQAAAA|ZYKAAA|HHHHxx
+1123|7410|1|3|3|3|23|123|1123|1123|1123|46|47|FRAAAA|AZKAAA|OOOOxx
+4824|7411|0|0|4|4|24|824|824|4824|4824|48|49|ODAAAA|BZKAAA|VVVVxx
+5407|7412|1|3|7|7|7|407|1407|407|5407|14|15|ZZAAAA|CZKAAA|AAAAxx
+5123|7413|1|3|3|3|23|123|1123|123|5123|46|47|BPAAAA|DZKAAA|HHHHxx
+2515|7414|1|3|5|15|15|515|515|2515|2515|30|31|TSAAAA|EZKAAA|OOOOxx
+4781|7415|1|1|1|1|81|781|781|4781|4781|162|163|XBAAAA|FZKAAA|VVVVxx
+7831|7416|1|3|1|11|31|831|1831|2831|7831|62|63|FPAAAA|GZKAAA|AAAAxx
+6946|7417|0|2|6|6|46|946|946|1946|6946|92|93|EHAAAA|HZKAAA|HHHHxx
+1215|7418|1|3|5|15|15|215|1215|1215|1215|30|31|TUAAAA|IZKAAA|OOOOxx
+7783|7419|1|3|3|3|83|783|1783|2783|7783|166|167|JNAAAA|JZKAAA|VVVVxx
+4532|7420|0|0|2|12|32|532|532|4532|4532|64|65|ISAAAA|KZKAAA|AAAAxx
+9068|7421|0|0|8|8|68|68|1068|4068|9068|136|137|UKAAAA|LZKAAA|HHHHxx
+7030|7422|0|2|0|10|30|30|1030|2030|7030|60|61|KKAAAA|MZKAAA|OOOOxx
+436|7423|0|0|6|16|36|436|436|436|436|72|73|UQAAAA|NZKAAA|VVVVxx
+6549|7424|1|1|9|9|49|549|549|1549|6549|98|99|XRAAAA|OZKAAA|AAAAxx
+3348|7425|0|0|8|8|48|348|1348|3348|3348|96|97|UYAAAA|PZKAAA|HHHHxx
+6229|7426|1|1|9|9|29|229|229|1229|6229|58|59|PFAAAA|QZKAAA|OOOOxx
+3933|7427|1|1|3|13|33|933|1933|3933|3933|66|67|HVAAAA|RZKAAA|VVVVxx
+1876|7428|0|0|6|16|76|876|1876|1876|1876|152|153|EUAAAA|SZKAAA|AAAAxx
+8920|7429|0|0|0|0|20|920|920|3920|8920|40|41|CFAAAA|TZKAAA|HHHHxx
+7926|7430|0|2|6|6|26|926|1926|2926|7926|52|53|WSAAAA|UZKAAA|OOOOxx
+8805|7431|1|1|5|5|5|805|805|3805|8805|10|11|RAAAAA|VZKAAA|VVVVxx
+6729|7432|1|1|9|9|29|729|729|1729|6729|58|59|VYAAAA|WZKAAA|AAAAxx
+7397|7433|1|1|7|17|97|397|1397|2397|7397|194|195|NYAAAA|XZKAAA|HHHHxx
+9303|7434|1|3|3|3|3|303|1303|4303|9303|6|7|VTAAAA|YZKAAA|OOOOxx
+4255|7435|1|3|5|15|55|255|255|4255|4255|110|111|RHAAAA|ZZKAAA|VVVVxx
+7229|7436|1|1|9|9|29|229|1229|2229|7229|58|59|BSAAAA|AALAAA|AAAAxx
+854|7437|0|2|4|14|54|854|854|854|854|108|109|WGAAAA|BALAAA|HHHHxx
+6723|7438|1|3|3|3|23|723|723|1723|6723|46|47|PYAAAA|CALAAA|OOOOxx
+9597|7439|1|1|7|17|97|597|1597|4597|9597|194|195|DFAAAA|DALAAA|VVVVxx
+6532|7440|0|0|2|12|32|532|532|1532|6532|64|65|GRAAAA|EALAAA|AAAAxx
+2910|7441|0|2|0|10|10|910|910|2910|2910|20|21|YHAAAA|FALAAA|HHHHxx
+6717|7442|1|1|7|17|17|717|717|1717|6717|34|35|JYAAAA|GALAAA|OOOOxx
+1790|7443|0|2|0|10|90|790|1790|1790|1790|180|181|WQAAAA|HALAAA|VVVVxx
+3761|7444|1|1|1|1|61|761|1761|3761|3761|122|123|ROAAAA|IALAAA|AAAAxx
+1565|7445|1|1|5|5|65|565|1565|1565|1565|130|131|FIAAAA|JALAAA|HHHHxx
+6205|7446|1|1|5|5|5|205|205|1205|6205|10|11|REAAAA|KALAAA|OOOOxx
+2726|7447|0|2|6|6|26|726|726|2726|2726|52|53|WAAAAA|LALAAA|VVVVxx
+799|7448|1|3|9|19|99|799|799|799|799|198|199|TEAAAA|MALAAA|AAAAxx
+3540|7449|0|0|0|0|40|540|1540|3540|3540|80|81|EGAAAA|NALAAA|HHHHxx
+5878|7450|0|2|8|18|78|878|1878|878|5878|156|157|CSAAAA|OALAAA|OOOOxx
+2542|7451|0|2|2|2|42|542|542|2542|2542|84|85|UTAAAA|PALAAA|VVVVxx
+4888|7452|0|0|8|8|88|888|888|4888|4888|176|177|AGAAAA|QALAAA|AAAAxx
+5290|7453|0|2|0|10|90|290|1290|290|5290|180|181|MVAAAA|RALAAA|HHHHxx
+7995|7454|1|3|5|15|95|995|1995|2995|7995|190|191|NVAAAA|SALAAA|OOOOxx
+3519|7455|1|3|9|19|19|519|1519|3519|3519|38|39|JFAAAA|TALAAA|VVVVxx
+3571|7456|1|3|1|11|71|571|1571|3571|3571|142|143|JHAAAA|UALAAA|AAAAxx
+7854|7457|0|2|4|14|54|854|1854|2854|7854|108|109|CQAAAA|VALAAA|HHHHxx
+5184|7458|0|0|4|4|84|184|1184|184|5184|168|169|KRAAAA|WALAAA|OOOOxx
+3498|7459|0|2|8|18|98|498|1498|3498|3498|196|197|OEAAAA|XALAAA|VVVVxx
+1264|7460|0|0|4|4|64|264|1264|1264|1264|128|129|QWAAAA|YALAAA|AAAAxx
+3159|7461|1|3|9|19|59|159|1159|3159|3159|118|119|NRAAAA|ZALAAA|HHHHxx
+5480|7462|0|0|0|0|80|480|1480|480|5480|160|161|UCAAAA|ABLAAA|OOOOxx
+1706|7463|0|2|6|6|6|706|1706|1706|1706|12|13|QNAAAA|BBLAAA|VVVVxx
+4540|7464|0|0|0|0|40|540|540|4540|4540|80|81|QSAAAA|CBLAAA|AAAAxx
+2799|7465|1|3|9|19|99|799|799|2799|2799|198|199|RDAAAA|DBLAAA|HHHHxx
+7389|7466|1|1|9|9|89|389|1389|2389|7389|178|179|FYAAAA|EBLAAA|OOOOxx
+5565|7467|1|1|5|5|65|565|1565|565|5565|130|131|BGAAAA|FBLAAA|VVVVxx
+3896|7468|0|0|6|16|96|896|1896|3896|3896|192|193|WTAAAA|GBLAAA|AAAAxx
+2100|7469|0|0|0|0|0|100|100|2100|2100|0|1|UCAAAA|HBLAAA|HHHHxx
+3507|7470|1|3|7|7|7|507|1507|3507|3507|14|15|XEAAAA|IBLAAA|OOOOxx
+7971|7471|1|3|1|11|71|971|1971|2971|7971|142|143|PUAAAA|JBLAAA|VVVVxx
+2312|7472|0|0|2|12|12|312|312|2312|2312|24|25|YKAAAA|KBLAAA|AAAAxx
+2494|7473|0|2|4|14|94|494|494|2494|2494|188|189|YRAAAA|LBLAAA|HHHHxx
+2474|7474|0|2|4|14|74|474|474|2474|2474|148|149|ERAAAA|MBLAAA|OOOOxx
+3136|7475|0|0|6|16|36|136|1136|3136|3136|72|73|QQAAAA|NBLAAA|VVVVxx
+7242|7476|0|2|2|2|42|242|1242|2242|7242|84|85|OSAAAA|OBLAAA|AAAAxx
+9430|7477|0|2|0|10|30|430|1430|4430|9430|60|61|SYAAAA|PBLAAA|HHHHxx
+1052|7478|0|0|2|12|52|52|1052|1052|1052|104|105|MOAAAA|QBLAAA|OOOOxx
+4172|7479|0|0|2|12|72|172|172|4172|4172|144|145|MEAAAA|RBLAAA|VVVVxx
+970|7480|0|2|0|10|70|970|970|970|970|140|141|ILAAAA|SBLAAA|AAAAxx
+882|7481|0|2|2|2|82|882|882|882|882|164|165|YHAAAA|TBLAAA|HHHHxx
+9799|7482|1|3|9|19|99|799|1799|4799|9799|198|199|XMAAAA|UBLAAA|OOOOxx
+5850|7483|0|2|0|10|50|850|1850|850|5850|100|101|ARAAAA|VBLAAA|VVVVxx
+9473|7484|1|1|3|13|73|473|1473|4473|9473|146|147|JAAAAA|WBLAAA|AAAAxx
+8635|7485|1|3|5|15|35|635|635|3635|8635|70|71|DUAAAA|XBLAAA|HHHHxx
+2349|7486|1|1|9|9|49|349|349|2349|2349|98|99|JMAAAA|YBLAAA|OOOOxx
+2270|7487|0|2|0|10|70|270|270|2270|2270|140|141|IJAAAA|ZBLAAA|VVVVxx
+7887|7488|1|3|7|7|87|887|1887|2887|7887|174|175|JRAAAA|ACLAAA|AAAAxx
+3091|7489|1|3|1|11|91|91|1091|3091|3091|182|183|XOAAAA|BCLAAA|HHHHxx
+3728|7490|0|0|8|8|28|728|1728|3728|3728|56|57|KNAAAA|CCLAAA|OOOOxx
+3658|7491|0|2|8|18|58|658|1658|3658|3658|116|117|SKAAAA|DCLAAA|VVVVxx
+5975|7492|1|3|5|15|75|975|1975|975|5975|150|151|VVAAAA|ECLAAA|AAAAxx
+332|7493|0|0|2|12|32|332|332|332|332|64|65|UMAAAA|FCLAAA|HHHHxx
+7990|7494|0|2|0|10|90|990|1990|2990|7990|180|181|IVAAAA|GCLAAA|OOOOxx
+8688|7495|0|0|8|8|88|688|688|3688|8688|176|177|EWAAAA|HCLAAA|VVVVxx
+9601|7496|1|1|1|1|1|601|1601|4601|9601|2|3|HFAAAA|ICLAAA|AAAAxx
+8401|7497|1|1|1|1|1|401|401|3401|8401|2|3|DLAAAA|JCLAAA|HHHHxx
+8093|7498|1|1|3|13|93|93|93|3093|8093|186|187|HZAAAA|KCLAAA|OOOOxx
+4278|7499|0|2|8|18|78|278|278|4278|4278|156|157|OIAAAA|LCLAAA|VVVVxx
+5467|7500|1|3|7|7|67|467|1467|467|5467|134|135|HCAAAA|MCLAAA|AAAAxx
+3137|7501|1|1|7|17|37|137|1137|3137|3137|74|75|RQAAAA|NCLAAA|HHHHxx
+204|7502|0|0|4|4|4|204|204|204|204|8|9|WHAAAA|OCLAAA|OOOOxx
+8224|7503|0|0|4|4|24|224|224|3224|8224|48|49|IEAAAA|PCLAAA|VVVVxx
+2944|7504|0|0|4|4|44|944|944|2944|2944|88|89|GJAAAA|QCLAAA|AAAAxx
+7593|7505|1|1|3|13|93|593|1593|2593|7593|186|187|BGAAAA|RCLAAA|HHHHxx
+814|7506|0|2|4|14|14|814|814|814|814|28|29|IFAAAA|SCLAAA|OOOOxx
+8047|7507|1|3|7|7|47|47|47|3047|8047|94|95|NXAAAA|TCLAAA|VVVVxx
+7802|7508|0|2|2|2|2|802|1802|2802|7802|4|5|COAAAA|UCLAAA|AAAAxx
+901|7509|1|1|1|1|1|901|901|901|901|2|3|RIAAAA|VCLAAA|HHHHxx
+6168|7510|0|0|8|8|68|168|168|1168|6168|136|137|GDAAAA|WCLAAA|OOOOxx
+2950|7511|0|2|0|10|50|950|950|2950|2950|100|101|MJAAAA|XCLAAA|VVVVxx
+5393|7512|1|1|3|13|93|393|1393|393|5393|186|187|LZAAAA|YCLAAA|AAAAxx
+3585|7513|1|1|5|5|85|585|1585|3585|3585|170|171|XHAAAA|ZCLAAA|HHHHxx
+9392|7514|0|0|2|12|92|392|1392|4392|9392|184|185|GXAAAA|ADLAAA|OOOOxx
+8314|7515|0|2|4|14|14|314|314|3314|8314|28|29|UHAAAA|BDLAAA|VVVVxx
+9972|7516|0|0|2|12|72|972|1972|4972|9972|144|145|OTAAAA|CDLAAA|AAAAxx
+9130|7517|0|2|0|10|30|130|1130|4130|9130|60|61|ENAAAA|DDLAAA|HHHHxx
+975|7518|1|3|5|15|75|975|975|975|975|150|151|NLAAAA|EDLAAA|OOOOxx
+5720|7519|0|0|0|0|20|720|1720|720|5720|40|41|AMAAAA|FDLAAA|VVVVxx
+3769|7520|1|1|9|9|69|769|1769|3769|3769|138|139|ZOAAAA|GDLAAA|AAAAxx
+5303|7521|1|3|3|3|3|303|1303|303|5303|6|7|ZVAAAA|HDLAAA|HHHHxx
+6564|7522|0|0|4|4|64|564|564|1564|6564|128|129|MSAAAA|IDLAAA|OOOOxx
+7855|7523|1|3|5|15|55|855|1855|2855|7855|110|111|DQAAAA|JDLAAA|VVVVxx
+8153|7524|1|1|3|13|53|153|153|3153|8153|106|107|PBAAAA|KDLAAA|AAAAxx
+2292|7525|0|0|2|12|92|292|292|2292|2292|184|185|EKAAAA|LDLAAA|HHHHxx
+3156|7526|0|0|6|16|56|156|1156|3156|3156|112|113|KRAAAA|MDLAAA|OOOOxx
+6580|7527|0|0|0|0|80|580|580|1580|6580|160|161|CTAAAA|NDLAAA|VVVVxx
+5324|7528|0|0|4|4|24|324|1324|324|5324|48|49|UWAAAA|ODLAAA|AAAAxx
+8871|7529|1|3|1|11|71|871|871|3871|8871|142|143|FDAAAA|PDLAAA|HHHHxx
+2543|7530|1|3|3|3|43|543|543|2543|2543|86|87|VTAAAA|QDLAAA|OOOOxx
+7857|7531|1|1|7|17|57|857|1857|2857|7857|114|115|FQAAAA|RDLAAA|VVVVxx
+4084|7532|0|0|4|4|84|84|84|4084|4084|168|169|CBAAAA|SDLAAA|AAAAxx
+9887|7533|1|3|7|7|87|887|1887|4887|9887|174|175|HQAAAA|TDLAAA|HHHHxx
+6940|7534|0|0|0|0|40|940|940|1940|6940|80|81|YGAAAA|UDLAAA|OOOOxx
+3415|7535|1|3|5|15|15|415|1415|3415|3415|30|31|JBAAAA|VDLAAA|VVVVxx
+5012|7536|0|0|2|12|12|12|1012|12|5012|24|25|UKAAAA|WDLAAA|AAAAxx
+3187|7537|1|3|7|7|87|187|1187|3187|3187|174|175|PSAAAA|XDLAAA|HHHHxx
+8556|7538|0|0|6|16|56|556|556|3556|8556|112|113|CRAAAA|YDLAAA|OOOOxx
+7966|7539|0|2|6|6|66|966|1966|2966|7966|132|133|KUAAAA|ZDLAAA|VVVVxx
+7481|7540|1|1|1|1|81|481|1481|2481|7481|162|163|TBAAAA|AELAAA|AAAAxx
+8524|7541|0|0|4|4|24|524|524|3524|8524|48|49|WPAAAA|BELAAA|HHHHxx
+3021|7542|1|1|1|1|21|21|1021|3021|3021|42|43|FMAAAA|CELAAA|OOOOxx
+6045|7543|1|1|5|5|45|45|45|1045|6045|90|91|NYAAAA|DELAAA|VVVVxx
+8022|7544|0|2|2|2|22|22|22|3022|8022|44|45|OWAAAA|EELAAA|AAAAxx
+3626|7545|0|2|6|6|26|626|1626|3626|3626|52|53|MJAAAA|FELAAA|HHHHxx
+1030|7546|0|2|0|10|30|30|1030|1030|1030|60|61|QNAAAA|GELAAA|OOOOxx
+8903|7547|1|3|3|3|3|903|903|3903|8903|6|7|LEAAAA|HELAAA|VVVVxx
+7488|7548|0|0|8|8|88|488|1488|2488|7488|176|177|ACAAAA|IELAAA|AAAAxx
+9293|7549|1|1|3|13|93|293|1293|4293|9293|186|187|LTAAAA|JELAAA|HHHHxx
+4586|7550|0|2|6|6|86|586|586|4586|4586|172|173|KUAAAA|KELAAA|OOOOxx
+9282|7551|0|2|2|2|82|282|1282|4282|9282|164|165|ATAAAA|LELAAA|VVVVxx
+1948|7552|0|0|8|8|48|948|1948|1948|1948|96|97|YWAAAA|MELAAA|AAAAxx
+2534|7553|0|2|4|14|34|534|534|2534|2534|68|69|MTAAAA|NELAAA|HHHHxx
+1150|7554|0|2|0|10|50|150|1150|1150|1150|100|101|GSAAAA|OELAAA|OOOOxx
+4931|7555|1|3|1|11|31|931|931|4931|4931|62|63|RHAAAA|PELAAA|VVVVxx
+2866|7556|0|2|6|6|66|866|866|2866|2866|132|133|GGAAAA|QELAAA|AAAAxx
+6172|7557|0|0|2|12|72|172|172|1172|6172|144|145|KDAAAA|RELAAA|HHHHxx
+4819|7558|1|3|9|19|19|819|819|4819|4819|38|39|JDAAAA|SELAAA|OOOOxx
+569|7559|1|1|9|9|69|569|569|569|569|138|139|XVAAAA|TELAAA|VVVVxx
+1146|7560|0|2|6|6|46|146|1146|1146|1146|92|93|CSAAAA|UELAAA|AAAAxx
+3062|7561|0|2|2|2|62|62|1062|3062|3062|124|125|UNAAAA|VELAAA|HHHHxx
+7690|7562|0|2|0|10|90|690|1690|2690|7690|180|181|UJAAAA|WELAAA|OOOOxx
+8611|7563|1|3|1|11|11|611|611|3611|8611|22|23|FTAAAA|XELAAA|VVVVxx
+1142|7564|0|2|2|2|42|142|1142|1142|1142|84|85|YRAAAA|YELAAA|AAAAxx
+1193|7565|1|1|3|13|93|193|1193|1193|1193|186|187|XTAAAA|ZELAAA|HHHHxx
+2507|7566|1|3|7|7|7|507|507|2507|2507|14|15|LSAAAA|AFLAAA|OOOOxx
+1043|7567|1|3|3|3|43|43|1043|1043|1043|86|87|DOAAAA|BFLAAA|VVVVxx
+7472|7568|0|0|2|12|72|472|1472|2472|7472|144|145|KBAAAA|CFLAAA|AAAAxx
+1817|7569|1|1|7|17|17|817|1817|1817|1817|34|35|XRAAAA|DFLAAA|HHHHxx
+3868|7570|0|0|8|8|68|868|1868|3868|3868|136|137|USAAAA|EFLAAA|OOOOxx
+9031|7571|1|3|1|11|31|31|1031|4031|9031|62|63|JJAAAA|FFLAAA|VVVVxx
+7254|7572|0|2|4|14|54|254|1254|2254|7254|108|109|ATAAAA|GFLAAA|AAAAxx
+5030|7573|0|2|0|10|30|30|1030|30|5030|60|61|MLAAAA|HFLAAA|HHHHxx
+6594|7574|0|2|4|14|94|594|594|1594|6594|188|189|QTAAAA|IFLAAA|OOOOxx
+6862|7575|0|2|2|2|62|862|862|1862|6862|124|125|YDAAAA|JFLAAA|VVVVxx
+1994|7576|0|2|4|14|94|994|1994|1994|1994|188|189|SYAAAA|KFLAAA|AAAAxx
+9017|7577|1|1|7|17|17|17|1017|4017|9017|34|35|VIAAAA|LFLAAA|HHHHxx
+5716|7578|0|0|6|16|16|716|1716|716|5716|32|33|WLAAAA|MFLAAA|OOOOxx
+1900|7579|0|0|0|0|0|900|1900|1900|1900|0|1|CVAAAA|NFLAAA|VVVVxx
+120|7580|0|0|0|0|20|120|120|120|120|40|41|QEAAAA|OFLAAA|AAAAxx
+9003|7581|1|3|3|3|3|3|1003|4003|9003|6|7|HIAAAA|PFLAAA|HHHHxx
+4178|7582|0|2|8|18|78|178|178|4178|4178|156|157|SEAAAA|QFLAAA|OOOOxx
+8777|7583|1|1|7|17|77|777|777|3777|8777|154|155|PZAAAA|RFLAAA|VVVVxx
+3653|7584|1|1|3|13|53|653|1653|3653|3653|106|107|NKAAAA|SFLAAA|AAAAxx
+1137|7585|1|1|7|17|37|137|1137|1137|1137|74|75|TRAAAA|TFLAAA|HHHHxx
+6362|7586|0|2|2|2|62|362|362|1362|6362|124|125|SKAAAA|UFLAAA|OOOOxx
+8537|7587|1|1|7|17|37|537|537|3537|8537|74|75|JQAAAA|VFLAAA|VVVVxx
+1590|7588|0|2|0|10|90|590|1590|1590|1590|180|181|EJAAAA|WFLAAA|AAAAxx
+374|7589|0|2|4|14|74|374|374|374|374|148|149|KOAAAA|XFLAAA|HHHHxx
+2597|7590|1|1|7|17|97|597|597|2597|2597|194|195|XVAAAA|YFLAAA|OOOOxx
+8071|7591|1|3|1|11|71|71|71|3071|8071|142|143|LYAAAA|ZFLAAA|VVVVxx
+9009|7592|1|1|9|9|9|9|1009|4009|9009|18|19|NIAAAA|AGLAAA|AAAAxx
+1978|7593|0|2|8|18|78|978|1978|1978|1978|156|157|CYAAAA|BGLAAA|HHHHxx
+1541|7594|1|1|1|1|41|541|1541|1541|1541|82|83|HHAAAA|CGLAAA|OOOOxx
+4998|7595|0|2|8|18|98|998|998|4998|4998|196|197|GKAAAA|DGLAAA|VVVVxx
+1649|7596|1|1|9|9|49|649|1649|1649|1649|98|99|LLAAAA|EGLAAA|AAAAxx
+5426|7597|0|2|6|6|26|426|1426|426|5426|52|53|SAAAAA|FGLAAA|HHHHxx
+1492|7598|0|0|2|12|92|492|1492|1492|1492|184|185|KFAAAA|GGLAAA|OOOOxx
+9622|7599|0|2|2|2|22|622|1622|4622|9622|44|45|CGAAAA|HGLAAA|VVVVxx
+701|7600|1|1|1|1|1|701|701|701|701|2|3|ZAAAAA|IGLAAA|AAAAxx
+2781|7601|1|1|1|1|81|781|781|2781|2781|162|163|ZCAAAA|JGLAAA|HHHHxx
+3982|7602|0|2|2|2|82|982|1982|3982|3982|164|165|EXAAAA|KGLAAA|OOOOxx
+7259|7603|1|3|9|19|59|259|1259|2259|7259|118|119|FTAAAA|LGLAAA|VVVVxx
+9868|7604|0|0|8|8|68|868|1868|4868|9868|136|137|OPAAAA|MGLAAA|AAAAxx
+564|7605|0|0|4|4|64|564|564|564|564|128|129|SVAAAA|NGLAAA|HHHHxx
+6315|7606|1|3|5|15|15|315|315|1315|6315|30|31|XIAAAA|OGLAAA|OOOOxx
+9092|7607|0|0|2|12|92|92|1092|4092|9092|184|185|SLAAAA|PGLAAA|VVVVxx
+8237|7608|1|1|7|17|37|237|237|3237|8237|74|75|VEAAAA|QGLAAA|AAAAxx
+1513|7609|1|1|3|13|13|513|1513|1513|1513|26|27|FGAAAA|RGLAAA|HHHHxx
+1922|7610|0|2|2|2|22|922|1922|1922|1922|44|45|YVAAAA|SGLAAA|OOOOxx
+5396|7611|0|0|6|16|96|396|1396|396|5396|192|193|OZAAAA|TGLAAA|VVVVxx
+2485|7612|1|1|5|5|85|485|485|2485|2485|170|171|PRAAAA|UGLAAA|AAAAxx
+5774|7613|0|2|4|14|74|774|1774|774|5774|148|149|COAAAA|VGLAAA|HHHHxx
+3983|7614|1|3|3|3|83|983|1983|3983|3983|166|167|FXAAAA|WGLAAA|OOOOxx
+221|7615|1|1|1|1|21|221|221|221|221|42|43|NIAAAA|XGLAAA|VVVVxx
+8662|7616|0|2|2|2|62|662|662|3662|8662|124|125|EVAAAA|YGLAAA|AAAAxx
+2456|7617|0|0|6|16|56|456|456|2456|2456|112|113|MQAAAA|ZGLAAA|HHHHxx
+9736|7618|0|0|6|16|36|736|1736|4736|9736|72|73|MKAAAA|AHLAAA|OOOOxx
+8936|7619|0|0|6|16|36|936|936|3936|8936|72|73|SFAAAA|BHLAAA|VVVVxx
+5395|7620|1|3|5|15|95|395|1395|395|5395|190|191|NZAAAA|CHLAAA|AAAAxx
+9523|7621|1|3|3|3|23|523|1523|4523|9523|46|47|HCAAAA|DHLAAA|HHHHxx
+6980|7622|0|0|0|0|80|980|980|1980|6980|160|161|MIAAAA|EHLAAA|OOOOxx
+2091|7623|1|3|1|11|91|91|91|2091|2091|182|183|LCAAAA|FHLAAA|VVVVxx
+6807|7624|1|3|7|7|7|807|807|1807|6807|14|15|VBAAAA|GHLAAA|AAAAxx
+8818|7625|0|2|8|18|18|818|818|3818|8818|36|37|EBAAAA|HHLAAA|HHHHxx
+5298|7626|0|2|8|18|98|298|1298|298|5298|196|197|UVAAAA|IHLAAA|OOOOxx
+1726|7627|0|2|6|6|26|726|1726|1726|1726|52|53|KOAAAA|JHLAAA|VVVVxx
+3878|7628|0|2|8|18|78|878|1878|3878|3878|156|157|ETAAAA|KHLAAA|AAAAxx
+8700|7629|0|0|0|0|0|700|700|3700|8700|0|1|QWAAAA|LHLAAA|HHHHxx
+5201|7630|1|1|1|1|1|201|1201|201|5201|2|3|BSAAAA|MHLAAA|OOOOxx
+3936|7631|0|0|6|16|36|936|1936|3936|3936|72|73|KVAAAA|NHLAAA|VVVVxx
+776|7632|0|0|6|16|76|776|776|776|776|152|153|WDAAAA|OHLAAA|AAAAxx
+5302|7633|0|2|2|2|2|302|1302|302|5302|4|5|YVAAAA|PHLAAA|HHHHxx
+3595|7634|1|3|5|15|95|595|1595|3595|3595|190|191|HIAAAA|QHLAAA|OOOOxx
+9061|7635|1|1|1|1|61|61|1061|4061|9061|122|123|NKAAAA|RHLAAA|VVVVxx
+6261|7636|1|1|1|1|61|261|261|1261|6261|122|123|VGAAAA|SHLAAA|AAAAxx
+8878|7637|0|2|8|18|78|878|878|3878|8878|156|157|MDAAAA|THLAAA|HHHHxx
+3312|7638|0|0|2|12|12|312|1312|3312|3312|24|25|KXAAAA|UHLAAA|OOOOxx
+9422|7639|0|2|2|2|22|422|1422|4422|9422|44|45|KYAAAA|VHLAAA|VVVVxx
+7321|7640|1|1|1|1|21|321|1321|2321|7321|42|43|PVAAAA|WHLAAA|AAAAxx
+3813|7641|1|1|3|13|13|813|1813|3813|3813|26|27|RQAAAA|XHLAAA|HHHHxx
+5848|7642|0|0|8|8|48|848|1848|848|5848|96|97|YQAAAA|YHLAAA|OOOOxx
+3535|7643|1|3|5|15|35|535|1535|3535|3535|70|71|ZFAAAA|ZHLAAA|VVVVxx
+1040|7644|0|0|0|0|40|40|1040|1040|1040|80|81|AOAAAA|AILAAA|AAAAxx
+8572|7645|0|0|2|12|72|572|572|3572|8572|144|145|SRAAAA|BILAAA|HHHHxx
+5435|7646|1|3|5|15|35|435|1435|435|5435|70|71|BBAAAA|CILAAA|OOOOxx
+8199|7647|1|3|9|19|99|199|199|3199|8199|198|199|JDAAAA|DILAAA|VVVVxx
+8775|7648|1|3|5|15|75|775|775|3775|8775|150|151|NZAAAA|EILAAA|AAAAxx
+7722|7649|0|2|2|2|22|722|1722|2722|7722|44|45|ALAAAA|FILAAA|HHHHxx
+3549|7650|1|1|9|9|49|549|1549|3549|3549|98|99|NGAAAA|GILAAA|OOOOxx
+2578|7651|0|2|8|18|78|578|578|2578|2578|156|157|EVAAAA|HILAAA|VVVVxx
+1695|7652|1|3|5|15|95|695|1695|1695|1695|190|191|FNAAAA|IILAAA|AAAAxx
+1902|7653|0|2|2|2|2|902|1902|1902|1902|4|5|EVAAAA|JILAAA|HHHHxx
+6058|7654|0|2|8|18|58|58|58|1058|6058|116|117|AZAAAA|KILAAA|OOOOxx
+6591|7655|1|3|1|11|91|591|591|1591|6591|182|183|NTAAAA|LILAAA|VVVVxx
+7962|7656|0|2|2|2|62|962|1962|2962|7962|124|125|GUAAAA|MILAAA|AAAAxx
+5612|7657|0|0|2|12|12|612|1612|612|5612|24|25|WHAAAA|NILAAA|HHHHxx
+3341|7658|1|1|1|1|41|341|1341|3341|3341|82|83|NYAAAA|OILAAA|OOOOxx
+5460|7659|0|0|0|0|60|460|1460|460|5460|120|121|ACAAAA|PILAAA|VVVVxx
+2368|7660|0|0|8|8|68|368|368|2368|2368|136|137|CNAAAA|QILAAA|AAAAxx
+8646|7661|0|2|6|6|46|646|646|3646|8646|92|93|OUAAAA|RILAAA|HHHHxx
+4987|7662|1|3|7|7|87|987|987|4987|4987|174|175|VJAAAA|SILAAA|OOOOxx
+9018|7663|0|2|8|18|18|18|1018|4018|9018|36|37|WIAAAA|TILAAA|VVVVxx
+8685|7664|1|1|5|5|85|685|685|3685|8685|170|171|BWAAAA|UILAAA|AAAAxx
+694|7665|0|2|4|14|94|694|694|694|694|188|189|SAAAAA|VILAAA|HHHHxx
+2012|7666|0|0|2|12|12|12|12|2012|2012|24|25|KZAAAA|WILAAA|OOOOxx
+2417|7667|1|1|7|17|17|417|417|2417|2417|34|35|ZOAAAA|XILAAA|VVVVxx
+4022|7668|0|2|2|2|22|22|22|4022|4022|44|45|SYAAAA|YILAAA|AAAAxx
+5935|7669|1|3|5|15|35|935|1935|935|5935|70|71|HUAAAA|ZILAAA|HHHHxx
+1656|7670|0|0|6|16|56|656|1656|1656|1656|112|113|SLAAAA|AJLAAA|OOOOxx
+6195|7671|1|3|5|15|95|195|195|1195|6195|190|191|HEAAAA|BJLAAA|VVVVxx
+3057|7672|1|1|7|17|57|57|1057|3057|3057|114|115|PNAAAA|CJLAAA|AAAAxx
+2852|7673|0|0|2|12|52|852|852|2852|2852|104|105|SFAAAA|DJLAAA|HHHHxx
+4634|7674|0|2|4|14|34|634|634|4634|4634|68|69|GWAAAA|EJLAAA|OOOOxx
+1689|7675|1|1|9|9|89|689|1689|1689|1689|178|179|ZMAAAA|FJLAAA|VVVVxx
+4102|7676|0|2|2|2|2|102|102|4102|4102|4|5|UBAAAA|GJLAAA|AAAAxx
+3287|7677|1|3|7|7|87|287|1287|3287|3287|174|175|LWAAAA|HJLAAA|HHHHxx
+5246|7678|0|2|6|6|46|246|1246|246|5246|92|93|UTAAAA|IJLAAA|OOOOxx
+7450|7679|0|2|0|10|50|450|1450|2450|7450|100|101|OAAAAA|JJLAAA|VVVVxx
+6548|7680|0|0|8|8|48|548|548|1548|6548|96|97|WRAAAA|KJLAAA|AAAAxx
+379|7681|1|3|9|19|79|379|379|379|379|158|159|POAAAA|LJLAAA|HHHHxx
+7435|7682|1|3|5|15|35|435|1435|2435|7435|70|71|ZZAAAA|MJLAAA|OOOOxx
+2041|7683|1|1|1|1|41|41|41|2041|2041|82|83|NAAAAA|NJLAAA|VVVVxx
+8462|7684|0|2|2|2|62|462|462|3462|8462|124|125|MNAAAA|OJLAAA|AAAAxx
+9076|7685|0|0|6|16|76|76|1076|4076|9076|152|153|CLAAAA|PJLAAA|HHHHxx
+761|7686|1|1|1|1|61|761|761|761|761|122|123|HDAAAA|QJLAAA|OOOOxx
+795|7687|1|3|5|15|95|795|795|795|795|190|191|PEAAAA|RJLAAA|VVVVxx
+1671|7688|1|3|1|11|71|671|1671|1671|1671|142|143|HMAAAA|SJLAAA|AAAAxx
+695|7689|1|3|5|15|95|695|695|695|695|190|191|TAAAAA|TJLAAA|HHHHxx
+4981|7690|1|1|1|1|81|981|981|4981|4981|162|163|PJAAAA|UJLAAA|OOOOxx
+1211|7691|1|3|1|11|11|211|1211|1211|1211|22|23|PUAAAA|VJLAAA|VVVVxx
+5914|7692|0|2|4|14|14|914|1914|914|5914|28|29|MTAAAA|WJLAAA|AAAAxx
+9356|7693|0|0|6|16|56|356|1356|4356|9356|112|113|WVAAAA|XJLAAA|HHHHxx
+1500|7694|0|0|0|0|0|500|1500|1500|1500|0|1|SFAAAA|YJLAAA|OOOOxx
+3353|7695|1|1|3|13|53|353|1353|3353|3353|106|107|ZYAAAA|ZJLAAA|VVVVxx
+1060|7696|0|0|0|0|60|60|1060|1060|1060|120|121|UOAAAA|AKLAAA|AAAAxx
+7910|7697|0|2|0|10|10|910|1910|2910|7910|20|21|GSAAAA|BKLAAA|HHHHxx
+1329|7698|1|1|9|9|29|329|1329|1329|1329|58|59|DZAAAA|CKLAAA|OOOOxx
+6011|7699|1|3|1|11|11|11|11|1011|6011|22|23|FXAAAA|DKLAAA|VVVVxx
+7146|7700|0|2|6|6|46|146|1146|2146|7146|92|93|WOAAAA|EKLAAA|AAAAxx
+4602|7701|0|2|2|2|2|602|602|4602|4602|4|5|AVAAAA|FKLAAA|HHHHxx
+6751|7702|1|3|1|11|51|751|751|1751|6751|102|103|RZAAAA|GKLAAA|OOOOxx
+2666|7703|0|2|6|6|66|666|666|2666|2666|132|133|OYAAAA|HKLAAA|VVVVxx
+2785|7704|1|1|5|5|85|785|785|2785|2785|170|171|DDAAAA|IKLAAA|AAAAxx
+5851|7705|1|3|1|11|51|851|1851|851|5851|102|103|BRAAAA|JKLAAA|HHHHxx
+2435|7706|1|3|5|15|35|435|435|2435|2435|70|71|RPAAAA|KKLAAA|OOOOxx
+7429|7707|1|1|9|9|29|429|1429|2429|7429|58|59|TZAAAA|LKLAAA|VVVVxx
+4241|7708|1|1|1|1|41|241|241|4241|4241|82|83|DHAAAA|MKLAAA|AAAAxx
+5691|7709|1|3|1|11|91|691|1691|691|5691|182|183|XKAAAA|NKLAAA|HHHHxx
+7731|7710|1|3|1|11|31|731|1731|2731|7731|62|63|JLAAAA|OKLAAA|OOOOxx
+249|7711|1|1|9|9|49|249|249|249|249|98|99|PJAAAA|PKLAAA|VVVVxx
+1731|7712|1|3|1|11|31|731|1731|1731|1731|62|63|POAAAA|QKLAAA|AAAAxx
+8716|7713|0|0|6|16|16|716|716|3716|8716|32|33|GXAAAA|RKLAAA|HHHHxx
+2670|7714|0|2|0|10|70|670|670|2670|2670|140|141|SYAAAA|SKLAAA|OOOOxx
+4654|7715|0|2|4|14|54|654|654|4654|4654|108|109|AXAAAA|TKLAAA|VVVVxx
+1027|7716|1|3|7|7|27|27|1027|1027|1027|54|55|NNAAAA|UKLAAA|AAAAxx
+1099|7717|1|3|9|19|99|99|1099|1099|1099|198|199|HQAAAA|VKLAAA|HHHHxx
+3617|7718|1|1|7|17|17|617|1617|3617|3617|34|35|DJAAAA|WKLAAA|OOOOxx
+4330|7719|0|2|0|10|30|330|330|4330|4330|60|61|OKAAAA|XKLAAA|VVVVxx
+9750|7720|0|2|0|10|50|750|1750|4750|9750|100|101|ALAAAA|YKLAAA|AAAAxx
+467|7721|1|3|7|7|67|467|467|467|467|134|135|ZRAAAA|ZKLAAA|HHHHxx
+8525|7722|1|1|5|5|25|525|525|3525|8525|50|51|XPAAAA|ALLAAA|OOOOxx
+5990|7723|0|2|0|10|90|990|1990|990|5990|180|181|KWAAAA|BLLAAA|VVVVxx
+4839|7724|1|3|9|19|39|839|839|4839|4839|78|79|DEAAAA|CLLAAA|AAAAxx
+9914|7725|0|2|4|14|14|914|1914|4914|9914|28|29|IRAAAA|DLLAAA|HHHHxx
+7047|7726|1|3|7|7|47|47|1047|2047|7047|94|95|BLAAAA|ELLAAA|OOOOxx
+874|7727|0|2|4|14|74|874|874|874|874|148|149|QHAAAA|FLLAAA|VVVVxx
+6061|7728|1|1|1|1|61|61|61|1061|6061|122|123|DZAAAA|GLLAAA|AAAAxx
+5491|7729|1|3|1|11|91|491|1491|491|5491|182|183|FDAAAA|HLLAAA|HHHHxx
+4344|7730|0|0|4|4|44|344|344|4344|4344|88|89|CLAAAA|ILLAAA|OOOOxx
+1281|7731|1|1|1|1|81|281|1281|1281|1281|162|163|HXAAAA|JLLAAA|VVVVxx
+3597|7732|1|1|7|17|97|597|1597|3597|3597|194|195|JIAAAA|KLLAAA|AAAAxx
+4992|7733|0|0|2|12|92|992|992|4992|4992|184|185|AKAAAA|LLLAAA|HHHHxx
+3849|7734|1|1|9|9|49|849|1849|3849|3849|98|99|BSAAAA|MLLAAA|OOOOxx
+2655|7735|1|3|5|15|55|655|655|2655|2655|110|111|DYAAAA|NLLAAA|VVVVxx
+147|7736|1|3|7|7|47|147|147|147|147|94|95|RFAAAA|OLLAAA|AAAAxx
+9110|7737|0|2|0|10|10|110|1110|4110|9110|20|21|KMAAAA|PLLAAA|HHHHxx
+1637|7738|1|1|7|17|37|637|1637|1637|1637|74|75|ZKAAAA|QLLAAA|OOOOxx
+9826|7739|0|2|6|6|26|826|1826|4826|9826|52|53|YNAAAA|RLLAAA|VVVVxx
+5957|7740|1|1|7|17|57|957|1957|957|5957|114|115|DVAAAA|SLLAAA|AAAAxx
+6932|7741|0|0|2|12|32|932|932|1932|6932|64|65|QGAAAA|TLLAAA|HHHHxx
+9684|7742|0|0|4|4|84|684|1684|4684|9684|168|169|MIAAAA|ULLAAA|OOOOxx
+4653|7743|1|1|3|13|53|653|653|4653|4653|106|107|ZWAAAA|VLLAAA|VVVVxx
+8065|7744|1|1|5|5|65|65|65|3065|8065|130|131|FYAAAA|WLLAAA|AAAAxx
+1202|7745|0|2|2|2|2|202|1202|1202|1202|4|5|GUAAAA|XLLAAA|HHHHxx
+9214|7746|0|2|4|14|14|214|1214|4214|9214|28|29|KQAAAA|YLLAAA|OOOOxx
+196|7747|0|0|6|16|96|196|196|196|196|192|193|OHAAAA|ZLLAAA|VVVVxx
+4486|7748|0|2|6|6|86|486|486|4486|4486|172|173|OQAAAA|AMLAAA|AAAAxx
+2585|7749|1|1|5|5|85|585|585|2585|2585|170|171|LVAAAA|BMLAAA|HHHHxx
+2464|7750|0|0|4|4|64|464|464|2464|2464|128|129|UQAAAA|CMLAAA|OOOOxx
+3467|7751|1|3|7|7|67|467|1467|3467|3467|134|135|JDAAAA|DMLAAA|VVVVxx
+9295|7752|1|3|5|15|95|295|1295|4295|9295|190|191|NTAAAA|EMLAAA|AAAAxx
+517|7753|1|1|7|17|17|517|517|517|517|34|35|XTAAAA|FMLAAA|HHHHxx
+6870|7754|0|2|0|10|70|870|870|1870|6870|140|141|GEAAAA|GMLAAA|OOOOxx
+5732|7755|0|0|2|12|32|732|1732|732|5732|64|65|MMAAAA|HMLAAA|VVVVxx
+9376|7756|0|0|6|16|76|376|1376|4376|9376|152|153|QWAAAA|IMLAAA|AAAAxx
+838|7757|0|2|8|18|38|838|838|838|838|76|77|GGAAAA|JMLAAA|HHHHxx
+9254|7758|0|2|4|14|54|254|1254|4254|9254|108|109|YRAAAA|KMLAAA|OOOOxx
+8879|7759|1|3|9|19|79|879|879|3879|8879|158|159|NDAAAA|LMLAAA|VVVVxx
+6281|7760|1|1|1|1|81|281|281|1281|6281|162|163|PHAAAA|MMLAAA|AAAAxx
+8216|7761|0|0|6|16|16|216|216|3216|8216|32|33|AEAAAA|NMLAAA|HHHHxx
+9213|7762|1|1|3|13|13|213|1213|4213|9213|26|27|JQAAAA|OMLAAA|OOOOxx
+7234|7763|0|2|4|14|34|234|1234|2234|7234|68|69|GSAAAA|PMLAAA|VVVVxx
+5692|7764|0|0|2|12|92|692|1692|692|5692|184|185|YKAAAA|QMLAAA|AAAAxx
+693|7765|1|1|3|13|93|693|693|693|693|186|187|RAAAAA|RMLAAA|HHHHxx
+9050|7766|0|2|0|10|50|50|1050|4050|9050|100|101|CKAAAA|SMLAAA|OOOOxx
+3623|7767|1|3|3|3|23|623|1623|3623|3623|46|47|JJAAAA|TMLAAA|VVVVxx
+2130|7768|0|2|0|10|30|130|130|2130|2130|60|61|YDAAAA|UMLAAA|AAAAxx
+2514|7769|0|2|4|14|14|514|514|2514|2514|28|29|SSAAAA|VMLAAA|HHHHxx
+1812|7770|0|0|2|12|12|812|1812|1812|1812|24|25|SRAAAA|WMLAAA|OOOOxx
+9037|7771|1|1|7|17|37|37|1037|4037|9037|74|75|PJAAAA|XMLAAA|VVVVxx
+5054|7772|0|2|4|14|54|54|1054|54|5054|108|109|KMAAAA|YMLAAA|AAAAxx
+7801|7773|1|1|1|1|1|801|1801|2801|7801|2|3|BOAAAA|ZMLAAA|HHHHxx
+7939|7774|1|3|9|19|39|939|1939|2939|7939|78|79|JTAAAA|ANLAAA|OOOOxx
+7374|7775|0|2|4|14|74|374|1374|2374|7374|148|149|QXAAAA|BNLAAA|VVVVxx
+1058|7776|0|2|8|18|58|58|1058|1058|1058|116|117|SOAAAA|CNLAAA|AAAAxx
+1972|7777|0|0|2|12|72|972|1972|1972|1972|144|145|WXAAAA|DNLAAA|HHHHxx
+3741|7778|1|1|1|1|41|741|1741|3741|3741|82|83|XNAAAA|ENLAAA|OOOOxx
+2227|7779|1|3|7|7|27|227|227|2227|2227|54|55|RHAAAA|FNLAAA|VVVVxx
+304|7780|0|0|4|4|4|304|304|304|304|8|9|SLAAAA|GNLAAA|AAAAxx
+4914|7781|0|2|4|14|14|914|914|4914|4914|28|29|AHAAAA|HNLAAA|HHHHxx
+2428|7782|0|0|8|8|28|428|428|2428|2428|56|57|KPAAAA|INLAAA|OOOOxx
+6660|7783|0|0|0|0|60|660|660|1660|6660|120|121|EWAAAA|JNLAAA|VVVVxx
+2676|7784|0|0|6|16|76|676|676|2676|2676|152|153|YYAAAA|KNLAAA|AAAAxx
+2454|7785|0|2|4|14|54|454|454|2454|2454|108|109|KQAAAA|LNLAAA|HHHHxx
+3798|7786|0|2|8|18|98|798|1798|3798|3798|196|197|CQAAAA|MNLAAA|OOOOxx
+1341|7787|1|1|1|1|41|341|1341|1341|1341|82|83|PZAAAA|NNLAAA|VVVVxx
+1611|7788|1|3|1|11|11|611|1611|1611|1611|22|23|ZJAAAA|ONLAAA|AAAAxx
+2681|7789|1|1|1|1|81|681|681|2681|2681|162|163|DZAAAA|PNLAAA|HHHHxx
+7292|7790|0|0|2|12|92|292|1292|2292|7292|184|185|MUAAAA|QNLAAA|OOOOxx
+7775|7791|1|3|5|15|75|775|1775|2775|7775|150|151|BNAAAA|RNLAAA|VVVVxx
+794|7792|0|2|4|14|94|794|794|794|794|188|189|OEAAAA|SNLAAA|AAAAxx
+8709|7793|1|1|9|9|9|709|709|3709|8709|18|19|ZWAAAA|TNLAAA|HHHHxx
+1901|7794|1|1|1|1|1|901|1901|1901|1901|2|3|DVAAAA|UNLAAA|OOOOxx
+3089|7795|1|1|9|9|89|89|1089|3089|3089|178|179|VOAAAA|VNLAAA|VVVVxx
+7797|7796|1|1|7|17|97|797|1797|2797|7797|194|195|XNAAAA|WNLAAA|AAAAxx
+6070|7797|0|2|0|10|70|70|70|1070|6070|140|141|MZAAAA|XNLAAA|HHHHxx
+2191|7798|1|3|1|11|91|191|191|2191|2191|182|183|HGAAAA|YNLAAA|OOOOxx
+3497|7799|1|1|7|17|97|497|1497|3497|3497|194|195|NEAAAA|ZNLAAA|VVVVxx
+8302|7800|0|2|2|2|2|302|302|3302|8302|4|5|IHAAAA|AOLAAA|AAAAxx
+4365|7801|1|1|5|5|65|365|365|4365|4365|130|131|XLAAAA|BOLAAA|HHHHxx
+3588|7802|0|0|8|8|88|588|1588|3588|3588|176|177|AIAAAA|COLAAA|OOOOxx
+8292|7803|0|0|2|12|92|292|292|3292|8292|184|185|YGAAAA|DOLAAA|VVVVxx
+4696|7804|0|0|6|16|96|696|696|4696|4696|192|193|QYAAAA|EOLAAA|AAAAxx
+5641|7805|1|1|1|1|41|641|1641|641|5641|82|83|ZIAAAA|FOLAAA|HHHHxx
+9386|7806|0|2|6|6|86|386|1386|4386|9386|172|173|AXAAAA|GOLAAA|OOOOxx
+507|7807|1|3|7|7|7|507|507|507|507|14|15|NTAAAA|HOLAAA|VVVVxx
+7201|7808|1|1|1|1|1|201|1201|2201|7201|2|3|ZQAAAA|IOLAAA|AAAAxx
+7785|7809|1|1|5|5|85|785|1785|2785|7785|170|171|LNAAAA|JOLAAA|HHHHxx
+463|7810|1|3|3|3|63|463|463|463|463|126|127|VRAAAA|KOLAAA|OOOOxx
+6656|7811|0|0|6|16|56|656|656|1656|6656|112|113|AWAAAA|LOLAAA|VVVVxx
+807|7812|1|3|7|7|7|807|807|807|807|14|15|BFAAAA|MOLAAA|AAAAxx
+7278|7813|0|2|8|18|78|278|1278|2278|7278|156|157|YTAAAA|NOLAAA|HHHHxx
+6237|7814|1|1|7|17|37|237|237|1237|6237|74|75|XFAAAA|OOLAAA|OOOOxx
+7671|7815|1|3|1|11|71|671|1671|2671|7671|142|143|BJAAAA|POLAAA|VVVVxx
+2235|7816|1|3|5|15|35|235|235|2235|2235|70|71|ZHAAAA|QOLAAA|AAAAxx
+4042|7817|0|2|2|2|42|42|42|4042|4042|84|85|MZAAAA|ROLAAA|HHHHxx
+5273|7818|1|1|3|13|73|273|1273|273|5273|146|147|VUAAAA|SOLAAA|OOOOxx
+7557|7819|1|1|7|17|57|557|1557|2557|7557|114|115|REAAAA|TOLAAA|VVVVxx
+4007|7820|1|3|7|7|7|7|7|4007|4007|14|15|DYAAAA|UOLAAA|AAAAxx
+1428|7821|0|0|8|8|28|428|1428|1428|1428|56|57|YCAAAA|VOLAAA|HHHHxx
+9739|7822|1|3|9|19|39|739|1739|4739|9739|78|79|PKAAAA|WOLAAA|OOOOxx
+7836|7823|0|0|6|16|36|836|1836|2836|7836|72|73|KPAAAA|XOLAAA|VVVVxx
+1777|7824|1|1|7|17|77|777|1777|1777|1777|154|155|JQAAAA|YOLAAA|AAAAxx
+5192|7825|0|0|2|12|92|192|1192|192|5192|184|185|SRAAAA|ZOLAAA|HHHHxx
+7236|7826|0|0|6|16|36|236|1236|2236|7236|72|73|ISAAAA|APLAAA|OOOOxx
+1623|7827|1|3|3|3|23|623|1623|1623|1623|46|47|LKAAAA|BPLAAA|VVVVxx
+8288|7828|0|0|8|8|88|288|288|3288|8288|176|177|UGAAAA|CPLAAA|AAAAxx
+2827|7829|1|3|7|7|27|827|827|2827|2827|54|55|TEAAAA|DPLAAA|HHHHxx
+458|7830|0|2|8|18|58|458|458|458|458|116|117|QRAAAA|EPLAAA|OOOOxx
+1818|7831|0|2|8|18|18|818|1818|1818|1818|36|37|YRAAAA|FPLAAA|VVVVxx
+6837|7832|1|1|7|17|37|837|837|1837|6837|74|75|ZCAAAA|GPLAAA|AAAAxx
+7825|7833|1|1|5|5|25|825|1825|2825|7825|50|51|ZOAAAA|HPLAAA|HHHHxx
+9146|7834|0|2|6|6|46|146|1146|4146|9146|92|93|UNAAAA|IPLAAA|OOOOxx
+8451|7835|1|3|1|11|51|451|451|3451|8451|102|103|BNAAAA|JPLAAA|VVVVxx
+6438|7836|0|2|8|18|38|438|438|1438|6438|76|77|QNAAAA|KPLAAA|AAAAxx
+4020|7837|0|0|0|0|20|20|20|4020|4020|40|41|QYAAAA|LPLAAA|HHHHxx
+4068|7838|0|0|8|8|68|68|68|4068|4068|136|137|MAAAAA|MPLAAA|OOOOxx
+2411|7839|1|3|1|11|11|411|411|2411|2411|22|23|TOAAAA|NPLAAA|VVVVxx
+6222|7840|0|2|2|2|22|222|222|1222|6222|44|45|IFAAAA|OPLAAA|AAAAxx
+3164|7841|0|0|4|4|64|164|1164|3164|3164|128|129|SRAAAA|PPLAAA|HHHHxx
+311|7842|1|3|1|11|11|311|311|311|311|22|23|ZLAAAA|QPLAAA|OOOOxx
+5683|7843|1|3|3|3|83|683|1683|683|5683|166|167|PKAAAA|RPLAAA|VVVVxx
+3993|7844|1|1|3|13|93|993|1993|3993|3993|186|187|PXAAAA|SPLAAA|AAAAxx
+9897|7845|1|1|7|17|97|897|1897|4897|9897|194|195|RQAAAA|TPLAAA|HHHHxx
+6609|7846|1|1|9|9|9|609|609|1609|6609|18|19|FUAAAA|UPLAAA|OOOOxx
+1362|7847|0|2|2|2|62|362|1362|1362|1362|124|125|KAAAAA|VPLAAA|VVVVxx
+3918|7848|0|2|8|18|18|918|1918|3918|3918|36|37|SUAAAA|WPLAAA|AAAAxx
+7376|7849|0|0|6|16|76|376|1376|2376|7376|152|153|SXAAAA|XPLAAA|HHHHxx
+6996|7850|0|0|6|16|96|996|996|1996|6996|192|193|CJAAAA|YPLAAA|OOOOxx
+9567|7851|1|3|7|7|67|567|1567|4567|9567|134|135|ZDAAAA|ZPLAAA|VVVVxx
+7525|7852|1|1|5|5|25|525|1525|2525|7525|50|51|LDAAAA|AQLAAA|AAAAxx
+9069|7853|1|1|9|9|69|69|1069|4069|9069|138|139|VKAAAA|BQLAAA|HHHHxx
+9999|7854|1|3|9|19|99|999|1999|4999|9999|198|199|PUAAAA|CQLAAA|OOOOxx
+9237|7855|1|1|7|17|37|237|1237|4237|9237|74|75|HRAAAA|DQLAAA|VVVVxx
+8441|7856|1|1|1|1|41|441|441|3441|8441|82|83|RMAAAA|EQLAAA|AAAAxx
+6769|7857|1|1|9|9|69|769|769|1769|6769|138|139|JAAAAA|FQLAAA|HHHHxx
+6073|7858|1|1|3|13|73|73|73|1073|6073|146|147|PZAAAA|GQLAAA|OOOOxx
+1091|7859|1|3|1|11|91|91|1091|1091|1091|182|183|ZPAAAA|HQLAAA|VVVVxx
+9886|7860|0|2|6|6|86|886|1886|4886|9886|172|173|GQAAAA|IQLAAA|AAAAxx
+3971|7861|1|3|1|11|71|971|1971|3971|3971|142|143|TWAAAA|JQLAAA|HHHHxx
+4621|7862|1|1|1|1|21|621|621|4621|4621|42|43|TVAAAA|KQLAAA|OOOOxx
+3120|7863|0|0|0|0|20|120|1120|3120|3120|40|41|AQAAAA|LQLAAA|VVVVxx
+9773|7864|1|1|3|13|73|773|1773|4773|9773|146|147|XLAAAA|MQLAAA|AAAAxx
+8712|7865|0|0|2|12|12|712|712|3712|8712|24|25|CXAAAA|NQLAAA|HHHHxx
+801|7866|1|1|1|1|1|801|801|801|801|2|3|VEAAAA|OQLAAA|OOOOxx
+9478|7867|0|2|8|18|78|478|1478|4478|9478|156|157|OAAAAA|PQLAAA|VVVVxx
+3466|7868|0|2|6|6|66|466|1466|3466|3466|132|133|IDAAAA|QQLAAA|AAAAxx
+6326|7869|0|2|6|6|26|326|326|1326|6326|52|53|IJAAAA|RQLAAA|HHHHxx
+1723|7870|1|3|3|3|23|723|1723|1723|1723|46|47|HOAAAA|SQLAAA|OOOOxx
+4978|7871|0|2|8|18|78|978|978|4978|4978|156|157|MJAAAA|TQLAAA|VVVVxx
+2311|7872|1|3|1|11|11|311|311|2311|2311|22|23|XKAAAA|UQLAAA|AAAAxx
+9532|7873|0|0|2|12|32|532|1532|4532|9532|64|65|QCAAAA|VQLAAA|HHHHxx
+3680|7874|0|0|0|0|80|680|1680|3680|3680|160|161|OLAAAA|WQLAAA|OOOOxx
+1244|7875|0|0|4|4|44|244|1244|1244|1244|88|89|WVAAAA|XQLAAA|VVVVxx
+3821|7876|1|1|1|1|21|821|1821|3821|3821|42|43|ZQAAAA|YQLAAA|AAAAxx
+9586|7877|0|2|6|6|86|586|1586|4586|9586|172|173|SEAAAA|ZQLAAA|HHHHxx
+3894|7878|0|2|4|14|94|894|1894|3894|3894|188|189|UTAAAA|ARLAAA|OOOOxx
+6169|7879|1|1|9|9|69|169|169|1169|6169|138|139|HDAAAA|BRLAAA|VVVVxx
+5919|7880|1|3|9|19|19|919|1919|919|5919|38|39|RTAAAA|CRLAAA|AAAAxx
+4187|7881|1|3|7|7|87|187|187|4187|4187|174|175|BFAAAA|DRLAAA|HHHHxx
+5477|7882|1|1|7|17|77|477|1477|477|5477|154|155|RCAAAA|ERLAAA|OOOOxx
+2806|7883|0|2|6|6|6|806|806|2806|2806|12|13|YDAAAA|FRLAAA|VVVVxx
+8158|7884|0|2|8|18|58|158|158|3158|8158|116|117|UBAAAA|GRLAAA|AAAAxx
+7130|7885|0|2|0|10|30|130|1130|2130|7130|60|61|GOAAAA|HRLAAA|HHHHxx
+7133|7886|1|1|3|13|33|133|1133|2133|7133|66|67|JOAAAA|IRLAAA|OOOOxx
+6033|7887|1|1|3|13|33|33|33|1033|6033|66|67|BYAAAA|JRLAAA|VVVVxx
+2415|7888|1|3|5|15|15|415|415|2415|2415|30|31|XOAAAA|KRLAAA|AAAAxx
+8091|7889|1|3|1|11|91|91|91|3091|8091|182|183|FZAAAA|LRLAAA|HHHHxx
+8347|7890|1|3|7|7|47|347|347|3347|8347|94|95|BJAAAA|MRLAAA|OOOOxx
+7879|7891|1|3|9|19|79|879|1879|2879|7879|158|159|BRAAAA|NRLAAA|VVVVxx
+9360|7892|0|0|0|0|60|360|1360|4360|9360|120|121|AWAAAA|ORLAAA|AAAAxx
+3369|7893|1|1|9|9|69|369|1369|3369|3369|138|139|PZAAAA|PRLAAA|HHHHxx
+8536|7894|0|0|6|16|36|536|536|3536|8536|72|73|IQAAAA|QRLAAA|OOOOxx
+8628|7895|0|0|8|8|28|628|628|3628|8628|56|57|WTAAAA|RRLAAA|VVVVxx
+1580|7896|0|0|0|0|80|580|1580|1580|1580|160|161|UIAAAA|SRLAAA|AAAAxx
+705|7897|1|1|5|5|5|705|705|705|705|10|11|DBAAAA|TRLAAA|HHHHxx
+4650|7898|0|2|0|10|50|650|650|4650|4650|100|101|WWAAAA|URLAAA|OOOOxx
+9165|7899|1|1|5|5|65|165|1165|4165|9165|130|131|NOAAAA|VRLAAA|VVVVxx
+4820|7900|0|0|0|0|20|820|820|4820|4820|40|41|KDAAAA|WRLAAA|AAAAxx
+3538|7901|0|2|8|18|38|538|1538|3538|3538|76|77|CGAAAA|XRLAAA|HHHHxx
+9947|7902|1|3|7|7|47|947|1947|4947|9947|94|95|PSAAAA|YRLAAA|OOOOxx
+4954|7903|0|2|4|14|54|954|954|4954|4954|108|109|OIAAAA|ZRLAAA|VVVVxx
+1104|7904|0|0|4|4|4|104|1104|1104|1104|8|9|MQAAAA|ASLAAA|AAAAxx
+8455|7905|1|3|5|15|55|455|455|3455|8455|110|111|FNAAAA|BSLAAA|HHHHxx
+8307|7906|1|3|7|7|7|307|307|3307|8307|14|15|NHAAAA|CSLAAA|OOOOxx
+9203|7907|1|3|3|3|3|203|1203|4203|9203|6|7|ZPAAAA|DSLAAA|VVVVxx
+7565|7908|1|1|5|5|65|565|1565|2565|7565|130|131|ZEAAAA|ESLAAA|AAAAxx
+7745|7909|1|1|5|5|45|745|1745|2745|7745|90|91|XLAAAA|FSLAAA|HHHHxx
+1787|7910|1|3|7|7|87|787|1787|1787|1787|174|175|TQAAAA|GSLAAA|OOOOxx
+4861|7911|1|1|1|1|61|861|861|4861|4861|122|123|ZEAAAA|HSLAAA|VVVVxx
+5183|7912|1|3|3|3|83|183|1183|183|5183|166|167|JRAAAA|ISLAAA|AAAAxx
+529|7913|1|1|9|9|29|529|529|529|529|58|59|JUAAAA|JSLAAA|HHHHxx
+2470|7914|0|2|0|10|70|470|470|2470|2470|140|141|ARAAAA|KSLAAA|OOOOxx
+1267|7915|1|3|7|7|67|267|1267|1267|1267|134|135|TWAAAA|LSLAAA|VVVVxx
+2059|7916|1|3|9|19|59|59|59|2059|2059|118|119|FBAAAA|MSLAAA|AAAAxx
+1862|7917|0|2|2|2|62|862|1862|1862|1862|124|125|QTAAAA|NSLAAA|HHHHxx
+7382|7918|0|2|2|2|82|382|1382|2382|7382|164|165|YXAAAA|OSLAAA|OOOOxx
+4796|7919|0|0|6|16|96|796|796|4796|4796|192|193|MCAAAA|PSLAAA|VVVVxx
+2331|7920|1|3|1|11|31|331|331|2331|2331|62|63|RLAAAA|QSLAAA|AAAAxx
+8870|7921|0|2|0|10|70|870|870|3870|8870|140|141|EDAAAA|RSLAAA|HHHHxx
+9581|7922|1|1|1|1|81|581|1581|4581|9581|162|163|NEAAAA|SSLAAA|OOOOxx
+9063|7923|1|3|3|3|63|63|1063|4063|9063|126|127|PKAAAA|TSLAAA|VVVVxx
+2192|7924|0|0|2|12|92|192|192|2192|2192|184|185|IGAAAA|USLAAA|AAAAxx
+6466|7925|0|2|6|6|66|466|466|1466|6466|132|133|SOAAAA|VSLAAA|HHHHxx
+7096|7926|0|0|6|16|96|96|1096|2096|7096|192|193|YMAAAA|WSLAAA|OOOOxx
+6257|7927|1|1|7|17|57|257|257|1257|6257|114|115|RGAAAA|XSLAAA|VVVVxx
+7009|7928|1|1|9|9|9|9|1009|2009|7009|18|19|PJAAAA|YSLAAA|AAAAxx
+8136|7929|0|0|6|16|36|136|136|3136|8136|72|73|YAAAAA|ZSLAAA|HHHHxx
+1854|7930|0|2|4|14|54|854|1854|1854|1854|108|109|ITAAAA|ATLAAA|OOOOxx
+3644|7931|0|0|4|4|44|644|1644|3644|3644|88|89|EKAAAA|BTLAAA|VVVVxx
+4437|7932|1|1|7|17|37|437|437|4437|4437|74|75|ROAAAA|CTLAAA|AAAAxx
+7209|7933|1|1|9|9|9|209|1209|2209|7209|18|19|HRAAAA|DTLAAA|HHHHxx
+1516|7934|0|0|6|16|16|516|1516|1516|1516|32|33|IGAAAA|ETLAAA|OOOOxx
+822|7935|0|2|2|2|22|822|822|822|822|44|45|QFAAAA|FTLAAA|VVVVxx
+1778|7936|0|2|8|18|78|778|1778|1778|1778|156|157|KQAAAA|GTLAAA|AAAAxx
+8161|7937|1|1|1|1|61|161|161|3161|8161|122|123|XBAAAA|HTLAAA|HHHHxx
+6030|7938|0|2|0|10|30|30|30|1030|6030|60|61|YXAAAA|ITLAAA|OOOOxx
+3515|7939|1|3|5|15|15|515|1515|3515|3515|30|31|FFAAAA|JTLAAA|VVVVxx
+1702|7940|0|2|2|2|2|702|1702|1702|1702|4|5|MNAAAA|KTLAAA|AAAAxx
+2671|7941|1|3|1|11|71|671|671|2671|2671|142|143|TYAAAA|LTLAAA|HHHHxx
+7623|7942|1|3|3|3|23|623|1623|2623|7623|46|47|FHAAAA|MTLAAA|OOOOxx
+9828|7943|0|0|8|8|28|828|1828|4828|9828|56|57|AOAAAA|NTLAAA|VVVVxx
+1888|7944|0|0|8|8|88|888|1888|1888|1888|176|177|QUAAAA|OTLAAA|AAAAxx
+4520|7945|0|0|0|0|20|520|520|4520|4520|40|41|WRAAAA|PTLAAA|HHHHxx
+3461|7946|1|1|1|1|61|461|1461|3461|3461|122|123|DDAAAA|QTLAAA|OOOOxx
+1488|7947|0|0|8|8|88|488|1488|1488|1488|176|177|GFAAAA|RTLAAA|VVVVxx
+7753|7948|1|1|3|13|53|753|1753|2753|7753|106|107|FMAAAA|STLAAA|AAAAxx
+5525|7949|1|1|5|5|25|525|1525|525|5525|50|51|NEAAAA|TTLAAA|HHHHxx
+5220|7950|0|0|0|0|20|220|1220|220|5220|40|41|USAAAA|UTLAAA|OOOOxx
+305|7951|1|1|5|5|5|305|305|305|305|10|11|TLAAAA|VTLAAA|VVVVxx
+7883|7952|1|3|3|3|83|883|1883|2883|7883|166|167|FRAAAA|WTLAAA|AAAAxx
+1222|7953|0|2|2|2|22|222|1222|1222|1222|44|45|AVAAAA|XTLAAA|HHHHxx
+8552|7954|0|0|2|12|52|552|552|3552|8552|104|105|YQAAAA|YTLAAA|OOOOxx
+6097|7955|1|1|7|17|97|97|97|1097|6097|194|195|NAAAAA|ZTLAAA|VVVVxx
+2298|7956|0|2|8|18|98|298|298|2298|2298|196|197|KKAAAA|AULAAA|AAAAxx
+956|7957|0|0|6|16|56|956|956|956|956|112|113|UKAAAA|BULAAA|HHHHxx
+9351|7958|1|3|1|11|51|351|1351|4351|9351|102|103|RVAAAA|CULAAA|OOOOxx
+6669|7959|1|1|9|9|69|669|669|1669|6669|138|139|NWAAAA|DULAAA|VVVVxx
+9383|7960|1|3|3|3|83|383|1383|4383|9383|166|167|XWAAAA|EULAAA|AAAAxx
+1607|7961|1|3|7|7|7|607|1607|1607|1607|14|15|VJAAAA|FULAAA|HHHHxx
+812|7962|0|0|2|12|12|812|812|812|812|24|25|GFAAAA|GULAAA|OOOOxx
+2109|7963|1|1|9|9|9|109|109|2109|2109|18|19|DDAAAA|HULAAA|VVVVxx
+207|7964|1|3|7|7|7|207|207|207|207|14|15|ZHAAAA|IULAAA|AAAAxx
+7124|7965|0|0|4|4|24|124|1124|2124|7124|48|49|AOAAAA|JULAAA|HHHHxx
+9333|7966|1|1|3|13|33|333|1333|4333|9333|66|67|ZUAAAA|KULAAA|OOOOxx
+3262|7967|0|2|2|2|62|262|1262|3262|3262|124|125|MVAAAA|LULAAA|VVVVxx
+1070|7968|0|2|0|10|70|70|1070|1070|1070|140|141|EPAAAA|MULAAA|AAAAxx
+7579|7969|1|3|9|19|79|579|1579|2579|7579|158|159|NFAAAA|NULAAA|HHHHxx
+9283|7970|1|3|3|3|83|283|1283|4283|9283|166|167|BTAAAA|OULAAA|OOOOxx
+4917|7971|1|1|7|17|17|917|917|4917|4917|34|35|DHAAAA|PULAAA|VVVVxx
+1328|7972|0|0|8|8|28|328|1328|1328|1328|56|57|CZAAAA|QULAAA|AAAAxx
+3042|7973|0|2|2|2|42|42|1042|3042|3042|84|85|ANAAAA|RULAAA|HHHHxx
+8352|7974|0|0|2|12|52|352|352|3352|8352|104|105|GJAAAA|SULAAA|OOOOxx
+2710|7975|0|2|0|10|10|710|710|2710|2710|20|21|GAAAAA|TULAAA|VVVVxx
+3330|7976|0|2|0|10|30|330|1330|3330|3330|60|61|CYAAAA|UULAAA|AAAAxx
+2822|7977|0|2|2|2|22|822|822|2822|2822|44|45|OEAAAA|VULAAA|HHHHxx
+5627|7978|1|3|7|7|27|627|1627|627|5627|54|55|LIAAAA|WULAAA|OOOOxx
+7848|7979|0|0|8|8|48|848|1848|2848|7848|96|97|WPAAAA|XULAAA|VVVVxx
+7384|7980|0|0|4|4|84|384|1384|2384|7384|168|169|AYAAAA|YULAAA|AAAAxx
+727|7981|1|3|7|7|27|727|727|727|727|54|55|ZBAAAA|ZULAAA|HHHHxx
+9926|7982|0|2|6|6|26|926|1926|4926|9926|52|53|URAAAA|AVLAAA|OOOOxx
+2647|7983|1|3|7|7|47|647|647|2647|2647|94|95|VXAAAA|BVLAAA|VVVVxx
+6416|7984|0|0|6|16|16|416|416|1416|6416|32|33|UMAAAA|CVLAAA|AAAAxx
+8751|7985|1|3|1|11|51|751|751|3751|8751|102|103|PYAAAA|DVLAAA|HHHHxx
+6515|7986|1|3|5|15|15|515|515|1515|6515|30|31|PQAAAA|EVLAAA|OOOOxx
+2472|7987|0|0|2|12|72|472|472|2472|2472|144|145|CRAAAA|FVLAAA|VVVVxx
+7205|7988|1|1|5|5|5|205|1205|2205|7205|10|11|DRAAAA|GVLAAA|AAAAxx
+9654|7989|0|2|4|14|54|654|1654|4654|9654|108|109|IHAAAA|HVLAAA|HHHHxx
+5646|7990|0|2|6|6|46|646|1646|646|5646|92|93|EJAAAA|IVLAAA|OOOOxx
+4217|7991|1|1|7|17|17|217|217|4217|4217|34|35|FGAAAA|JVLAAA|VVVVxx
+4484|7992|0|0|4|4|84|484|484|4484|4484|168|169|MQAAAA|KVLAAA|AAAAxx
+6654|7993|0|2|4|14|54|654|654|1654|6654|108|109|YVAAAA|LVLAAA|HHHHxx
+4876|7994|0|0|6|16|76|876|876|4876|4876|152|153|OFAAAA|MVLAAA|OOOOxx
+9690|7995|0|2|0|10|90|690|1690|4690|9690|180|181|SIAAAA|NVLAAA|VVVVxx
+2453|7996|1|1|3|13|53|453|453|2453|2453|106|107|JQAAAA|OVLAAA|AAAAxx
+829|7997|1|1|9|9|29|829|829|829|829|58|59|XFAAAA|PVLAAA|HHHHxx
+2547|7998|1|3|7|7|47|547|547|2547|2547|94|95|ZTAAAA|QVLAAA|OOOOxx
+9726|7999|0|2|6|6|26|726|1726|4726|9726|52|53|CKAAAA|RVLAAA|VVVVxx
+9267|8000|1|3|7|7|67|267|1267|4267|9267|134|135|LSAAAA|SVLAAA|AAAAxx
+7448|8001|0|0|8|8|48|448|1448|2448|7448|96|97|MAAAAA|TVLAAA|HHHHxx
+610|8002|0|2|0|10|10|610|610|610|610|20|21|MXAAAA|UVLAAA|OOOOxx
+2791|8003|1|3|1|11|91|791|791|2791|2791|182|183|JDAAAA|VVLAAA|VVVVxx
+3651|8004|1|3|1|11|51|651|1651|3651|3651|102|103|LKAAAA|WVLAAA|AAAAxx
+5206|8005|0|2|6|6|6|206|1206|206|5206|12|13|GSAAAA|XVLAAA|HHHHxx
+8774|8006|0|2|4|14|74|774|774|3774|8774|148|149|MZAAAA|YVLAAA|OOOOxx
+4753|8007|1|1|3|13|53|753|753|4753|4753|106|107|VAAAAA|ZVLAAA|VVVVxx
+4755|8008|1|3|5|15|55|755|755|4755|4755|110|111|XAAAAA|AWLAAA|AAAAxx
+686|8009|0|2|6|6|86|686|686|686|686|172|173|KAAAAA|BWLAAA|HHHHxx
+8281|8010|1|1|1|1|81|281|281|3281|8281|162|163|NGAAAA|CWLAAA|OOOOxx
+2058|8011|0|2|8|18|58|58|58|2058|2058|116|117|EBAAAA|DWLAAA|VVVVxx
+8900|8012|0|0|0|0|0|900|900|3900|8900|0|1|IEAAAA|EWLAAA|AAAAxx
+8588|8013|0|0|8|8|88|588|588|3588|8588|176|177|ISAAAA|FWLAAA|HHHHxx
+2904|8014|0|0|4|4|4|904|904|2904|2904|8|9|SHAAAA|GWLAAA|OOOOxx
+8917|8015|1|1|7|17|17|917|917|3917|8917|34|35|ZEAAAA|HWLAAA|VVVVxx
+9026|8016|0|2|6|6|26|26|1026|4026|9026|52|53|EJAAAA|IWLAAA|AAAAxx
+2416|8017|0|0|6|16|16|416|416|2416|2416|32|33|YOAAAA|JWLAAA|HHHHxx
+1053|8018|1|1|3|13|53|53|1053|1053|1053|106|107|NOAAAA|KWLAAA|OOOOxx
+7141|8019|1|1|1|1|41|141|1141|2141|7141|82|83|ROAAAA|LWLAAA|VVVVxx
+9771|8020|1|3|1|11|71|771|1771|4771|9771|142|143|VLAAAA|MWLAAA|AAAAxx
+2774|8021|0|2|4|14|74|774|774|2774|2774|148|149|SCAAAA|NWLAAA|HHHHxx
+3213|8022|1|1|3|13|13|213|1213|3213|3213|26|27|PTAAAA|OWLAAA|OOOOxx
+5694|8023|0|2|4|14|94|694|1694|694|5694|188|189|ALAAAA|PWLAAA|VVVVxx
+6631|8024|1|3|1|11|31|631|631|1631|6631|62|63|BVAAAA|QWLAAA|AAAAxx
+6638|8025|0|2|8|18|38|638|638|1638|6638|76|77|IVAAAA|RWLAAA|HHHHxx
+7407|8026|1|3|7|7|7|407|1407|2407|7407|14|15|XYAAAA|SWLAAA|OOOOxx
+8972|8027|0|0|2|12|72|972|972|3972|8972|144|145|CHAAAA|TWLAAA|VVVVxx
+2202|8028|0|2|2|2|2|202|202|2202|2202|4|5|SGAAAA|UWLAAA|AAAAxx
+6135|8029|1|3|5|15|35|135|135|1135|6135|70|71|ZBAAAA|VWLAAA|HHHHxx
+5043|8030|1|3|3|3|43|43|1043|43|5043|86|87|ZLAAAA|WWLAAA|OOOOxx
+5163|8031|1|3|3|3|63|163|1163|163|5163|126|127|PQAAAA|XWLAAA|VVVVxx
+1191|8032|1|3|1|11|91|191|1191|1191|1191|182|183|VTAAAA|YWLAAA|AAAAxx
+6576|8033|0|0|6|16|76|576|576|1576|6576|152|153|YSAAAA|ZWLAAA|HHHHxx
+3455|8034|1|3|5|15|55|455|1455|3455|3455|110|111|XCAAAA|AXLAAA|OOOOxx
+3688|8035|0|0|8|8|88|688|1688|3688|3688|176|177|WLAAAA|BXLAAA|VVVVxx
+4982|8036|0|2|2|2|82|982|982|4982|4982|164|165|QJAAAA|CXLAAA|AAAAxx
+4180|8037|0|0|0|0|80|180|180|4180|4180|160|161|UEAAAA|DXLAAA|HHHHxx
+4708|8038|0|0|8|8|8|708|708|4708|4708|16|17|CZAAAA|EXLAAA|OOOOxx
+1241|8039|1|1|1|1|41|241|1241|1241|1241|82|83|TVAAAA|FXLAAA|VVVVxx
+4921|8040|1|1|1|1|21|921|921|4921|4921|42|43|HHAAAA|GXLAAA|AAAAxx
+3197|8041|1|1|7|17|97|197|1197|3197|3197|194|195|ZSAAAA|HXLAAA|HHHHxx
+8225|8042|1|1|5|5|25|225|225|3225|8225|50|51|JEAAAA|IXLAAA|OOOOxx
+5913|8043|1|1|3|13|13|913|1913|913|5913|26|27|LTAAAA|JXLAAA|VVVVxx
+6387|8044|1|3|7|7|87|387|387|1387|6387|174|175|RLAAAA|KXLAAA|AAAAxx
+2706|8045|0|2|6|6|6|706|706|2706|2706|12|13|CAAAAA|LXLAAA|HHHHxx
+1461|8046|1|1|1|1|61|461|1461|1461|1461|122|123|FEAAAA|MXLAAA|OOOOxx
+7646|8047|0|2|6|6|46|646|1646|2646|7646|92|93|CIAAAA|NXLAAA|VVVVxx
+8066|8048|0|2|6|6|66|66|66|3066|8066|132|133|GYAAAA|OXLAAA|AAAAxx
+4171|8049|1|3|1|11|71|171|171|4171|4171|142|143|LEAAAA|PXLAAA|HHHHxx
+8008|8050|0|0|8|8|8|8|8|3008|8008|16|17|AWAAAA|QXLAAA|OOOOxx
+2088|8051|0|0|8|8|88|88|88|2088|2088|176|177|ICAAAA|RXLAAA|VVVVxx
+7907|8052|1|3|7|7|7|907|1907|2907|7907|14|15|DSAAAA|SXLAAA|AAAAxx
+2429|8053|1|1|9|9|29|429|429|2429|2429|58|59|LPAAAA|TXLAAA|HHHHxx
+9629|8054|1|1|9|9|29|629|1629|4629|9629|58|59|JGAAAA|UXLAAA|OOOOxx
+1470|8055|0|2|0|10|70|470|1470|1470|1470|140|141|OEAAAA|VXLAAA|VVVVxx
+4346|8056|0|2|6|6|46|346|346|4346|4346|92|93|ELAAAA|WXLAAA|AAAAxx
+7219|8057|1|3|9|19|19|219|1219|2219|7219|38|39|RRAAAA|XXLAAA|HHHHxx
+1185|8058|1|1|5|5|85|185|1185|1185|1185|170|171|PTAAAA|YXLAAA|OOOOxx
+8776|8059|0|0|6|16|76|776|776|3776|8776|152|153|OZAAAA|ZXLAAA|VVVVxx
+684|8060|0|0|4|4|84|684|684|684|684|168|169|IAAAAA|AYLAAA|AAAAxx
+2343|8061|1|3|3|3|43|343|343|2343|2343|86|87|DMAAAA|BYLAAA|HHHHxx
+4470|8062|0|2|0|10|70|470|470|4470|4470|140|141|YPAAAA|CYLAAA|OOOOxx
+5116|8063|0|0|6|16|16|116|1116|116|5116|32|33|UOAAAA|DYLAAA|VVVVxx
+1746|8064|0|2|6|6|46|746|1746|1746|1746|92|93|EPAAAA|EYLAAA|AAAAxx
+3216|8065|0|0|6|16|16|216|1216|3216|3216|32|33|STAAAA|FYLAAA|HHHHxx
+4594|8066|0|2|4|14|94|594|594|4594|4594|188|189|SUAAAA|GYLAAA|OOOOxx
+3013|8067|1|1|3|13|13|13|1013|3013|3013|26|27|XLAAAA|HYLAAA|VVVVxx
+2307|8068|1|3|7|7|7|307|307|2307|2307|14|15|TKAAAA|IYLAAA|AAAAxx
+7663|8069|1|3|3|3|63|663|1663|2663|7663|126|127|TIAAAA|JYLAAA|HHHHxx
+8504|8070|0|0|4|4|4|504|504|3504|8504|8|9|CPAAAA|KYLAAA|OOOOxx
+3683|8071|1|3|3|3|83|683|1683|3683|3683|166|167|RLAAAA|LYLAAA|VVVVxx
+144|8072|0|0|4|4|44|144|144|144|144|88|89|OFAAAA|MYLAAA|AAAAxx
+203|8073|1|3|3|3|3|203|203|203|203|6|7|VHAAAA|NYLAAA|HHHHxx
+5255|8074|1|3|5|15|55|255|1255|255|5255|110|111|DUAAAA|OYLAAA|OOOOxx
+4150|8075|0|2|0|10|50|150|150|4150|4150|100|101|QDAAAA|PYLAAA|VVVVxx
+5701|8076|1|1|1|1|1|701|1701|701|5701|2|3|HLAAAA|QYLAAA|AAAAxx
+7400|8077|0|0|0|0|0|400|1400|2400|7400|0|1|QYAAAA|RYLAAA|HHHHxx
+8203|8078|1|3|3|3|3|203|203|3203|8203|6|7|NDAAAA|SYLAAA|OOOOxx
+637|8079|1|1|7|17|37|637|637|637|637|74|75|NYAAAA|TYLAAA|VVVVxx
+2898|8080|0|2|8|18|98|898|898|2898|2898|196|197|MHAAAA|UYLAAA|AAAAxx
+1110|8081|0|2|0|10|10|110|1110|1110|1110|20|21|SQAAAA|VYLAAA|HHHHxx
+6255|8082|1|3|5|15|55|255|255|1255|6255|110|111|PGAAAA|WYLAAA|OOOOxx
+1071|8083|1|3|1|11|71|71|1071|1071|1071|142|143|FPAAAA|XYLAAA|VVVVxx
+541|8084|1|1|1|1|41|541|541|541|541|82|83|VUAAAA|YYLAAA|AAAAxx
+8077|8085|1|1|7|17|77|77|77|3077|8077|154|155|RYAAAA|ZYLAAA|HHHHxx
+6809|8086|1|1|9|9|9|809|809|1809|6809|18|19|XBAAAA|AZLAAA|OOOOxx
+4749|8087|1|1|9|9|49|749|749|4749|4749|98|99|RAAAAA|BZLAAA|VVVVxx
+2886|8088|0|2|6|6|86|886|886|2886|2886|172|173|AHAAAA|CZLAAA|AAAAxx
+5510|8089|0|2|0|10|10|510|1510|510|5510|20|21|YDAAAA|DZLAAA|HHHHxx
+713|8090|1|1|3|13|13|713|713|713|713|26|27|LBAAAA|EZLAAA|OOOOxx
+8388|8091|0|0|8|8|88|388|388|3388|8388|176|177|QKAAAA|FZLAAA|VVVVxx
+9524|8092|0|0|4|4|24|524|1524|4524|9524|48|49|ICAAAA|GZLAAA|AAAAxx
+9949|8093|1|1|9|9|49|949|1949|4949|9949|98|99|RSAAAA|HZLAAA|HHHHxx
+885|8094|1|1|5|5|85|885|885|885|885|170|171|BIAAAA|IZLAAA|OOOOxx
+8699|8095|1|3|9|19|99|699|699|3699|8699|198|199|PWAAAA|JZLAAA|VVVVxx
+2232|8096|0|0|2|12|32|232|232|2232|2232|64|65|WHAAAA|KZLAAA|AAAAxx
+5142|8097|0|2|2|2|42|142|1142|142|5142|84|85|UPAAAA|LZLAAA|HHHHxx
+8891|8098|1|3|1|11|91|891|891|3891|8891|182|183|ZDAAAA|MZLAAA|OOOOxx
+1881|8099|1|1|1|1|81|881|1881|1881|1881|162|163|JUAAAA|NZLAAA|VVVVxx
+3751|8100|1|3|1|11|51|751|1751|3751|3751|102|103|HOAAAA|OZLAAA|AAAAxx
+1896|8101|0|0|6|16|96|896|1896|1896|1896|192|193|YUAAAA|PZLAAA|HHHHxx
+8258|8102|0|2|8|18|58|258|258|3258|8258|116|117|QFAAAA|QZLAAA|OOOOxx
+3820|8103|0|0|0|0|20|820|1820|3820|3820|40|41|YQAAAA|RZLAAA|VVVVxx
+6617|8104|1|1|7|17|17|617|617|1617|6617|34|35|NUAAAA|SZLAAA|AAAAxx
+5100|8105|0|0|0|0|0|100|1100|100|5100|0|1|EOAAAA|TZLAAA|HHHHxx
+4277|8106|1|1|7|17|77|277|277|4277|4277|154|155|NIAAAA|UZLAAA|OOOOxx
+2498|8107|0|2|8|18|98|498|498|2498|2498|196|197|CSAAAA|VZLAAA|VVVVxx
+4343|8108|1|3|3|3|43|343|343|4343|4343|86|87|BLAAAA|WZLAAA|AAAAxx
+8319|8109|1|3|9|19|19|319|319|3319|8319|38|39|ZHAAAA|XZLAAA|HHHHxx
+4803|8110|1|3|3|3|3|803|803|4803|4803|6|7|TCAAAA|YZLAAA|OOOOxx
+3100|8111|0|0|0|0|0|100|1100|3100|3100|0|1|GPAAAA|ZZLAAA|VVVVxx
+428|8112|0|0|8|8|28|428|428|428|428|56|57|MQAAAA|AAMAAA|AAAAxx
+2811|8113|1|3|1|11|11|811|811|2811|2811|22|23|DEAAAA|BAMAAA|HHHHxx
+2989|8114|1|1|9|9|89|989|989|2989|2989|178|179|ZKAAAA|CAMAAA|OOOOxx
+1100|8115|0|0|0|0|0|100|1100|1100|1100|0|1|IQAAAA|DAMAAA|VVVVxx
+6586|8116|0|2|6|6|86|586|586|1586|6586|172|173|ITAAAA|EAMAAA|AAAAxx
+3124|8117|0|0|4|4|24|124|1124|3124|3124|48|49|EQAAAA|FAMAAA|HHHHxx
+1635|8118|1|3|5|15|35|635|1635|1635|1635|70|71|XKAAAA|GAMAAA|OOOOxx
+3888|8119|0|0|8|8|88|888|1888|3888|3888|176|177|OTAAAA|HAMAAA|VVVVxx
+8369|8120|1|1|9|9|69|369|369|3369|8369|138|139|XJAAAA|IAMAAA|AAAAxx
+3148|8121|0|0|8|8|48|148|1148|3148|3148|96|97|CRAAAA|JAMAAA|HHHHxx
+2842|8122|0|2|2|2|42|842|842|2842|2842|84|85|IFAAAA|KAMAAA|OOOOxx
+4965|8123|1|1|5|5|65|965|965|4965|4965|130|131|ZIAAAA|LAMAAA|VVVVxx
+3742|8124|0|2|2|2|42|742|1742|3742|3742|84|85|YNAAAA|MAMAAA|AAAAxx
+5196|8125|0|0|6|16|96|196|1196|196|5196|192|193|WRAAAA|NAMAAA|HHHHxx
+9105|8126|1|1|5|5|5|105|1105|4105|9105|10|11|FMAAAA|OAMAAA|OOOOxx
+6806|8127|0|2|6|6|6|806|806|1806|6806|12|13|UBAAAA|PAMAAA|VVVVxx
+5849|8128|1|1|9|9|49|849|1849|849|5849|98|99|ZQAAAA|QAMAAA|AAAAxx
+6504|8129|0|0|4|4|4|504|504|1504|6504|8|9|EQAAAA|RAMAAA|HHHHxx
+9841|8130|1|1|1|1|41|841|1841|4841|9841|82|83|NOAAAA|SAMAAA|OOOOxx
+457|8131|1|1|7|17|57|457|457|457|457|114|115|PRAAAA|TAMAAA|VVVVxx
+8856|8132|0|0|6|16|56|856|856|3856|8856|112|113|QCAAAA|UAMAAA|AAAAxx
+8043|8133|1|3|3|3|43|43|43|3043|8043|86|87|JXAAAA|VAMAAA|HHHHxx
+5933|8134|1|1|3|13|33|933|1933|933|5933|66|67|FUAAAA|WAMAAA|OOOOxx
+5725|8135|1|1|5|5|25|725|1725|725|5725|50|51|FMAAAA|XAMAAA|VVVVxx
+8607|8136|1|3|7|7|7|607|607|3607|8607|14|15|BTAAAA|YAMAAA|AAAAxx
+9280|8137|0|0|0|0|80|280|1280|4280|9280|160|161|YSAAAA|ZAMAAA|HHHHxx
+6017|8138|1|1|7|17|17|17|17|1017|6017|34|35|LXAAAA|ABMAAA|OOOOxx
+4946|8139|0|2|6|6|46|946|946|4946|4946|92|93|GIAAAA|BBMAAA|VVVVxx
+7373|8140|1|1|3|13|73|373|1373|2373|7373|146|147|PXAAAA|CBMAAA|AAAAxx
+8096|8141|0|0|6|16|96|96|96|3096|8096|192|193|KZAAAA|DBMAAA|HHHHxx
+3178|8142|0|2|8|18|78|178|1178|3178|3178|156|157|GSAAAA|EBMAAA|OOOOxx
+1849|8143|1|1|9|9|49|849|1849|1849|1849|98|99|DTAAAA|FBMAAA|VVVVxx
+8813|8144|1|1|3|13|13|813|813|3813|8813|26|27|ZAAAAA|GBMAAA|AAAAxx
+460|8145|0|0|0|0|60|460|460|460|460|120|121|SRAAAA|HBMAAA|HHHHxx
+7756|8146|0|0|6|16|56|756|1756|2756|7756|112|113|IMAAAA|IBMAAA|OOOOxx
+4425|8147|1|1|5|5|25|425|425|4425|4425|50|51|FOAAAA|JBMAAA|VVVVxx
+1602|8148|0|2|2|2|2|602|1602|1602|1602|4|5|QJAAAA|KBMAAA|AAAAxx
+5981|8149|1|1|1|1|81|981|1981|981|5981|162|163|BWAAAA|LBMAAA|HHHHxx
+8139|8150|1|3|9|19|39|139|139|3139|8139|78|79|BBAAAA|MBMAAA|OOOOxx
+754|8151|0|2|4|14|54|754|754|754|754|108|109|ADAAAA|NBMAAA|VVVVxx
+26|8152|0|2|6|6|26|26|26|26|26|52|53|ABAAAA|OBMAAA|AAAAxx
+106|8153|0|2|6|6|6|106|106|106|106|12|13|CEAAAA|PBMAAA|HHHHxx
+7465|8154|1|1|5|5|65|465|1465|2465|7465|130|131|DBAAAA|QBMAAA|OOOOxx
+1048|8155|0|0|8|8|48|48|1048|1048|1048|96|97|IOAAAA|RBMAAA|VVVVxx
+2303|8156|1|3|3|3|3|303|303|2303|2303|6|7|PKAAAA|SBMAAA|AAAAxx
+5794|8157|0|2|4|14|94|794|1794|794|5794|188|189|WOAAAA|TBMAAA|HHHHxx
+3321|8158|1|1|1|1|21|321|1321|3321|3321|42|43|TXAAAA|UBMAAA|OOOOxx
+6122|8159|0|2|2|2|22|122|122|1122|6122|44|45|MBAAAA|VBMAAA|VVVVxx
+6474|8160|0|2|4|14|74|474|474|1474|6474|148|149|APAAAA|WBMAAA|AAAAxx
+827|8161|1|3|7|7|27|827|827|827|827|54|55|VFAAAA|XBMAAA|HHHHxx
+6616|8162|0|0|6|16|16|616|616|1616|6616|32|33|MUAAAA|YBMAAA|OOOOxx
+2131|8163|1|3|1|11|31|131|131|2131|2131|62|63|ZDAAAA|ZBMAAA|VVVVxx
+5483|8164|1|3|3|3|83|483|1483|483|5483|166|167|XCAAAA|ACMAAA|AAAAxx
+606|8165|0|2|6|6|6|606|606|606|606|12|13|IXAAAA|BCMAAA|HHHHxx
+922|8166|0|2|2|2|22|922|922|922|922|44|45|MJAAAA|CCMAAA|OOOOxx
+8475|8167|1|3|5|15|75|475|475|3475|8475|150|151|ZNAAAA|DCMAAA|VVVVxx
+7645|8168|1|1|5|5|45|645|1645|2645|7645|90|91|BIAAAA|ECMAAA|AAAAxx
+5097|8169|1|1|7|17|97|97|1097|97|5097|194|195|BOAAAA|FCMAAA|HHHHxx
+5377|8170|1|1|7|17|77|377|1377|377|5377|154|155|VYAAAA|GCMAAA|OOOOxx
+6116|8171|0|0|6|16|16|116|116|1116|6116|32|33|GBAAAA|HCMAAA|VVVVxx
+8674|8172|0|2|4|14|74|674|674|3674|8674|148|149|QVAAAA|ICMAAA|AAAAxx
+8063|8173|1|3|3|3|63|63|63|3063|8063|126|127|DYAAAA|JCMAAA|HHHHxx
+5271|8174|1|3|1|11|71|271|1271|271|5271|142|143|TUAAAA|KCMAAA|OOOOxx
+1619|8175|1|3|9|19|19|619|1619|1619|1619|38|39|HKAAAA|LCMAAA|VVVVxx
+6419|8176|1|3|9|19|19|419|419|1419|6419|38|39|XMAAAA|MCMAAA|AAAAxx
+7651|8177|1|3|1|11|51|651|1651|2651|7651|102|103|HIAAAA|NCMAAA|HHHHxx
+2897|8178|1|1|7|17|97|897|897|2897|2897|194|195|LHAAAA|OCMAAA|OOOOxx
+8148|8179|0|0|8|8|48|148|148|3148|8148|96|97|KBAAAA|PCMAAA|VVVVxx
+7461|8180|1|1|1|1|61|461|1461|2461|7461|122|123|ZAAAAA|QCMAAA|AAAAxx
+9186|8181|0|2|6|6|86|186|1186|4186|9186|172|173|IPAAAA|RCMAAA|HHHHxx
+7127|8182|1|3|7|7|27|127|1127|2127|7127|54|55|DOAAAA|SCMAAA|OOOOxx
+8233|8183|1|1|3|13|33|233|233|3233|8233|66|67|REAAAA|TCMAAA|VVVVxx
+9651|8184|1|3|1|11|51|651|1651|4651|9651|102|103|FHAAAA|UCMAAA|AAAAxx
+6746|8185|0|2|6|6|46|746|746|1746|6746|92|93|MZAAAA|VCMAAA|HHHHxx
+7835|8186|1|3|5|15|35|835|1835|2835|7835|70|71|JPAAAA|WCMAAA|OOOOxx
+8815|8187|1|3|5|15|15|815|815|3815|8815|30|31|BBAAAA|XCMAAA|VVVVxx
+6398|8188|0|2|8|18|98|398|398|1398|6398|196|197|CMAAAA|YCMAAA|AAAAxx
+5344|8189|0|0|4|4|44|344|1344|344|5344|88|89|OXAAAA|ZCMAAA|HHHHxx
+8209|8190|1|1|9|9|9|209|209|3209|8209|18|19|TDAAAA|ADMAAA|OOOOxx
+8444|8191|0|0|4|4|44|444|444|3444|8444|88|89|UMAAAA|BDMAAA|VVVVxx
+5669|8192|1|1|9|9|69|669|1669|669|5669|138|139|BKAAAA|CDMAAA|AAAAxx
+2455|8193|1|3|5|15|55|455|455|2455|2455|110|111|LQAAAA|DDMAAA|HHHHxx
+6767|8194|1|3|7|7|67|767|767|1767|6767|134|135|HAAAAA|EDMAAA|OOOOxx
+135|8195|1|3|5|15|35|135|135|135|135|70|71|FFAAAA|FDMAAA|VVVVxx
+3503|8196|1|3|3|3|3|503|1503|3503|3503|6|7|TEAAAA|GDMAAA|AAAAxx
+6102|8197|0|2|2|2|2|102|102|1102|6102|4|5|SAAAAA|HDMAAA|HHHHxx
+7136|8198|0|0|6|16|36|136|1136|2136|7136|72|73|MOAAAA|IDMAAA|OOOOxx
+4933|8199|1|1|3|13|33|933|933|4933|4933|66|67|THAAAA|JDMAAA|VVVVxx
+8804|8200|0|0|4|4|4|804|804|3804|8804|8|9|QAAAAA|KDMAAA|AAAAxx
+3760|8201|0|0|0|0|60|760|1760|3760|3760|120|121|QOAAAA|LDMAAA|HHHHxx
+8603|8202|1|3|3|3|3|603|603|3603|8603|6|7|XSAAAA|MDMAAA|OOOOxx
+7411|8203|1|3|1|11|11|411|1411|2411|7411|22|23|BZAAAA|NDMAAA|VVVVxx
+834|8204|0|2|4|14|34|834|834|834|834|68|69|CGAAAA|ODMAAA|AAAAxx
+7385|8205|1|1|5|5|85|385|1385|2385|7385|170|171|BYAAAA|PDMAAA|HHHHxx
+3696|8206|0|0|6|16|96|696|1696|3696|3696|192|193|EMAAAA|QDMAAA|OOOOxx
+8720|8207|0|0|0|0|20|720|720|3720|8720|40|41|KXAAAA|RDMAAA|VVVVxx
+4539|8208|1|3|9|19|39|539|539|4539|4539|78|79|PSAAAA|SDMAAA|AAAAxx
+9837|8209|1|1|7|17|37|837|1837|4837|9837|74|75|JOAAAA|TDMAAA|HHHHxx
+8595|8210|1|3|5|15|95|595|595|3595|8595|190|191|PSAAAA|UDMAAA|OOOOxx
+3673|8211|1|1|3|13|73|673|1673|3673|3673|146|147|HLAAAA|VDMAAA|VVVVxx
+475|8212|1|3|5|15|75|475|475|475|475|150|151|HSAAAA|WDMAAA|AAAAxx
+2256|8213|0|0|6|16|56|256|256|2256|2256|112|113|UIAAAA|XDMAAA|HHHHxx
+6349|8214|1|1|9|9|49|349|349|1349|6349|98|99|FKAAAA|YDMAAA|OOOOxx
+9968|8215|0|0|8|8|68|968|1968|4968|9968|136|137|KTAAAA|ZDMAAA|VVVVxx
+7261|8216|1|1|1|1|61|261|1261|2261|7261|122|123|HTAAAA|AEMAAA|AAAAxx
+5799|8217|1|3|9|19|99|799|1799|799|5799|198|199|BPAAAA|BEMAAA|HHHHxx
+8159|8218|1|3|9|19|59|159|159|3159|8159|118|119|VBAAAA|CEMAAA|OOOOxx
+92|8219|0|0|2|12|92|92|92|92|92|184|185|ODAAAA|DEMAAA|VVVVxx
+5927|8220|1|3|7|7|27|927|1927|927|5927|54|55|ZTAAAA|EEMAAA|AAAAxx
+7925|8221|1|1|5|5|25|925|1925|2925|7925|50|51|VSAAAA|FEMAAA|HHHHxx
+5836|8222|0|0|6|16|36|836|1836|836|5836|72|73|MQAAAA|GEMAAA|OOOOxx
+7935|8223|1|3|5|15|35|935|1935|2935|7935|70|71|FTAAAA|HEMAAA|VVVVxx
+5505|8224|1|1|5|5|5|505|1505|505|5505|10|11|TDAAAA|IEMAAA|AAAAxx
+5882|8225|0|2|2|2|82|882|1882|882|5882|164|165|GSAAAA|JEMAAA|HHHHxx
+4411|8226|1|3|1|11|11|411|411|4411|4411|22|23|RNAAAA|KEMAAA|OOOOxx
+64|8227|0|0|4|4|64|64|64|64|64|128|129|MCAAAA|LEMAAA|VVVVxx
+2851|8228|1|3|1|11|51|851|851|2851|2851|102|103|RFAAAA|MEMAAA|AAAAxx
+1665|8229|1|1|5|5|65|665|1665|1665|1665|130|131|BMAAAA|NEMAAA|HHHHxx
+2895|8230|1|3|5|15|95|895|895|2895|2895|190|191|JHAAAA|OEMAAA|OOOOxx
+2210|8231|0|2|0|10|10|210|210|2210|2210|20|21|AHAAAA|PEMAAA|VVVVxx
+9873|8232|1|1|3|13|73|873|1873|4873|9873|146|147|TPAAAA|QEMAAA|AAAAxx
+5402|8233|0|2|2|2|2|402|1402|402|5402|4|5|UZAAAA|REMAAA|HHHHxx
+285|8234|1|1|5|5|85|285|285|285|285|170|171|ZKAAAA|SEMAAA|OOOOxx
+8545|8235|1|1|5|5|45|545|545|3545|8545|90|91|RQAAAA|TEMAAA|VVVVxx
+5328|8236|0|0|8|8|28|328|1328|328|5328|56|57|YWAAAA|UEMAAA|AAAAxx
+733|8237|1|1|3|13|33|733|733|733|733|66|67|FCAAAA|VEMAAA|HHHHxx
+7726|8238|0|2|6|6|26|726|1726|2726|7726|52|53|ELAAAA|WEMAAA|OOOOxx
+5418|8239|0|2|8|18|18|418|1418|418|5418|36|37|KAAAAA|XEMAAA|VVVVxx
+7761|8240|1|1|1|1|61|761|1761|2761|7761|122|123|NMAAAA|YEMAAA|AAAAxx
+9263|8241|1|3|3|3|63|263|1263|4263|9263|126|127|HSAAAA|ZEMAAA|HHHHxx
+5579|8242|1|3|9|19|79|579|1579|579|5579|158|159|PGAAAA|AFMAAA|OOOOxx
+5434|8243|0|2|4|14|34|434|1434|434|5434|68|69|ABAAAA|BFMAAA|VVVVxx
+5230|8244|0|2|0|10|30|230|1230|230|5230|60|61|ETAAAA|CFMAAA|AAAAxx
+9981|8245|1|1|1|1|81|981|1981|4981|9981|162|163|XTAAAA|DFMAAA|HHHHxx
+5830|8246|0|2|0|10|30|830|1830|830|5830|60|61|GQAAAA|EFMAAA|OOOOxx
+128|8247|0|0|8|8|28|128|128|128|128|56|57|YEAAAA|FFMAAA|VVVVxx
+2734|8248|0|2|4|14|34|734|734|2734|2734|68|69|EBAAAA|GFMAAA|AAAAxx
+4537|8249|1|1|7|17|37|537|537|4537|4537|74|75|NSAAAA|HFMAAA|HHHHxx
+3899|8250|1|3|9|19|99|899|1899|3899|3899|198|199|ZTAAAA|IFMAAA|OOOOxx
+1000|8251|0|0|0|0|0|0|1000|1000|1000|0|1|MMAAAA|JFMAAA|VVVVxx
+9896|8252|0|0|6|16|96|896|1896|4896|9896|192|193|QQAAAA|KFMAAA|AAAAxx
+3640|8253|0|0|0|0|40|640|1640|3640|3640|80|81|AKAAAA|LFMAAA|HHHHxx
+2568|8254|0|0|8|8|68|568|568|2568|2568|136|137|UUAAAA|MFMAAA|OOOOxx
+2026|8255|0|2|6|6|26|26|26|2026|2026|52|53|YZAAAA|NFMAAA|VVVVxx
+3955|8256|1|3|5|15|55|955|1955|3955|3955|110|111|DWAAAA|OFMAAA|AAAAxx
+7152|8257|0|0|2|12|52|152|1152|2152|7152|104|105|CPAAAA|PFMAAA|HHHHxx
+2402|8258|0|2|2|2|2|402|402|2402|2402|4|5|KOAAAA|QFMAAA|OOOOxx
+9522|8259|0|2|2|2|22|522|1522|4522|9522|44|45|GCAAAA|RFMAAA|VVVVxx
+4011|8260|1|3|1|11|11|11|11|4011|4011|22|23|HYAAAA|SFMAAA|AAAAxx
+3297|8261|1|1|7|17|97|297|1297|3297|3297|194|195|VWAAAA|TFMAAA|HHHHxx
+4915|8262|1|3|5|15|15|915|915|4915|4915|30|31|BHAAAA|UFMAAA|OOOOxx
+5397|8263|1|1|7|17|97|397|1397|397|5397|194|195|PZAAAA|VFMAAA|VVVVxx
+5454|8264|0|2|4|14|54|454|1454|454|5454|108|109|UBAAAA|WFMAAA|AAAAxx
+4568|8265|0|0|8|8|68|568|568|4568|4568|136|137|STAAAA|XFMAAA|HHHHxx
+5875|8266|1|3|5|15|75|875|1875|875|5875|150|151|ZRAAAA|YFMAAA|OOOOxx
+3642|8267|0|2|2|2|42|642|1642|3642|3642|84|85|CKAAAA|ZFMAAA|VVVVxx
+8506|8268|0|2|6|6|6|506|506|3506|8506|12|13|EPAAAA|AGMAAA|AAAAxx
+9621|8269|1|1|1|1|21|621|1621|4621|9621|42|43|BGAAAA|BGMAAA|HHHHxx
+7739|8270|1|3|9|19|39|739|1739|2739|7739|78|79|RLAAAA|CGMAAA|OOOOxx
+3987|8271|1|3|7|7|87|987|1987|3987|3987|174|175|JXAAAA|DGMAAA|VVVVxx
+2090|8272|0|2|0|10|90|90|90|2090|2090|180|181|KCAAAA|EGMAAA|AAAAxx
+3838|8273|0|2|8|18|38|838|1838|3838|3838|76|77|QRAAAA|FGMAAA|HHHHxx
+17|8274|1|1|7|17|17|17|17|17|17|34|35|RAAAAA|GGMAAA|OOOOxx
+3406|8275|0|2|6|6|6|406|1406|3406|3406|12|13|ABAAAA|HGMAAA|VVVVxx
+8312|8276|0|0|2|12|12|312|312|3312|8312|24|25|SHAAAA|IGMAAA|AAAAxx
+4034|8277|0|2|4|14|34|34|34|4034|4034|68|69|EZAAAA|JGMAAA|HHHHxx
+1535|8278|1|3|5|15|35|535|1535|1535|1535|70|71|BHAAAA|KGMAAA|OOOOxx
+7198|8279|0|2|8|18|98|198|1198|2198|7198|196|197|WQAAAA|LGMAAA|VVVVxx
+8885|8280|1|1|5|5|85|885|885|3885|8885|170|171|TDAAAA|MGMAAA|AAAAxx
+4081|8281|1|1|1|1|81|81|81|4081|4081|162|163|ZAAAAA|NGMAAA|HHHHxx
+980|8282|0|0|0|0|80|980|980|980|980|160|161|SLAAAA|OGMAAA|OOOOxx
+551|8283|1|3|1|11|51|551|551|551|551|102|103|FVAAAA|PGMAAA|VVVVxx
+7746|8284|0|2|6|6|46|746|1746|2746|7746|92|93|YLAAAA|QGMAAA|AAAAxx
+4756|8285|0|0|6|16|56|756|756|4756|4756|112|113|YAAAAA|RGMAAA|HHHHxx
+3655|8286|1|3|5|15|55|655|1655|3655|3655|110|111|PKAAAA|SGMAAA|OOOOxx
+7075|8287|1|3|5|15|75|75|1075|2075|7075|150|151|DMAAAA|TGMAAA|VVVVxx
+3950|8288|0|2|0|10|50|950|1950|3950|3950|100|101|YVAAAA|UGMAAA|AAAAxx
+2314|8289|0|2|4|14|14|314|314|2314|2314|28|29|ALAAAA|VGMAAA|HHHHxx
+8432|8290|0|0|2|12|32|432|432|3432|8432|64|65|IMAAAA|WGMAAA|OOOOxx
+62|8291|0|2|2|2|62|62|62|62|62|124|125|KCAAAA|XGMAAA|VVVVxx
+6920|8292|0|0|0|0|20|920|920|1920|6920|40|41|EGAAAA|YGMAAA|AAAAxx
+4077|8293|1|1|7|17|77|77|77|4077|4077|154|155|VAAAAA|ZGMAAA|HHHHxx
+9118|8294|0|2|8|18|18|118|1118|4118|9118|36|37|SMAAAA|AHMAAA|OOOOxx
+5375|8295|1|3|5|15|75|375|1375|375|5375|150|151|TYAAAA|BHMAAA|VVVVxx
+178|8296|0|2|8|18|78|178|178|178|178|156|157|WGAAAA|CHMAAA|AAAAxx
+1079|8297|1|3|9|19|79|79|1079|1079|1079|158|159|NPAAAA|DHMAAA|HHHHxx
+4279|8298|1|3|9|19|79|279|279|4279|4279|158|159|PIAAAA|EHMAAA|OOOOxx
+8436|8299|0|0|6|16|36|436|436|3436|8436|72|73|MMAAAA|FHMAAA|VVVVxx
+1931|8300|1|3|1|11|31|931|1931|1931|1931|62|63|HWAAAA|GHMAAA|AAAAxx
+2096|8301|0|0|6|16|96|96|96|2096|2096|192|193|QCAAAA|HHMAAA|HHHHxx
+1638|8302|0|2|8|18|38|638|1638|1638|1638|76|77|ALAAAA|IHMAAA|OOOOxx
+2788|8303|0|0|8|8|88|788|788|2788|2788|176|177|GDAAAA|JHMAAA|VVVVxx
+4751|8304|1|3|1|11|51|751|751|4751|4751|102|103|TAAAAA|KHMAAA|AAAAxx
+8824|8305|0|0|4|4|24|824|824|3824|8824|48|49|KBAAAA|LHMAAA|HHHHxx
+3098|8306|0|2|8|18|98|98|1098|3098|3098|196|197|EPAAAA|MHMAAA|OOOOxx
+4497|8307|1|1|7|17|97|497|497|4497|4497|194|195|ZQAAAA|NHMAAA|VVVVxx
+5223|8308|1|3|3|3|23|223|1223|223|5223|46|47|XSAAAA|OHMAAA|AAAAxx
+9212|8309|0|0|2|12|12|212|1212|4212|9212|24|25|IQAAAA|PHMAAA|HHHHxx
+4265|8310|1|1|5|5|65|265|265|4265|4265|130|131|BIAAAA|QHMAAA|OOOOxx
+6898|8311|0|2|8|18|98|898|898|1898|6898|196|197|IFAAAA|RHMAAA|VVVVxx
+8808|8312|0|0|8|8|8|808|808|3808|8808|16|17|UAAAAA|SHMAAA|AAAAxx
+5629|8313|1|1|9|9|29|629|1629|629|5629|58|59|NIAAAA|THMAAA|HHHHxx
+3779|8314|1|3|9|19|79|779|1779|3779|3779|158|159|JPAAAA|UHMAAA|OOOOxx
+4972|8315|0|0|2|12|72|972|972|4972|4972|144|145|GJAAAA|VHMAAA|VVVVxx
+4511|8316|1|3|1|11|11|511|511|4511|4511|22|23|NRAAAA|WHMAAA|AAAAxx
+6761|8317|1|1|1|1|61|761|761|1761|6761|122|123|BAAAAA|XHMAAA|HHHHxx
+2335|8318|1|3|5|15|35|335|335|2335|2335|70|71|VLAAAA|YHMAAA|OOOOxx
+732|8319|0|0|2|12|32|732|732|732|732|64|65|ECAAAA|ZHMAAA|VVVVxx
+4757|8320|1|1|7|17|57|757|757|4757|4757|114|115|ZAAAAA|AIMAAA|AAAAxx
+6624|8321|0|0|4|4|24|624|624|1624|6624|48|49|UUAAAA|BIMAAA|HHHHxx
+5869|8322|1|1|9|9|69|869|1869|869|5869|138|139|TRAAAA|CIMAAA|OOOOxx
+5842|8323|0|2|2|2|42|842|1842|842|5842|84|85|SQAAAA|DIMAAA|VVVVxx
+5735|8324|1|3|5|15|35|735|1735|735|5735|70|71|PMAAAA|EIMAAA|AAAAxx
+8276|8325|0|0|6|16|76|276|276|3276|8276|152|153|IGAAAA|FIMAAA|HHHHxx
+7227|8326|1|3|7|7|27|227|1227|2227|7227|54|55|ZRAAAA|GIMAAA|OOOOxx
+4923|8327|1|3|3|3|23|923|923|4923|4923|46|47|JHAAAA|HIMAAA|VVVVxx
+9135|8328|1|3|5|15|35|135|1135|4135|9135|70|71|JNAAAA|IIMAAA|AAAAxx
+5813|8329|1|1|3|13|13|813|1813|813|5813|26|27|PPAAAA|JIMAAA|HHHHxx
+9697|8330|1|1|7|17|97|697|1697|4697|9697|194|195|ZIAAAA|KIMAAA|OOOOxx
+3222|8331|0|2|2|2|22|222|1222|3222|3222|44|45|YTAAAA|LIMAAA|VVVVxx
+2394|8332|0|2|4|14|94|394|394|2394|2394|188|189|COAAAA|MIMAAA|AAAAxx
+5784|8333|0|0|4|4|84|784|1784|784|5784|168|169|MOAAAA|NIMAAA|HHHHxx
+3652|8334|0|0|2|12|52|652|1652|3652|3652|104|105|MKAAAA|OIMAAA|OOOOxx
+8175|8335|1|3|5|15|75|175|175|3175|8175|150|151|LCAAAA|PIMAAA|VVVVxx
+7568|8336|0|0|8|8|68|568|1568|2568|7568|136|137|CFAAAA|QIMAAA|AAAAxx
+6645|8337|1|1|5|5|45|645|645|1645|6645|90|91|PVAAAA|RIMAAA|HHHHxx
+8176|8338|0|0|6|16|76|176|176|3176|8176|152|153|MCAAAA|SIMAAA|OOOOxx
+530|8339|0|2|0|10|30|530|530|530|530|60|61|KUAAAA|TIMAAA|VVVVxx
+5439|8340|1|3|9|19|39|439|1439|439|5439|78|79|FBAAAA|UIMAAA|AAAAxx
+61|8341|1|1|1|1|61|61|61|61|61|122|123|JCAAAA|VIMAAA|HHHHxx
+3951|8342|1|3|1|11|51|951|1951|3951|3951|102|103|ZVAAAA|WIMAAA|OOOOxx
+5283|8343|1|3|3|3|83|283|1283|283|5283|166|167|FVAAAA|XIMAAA|VVVVxx
+7226|8344|0|2|6|6|26|226|1226|2226|7226|52|53|YRAAAA|YIMAAA|AAAAxx
+1954|8345|0|2|4|14|54|954|1954|1954|1954|108|109|EXAAAA|ZIMAAA|HHHHxx
+334|8346|0|2|4|14|34|334|334|334|334|68|69|WMAAAA|AJMAAA|OOOOxx
+3921|8347|1|1|1|1|21|921|1921|3921|3921|42|43|VUAAAA|BJMAAA|VVVVxx
+6276|8348|0|0|6|16|76|276|276|1276|6276|152|153|KHAAAA|CJMAAA|AAAAxx
+3378|8349|0|2|8|18|78|378|1378|3378|3378|156|157|YZAAAA|DJMAAA|HHHHxx
+5236|8350|0|0|6|16|36|236|1236|236|5236|72|73|KTAAAA|EJMAAA|OOOOxx
+7781|8351|1|1|1|1|81|781|1781|2781|7781|162|163|HNAAAA|FJMAAA|VVVVxx
+8601|8352|1|1|1|1|1|601|601|3601|8601|2|3|VSAAAA|GJMAAA|AAAAxx
+1473|8353|1|1|3|13|73|473|1473|1473|1473|146|147|REAAAA|HJMAAA|HHHHxx
+3246|8354|0|2|6|6|46|246|1246|3246|3246|92|93|WUAAAA|IJMAAA|OOOOxx
+3601|8355|1|1|1|1|1|601|1601|3601|3601|2|3|NIAAAA|JJMAAA|VVVVxx
+6861|8356|1|1|1|1|61|861|861|1861|6861|122|123|XDAAAA|KJMAAA|AAAAxx
+9032|8357|0|0|2|12|32|32|1032|4032|9032|64|65|KJAAAA|LJMAAA|HHHHxx
+216|8358|0|0|6|16|16|216|216|216|216|32|33|IIAAAA|MJMAAA|OOOOxx
+3824|8359|0|0|4|4|24|824|1824|3824|3824|48|49|CRAAAA|NJMAAA|VVVVxx
+8486|8360|0|2|6|6|86|486|486|3486|8486|172|173|KOAAAA|OJMAAA|AAAAxx
+276|8361|0|0|6|16|76|276|276|276|276|152|153|QKAAAA|PJMAAA|HHHHxx
+1838|8362|0|2|8|18|38|838|1838|1838|1838|76|77|SSAAAA|QJMAAA|OOOOxx
+6175|8363|1|3|5|15|75|175|175|1175|6175|150|151|NDAAAA|RJMAAA|VVVVxx
+3719|8364|1|3|9|19|19|719|1719|3719|3719|38|39|BNAAAA|SJMAAA|AAAAxx
+6958|8365|0|2|8|18|58|958|958|1958|6958|116|117|QHAAAA|TJMAAA|HHHHxx
+6822|8366|0|2|2|2|22|822|822|1822|6822|44|45|KCAAAA|UJMAAA|OOOOxx
+3318|8367|0|2|8|18|18|318|1318|3318|3318|36|37|QXAAAA|VJMAAA|VVVVxx
+7222|8368|0|2|2|2|22|222|1222|2222|7222|44|45|URAAAA|WJMAAA|AAAAxx
+85|8369|1|1|5|5|85|85|85|85|85|170|171|HDAAAA|XJMAAA|HHHHxx
+5158|8370|0|2|8|18|58|158|1158|158|5158|116|117|KQAAAA|YJMAAA|OOOOxx
+6360|8371|0|0|0|0|60|360|360|1360|6360|120|121|QKAAAA|ZJMAAA|VVVVxx
+2599|8372|1|3|9|19|99|599|599|2599|2599|198|199|ZVAAAA|AKMAAA|AAAAxx
+4002|8373|0|2|2|2|2|2|2|4002|4002|4|5|YXAAAA|BKMAAA|HHHHxx
+6597|8374|1|1|7|17|97|597|597|1597|6597|194|195|TTAAAA|CKMAAA|OOOOxx
+5762|8375|0|2|2|2|62|762|1762|762|5762|124|125|QNAAAA|DKMAAA|VVVVxx
+8383|8376|1|3|3|3|83|383|383|3383|8383|166|167|LKAAAA|EKMAAA|AAAAxx
+4686|8377|0|2|6|6|86|686|686|4686|4686|172|173|GYAAAA|FKMAAA|HHHHxx
+5972|8378|0|0|2|12|72|972|1972|972|5972|144|145|SVAAAA|GKMAAA|OOOOxx
+1432|8379|0|0|2|12|32|432|1432|1432|1432|64|65|CDAAAA|HKMAAA|VVVVxx
+1601|8380|1|1|1|1|1|601|1601|1601|1601|2|3|PJAAAA|IKMAAA|AAAAxx
+3012|8381|0|0|2|12|12|12|1012|3012|3012|24|25|WLAAAA|JKMAAA|HHHHxx
+9345|8382|1|1|5|5|45|345|1345|4345|9345|90|91|LVAAAA|KKMAAA|OOOOxx
+8869|8383|1|1|9|9|69|869|869|3869|8869|138|139|DDAAAA|LKMAAA|VVVVxx
+6612|8384|0|0|2|12|12|612|612|1612|6612|24|25|IUAAAA|MKMAAA|AAAAxx
+262|8385|0|2|2|2|62|262|262|262|262|124|125|CKAAAA|NKMAAA|HHHHxx
+300|8386|0|0|0|0|0|300|300|300|300|0|1|OLAAAA|OKMAAA|OOOOxx
+3045|8387|1|1|5|5|45|45|1045|3045|3045|90|91|DNAAAA|PKMAAA|VVVVxx
+7252|8388|0|0|2|12|52|252|1252|2252|7252|104|105|YSAAAA|QKMAAA|AAAAxx
+9099|8389|1|3|9|19|99|99|1099|4099|9099|198|199|ZLAAAA|RKMAAA|HHHHxx
+9006|8390|0|2|6|6|6|6|1006|4006|9006|12|13|KIAAAA|SKMAAA|OOOOxx
+3078|8391|0|2|8|18|78|78|1078|3078|3078|156|157|KOAAAA|TKMAAA|VVVVxx
+5159|8392|1|3|9|19|59|159|1159|159|5159|118|119|LQAAAA|UKMAAA|AAAAxx
+9329|8393|1|1|9|9|29|329|1329|4329|9329|58|59|VUAAAA|VKMAAA|HHHHxx
+1393|8394|1|1|3|13|93|393|1393|1393|1393|186|187|PBAAAA|WKMAAA|OOOOxx
+5894|8395|0|2|4|14|94|894|1894|894|5894|188|189|SSAAAA|XKMAAA|VVVVxx
+11|8396|1|3|1|11|11|11|11|11|11|22|23|LAAAAA|YKMAAA|AAAAxx
+5606|8397|0|2|6|6|6|606|1606|606|5606|12|13|QHAAAA|ZKMAAA|HHHHxx
+5541|8398|1|1|1|1|41|541|1541|541|5541|82|83|DFAAAA|ALMAAA|OOOOxx
+2689|8399|1|1|9|9|89|689|689|2689|2689|178|179|LZAAAA|BLMAAA|VVVVxx
+1023|8400|1|3|3|3|23|23|1023|1023|1023|46|47|JNAAAA|CLMAAA|AAAAxx
+8134|8401|0|2|4|14|34|134|134|3134|8134|68|69|WAAAAA|DLMAAA|HHHHxx
+5923|8402|1|3|3|3|23|923|1923|923|5923|46|47|VTAAAA|ELMAAA|OOOOxx
+6056|8403|0|0|6|16|56|56|56|1056|6056|112|113|YYAAAA|FLMAAA|VVVVxx
+653|8404|1|1|3|13|53|653|653|653|653|106|107|DZAAAA|GLMAAA|AAAAxx
+367|8405|1|3|7|7|67|367|367|367|367|134|135|DOAAAA|HLMAAA|HHHHxx
+1828|8406|0|0|8|8|28|828|1828|1828|1828|56|57|ISAAAA|ILMAAA|OOOOxx
+6506|8407|0|2|6|6|6|506|506|1506|6506|12|13|GQAAAA|JLMAAA|VVVVxx
+5772|8408|0|0|2|12|72|772|1772|772|5772|144|145|AOAAAA|KLMAAA|AAAAxx
+8052|8409|0|0|2|12|52|52|52|3052|8052|104|105|SXAAAA|LLMAAA|HHHHxx
+2633|8410|1|1|3|13|33|633|633|2633|2633|66|67|HXAAAA|MLMAAA|OOOOxx
+4878|8411|0|2|8|18|78|878|878|4878|4878|156|157|QFAAAA|NLMAAA|VVVVxx
+5621|8412|1|1|1|1|21|621|1621|621|5621|42|43|FIAAAA|OLMAAA|AAAAxx
+41|8413|1|1|1|1|41|41|41|41|41|82|83|PBAAAA|PLMAAA|HHHHxx
+4613|8414|1|1|3|13|13|613|613|4613|4613|26|27|LVAAAA|QLMAAA|OOOOxx
+9389|8415|1|1|9|9|89|389|1389|4389|9389|178|179|DXAAAA|RLMAAA|VVVVxx
+9414|8416|0|2|4|14|14|414|1414|4414|9414|28|29|CYAAAA|SLMAAA|AAAAxx
+3583|8417|1|3|3|3|83|583|1583|3583|3583|166|167|VHAAAA|TLMAAA|HHHHxx
+3454|8418|0|2|4|14|54|454|1454|3454|3454|108|109|WCAAAA|ULMAAA|OOOOxx
+719|8419|1|3|9|19|19|719|719|719|719|38|39|RBAAAA|VLMAAA|VVVVxx
+6188|8420|0|0|8|8|88|188|188|1188|6188|176|177|AEAAAA|WLMAAA|AAAAxx
+2288|8421|0|0|8|8|88|288|288|2288|2288|176|177|AKAAAA|XLMAAA|HHHHxx
+1287|8422|1|3|7|7|87|287|1287|1287|1287|174|175|NXAAAA|YLMAAA|OOOOxx
+1397|8423|1|1|7|17|97|397|1397|1397|1397|194|195|TBAAAA|ZLMAAA|VVVVxx
+7763|8424|1|3|3|3|63|763|1763|2763|7763|126|127|PMAAAA|AMMAAA|AAAAxx
+5194|8425|0|2|4|14|94|194|1194|194|5194|188|189|URAAAA|BMMAAA|HHHHxx
+3167|8426|1|3|7|7|67|167|1167|3167|3167|134|135|VRAAAA|CMMAAA|OOOOxx
+9218|8427|0|2|8|18|18|218|1218|4218|9218|36|37|OQAAAA|DMMAAA|VVVVxx
+2065|8428|1|1|5|5|65|65|65|2065|2065|130|131|LBAAAA|EMMAAA|AAAAxx
+9669|8429|1|1|9|9|69|669|1669|4669|9669|138|139|XHAAAA|FMMAAA|HHHHxx
+146|8430|0|2|6|6|46|146|146|146|146|92|93|QFAAAA|GMMAAA|OOOOxx
+6141|8431|1|1|1|1|41|141|141|1141|6141|82|83|FCAAAA|HMMAAA|VVVVxx
+2843|8432|1|3|3|3|43|843|843|2843|2843|86|87|JFAAAA|IMMAAA|AAAAxx
+7934|8433|0|2|4|14|34|934|1934|2934|7934|68|69|ETAAAA|JMMAAA|HHHHxx
+2536|8434|0|0|6|16|36|536|536|2536|2536|72|73|OTAAAA|KMMAAA|OOOOxx
+7088|8435|0|0|8|8|88|88|1088|2088|7088|176|177|QMAAAA|LMMAAA|VVVVxx
+2519|8436|1|3|9|19|19|519|519|2519|2519|38|39|XSAAAA|MMMAAA|AAAAxx
+6650|8437|0|2|0|10|50|650|650|1650|6650|100|101|UVAAAA|NMMAAA|HHHHxx
+3007|8438|1|3|7|7|7|7|1007|3007|3007|14|15|RLAAAA|OMMAAA|OOOOxx
+4507|8439|1|3|7|7|7|507|507|4507|4507|14|15|JRAAAA|PMMAAA|VVVVxx
+4892|8440|0|0|2|12|92|892|892|4892|4892|184|185|EGAAAA|QMMAAA|AAAAxx
+7159|8441|1|3|9|19|59|159|1159|2159|7159|118|119|JPAAAA|RMMAAA|HHHHxx
+3171|8442|1|3|1|11|71|171|1171|3171|3171|142|143|ZRAAAA|SMMAAA|OOOOxx
+1080|8443|0|0|0|0|80|80|1080|1080|1080|160|161|OPAAAA|TMMAAA|VVVVxx
+7248|8444|0|0|8|8|48|248|1248|2248|7248|96|97|USAAAA|UMMAAA|AAAAxx
+7230|8445|0|2|0|10|30|230|1230|2230|7230|60|61|CSAAAA|VMMAAA|HHHHxx
+3823|8446|1|3|3|3|23|823|1823|3823|3823|46|47|BRAAAA|WMMAAA|OOOOxx
+5517|8447|1|1|7|17|17|517|1517|517|5517|34|35|FEAAAA|XMMAAA|VVVVxx
+1482|8448|0|2|2|2|82|482|1482|1482|1482|164|165|AFAAAA|YMMAAA|AAAAxx
+9953|8449|1|1|3|13|53|953|1953|4953|9953|106|107|VSAAAA|ZMMAAA|HHHHxx
+2754|8450|0|2|4|14|54|754|754|2754|2754|108|109|YBAAAA|ANMAAA|OOOOxx
+3875|8451|1|3|5|15|75|875|1875|3875|3875|150|151|BTAAAA|BNMAAA|VVVVxx
+9800|8452|0|0|0|0|0|800|1800|4800|9800|0|1|YMAAAA|CNMAAA|AAAAxx
+8819|8453|1|3|9|19|19|819|819|3819|8819|38|39|FBAAAA|DNMAAA|HHHHxx
+8267|8454|1|3|7|7|67|267|267|3267|8267|134|135|ZFAAAA|ENMAAA|OOOOxx
+520|8455|0|0|0|0|20|520|520|520|520|40|41|AUAAAA|FNMAAA|VVVVxx
+5770|8456|0|2|0|10|70|770|1770|770|5770|140|141|YNAAAA|GNMAAA|AAAAxx
+2114|8457|0|2|4|14|14|114|114|2114|2114|28|29|IDAAAA|HNMAAA|HHHHxx
+5045|8458|1|1|5|5|45|45|1045|45|5045|90|91|BMAAAA|INMAAA|OOOOxx
+1094|8459|0|2|4|14|94|94|1094|1094|1094|188|189|CQAAAA|JNMAAA|VVVVxx
+8786|8460|0|2|6|6|86|786|786|3786|8786|172|173|YZAAAA|KNMAAA|AAAAxx
+353|8461|1|1|3|13|53|353|353|353|353|106|107|PNAAAA|LNMAAA|HHHHxx
+290|8462|0|2|0|10|90|290|290|290|290|180|181|ELAAAA|MNMAAA|OOOOxx
+3376|8463|0|0|6|16|76|376|1376|3376|3376|152|153|WZAAAA|NNMAAA|VVVVxx
+9305|8464|1|1|5|5|5|305|1305|4305|9305|10|11|XTAAAA|ONMAAA|AAAAxx
+186|8465|0|2|6|6|86|186|186|186|186|172|173|EHAAAA|PNMAAA|HHHHxx
+4817|8466|1|1|7|17|17|817|817|4817|4817|34|35|HDAAAA|QNMAAA|OOOOxx
+4638|8467|0|2|8|18|38|638|638|4638|4638|76|77|KWAAAA|RNMAAA|VVVVxx
+3558|8468|0|2|8|18|58|558|1558|3558|3558|116|117|WGAAAA|SNMAAA|AAAAxx
+9285|8469|1|1|5|5|85|285|1285|4285|9285|170|171|DTAAAA|TNMAAA|HHHHxx
+848|8470|0|0|8|8|48|848|848|848|848|96|97|QGAAAA|UNMAAA|OOOOxx
+8923|8471|1|3|3|3|23|923|923|3923|8923|46|47|FFAAAA|VNMAAA|VVVVxx
+6826|8472|0|2|6|6|26|826|826|1826|6826|52|53|OCAAAA|WNMAAA|AAAAxx
+5187|8473|1|3|7|7|87|187|1187|187|5187|174|175|NRAAAA|XNMAAA|HHHHxx
+2398|8474|0|2|8|18|98|398|398|2398|2398|196|197|GOAAAA|YNMAAA|OOOOxx
+7653|8475|1|1|3|13|53|653|1653|2653|7653|106|107|JIAAAA|ZNMAAA|VVVVxx
+8835|8476|1|3|5|15|35|835|835|3835|8835|70|71|VBAAAA|AOMAAA|AAAAxx
+5736|8477|0|0|6|16|36|736|1736|736|5736|72|73|QMAAAA|BOMAAA|HHHHxx
+1238|8478|0|2|8|18|38|238|1238|1238|1238|76|77|QVAAAA|COMAAA|OOOOxx
+6021|8479|1|1|1|1|21|21|21|1021|6021|42|43|PXAAAA|DOMAAA|VVVVxx
+6815|8480|1|3|5|15|15|815|815|1815|6815|30|31|DCAAAA|EOMAAA|AAAAxx
+2549|8481|1|1|9|9|49|549|549|2549|2549|98|99|BUAAAA|FOMAAA|HHHHxx
+5657|8482|1|1|7|17|57|657|1657|657|5657|114|115|PJAAAA|GOMAAA|OOOOxx
+6855|8483|1|3|5|15|55|855|855|1855|6855|110|111|RDAAAA|HOMAAA|VVVVxx
+1225|8484|1|1|5|5|25|225|1225|1225|1225|50|51|DVAAAA|IOMAAA|AAAAxx
+7452|8485|0|0|2|12|52|452|1452|2452|7452|104|105|QAAAAA|JOMAAA|HHHHxx
+2479|8486|1|3|9|19|79|479|479|2479|2479|158|159|JRAAAA|KOMAAA|OOOOxx
+7974|8487|0|2|4|14|74|974|1974|2974|7974|148|149|SUAAAA|LOMAAA|VVVVxx
+1212|8488|0|0|2|12|12|212|1212|1212|1212|24|25|QUAAAA|MOMAAA|AAAAxx
+8883|8489|1|3|3|3|83|883|883|3883|8883|166|167|RDAAAA|NOMAAA|HHHHxx
+8150|8490|0|2|0|10|50|150|150|3150|8150|100|101|MBAAAA|OOMAAA|OOOOxx
+3392|8491|0|0|2|12|92|392|1392|3392|3392|184|185|MAAAAA|POMAAA|VVVVxx
+6774|8492|0|2|4|14|74|774|774|1774|6774|148|149|OAAAAA|QOMAAA|AAAAxx
+904|8493|0|0|4|4|4|904|904|904|904|8|9|UIAAAA|ROMAAA|HHHHxx
+5068|8494|0|0|8|8|68|68|1068|68|5068|136|137|YMAAAA|SOMAAA|OOOOxx
+9339|8495|1|3|9|19|39|339|1339|4339|9339|78|79|FVAAAA|TOMAAA|VVVVxx
+1062|8496|0|2|2|2|62|62|1062|1062|1062|124|125|WOAAAA|UOMAAA|AAAAxx
+3841|8497|1|1|1|1|41|841|1841|3841|3841|82|83|TRAAAA|VOMAAA|HHHHxx
+8924|8498|0|0|4|4|24|924|924|3924|8924|48|49|GFAAAA|WOMAAA|OOOOxx
+9795|8499|1|3|5|15|95|795|1795|4795|9795|190|191|TMAAAA|XOMAAA|VVVVxx
+3981|8500|1|1|1|1|81|981|1981|3981|3981|162|163|DXAAAA|YOMAAA|AAAAxx
+4290|8501|0|2|0|10|90|290|290|4290|4290|180|181|AJAAAA|ZOMAAA|HHHHxx
+1067|8502|1|3|7|7|67|67|1067|1067|1067|134|135|BPAAAA|APMAAA|OOOOxx
+8679|8503|1|3|9|19|79|679|679|3679|8679|158|159|VVAAAA|BPMAAA|VVVVxx
+2894|8504|0|2|4|14|94|894|894|2894|2894|188|189|IHAAAA|CPMAAA|AAAAxx
+9248|8505|0|0|8|8|48|248|1248|4248|9248|96|97|SRAAAA|DPMAAA|HHHHxx
+1072|8506|0|0|2|12|72|72|1072|1072|1072|144|145|GPAAAA|EPMAAA|OOOOxx
+3510|8507|0|2|0|10|10|510|1510|3510|3510|20|21|AFAAAA|FPMAAA|VVVVxx
+6871|8508|1|3|1|11|71|871|871|1871|6871|142|143|HEAAAA|GPMAAA|AAAAxx
+8701|8509|1|1|1|1|1|701|701|3701|8701|2|3|RWAAAA|HPMAAA|HHHHxx
+8170|8510|0|2|0|10|70|170|170|3170|8170|140|141|GCAAAA|IPMAAA|OOOOxx
+2730|8511|0|2|0|10|30|730|730|2730|2730|60|61|ABAAAA|JPMAAA|VVVVxx
+2668|8512|0|0|8|8|68|668|668|2668|2668|136|137|QYAAAA|KPMAAA|AAAAxx
+8723|8513|1|3|3|3|23|723|723|3723|8723|46|47|NXAAAA|LPMAAA|HHHHxx
+3439|8514|1|3|9|19|39|439|1439|3439|3439|78|79|HCAAAA|MPMAAA|OOOOxx
+6219|8515|1|3|9|19|19|219|219|1219|6219|38|39|FFAAAA|NPMAAA|VVVVxx
+4264|8516|0|0|4|4|64|264|264|4264|4264|128|129|AIAAAA|OPMAAA|AAAAxx
+3929|8517|1|1|9|9|29|929|1929|3929|3929|58|59|DVAAAA|PPMAAA|HHHHxx
+7|8518|1|3|7|7|7|7|7|7|7|14|15|HAAAAA|QPMAAA|OOOOxx
+3737|8519|1|1|7|17|37|737|1737|3737|3737|74|75|TNAAAA|RPMAAA|VVVVxx
+358|8520|0|2|8|18|58|358|358|358|358|116|117|UNAAAA|SPMAAA|AAAAxx
+5128|8521|0|0|8|8|28|128|1128|128|5128|56|57|GPAAAA|TPMAAA|HHHHxx
+7353|8522|1|1|3|13|53|353|1353|2353|7353|106|107|VWAAAA|UPMAAA|OOOOxx
+8758|8523|0|2|8|18|58|758|758|3758|8758|116|117|WYAAAA|VPMAAA|VVVVxx
+7284|8524|0|0|4|4|84|284|1284|2284|7284|168|169|EUAAAA|WPMAAA|AAAAxx
+4037|8525|1|1|7|17|37|37|37|4037|4037|74|75|HZAAAA|XPMAAA|HHHHxx
+435|8526|1|3|5|15|35|435|435|435|435|70|71|TQAAAA|YPMAAA|OOOOxx
+3580|8527|0|0|0|0|80|580|1580|3580|3580|160|161|SHAAAA|ZPMAAA|VVVVxx
+4554|8528|0|2|4|14|54|554|554|4554|4554|108|109|ETAAAA|AQMAAA|AAAAxx
+4337|8529|1|1|7|17|37|337|337|4337|4337|74|75|VKAAAA|BQMAAA|HHHHxx
+512|8530|0|0|2|12|12|512|512|512|512|24|25|STAAAA|CQMAAA|OOOOxx
+2032|8531|0|0|2|12|32|32|32|2032|2032|64|65|EAAAAA|DQMAAA|VVVVxx
+1755|8532|1|3|5|15|55|755|1755|1755|1755|110|111|NPAAAA|EQMAAA|AAAAxx
+9923|8533|1|3|3|3|23|923|1923|4923|9923|46|47|RRAAAA|FQMAAA|HHHHxx
+3747|8534|1|3|7|7|47|747|1747|3747|3747|94|95|DOAAAA|GQMAAA|OOOOxx
+27|8535|1|3|7|7|27|27|27|27|27|54|55|BBAAAA|HQMAAA|VVVVxx
+3075|8536|1|3|5|15|75|75|1075|3075|3075|150|151|HOAAAA|IQMAAA|AAAAxx
+6259|8537|1|3|9|19|59|259|259|1259|6259|118|119|TGAAAA|JQMAAA|HHHHxx
+2940|8538|0|0|0|0|40|940|940|2940|2940|80|81|CJAAAA|KQMAAA|OOOOxx
+5724|8539|0|0|4|4|24|724|1724|724|5724|48|49|EMAAAA|LQMAAA|VVVVxx
+5638|8540|0|2|8|18|38|638|1638|638|5638|76|77|WIAAAA|MQMAAA|AAAAxx
+479|8541|1|3|9|19|79|479|479|479|479|158|159|LSAAAA|NQMAAA|HHHHxx
+4125|8542|1|1|5|5|25|125|125|4125|4125|50|51|RCAAAA|OQMAAA|OOOOxx
+1525|8543|1|1|5|5|25|525|1525|1525|1525|50|51|RGAAAA|PQMAAA|VVVVxx
+7529|8544|1|1|9|9|29|529|1529|2529|7529|58|59|PDAAAA|QQMAAA|AAAAxx
+931|8545|1|3|1|11|31|931|931|931|931|62|63|VJAAAA|RQMAAA|HHHHxx
+5175|8546|1|3|5|15|75|175|1175|175|5175|150|151|BRAAAA|SQMAAA|OOOOxx
+6798|8547|0|2|8|18|98|798|798|1798|6798|196|197|MBAAAA|TQMAAA|VVVVxx
+2111|8548|1|3|1|11|11|111|111|2111|2111|22|23|FDAAAA|UQMAAA|AAAAxx
+6145|8549|1|1|5|5|45|145|145|1145|6145|90|91|JCAAAA|VQMAAA|HHHHxx
+4712|8550|0|0|2|12|12|712|712|4712|4712|24|25|GZAAAA|WQMAAA|OOOOxx
+3110|8551|0|2|0|10|10|110|1110|3110|3110|20|21|QPAAAA|XQMAAA|VVVVxx
+97|8552|1|1|7|17|97|97|97|97|97|194|195|TDAAAA|YQMAAA|AAAAxx
+758|8553|0|2|8|18|58|758|758|758|758|116|117|EDAAAA|ZQMAAA|HHHHxx
+1895|8554|1|3|5|15|95|895|1895|1895|1895|190|191|XUAAAA|ARMAAA|OOOOxx
+5289|8555|1|1|9|9|89|289|1289|289|5289|178|179|LVAAAA|BRMAAA|VVVVxx
+5026|8556|0|2|6|6|26|26|1026|26|5026|52|53|ILAAAA|CRMAAA|AAAAxx
+4725|8557|1|1|5|5|25|725|725|4725|4725|50|51|TZAAAA|DRMAAA|HHHHxx
+1679|8558|1|3|9|19|79|679|1679|1679|1679|158|159|PMAAAA|ERMAAA|OOOOxx
+4433|8559|1|1|3|13|33|433|433|4433|4433|66|67|NOAAAA|FRMAAA|VVVVxx
+5340|8560|0|0|0|0|40|340|1340|340|5340|80|81|KXAAAA|GRMAAA|AAAAxx
+6340|8561|0|0|0|0|40|340|340|1340|6340|80|81|WJAAAA|HRMAAA|HHHHxx
+3261|8562|1|1|1|1|61|261|1261|3261|3261|122|123|LVAAAA|IRMAAA|OOOOxx
+8108|8563|0|0|8|8|8|108|108|3108|8108|16|17|WZAAAA|JRMAAA|VVVVxx
+8785|8564|1|1|5|5|85|785|785|3785|8785|170|171|XZAAAA|KRMAAA|AAAAxx
+7391|8565|1|3|1|11|91|391|1391|2391|7391|182|183|HYAAAA|LRMAAA|HHHHxx
+1496|8566|0|0|6|16|96|496|1496|1496|1496|192|193|OFAAAA|MRMAAA|OOOOxx
+1484|8567|0|0|4|4|84|484|1484|1484|1484|168|169|CFAAAA|NRMAAA|VVVVxx
+5884|8568|0|0|4|4|84|884|1884|884|5884|168|169|ISAAAA|ORMAAA|AAAAxx
+342|8569|0|2|2|2|42|342|342|342|342|84|85|ENAAAA|PRMAAA|HHHHxx
+7659|8570|1|3|9|19|59|659|1659|2659|7659|118|119|PIAAAA|QRMAAA|OOOOxx
+6635|8571|1|3|5|15|35|635|635|1635|6635|70|71|FVAAAA|RRMAAA|VVVVxx
+8507|8572|1|3|7|7|7|507|507|3507|8507|14|15|FPAAAA|SRMAAA|AAAAxx
+2583|8573|1|3|3|3|83|583|583|2583|2583|166|167|JVAAAA|TRMAAA|HHHHxx
+6533|8574|1|1|3|13|33|533|533|1533|6533|66|67|HRAAAA|URMAAA|OOOOxx
+5879|8575|1|3|9|19|79|879|1879|879|5879|158|159|DSAAAA|VRMAAA|VVVVxx
+5511|8576|1|3|1|11|11|511|1511|511|5511|22|23|ZDAAAA|WRMAAA|AAAAxx
+3682|8577|0|2|2|2|82|682|1682|3682|3682|164|165|QLAAAA|XRMAAA|HHHHxx
+7182|8578|0|2|2|2|82|182|1182|2182|7182|164|165|GQAAAA|YRMAAA|OOOOxx
+1409|8579|1|1|9|9|9|409|1409|1409|1409|18|19|FCAAAA|ZRMAAA|VVVVxx
+3363|8580|1|3|3|3|63|363|1363|3363|3363|126|127|JZAAAA|ASMAAA|AAAAxx
+729|8581|1|1|9|9|29|729|729|729|729|58|59|BCAAAA|BSMAAA|HHHHxx
+5857|8582|1|1|7|17|57|857|1857|857|5857|114|115|HRAAAA|CSMAAA|OOOOxx
+235|8583|1|3|5|15|35|235|235|235|235|70|71|BJAAAA|DSMAAA|VVVVxx
+193|8584|1|1|3|13|93|193|193|193|193|186|187|LHAAAA|ESMAAA|AAAAxx
+5586|8585|0|2|6|6|86|586|1586|586|5586|172|173|WGAAAA|FSMAAA|HHHHxx
+6203|8586|1|3|3|3|3|203|203|1203|6203|6|7|PEAAAA|GSMAAA|OOOOxx
+6795|8587|1|3|5|15|95|795|795|1795|6795|190|191|JBAAAA|HSMAAA|VVVVxx
+3211|8588|1|3|1|11|11|211|1211|3211|3211|22|23|NTAAAA|ISMAAA|AAAAxx
+9763|8589|1|3|3|3|63|763|1763|4763|9763|126|127|NLAAAA|JSMAAA|HHHHxx
+9043|8590|1|3|3|3|43|43|1043|4043|9043|86|87|VJAAAA|KSMAAA|OOOOxx
+2854|8591|0|2|4|14|54|854|854|2854|2854|108|109|UFAAAA|LSMAAA|VVVVxx
+565|8592|1|1|5|5|65|565|565|565|565|130|131|TVAAAA|MSMAAA|AAAAxx
+9284|8593|0|0|4|4|84|284|1284|4284|9284|168|169|CTAAAA|NSMAAA|HHHHxx
+7886|8594|0|2|6|6|86|886|1886|2886|7886|172|173|IRAAAA|OSMAAA|OOOOxx
+122|8595|0|2|2|2|22|122|122|122|122|44|45|SEAAAA|PSMAAA|VVVVxx
+4934|8596|0|2|4|14|34|934|934|4934|4934|68|69|UHAAAA|QSMAAA|AAAAxx
+1766|8597|0|2|6|6|66|766|1766|1766|1766|132|133|YPAAAA|RSMAAA|HHHHxx
+2554|8598|0|2|4|14|54|554|554|2554|2554|108|109|GUAAAA|SSMAAA|OOOOxx
+488|8599|0|0|8|8|88|488|488|488|488|176|177|USAAAA|TSMAAA|VVVVxx
+825|8600|1|1|5|5|25|825|825|825|825|50|51|TFAAAA|USMAAA|AAAAxx
+678|8601|0|2|8|18|78|678|678|678|678|156|157|CAAAAA|VSMAAA|HHHHxx
+4543|8602|1|3|3|3|43|543|543|4543|4543|86|87|TSAAAA|WSMAAA|OOOOxx
+1699|8603|1|3|9|19|99|699|1699|1699|1699|198|199|JNAAAA|XSMAAA|VVVVxx
+3771|8604|1|3|1|11|71|771|1771|3771|3771|142|143|BPAAAA|YSMAAA|AAAAxx
+1234|8605|0|2|4|14|34|234|1234|1234|1234|68|69|MVAAAA|ZSMAAA|HHHHxx
+4152|8606|0|0|2|12|52|152|152|4152|4152|104|105|SDAAAA|ATMAAA|OOOOxx
+1632|8607|0|0|2|12|32|632|1632|1632|1632|64|65|UKAAAA|BTMAAA|VVVVxx
+4988|8608|0|0|8|8|88|988|988|4988|4988|176|177|WJAAAA|CTMAAA|AAAAxx
+1980|8609|0|0|0|0|80|980|1980|1980|1980|160|161|EYAAAA|DTMAAA|HHHHxx
+7479|8610|1|3|9|19|79|479|1479|2479|7479|158|159|RBAAAA|ETMAAA|OOOOxx
+2586|8611|0|2|6|6|86|586|586|2586|2586|172|173|MVAAAA|FTMAAA|VVVVxx
+5433|8612|1|1|3|13|33|433|1433|433|5433|66|67|ZAAAAA|GTMAAA|AAAAxx
+2261|8613|1|1|1|1|61|261|261|2261|2261|122|123|ZIAAAA|HTMAAA|HHHHxx
+1180|8614|0|0|0|0|80|180|1180|1180|1180|160|161|KTAAAA|ITMAAA|OOOOxx
+3938|8615|0|2|8|18|38|938|1938|3938|3938|76|77|MVAAAA|JTMAAA|VVVVxx
+6714|8616|0|2|4|14|14|714|714|1714|6714|28|29|GYAAAA|KTMAAA|AAAAxx
+2890|8617|0|2|0|10|90|890|890|2890|2890|180|181|EHAAAA|LTMAAA|HHHHxx
+7379|8618|1|3|9|19|79|379|1379|2379|7379|158|159|VXAAAA|MTMAAA|OOOOxx
+5896|8619|0|0|6|16|96|896|1896|896|5896|192|193|USAAAA|NTMAAA|VVVVxx
+5949|8620|1|1|9|9|49|949|1949|949|5949|98|99|VUAAAA|OTMAAA|AAAAxx
+3194|8621|0|2|4|14|94|194|1194|3194|3194|188|189|WSAAAA|PTMAAA|HHHHxx
+9325|8622|1|1|5|5|25|325|1325|4325|9325|50|51|RUAAAA|QTMAAA|OOOOxx
+9531|8623|1|3|1|11|31|531|1531|4531|9531|62|63|PCAAAA|RTMAAA|VVVVxx
+711|8624|1|3|1|11|11|711|711|711|711|22|23|JBAAAA|STMAAA|AAAAxx
+2450|8625|0|2|0|10|50|450|450|2450|2450|100|101|GQAAAA|TTMAAA|HHHHxx
+1929|8626|1|1|9|9|29|929|1929|1929|1929|58|59|FWAAAA|UTMAAA|OOOOxx
+6165|8627|1|1|5|5|65|165|165|1165|6165|130|131|DDAAAA|VTMAAA|VVVVxx
+4050|8628|0|2|0|10|50|50|50|4050|4050|100|101|UZAAAA|WTMAAA|AAAAxx
+9011|8629|1|3|1|11|11|11|1011|4011|9011|22|23|PIAAAA|XTMAAA|HHHHxx
+7916|8630|0|0|6|16|16|916|1916|2916|7916|32|33|MSAAAA|YTMAAA|OOOOxx
+9136|8631|0|0|6|16|36|136|1136|4136|9136|72|73|KNAAAA|ZTMAAA|VVVVxx
+8782|8632|0|2|2|2|82|782|782|3782|8782|164|165|UZAAAA|AUMAAA|AAAAxx
+8491|8633|1|3|1|11|91|491|491|3491|8491|182|183|POAAAA|BUMAAA|HHHHxx
+5114|8634|0|2|4|14|14|114|1114|114|5114|28|29|SOAAAA|CUMAAA|OOOOxx
+5815|8635|1|3|5|15|15|815|1815|815|5815|30|31|RPAAAA|DUMAAA|VVVVxx
+5628|8636|0|0|8|8|28|628|1628|628|5628|56|57|MIAAAA|EUMAAA|AAAAxx
+810|8637|0|2|0|10|10|810|810|810|810|20|21|EFAAAA|FUMAAA|HHHHxx
+6178|8638|0|2|8|18|78|178|178|1178|6178|156|157|QDAAAA|GUMAAA|OOOOxx
+2619|8639|1|3|9|19|19|619|619|2619|2619|38|39|TWAAAA|HUMAAA|VVVVxx
+3340|8640|0|0|0|0|40|340|1340|3340|3340|80|81|MYAAAA|IUMAAA|AAAAxx
+2491|8641|1|3|1|11|91|491|491|2491|2491|182|183|VRAAAA|JUMAAA|HHHHxx
+3574|8642|0|2|4|14|74|574|1574|3574|3574|148|149|MHAAAA|KUMAAA|OOOOxx
+6754|8643|0|2|4|14|54|754|754|1754|6754|108|109|UZAAAA|LUMAAA|VVVVxx
+1566|8644|0|2|6|6|66|566|1566|1566|1566|132|133|GIAAAA|MUMAAA|AAAAxx
+9174|8645|0|2|4|14|74|174|1174|4174|9174|148|149|WOAAAA|NUMAAA|HHHHxx
+1520|8646|0|0|0|0|20|520|1520|1520|1520|40|41|MGAAAA|OUMAAA|OOOOxx
+2691|8647|1|3|1|11|91|691|691|2691|2691|182|183|NZAAAA|PUMAAA|VVVVxx
+6961|8648|1|1|1|1|61|961|961|1961|6961|122|123|THAAAA|QUMAAA|AAAAxx
+5722|8649|0|2|2|2|22|722|1722|722|5722|44|45|CMAAAA|RUMAAA|HHHHxx
+9707|8650|1|3|7|7|7|707|1707|4707|9707|14|15|JJAAAA|SUMAAA|OOOOxx
+2891|8651|1|3|1|11|91|891|891|2891|2891|182|183|FHAAAA|TUMAAA|VVVVxx
+341|8652|1|1|1|1|41|341|341|341|341|82|83|DNAAAA|UUMAAA|AAAAxx
+4690|8653|0|2|0|10|90|690|690|4690|4690|180|181|KYAAAA|VUMAAA|HHHHxx
+7841|8654|1|1|1|1|41|841|1841|2841|7841|82|83|PPAAAA|WUMAAA|OOOOxx
+6615|8655|1|3|5|15|15|615|615|1615|6615|30|31|LUAAAA|XUMAAA|VVVVxx
+9169|8656|1|1|9|9|69|169|1169|4169|9169|138|139|ROAAAA|YUMAAA|AAAAxx
+6689|8657|1|1|9|9|89|689|689|1689|6689|178|179|HXAAAA|ZUMAAA|HHHHxx
+8721|8658|1|1|1|1|21|721|721|3721|8721|42|43|LXAAAA|AVMAAA|OOOOxx
+7508|8659|0|0|8|8|8|508|1508|2508|7508|16|17|UCAAAA|BVMAAA|VVVVxx
+8631|8660|1|3|1|11|31|631|631|3631|8631|62|63|ZTAAAA|CVMAAA|AAAAxx
+480|8661|0|0|0|0|80|480|480|480|480|160|161|MSAAAA|DVMAAA|HHHHxx
+7094|8662|0|2|4|14|94|94|1094|2094|7094|188|189|WMAAAA|EVMAAA|OOOOxx
+319|8663|1|3|9|19|19|319|319|319|319|38|39|HMAAAA|FVMAAA|VVVVxx
+9421|8664|1|1|1|1|21|421|1421|4421|9421|42|43|JYAAAA|GVMAAA|AAAAxx
+4352|8665|0|0|2|12|52|352|352|4352|4352|104|105|KLAAAA|HVMAAA|HHHHxx
+5019|8666|1|3|9|19|19|19|1019|19|5019|38|39|BLAAAA|IVMAAA|OOOOxx
+3956|8667|0|0|6|16|56|956|1956|3956|3956|112|113|EWAAAA|JVMAAA|VVVVxx
+114|8668|0|2|4|14|14|114|114|114|114|28|29|KEAAAA|KVMAAA|AAAAxx
+1196|8669|0|0|6|16|96|196|1196|1196|1196|192|193|AUAAAA|LVMAAA|HHHHxx
+1407|8670|1|3|7|7|7|407|1407|1407|1407|14|15|DCAAAA|MVMAAA|OOOOxx
+7432|8671|0|0|2|12|32|432|1432|2432|7432|64|65|WZAAAA|NVMAAA|VVVVxx
+3141|8672|1|1|1|1|41|141|1141|3141|3141|82|83|VQAAAA|OVMAAA|AAAAxx
+2073|8673|1|1|3|13|73|73|73|2073|2073|146|147|TBAAAA|PVMAAA|HHHHxx
+3400|8674|0|0|0|0|0|400|1400|3400|3400|0|1|UAAAAA|QVMAAA|OOOOxx
+505|8675|1|1|5|5|5|505|505|505|505|10|11|LTAAAA|RVMAAA|VVVVxx
+1263|8676|1|3|3|3|63|263|1263|1263|1263|126|127|PWAAAA|SVMAAA|AAAAxx
+190|8677|0|2|0|10|90|190|190|190|190|180|181|IHAAAA|TVMAAA|HHHHxx
+6686|8678|0|2|6|6|86|686|686|1686|6686|172|173|EXAAAA|UVMAAA|OOOOxx
+9821|8679|1|1|1|1|21|821|1821|4821|9821|42|43|TNAAAA|VVMAAA|VVVVxx
+1119|8680|1|3|9|19|19|119|1119|1119|1119|38|39|BRAAAA|WVMAAA|AAAAxx
+2955|8681|1|3|5|15|55|955|955|2955|2955|110|111|RJAAAA|XVMAAA|HHHHxx
+224|8682|0|0|4|4|24|224|224|224|224|48|49|QIAAAA|YVMAAA|OOOOxx
+7562|8683|0|2|2|2|62|562|1562|2562|7562|124|125|WEAAAA|ZVMAAA|VVVVxx
+8845|8684|1|1|5|5|45|845|845|3845|8845|90|91|FCAAAA|AWMAAA|AAAAxx
+5405|8685|1|1|5|5|5|405|1405|405|5405|10|11|XZAAAA|BWMAAA|HHHHxx
+9192|8686|0|0|2|12|92|192|1192|4192|9192|184|185|OPAAAA|CWMAAA|OOOOxx
+4927|8687|1|3|7|7|27|927|927|4927|4927|54|55|NHAAAA|DWMAAA|VVVVxx
+997|8688|1|1|7|17|97|997|997|997|997|194|195|JMAAAA|EWMAAA|AAAAxx
+989|8689|1|1|9|9|89|989|989|989|989|178|179|BMAAAA|FWMAAA|HHHHxx
+7258|8690|0|2|8|18|58|258|1258|2258|7258|116|117|ETAAAA|GWMAAA|OOOOxx
+6899|8691|1|3|9|19|99|899|899|1899|6899|198|199|JFAAAA|HWMAAA|VVVVxx
+1770|8692|0|2|0|10|70|770|1770|1770|1770|140|141|CQAAAA|IWMAAA|AAAAxx
+4423|8693|1|3|3|3|23|423|423|4423|4423|46|47|DOAAAA|JWMAAA|HHHHxx
+5671|8694|1|3|1|11|71|671|1671|671|5671|142|143|DKAAAA|KWMAAA|OOOOxx
+8393|8695|1|1|3|13|93|393|393|3393|8393|186|187|VKAAAA|LWMAAA|VVVVxx
+4355|8696|1|3|5|15|55|355|355|4355|4355|110|111|NLAAAA|MWMAAA|AAAAxx
+3919|8697|1|3|9|19|19|919|1919|3919|3919|38|39|TUAAAA|NWMAAA|HHHHxx
+338|8698|0|2|8|18|38|338|338|338|338|76|77|ANAAAA|OWMAAA|OOOOxx
+5790|8699|0|2|0|10|90|790|1790|790|5790|180|181|SOAAAA|PWMAAA|VVVVxx
+1452|8700|0|0|2|12|52|452|1452|1452|1452|104|105|WDAAAA|QWMAAA|AAAAxx
+939|8701|1|3|9|19|39|939|939|939|939|78|79|DKAAAA|RWMAAA|HHHHxx
+8913|8702|1|1|3|13|13|913|913|3913|8913|26|27|VEAAAA|SWMAAA|OOOOxx
+7157|8703|1|1|7|17|57|157|1157|2157|7157|114|115|HPAAAA|TWMAAA|VVVVxx
+7240|8704|0|0|0|0|40|240|1240|2240|7240|80|81|MSAAAA|UWMAAA|AAAAxx
+3492|8705|0|0|2|12|92|492|1492|3492|3492|184|185|IEAAAA|VWMAAA|HHHHxx
+3464|8706|0|0|4|4|64|464|1464|3464|3464|128|129|GDAAAA|WWMAAA|OOOOxx
+388|8707|0|0|8|8|88|388|388|388|388|176|177|YOAAAA|XWMAAA|VVVVxx
+4135|8708|1|3|5|15|35|135|135|4135|4135|70|71|BDAAAA|YWMAAA|AAAAxx
+1194|8709|0|2|4|14|94|194|1194|1194|1194|188|189|YTAAAA|ZWMAAA|HHHHxx
+5476|8710|0|0|6|16|76|476|1476|476|5476|152|153|QCAAAA|AXMAAA|OOOOxx
+9844|8711|0|0|4|4|44|844|1844|4844|9844|88|89|QOAAAA|BXMAAA|VVVVxx
+9364|8712|0|0|4|4|64|364|1364|4364|9364|128|129|EWAAAA|CXMAAA|AAAAxx
+5238|8713|0|2|8|18|38|238|1238|238|5238|76|77|MTAAAA|DXMAAA|HHHHxx
+3712|8714|0|0|2|12|12|712|1712|3712|3712|24|25|UMAAAA|EXMAAA|OOOOxx
+6189|8715|1|1|9|9|89|189|189|1189|6189|178|179|BEAAAA|FXMAAA|VVVVxx
+5257|8716|1|1|7|17|57|257|1257|257|5257|114|115|FUAAAA|GXMAAA|AAAAxx
+81|8717|1|1|1|1|81|81|81|81|81|162|163|DDAAAA|HXMAAA|HHHHxx
+3289|8718|1|1|9|9|89|289|1289|3289|3289|178|179|NWAAAA|IXMAAA|OOOOxx
+1177|8719|1|1|7|17|77|177|1177|1177|1177|154|155|HTAAAA|JXMAAA|VVVVxx
+5038|8720|0|2|8|18|38|38|1038|38|5038|76|77|ULAAAA|KXMAAA|AAAAxx
+325|8721|1|1|5|5|25|325|325|325|325|50|51|NMAAAA|LXMAAA|HHHHxx
+7221|8722|1|1|1|1|21|221|1221|2221|7221|42|43|TRAAAA|MXMAAA|OOOOxx
+7123|8723|1|3|3|3|23|123|1123|2123|7123|46|47|ZNAAAA|NXMAAA|VVVVxx
+6364|8724|0|0|4|4|64|364|364|1364|6364|128|129|UKAAAA|OXMAAA|AAAAxx
+4468|8725|0|0|8|8|68|468|468|4468|4468|136|137|WPAAAA|PXMAAA|HHHHxx
+9185|8726|1|1|5|5|85|185|1185|4185|9185|170|171|HPAAAA|QXMAAA|OOOOxx
+4158|8727|0|2|8|18|58|158|158|4158|4158|116|117|YDAAAA|RXMAAA|VVVVxx
+9439|8728|1|3|9|19|39|439|1439|4439|9439|78|79|BZAAAA|SXMAAA|AAAAxx
+7759|8729|1|3|9|19|59|759|1759|2759|7759|118|119|LMAAAA|TXMAAA|HHHHxx
+3325|8730|1|1|5|5|25|325|1325|3325|3325|50|51|XXAAAA|UXMAAA|OOOOxx
+7991|8731|1|3|1|11|91|991|1991|2991|7991|182|183|JVAAAA|VXMAAA|VVVVxx
+1650|8732|0|2|0|10|50|650|1650|1650|1650|100|101|MLAAAA|WXMAAA|AAAAxx
+8395|8733|1|3|5|15|95|395|395|3395|8395|190|191|XKAAAA|XXMAAA|HHHHxx
+286|8734|0|2|6|6|86|286|286|286|286|172|173|ALAAAA|YXMAAA|OOOOxx
+1507|8735|1|3|7|7|7|507|1507|1507|1507|14|15|ZFAAAA|ZXMAAA|VVVVxx
+4122|8736|0|2|2|2|22|122|122|4122|4122|44|45|OCAAAA|AYMAAA|AAAAxx
+2625|8737|1|1|5|5|25|625|625|2625|2625|50|51|ZWAAAA|BYMAAA|HHHHxx
+1140|8738|0|0|0|0|40|140|1140|1140|1140|80|81|WRAAAA|CYMAAA|OOOOxx
+5262|8739|0|2|2|2|62|262|1262|262|5262|124|125|KUAAAA|DYMAAA|VVVVxx
+4919|8740|1|3|9|19|19|919|919|4919|4919|38|39|FHAAAA|EYMAAA|AAAAxx
+7266|8741|0|2|6|6|66|266|1266|2266|7266|132|133|MTAAAA|FYMAAA|HHHHxx
+630|8742|0|2|0|10|30|630|630|630|630|60|61|GYAAAA|GYMAAA|OOOOxx
+2129|8743|1|1|9|9|29|129|129|2129|2129|58|59|XDAAAA|HYMAAA|VVVVxx
+9552|8744|0|0|2|12|52|552|1552|4552|9552|104|105|KDAAAA|IYMAAA|AAAAxx
+3018|8745|0|2|8|18|18|18|1018|3018|3018|36|37|CMAAAA|JYMAAA|HHHHxx
+7145|8746|1|1|5|5|45|145|1145|2145|7145|90|91|VOAAAA|KYMAAA|OOOOxx
+1633|8747|1|1|3|13|33|633|1633|1633|1633|66|67|VKAAAA|LYMAAA|VVVVxx
+7957|8748|1|1|7|17|57|957|1957|2957|7957|114|115|BUAAAA|MYMAAA|AAAAxx
+774|8749|0|2|4|14|74|774|774|774|774|148|149|UDAAAA|NYMAAA|HHHHxx
+9371|8750|1|3|1|11|71|371|1371|4371|9371|142|143|LWAAAA|OYMAAA|OOOOxx
+6007|8751|1|3|7|7|7|7|7|1007|6007|14|15|BXAAAA|PYMAAA|VVVVxx
+5277|8752|1|1|7|17|77|277|1277|277|5277|154|155|ZUAAAA|QYMAAA|AAAAxx
+9426|8753|0|2|6|6|26|426|1426|4426|9426|52|53|OYAAAA|RYMAAA|HHHHxx
+9190|8754|0|2|0|10|90|190|1190|4190|9190|180|181|MPAAAA|SYMAAA|OOOOxx
+8996|8755|0|0|6|16|96|996|996|3996|8996|192|193|AIAAAA|TYMAAA|VVVVxx
+3409|8756|1|1|9|9|9|409|1409|3409|3409|18|19|DBAAAA|UYMAAA|AAAAxx
+7212|8757|0|0|2|12|12|212|1212|2212|7212|24|25|KRAAAA|VYMAAA|HHHHxx
+416|8758|0|0|6|16|16|416|416|416|416|32|33|AQAAAA|WYMAAA|OOOOxx
+7211|8759|1|3|1|11|11|211|1211|2211|7211|22|23|JRAAAA|XYMAAA|VVVVxx
+7454|8760|0|2|4|14|54|454|1454|2454|7454|108|109|SAAAAA|YYMAAA|AAAAxx
+8417|8761|1|1|7|17|17|417|417|3417|8417|34|35|TLAAAA|ZYMAAA|HHHHxx
+5562|8762|0|2|2|2|62|562|1562|562|5562|124|125|YFAAAA|AZMAAA|OOOOxx
+4996|8763|0|0|6|16|96|996|996|4996|4996|192|193|EKAAAA|BZMAAA|VVVVxx
+5718|8764|0|2|8|18|18|718|1718|718|5718|36|37|YLAAAA|CZMAAA|AAAAxx
+7838|8765|0|2|8|18|38|838|1838|2838|7838|76|77|MPAAAA|DZMAAA|HHHHxx
+7715|8766|1|3|5|15|15|715|1715|2715|7715|30|31|TKAAAA|EZMAAA|OOOOxx
+2780|8767|0|0|0|0|80|780|780|2780|2780|160|161|YCAAAA|FZMAAA|VVVVxx
+1013|8768|1|1|3|13|13|13|1013|1013|1013|26|27|ZMAAAA|GZMAAA|AAAAxx
+8465|8769|1|1|5|5|65|465|465|3465|8465|130|131|PNAAAA|HZMAAA|HHHHxx
+7976|8770|0|0|6|16|76|976|1976|2976|7976|152|153|UUAAAA|IZMAAA|OOOOxx
+7150|8771|0|2|0|10|50|150|1150|2150|7150|100|101|APAAAA|JZMAAA|VVVVxx
+6471|8772|1|3|1|11|71|471|471|1471|6471|142|143|XOAAAA|KZMAAA|AAAAxx
+1927|8773|1|3|7|7|27|927|1927|1927|1927|54|55|DWAAAA|LZMAAA|HHHHxx
+227|8774|1|3|7|7|27|227|227|227|227|54|55|TIAAAA|MZMAAA|OOOOxx
+6462|8775|0|2|2|2|62|462|462|1462|6462|124|125|OOAAAA|NZMAAA|VVVVxx
+5227|8776|1|3|7|7|27|227|1227|227|5227|54|55|BTAAAA|OZMAAA|AAAAxx
+1074|8777|0|2|4|14|74|74|1074|1074|1074|148|149|IPAAAA|PZMAAA|HHHHxx
+9448|8778|0|0|8|8|48|448|1448|4448|9448|96|97|KZAAAA|QZMAAA|OOOOxx
+4459|8779|1|3|9|19|59|459|459|4459|4459|118|119|NPAAAA|RZMAAA|VVVVxx
+2478|8780|0|2|8|18|78|478|478|2478|2478|156|157|IRAAAA|SZMAAA|AAAAxx
+5005|8781|1|1|5|5|5|5|1005|5|5005|10|11|NKAAAA|TZMAAA|HHHHxx
+2418|8782|0|2|8|18|18|418|418|2418|2418|36|37|APAAAA|UZMAAA|OOOOxx
+6991|8783|1|3|1|11|91|991|991|1991|6991|182|183|XIAAAA|VZMAAA|VVVVxx
+4729|8784|1|1|9|9|29|729|729|4729|4729|58|59|XZAAAA|WZMAAA|AAAAxx
+3548|8785|0|0|8|8|48|548|1548|3548|3548|96|97|MGAAAA|XZMAAA|HHHHxx
+9616|8786|0|0|6|16|16|616|1616|4616|9616|32|33|WFAAAA|YZMAAA|OOOOxx
+2901|8787|1|1|1|1|1|901|901|2901|2901|2|3|PHAAAA|ZZMAAA|VVVVxx
+10|8788|0|2|0|10|10|10|10|10|10|20|21|KAAAAA|AANAAA|AAAAxx
+2637|8789|1|1|7|17|37|637|637|2637|2637|74|75|LXAAAA|BANAAA|HHHHxx
+6747|8790|1|3|7|7|47|747|747|1747|6747|94|95|NZAAAA|CANAAA|OOOOxx
+797|8791|1|1|7|17|97|797|797|797|797|194|195|REAAAA|DANAAA|VVVVxx
+7609|8792|1|1|9|9|9|609|1609|2609|7609|18|19|RGAAAA|EANAAA|AAAAxx
+8290|8793|0|2|0|10|90|290|290|3290|8290|180|181|WGAAAA|FANAAA|HHHHxx
+8765|8794|1|1|5|5|65|765|765|3765|8765|130|131|DZAAAA|GANAAA|OOOOxx
+8053|8795|1|1|3|13|53|53|53|3053|8053|106|107|TXAAAA|HANAAA|VVVVxx
+5602|8796|0|2|2|2|2|602|1602|602|5602|4|5|MHAAAA|IANAAA|AAAAxx
+3672|8797|0|0|2|12|72|672|1672|3672|3672|144|145|GLAAAA|JANAAA|HHHHxx
+7513|8798|1|1|3|13|13|513|1513|2513|7513|26|27|ZCAAAA|KANAAA|OOOOxx
+3462|8799|0|2|2|2|62|462|1462|3462|3462|124|125|EDAAAA|LANAAA|VVVVxx
+4457|8800|1|1|7|17|57|457|457|4457|4457|114|115|LPAAAA|MANAAA|AAAAxx
+6547|8801|1|3|7|7|47|547|547|1547|6547|94|95|VRAAAA|NANAAA|HHHHxx
+7417|8802|1|1|7|17|17|417|1417|2417|7417|34|35|HZAAAA|OANAAA|OOOOxx
+8641|8803|1|1|1|1|41|641|641|3641|8641|82|83|JUAAAA|PANAAA|VVVVxx
+149|8804|1|1|9|9|49|149|149|149|149|98|99|TFAAAA|QANAAA|AAAAxx
+5041|8805|1|1|1|1|41|41|1041|41|5041|82|83|XLAAAA|RANAAA|HHHHxx
+9232|8806|0|0|2|12|32|232|1232|4232|9232|64|65|CRAAAA|SANAAA|OOOOxx
+3603|8807|1|3|3|3|3|603|1603|3603|3603|6|7|PIAAAA|TANAAA|VVVVxx
+2792|8808|0|0|2|12|92|792|792|2792|2792|184|185|KDAAAA|UANAAA|AAAAxx
+6620|8809|0|0|0|0|20|620|620|1620|6620|40|41|QUAAAA|VANAAA|HHHHxx
+4000|8810|0|0|0|0|0|0|0|4000|4000|0|1|WXAAAA|WANAAA|OOOOxx
+659|8811|1|3|9|19|59|659|659|659|659|118|119|JZAAAA|XANAAA|VVVVxx
+8174|8812|0|2|4|14|74|174|174|3174|8174|148|149|KCAAAA|YANAAA|AAAAxx
+4599|8813|1|3|9|19|99|599|599|4599|4599|198|199|XUAAAA|ZANAAA|HHHHxx
+7851|8814|1|3|1|11|51|851|1851|2851|7851|102|103|ZPAAAA|ABNAAA|OOOOxx
+6284|8815|0|0|4|4|84|284|284|1284|6284|168|169|SHAAAA|BBNAAA|VVVVxx
+7116|8816|0|0|6|16|16|116|1116|2116|7116|32|33|SNAAAA|CBNAAA|AAAAxx
+5595|8817|1|3|5|15|95|595|1595|595|5595|190|191|FHAAAA|DBNAAA|HHHHxx
+2903|8818|1|3|3|3|3|903|903|2903|2903|6|7|RHAAAA|EBNAAA|OOOOxx
+5948|8819|0|0|8|8|48|948|1948|948|5948|96|97|UUAAAA|FBNAAA|VVVVxx
+225|8820|1|1|5|5|25|225|225|225|225|50|51|RIAAAA|GBNAAA|AAAAxx
+524|8821|0|0|4|4|24|524|524|524|524|48|49|EUAAAA|HBNAAA|HHHHxx
+7639|8822|1|3|9|19|39|639|1639|2639|7639|78|79|VHAAAA|IBNAAA|OOOOxx
+7297|8823|1|1|7|17|97|297|1297|2297|7297|194|195|RUAAAA|JBNAAA|VVVVxx
+2606|8824|0|2|6|6|6|606|606|2606|2606|12|13|GWAAAA|KBNAAA|AAAAxx
+4771|8825|1|3|1|11|71|771|771|4771|4771|142|143|NBAAAA|LBNAAA|HHHHxx
+8162|8826|0|2|2|2|62|162|162|3162|8162|124|125|YBAAAA|MBNAAA|OOOOxx
+8999|8827|1|3|9|19|99|999|999|3999|8999|198|199|DIAAAA|NBNAAA|VVVVxx
+2309|8828|1|1|9|9|9|309|309|2309|2309|18|19|VKAAAA|OBNAAA|AAAAxx
+3594|8829|0|2|4|14|94|594|1594|3594|3594|188|189|GIAAAA|PBNAAA|HHHHxx
+6092|8830|0|0|2|12|92|92|92|1092|6092|184|185|IAAAAA|QBNAAA|OOOOxx
+7467|8831|1|3|7|7|67|467|1467|2467|7467|134|135|FBAAAA|RBNAAA|VVVVxx
+6986|8832|0|2|6|6|86|986|986|1986|6986|172|173|SIAAAA|SBNAAA|AAAAxx
+9898|8833|0|2|8|18|98|898|1898|4898|9898|196|197|SQAAAA|TBNAAA|HHHHxx
+9578|8834|0|2|8|18|78|578|1578|4578|9578|156|157|KEAAAA|UBNAAA|OOOOxx
+156|8835|0|0|6|16|56|156|156|156|156|112|113|AGAAAA|VBNAAA|VVVVxx
+5810|8836|0|2|0|10|10|810|1810|810|5810|20|21|MPAAAA|WBNAAA|AAAAxx
+790|8837|0|2|0|10|90|790|790|790|790|180|181|KEAAAA|XBNAAA|HHHHxx
+6840|8838|0|0|0|0|40|840|840|1840|6840|80|81|CDAAAA|YBNAAA|OOOOxx
+6725|8839|1|1|5|5|25|725|725|1725|6725|50|51|RYAAAA|ZBNAAA|VVVVxx
+5528|8840|0|0|8|8|28|528|1528|528|5528|56|57|QEAAAA|ACNAAA|AAAAxx
+4120|8841|0|0|0|0|20|120|120|4120|4120|40|41|MCAAAA|BCNAAA|HHHHxx
+6694|8842|0|2|4|14|94|694|694|1694|6694|188|189|MXAAAA|CCNAAA|OOOOxx
+3552|8843|0|0|2|12|52|552|1552|3552|3552|104|105|QGAAAA|DCNAAA|VVVVxx
+1478|8844|0|2|8|18|78|478|1478|1478|1478|156|157|WEAAAA|ECNAAA|AAAAxx
+8084|8845|0|0|4|4|84|84|84|3084|8084|168|169|YYAAAA|FCNAAA|HHHHxx
+7578|8846|0|2|8|18|78|578|1578|2578|7578|156|157|MFAAAA|GCNAAA|OOOOxx
+6314|8847|0|2|4|14|14|314|314|1314|6314|28|29|WIAAAA|HCNAAA|VVVVxx
+6123|8848|1|3|3|3|23|123|123|1123|6123|46|47|NBAAAA|ICNAAA|AAAAxx
+9443|8849|1|3|3|3|43|443|1443|4443|9443|86|87|FZAAAA|JCNAAA|HHHHxx
+9628|8850|0|0|8|8|28|628|1628|4628|9628|56|57|IGAAAA|KCNAAA|OOOOxx
+8508|8851|0|0|8|8|8|508|508|3508|8508|16|17|GPAAAA|LCNAAA|VVVVxx
+5552|8852|0|0|2|12|52|552|1552|552|5552|104|105|OFAAAA|MCNAAA|AAAAxx
+5327|8853|1|3|7|7|27|327|1327|327|5327|54|55|XWAAAA|NCNAAA|HHHHxx
+7771|8854|1|3|1|11|71|771|1771|2771|7771|142|143|XMAAAA|OCNAAA|OOOOxx
+8932|8855|0|0|2|12|32|932|932|3932|8932|64|65|OFAAAA|PCNAAA|VVVVxx
+3526|8856|0|2|6|6|26|526|1526|3526|3526|52|53|QFAAAA|QCNAAA|AAAAxx
+4340|8857|0|0|0|0|40|340|340|4340|4340|80|81|YKAAAA|RCNAAA|HHHHxx
+9419|8858|1|3|9|19|19|419|1419|4419|9419|38|39|HYAAAA|SCNAAA|OOOOxx
+8421|8859|1|1|1|1|21|421|421|3421|8421|42|43|XLAAAA|TCNAAA|VVVVxx
+7431|8860|1|3|1|11|31|431|1431|2431|7431|62|63|VZAAAA|UCNAAA|AAAAxx
+172|8861|0|0|2|12|72|172|172|172|172|144|145|QGAAAA|VCNAAA|HHHHxx
+3279|8862|1|3|9|19|79|279|1279|3279|3279|158|159|DWAAAA|WCNAAA|OOOOxx
+1508|8863|0|0|8|8|8|508|1508|1508|1508|16|17|AGAAAA|XCNAAA|VVVVxx
+7091|8864|1|3|1|11|91|91|1091|2091|7091|182|183|TMAAAA|YCNAAA|AAAAxx
+1419|8865|1|3|9|19|19|419|1419|1419|1419|38|39|PCAAAA|ZCNAAA|HHHHxx
+3032|8866|0|0|2|12|32|32|1032|3032|3032|64|65|QMAAAA|ADNAAA|OOOOxx
+8683|8867|1|3|3|3|83|683|683|3683|8683|166|167|ZVAAAA|BDNAAA|VVVVxx
+4763|8868|1|3|3|3|63|763|763|4763|4763|126|127|FBAAAA|CDNAAA|AAAAxx
+4424|8869|0|0|4|4|24|424|424|4424|4424|48|49|EOAAAA|DDNAAA|HHHHxx
+8640|8870|0|0|0|0|40|640|640|3640|8640|80|81|IUAAAA|EDNAAA|OOOOxx
+7187|8871|1|3|7|7|87|187|1187|2187|7187|174|175|LQAAAA|FDNAAA|VVVVxx
+6247|8872|1|3|7|7|47|247|247|1247|6247|94|95|HGAAAA|GDNAAA|AAAAxx
+7340|8873|0|0|0|0|40|340|1340|2340|7340|80|81|IWAAAA|HDNAAA|HHHHxx
+182|8874|0|2|2|2|82|182|182|182|182|164|165|AHAAAA|IDNAAA|OOOOxx
+2948|8875|0|0|8|8|48|948|948|2948|2948|96|97|KJAAAA|JDNAAA|VVVVxx
+9462|8876|0|2|2|2|62|462|1462|4462|9462|124|125|YZAAAA|KDNAAA|AAAAxx
+5997|8877|1|1|7|17|97|997|1997|997|5997|194|195|RWAAAA|LDNAAA|HHHHxx
+5608|8878|0|0|8|8|8|608|1608|608|5608|16|17|SHAAAA|MDNAAA|OOOOxx
+1472|8879|0|0|2|12|72|472|1472|1472|1472|144|145|QEAAAA|NDNAAA|VVVVxx
+277|8880|1|1|7|17|77|277|277|277|277|154|155|RKAAAA|ODNAAA|AAAAxx
+4807|8881|1|3|7|7|7|807|807|4807|4807|14|15|XCAAAA|PDNAAA|HHHHxx
+4969|8882|1|1|9|9|69|969|969|4969|4969|138|139|DJAAAA|QDNAAA|OOOOxx
+5611|8883|1|3|1|11|11|611|1611|611|5611|22|23|VHAAAA|RDNAAA|VVVVxx
+372|8884|0|0|2|12|72|372|372|372|372|144|145|IOAAAA|SDNAAA|AAAAxx
+6666|8885|0|2|6|6|66|666|666|1666|6666|132|133|KWAAAA|TDNAAA|HHHHxx
+476|8886|0|0|6|16|76|476|476|476|476|152|153|ISAAAA|UDNAAA|OOOOxx
+5225|8887|1|1|5|5|25|225|1225|225|5225|50|51|ZSAAAA|VDNAAA|VVVVxx
+5143|8888|1|3|3|3|43|143|1143|143|5143|86|87|VPAAAA|WDNAAA|AAAAxx
+1853|8889|1|1|3|13|53|853|1853|1853|1853|106|107|HTAAAA|XDNAAA|HHHHxx
+675|8890|1|3|5|15|75|675|675|675|675|150|151|ZZAAAA|YDNAAA|OOOOxx
+5643|8891|1|3|3|3|43|643|1643|643|5643|86|87|BJAAAA|ZDNAAA|VVVVxx
+5317|8892|1|1|7|17|17|317|1317|317|5317|34|35|NWAAAA|AENAAA|AAAAxx
+8102|8893|0|2|2|2|2|102|102|3102|8102|4|5|QZAAAA|BENAAA|HHHHxx
+978|8894|0|2|8|18|78|978|978|978|978|156|157|QLAAAA|CENAAA|OOOOxx
+4620|8895|0|0|0|0|20|620|620|4620|4620|40|41|SVAAAA|DENAAA|VVVVxx
+151|8896|1|3|1|11|51|151|151|151|151|102|103|VFAAAA|EENAAA|AAAAxx
+972|8897|0|0|2|12|72|972|972|972|972|144|145|KLAAAA|FENAAA|HHHHxx
+6820|8898|0|0|0|0|20|820|820|1820|6820|40|41|ICAAAA|GENAAA|OOOOxx
+7387|8899|1|3|7|7|87|387|1387|2387|7387|174|175|DYAAAA|HENAAA|VVVVxx
+9634|8900|0|2|4|14|34|634|1634|4634|9634|68|69|OGAAAA|IENAAA|AAAAxx
+6308|8901|0|0|8|8|8|308|308|1308|6308|16|17|QIAAAA|JENAAA|HHHHxx
+8323|8902|1|3|3|3|23|323|323|3323|8323|46|47|DIAAAA|KENAAA|OOOOxx
+6672|8903|0|0|2|12|72|672|672|1672|6672|144|145|QWAAAA|LENAAA|VVVVxx
+8283|8904|1|3|3|3|83|283|283|3283|8283|166|167|PGAAAA|MENAAA|AAAAxx
+7996|8905|0|0|6|16|96|996|1996|2996|7996|192|193|OVAAAA|NENAAA|HHHHxx
+6488|8906|0|0|8|8|88|488|488|1488|6488|176|177|OPAAAA|OENAAA|OOOOxx
+2365|8907|1|1|5|5|65|365|365|2365|2365|130|131|ZMAAAA|PENAAA|VVVVxx
+9746|8908|0|2|6|6|46|746|1746|4746|9746|92|93|WKAAAA|QENAAA|AAAAxx
+8605|8909|1|1|5|5|5|605|605|3605|8605|10|11|ZSAAAA|RENAAA|HHHHxx
+3342|8910|0|2|2|2|42|342|1342|3342|3342|84|85|OYAAAA|SENAAA|OOOOxx
+8429|8911|1|1|9|9|29|429|429|3429|8429|58|59|FMAAAA|TENAAA|VVVVxx
+1162|8912|0|2|2|2|62|162|1162|1162|1162|124|125|SSAAAA|UENAAA|AAAAxx
+531|8913|1|3|1|11|31|531|531|531|531|62|63|LUAAAA|VENAAA|HHHHxx
+8408|8914|0|0|8|8|8|408|408|3408|8408|16|17|KLAAAA|WENAAA|OOOOxx
+8862|8915|0|2|2|2|62|862|862|3862|8862|124|125|WCAAAA|XENAAA|VVVVxx
+5843|8916|1|3|3|3|43|843|1843|843|5843|86|87|TQAAAA|YENAAA|AAAAxx
+8704|8917|0|0|4|4|4|704|704|3704|8704|8|9|UWAAAA|ZENAAA|HHHHxx
+7070|8918|0|2|0|10|70|70|1070|2070|7070|140|141|YLAAAA|AFNAAA|OOOOxx
+9119|8919|1|3|9|19|19|119|1119|4119|9119|38|39|TMAAAA|BFNAAA|VVVVxx
+8344|8920|0|0|4|4|44|344|344|3344|8344|88|89|YIAAAA|CFNAAA|AAAAxx
+8979|8921|1|3|9|19|79|979|979|3979|8979|158|159|JHAAAA|DFNAAA|HHHHxx
+2971|8922|1|3|1|11|71|971|971|2971|2971|142|143|HKAAAA|EFNAAA|OOOOxx
+7700|8923|0|0|0|0|0|700|1700|2700|7700|0|1|EKAAAA|FFNAAA|VVVVxx
+8280|8924|0|0|0|0|80|280|280|3280|8280|160|161|MGAAAA|GFNAAA|AAAAxx
+9096|8925|0|0|6|16|96|96|1096|4096|9096|192|193|WLAAAA|HFNAAA|HHHHxx
+99|8926|1|3|9|19|99|99|99|99|99|198|199|VDAAAA|IFNAAA|OOOOxx
+6696|8927|0|0|6|16|96|696|696|1696|6696|192|193|OXAAAA|JFNAAA|VVVVxx
+9490|8928|0|2|0|10|90|490|1490|4490|9490|180|181|ABAAAA|KFNAAA|AAAAxx
+9073|8929|1|1|3|13|73|73|1073|4073|9073|146|147|ZKAAAA|LFNAAA|HHHHxx
+1861|8930|1|1|1|1|61|861|1861|1861|1861|122|123|PTAAAA|MFNAAA|OOOOxx
+4413|8931|1|1|3|13|13|413|413|4413|4413|26|27|TNAAAA|NFNAAA|VVVVxx
+6002|8932|0|2|2|2|2|2|2|1002|6002|4|5|WWAAAA|OFNAAA|AAAAxx
+439|8933|1|3|9|19|39|439|439|439|439|78|79|XQAAAA|PFNAAA|HHHHxx
+5449|8934|1|1|9|9|49|449|1449|449|5449|98|99|PBAAAA|QFNAAA|OOOOxx
+9737|8935|1|1|7|17|37|737|1737|4737|9737|74|75|NKAAAA|RFNAAA|VVVVxx
+1898|8936|0|2|8|18|98|898|1898|1898|1898|196|197|AVAAAA|SFNAAA|AAAAxx
+4189|8937|1|1|9|9|89|189|189|4189|4189|178|179|DFAAAA|TFNAAA|HHHHxx
+1408|8938|0|0|8|8|8|408|1408|1408|1408|16|17|ECAAAA|UFNAAA|OOOOxx
+394|8939|0|2|4|14|94|394|394|394|394|188|189|EPAAAA|VFNAAA|VVVVxx
+1935|8940|1|3|5|15|35|935|1935|1935|1935|70|71|LWAAAA|WFNAAA|AAAAxx
+3965|8941|1|1|5|5|65|965|1965|3965|3965|130|131|NWAAAA|XFNAAA|HHHHxx
+6821|8942|1|1|1|1|21|821|821|1821|6821|42|43|JCAAAA|YFNAAA|OOOOxx
+349|8943|1|1|9|9|49|349|349|349|349|98|99|LNAAAA|ZFNAAA|VVVVxx
+8428|8944|0|0|8|8|28|428|428|3428|8428|56|57|EMAAAA|AGNAAA|AAAAxx
+8200|8945|0|0|0|0|0|200|200|3200|8200|0|1|KDAAAA|BGNAAA|HHHHxx
+1737|8946|1|1|7|17|37|737|1737|1737|1737|74|75|VOAAAA|CGNAAA|OOOOxx
+6516|8947|0|0|6|16|16|516|516|1516|6516|32|33|QQAAAA|DGNAAA|VVVVxx
+5441|8948|1|1|1|1|41|441|1441|441|5441|82|83|HBAAAA|EGNAAA|AAAAxx
+5999|8949|1|3|9|19|99|999|1999|999|5999|198|199|TWAAAA|FGNAAA|HHHHxx
+1539|8950|1|3|9|19|39|539|1539|1539|1539|78|79|FHAAAA|GGNAAA|OOOOxx
+9067|8951|1|3|7|7|67|67|1067|4067|9067|134|135|TKAAAA|HGNAAA|VVVVxx
+4061|8952|1|1|1|1|61|61|61|4061|4061|122|123|FAAAAA|IGNAAA|AAAAxx
+1642|8953|0|2|2|2|42|642|1642|1642|1642|84|85|ELAAAA|JGNAAA|HHHHxx
+4657|8954|1|1|7|17|57|657|657|4657|4657|114|115|DXAAAA|KGNAAA|OOOOxx
+9934|8955|0|2|4|14|34|934|1934|4934|9934|68|69|CSAAAA|LGNAAA|VVVVxx
+6385|8956|1|1|5|5|85|385|385|1385|6385|170|171|PLAAAA|MGNAAA|AAAAxx
+6775|8957|1|3|5|15|75|775|775|1775|6775|150|151|PAAAAA|NGNAAA|HHHHxx
+3873|8958|1|1|3|13|73|873|1873|3873|3873|146|147|ZSAAAA|OGNAAA|OOOOxx
+3862|8959|0|2|2|2|62|862|1862|3862|3862|124|125|OSAAAA|PGNAAA|VVVVxx
+1224|8960|0|0|4|4|24|224|1224|1224|1224|48|49|CVAAAA|QGNAAA|AAAAxx
+4483|8961|1|3|3|3|83|483|483|4483|4483|166|167|LQAAAA|RGNAAA|HHHHxx
+3685|8962|1|1|5|5|85|685|1685|3685|3685|170|171|TLAAAA|SGNAAA|OOOOxx
+6082|8963|0|2|2|2|82|82|82|1082|6082|164|165|YZAAAA|TGNAAA|VVVVxx
+7798|8964|0|2|8|18|98|798|1798|2798|7798|196|197|YNAAAA|UGNAAA|AAAAxx
+9039|8965|1|3|9|19|39|39|1039|4039|9039|78|79|RJAAAA|VGNAAA|HHHHxx
+985|8966|1|1|5|5|85|985|985|985|985|170|171|XLAAAA|WGNAAA|OOOOxx
+5389|8967|1|1|9|9|89|389|1389|389|5389|178|179|HZAAAA|XGNAAA|VVVVxx
+1716|8968|0|0|6|16|16|716|1716|1716|1716|32|33|AOAAAA|YGNAAA|AAAAxx
+4209|8969|1|1|9|9|9|209|209|4209|4209|18|19|XFAAAA|ZGNAAA|HHHHxx
+746|8970|0|2|6|6|46|746|746|746|746|92|93|SCAAAA|AHNAAA|OOOOxx
+6295|8971|1|3|5|15|95|295|295|1295|6295|190|191|DIAAAA|BHNAAA|VVVVxx
+9754|8972|0|2|4|14|54|754|1754|4754|9754|108|109|ELAAAA|CHNAAA|AAAAxx
+2336|8973|0|0|6|16|36|336|336|2336|2336|72|73|WLAAAA|DHNAAA|HHHHxx
+3701|8974|1|1|1|1|1|701|1701|3701|3701|2|3|JMAAAA|EHNAAA|OOOOxx
+3551|8975|1|3|1|11|51|551|1551|3551|3551|102|103|PGAAAA|FHNAAA|VVVVxx
+8516|8976|0|0|6|16|16|516|516|3516|8516|32|33|OPAAAA|GHNAAA|AAAAxx
+9290|8977|0|2|0|10|90|290|1290|4290|9290|180|181|ITAAAA|HHNAAA|HHHHxx
+5686|8978|0|2|6|6|86|686|1686|686|5686|172|173|SKAAAA|IHNAAA|OOOOxx
+2893|8979|1|1|3|13|93|893|893|2893|2893|186|187|HHAAAA|JHNAAA|VVVVxx
+6279|8980|1|3|9|19|79|279|279|1279|6279|158|159|NHAAAA|KHNAAA|AAAAxx
+2278|8981|0|2|8|18|78|278|278|2278|2278|156|157|QJAAAA|LHNAAA|HHHHxx
+1618|8982|0|2|8|18|18|618|1618|1618|1618|36|37|GKAAAA|MHNAAA|OOOOxx
+3450|8983|0|2|0|10|50|450|1450|3450|3450|100|101|SCAAAA|NHNAAA|VVVVxx
+8857|8984|1|1|7|17|57|857|857|3857|8857|114|115|RCAAAA|OHNAAA|AAAAxx
+1005|8985|1|1|5|5|5|5|1005|1005|1005|10|11|RMAAAA|PHNAAA|HHHHxx
+4727|8986|1|3|7|7|27|727|727|4727|4727|54|55|VZAAAA|QHNAAA|OOOOxx
+7617|8987|1|1|7|17|17|617|1617|2617|7617|34|35|ZGAAAA|RHNAAA|VVVVxx
+2021|8988|1|1|1|1|21|21|21|2021|2021|42|43|TZAAAA|SHNAAA|AAAAxx
+9124|8989|0|0|4|4|24|124|1124|4124|9124|48|49|YMAAAA|THNAAA|HHHHxx
+3175|8990|1|3|5|15|75|175|1175|3175|3175|150|151|DSAAAA|UHNAAA|OOOOxx
+2949|8991|1|1|9|9|49|949|949|2949|2949|98|99|LJAAAA|VHNAAA|VVVVxx
+2424|8992|0|0|4|4|24|424|424|2424|2424|48|49|GPAAAA|WHNAAA|AAAAxx
+4791|8993|1|3|1|11|91|791|791|4791|4791|182|183|HCAAAA|XHNAAA|HHHHxx
+7500|8994|0|0|0|0|0|500|1500|2500|7500|0|1|MCAAAA|YHNAAA|OOOOxx
+4893|8995|1|1|3|13|93|893|893|4893|4893|186|187|FGAAAA|ZHNAAA|VVVVxx
+121|8996|1|1|1|1|21|121|121|121|121|42|43|REAAAA|AINAAA|AAAAxx
+1965|8997|1|1|5|5|65|965|1965|1965|1965|130|131|PXAAAA|BINAAA|HHHHxx
+2972|8998|0|0|2|12|72|972|972|2972|2972|144|145|IKAAAA|CINAAA|OOOOxx
+662|8999|0|2|2|2|62|662|662|662|662|124|125|MZAAAA|DINAAA|VVVVxx
+7074|9000|0|2|4|14|74|74|1074|2074|7074|148|149|CMAAAA|EINAAA|AAAAxx
+981|9001|1|1|1|1|81|981|981|981|981|162|163|TLAAAA|FINAAA|HHHHxx
+3520|9002|0|0|0|0|20|520|1520|3520|3520|40|41|KFAAAA|GINAAA|OOOOxx
+6540|9003|0|0|0|0|40|540|540|1540|6540|80|81|ORAAAA|HINAAA|VVVVxx
+6648|9004|0|0|8|8|48|648|648|1648|6648|96|97|SVAAAA|IINAAA|AAAAxx
+7076|9005|0|0|6|16|76|76|1076|2076|7076|152|153|EMAAAA|JINAAA|HHHHxx
+6919|9006|1|3|9|19|19|919|919|1919|6919|38|39|DGAAAA|KINAAA|OOOOxx
+1108|9007|0|0|8|8|8|108|1108|1108|1108|16|17|QQAAAA|LINAAA|VVVVxx
+317|9008|1|1|7|17|17|317|317|317|317|34|35|FMAAAA|MINAAA|AAAAxx
+3483|9009|1|3|3|3|83|483|1483|3483|3483|166|167|ZDAAAA|NINAAA|HHHHxx
+6764|9010|0|0|4|4|64|764|764|1764|6764|128|129|EAAAAA|OINAAA|OOOOxx
+1235|9011|1|3|5|15|35|235|1235|1235|1235|70|71|NVAAAA|PINAAA|VVVVxx
+7121|9012|1|1|1|1|21|121|1121|2121|7121|42|43|XNAAAA|QINAAA|AAAAxx
+426|9013|0|2|6|6|26|426|426|426|426|52|53|KQAAAA|RINAAA|HHHHxx
+6880|9014|0|0|0|0|80|880|880|1880|6880|160|161|QEAAAA|SINAAA|OOOOxx
+5401|9015|1|1|1|1|1|401|1401|401|5401|2|3|TZAAAA|TINAAA|VVVVxx
+7323|9016|1|3|3|3|23|323|1323|2323|7323|46|47|RVAAAA|UINAAA|AAAAxx
+9751|9017|1|3|1|11|51|751|1751|4751|9751|102|103|BLAAAA|VINAAA|HHHHxx
+3436|9018|0|0|6|16|36|436|1436|3436|3436|72|73|ECAAAA|WINAAA|OOOOxx
+7319|9019|1|3|9|19|19|319|1319|2319|7319|38|39|NVAAAA|XINAAA|VVVVxx
+7882|9020|0|2|2|2|82|882|1882|2882|7882|164|165|ERAAAA|YINAAA|AAAAxx
+8260|9021|0|0|0|0|60|260|260|3260|8260|120|121|SFAAAA|ZINAAA|HHHHxx
+9758|9022|0|2|8|18|58|758|1758|4758|9758|116|117|ILAAAA|AJNAAA|OOOOxx
+4205|9023|1|1|5|5|5|205|205|4205|4205|10|11|TFAAAA|BJNAAA|VVVVxx
+8884|9024|0|0|4|4|84|884|884|3884|8884|168|169|SDAAAA|CJNAAA|AAAAxx
+1112|9025|0|0|2|12|12|112|1112|1112|1112|24|25|UQAAAA|DJNAAA|HHHHxx
+2186|9026|0|2|6|6|86|186|186|2186|2186|172|173|CGAAAA|EJNAAA|OOOOxx
+8666|9027|0|2|6|6|66|666|666|3666|8666|132|133|IVAAAA|FJNAAA|VVVVxx
+4325|9028|1|1|5|5|25|325|325|4325|4325|50|51|JKAAAA|GJNAAA|AAAAxx
+4912|9029|0|0|2|12|12|912|912|4912|4912|24|25|YGAAAA|HJNAAA|HHHHxx
+6497|9030|1|1|7|17|97|497|497|1497|6497|194|195|XPAAAA|IJNAAA|OOOOxx
+9072|9031|0|0|2|12|72|72|1072|4072|9072|144|145|YKAAAA|JJNAAA|VVVVxx
+8899|9032|1|3|9|19|99|899|899|3899|8899|198|199|HEAAAA|KJNAAA|AAAAxx
+5619|9033|1|3|9|19|19|619|1619|619|5619|38|39|DIAAAA|LJNAAA|HHHHxx
+4110|9034|0|2|0|10|10|110|110|4110|4110|20|21|CCAAAA|MJNAAA|OOOOxx
+7025|9035|1|1|5|5|25|25|1025|2025|7025|50|51|FKAAAA|NJNAAA|VVVVxx
+5605|9036|1|1|5|5|5|605|1605|605|5605|10|11|PHAAAA|OJNAAA|AAAAxx
+2572|9037|0|0|2|12|72|572|572|2572|2572|144|145|YUAAAA|PJNAAA|HHHHxx
+3895|9038|1|3|5|15|95|895|1895|3895|3895|190|191|VTAAAA|QJNAAA|OOOOxx
+9138|9039|0|2|8|18|38|138|1138|4138|9138|76|77|MNAAAA|RJNAAA|VVVVxx
+4713|9040|1|1|3|13|13|713|713|4713|4713|26|27|HZAAAA|SJNAAA|AAAAxx
+6079|9041|1|3|9|19|79|79|79|1079|6079|158|159|VZAAAA|TJNAAA|HHHHxx
+8898|9042|0|2|8|18|98|898|898|3898|8898|196|197|GEAAAA|UJNAAA|OOOOxx
+2650|9043|0|2|0|10|50|650|650|2650|2650|100|101|YXAAAA|VJNAAA|VVVVxx
+5316|9044|0|0|6|16|16|316|1316|316|5316|32|33|MWAAAA|WJNAAA|AAAAxx
+5133|9045|1|1|3|13|33|133|1133|133|5133|66|67|LPAAAA|XJNAAA|HHHHxx
+2184|9046|0|0|4|4|84|184|184|2184|2184|168|169|AGAAAA|YJNAAA|OOOOxx
+2728|9047|0|0|8|8|28|728|728|2728|2728|56|57|YAAAAA|ZJNAAA|VVVVxx
+6737|9048|1|1|7|17|37|737|737|1737|6737|74|75|DZAAAA|AKNAAA|AAAAxx
+1128|9049|0|0|8|8|28|128|1128|1128|1128|56|57|KRAAAA|BKNAAA|HHHHxx
+9662|9050|0|2|2|2|62|662|1662|4662|9662|124|125|QHAAAA|CKNAAA|OOOOxx
+9384|9051|0|0|4|4|84|384|1384|4384|9384|168|169|YWAAAA|DKNAAA|VVVVxx
+4576|9052|0|0|6|16|76|576|576|4576|4576|152|153|AUAAAA|EKNAAA|AAAAxx
+9613|9053|1|1|3|13|13|613|1613|4613|9613|26|27|TFAAAA|FKNAAA|HHHHxx
+4001|9054|1|1|1|1|1|1|1|4001|4001|2|3|XXAAAA|GKNAAA|OOOOxx
+3628|9055|0|0|8|8|28|628|1628|3628|3628|56|57|OJAAAA|HKNAAA|VVVVxx
+6968|9056|0|0|8|8|68|968|968|1968|6968|136|137|AIAAAA|IKNAAA|AAAAxx
+6491|9057|1|3|1|11|91|491|491|1491|6491|182|183|RPAAAA|JKNAAA|HHHHxx
+1265|9058|1|1|5|5|65|265|1265|1265|1265|130|131|RWAAAA|KKNAAA|OOOOxx
+6128|9059|0|0|8|8|28|128|128|1128|6128|56|57|SBAAAA|LKNAAA|VVVVxx
+4274|9060|0|2|4|14|74|274|274|4274|4274|148|149|KIAAAA|MKNAAA|AAAAxx
+3598|9061|0|2|8|18|98|598|1598|3598|3598|196|197|KIAAAA|NKNAAA|HHHHxx
+7961|9062|1|1|1|1|61|961|1961|2961|7961|122|123|FUAAAA|OKNAAA|OOOOxx
+2643|9063|1|3|3|3|43|643|643|2643|2643|86|87|RXAAAA|PKNAAA|VVVVxx
+4547|9064|1|3|7|7|47|547|547|4547|4547|94|95|XSAAAA|QKNAAA|AAAAxx
+3568|9065|0|0|8|8|68|568|1568|3568|3568|136|137|GHAAAA|RKNAAA|HHHHxx
+8954|9066|0|2|4|14|54|954|954|3954|8954|108|109|KGAAAA|SKNAAA|OOOOxx
+8802|9067|0|2|2|2|2|802|802|3802|8802|4|5|OAAAAA|TKNAAA|VVVVxx
+7829|9068|1|1|9|9|29|829|1829|2829|7829|58|59|DPAAAA|UKNAAA|AAAAxx
+1008|9069|0|0|8|8|8|8|1008|1008|1008|16|17|UMAAAA|VKNAAA|HHHHxx
+3627|9070|1|3|7|7|27|627|1627|3627|3627|54|55|NJAAAA|WKNAAA|OOOOxx
+3999|9071|1|3|9|19|99|999|1999|3999|3999|198|199|VXAAAA|XKNAAA|VVVVxx
+7697|9072|1|1|7|17|97|697|1697|2697|7697|194|195|BKAAAA|YKNAAA|AAAAxx
+9380|9073|0|0|0|0|80|380|1380|4380|9380|160|161|UWAAAA|ZKNAAA|HHHHxx
+2707|9074|1|3|7|7|7|707|707|2707|2707|14|15|DAAAAA|ALNAAA|OOOOxx
+4430|9075|0|2|0|10|30|430|430|4430|4430|60|61|KOAAAA|BLNAAA|VVVVxx
+6440|9076|0|0|0|0|40|440|440|1440|6440|80|81|SNAAAA|CLNAAA|AAAAxx
+9958|9077|0|2|8|18|58|958|1958|4958|9958|116|117|ATAAAA|DLNAAA|HHHHxx
+7592|9078|0|0|2|12|92|592|1592|2592|7592|184|185|AGAAAA|ELNAAA|OOOOxx
+7852|9079|0|0|2|12|52|852|1852|2852|7852|104|105|AQAAAA|FLNAAA|VVVVxx
+9253|9080|1|1|3|13|53|253|1253|4253|9253|106|107|XRAAAA|GLNAAA|AAAAxx
+5910|9081|0|2|0|10|10|910|1910|910|5910|20|21|ITAAAA|HLNAAA|HHHHxx
+7487|9082|1|3|7|7|87|487|1487|2487|7487|174|175|ZBAAAA|ILNAAA|OOOOxx
+6324|9083|0|0|4|4|24|324|324|1324|6324|48|49|GJAAAA|JLNAAA|VVVVxx
+5792|9084|0|0|2|12|92|792|1792|792|5792|184|185|UOAAAA|KLNAAA|AAAAxx
+7390|9085|0|2|0|10|90|390|1390|2390|7390|180|181|GYAAAA|LLNAAA|HHHHxx
+8534|9086|0|2|4|14|34|534|534|3534|8534|68|69|GQAAAA|MLNAAA|OOOOxx
+2690|9087|0|2|0|10|90|690|690|2690|2690|180|181|MZAAAA|NLNAAA|VVVVxx
+3992|9088|0|0|2|12|92|992|1992|3992|3992|184|185|OXAAAA|OLNAAA|AAAAxx
+6928|9089|0|0|8|8|28|928|928|1928|6928|56|57|MGAAAA|PLNAAA|HHHHxx
+7815|9090|1|3|5|15|15|815|1815|2815|7815|30|31|POAAAA|QLNAAA|OOOOxx
+9477|9091|1|1|7|17|77|477|1477|4477|9477|154|155|NAAAAA|RLNAAA|VVVVxx
+497|9092|1|1|7|17|97|497|497|497|497|194|195|DTAAAA|SLNAAA|AAAAxx
+7532|9093|0|0|2|12|32|532|1532|2532|7532|64|65|SDAAAA|TLNAAA|HHHHxx
+9838|9094|0|2|8|18|38|838|1838|4838|9838|76|77|KOAAAA|ULNAAA|OOOOxx
+1557|9095|1|1|7|17|57|557|1557|1557|1557|114|115|XHAAAA|VLNAAA|VVVVxx
+2467|9096|1|3|7|7|67|467|467|2467|2467|134|135|XQAAAA|WLNAAA|AAAAxx
+2367|9097|1|3|7|7|67|367|367|2367|2367|134|135|BNAAAA|XLNAAA|HHHHxx
+5677|9098|1|1|7|17|77|677|1677|677|5677|154|155|JKAAAA|YLNAAA|OOOOxx
+6193|9099|1|1|3|13|93|193|193|1193|6193|186|187|FEAAAA|ZLNAAA|VVVVxx
+7126|9100|0|2|6|6|26|126|1126|2126|7126|52|53|COAAAA|AMNAAA|AAAAxx
+5264|9101|0|0|4|4|64|264|1264|264|5264|128|129|MUAAAA|BMNAAA|HHHHxx
+850|9102|0|2|0|10|50|850|850|850|850|100|101|SGAAAA|CMNAAA|OOOOxx
+4854|9103|0|2|4|14|54|854|854|4854|4854|108|109|SEAAAA|DMNAAA|VVVVxx
+4414|9104|0|2|4|14|14|414|414|4414|4414|28|29|UNAAAA|EMNAAA|AAAAxx
+8971|9105|1|3|1|11|71|971|971|3971|8971|142|143|BHAAAA|FMNAAA|HHHHxx
+9240|9106|0|0|0|0|40|240|1240|4240|9240|80|81|KRAAAA|GMNAAA|OOOOxx
+7341|9107|1|1|1|1|41|341|1341|2341|7341|82|83|JWAAAA|HMNAAA|VVVVxx
+3151|9108|1|3|1|11|51|151|1151|3151|3151|102|103|FRAAAA|IMNAAA|AAAAxx
+1742|9109|0|2|2|2|42|742|1742|1742|1742|84|85|APAAAA|JMNAAA|HHHHxx
+1347|9110|1|3|7|7|47|347|1347|1347|1347|94|95|VZAAAA|KMNAAA|OOOOxx
+9418|9111|0|2|8|18|18|418|1418|4418|9418|36|37|GYAAAA|LMNAAA|VVVVxx
+5452|9112|0|0|2|12|52|452|1452|452|5452|104|105|SBAAAA|MMNAAA|AAAAxx
+8637|9113|1|1|7|17|37|637|637|3637|8637|74|75|FUAAAA|NMNAAA|HHHHxx
+8287|9114|1|3|7|7|87|287|287|3287|8287|174|175|TGAAAA|OMNAAA|OOOOxx
+9865|9115|1|1|5|5|65|865|1865|4865|9865|130|131|LPAAAA|PMNAAA|VVVVxx
+1664|9116|0|0|4|4|64|664|1664|1664|1664|128|129|AMAAAA|QMNAAA|AAAAxx
+9933|9117|1|1|3|13|33|933|1933|4933|9933|66|67|BSAAAA|RMNAAA|HHHHxx
+3416|9118|0|0|6|16|16|416|1416|3416|3416|32|33|KBAAAA|SMNAAA|OOOOxx
+7981|9119|1|1|1|1|81|981|1981|2981|7981|162|163|ZUAAAA|TMNAAA|VVVVxx
+1981|9120|1|1|1|1|81|981|1981|1981|1981|162|163|FYAAAA|UMNAAA|AAAAxx
+441|9121|1|1|1|1|41|441|441|441|441|82|83|ZQAAAA|VMNAAA|HHHHxx
+1380|9122|0|0|0|0|80|380|1380|1380|1380|160|161|CBAAAA|WMNAAA|OOOOxx
+7325|9123|1|1|5|5|25|325|1325|2325|7325|50|51|TVAAAA|XMNAAA|VVVVxx
+5682|9124|0|2|2|2|82|682|1682|682|5682|164|165|OKAAAA|YMNAAA|AAAAxx
+1024|9125|0|0|4|4|24|24|1024|1024|1024|48|49|KNAAAA|ZMNAAA|HHHHxx
+1096|9126|0|0|6|16|96|96|1096|1096|1096|192|193|EQAAAA|ANNAAA|OOOOxx
+4717|9127|1|1|7|17|17|717|717|4717|4717|34|35|LZAAAA|BNNAAA|VVVVxx
+7948|9128|0|0|8|8|48|948|1948|2948|7948|96|97|STAAAA|CNNAAA|AAAAxx
+4074|9129|0|2|4|14|74|74|74|4074|4074|148|149|SAAAAA|DNNAAA|HHHHxx
+211|9130|1|3|1|11|11|211|211|211|211|22|23|DIAAAA|ENNAAA|OOOOxx
+8993|9131|1|1|3|13|93|993|993|3993|8993|186|187|XHAAAA|FNNAAA|VVVVxx
+4509|9132|1|1|9|9|9|509|509|4509|4509|18|19|LRAAAA|GNNAAA|AAAAxx
+823|9133|1|3|3|3|23|823|823|823|823|46|47|RFAAAA|HNNAAA|HHHHxx
+4747|9134|1|3|7|7|47|747|747|4747|4747|94|95|PAAAAA|INNAAA|OOOOxx
+6955|9135|1|3|5|15|55|955|955|1955|6955|110|111|NHAAAA|JNNAAA|VVVVxx
+7922|9136|0|2|2|2|22|922|1922|2922|7922|44|45|SSAAAA|KNNAAA|AAAAxx
+6936|9137|0|0|6|16|36|936|936|1936|6936|72|73|UGAAAA|LNNAAA|HHHHxx
+1546|9138|0|2|6|6|46|546|1546|1546|1546|92|93|MHAAAA|MNNAAA|OOOOxx
+9836|9139|0|0|6|16|36|836|1836|4836|9836|72|73|IOAAAA|NNNAAA|VVVVxx
+5626|9140|0|2|6|6|26|626|1626|626|5626|52|53|KIAAAA|ONNAAA|AAAAxx
+4879|9141|1|3|9|19|79|879|879|4879|4879|158|159|RFAAAA|PNNAAA|HHHHxx
+8590|9142|0|2|0|10|90|590|590|3590|8590|180|181|KSAAAA|QNNAAA|OOOOxx
+8842|9143|0|2|2|2|42|842|842|3842|8842|84|85|CCAAAA|RNNAAA|VVVVxx
+6505|9144|1|1|5|5|5|505|505|1505|6505|10|11|FQAAAA|SNNAAA|AAAAxx
+2803|9145|1|3|3|3|3|803|803|2803|2803|6|7|VDAAAA|TNNAAA|HHHHxx
+9258|9146|0|2|8|18|58|258|1258|4258|9258|116|117|CSAAAA|UNNAAA|OOOOxx
+741|9147|1|1|1|1|41|741|741|741|741|82|83|NCAAAA|VNNAAA|VVVVxx
+1457|9148|1|1|7|17|57|457|1457|1457|1457|114|115|BEAAAA|WNNAAA|AAAAxx
+5777|9149|1|1|7|17|77|777|1777|777|5777|154|155|FOAAAA|XNNAAA|HHHHxx
+2883|9150|1|3|3|3|83|883|883|2883|2883|166|167|XGAAAA|YNNAAA|OOOOxx
+6610|9151|0|2|0|10|10|610|610|1610|6610|20|21|GUAAAA|ZNNAAA|VVVVxx
+4331|9152|1|3|1|11|31|331|331|4331|4331|62|63|PKAAAA|AONAAA|AAAAxx
+2712|9153|0|0|2|12|12|712|712|2712|2712|24|25|IAAAAA|BONAAA|HHHHxx
+9268|9154|0|0|8|8|68|268|1268|4268|9268|136|137|MSAAAA|CONAAA|OOOOxx
+410|9155|0|2|0|10|10|410|410|410|410|20|21|UPAAAA|DONAAA|VVVVxx
+9411|9156|1|3|1|11|11|411|1411|4411|9411|22|23|ZXAAAA|EONAAA|AAAAxx
+4683|9157|1|3|3|3|83|683|683|4683|4683|166|167|DYAAAA|FONAAA|HHHHxx
+7072|9158|0|0|2|12|72|72|1072|2072|7072|144|145|AMAAAA|GONAAA|OOOOxx
+5050|9159|0|2|0|10|50|50|1050|50|5050|100|101|GMAAAA|HONAAA|VVVVxx
+5932|9160|0|0|2|12|32|932|1932|932|5932|64|65|EUAAAA|IONAAA|AAAAxx
+2756|9161|0|0|6|16|56|756|756|2756|2756|112|113|ACAAAA|JONAAA|HHHHxx
+9813|9162|1|1|3|13|13|813|1813|4813|9813|26|27|LNAAAA|KONAAA|OOOOxx
+7388|9163|0|0|8|8|88|388|1388|2388|7388|176|177|EYAAAA|LONAAA|VVVVxx
+2596|9164|0|0|6|16|96|596|596|2596|2596|192|193|WVAAAA|MONAAA|AAAAxx
+5102|9165|0|2|2|2|2|102|1102|102|5102|4|5|GOAAAA|NONAAA|HHHHxx
+208|9166|0|0|8|8|8|208|208|208|208|16|17|AIAAAA|OONAAA|OOOOxx
+86|9167|0|2|6|6|86|86|86|86|86|172|173|IDAAAA|PONAAA|VVVVxx
+8127|9168|1|3|7|7|27|127|127|3127|8127|54|55|PAAAAA|QONAAA|AAAAxx
+5154|9169|0|2|4|14|54|154|1154|154|5154|108|109|GQAAAA|RONAAA|HHHHxx
+4491|9170|1|3|1|11|91|491|491|4491|4491|182|183|TQAAAA|SONAAA|OOOOxx
+7423|9171|1|3|3|3|23|423|1423|2423|7423|46|47|NZAAAA|TONAAA|VVVVxx
+6441|9172|1|1|1|1|41|441|441|1441|6441|82|83|TNAAAA|UONAAA|AAAAxx
+2920|9173|0|0|0|0|20|920|920|2920|2920|40|41|IIAAAA|VONAAA|HHHHxx
+6386|9174|0|2|6|6|86|386|386|1386|6386|172|173|QLAAAA|WONAAA|OOOOxx
+9744|9175|0|0|4|4|44|744|1744|4744|9744|88|89|UKAAAA|XONAAA|VVVVxx
+2667|9176|1|3|7|7|67|667|667|2667|2667|134|135|PYAAAA|YONAAA|AAAAxx
+5754|9177|0|2|4|14|54|754|1754|754|5754|108|109|INAAAA|ZONAAA|HHHHxx
+4645|9178|1|1|5|5|45|645|645|4645|4645|90|91|RWAAAA|APNAAA|OOOOxx
+4327|9179|1|3|7|7|27|327|327|4327|4327|54|55|LKAAAA|BPNAAA|VVVVxx
+843|9180|1|3|3|3|43|843|843|843|843|86|87|LGAAAA|CPNAAA|AAAAxx
+4085|9181|1|1|5|5|85|85|85|4085|4085|170|171|DBAAAA|DPNAAA|HHHHxx
+2849|9182|1|1|9|9|49|849|849|2849|2849|98|99|PFAAAA|EPNAAA|OOOOxx
+5734|9183|0|2|4|14|34|734|1734|734|5734|68|69|OMAAAA|FPNAAA|VVVVxx
+5307|9184|1|3|7|7|7|307|1307|307|5307|14|15|DWAAAA|GPNAAA|AAAAxx
+8433|9185|1|1|3|13|33|433|433|3433|8433|66|67|JMAAAA|HPNAAA|HHHHxx
+3031|9186|1|3|1|11|31|31|1031|3031|3031|62|63|PMAAAA|IPNAAA|OOOOxx
+5714|9187|0|2|4|14|14|714|1714|714|5714|28|29|ULAAAA|JPNAAA|VVVVxx
+5969|9188|1|1|9|9|69|969|1969|969|5969|138|139|PVAAAA|KPNAAA|AAAAxx
+2532|9189|0|0|2|12|32|532|532|2532|2532|64|65|KTAAAA|LPNAAA|HHHHxx
+5219|9190|1|3|9|19|19|219|1219|219|5219|38|39|TSAAAA|MPNAAA|OOOOxx
+7343|9191|1|3|3|3|43|343|1343|2343|7343|86|87|LWAAAA|NPNAAA|VVVVxx
+9089|9192|1|1|9|9|89|89|1089|4089|9089|178|179|PLAAAA|OPNAAA|AAAAxx
+9337|9193|1|1|7|17|37|337|1337|4337|9337|74|75|DVAAAA|PPNAAA|HHHHxx
+5131|9194|1|3|1|11|31|131|1131|131|5131|62|63|JPAAAA|QPNAAA|OOOOxx
+6253|9195|1|1|3|13|53|253|253|1253|6253|106|107|NGAAAA|RPNAAA|VVVVxx
+5140|9196|0|0|0|0|40|140|1140|140|5140|80|81|SPAAAA|SPNAAA|AAAAxx
+2953|9197|1|1|3|13|53|953|953|2953|2953|106|107|PJAAAA|TPNAAA|HHHHxx
+4293|9198|1|1|3|13|93|293|293|4293|4293|186|187|DJAAAA|UPNAAA|OOOOxx
+9974|9199|0|2|4|14|74|974|1974|4974|9974|148|149|QTAAAA|VPNAAA|VVVVxx
+5061|9200|1|1|1|1|61|61|1061|61|5061|122|123|RMAAAA|WPNAAA|AAAAxx
+8570|9201|0|2|0|10|70|570|570|3570|8570|140|141|QRAAAA|XPNAAA|HHHHxx
+9504|9202|0|0|4|4|4|504|1504|4504|9504|8|9|OBAAAA|YPNAAA|OOOOxx
+604|9203|0|0|4|4|4|604|604|604|604|8|9|GXAAAA|ZPNAAA|VVVVxx
+4991|9204|1|3|1|11|91|991|991|4991|4991|182|183|ZJAAAA|AQNAAA|AAAAxx
+880|9205|0|0|0|0|80|880|880|880|880|160|161|WHAAAA|BQNAAA|HHHHxx
+3861|9206|1|1|1|1|61|861|1861|3861|3861|122|123|NSAAAA|CQNAAA|OOOOxx
+8262|9207|0|2|2|2|62|262|262|3262|8262|124|125|UFAAAA|DQNAAA|VVVVxx
+5689|9208|1|1|9|9|89|689|1689|689|5689|178|179|VKAAAA|EQNAAA|AAAAxx
+1793|9209|1|1|3|13|93|793|1793|1793|1793|186|187|ZQAAAA|FQNAAA|HHHHxx
+2661|9210|1|1|1|1|61|661|661|2661|2661|122|123|JYAAAA|GQNAAA|OOOOxx
+7954|9211|0|2|4|14|54|954|1954|2954|7954|108|109|YTAAAA|HQNAAA|VVVVxx
+1874|9212|0|2|4|14|74|874|1874|1874|1874|148|149|CUAAAA|IQNAAA|AAAAxx
+2982|9213|0|2|2|2|82|982|982|2982|2982|164|165|SKAAAA|JQNAAA|HHHHxx
+331|9214|1|3|1|11|31|331|331|331|331|62|63|TMAAAA|KQNAAA|OOOOxx
+5021|9215|1|1|1|1|21|21|1021|21|5021|42|43|DLAAAA|LQNAAA|VVVVxx
+9894|9216|0|2|4|14|94|894|1894|4894|9894|188|189|OQAAAA|MQNAAA|AAAAxx
+7709|9217|1|1|9|9|9|709|1709|2709|7709|18|19|NKAAAA|NQNAAA|HHHHxx
+4980|9218|0|0|0|0|80|980|980|4980|4980|160|161|OJAAAA|OQNAAA|OOOOxx
+8249|9219|1|1|9|9|49|249|249|3249|8249|98|99|HFAAAA|PQNAAA|VVVVxx
+7120|9220|0|0|0|0|20|120|1120|2120|7120|40|41|WNAAAA|QQNAAA|AAAAxx
+7464|9221|0|0|4|4|64|464|1464|2464|7464|128|129|CBAAAA|RQNAAA|HHHHxx
+8086|9222|0|2|6|6|86|86|86|3086|8086|172|173|AZAAAA|SQNAAA|OOOOxx
+3509|9223|1|1|9|9|9|509|1509|3509|3509|18|19|ZEAAAA|TQNAAA|VVVVxx
+3902|9224|0|2|2|2|2|902|1902|3902|3902|4|5|CUAAAA|UQNAAA|AAAAxx
+9907|9225|1|3|7|7|7|907|1907|4907|9907|14|15|BRAAAA|VQNAAA|HHHHxx
+6278|9226|0|2|8|18|78|278|278|1278|6278|156|157|MHAAAA|WQNAAA|OOOOxx
+9316|9227|0|0|6|16|16|316|1316|4316|9316|32|33|IUAAAA|XQNAAA|VVVVxx
+2824|9228|0|0|4|4|24|824|824|2824|2824|48|49|QEAAAA|YQNAAA|AAAAxx
+1558|9229|0|2|8|18|58|558|1558|1558|1558|116|117|YHAAAA|ZQNAAA|HHHHxx
+5436|9230|0|0|6|16|36|436|1436|436|5436|72|73|CBAAAA|ARNAAA|OOOOxx
+1161|9231|1|1|1|1|61|161|1161|1161|1161|122|123|RSAAAA|BRNAAA|VVVVxx
+7569|9232|1|1|9|9|69|569|1569|2569|7569|138|139|DFAAAA|CRNAAA|AAAAxx
+9614|9233|0|2|4|14|14|614|1614|4614|9614|28|29|UFAAAA|DRNAAA|HHHHxx
+6970|9234|0|2|0|10|70|970|970|1970|6970|140|141|CIAAAA|ERNAAA|OOOOxx
+2422|9235|0|2|2|2|22|422|422|2422|2422|44|45|EPAAAA|FRNAAA|VVVVxx
+8860|9236|0|0|0|0|60|860|860|3860|8860|120|121|UCAAAA|GRNAAA|AAAAxx
+9912|9237|0|0|2|12|12|912|1912|4912|9912|24|25|GRAAAA|HRNAAA|HHHHxx
+1109|9238|1|1|9|9|9|109|1109|1109|1109|18|19|RQAAAA|IRNAAA|OOOOxx
+3286|9239|0|2|6|6|86|286|1286|3286|3286|172|173|KWAAAA|JRNAAA|VVVVxx
+2277|9240|1|1|7|17|77|277|277|2277|2277|154|155|PJAAAA|KRNAAA|AAAAxx
+8656|9241|0|0|6|16|56|656|656|3656|8656|112|113|YUAAAA|LRNAAA|HHHHxx
+4656|9242|0|0|6|16|56|656|656|4656|4656|112|113|CXAAAA|MRNAAA|OOOOxx
+6965|9243|1|1|5|5|65|965|965|1965|6965|130|131|XHAAAA|NRNAAA|VVVVxx
+7591|9244|1|3|1|11|91|591|1591|2591|7591|182|183|ZFAAAA|ORNAAA|AAAAxx
+4883|9245|1|3|3|3|83|883|883|4883|4883|166|167|VFAAAA|PRNAAA|HHHHxx
+452|9246|0|0|2|12|52|452|452|452|452|104|105|KRAAAA|QRNAAA|OOOOxx
+4018|9247|0|2|8|18|18|18|18|4018|4018|36|37|OYAAAA|RRNAAA|VVVVxx
+4066|9248|0|2|6|6|66|66|66|4066|4066|132|133|KAAAAA|SRNAAA|AAAAxx
+6480|9249|0|0|0|0|80|480|480|1480|6480|160|161|GPAAAA|TRNAAA|HHHHxx
+8634|9250|0|2|4|14|34|634|634|3634|8634|68|69|CUAAAA|URNAAA|OOOOxx
+9387|9251|1|3|7|7|87|387|1387|4387|9387|174|175|BXAAAA|VRNAAA|VVVVxx
+3476|9252|0|0|6|16|76|476|1476|3476|3476|152|153|SDAAAA|WRNAAA|AAAAxx
+5995|9253|1|3|5|15|95|995|1995|995|5995|190|191|PWAAAA|XRNAAA|HHHHxx
+9677|9254|1|1|7|17|77|677|1677|4677|9677|154|155|FIAAAA|YRNAAA|OOOOxx
+3884|9255|0|0|4|4|84|884|1884|3884|3884|168|169|KTAAAA|ZRNAAA|VVVVxx
+6500|9256|0|0|0|0|0|500|500|1500|6500|0|1|AQAAAA|ASNAAA|AAAAxx
+7972|9257|0|0|2|12|72|972|1972|2972|7972|144|145|QUAAAA|BSNAAA|HHHHxx
+5281|9258|1|1|1|1|81|281|1281|281|5281|162|163|DVAAAA|CSNAAA|OOOOxx
+1288|9259|0|0|8|8|88|288|1288|1288|1288|176|177|OXAAAA|DSNAAA|VVVVxx
+4366|9260|0|2|6|6|66|366|366|4366|4366|132|133|YLAAAA|ESNAAA|AAAAxx
+6557|9261|1|1|7|17|57|557|557|1557|6557|114|115|FSAAAA|FSNAAA|HHHHxx
+7086|9262|0|2|6|6|86|86|1086|2086|7086|172|173|OMAAAA|GSNAAA|OOOOxx
+6588|9263|0|0|8|8|88|588|588|1588|6588|176|177|KTAAAA|HSNAAA|VVVVxx
+9062|9264|0|2|2|2|62|62|1062|4062|9062|124|125|OKAAAA|ISNAAA|AAAAxx
+9230|9265|0|2|0|10|30|230|1230|4230|9230|60|61|ARAAAA|JSNAAA|HHHHxx
+7672|9266|0|0|2|12|72|672|1672|2672|7672|144|145|CJAAAA|KSNAAA|OOOOxx
+5204|9267|0|0|4|4|4|204|1204|204|5204|8|9|ESAAAA|LSNAAA|VVVVxx
+2836|9268|0|0|6|16|36|836|836|2836|2836|72|73|CFAAAA|MSNAAA|AAAAxx
+7165|9269|1|1|5|5|65|165|1165|2165|7165|130|131|PPAAAA|NSNAAA|HHHHxx
+971|9270|1|3|1|11|71|971|971|971|971|142|143|JLAAAA|OSNAAA|OOOOxx
+3851|9271|1|3|1|11|51|851|1851|3851|3851|102|103|DSAAAA|PSNAAA|VVVVxx
+8593|9272|1|1|3|13|93|593|593|3593|8593|186|187|NSAAAA|QSNAAA|AAAAxx
+7742|9273|0|2|2|2|42|742|1742|2742|7742|84|85|ULAAAA|RSNAAA|HHHHxx
+2887|9274|1|3|7|7|87|887|887|2887|2887|174|175|BHAAAA|SSNAAA|OOOOxx
+8479|9275|1|3|9|19|79|479|479|3479|8479|158|159|DOAAAA|TSNAAA|VVVVxx
+9514|9276|0|2|4|14|14|514|1514|4514|9514|28|29|YBAAAA|USNAAA|AAAAxx
+273|9277|1|1|3|13|73|273|273|273|273|146|147|NKAAAA|VSNAAA|HHHHxx
+2938|9278|0|2|8|18|38|938|938|2938|2938|76|77|AJAAAA|WSNAAA|OOOOxx
+9793|9279|1|1|3|13|93|793|1793|4793|9793|186|187|RMAAAA|XSNAAA|VVVVxx
+8050|9280|0|2|0|10|50|50|50|3050|8050|100|101|QXAAAA|YSNAAA|AAAAxx
+6702|9281|0|2|2|2|2|702|702|1702|6702|4|5|UXAAAA|ZSNAAA|HHHHxx
+7290|9282|0|2|0|10|90|290|1290|2290|7290|180|181|KUAAAA|ATNAAA|OOOOxx
+1837|9283|1|1|7|17|37|837|1837|1837|1837|74|75|RSAAAA|BTNAAA|VVVVxx
+3206|9284|0|2|6|6|6|206|1206|3206|3206|12|13|ITAAAA|CTNAAA|AAAAxx
+4925|9285|1|1|5|5|25|925|925|4925|4925|50|51|LHAAAA|DTNAAA|HHHHxx
+5066|9286|0|2|6|6|66|66|1066|66|5066|132|133|WMAAAA|ETNAAA|OOOOxx
+3401|9287|1|1|1|1|1|401|1401|3401|3401|2|3|VAAAAA|FTNAAA|VVVVxx
+3474|9288|0|2|4|14|74|474|1474|3474|3474|148|149|QDAAAA|GTNAAA|AAAAxx
+57|9289|1|1|7|17|57|57|57|57|57|114|115|FCAAAA|HTNAAA|HHHHxx
+2082|9290|0|2|2|2|82|82|82|2082|2082|164|165|CCAAAA|ITNAAA|OOOOxx
+100|9291|0|0|0|0|0|100|100|100|100|0|1|WDAAAA|JTNAAA|VVVVxx
+9665|9292|1|1|5|5|65|665|1665|4665|9665|130|131|THAAAA|KTNAAA|AAAAxx
+8284|9293|0|0|4|4|84|284|284|3284|8284|168|169|QGAAAA|LTNAAA|HHHHxx
+958|9294|0|2|8|18|58|958|958|958|958|116|117|WKAAAA|MTNAAA|OOOOxx
+5282|9295|0|2|2|2|82|282|1282|282|5282|164|165|EVAAAA|NTNAAA|VVVVxx
+4257|9296|1|1|7|17|57|257|257|4257|4257|114|115|THAAAA|OTNAAA|AAAAxx
+3160|9297|0|0|0|0|60|160|1160|3160|3160|120|121|ORAAAA|PTNAAA|HHHHxx
+8449|9298|1|1|9|9|49|449|449|3449|8449|98|99|ZMAAAA|QTNAAA|OOOOxx
+500|9299|0|0|0|0|0|500|500|500|500|0|1|GTAAAA|RTNAAA|VVVVxx
+6432|9300|0|0|2|12|32|432|432|1432|6432|64|65|KNAAAA|STNAAA|AAAAxx
+6220|9301|0|0|0|0|20|220|220|1220|6220|40|41|GFAAAA|TTNAAA|HHHHxx
+7233|9302|1|1|3|13|33|233|1233|2233|7233|66|67|FSAAAA|UTNAAA|OOOOxx
+2723|9303|1|3|3|3|23|723|723|2723|2723|46|47|TAAAAA|VTNAAA|VVVVxx
+1899|9304|1|3|9|19|99|899|1899|1899|1899|198|199|BVAAAA|WTNAAA|AAAAxx
+7158|9305|0|2|8|18|58|158|1158|2158|7158|116|117|IPAAAA|XTNAAA|HHHHxx
+202|9306|0|2|2|2|2|202|202|202|202|4|5|UHAAAA|YTNAAA|OOOOxx
+2286|9307|0|2|6|6|86|286|286|2286|2286|172|173|YJAAAA|ZTNAAA|VVVVxx
+5356|9308|0|0|6|16|56|356|1356|356|5356|112|113|AYAAAA|AUNAAA|AAAAxx
+3809|9309|1|1|9|9|9|809|1809|3809|3809|18|19|NQAAAA|BUNAAA|HHHHxx
+3979|9310|1|3|9|19|79|979|1979|3979|3979|158|159|BXAAAA|CUNAAA|OOOOxx
+8359|9311|1|3|9|19|59|359|359|3359|8359|118|119|NJAAAA|DUNAAA|VVVVxx
+3479|9312|1|3|9|19|79|479|1479|3479|3479|158|159|VDAAAA|EUNAAA|AAAAxx
+4895|9313|1|3|5|15|95|895|895|4895|4895|190|191|HGAAAA|FUNAAA|HHHHxx
+6059|9314|1|3|9|19|59|59|59|1059|6059|118|119|BZAAAA|GUNAAA|OOOOxx
+9560|9315|0|0|0|0|60|560|1560|4560|9560|120|121|SDAAAA|HUNAAA|VVVVxx
+6756|9316|0|0|6|16|56|756|756|1756|6756|112|113|WZAAAA|IUNAAA|AAAAxx
+7504|9317|0|0|4|4|4|504|1504|2504|7504|8|9|QCAAAA|JUNAAA|HHHHxx
+6762|9318|0|2|2|2|62|762|762|1762|6762|124|125|CAAAAA|KUNAAA|OOOOxx
+5304|9319|0|0|4|4|4|304|1304|304|5304|8|9|AWAAAA|LUNAAA|VVVVxx
+9533|9320|1|1|3|13|33|533|1533|4533|9533|66|67|RCAAAA|MUNAAA|AAAAxx
+6649|9321|1|1|9|9|49|649|649|1649|6649|98|99|TVAAAA|NUNAAA|HHHHxx
+38|9322|0|2|8|18|38|38|38|38|38|76|77|MBAAAA|OUNAAA|OOOOxx
+5713|9323|1|1|3|13|13|713|1713|713|5713|26|27|TLAAAA|PUNAAA|VVVVxx
+3000|9324|0|0|0|0|0|0|1000|3000|3000|0|1|KLAAAA|QUNAAA|AAAAxx
+3738|9325|0|2|8|18|38|738|1738|3738|3738|76|77|UNAAAA|RUNAAA|HHHHxx
+3327|9326|1|3|7|7|27|327|1327|3327|3327|54|55|ZXAAAA|SUNAAA|OOOOxx
+3922|9327|0|2|2|2|22|922|1922|3922|3922|44|45|WUAAAA|TUNAAA|VVVVxx
+9245|9328|1|1|5|5|45|245|1245|4245|9245|90|91|PRAAAA|UUNAAA|AAAAxx
+2172|9329|0|0|2|12|72|172|172|2172|2172|144|145|OFAAAA|VUNAAA|HHHHxx
+7128|9330|0|0|8|8|28|128|1128|2128|7128|56|57|EOAAAA|WUNAAA|OOOOxx
+1195|9331|1|3|5|15|95|195|1195|1195|1195|190|191|ZTAAAA|XUNAAA|VVVVxx
+8445|9332|1|1|5|5|45|445|445|3445|8445|90|91|VMAAAA|YUNAAA|AAAAxx
+8638|9333|0|2|8|18|38|638|638|3638|8638|76|77|GUAAAA|ZUNAAA|HHHHxx
+1249|9334|1|1|9|9|49|249|1249|1249|1249|98|99|BWAAAA|AVNAAA|OOOOxx
+8659|9335|1|3|9|19|59|659|659|3659|8659|118|119|BVAAAA|BVNAAA|VVVVxx
+3556|9336|0|0|6|16|56|556|1556|3556|3556|112|113|UGAAAA|CVNAAA|AAAAxx
+3347|9337|1|3|7|7|47|347|1347|3347|3347|94|95|TYAAAA|DVNAAA|HHHHxx
+3260|9338|0|0|0|0|60|260|1260|3260|3260|120|121|KVAAAA|EVNAAA|OOOOxx
+5139|9339|1|3|9|19|39|139|1139|139|5139|78|79|RPAAAA|FVNAAA|VVVVxx
+9991|9340|1|3|1|11|91|991|1991|4991|9991|182|183|HUAAAA|GVNAAA|AAAAxx
+5499|9341|1|3|9|19|99|499|1499|499|5499|198|199|NDAAAA|HVNAAA|HHHHxx
+8082|9342|0|2|2|2|82|82|82|3082|8082|164|165|WYAAAA|IVNAAA|OOOOxx
+1640|9343|0|0|0|0|40|640|1640|1640|1640|80|81|CLAAAA|JVNAAA|VVVVxx
+8726|9344|0|2|6|6|26|726|726|3726|8726|52|53|QXAAAA|KVNAAA|AAAAxx
+2339|9345|1|3|9|19|39|339|339|2339|2339|78|79|ZLAAAA|LVNAAA|HHHHxx
+2601|9346|1|1|1|1|1|601|601|2601|2601|2|3|BWAAAA|MVNAAA|OOOOxx
+9940|9347|0|0|0|0|40|940|1940|4940|9940|80|81|ISAAAA|NVNAAA|VVVVxx
+4185|9348|1|1|5|5|85|185|185|4185|4185|170|171|ZEAAAA|OVNAAA|AAAAxx
+9546|9349|0|2|6|6|46|546|1546|4546|9546|92|93|EDAAAA|PVNAAA|HHHHxx
+5218|9350|0|2|8|18|18|218|1218|218|5218|36|37|SSAAAA|QVNAAA|OOOOxx
+4374|9351|0|2|4|14|74|374|374|4374|4374|148|149|GMAAAA|RVNAAA|VVVVxx
+288|9352|0|0|8|8|88|288|288|288|288|176|177|CLAAAA|SVNAAA|AAAAxx
+7445|9353|1|1|5|5|45|445|1445|2445|7445|90|91|JAAAAA|TVNAAA|HHHHxx
+1710|9354|0|2|0|10|10|710|1710|1710|1710|20|21|UNAAAA|UVNAAA|OOOOxx
+6409|9355|1|1|9|9|9|409|409|1409|6409|18|19|NMAAAA|VVNAAA|VVVVxx
+7982|9356|0|2|2|2|82|982|1982|2982|7982|164|165|AVAAAA|WVNAAA|AAAAxx
+4950|9357|0|2|0|10|50|950|950|4950|4950|100|101|KIAAAA|XVNAAA|HHHHxx
+9242|9358|0|2|2|2|42|242|1242|4242|9242|84|85|MRAAAA|YVNAAA|OOOOxx
+3272|9359|0|0|2|12|72|272|1272|3272|3272|144|145|WVAAAA|ZVNAAA|VVVVxx
+739|9360|1|3|9|19|39|739|739|739|739|78|79|LCAAAA|AWNAAA|AAAAxx
+5526|9361|0|2|6|6|26|526|1526|526|5526|52|53|OEAAAA|BWNAAA|HHHHxx
+8189|9362|1|1|9|9|89|189|189|3189|8189|178|179|ZCAAAA|CWNAAA|OOOOxx
+9106|9363|0|2|6|6|6|106|1106|4106|9106|12|13|GMAAAA|DWNAAA|VVVVxx
+9775|9364|1|3|5|15|75|775|1775|4775|9775|150|151|ZLAAAA|EWNAAA|AAAAxx
+4643|9365|1|3|3|3|43|643|643|4643|4643|86|87|PWAAAA|FWNAAA|HHHHxx
+8396|9366|0|0|6|16|96|396|396|3396|8396|192|193|YKAAAA|GWNAAA|OOOOxx
+3255|9367|1|3|5|15|55|255|1255|3255|3255|110|111|FVAAAA|HWNAAA|VVVVxx
+301|9368|1|1|1|1|1|301|301|301|301|2|3|PLAAAA|IWNAAA|AAAAxx
+6014|9369|0|2|4|14|14|14|14|1014|6014|28|29|IXAAAA|JWNAAA|HHHHxx
+6046|9370|0|2|6|6|46|46|46|1046|6046|92|93|OYAAAA|KWNAAA|OOOOxx
+984|9371|0|0|4|4|84|984|984|984|984|168|169|WLAAAA|LWNAAA|VVVVxx
+2420|9372|0|0|0|0|20|420|420|2420|2420|40|41|CPAAAA|MWNAAA|AAAAxx
+2922|9373|0|2|2|2|22|922|922|2922|2922|44|45|KIAAAA|NWNAAA|HHHHxx
+2317|9374|1|1|7|17|17|317|317|2317|2317|34|35|DLAAAA|OWNAAA|OOOOxx
+7332|9375|0|0|2|12|32|332|1332|2332|7332|64|65|AWAAAA|PWNAAA|VVVVxx
+6451|9376|1|3|1|11|51|451|451|1451|6451|102|103|DOAAAA|QWNAAA|AAAAxx
+2589|9377|1|1|9|9|89|589|589|2589|2589|178|179|PVAAAA|RWNAAA|HHHHxx
+4333|9378|1|1|3|13|33|333|333|4333|4333|66|67|RKAAAA|SWNAAA|OOOOxx
+8650|9379|0|2|0|10|50|650|650|3650|8650|100|101|SUAAAA|TWNAAA|VVVVxx
+6856|9380|0|0|6|16|56|856|856|1856|6856|112|113|SDAAAA|UWNAAA|AAAAxx
+4194|9381|0|2|4|14|94|194|194|4194|4194|188|189|IFAAAA|VWNAAA|HHHHxx
+6246|9382|0|2|6|6|46|246|246|1246|6246|92|93|GGAAAA|WWNAAA|OOOOxx
+4371|9383|1|3|1|11|71|371|371|4371|4371|142|143|DMAAAA|XWNAAA|VVVVxx
+1388|9384|0|0|8|8|88|388|1388|1388|1388|176|177|KBAAAA|YWNAAA|AAAAxx
+1056|9385|0|0|6|16|56|56|1056|1056|1056|112|113|QOAAAA|ZWNAAA|HHHHxx
+6041|9386|1|1|1|1|41|41|41|1041|6041|82|83|JYAAAA|AXNAAA|OOOOxx
+6153|9387|1|1|3|13|53|153|153|1153|6153|106|107|RCAAAA|BXNAAA|VVVVxx
+8450|9388|0|2|0|10|50|450|450|3450|8450|100|101|ANAAAA|CXNAAA|AAAAxx
+3469|9389|1|1|9|9|69|469|1469|3469|3469|138|139|LDAAAA|DXNAAA|HHHHxx
+5226|9390|0|2|6|6|26|226|1226|226|5226|52|53|ATAAAA|EXNAAA|OOOOxx
+8112|9391|0|0|2|12|12|112|112|3112|8112|24|25|AAAAAA|FXNAAA|VVVVxx
+647|9392|1|3|7|7|47|647|647|647|647|94|95|XYAAAA|GXNAAA|AAAAxx
+2567|9393|1|3|7|7|67|567|567|2567|2567|134|135|TUAAAA|HXNAAA|HHHHxx
+9064|9394|0|0|4|4|64|64|1064|4064|9064|128|129|QKAAAA|IXNAAA|OOOOxx
+5161|9395|1|1|1|1|61|161|1161|161|5161|122|123|NQAAAA|JXNAAA|VVVVxx
+5260|9396|0|0|0|0|60|260|1260|260|5260|120|121|IUAAAA|KXNAAA|AAAAxx
+8988|9397|0|0|8|8|88|988|988|3988|8988|176|177|SHAAAA|LXNAAA|HHHHxx
+9678|9398|0|2|8|18|78|678|1678|4678|9678|156|157|GIAAAA|MXNAAA|OOOOxx
+6853|9399|1|1|3|13|53|853|853|1853|6853|106|107|PDAAAA|NXNAAA|VVVVxx
+5294|9400|0|2|4|14|94|294|1294|294|5294|188|189|QVAAAA|OXNAAA|AAAAxx
+9864|9401|0|0|4|4|64|864|1864|4864|9864|128|129|KPAAAA|PXNAAA|HHHHxx
+8702|9402|0|2|2|2|2|702|702|3702|8702|4|5|SWAAAA|QXNAAA|OOOOxx
+1132|9403|0|0|2|12|32|132|1132|1132|1132|64|65|ORAAAA|RXNAAA|VVVVxx
+1524|9404|0|0|4|4|24|524|1524|1524|1524|48|49|QGAAAA|SXNAAA|AAAAxx
+4560|9405|0|0|0|0|60|560|560|4560|4560|120|121|KTAAAA|TXNAAA|HHHHxx
+2137|9406|1|1|7|17|37|137|137|2137|2137|74|75|FEAAAA|UXNAAA|OOOOxx
+3283|9407|1|3|3|3|83|283|1283|3283|3283|166|167|HWAAAA|VXNAAA|VVVVxx
+3377|9408|1|1|7|17|77|377|1377|3377|3377|154|155|XZAAAA|WXNAAA|AAAAxx
+2267|9409|1|3|7|7|67|267|267|2267|2267|134|135|FJAAAA|XXNAAA|HHHHxx
+8987|9410|1|3|7|7|87|987|987|3987|8987|174|175|RHAAAA|YXNAAA|OOOOxx
+6709|9411|1|1|9|9|9|709|709|1709|6709|18|19|BYAAAA|ZXNAAA|VVVVxx
+8059|9412|1|3|9|19|59|59|59|3059|8059|118|119|ZXAAAA|AYNAAA|AAAAxx
+3402|9413|0|2|2|2|2|402|1402|3402|3402|4|5|WAAAAA|BYNAAA|HHHHxx
+6443|9414|1|3|3|3|43|443|443|1443|6443|86|87|VNAAAA|CYNAAA|OOOOxx
+8858|9415|0|2|8|18|58|858|858|3858|8858|116|117|SCAAAA|DYNAAA|VVVVxx
+3974|9416|0|2|4|14|74|974|1974|3974|3974|148|149|WWAAAA|EYNAAA|AAAAxx
+3521|9417|1|1|1|1|21|521|1521|3521|3521|42|43|LFAAAA|FYNAAA|HHHHxx
+9509|9418|1|1|9|9|9|509|1509|4509|9509|18|19|TBAAAA|GYNAAA|OOOOxx
+5442|9419|0|2|2|2|42|442|1442|442|5442|84|85|IBAAAA|HYNAAA|VVVVxx
+8968|9420|0|0|8|8|68|968|968|3968|8968|136|137|YGAAAA|IYNAAA|AAAAxx
+333|9421|1|1|3|13|33|333|333|333|333|66|67|VMAAAA|JYNAAA|HHHHxx
+952|9422|0|0|2|12|52|952|952|952|952|104|105|QKAAAA|KYNAAA|OOOOxx
+7482|9423|0|2|2|2|82|482|1482|2482|7482|164|165|UBAAAA|LYNAAA|VVVVxx
+1486|9424|0|2|6|6|86|486|1486|1486|1486|172|173|EFAAAA|MYNAAA|AAAAxx
+1815|9425|1|3|5|15|15|815|1815|1815|1815|30|31|VRAAAA|NYNAAA|HHHHxx
+7937|9426|1|1|7|17|37|937|1937|2937|7937|74|75|HTAAAA|OYNAAA|OOOOxx
+1436|9427|0|0|6|16|36|436|1436|1436|1436|72|73|GDAAAA|PYNAAA|VVVVxx
+3470|9428|0|2|0|10|70|470|1470|3470|3470|140|141|MDAAAA|QYNAAA|AAAAxx
+8195|9429|1|3|5|15|95|195|195|3195|8195|190|191|FDAAAA|RYNAAA|HHHHxx
+6906|9430|0|2|6|6|6|906|906|1906|6906|12|13|QFAAAA|SYNAAA|OOOOxx
+2539|9431|1|3|9|19|39|539|539|2539|2539|78|79|RTAAAA|TYNAAA|VVVVxx
+5988|9432|0|0|8|8|88|988|1988|988|5988|176|177|IWAAAA|UYNAAA|AAAAxx
+8908|9433|0|0|8|8|8|908|908|3908|8908|16|17|QEAAAA|VYNAAA|HHHHxx
+2319|9434|1|3|9|19|19|319|319|2319|2319|38|39|FLAAAA|WYNAAA|OOOOxx
+3263|9435|1|3|3|3|63|263|1263|3263|3263|126|127|NVAAAA|XYNAAA|VVVVxx
+4039|9436|1|3|9|19|39|39|39|4039|4039|78|79|JZAAAA|YYNAAA|AAAAxx
+6373|9437|1|1|3|13|73|373|373|1373|6373|146|147|DLAAAA|ZYNAAA|HHHHxx
+1168|9438|0|0|8|8|68|168|1168|1168|1168|136|137|YSAAAA|AZNAAA|OOOOxx
+8338|9439|0|2|8|18|38|338|338|3338|8338|76|77|SIAAAA|BZNAAA|VVVVxx
+1172|9440|0|0|2|12|72|172|1172|1172|1172|144|145|CTAAAA|CZNAAA|AAAAxx
+200|9441|0|0|0|0|0|200|200|200|200|0|1|SHAAAA|DZNAAA|HHHHxx
+6355|9442|1|3|5|15|55|355|355|1355|6355|110|111|LKAAAA|EZNAAA|OOOOxx
+7768|9443|0|0|8|8|68|768|1768|2768|7768|136|137|UMAAAA|FZNAAA|VVVVxx
+25|9444|1|1|5|5|25|25|25|25|25|50|51|ZAAAAA|GZNAAA|AAAAxx
+7144|9445|0|0|4|4|44|144|1144|2144|7144|88|89|UOAAAA|HZNAAA|HHHHxx
+8671|9446|1|3|1|11|71|671|671|3671|8671|142|143|NVAAAA|IZNAAA|OOOOxx
+9163|9447|1|3|3|3|63|163|1163|4163|9163|126|127|LOAAAA|JZNAAA|VVVVxx
+8889|9448|1|1|9|9|89|889|889|3889|8889|178|179|XDAAAA|KZNAAA|AAAAxx
+5950|9449|0|2|0|10|50|950|1950|950|5950|100|101|WUAAAA|LZNAAA|HHHHxx
+6163|9450|1|3|3|3|63|163|163|1163|6163|126|127|BDAAAA|MZNAAA|OOOOxx
+8119|9451|1|3|9|19|19|119|119|3119|8119|38|39|HAAAAA|NZNAAA|VVVVxx
+1416|9452|0|0|6|16|16|416|1416|1416|1416|32|33|MCAAAA|OZNAAA|AAAAxx
+4132|9453|0|0|2|12|32|132|132|4132|4132|64|65|YCAAAA|PZNAAA|HHHHxx
+2294|9454|0|2|4|14|94|294|294|2294|2294|188|189|GKAAAA|QZNAAA|OOOOxx
+9094|9455|0|2|4|14|94|94|1094|4094|9094|188|189|ULAAAA|RZNAAA|VVVVxx
+4168|9456|0|0|8|8|68|168|168|4168|4168|136|137|IEAAAA|SZNAAA|AAAAxx
+9108|9457|0|0|8|8|8|108|1108|4108|9108|16|17|IMAAAA|TZNAAA|HHHHxx
+5706|9458|0|2|6|6|6|706|1706|706|5706|12|13|MLAAAA|UZNAAA|OOOOxx
+2231|9459|1|3|1|11|31|231|231|2231|2231|62|63|VHAAAA|VZNAAA|VVVVxx
+2173|9460|1|1|3|13|73|173|173|2173|2173|146|147|PFAAAA|WZNAAA|AAAAxx
+90|9461|0|2|0|10|90|90|90|90|90|180|181|MDAAAA|XZNAAA|HHHHxx
+9996|9462|0|0|6|16|96|996|1996|4996|9996|192|193|MUAAAA|YZNAAA|OOOOxx
+330|9463|0|2|0|10|30|330|330|330|330|60|61|SMAAAA|ZZNAAA|VVVVxx
+2052|9464|0|0|2|12|52|52|52|2052|2052|104|105|YAAAAA|AAOAAA|AAAAxx
+1093|9465|1|1|3|13|93|93|1093|1093|1093|186|187|BQAAAA|BAOAAA|HHHHxx
+5817|9466|1|1|7|17|17|817|1817|817|5817|34|35|TPAAAA|CAOAAA|OOOOxx
+1559|9467|1|3|9|19|59|559|1559|1559|1559|118|119|ZHAAAA|DAOAAA|VVVVxx
+8405|9468|1|1|5|5|5|405|405|3405|8405|10|11|HLAAAA|EAOAAA|AAAAxx
+9962|9469|0|2|2|2|62|962|1962|4962|9962|124|125|ETAAAA|FAOAAA|HHHHxx
+9461|9470|1|1|1|1|61|461|1461|4461|9461|122|123|XZAAAA|GAOAAA|OOOOxx
+3028|9471|0|0|8|8|28|28|1028|3028|3028|56|57|MMAAAA|HAOAAA|VVVVxx
+6814|9472|0|2|4|14|14|814|814|1814|6814|28|29|CCAAAA|IAOAAA|AAAAxx
+9587|9473|1|3|7|7|87|587|1587|4587|9587|174|175|TEAAAA|JAOAAA|HHHHxx
+6863|9474|1|3|3|3|63|863|863|1863|6863|126|127|ZDAAAA|KAOAAA|OOOOxx
+4963|9475|1|3|3|3|63|963|963|4963|4963|126|127|XIAAAA|LAOAAA|VVVVxx
+7811|9476|1|3|1|11|11|811|1811|2811|7811|22|23|LOAAAA|MAOAAA|AAAAxx
+7608|9477|0|0|8|8|8|608|1608|2608|7608|16|17|QGAAAA|NAOAAA|HHHHxx
+5321|9478|1|1|1|1|21|321|1321|321|5321|42|43|RWAAAA|OAOAAA|OOOOxx
+9971|9479|1|3|1|11|71|971|1971|4971|9971|142|143|NTAAAA|PAOAAA|VVVVxx
+6161|9480|1|1|1|1|61|161|161|1161|6161|122|123|ZCAAAA|QAOAAA|AAAAxx
+2181|9481|1|1|1|1|81|181|181|2181|2181|162|163|XFAAAA|RAOAAA|HHHHxx
+3828|9482|0|0|8|8|28|828|1828|3828|3828|56|57|GRAAAA|SAOAAA|OOOOxx
+348|9483|0|0|8|8|48|348|348|348|348|96|97|KNAAAA|TAOAAA|VVVVxx
+5459|9484|1|3|9|19|59|459|1459|459|5459|118|119|ZBAAAA|UAOAAA|AAAAxx
+9406|9485|0|2|6|6|6|406|1406|4406|9406|12|13|UXAAAA|VAOAAA|HHHHxx
+9852|9486|0|0|2|12|52|852|1852|4852|9852|104|105|YOAAAA|WAOAAA|OOOOxx
+3095|9487|1|3|5|15|95|95|1095|3095|3095|190|191|BPAAAA|XAOAAA|VVVVxx
+5597|9488|1|1|7|17|97|597|1597|597|5597|194|195|HHAAAA|YAOAAA|AAAAxx
+8841|9489|1|1|1|1|41|841|841|3841|8841|82|83|BCAAAA|ZAOAAA|HHHHxx
+3536|9490|0|0|6|16|36|536|1536|3536|3536|72|73|AGAAAA|ABOAAA|OOOOxx
+4009|9491|1|1|9|9|9|9|9|4009|4009|18|19|FYAAAA|BBOAAA|VVVVxx
+7366|9492|0|2|6|6|66|366|1366|2366|7366|132|133|IXAAAA|CBOAAA|AAAAxx
+7327|9493|1|3|7|7|27|327|1327|2327|7327|54|55|VVAAAA|DBOAAA|HHHHxx
+1613|9494|1|1|3|13|13|613|1613|1613|1613|26|27|BKAAAA|EBOAAA|OOOOxx
+8619|9495|1|3|9|19|19|619|619|3619|8619|38|39|NTAAAA|FBOAAA|VVVVxx
+4880|9496|0|0|0|0|80|880|880|4880|4880|160|161|SFAAAA|GBOAAA|AAAAxx
+1552|9497|0|0|2|12|52|552|1552|1552|1552|104|105|SHAAAA|HBOAAA|HHHHxx
+7636|9498|0|0|6|16|36|636|1636|2636|7636|72|73|SHAAAA|IBOAAA|OOOOxx
+8397|9499|1|1|7|17|97|397|397|3397|8397|194|195|ZKAAAA|JBOAAA|VVVVxx
+6224|9500|0|0|4|4|24|224|224|1224|6224|48|49|KFAAAA|KBOAAA|AAAAxx
+9102|9501|0|2|2|2|2|102|1102|4102|9102|4|5|CMAAAA|LBOAAA|HHHHxx
+7906|9502|0|2|6|6|6|906|1906|2906|7906|12|13|CSAAAA|MBOAAA|OOOOxx
+9467|9503|1|3|7|7|67|467|1467|4467|9467|134|135|DAAAAA|NBOAAA|VVVVxx
+828|9504|0|0|8|8|28|828|828|828|828|56|57|WFAAAA|OBOAAA|AAAAxx
+9585|9505|1|1|5|5|85|585|1585|4585|9585|170|171|REAAAA|PBOAAA|HHHHxx
+925|9506|1|1|5|5|25|925|925|925|925|50|51|PJAAAA|QBOAAA|OOOOxx
+7375|9507|1|3|5|15|75|375|1375|2375|7375|150|151|RXAAAA|RBOAAA|VVVVxx
+4027|9508|1|3|7|7|27|27|27|4027|4027|54|55|XYAAAA|SBOAAA|AAAAxx
+766|9509|0|2|6|6|66|766|766|766|766|132|133|MDAAAA|TBOAAA|HHHHxx
+5633|9510|1|1|3|13|33|633|1633|633|5633|66|67|RIAAAA|UBOAAA|OOOOxx
+5648|9511|0|0|8|8|48|648|1648|648|5648|96|97|GJAAAA|VBOAAA|VVVVxx
+148|9512|0|0|8|8|48|148|148|148|148|96|97|SFAAAA|WBOAAA|AAAAxx
+2072|9513|0|0|2|12|72|72|72|2072|2072|144|145|SBAAAA|XBOAAA|HHHHxx
+431|9514|1|3|1|11|31|431|431|431|431|62|63|PQAAAA|YBOAAA|OOOOxx
+1711|9515|1|3|1|11|11|711|1711|1711|1711|22|23|VNAAAA|ZBOAAA|VVVVxx
+9378|9516|0|2|8|18|78|378|1378|4378|9378|156|157|SWAAAA|ACOAAA|AAAAxx
+6776|9517|0|0|6|16|76|776|776|1776|6776|152|153|QAAAAA|BCOAAA|HHHHxx
+6842|9518|0|2|2|2|42|842|842|1842|6842|84|85|EDAAAA|CCOAAA|OOOOxx
+2656|9519|0|0|6|16|56|656|656|2656|2656|112|113|EYAAAA|DCOAAA|VVVVxx
+3116|9520|0|0|6|16|16|116|1116|3116|3116|32|33|WPAAAA|ECOAAA|AAAAxx
+7904|9521|0|0|4|4|4|904|1904|2904|7904|8|9|ASAAAA|FCOAAA|HHHHxx
+3529|9522|1|1|9|9|29|529|1529|3529|3529|58|59|TFAAAA|GCOAAA|OOOOxx
+3240|9523|0|0|0|0|40|240|1240|3240|3240|80|81|QUAAAA|HCOAAA|VVVVxx
+5801|9524|1|1|1|1|1|801|1801|801|5801|2|3|DPAAAA|ICOAAA|AAAAxx
+4090|9525|0|2|0|10|90|90|90|4090|4090|180|181|IBAAAA|JCOAAA|HHHHxx
+7687|9526|1|3|7|7|87|687|1687|2687|7687|174|175|RJAAAA|KCOAAA|OOOOxx
+9711|9527|1|3|1|11|11|711|1711|4711|9711|22|23|NJAAAA|LCOAAA|VVVVxx
+4760|9528|0|0|0|0|60|760|760|4760|4760|120|121|CBAAAA|MCOAAA|AAAAxx
+5524|9529|0|0|4|4|24|524|1524|524|5524|48|49|MEAAAA|NCOAAA|HHHHxx
+2251|9530|1|3|1|11|51|251|251|2251|2251|102|103|PIAAAA|OCOAAA|OOOOxx
+1511|9531|1|3|1|11|11|511|1511|1511|1511|22|23|DGAAAA|PCOAAA|VVVVxx
+5991|9532|1|3|1|11|91|991|1991|991|5991|182|183|LWAAAA|QCOAAA|AAAAxx
+7808|9533|0|0|8|8|8|808|1808|2808|7808|16|17|IOAAAA|RCOAAA|HHHHxx
+8708|9534|0|0|8|8|8|708|708|3708|8708|16|17|YWAAAA|SCOAAA|OOOOxx
+8939|9535|1|3|9|19|39|939|939|3939|8939|78|79|VFAAAA|TCOAAA|VVVVxx
+4295|9536|1|3|5|15|95|295|295|4295|4295|190|191|FJAAAA|UCOAAA|AAAAxx
+5905|9537|1|1|5|5|5|905|1905|905|5905|10|11|DTAAAA|VCOAAA|HHHHxx
+2649|9538|1|1|9|9|49|649|649|2649|2649|98|99|XXAAAA|WCOAAA|OOOOxx
+2347|9539|1|3|7|7|47|347|347|2347|2347|94|95|HMAAAA|XCOAAA|VVVVxx
+6339|9540|1|3|9|19|39|339|339|1339|6339|78|79|VJAAAA|YCOAAA|AAAAxx
+292|9541|0|0|2|12|92|292|292|292|292|184|185|GLAAAA|ZCOAAA|HHHHxx
+9314|9542|0|2|4|14|14|314|1314|4314|9314|28|29|GUAAAA|ADOAAA|OOOOxx
+6893|9543|1|1|3|13|93|893|893|1893|6893|186|187|DFAAAA|BDOAAA|VVVVxx
+3970|9544|0|2|0|10|70|970|1970|3970|3970|140|141|SWAAAA|CDOAAA|AAAAxx
+1652|9545|0|0|2|12|52|652|1652|1652|1652|104|105|OLAAAA|DDOAAA|HHHHxx
+4326|9546|0|2|6|6|26|326|326|4326|4326|52|53|KKAAAA|EDOAAA|OOOOxx
+7881|9547|1|1|1|1|81|881|1881|2881|7881|162|163|DRAAAA|FDOAAA|VVVVxx
+5291|9548|1|3|1|11|91|291|1291|291|5291|182|183|NVAAAA|GDOAAA|AAAAxx
+957|9549|1|1|7|17|57|957|957|957|957|114|115|VKAAAA|HDOAAA|HHHHxx
+2313|9550|1|1|3|13|13|313|313|2313|2313|26|27|ZKAAAA|IDOAAA|OOOOxx
+5463|9551|1|3|3|3|63|463|1463|463|5463|126|127|DCAAAA|JDOAAA|VVVVxx
+1268|9552|0|0|8|8|68|268|1268|1268|1268|136|137|UWAAAA|KDOAAA|AAAAxx
+5028|9553|0|0|8|8|28|28|1028|28|5028|56|57|KLAAAA|LDOAAA|HHHHxx
+656|9554|0|0|6|16|56|656|656|656|656|112|113|GZAAAA|MDOAAA|OOOOxx
+9274|9555|0|2|4|14|74|274|1274|4274|9274|148|149|SSAAAA|NDOAAA|VVVVxx
+8217|9556|1|1|7|17|17|217|217|3217|8217|34|35|BEAAAA|ODOAAA|AAAAxx
+2175|9557|1|3|5|15|75|175|175|2175|2175|150|151|RFAAAA|PDOAAA|HHHHxx
+6028|9558|0|0|8|8|28|28|28|1028|6028|56|57|WXAAAA|QDOAAA|OOOOxx
+7584|9559|0|0|4|4|84|584|1584|2584|7584|168|169|SFAAAA|RDOAAA|VVVVxx
+4114|9560|0|2|4|14|14|114|114|4114|4114|28|29|GCAAAA|SDOAAA|AAAAxx
+8894|9561|0|2|4|14|94|894|894|3894|8894|188|189|CEAAAA|TDOAAA|HHHHxx
+781|9562|1|1|1|1|81|781|781|781|781|162|163|BEAAAA|UDOAAA|OOOOxx
+133|9563|1|1|3|13|33|133|133|133|133|66|67|DFAAAA|VDOAAA|VVVVxx
+7572|9564|0|0|2|12|72|572|1572|2572|7572|144|145|GFAAAA|WDOAAA|AAAAxx
+8514|9565|0|2|4|14|14|514|514|3514|8514|28|29|MPAAAA|XDOAAA|HHHHxx
+3352|9566|0|0|2|12|52|352|1352|3352|3352|104|105|YYAAAA|YDOAAA|OOOOxx
+8098|9567|0|2|8|18|98|98|98|3098|8098|196|197|MZAAAA|ZDOAAA|VVVVxx
+9116|9568|0|0|6|16|16|116|1116|4116|9116|32|33|QMAAAA|AEOAAA|AAAAxx
+9444|9569|0|0|4|4|44|444|1444|4444|9444|88|89|GZAAAA|BEOAAA|HHHHxx
+2590|9570|0|2|0|10|90|590|590|2590|2590|180|181|QVAAAA|CEOAAA|OOOOxx
+7302|9571|0|2|2|2|2|302|1302|2302|7302|4|5|WUAAAA|DEOAAA|VVVVxx
+7444|9572|0|0|4|4|44|444|1444|2444|7444|88|89|IAAAAA|EEOAAA|AAAAxx
+8748|9573|0|0|8|8|48|748|748|3748|8748|96|97|MYAAAA|FEOAAA|HHHHxx
+7615|9574|1|3|5|15|15|615|1615|2615|7615|30|31|XGAAAA|GEOAAA|OOOOxx
+6090|9575|0|2|0|10|90|90|90|1090|6090|180|181|GAAAAA|HEOAAA|VVVVxx
+1529|9576|1|1|9|9|29|529|1529|1529|1529|58|59|VGAAAA|IEOAAA|AAAAxx
+9398|9577|0|2|8|18|98|398|1398|4398|9398|196|197|MXAAAA|JEOAAA|HHHHxx
+6114|9578|0|2|4|14|14|114|114|1114|6114|28|29|EBAAAA|KEOAAA|OOOOxx
+2736|9579|0|0|6|16|36|736|736|2736|2736|72|73|GBAAAA|LEOAAA|VVVVxx
+468|9580|0|0|8|8|68|468|468|468|468|136|137|ASAAAA|MEOAAA|AAAAxx
+1487|9581|1|3|7|7|87|487|1487|1487|1487|174|175|FFAAAA|NEOAAA|HHHHxx
+4784|9582|0|0|4|4|84|784|784|4784|4784|168|169|ACAAAA|OEOAAA|OOOOxx
+6731|9583|1|3|1|11|31|731|731|1731|6731|62|63|XYAAAA|PEOAAA|VVVVxx
+3328|9584|0|0|8|8|28|328|1328|3328|3328|56|57|AYAAAA|QEOAAA|AAAAxx
+6891|9585|1|3|1|11|91|891|891|1891|6891|182|183|BFAAAA|REOAAA|HHHHxx
+8039|9586|1|3|9|19|39|39|39|3039|8039|78|79|FXAAAA|SEOAAA|OOOOxx
+4064|9587|0|0|4|4|64|64|64|4064|4064|128|129|IAAAAA|TEOAAA|VVVVxx
+542|9588|0|2|2|2|42|542|542|542|542|84|85|WUAAAA|UEOAAA|AAAAxx
+1039|9589|1|3|9|19|39|39|1039|1039|1039|78|79|ZNAAAA|VEOAAA|HHHHxx
+5603|9590|1|3|3|3|3|603|1603|603|5603|6|7|NHAAAA|WEOAAA|OOOOxx
+6641|9591|1|1|1|1|41|641|641|1641|6641|82|83|LVAAAA|XEOAAA|VVVVxx
+6307|9592|1|3|7|7|7|307|307|1307|6307|14|15|PIAAAA|YEOAAA|AAAAxx
+5354|9593|0|2|4|14|54|354|1354|354|5354|108|109|YXAAAA|ZEOAAA|HHHHxx
+7878|9594|0|2|8|18|78|878|1878|2878|7878|156|157|ARAAAA|AFOAAA|OOOOxx
+6391|9595|1|3|1|11|91|391|391|1391|6391|182|183|VLAAAA|BFOAAA|VVVVxx
+4575|9596|1|3|5|15|75|575|575|4575|4575|150|151|ZTAAAA|CFOAAA|AAAAxx
+6644|9597|0|0|4|4|44|644|644|1644|6644|88|89|OVAAAA|DFOAAA|HHHHxx
+5207|9598|1|3|7|7|7|207|1207|207|5207|14|15|HSAAAA|EFOAAA|OOOOxx
+1736|9599|0|0|6|16|36|736|1736|1736|1736|72|73|UOAAAA|FFOAAA|VVVVxx
+3547|9600|1|3|7|7|47|547|1547|3547|3547|94|95|LGAAAA|GFOAAA|AAAAxx
+6647|9601|1|3|7|7|47|647|647|1647|6647|94|95|RVAAAA|HFOAAA|HHHHxx
+4107|9602|1|3|7|7|7|107|107|4107|4107|14|15|ZBAAAA|IFOAAA|OOOOxx
+8125|9603|1|1|5|5|25|125|125|3125|8125|50|51|NAAAAA|JFOAAA|VVVVxx
+9223|9604|1|3|3|3|23|223|1223|4223|9223|46|47|TQAAAA|KFOAAA|AAAAxx
+6903|9605|1|3|3|3|3|903|903|1903|6903|6|7|NFAAAA|LFOAAA|HHHHxx
+3639|9606|1|3|9|19|39|639|1639|3639|3639|78|79|ZJAAAA|MFOAAA|OOOOxx
+9606|9607|0|2|6|6|6|606|1606|4606|9606|12|13|MFAAAA|NFOAAA|VVVVxx
+3232|9608|0|0|2|12|32|232|1232|3232|3232|64|65|IUAAAA|OFOAAA|AAAAxx
+2063|9609|1|3|3|3|63|63|63|2063|2063|126|127|JBAAAA|PFOAAA|HHHHxx
+3731|9610|1|3|1|11|31|731|1731|3731|3731|62|63|NNAAAA|QFOAAA|OOOOxx
+2558|9611|0|2|8|18|58|558|558|2558|2558|116|117|KUAAAA|RFOAAA|VVVVxx
+2357|9612|1|1|7|17|57|357|357|2357|2357|114|115|RMAAAA|SFOAAA|AAAAxx
+6008|9613|0|0|8|8|8|8|8|1008|6008|16|17|CXAAAA|TFOAAA|HHHHxx
+8246|9614|0|2|6|6|46|246|246|3246|8246|92|93|EFAAAA|UFOAAA|OOOOxx
+8220|9615|0|0|0|0|20|220|220|3220|8220|40|41|EEAAAA|VFOAAA|VVVVxx
+1075|9616|1|3|5|15|75|75|1075|1075|1075|150|151|JPAAAA|WFOAAA|AAAAxx
+2410|9617|0|2|0|10|10|410|410|2410|2410|20|21|SOAAAA|XFOAAA|HHHHxx
+3253|9618|1|1|3|13|53|253|1253|3253|3253|106|107|DVAAAA|YFOAAA|OOOOxx
+4370|9619|0|2|0|10|70|370|370|4370|4370|140|141|CMAAAA|ZFOAAA|VVVVxx
+8426|9620|0|2|6|6|26|426|426|3426|8426|52|53|CMAAAA|AGOAAA|AAAAxx
+2262|9621|0|2|2|2|62|262|262|2262|2262|124|125|AJAAAA|BGOAAA|HHHHxx
+4149|9622|1|1|9|9|49|149|149|4149|4149|98|99|PDAAAA|CGOAAA|OOOOxx
+2732|9623|0|0|2|12|32|732|732|2732|2732|64|65|CBAAAA|DGOAAA|VVVVxx
+8606|9624|0|2|6|6|6|606|606|3606|8606|12|13|ATAAAA|EGOAAA|AAAAxx
+6311|9625|1|3|1|11|11|311|311|1311|6311|22|23|TIAAAA|FGOAAA|HHHHxx
+7223|9626|1|3|3|3|23|223|1223|2223|7223|46|47|VRAAAA|GGOAAA|OOOOxx
+3054|9627|0|2|4|14|54|54|1054|3054|3054|108|109|MNAAAA|HGOAAA|VVVVxx
+3952|9628|0|0|2|12|52|952|1952|3952|3952|104|105|AWAAAA|IGOAAA|AAAAxx
+8252|9629|0|0|2|12|52|252|252|3252|8252|104|105|KFAAAA|JGOAAA|HHHHxx
+6020|9630|0|0|0|0|20|20|20|1020|6020|40|41|OXAAAA|KGOAAA|OOOOxx
+3846|9631|0|2|6|6|46|846|1846|3846|3846|92|93|YRAAAA|LGOAAA|VVVVxx
+3755|9632|1|3|5|15|55|755|1755|3755|3755|110|111|LOAAAA|MGOAAA|AAAAxx
+3765|9633|1|1|5|5|65|765|1765|3765|3765|130|131|VOAAAA|NGOAAA|HHHHxx
+3434|9634|0|2|4|14|34|434|1434|3434|3434|68|69|CCAAAA|OGOAAA|OOOOxx
+1381|9635|1|1|1|1|81|381|1381|1381|1381|162|163|DBAAAA|PGOAAA|VVVVxx
+287|9636|1|3|7|7|87|287|287|287|287|174|175|BLAAAA|QGOAAA|AAAAxx
+4476|9637|0|0|6|16|76|476|476|4476|4476|152|153|EQAAAA|RGOAAA|HHHHxx
+2916|9638|0|0|6|16|16|916|916|2916|2916|32|33|EIAAAA|SGOAAA|OOOOxx
+4517|9639|1|1|7|17|17|517|517|4517|4517|34|35|TRAAAA|TGOAAA|VVVVxx
+4561|9640|1|1|1|1|61|561|561|4561|4561|122|123|LTAAAA|UGOAAA|AAAAxx
+5106|9641|0|2|6|6|6|106|1106|106|5106|12|13|KOAAAA|VGOAAA|HHHHxx
+2077|9642|1|1|7|17|77|77|77|2077|2077|154|155|XBAAAA|WGOAAA|OOOOxx
+5269|9643|1|1|9|9|69|269|1269|269|5269|138|139|RUAAAA|XGOAAA|VVVVxx
+5688|9644|0|0|8|8|88|688|1688|688|5688|176|177|UKAAAA|YGOAAA|AAAAxx
+8831|9645|1|3|1|11|31|831|831|3831|8831|62|63|RBAAAA|ZGOAAA|HHHHxx
+3867|9646|1|3|7|7|67|867|1867|3867|3867|134|135|TSAAAA|AHOAAA|OOOOxx
+6062|9647|0|2|2|2|62|62|62|1062|6062|124|125|EZAAAA|BHOAAA|VVVVxx
+8460|9648|0|0|0|0|60|460|460|3460|8460|120|121|KNAAAA|CHOAAA|AAAAxx
+3138|9649|0|2|8|18|38|138|1138|3138|3138|76|77|SQAAAA|DHOAAA|HHHHxx
+3173|9650|1|1|3|13|73|173|1173|3173|3173|146|147|BSAAAA|EHOAAA|OOOOxx
+7018|9651|0|2|8|18|18|18|1018|2018|7018|36|37|YJAAAA|FHOAAA|VVVVxx
+4836|9652|0|0|6|16|36|836|836|4836|4836|72|73|AEAAAA|GHOAAA|AAAAxx
+1007|9653|1|3|7|7|7|7|1007|1007|1007|14|15|TMAAAA|HHOAAA|HHHHxx
+658|9654|0|2|8|18|58|658|658|658|658|116|117|IZAAAA|IHOAAA|OOOOxx
+5205|9655|1|1|5|5|5|205|1205|205|5205|10|11|FSAAAA|JHOAAA|VVVVxx
+5805|9656|1|1|5|5|5|805|1805|805|5805|10|11|HPAAAA|KHOAAA|AAAAxx
+5959|9657|1|3|9|19|59|959|1959|959|5959|118|119|FVAAAA|LHOAAA|HHHHxx
+2863|9658|1|3|3|3|63|863|863|2863|2863|126|127|DGAAAA|MHOAAA|OOOOxx
+7272|9659|0|0|2|12|72|272|1272|2272|7272|144|145|STAAAA|NHOAAA|VVVVxx
+8437|9660|1|1|7|17|37|437|437|3437|8437|74|75|NMAAAA|OHOAAA|AAAAxx
+4900|9661|0|0|0|0|0|900|900|4900|4900|0|1|MGAAAA|PHOAAA|HHHHxx
+890|9662|0|2|0|10|90|890|890|890|890|180|181|GIAAAA|QHOAAA|OOOOxx
+3530|9663|0|2|0|10|30|530|1530|3530|3530|60|61|UFAAAA|RHOAAA|VVVVxx
+6209|9664|1|1|9|9|9|209|209|1209|6209|18|19|VEAAAA|SHOAAA|AAAAxx
+4595|9665|1|3|5|15|95|595|595|4595|4595|190|191|TUAAAA|THOAAA|HHHHxx
+5982|9666|0|2|2|2|82|982|1982|982|5982|164|165|CWAAAA|UHOAAA|OOOOxx
+1101|9667|1|1|1|1|1|101|1101|1101|1101|2|3|JQAAAA|VHOAAA|VVVVxx
+9555|9668|1|3|5|15|55|555|1555|4555|9555|110|111|NDAAAA|WHOAAA|AAAAxx
+1918|9669|0|2|8|18|18|918|1918|1918|1918|36|37|UVAAAA|XHOAAA|HHHHxx
+3527|9670|1|3|7|7|27|527|1527|3527|3527|54|55|RFAAAA|YHOAAA|OOOOxx
+7309|9671|1|1|9|9|9|309|1309|2309|7309|18|19|DVAAAA|ZHOAAA|VVVVxx
+8213|9672|1|1|3|13|13|213|213|3213|8213|26|27|XDAAAA|AIOAAA|AAAAxx
+306|9673|0|2|6|6|6|306|306|306|306|12|13|ULAAAA|BIOAAA|HHHHxx
+845|9674|1|1|5|5|45|845|845|845|845|90|91|NGAAAA|CIOAAA|OOOOxx
+16|9675|0|0|6|16|16|16|16|16|16|32|33|QAAAAA|DIOAAA|VVVVxx
+437|9676|1|1|7|17|37|437|437|437|437|74|75|VQAAAA|EIOAAA|AAAAxx
+9518|9677|0|2|8|18|18|518|1518|4518|9518|36|37|CCAAAA|FIOAAA|HHHHxx
+2142|9678|0|2|2|2|42|142|142|2142|2142|84|85|KEAAAA|GIOAAA|OOOOxx
+8121|9679|1|1|1|1|21|121|121|3121|8121|42|43|JAAAAA|HIOAAA|VVVVxx
+7354|9680|0|2|4|14|54|354|1354|2354|7354|108|109|WWAAAA|IIOAAA|AAAAxx
+1720|9681|0|0|0|0|20|720|1720|1720|1720|40|41|EOAAAA|JIOAAA|HHHHxx
+6078|9682|0|2|8|18|78|78|78|1078|6078|156|157|UZAAAA|KIOAAA|OOOOxx
+5929|9683|1|1|9|9|29|929|1929|929|5929|58|59|BUAAAA|LIOAAA|VVVVxx
+3856|9684|0|0|6|16|56|856|1856|3856|3856|112|113|ISAAAA|MIOAAA|AAAAxx
+3424|9685|0|0|4|4|24|424|1424|3424|3424|48|49|SBAAAA|NIOAAA|HHHHxx
+1712|9686|0|0|2|12|12|712|1712|1712|1712|24|25|WNAAAA|OIOAAA|OOOOxx
+2340|9687|0|0|0|0|40|340|340|2340|2340|80|81|AMAAAA|PIOAAA|VVVVxx
+5570|9688|0|2|0|10|70|570|1570|570|5570|140|141|GGAAAA|QIOAAA|AAAAxx
+8734|9689|0|2|4|14|34|734|734|3734|8734|68|69|YXAAAA|RIOAAA|HHHHxx
+6077|9690|1|1|7|17|77|77|77|1077|6077|154|155|TZAAAA|SIOAAA|OOOOxx
+2960|9691|0|0|0|0|60|960|960|2960|2960|120|121|WJAAAA|TIOAAA|VVVVxx
+5062|9692|0|2|2|2|62|62|1062|62|5062|124|125|SMAAAA|UIOAAA|AAAAxx
+1532|9693|0|0|2|12|32|532|1532|1532|1532|64|65|YGAAAA|VIOAAA|HHHHxx
+8298|9694|0|2|8|18|98|298|298|3298|8298|196|197|EHAAAA|WIOAAA|OOOOxx
+2496|9695|0|0|6|16|96|496|496|2496|2496|192|193|ASAAAA|XIOAAA|VVVVxx
+8412|9696|0|0|2|12|12|412|412|3412|8412|24|25|OLAAAA|YIOAAA|AAAAxx
+724|9697|0|0|4|4|24|724|724|724|724|48|49|WBAAAA|ZIOAAA|HHHHxx
+1019|9698|1|3|9|19|19|19|1019|1019|1019|38|39|FNAAAA|AJOAAA|OOOOxx
+6265|9699|1|1|5|5|65|265|265|1265|6265|130|131|ZGAAAA|BJOAAA|VVVVxx
+740|9700|0|0|0|0|40|740|740|740|740|80|81|MCAAAA|CJOAAA|AAAAxx
+8495|9701|1|3|5|15|95|495|495|3495|8495|190|191|TOAAAA|DJOAAA|HHHHxx
+6983|9702|1|3|3|3|83|983|983|1983|6983|166|167|PIAAAA|EJOAAA|OOOOxx
+991|9703|1|3|1|11|91|991|991|991|991|182|183|DMAAAA|FJOAAA|VVVVxx
+3189|9704|1|1|9|9|89|189|1189|3189|3189|178|179|RSAAAA|GJOAAA|AAAAxx
+4487|9705|1|3|7|7|87|487|487|4487|4487|174|175|PQAAAA|HJOAAA|HHHHxx
+5554|9706|0|2|4|14|54|554|1554|554|5554|108|109|QFAAAA|IJOAAA|OOOOxx
+1258|9707|0|2|8|18|58|258|1258|1258|1258|116|117|KWAAAA|JJOAAA|VVVVxx
+5359|9708|1|3|9|19|59|359|1359|359|5359|118|119|DYAAAA|KJOAAA|AAAAxx
+2709|9709|1|1|9|9|9|709|709|2709|2709|18|19|FAAAAA|LJOAAA|HHHHxx
+361|9710|1|1|1|1|61|361|361|361|361|122|123|XNAAAA|MJOAAA|OOOOxx
+4028|9711|0|0|8|8|28|28|28|4028|4028|56|57|YYAAAA|NJOAAA|VVVVxx
+3735|9712|1|3|5|15|35|735|1735|3735|3735|70|71|RNAAAA|OJOAAA|AAAAxx
+4427|9713|1|3|7|7|27|427|427|4427|4427|54|55|HOAAAA|PJOAAA|HHHHxx
+7540|9714|0|0|0|0|40|540|1540|2540|7540|80|81|AEAAAA|QJOAAA|OOOOxx
+3569|9715|1|1|9|9|69|569|1569|3569|3569|138|139|HHAAAA|RJOAAA|VVVVxx
+1916|9716|0|0|6|16|16|916|1916|1916|1916|32|33|SVAAAA|SJOAAA|AAAAxx
+7596|9717|0|0|6|16|96|596|1596|2596|7596|192|193|EGAAAA|TJOAAA|HHHHxx
+9721|9718|1|1|1|1|21|721|1721|4721|9721|42|43|XJAAAA|UJOAAA|OOOOxx
+4429|9719|1|1|9|9|29|429|429|4429|4429|58|59|JOAAAA|VJOAAA|VVVVxx
+3471|9720|1|3|1|11|71|471|1471|3471|3471|142|143|NDAAAA|WJOAAA|AAAAxx
+1157|9721|1|1|7|17|57|157|1157|1157|1157|114|115|NSAAAA|XJOAAA|HHHHxx
+5700|9722|0|0|0|0|0|700|1700|700|5700|0|1|GLAAAA|YJOAAA|OOOOxx
+4431|9723|1|3|1|11|31|431|431|4431|4431|62|63|LOAAAA|ZJOAAA|VVVVxx
+9409|9724|1|1|9|9|9|409|1409|4409|9409|18|19|XXAAAA|AKOAAA|AAAAxx
+8752|9725|0|0|2|12|52|752|752|3752|8752|104|105|QYAAAA|BKOAAA|HHHHxx
+9484|9726|0|0|4|4|84|484|1484|4484|9484|168|169|UAAAAA|CKOAAA|OOOOxx
+1266|9727|0|2|6|6|66|266|1266|1266|1266|132|133|SWAAAA|DKOAAA|VVVVxx
+9097|9728|1|1|7|17|97|97|1097|4097|9097|194|195|XLAAAA|EKOAAA|AAAAxx
+3068|9729|0|0|8|8|68|68|1068|3068|3068|136|137|AOAAAA|FKOAAA|HHHHxx
+5490|9730|0|2|0|10|90|490|1490|490|5490|180|181|EDAAAA|GKOAAA|OOOOxx
+1375|9731|1|3|5|15|75|375|1375|1375|1375|150|151|XAAAAA|HKOAAA|VVVVxx
+2487|9732|1|3|7|7|87|487|487|2487|2487|174|175|RRAAAA|IKOAAA|AAAAxx
+1705|9733|1|1|5|5|5|705|1705|1705|1705|10|11|PNAAAA|JKOAAA|HHHHxx
+1571|9734|1|3|1|11|71|571|1571|1571|1571|142|143|LIAAAA|KKOAAA|OOOOxx
+4005|9735|1|1|5|5|5|5|5|4005|4005|10|11|BYAAAA|LKOAAA|VVVVxx
+5497|9736|1|1|7|17|97|497|1497|497|5497|194|195|LDAAAA|MKOAAA|AAAAxx
+2144|9737|0|0|4|4|44|144|144|2144|2144|88|89|MEAAAA|NKOAAA|HHHHxx
+4052|9738|0|0|2|12|52|52|52|4052|4052|104|105|WZAAAA|OKOAAA|OOOOxx
+4942|9739|0|2|2|2|42|942|942|4942|4942|84|85|CIAAAA|PKOAAA|VVVVxx
+5504|9740|0|0|4|4|4|504|1504|504|5504|8|9|SDAAAA|QKOAAA|AAAAxx
+2913|9741|1|1|3|13|13|913|913|2913|2913|26|27|BIAAAA|RKOAAA|HHHHxx
+5617|9742|1|1|7|17|17|617|1617|617|5617|34|35|BIAAAA|SKOAAA|OOOOxx
+8179|9743|1|3|9|19|79|179|179|3179|8179|158|159|PCAAAA|TKOAAA|VVVVxx
+9437|9744|1|1|7|17|37|437|1437|4437|9437|74|75|ZYAAAA|UKOAAA|AAAAxx
+1821|9745|1|1|1|1|21|821|1821|1821|1821|42|43|BSAAAA|VKOAAA|HHHHxx
+5737|9746|1|1|7|17|37|737|1737|737|5737|74|75|RMAAAA|WKOAAA|OOOOxx
+4207|9747|1|3|7|7|7|207|207|4207|4207|14|15|VFAAAA|XKOAAA|VVVVxx
+4815|9748|1|3|5|15|15|815|815|4815|4815|30|31|FDAAAA|YKOAAA|AAAAxx
+8707|9749|1|3|7|7|7|707|707|3707|8707|14|15|XWAAAA|ZKOAAA|HHHHxx
+5970|9750|0|2|0|10|70|970|1970|970|5970|140|141|QVAAAA|ALOAAA|OOOOxx
+5501|9751|1|1|1|1|1|501|1501|501|5501|2|3|PDAAAA|BLOAAA|VVVVxx
+4013|9752|1|1|3|13|13|13|13|4013|4013|26|27|JYAAAA|CLOAAA|AAAAxx
+9235|9753|1|3|5|15|35|235|1235|4235|9235|70|71|FRAAAA|DLOAAA|HHHHxx
+2503|9754|1|3|3|3|3|503|503|2503|2503|6|7|HSAAAA|ELOAAA|OOOOxx
+9181|9755|1|1|1|1|81|181|1181|4181|9181|162|163|DPAAAA|FLOAAA|VVVVxx
+2289|9756|1|1|9|9|89|289|289|2289|2289|178|179|BKAAAA|GLOAAA|AAAAxx
+4256|9757|0|0|6|16|56|256|256|4256|4256|112|113|SHAAAA|HLOAAA|HHHHxx
+191|9758|1|3|1|11|91|191|191|191|191|182|183|JHAAAA|ILOAAA|OOOOxx
+9655|9759|1|3|5|15|55|655|1655|4655|9655|110|111|JHAAAA|JLOAAA|VVVVxx
+8615|9760|1|3|5|15|15|615|615|3615|8615|30|31|JTAAAA|KLOAAA|AAAAxx
+3011|9761|1|3|1|11|11|11|1011|3011|3011|22|23|VLAAAA|LLOAAA|HHHHxx
+6376|9762|0|0|6|16|76|376|376|1376|6376|152|153|GLAAAA|MLOAAA|OOOOxx
+68|9763|0|0|8|8|68|68|68|68|68|136|137|QCAAAA|NLOAAA|VVVVxx
+4720|9764|0|0|0|0|20|720|720|4720|4720|40|41|OZAAAA|OLOAAA|AAAAxx
+6848|9765|0|0|8|8|48|848|848|1848|6848|96|97|KDAAAA|PLOAAA|HHHHxx
+456|9766|0|0|6|16|56|456|456|456|456|112|113|ORAAAA|QLOAAA|OOOOxx
+5887|9767|1|3|7|7|87|887|1887|887|5887|174|175|LSAAAA|RLOAAA|VVVVxx
+9249|9768|1|1|9|9|49|249|1249|4249|9249|98|99|TRAAAA|SLOAAA|AAAAxx
+4041|9769|1|1|1|1|41|41|41|4041|4041|82|83|LZAAAA|TLOAAA|HHHHxx
+2304|9770|0|0|4|4|4|304|304|2304|2304|8|9|QKAAAA|ULOAAA|OOOOxx
+8763|9771|1|3|3|3|63|763|763|3763|8763|126|127|BZAAAA|VLOAAA|VVVVxx
+2115|9772|1|3|5|15|15|115|115|2115|2115|30|31|JDAAAA|WLOAAA|AAAAxx
+8014|9773|0|2|4|14|14|14|14|3014|8014|28|29|GWAAAA|XLOAAA|HHHHxx
+9895|9774|1|3|5|15|95|895|1895|4895|9895|190|191|PQAAAA|YLOAAA|OOOOxx
+671|9775|1|3|1|11|71|671|671|671|671|142|143|VZAAAA|ZLOAAA|VVVVxx
+3774|9776|0|2|4|14|74|774|1774|3774|3774|148|149|EPAAAA|AMOAAA|AAAAxx
+134|9777|0|2|4|14|34|134|134|134|134|68|69|EFAAAA|BMOAAA|HHHHxx
+534|9778|0|2|4|14|34|534|534|534|534|68|69|OUAAAA|CMOAAA|OOOOxx
+7308|9779|0|0|8|8|8|308|1308|2308|7308|16|17|CVAAAA|DMOAAA|VVVVxx
+5244|9780|0|0|4|4|44|244|1244|244|5244|88|89|STAAAA|EMOAAA|AAAAxx
+1512|9781|0|0|2|12|12|512|1512|1512|1512|24|25|EGAAAA|FMOAAA|HHHHxx
+8960|9782|0|0|0|0|60|960|960|3960|8960|120|121|QGAAAA|GMOAAA|OOOOxx
+6602|9783|0|2|2|2|2|602|602|1602|6602|4|5|YTAAAA|HMOAAA|VVVVxx
+593|9784|1|1|3|13|93|593|593|593|593|186|187|VWAAAA|IMOAAA|AAAAxx
+2353|9785|1|1|3|13|53|353|353|2353|2353|106|107|NMAAAA|JMOAAA|HHHHxx
+4139|9786|1|3|9|19|39|139|139|4139|4139|78|79|FDAAAA|KMOAAA|OOOOxx
+3063|9787|1|3|3|3|63|63|1063|3063|3063|126|127|VNAAAA|LMOAAA|VVVVxx
+652|9788|0|0|2|12|52|652|652|652|652|104|105|CZAAAA|MMOAAA|AAAAxx
+7405|9789|1|1|5|5|5|405|1405|2405|7405|10|11|VYAAAA|NMOAAA|HHHHxx
+3034|9790|0|2|4|14|34|34|1034|3034|3034|68|69|SMAAAA|OMOAAA|OOOOxx
+4614|9791|0|2|4|14|14|614|614|4614|4614|28|29|MVAAAA|PMOAAA|VVVVxx
+2351|9792|1|3|1|11|51|351|351|2351|2351|102|103|LMAAAA|QMOAAA|AAAAxx
+8208|9793|0|0|8|8|8|208|208|3208|8208|16|17|SDAAAA|RMOAAA|HHHHxx
+5475|9794|1|3|5|15|75|475|1475|475|5475|150|151|PCAAAA|SMOAAA|OOOOxx
+6875|9795|1|3|5|15|75|875|875|1875|6875|150|151|LEAAAA|TMOAAA|VVVVxx
+563|9796|1|3|3|3|63|563|563|563|563|126|127|RVAAAA|UMOAAA|AAAAxx
+3346|9797|0|2|6|6|46|346|1346|3346|3346|92|93|SYAAAA|VMOAAA|HHHHxx
+291|9798|1|3|1|11|91|291|291|291|291|182|183|FLAAAA|WMOAAA|OOOOxx
+6345|9799|1|1|5|5|45|345|345|1345|6345|90|91|BKAAAA|XMOAAA|VVVVxx
+8099|9800|1|3|9|19|99|99|99|3099|8099|198|199|NZAAAA|YMOAAA|AAAAxx
+2078|9801|0|2|8|18|78|78|78|2078|2078|156|157|YBAAAA|ZMOAAA|HHHHxx
+8238|9802|0|2|8|18|38|238|238|3238|8238|76|77|WEAAAA|ANOAAA|OOOOxx
+4482|9803|0|2|2|2|82|482|482|4482|4482|164|165|KQAAAA|BNOAAA|VVVVxx
+716|9804|0|0|6|16|16|716|716|716|716|32|33|OBAAAA|CNOAAA|AAAAxx
+7288|9805|0|0|8|8|88|288|1288|2288|7288|176|177|IUAAAA|DNOAAA|HHHHxx
+5906|9806|0|2|6|6|6|906|1906|906|5906|12|13|ETAAAA|ENOAAA|OOOOxx
+5618|9807|0|2|8|18|18|618|1618|618|5618|36|37|CIAAAA|FNOAAA|VVVVxx
+1141|9808|1|1|1|1|41|141|1141|1141|1141|82|83|XRAAAA|GNOAAA|AAAAxx
+8231|9809|1|3|1|11|31|231|231|3231|8231|62|63|PEAAAA|HNOAAA|HHHHxx
+3713|9810|1|1|3|13|13|713|1713|3713|3713|26|27|VMAAAA|INOAAA|OOOOxx
+9158|9811|0|2|8|18|58|158|1158|4158|9158|116|117|GOAAAA|JNOAAA|VVVVxx
+4051|9812|1|3|1|11|51|51|51|4051|4051|102|103|VZAAAA|KNOAAA|AAAAxx
+1973|9813|1|1|3|13|73|973|1973|1973|1973|146|147|XXAAAA|LNOAAA|HHHHxx
+6710|9814|0|2|0|10|10|710|710|1710|6710|20|21|CYAAAA|MNOAAA|OOOOxx
+1021|9815|1|1|1|1|21|21|1021|1021|1021|42|43|HNAAAA|NNOAAA|VVVVxx
+2196|9816|0|0|6|16|96|196|196|2196|2196|192|193|MGAAAA|ONOAAA|AAAAxx
+8335|9817|1|3|5|15|35|335|335|3335|8335|70|71|PIAAAA|PNOAAA|HHHHxx
+2272|9818|0|0|2|12|72|272|272|2272|2272|144|145|KJAAAA|QNOAAA|OOOOxx
+3818|9819|0|2|8|18|18|818|1818|3818|3818|36|37|WQAAAA|RNOAAA|VVVVxx
+679|9820|1|3|9|19|79|679|679|679|679|158|159|DAAAAA|SNOAAA|AAAAxx
+7512|9821|0|0|2|12|12|512|1512|2512|7512|24|25|YCAAAA|TNOAAA|HHHHxx
+493|9822|1|1|3|13|93|493|493|493|493|186|187|ZSAAAA|UNOAAA|OOOOxx
+5663|9823|1|3|3|3|63|663|1663|663|5663|126|127|VJAAAA|VNOAAA|VVVVxx
+4655|9824|1|3|5|15|55|655|655|4655|4655|110|111|BXAAAA|WNOAAA|AAAAxx
+3996|9825|0|0|6|16|96|996|1996|3996|3996|192|193|SXAAAA|XNOAAA|HHHHxx
+8797|9826|1|1|7|17|97|797|797|3797|8797|194|195|JAAAAA|YNOAAA|OOOOxx
+2991|9827|1|3|1|11|91|991|991|2991|2991|182|183|BLAAAA|ZNOAAA|VVVVxx
+7038|9828|0|2|8|18|38|38|1038|2038|7038|76|77|SKAAAA|AOOAAA|AAAAxx
+4174|9829|0|2|4|14|74|174|174|4174|4174|148|149|OEAAAA|BOOAAA|HHHHxx
+6908|9830|0|0|8|8|8|908|908|1908|6908|16|17|SFAAAA|COOAAA|OOOOxx
+8477|9831|1|1|7|17|77|477|477|3477|8477|154|155|BOAAAA|DOOAAA|VVVVxx
+3576|9832|0|0|6|16|76|576|1576|3576|3576|152|153|OHAAAA|EOOAAA|AAAAxx
+2685|9833|1|1|5|5|85|685|685|2685|2685|170|171|HZAAAA|FOOAAA|HHHHxx
+9161|9834|1|1|1|1|61|161|1161|4161|9161|122|123|JOAAAA|GOOAAA|OOOOxx
+2951|9835|1|3|1|11|51|951|951|2951|2951|102|103|NJAAAA|HOOAAA|VVVVxx
+8362|9836|0|2|2|2|62|362|362|3362|8362|124|125|QJAAAA|IOOAAA|AAAAxx
+2379|9837|1|3|9|19|79|379|379|2379|2379|158|159|NNAAAA|JOOAAA|HHHHxx
+1277|9838|1|1|7|17|77|277|1277|1277|1277|154|155|DXAAAA|KOOAAA|OOOOxx
+1728|9839|0|0|8|8|28|728|1728|1728|1728|56|57|MOAAAA|LOOAAA|VVVVxx
+9816|9840|0|0|6|16|16|816|1816|4816|9816|32|33|ONAAAA|MOOAAA|AAAAxx
+6288|9841|0|0|8|8|88|288|288|1288|6288|176|177|WHAAAA|NOOAAA|HHHHxx
+8985|9842|1|1|5|5|85|985|985|3985|8985|170|171|PHAAAA|OOOAAA|OOOOxx
+771|9843|1|3|1|11|71|771|771|771|771|142|143|RDAAAA|POOAAA|VVVVxx
+464|9844|0|0|4|4|64|464|464|464|464|128|129|WRAAAA|QOOAAA|AAAAxx
+9625|9845|1|1|5|5|25|625|1625|4625|9625|50|51|FGAAAA|ROOAAA|HHHHxx
+9608|9846|0|0|8|8|8|608|1608|4608|9608|16|17|OFAAAA|SOOAAA|OOOOxx
+9170|9847|0|2|0|10|70|170|1170|4170|9170|140|141|SOAAAA|TOOAAA|VVVVxx
+9658|9848|0|2|8|18|58|658|1658|4658|9658|116|117|MHAAAA|UOOAAA|AAAAxx
+7515|9849|1|3|5|15|15|515|1515|2515|7515|30|31|BDAAAA|VOOAAA|HHHHxx
+9400|9850|0|0|0|0|0|400|1400|4400|9400|0|1|OXAAAA|WOOAAA|OOOOxx
+2045|9851|1|1|5|5|45|45|45|2045|2045|90|91|RAAAAA|XOOAAA|VVVVxx
+324|9852|0|0|4|4|24|324|324|324|324|48|49|MMAAAA|YOOAAA|AAAAxx
+4252|9853|0|0|2|12|52|252|252|4252|4252|104|105|OHAAAA|ZOOAAA|HHHHxx
+8329|9854|1|1|9|9|29|329|329|3329|8329|58|59|JIAAAA|APOAAA|OOOOxx
+4472|9855|0|0|2|12|72|472|472|4472|4472|144|145|AQAAAA|BPOAAA|VVVVxx
+1047|9856|1|3|7|7|47|47|1047|1047|1047|94|95|HOAAAA|CPOAAA|AAAAxx
+9341|9857|1|1|1|1|41|341|1341|4341|9341|82|83|HVAAAA|DPOAAA|HHHHxx
+7000|9858|0|0|0|0|0|0|1000|2000|7000|0|1|GJAAAA|EPOAAA|OOOOxx
+1429|9859|1|1|9|9|29|429|1429|1429|1429|58|59|ZCAAAA|FPOAAA|VVVVxx
+2701|9860|1|1|1|1|1|701|701|2701|2701|2|3|XZAAAA|GPOAAA|AAAAxx
+6630|9861|0|2|0|10|30|630|630|1630|6630|60|61|AVAAAA|HPOAAA|HHHHxx
+3669|9862|1|1|9|9|69|669|1669|3669|3669|138|139|DLAAAA|IPOAAA|OOOOxx
+8613|9863|1|1|3|13|13|613|613|3613|8613|26|27|HTAAAA|JPOAAA|VVVVxx
+7080|9864|0|0|0|0|80|80|1080|2080|7080|160|161|IMAAAA|KPOAAA|AAAAxx
+8788|9865|0|0|8|8|88|788|788|3788|8788|176|177|AAAAAA|LPOAAA|HHHHxx
+6291|9866|1|3|1|11|91|291|291|1291|6291|182|183|ZHAAAA|MPOAAA|OOOOxx
+7885|9867|1|1|5|5|85|885|1885|2885|7885|170|171|HRAAAA|NPOAAA|VVVVxx
+7160|9868|0|0|0|0|60|160|1160|2160|7160|120|121|KPAAAA|OPOAAA|AAAAxx
+6140|9869|0|0|0|0|40|140|140|1140|6140|80|81|ECAAAA|PPOAAA|HHHHxx
+9881|9870|1|1|1|1|81|881|1881|4881|9881|162|163|BQAAAA|QPOAAA|OOOOxx
+9140|9871|0|0|0|0|40|140|1140|4140|9140|80|81|ONAAAA|RPOAAA|VVVVxx
+644|9872|0|0|4|4|44|644|644|644|644|88|89|UYAAAA|SPOAAA|AAAAxx
+3667|9873|1|3|7|7|67|667|1667|3667|3667|134|135|BLAAAA|TPOAAA|HHHHxx
+2675|9874|1|3|5|15|75|675|675|2675|2675|150|151|XYAAAA|UPOAAA|OOOOxx
+9492|9875|0|0|2|12|92|492|1492|4492|9492|184|185|CBAAAA|VPOAAA|VVVVxx
+5004|9876|0|0|4|4|4|4|1004|4|5004|8|9|MKAAAA|WPOAAA|AAAAxx
+9456|9877|0|0|6|16|56|456|1456|4456|9456|112|113|SZAAAA|XPOAAA|HHHHxx
+8197|9878|1|1|7|17|97|197|197|3197|8197|194|195|HDAAAA|YPOAAA|OOOOxx
+2837|9879|1|1|7|17|37|837|837|2837|2837|74|75|DFAAAA|ZPOAAA|VVVVxx
+127|9880|1|3|7|7|27|127|127|127|127|54|55|XEAAAA|AQOAAA|AAAAxx
+9772|9881|0|0|2|12|72|772|1772|4772|9772|144|145|WLAAAA|BQOAAA|HHHHxx
+5743|9882|1|3|3|3|43|743|1743|743|5743|86|87|XMAAAA|CQOAAA|OOOOxx
+2007|9883|1|3|7|7|7|7|7|2007|2007|14|15|FZAAAA|DQOAAA|VVVVxx
+7586|9884|0|2|6|6|86|586|1586|2586|7586|172|173|UFAAAA|EQOAAA|AAAAxx
+45|9885|1|1|5|5|45|45|45|45|45|90|91|TBAAAA|FQOAAA|HHHHxx
+6482|9886|0|2|2|2|82|482|482|1482|6482|164|165|IPAAAA|GQOAAA|OOOOxx
+4565|9887|1|1|5|5|65|565|565|4565|4565|130|131|PTAAAA|HQOAAA|VVVVxx
+6975|9888|1|3|5|15|75|975|975|1975|6975|150|151|HIAAAA|IQOAAA|AAAAxx
+7260|9889|0|0|0|0|60|260|1260|2260|7260|120|121|GTAAAA|JQOAAA|HHHHxx
+2830|9890|0|2|0|10|30|830|830|2830|2830|60|61|WEAAAA|KQOAAA|OOOOxx
+9365|9891|1|1|5|5|65|365|1365|4365|9365|130|131|FWAAAA|LQOAAA|VVVVxx
+8207|9892|1|3|7|7|7|207|207|3207|8207|14|15|RDAAAA|MQOAAA|AAAAxx
+2506|9893|0|2|6|6|6|506|506|2506|2506|12|13|KSAAAA|NQOAAA|HHHHxx
+8081|9894|1|1|1|1|81|81|81|3081|8081|162|163|VYAAAA|OQOAAA|OOOOxx
+8678|9895|0|2|8|18|78|678|678|3678|8678|156|157|UVAAAA|PQOAAA|VVVVxx
+9932|9896|0|0|2|12|32|932|1932|4932|9932|64|65|ASAAAA|QQOAAA|AAAAxx
+447|9897|1|3|7|7|47|447|447|447|447|94|95|FRAAAA|RQOAAA|HHHHxx
+9187|9898|1|3|7|7|87|187|1187|4187|9187|174|175|JPAAAA|SQOAAA|OOOOxx
+89|9899|1|1|9|9|89|89|89|89|89|178|179|LDAAAA|TQOAAA|VVVVxx
+7027|9900|1|3|7|7|27|27|1027|2027|7027|54|55|HKAAAA|UQOAAA|AAAAxx
+1536|9901|0|0|6|16|36|536|1536|1536|1536|72|73|CHAAAA|VQOAAA|HHHHxx
+160|9902|0|0|0|0|60|160|160|160|160|120|121|EGAAAA|WQOAAA|OOOOxx
+7679|9903|1|3|9|19|79|679|1679|2679|7679|158|159|JJAAAA|XQOAAA|VVVVxx
+5973|9904|1|1|3|13|73|973|1973|973|5973|146|147|TVAAAA|YQOAAA|AAAAxx
+4401|9905|1|1|1|1|1|401|401|4401|4401|2|3|HNAAAA|ZQOAAA|HHHHxx
+395|9906|1|3|5|15|95|395|395|395|395|190|191|FPAAAA|AROAAA|OOOOxx
+4904|9907|0|0|4|4|4|904|904|4904|4904|8|9|QGAAAA|BROAAA|VVVVxx
+2759|9908|1|3|9|19|59|759|759|2759|2759|118|119|DCAAAA|CROAAA|AAAAxx
+8713|9909|1|1|3|13|13|713|713|3713|8713|26|27|DXAAAA|DROAAA|HHHHxx
+3770|9910|0|2|0|10|70|770|1770|3770|3770|140|141|APAAAA|EROAAA|OOOOxx
+8272|9911|0|0|2|12|72|272|272|3272|8272|144|145|EGAAAA|FROAAA|VVVVxx
+5358|9912|0|2|8|18|58|358|1358|358|5358|116|117|CYAAAA|GROAAA|AAAAxx
+9747|9913|1|3|7|7|47|747|1747|4747|9747|94|95|XKAAAA|HROAAA|HHHHxx
+1567|9914|1|3|7|7|67|567|1567|1567|1567|134|135|HIAAAA|IROAAA|OOOOxx
+2136|9915|0|0|6|16|36|136|136|2136|2136|72|73|EEAAAA|JROAAA|VVVVxx
+314|9916|0|2|4|14|14|314|314|314|314|28|29|CMAAAA|KROAAA|AAAAxx
+4583|9917|1|3|3|3|83|583|583|4583|4583|166|167|HUAAAA|LROAAA|HHHHxx
+375|9918|1|3|5|15|75|375|375|375|375|150|151|LOAAAA|MROAAA|OOOOxx
+5566|9919|0|2|6|6|66|566|1566|566|5566|132|133|CGAAAA|NROAAA|VVVVxx
+6865|9920|1|1|5|5|65|865|865|1865|6865|130|131|BEAAAA|OROAAA|AAAAxx
+894|9921|0|2|4|14|94|894|894|894|894|188|189|KIAAAA|PROAAA|HHHHxx
+5399|9922|1|3|9|19|99|399|1399|399|5399|198|199|RZAAAA|QROAAA|OOOOxx
+1385|9923|1|1|5|5|85|385|1385|1385|1385|170|171|HBAAAA|RROAAA|VVVVxx
+2156|9924|0|0|6|16|56|156|156|2156|2156|112|113|YEAAAA|SROAAA|AAAAxx
+9659|9925|1|3|9|19|59|659|1659|4659|9659|118|119|NHAAAA|TROAAA|HHHHxx
+477|9926|1|1|7|17|77|477|477|477|477|154|155|JSAAAA|UROAAA|OOOOxx
+8194|9927|0|2|4|14|94|194|194|3194|8194|188|189|EDAAAA|VROAAA|VVVVxx
+3937|9928|1|1|7|17|37|937|1937|3937|3937|74|75|LVAAAA|WROAAA|AAAAxx
+3745|9929|1|1|5|5|45|745|1745|3745|3745|90|91|BOAAAA|XROAAA|HHHHxx
+4096|9930|0|0|6|16|96|96|96|4096|4096|192|193|OBAAAA|YROAAA|OOOOxx
+5487|9931|1|3|7|7|87|487|1487|487|5487|174|175|BDAAAA|ZROAAA|VVVVxx
+2475|9932|1|3|5|15|75|475|475|2475|2475|150|151|FRAAAA|ASOAAA|AAAAxx
+6105|9933|1|1|5|5|5|105|105|1105|6105|10|11|VAAAAA|BSOAAA|HHHHxx
+6036|9934|0|0|6|16|36|36|36|1036|6036|72|73|EYAAAA|CSOAAA|OOOOxx
+1315|9935|1|3|5|15|15|315|1315|1315|1315|30|31|PYAAAA|DSOAAA|VVVVxx
+4473|9936|1|1|3|13|73|473|473|4473|4473|146|147|BQAAAA|ESOAAA|AAAAxx
+4016|9937|0|0|6|16|16|16|16|4016|4016|32|33|MYAAAA|FSOAAA|HHHHxx
+8135|9938|1|3|5|15|35|135|135|3135|8135|70|71|XAAAAA|GSOAAA|OOOOxx
+8892|9939|0|0|2|12|92|892|892|3892|8892|184|185|AEAAAA|HSOAAA|VVVVxx
+4850|9940|0|2|0|10|50|850|850|4850|4850|100|101|OEAAAA|ISOAAA|AAAAxx
+2545|9941|1|1|5|5|45|545|545|2545|2545|90|91|XTAAAA|JSOAAA|HHHHxx
+3788|9942|0|0|8|8|88|788|1788|3788|3788|176|177|SPAAAA|KSOAAA|OOOOxx
+1672|9943|0|0|2|12|72|672|1672|1672|1672|144|145|IMAAAA|LSOAAA|VVVVxx
+3664|9944|0|0|4|4|64|664|1664|3664|3664|128|129|YKAAAA|MSOAAA|AAAAxx
+3775|9945|1|3|5|15|75|775|1775|3775|3775|150|151|FPAAAA|NSOAAA|HHHHxx
+3103|9946|1|3|3|3|3|103|1103|3103|3103|6|7|JPAAAA|OSOAAA|OOOOxx
+9335|9947|1|3|5|15|35|335|1335|4335|9335|70|71|BVAAAA|PSOAAA|VVVVxx
+9200|9948|0|0|0|0|0|200|1200|4200|9200|0|1|WPAAAA|QSOAAA|AAAAxx
+8665|9949|1|1|5|5|65|665|665|3665|8665|130|131|HVAAAA|RSOAAA|HHHHxx
+1356|9950|0|0|6|16|56|356|1356|1356|1356|112|113|EAAAAA|SSOAAA|OOOOxx
+6118|9951|0|2|8|18|18|118|118|1118|6118|36|37|IBAAAA|TSOAAA|VVVVxx
+4605|9952|1|1|5|5|5|605|605|4605|4605|10|11|DVAAAA|USOAAA|AAAAxx
+5651|9953|1|3|1|11|51|651|1651|651|5651|102|103|JJAAAA|VSOAAA|HHHHxx
+9055|9954|1|3|5|15|55|55|1055|4055|9055|110|111|HKAAAA|WSOAAA|OOOOxx
+8461|9955|1|1|1|1|61|461|461|3461|8461|122|123|LNAAAA|XSOAAA|VVVVxx
+6107|9956|1|3|7|7|7|107|107|1107|6107|14|15|XAAAAA|YSOAAA|AAAAxx
+1967|9957|1|3|7|7|67|967|1967|1967|1967|134|135|RXAAAA|ZSOAAA|HHHHxx
+8910|9958|0|2|0|10|10|910|910|3910|8910|20|21|SEAAAA|ATOAAA|OOOOxx
+8257|9959|1|1|7|17|57|257|257|3257|8257|114|115|PFAAAA|BTOAAA|VVVVxx
+851|9960|1|3|1|11|51|851|851|851|851|102|103|TGAAAA|CTOAAA|AAAAxx
+7823|9961|1|3|3|3|23|823|1823|2823|7823|46|47|XOAAAA|DTOAAA|HHHHxx
+3208|9962|0|0|8|8|8|208|1208|3208|3208|16|17|KTAAAA|ETOAAA|OOOOxx
+856|9963|0|0|6|16|56|856|856|856|856|112|113|YGAAAA|FTOAAA|VVVVxx
+2654|9964|0|2|4|14|54|654|654|2654|2654|108|109|CYAAAA|GTOAAA|AAAAxx
+7185|9965|1|1|5|5|85|185|1185|2185|7185|170|171|JQAAAA|HTOAAA|HHHHxx
+309|9966|1|1|9|9|9|309|309|309|309|18|19|XLAAAA|ITOAAA|OOOOxx
+9752|9967|0|0|2|12|52|752|1752|4752|9752|104|105|CLAAAA|JTOAAA|VVVVxx
+6405|9968|1|1|5|5|5|405|405|1405|6405|10|11|JMAAAA|KTOAAA|AAAAxx
+6113|9969|1|1|3|13|13|113|113|1113|6113|26|27|DBAAAA|LTOAAA|HHHHxx
+9774|9970|0|2|4|14|74|774|1774|4774|9774|148|149|YLAAAA|MTOAAA|OOOOxx
+1674|9971|0|2|4|14|74|674|1674|1674|1674|148|149|KMAAAA|NTOAAA|VVVVxx
+9602|9972|0|2|2|2|2|602|1602|4602|9602|4|5|IFAAAA|OTOAAA|AAAAxx
+1363|9973|1|3|3|3|63|363|1363|1363|1363|126|127|LAAAAA|PTOAAA|HHHHxx
+6887|9974|1|3|7|7|87|887|887|1887|6887|174|175|XEAAAA|QTOAAA|OOOOxx
+6170|9975|0|2|0|10|70|170|170|1170|6170|140|141|IDAAAA|RTOAAA|VVVVxx
+8888|9976|0|0|8|8|88|888|888|3888|8888|176|177|WDAAAA|STOAAA|AAAAxx
+2981|9977|1|1|1|1|81|981|981|2981|2981|162|163|RKAAAA|TTOAAA|HHHHxx
+7369|9978|1|1|9|9|69|369|1369|2369|7369|138|139|LXAAAA|UTOAAA|OOOOxx
+6227|9979|1|3|7|7|27|227|227|1227|6227|54|55|NFAAAA|VTOAAA|VVVVxx
+8002|9980|0|2|2|2|2|2|2|3002|8002|4|5|UVAAAA|WTOAAA|AAAAxx
+4288|9981|0|0|8|8|88|288|288|4288|4288|176|177|YIAAAA|XTOAAA|HHHHxx
+5136|9982|0|0|6|16|36|136|1136|136|5136|72|73|OPAAAA|YTOAAA|OOOOxx
+1084|9983|0|0|4|4|84|84|1084|1084|1084|168|169|SPAAAA|ZTOAAA|VVVVxx
+9117|9984|1|1|7|17|17|117|1117|4117|9117|34|35|RMAAAA|AUOAAA|AAAAxx
+2406|9985|0|2|6|6|6|406|406|2406|2406|12|13|OOAAAA|BUOAAA|HHHHxx
+1384|9986|0|0|4|4|84|384|1384|1384|1384|168|169|GBAAAA|CUOAAA|OOOOxx
+9194|9987|0|2|4|14|94|194|1194|4194|9194|188|189|QPAAAA|DUOAAA|VVVVxx
+858|9988|0|2|8|18|58|858|858|858|858|116|117|AHAAAA|EUOAAA|AAAAxx
+8592|9989|0|0|2|12|92|592|592|3592|8592|184|185|MSAAAA|FUOAAA|HHHHxx
+4773|9990|1|1|3|13|73|773|773|4773|4773|146|147|PBAAAA|GUOAAA|OOOOxx
+4093|9991|1|1|3|13|93|93|93|4093|4093|186|187|LBAAAA|HUOAAA|VVVVxx
+6587|9992|1|3|7|7|87|587|587|1587|6587|174|175|JTAAAA|IUOAAA|AAAAxx
+6093|9993|1|1|3|13|93|93|93|1093|6093|186|187|JAAAAA|JUOAAA|HHHHxx
+429|9994|1|1|9|9|29|429|429|429|429|58|59|NQAAAA|KUOAAA|OOOOxx
+5780|9995|0|0|0|0|80|780|1780|780|5780|160|161|IOAAAA|LUOAAA|VVVVxx
+1783|9996|1|3|3|3|83|783|1783|1783|1783|166|167|PQAAAA|MUOAAA|AAAAxx
+2992|9997|0|0|2|12|92|992|992|2992|2992|184|185|CLAAAA|NUOAAA|HHHHxx
+0|9998|0|0|0|0|0|0|0|0|0|0|1|AAAAAA|OUOAAA|OOOOxx
+2968|9999|0|0|8|8|68|968|968|2968|2968|136|137|EKAAAA|PUOAAA|VVVVxx
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/resource/OperatorResourcesComputer.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/resource/OperatorResourcesComputer.java
index 8fc3b82..2942a95 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/resource/OperatorResourcesComputer.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/resource/OperatorResourcesComputer.java
@@ -145,7 +145,13 @@
private long getWindowRequiredMemory(WindowOperator op) {
WindowPOperator physOp = (WindowPOperator) op.getPhysicalOperator();
- int frameCount = physOp.isPartitionMaterialization() ? 3 : 2;
+ int frameCount = 2;
+ if (physOp.isPartitionMaterialization()) {
+ frameCount++;
+ }
+ if (op.hasNestedPlans()) {
+ frameCount += 2;
+ }
return getOperatorRequiredMemory(op, frameSize * frameCount);
}
}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/window/window_02.sqlpp b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/window/window_02.sqlpp
new file mode 100644
index 0000000..c7934e3
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/window/window_02.sqlpp
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Test window function with frame definition
+ * Expected Res : SUCCESS
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use test;
+
+create type test.t1Type as open {
+ c1 : bigint
+};
+
+create dataset t1(t1Type) primary key c1;
+
+from t1
+select c1,
+ array_sum((from w select value w.t1.c1)) over w as
+ (partition by (c2 mod 2) order by c1 rows unbounded preceding exclude current row) as `sum`
+order by c1;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
index 18ec417..2918193 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/ASTERIXDB-2402.plan
@@ -5,12 +5,12 @@
{
-- AGGREGATE |LOCAL|
-- ASSIGN |LOCAL|
- -- MICRO_PRE_CLUSTERED_GROUP_BY[$$184] |LOCAL|
+ -- MICRO_PRE_CLUSTERED_GROUP_BY[$$200] |LOCAL|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- IN_MEMORY_STABLE_SORT [$$184(ASC)] |LOCAL|
+ -- IN_MEMORY_STABLE_SORT [$$200(ASC)] |LOCAL|
-- ASSIGN |LOCAL|
-- UNNEST |LOCAL|
-- SUBPLAN |LOCAL|
@@ -27,7 +27,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INSERT_DELETE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$168] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$184] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -37,28 +37,28 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$222] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$238] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$222(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$222] |PARTITIONED|
+ -- STABLE_SORT [$$238(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$238] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$268][$$191] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$268] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$285][$$207] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$285] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$276] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$289] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
- -- MICRO_PRE_CLUSTERED_GROUP_BY[$$278, $$280] |LOCAL|
+ -- MICRO_PRE_CLUSTERED_GROUP_BY[$$291, $$293] |LOCAL|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -68,8 +68,8 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$276(ASC), $$278(ASC), $$280(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$276] |PARTITIONED|
+ -- STABLE_SORT [$$289(ASC), $$291(ASC), $$293(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$289] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -94,7 +94,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$290(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$306(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,7 +117,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$229(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$245(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -145,7 +145,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$290(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$306(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -168,7 +168,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$229(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$245(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -176,12 +176,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$191] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$207] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$199, $$201][$$193, $$194] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$199, $$201] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$215, $$217][$$209, $$210] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$215, $$217] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
index 88cb592..cd798a6 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$40] |PARTITIONED|
+ -- SORT_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
- -- SORT_GROUP_BY[$$36] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
+ -- SORT_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan
index a5d897d..787b897 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/serial-agg.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$43] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$47] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$43] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$47] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$42] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan
index 4966390..6412a21 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$47(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$47(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$49(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$49(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$64] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$66] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$64(ASC), $$39(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$64] |PARTITIONED|
+ -- STABLE_SORT [$$66(ASC), $$41(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$66] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -62,15 +62,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$64] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$66] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$64(ASC), $$39(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$64] |PARTITIONED|
+ -- STABLE_SORT [$$66(ASC), $$41(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$66] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02.plan
index 586d5fe..dbf5ba6 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02.plan
@@ -2,16 +2,16 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$52(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$54(ASC) ] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -19,7 +19,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan
index 1ad81d2..b2c7787 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$54(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -46,15 +46,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -62,7 +62,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
index d473d80..8492a11 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
@@ -6,8 +6,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$26] |PARTITIONED|
+ -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
index aeaf88f..74a2778 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$45(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
index 62a8abd..d4f3b47 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$31(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
index 62a8abd..d4f3b47 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$31(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_04.plan
index 36bd947..52c98f3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_04.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$43(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -16,15 +16,15 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$40][$$36] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$43][$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_05.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_05.plan
index 9f70298..00acec7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_05.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_05.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
index c81b6b0..fc77606 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_06.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$69(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$75(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -17,13 +17,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$67] |PARTITIONED|
+ -- SORT_GROUP_BY[$$73] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$67] |PARTITIONED|
- -- SORT_GROUP_BY[$$60] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$73] |PARTITIONED|
+ -- SORT_GROUP_BY[$$66] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
index bebed65..979211c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
index bebed65..979211c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
index bebed65..979211c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
index bebed65..979211c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
index a050d80..394213e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
index bb57fa7..04b9728 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
index bb57fa7..04b9728 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
index bb57fa7..04b9728 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
index 04b9728..ff89eb9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
index bb57fa7..04b9728 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
index 577c44b..50a3094 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
index 577c44b..50a3094 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
index bb57fa7..04b9728 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
index 577c44b..50a3094 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
index 577c44b..50a3094 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
index 577c44b..50a3094 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
index ef8a923..bebed65 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
index ef8a923..bebed65 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
index ef8a923..bebed65 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
index ef8a923..bebed65 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
index 4b4412e..0e6e873 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
index 4b4412e..0e6e873 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-60.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-60.plan
index bebed65..979211c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-60.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-60.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-61.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-61.plan
index 577c44b..50a3094 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-61.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-61.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-62.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-62.plan
index 04b9728..ff89eb9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-62.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-62.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-63.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-63.plan
index bb57fa7..04b9728 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-63.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-63.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68.plan
index 80def88..b1081fb 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$25(ASC), $$26(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$25(ASC), $$26(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$26(ASC), $$27(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$26(ASC), $$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -13,7 +13,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -22,7 +22,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68_ps.plan
index 7043901..f1dce99 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-68_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$25(ASC), $$26(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$25(ASC), $$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$26(ASC), $$27(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$26(ASC), $$27(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -26,7 +26,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -50,7 +50,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -59,7 +59,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly.plan
index e9bccc8..538d1dd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly.plan
@@ -2,14 +2,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.plan
index 53589ea..fb33651 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01-disable-idxonly_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -15,7 +15,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -37,7 +37,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01.plan
index db61d44..77bf883 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01_ps.plan
index 7fe5795..87ae7b1 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-sidx-idxonly-01_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/collocated.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/collocated.plan
index 180edb2..1cad691 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/collocated.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/collocated.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$26][$$27] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$28][$$29] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
index cdea343..4fc7c20 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
@@ -1,11 +1,11 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$28] |PARTITIONED|
+ -- SORT_GROUP_BY[$$31] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
index d3cf6b8..ad421e7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
@@ -3,22 +3,22 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$80] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$87] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$87(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$80][$$82] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$87][$$89] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$82] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$89] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan
index 4deb445..0b95352 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan
@@ -12,7 +12,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$17][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$18][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/filter/inverted-btree-search-return-optional-field.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/filter/inverted-btree-search-return-optional-field.plan
index 16c0765..de15cbd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/filter/inverted-btree-search-return-optional-field.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/filter/inverted-btree-search-return-optional-field.plan
@@ -3,14 +3,14 @@
-- STREAM_LIMIT |UNPARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$37(DESC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$38(DESC) ] |PARTITIONED|
-- STREAM_LIMIT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [topK: 2147483647] [$$37(DESC)] |PARTITIONED|
+ -- STABLE_SORT [topK: 2147483647] [$$38(DESC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$24][$$39] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$25][$$40] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$51(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- SINGLE_PARTITION_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-hybrid.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-hybrid.plan
index 6365a34..babba3b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-hybrid.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-hybrid.plan
@@ -34,15 +34,14 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -102,14 +101,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -139,14 +133,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -240,14 +232,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0, $$idLeft_1, $$idLeft_2] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -445,14 +435,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -482,14 +467,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$200] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -571,14 +554,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-star.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-star.plan
index 9e64814..6de1788 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-star.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx-star.plan
@@ -74,14 +74,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -114,12 +109,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -146,12 +139,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -181,12 +172,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -312,12 +301,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -367,14 +354,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -407,12 +389,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -439,12 +419,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -474,12 +452,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -568,17 +544,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -613,12 +582,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -705,14 +672,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -745,12 +707,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -777,12 +737,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -812,12 +770,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$294] |PARTITIONED|
-- HYBRID_HASH_JOIN [$$364][$$365] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -941,12 +897,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -996,14 +950,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1036,12 +985,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -1068,12 +1015,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -1103,12 +1048,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1179,12 +1122,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -1359,14 +1300,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1399,12 +1335,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -1431,12 +1365,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -1466,12 +1398,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$566] |PARTITIONED|
-- HYBRID_HASH_JOIN [$$562][$$634] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -1595,12 +1525,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1650,14 +1578,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1690,12 +1613,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -1722,12 +1643,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -1757,12 +1676,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1845,17 +1762,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -1890,12 +1800,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$765] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -1979,14 +1887,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -2019,12 +1922,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -2051,12 +1952,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -2086,12 +1985,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$793] |PARTITIONED|
-- HYBRID_HASH_JOIN [$$758][$$862] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -2206,12 +2103,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -2261,14 +2156,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -2301,12 +2191,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$815] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -2333,12 +2221,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -2368,12 +2254,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -2438,12 +2322,10 @@
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
index 1bb5b99..87cc795 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/gby_partitioning_property_01.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$61] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$66] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$51] |PARTITIONED|
+ -- SORT_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -17,8 +17,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$51][$$54] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$51] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$56][$$59] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -26,7 +26,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$59] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
index 81b8787..f3a6f3d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/group-by/sugar-06-distinct.plan
@@ -3,25 +3,25 @@
-- STREAM_LIMIT |UNPARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$48(DESC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$53(DESC) ] |PARTITIONED|
-- STREAM_LIMIT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [topK: 3] [$$48(DESC)] |PARTITIONED|
+ -- STABLE_SORT [topK: 3] [$$53(DESC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$51] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- MICRO_PRE_SORTED_DISTINCT_BY |LOCAL|
- -- IN_MEMORY_STABLE_SORT [$$41(ASC)] |LOCAL|
+ -- IN_MEMORY_STABLE_SORT [$$46(ASC)] |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$46] |PARTITIONED|
+ -- STABLE_SORT [$$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$51] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_1.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_1.plan
index 86bb1c8..cddddb4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_1.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_1.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$35, $$37, $$39][$$36, $$38, $$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$37, $$39, $$41][$$38, $$40, $$42] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_2.plan
index 86bb1c8..cddddb4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_2.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$35, $$37, $$39][$$36, $$38, $$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$37, $$39, $$41][$$38, $$40, $$42] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_3.plan
index 240b1aa..1e45c0c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/hints/broadcast_hint_3.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$35, $$38, $$39][$$36, $$37, $$40] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$35, $$38, $$39] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$37, $$40, $$41][$$38, $$39, $$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$37, $$40, $$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -13,7 +13,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$36, $$37, $$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$38, $$39, $$42] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset-with-index.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset-with-index.plan
index 9623371..ce1f963 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset-with-index.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset-with-index.plan
@@ -12,8 +12,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset.plan
index 855fd33..3e07211 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/insert-and-scan-dataset.plan
@@ -4,7 +4,7 @@
-- INSERT_DELETE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- MATERIALIZE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$14] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$15] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan
index 75444af..86f6174 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan
@@ -1,11 +1,11 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$36(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$39(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$38] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$40][$$41] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -13,7 +13,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$36(ASC)] HASH:[$$38] |PARTITIONED|
+ -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$39(ASC)] HASH:[$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan
index a8c1364..50517a9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$13(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$14(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic_ps.plan
index 86c5aac..a5a752f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan
index 01f4b08..2785605 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan
@@ -1,12 +1,12 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$13(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$14(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains_ps.plan
index 0a9089e..e061424 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -30,7 +30,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
index 38ca6cb..64c0782 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
index 38ca6cb..64c0782 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
index 6037e0c..38ca6cb 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
index 64c0782..31b84a2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
index 31b84a2..400eb00 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
index 31b84a2..400eb00 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan
index 7b7be55..ad8266f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$16(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic_ps.plan
index 173b7de..09becbf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan
index 2a0e3fe..16b7a5b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan
@@ -1,12 +1,12 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$16(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check_ps.plan
index 07563e4..c4df95d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -30,7 +30,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan
index 7b7be55..ad8266f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$16(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic_ps.plan
index 173b7de..09becbf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan
index 2a0e3fe..16b7a5b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan
@@ -1,12 +1,12 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$16(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance_ps.plan
index 07563e4..c4df95d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -30,7 +30,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
index 2785605..2a0e3fe 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
@@ -1,12 +1,12 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$14(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$15(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan
index e061424..07563e4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -30,7 +30,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
index 38ca6cb..64c0782 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
index 64c0782..31b84a2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
index 64c0782..31b84a2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
index 38ca6cb..64c0782 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
index 64c0782..31b84a2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
index 64c0782..31b84a2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan
index a8c1364..50517a9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$13(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$14(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains_ps.plan
index 86c5aac..a5a752f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
index 64c0782..31b84a2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
index 31b84a2..400eb00 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
index 31b84a2..400eb00 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
index 1fc3fc0..26f493d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
index 1fc3fc0..26f493d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
index fccc3c7..38dced9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-substring.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-substring.plan
index cafb02c..f375f59 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-substring.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-substring.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
index 38dced9..1b74bcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
index 2ef2633..e489c91 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
@@ -9,7 +9,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan
index 96493a3..15eeace 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$25(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan
index 29b0fef..776c618 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$25(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan
index 19ce662..0058fca 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan
@@ -1,12 +1,12 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$25(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let_ps.plan
index b9bd479..16868be 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$25(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -30,7 +30,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
index 4c0c9e1..92fcf64 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
index 4c0c9e1..92fcf64 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
index 38dced9..1b74bcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
index 2ef2633..e489c91 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
@@ -9,7 +9,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
index 5567df8..330f19d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
@@ -13,7 +13,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
index de31517..c805656 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$43(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$45(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
index 5d42dbe..1a36d3c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$43][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$46][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -22,7 +22,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$44][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$47][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -33,12 +33,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122, $$120] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125, $$123] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122, $$120] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125, $$123] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -51,14 +51,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -75,15 +75,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -106,14 +106,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -130,15 +130,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
index 5567df8..330f19d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
@@ -13,7 +13,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
index fe5a2a6..0639c5b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
@@ -11,7 +11,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
index fe5a2a6..0639c5b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
@@ -11,7 +11,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
index 5d42dbe..1a36d3c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$43][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$46][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -22,7 +22,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$44][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$47][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -33,12 +33,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122, $$120] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125, $$123] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122, $$120] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125, $$123] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -51,14 +51,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -75,15 +75,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -106,14 +106,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -130,15 +130,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/issue741.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/issue741.plan
index 869e3ab..619b74e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/issue741.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/issue741.plan
@@ -3,15 +3,15 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$51] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$51(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$51] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
@@ -27,7 +27,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$52][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$55][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -36,12 +36,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$132, $$130] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$135, $$133] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$132, $$130] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$135, $$133] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -50,14 +50,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$67] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$70] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$67(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$70(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -81,15 +81,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$137(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$137(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$144] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$144] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -110,14 +110,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$63] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$66] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$63(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$66(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -140,15 +140,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$137(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$137(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$144] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$144] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01.plan
index 97c2b45..e79ae32 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01.plan
@@ -2,19 +2,19 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$63(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$66(ASC) ] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$69][$$53] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$72][$$56] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -36,7 +36,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
index f145eac..c3715df 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
@@ -3,24 +3,24 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$66(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$69][$$53] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$72][$$56] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -31,7 +31,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -90,18 +90,18 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$69][$$53] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$72][$$56] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -112,7 +112,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -123,7 +123,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01.plan
index d6b8fc5..774794e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01.plan
@@ -2,16 +2,16 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$63(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$66(ASC) ] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
@@ -31,7 +31,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$54][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$57][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -40,12 +40,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$135, $$133] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$138, $$136] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$135, $$133] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$138, $$136] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -54,14 +54,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$70] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$73] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$70(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$73(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -85,15 +85,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$143(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$143(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -114,14 +114,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$64] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$67] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$64(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$67(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -146,15 +146,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$143(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$143(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan
index 560158f..336a4d4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$66(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
@@ -37,7 +37,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$54][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$57][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -46,12 +46,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$135, $$133] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$138, $$136] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$135, $$133] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$138, $$136] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -60,14 +60,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$70] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$73] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$70(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$73(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -91,15 +91,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$143(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$143(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -120,14 +120,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$64] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$67] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$64(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$67(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -152,15 +152,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$143(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$143(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -184,15 +184,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
@@ -212,7 +212,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$54][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$57][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -221,12 +221,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$135, $$133] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$138, $$136] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$135, $$133] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$138, $$136] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -235,14 +235,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$70] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$73] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$70(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$73(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -266,15 +266,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$143(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$143(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -295,14 +295,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$64] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$67] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$64(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$67(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -327,15 +327,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$140(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$140(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$143(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$143(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$147] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-contains_ps.plan
index 04cdee5..f7f0fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-contains_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
index fdf94bd..481c749 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$41] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
index e05463e..c64fc28 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$37] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$40] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
index 8a8090e..c75c998 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
index 8a8090e..c75c998 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
index 3ddaca26..cbbce46 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$110, $$108] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$112, $$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$110, $$108] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$110] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -34,14 +34,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$45] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$47] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$45(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -63,15 +63,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -92,14 +92,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -118,15 +118,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
index 157c781..79e824e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$110, $$108] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$112, $$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$110, $$108] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$110] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -38,14 +38,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -62,15 +62,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,14 +93,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,15 +117,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
index 1813a27..1daa1cf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -34,14 +34,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$48(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -63,15 +63,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -92,14 +92,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -118,15 +118,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
index 5820ec3..01e070e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -38,14 +38,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -62,15 +62,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,14 +93,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,15 +117,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
index b6052ea..22ad072 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$40][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$43][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,7 +14,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$41][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$44][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -22,12 +22,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122, $$120] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125, $$123] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122, $$120] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125, $$123] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -40,14 +40,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -64,15 +64,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -95,14 +95,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -119,15 +119,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
index 1813a27..1daa1cf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -34,14 +34,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$48(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -63,15 +63,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -92,14 +92,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -118,15 +118,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
index 5820ec3..01e070e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -38,14 +38,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -62,15 +62,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,14 +93,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,15 +117,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
index 4e06205..d3acd29 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,7 +14,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$40][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$43][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -22,12 +22,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122, $$120] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125, $$123] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122, $$120] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125, $$123] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -40,14 +40,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -64,15 +64,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -95,14 +95,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -119,15 +119,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
index fdf94bd..481c749 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$41] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
index 0022f1c..2ab8b63 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
index e05463e..c64fc28 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$37] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$40] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
index 8a8090e..c75c998 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
index 8a8090e..c75c998 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
index 2bb6f2d..480b039 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
index 2bb6f2d..480b039 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
index 26fe296..68d9282 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$41] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
index fc16201..ec0eb95 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$37] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$40] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
index 2bb6f2d..480b039 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
index 2bb6f2d..480b039 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$36][$$28] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$38][$$30] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$28] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
index 26fe296..68d9282 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$41] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
index 810a139..d1adb49 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$31] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
index fc16201..ec0eb95 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
@@ -4,12 +4,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$37] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$40] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$53(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
index 3ddaca26..cbbce46 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$110, $$108] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$112, $$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$110, $$108] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$110] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -34,14 +34,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$45] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$47] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$45(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -63,15 +63,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -92,14 +92,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -118,15 +118,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
index 157c781..79e824e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$110, $$108] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$112, $$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$110, $$108] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$110] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -38,14 +38,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -62,15 +62,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,14 +93,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$41(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,15 +117,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$115(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$115(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$117(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$117(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$124] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check-after-btree-access.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check-after-btree-access.plan
index dcc8cd6..80d465e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check-after-btree-access.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check-after-btree-access.plan
@@ -5,7 +5,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$47][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$50][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -21,7 +21,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$48][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$51][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -30,12 +30,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$127, $$125] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$130, $$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$127, $$125] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$130, $$128] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -44,14 +44,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$62(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$65(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -73,15 +73,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$132(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$132(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$135(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$135(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$139] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$142] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$139] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$142] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -102,14 +102,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$57] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$60] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$60(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -131,15 +131,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$132(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$132(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$135(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$135(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$139] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$142] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$139] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$142] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
index 1813a27..1daa1cf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -34,14 +34,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$48(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -63,15 +63,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -92,14 +92,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -118,15 +118,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
index 5820ec3..01e070e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -38,14 +38,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -62,15 +62,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,14 +93,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,15 +117,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
index b6052ea..22ad072 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$40][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$43][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,7 +14,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$41][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$44][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -22,12 +22,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122, $$120] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125, $$123] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122, $$120] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125, $$123] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -40,14 +40,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -64,15 +64,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -95,14 +95,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -119,15 +119,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
index 1813a27..1daa1cf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -34,14 +34,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$46(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$48(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -63,15 +63,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -92,14 +92,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -118,15 +118,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
index 5820ec3..01e070e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,18 +14,18 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$32][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$34][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$111, $$109] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$113, $$111] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$111, $$109] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113, $$111] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -38,14 +38,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -62,15 +62,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,14 +93,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -117,15 +117,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$116(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$116(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$118(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$123] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$123] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
index 4e06205..d3acd29 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
@@ -6,7 +6,7 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$idLeft_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$idLeft_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -14,7 +14,7 @@
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$40][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$43][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -22,12 +22,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$122, $$120] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$125, $$123] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122, $$120] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$125, $$123] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -40,14 +40,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -64,15 +64,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -95,14 +95,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -119,15 +119,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$127(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$127(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$130(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$134] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$137] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
index d6e272b..cc7cf7d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$33, $$38, $$40][$$35, $$39, $$36] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$33, $$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$35, $$40, $$42][$$37, $$41, $$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$35, $$42] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
index 49e2b90..6d6455a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$33, $$39, $$34][$$35, $$38, $$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$35, $$41, $$36][$$37, $$40, $$42] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -12,7 +12,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$35, $$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$37, $$42] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/nested_query_with_bcast.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/nested_query_with_bcast.plan
index 58af75f..cb1184e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/nested_query_with_bcast.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/joins/nested_query_with_bcast.plan
@@ -2,7 +2,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INSERT_DELETE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -12,19 +12,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$34] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$36] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$35] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$39][$$37] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan
index 2cab787..8dac302 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan
@@ -2,20 +2,20 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$36(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$39(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$41][$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core_ps.plan
index 73103df..cd94777 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core_ps.plan
@@ -3,23 +3,23 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$36(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$39(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$41][$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -36,15 +36,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$41][$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan
index a547407..f15c610 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan
@@ -2,20 +2,20 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$29(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$31(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$31(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$32] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$34] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar_ps.plan
index 08b3940..f3642e0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar_ps.plan
@@ -3,23 +3,23 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$31(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$31(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$32] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$34] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -36,15 +36,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$32] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$34] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
index 12abcc6..d25049a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$40, $$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43, $$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40, $$41] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$44(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43, $$44] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$44, $$40, $$48][$$45, $$42, $$43] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40, $$48] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$47, $$43, $$51][$$48, $$45, $$46] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43, $$51] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
index a82ff05..843b1df 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
@@ -4,25 +4,25 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$40, $$41] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$43, $$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$43(ASC), $$44(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$45, $$40, $$41][$$44, $$42, $$48] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$48, $$43, $$44][$$47, $$45, $$51] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42, $$48] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$45, $$51] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/meta/with_clause_meta.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/meta/with_clause_meta.plan
index ae0fb17..98b54c0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/meta/with_clause_meta.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/meta/with_clause_meta.plan
@@ -16,21 +16,21 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$95] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$103] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$95(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$95] |PARTITIONED|
+ -- STABLE_SORT [$$103(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$103] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$76][$$99] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$84][$$107] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/ASTERIXDB-2199.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/ASTERIXDB-2199.plan
index 8f346e0..c61888b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/ASTERIXDB-2199.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/ASTERIXDB-2199.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/disjunction-to-join.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/disjunction-to-join.plan
index a2b921d..5df4623 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/disjunction-to-join.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/disjunction-to-join.plan
@@ -2,16 +2,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- UNNEST |UNPARTITIONED|
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- UNNEST |UNPARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan
index 77b3643..3af856b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$61(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$61(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$50] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC), $$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,15 +51,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$50] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC), $$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan
index e2db3f6..02ed7c1 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$69(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$69(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$71(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$71(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$54(ASC), $$55(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$74(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,15 +51,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$54(ASC), $$55(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$74(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/secondary-equi-join_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/secondary-equi-join_01.plan
index 8b4714e..c647e41 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/secondary-equi-join_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index-join/secondary-equi-join_01.plan
@@ -4,20 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-33.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-33.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-33.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-33.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-34.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-34.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-34.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-34.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-35.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-35.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-35.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-35.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-36.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-36.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-36.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-36.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-37.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-37.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-37.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-37.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-38.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-38.plan
index eed3c04..46f48ed 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-38.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-38.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-39.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-39.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-39.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-39.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-54.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-54.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-54.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-54.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-55.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-55.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-55.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-55.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-56.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-56.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-56.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-56.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-57.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-57.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-57.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-57.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-60.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-60.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-60.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/btree-index/btree-secondary-60.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic.plan
index eb102a3..b38ad31 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$7(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic_ps.plan
index 54584d3..09becbf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains-panic_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains.plan
index b00702c..106f7d3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains.plan
@@ -2,15 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$7(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains_ps.plan
index 9c29537..8ee33f3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-contains_ps.plan
@@ -2,24 +2,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -28,15 +26,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check-panic.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check-panic.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check.plan
index c3bc41a..5fbab09 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-panic.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance-panic.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance.plan
index c3bc41a..5fbab09 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-edit-distance.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
index 9a7a0bf..0140fe8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$9(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$9(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard-check.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ngram-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic.plan
index c2425d4..aca6463 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$9(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic_ps.plan
index 575076b..87be65c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check-panic_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check.plan
index 8d5c81f..b50a0d6 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check.plan
@@ -2,15 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$9(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check_ps.plan
index da301ae..2be8a9b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-check_ps.plan
@@ -2,24 +2,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -28,15 +26,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic.plan
index c2425d4..aca6463 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$9(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic_ps.plan
index 575076b..87be65c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance-panic_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance.plan
index 8d5c81f..b50a0d6 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance.plan
@@ -2,15 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$9(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance_ps.plan
index da301ae..2be8a9b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-edit-distance_ps.plan
@@ -2,24 +2,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -28,15 +26,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
index bfbdf63..42ca229 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
@@ -2,15 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$8(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan
index b4cb762..39b131d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-edit-distance_ps.plan
@@ -2,24 +2,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$17(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -28,15 +26,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-jaccard.plan
index c3bc41a..5fbab09 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-fuzzyeq-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard-check.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/olist-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
index c3bc41a..5fbab09 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard-check.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/ulist-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains.plan
index eb102a3..b38ad31 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$7(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains_ps.plan
index 54584d3..09becbf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-contains_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-fuzzyeq-jaccard.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-fuzzyeq-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard-check.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-basic/word-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-edit-distance-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-let.plan
index c77832f..0a4346e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan
index 72f3b5e..16632dd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan
@@ -6,14 +6,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic.plan
index d15a896..9429349 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$10(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan
index 19649ab..1826806 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let-panic_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$25(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$27(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let.plan
index ecd170c..3791a4b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let.plan
@@ -2,15 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$10(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let_ps.plan
index ae93a76..08f7946 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-edit-distance-check-let_ps.plan
@@ -2,24 +2,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$25(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$25(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$27(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$32(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -28,15 +26,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$32(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-jaccard-check-let.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/olist-jaccard-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ulist-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ulist-jaccard-check-let.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ulist-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/ulist-jaccard-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-let.plan
index c77832f..0a4346e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-multi-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-multi-let.plan
index 72f3b5e..16632dd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-multi-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-complex/word-jaccard-check-multi-let.plan
@@ -6,14 +6,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
index 9ed007f..e791ffb 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
@@ -4,24 +4,24 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$83(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$68] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC), $$69(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$86][$$65] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$89][$$68] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -34,7 +34,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -47,7 +47,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$98(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$101(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -103,18 +103,18 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$68] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC), $$69(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$86][$$65] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$89][$$68] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -127,7 +127,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -140,7 +140,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$98(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$101(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan
index 6ff2729..dc19740 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-jaccard-check-idx_01_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$83(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$68] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC), $$69(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
@@ -39,7 +39,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$66][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$69][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -50,12 +50,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$162, $$160] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$165, $$163] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$162, $$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$165, $$163] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -64,14 +64,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$93] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$96] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$93(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$96(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -95,15 +95,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$167(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$167(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$170(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$170(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$174] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -124,14 +124,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$87] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$90] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$87(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$90(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -155,15 +155,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$167(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$167(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$170(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$170(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$174] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -187,15 +187,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$68] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC), $$69(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
@@ -216,7 +216,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$66][$$idRight_0] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$69][$$idRight_0] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -227,12 +227,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$162, $$160] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$165, $$163] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$162, $$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$165, $$163] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -241,14 +241,14 @@
-- HASH_PARTITION_EXCHANGE [$$prefixTokenRight] |PARTITIONED|
-- UNNEST |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$93] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$96] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$93(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$96(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -272,15 +272,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$167(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$167(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$170(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$170(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$174] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -301,14 +301,14 @@
-- UNNEST |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$87] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$90] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$87(ASC), $$i(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$90(ASC), $$i(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -332,15 +332,15 @@
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$167(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$167(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$170(ASC), $$tokenGroupped(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$170(ASC), $$tokenGroupped(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$174] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$token] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-check_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-check_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-check_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-check_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-inline.plan
index 789e9bc..3ece49c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard-inline.plan
@@ -18,14 +18,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,14 +33,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$119, $$117] |PARTITIONED|
{
@@ -82,14 +72,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -114,12 +99,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -144,14 +127,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -176,9 +154,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/ngram-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check-after-btree-access.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check-after-btree-access.plan
index 362901d..cfd8f3f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check-after-btree-access.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check-after-btree-access.plan
@@ -11,16 +11,15 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -31,14 +30,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$124, $$122] |PARTITIONED|
{
@@ -71,14 +65,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -108,12 +97,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -138,13 +125,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -171,9 +155,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-check_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-inline.plan
index 789e9bc..3ece49c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard-inline.plan
@@ -18,14 +18,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,14 +33,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$119, $$117] |PARTITIONED|
{
@@ -82,14 +72,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -114,12 +99,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -144,14 +127,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -176,9 +154,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/inverted-index-join/word-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
index 623c04d..6dfdef5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$68(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$71(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$71(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$58] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$55(ASC), $$61(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
+ -- STABLE_SORT [$$58(ASC), $$64(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$58] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -53,15 +53,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$58] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$55(ASC), $$61(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
+ -- STABLE_SORT [$$58(ASC), $$64(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$58] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -71,7 +71,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
index 18c2244..ae2ffde 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$80(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$62(ASC), $$63(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$62] |PARTITIONED|
+ -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -29,7 +29,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$89(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$92(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -54,15 +54,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$62(ASC), $$63(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$62] |PARTITIONED|
+ -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -73,7 +73,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$89(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$92(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_01.plan
index e8c0cf5..345a081 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_01.plan
@@ -4,21 +4,20 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- RTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- RTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_03.plan
index 4cab4b3..970315e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-index/rtree-index-join/spatial-intersect-point_03.plan
@@ -4,21 +4,20 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- RTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- RTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/disjunction-to-join.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/disjunction-to-join.plan
index a2b921d..5df4623 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/disjunction-to-join.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/disjunction-to-join.plan
@@ -2,16 +2,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- UNNEST |UNPARTITIONED|
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- UNNEST |UNPARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan
index 77b3643..3af856b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$61(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$61(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$50] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC), $$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,15 +51,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$50] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC), $$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan
index 77b3643..3af856b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$61(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$61(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$50] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC), $$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,15 +51,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$50] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$50(ASC), $$51(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan
index e2db3f6..02ed7c1 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$69(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$69(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$71(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$71(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$54(ASC), $$55(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$74(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,15 +51,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$54(ASC), $$55(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$74(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan
index e2db3f6..02ed7c1 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$69(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$69(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$71(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$71(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$54(ASC), $$55(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$74(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,15 +51,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$54] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$54(ASC), $$55(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$54] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$74(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/01.plan
index 8d3d87e..36e3477 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/01.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/02.plan
index 1cc11dd..8e2bd43 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/02.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$37(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/03.plan
index ce57c34..f27162d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/03.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$40(ASC), $$41(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$42(ASC), $$43(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$40][$$41] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/04.plan
index ce57c34..f27162d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/04.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$40(ASC), $$41(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$42(ASC), $$43(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$38][$$39] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$40][$$41] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/05.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/05.plan
index a90431b..c271bad 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/05.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/05.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$42(ASC), $$43(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$44(ASC), $$45(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$40] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$41][$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -18,7 +18,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/06.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/06.plan
index af9bd26..34d10fc 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/06.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/06.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$42(ASC), $$43(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$44(ASC), $$45(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/07.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/07.plan
index af9bd26..34d10fc 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/07.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/non-enforced-composite-key-equi-join/07.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$42(ASC), $$43(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$44(ASC), $$45(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$50(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_01.plan
index 8b4714e..c647e41 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_01.plan
@@ -4,20 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_02.plan
index 8b4714e..c647e41 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_02.plan
@@ -4,20 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_03.plan
index 8b4714e..c647e41 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_03.plan
@@ -4,20 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_04.plan
index 8b4714e..c647e41 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index-join/secondary-equi-join_04.plan
@@ -4,20 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-33.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-33.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-33.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-33.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-34.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-34.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-34.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-34.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-35.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-35.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-35.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-35.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-36.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-36.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-36.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-36.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-37.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-37.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-37.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-37.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-38.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-38.plan
index eed3c04..46f48ed 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-38.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-38.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-39.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-39.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-39.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-39.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-54.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-54.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-54.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-54.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-55.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-55.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-55.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-55.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-56.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-56.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-56.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-56.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-57.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-57.plan
index fcbbc4f..caa0446 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-57.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-57.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-60.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-60.plan
index 7d6e7b4..88ec398 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-60.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/btree-secondary-60.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/01.plan
index fc81846..31fd806 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/01.plan
@@ -1,17 +1,15 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/02.plan
index b85b5c7..eb0128b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/02.plan
@@ -5,7 +5,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/03.plan
index e8619e7..a12e373d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/03.plan
@@ -2,22 +2,21 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$20(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/04.plan
index a2fcba7..d7b6547 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/04.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/05.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/05.plan
index a2fcba7..d7b6547 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/05.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/05.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/06.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/06.plan
index 6914f5e..9373fcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/06.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/06.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/07.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/07.plan
index 6914f5e..9373fcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/07.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/07.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/08.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/08.plan
index 6914f5e..9373fcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/08.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/08.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/09.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/09.plan
index 6914f5e..9373fcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/09.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/09.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/10.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/10.plan
index 6914f5e..9373fcd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/10.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/10.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/11.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/11.plan
index 9c6b8d7..f43b2f5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/11.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/11.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$27(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$28(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -15,7 +15,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$35(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/12.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/12.plan
index 00280ee..15abe1c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/12.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/btree-index/non-enforced-composite-key/12.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$27(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$28(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$33(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$34(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -25,7 +25,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$37(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic.plan
index eb102a3..b38ad31 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$7(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic_ps.plan
index 54584d3..09becbf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains-panic_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains.plan
index b00702c..106f7d3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains.plan
@@ -2,15 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$7(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains_ps.plan
index 9c29537..8ee33f3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-contains_ps.plan
@@ -2,24 +2,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -28,15 +26,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check-panic.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check-panic.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check.plan
index c3bc41a..5fbab09 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-panic.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance-panic.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance.plan
index c3bc41a..5fbab09 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-edit-distance.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$10(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
index 9a7a0bf..0140fe8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$9(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$9(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard-check.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/ngram-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains.plan
index eb102a3..b38ad31 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains.plan
@@ -2,10 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$7(ASC) ] |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains_ps.plan
index 54584d3..09becbf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-contains_ps.plan
@@ -2,19 +2,17 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$15(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$15(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$16(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$16(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- AGGREGATE |UNPARTITIONED|
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
@@ -23,10 +21,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-fuzzyeq-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-fuzzyeq-jaccard.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-fuzzyeq-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-fuzzyeq-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard-check.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard-check.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard-check.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard-check.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard.plan
index 473878b..ef97202 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-basic/word-jaccard.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
index 2d604a9..ef7eae2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
@@ -1,10 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let.plan
index 12c031c..7b4e534 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-edit-distance-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$11(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-let.plan
index c77832f..0a4346e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan
index 72f3b5e..16632dd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/ngram-jaccard-check-multi-let.plan
@@ -6,14 +6,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-let.plan
index c77832f..0a4346e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-let.plan
@@ -1,15 +1,13 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- STREAM_SELECT |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-multi-let.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-multi-let.plan
index 72f3b5e..16632dd 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-multi-let.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-complex/word-jaccard-check-multi-let.plan
@@ -6,14 +6,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
index 9ed007f..e791ffb 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
@@ -4,24 +4,24 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$83(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$68] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC), $$69(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$86][$$65] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$89][$$68] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -34,7 +34,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -47,7 +47,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$98(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$101(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -103,18 +103,18 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$68] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- STABLE_SORT [$$68(ASC), $$69(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$86][$$65] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$89][$$68] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -127,7 +127,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$68] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -140,7 +140,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$98(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$101(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_01_ps.plan
index 428c860..6f556c5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_01_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_02_ps.plan
index 428c860..6f556c5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_02_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_03_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_03_ps.plan
index 04cdee5..f7f0fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_03_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_03_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_04_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_04_ps.plan
index 04cdee5..f7f0fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_04_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-contains_04_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
index 0a8be57..ab750e8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
@@ -58,12 +58,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -88,12 +86,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -117,12 +113,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -147,9 +141,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_04.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-fuzzyeq-jaccard_04.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_02.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_02.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_03.plan
index 1c59ba7..bbea9b2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_03.plan
@@ -58,12 +58,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -88,12 +86,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -117,12 +113,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -147,9 +141,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_04.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-check_04.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-inline.plan
index 789e9bc..3ece49c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard-inline.plan
@@ -18,14 +18,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,14 +33,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$119, $$117] |PARTITIONED|
{
@@ -82,14 +72,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -114,12 +99,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -144,14 +127,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -176,9 +154,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_02.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_02.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_03.plan
index 1c59ba7..bbea9b2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_03.plan
@@ -58,12 +58,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -88,12 +86,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -117,12 +113,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -147,9 +141,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_04.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/ngram-jaccard_04.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_02.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_02.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_03.plan
index 0a8be57..ab750e8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_03.plan
@@ -58,12 +58,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -88,12 +86,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -117,12 +113,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -147,9 +141,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_04.plan
index 2084fd2..44471c4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-fuzzyeq-jaccard_04.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check-after-btree-access.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check-after-btree-access.plan
index 362901d..cfd8f3f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check-after-btree-access.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check-after-btree-access.plan
@@ -11,16 +11,15 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- REPLICATE |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -31,14 +30,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$124, $$122] |PARTITIONED|
{
@@ -71,14 +65,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -108,12 +97,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -138,13 +125,10 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -171,9 +155,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_02.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_02.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_03.plan
index 1c59ba7..bbea9b2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_03.plan
@@ -58,12 +58,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -88,12 +86,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -117,12 +113,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -147,9 +141,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_04.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-check_04.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-inline.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-inline.plan
index 789e9bc..3ece49c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-inline.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard-inline.plan
@@ -18,14 +18,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idLeft_0] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,14 +33,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$idRight_0] |PARTITIONED|
-- EXTERNAL_GROUP_BY[$$119, $$117] |PARTITIONED|
{
@@ -82,14 +72,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -114,12 +99,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -144,14 +127,9 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- REPLICATE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -176,9 +154,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_01.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_01.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_02.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_02.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_03.plan
index 1c59ba7..bbea9b2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_03.plan
@@ -58,12 +58,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -88,12 +86,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -117,12 +113,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- RUNNING_AGGREGATE |PARTITIONED|
@@ -147,9 +141,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_04.plan
index 10e37b8..3790694 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/inverted-index-join/word-jaccard_04.plan
@@ -54,12 +54,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -89,12 +87,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- HASH_PARTITION_EXCHANGE [$$prefixTokenLeft] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- UNNEST |PARTITIONED|
@@ -116,12 +112,10 @@
-- UNNEST |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -148,9 +142,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
index 623c04d..6dfdef5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$68(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$68(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$71(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$71(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$58] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$55(ASC), $$61(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
+ -- STABLE_SORT [$$58(ASC), $$64(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$58] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -53,15 +53,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$58] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$55(ASC), $$61(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
+ -- STABLE_SORT [$$58(ASC), $$64(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$58] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -71,7 +71,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$83(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
index 18c2244..ae2ffde 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
@@ -4,21 +4,21 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$80(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$62(ASC), $$63(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$62] |PARTITIONED|
+ -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -29,7 +29,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$89(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$92(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -54,15 +54,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$65] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$62(ASC), $$63(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$62] |PARTITIONED|
+ -- STABLE_SORT [$$65(ASC), $$66(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -73,7 +73,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$89(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$92(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_01.plan
index 4b6e322..9cabd7a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_01.plan
@@ -4,21 +4,20 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- RTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- RTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_03.plan
index bcfc15a..fa55aca 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_03.plan
@@ -4,21 +4,20 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- RTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- RTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_04.plan
index bcfc15a..fa55aca 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested-open-index/rtree-index-join/spatial-intersect-point_04.plan
@@ -4,21 +4,20 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- BTREE_SEARCH |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- RTREE_SEARCH |PARTITIONED|
- -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- BTREE_SEARCH |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- RTREE_SEARCH |PARTITIONED|
+ -- BROADCAST_EXCHANGE |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- ASSIGN |PARTITIONED|
- -- STREAM_PROJECT |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- DATASOURCE_SCAN |PARTITIONED|
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
index 3bb5c88..b11e449 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
@@ -4,10 +4,10 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$61] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
- -- MICRO_PRE_CLUSTERED_GROUP_BY[$$57] |LOCAL|
+ -- MICRO_PRE_CLUSTERED_GROUP_BY[$$62] |LOCAL|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -17,24 +17,24 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
+ -- STABLE_SORT [$$61(ASC), $$62(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$61] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$57][$$58] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$57] |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$56][$$60] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$62][$$63] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$62] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$61][$$65] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$60] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$65] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$58] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$63] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan
index ccf2c9c..5c12d2d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_1_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$47(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$47(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$49(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$49(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$38] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC), $$39(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -46,15 +46,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$38] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC), $$39(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -62,7 +62,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan
index ccf2c9c..5c12d2d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_01_2_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$47(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$47(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$49(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$49(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$38] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC), $$39(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -46,15 +46,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$38] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$38(ASC), $$39(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- STABLE_SORT [$$40(ASC), $$41(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -62,7 +62,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan
index 1ad81d2..b2c7787 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_1_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$54(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -46,15 +46,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -62,7 +62,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan
index 1ad81d2..b2c7787 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/btree-index-join/leftouterjoin-probe-pidx-with-join-btree-sidx_02_2_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$52(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$54(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$54(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -46,15 +46,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$42(ASC), $$43(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -62,7 +62,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$57(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$59(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains-panic_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains-panic_ps.plan
index 86c5aac..a5a752f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains-panic_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains-panic_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains_ps.plan
index 0a9089e..e061424 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/ngram-contains_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -30,7 +30,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/word-contains_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/word-contains_ps.plan
index 86c5aac..a5a752f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/word-contains_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-basic/word-contains_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
index f145eac..c3715df 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/leftouterjoin-probe-pidx-with-join-edit-distance-check-idx_01_ps.plan
@@ -3,24 +3,24 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$66(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$66(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$69][$$53] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$72][$$56] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -31,7 +31,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -90,18 +90,18 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$56] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$53(ASC), $$54(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- STABLE_SORT [$$56(ASC), $$57(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$69][$$53] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$72][$$56] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -112,7 +112,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$53] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$56] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -123,7 +123,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$77(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$80(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_01_ps.plan
index 428c860..6f556c5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_01_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_02_ps.plan
index 04cdee5..f7f0fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_02_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_03_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_03_ps.plan
index 04cdee5..f7f0fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_03_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_03_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_04_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_04_ps.plan
index 04cdee5..f7f0fe4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_04_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/inverted-index-join/ngram-contains_04_ps.plan
@@ -4,8 +4,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
@@ -42,7 +42,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$46(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- LENGTH_PARTITIONED_INVERTED_INDEX_SEARCH |PARTITIONED|
-- BROADCAST_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
index c95c27f..be60e34 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$55(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$55(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$58(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$58(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$51] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$51(ASC), $$52(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$51] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -26,7 +26,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$67(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$70(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -49,15 +49,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$48] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$51] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$48(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
+ -- STABLE_SORT [$$51(ASC), $$52(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$51] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -66,7 +66,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$67(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$70(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
index 35e1ec6..e90c368 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-enforced/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$60(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$60(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$52] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC), $$53(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
+ -- STABLE_SORT [$$55(ASC), $$56(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -26,7 +26,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$72(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$75(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -49,15 +49,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$52] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC), $$53(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
+ -- STABLE_SORT [$$55(ASC), $$56(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -66,7 +66,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$72(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$75(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05.plan
index 7becb2c..ecc5367 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$32(ASC), $$33(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$32(ASC), $$33(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$34(ASC), $$35(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -16,7 +16,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05_ps.plan
index 101441e..24db839 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-05_ps.plan
@@ -3,16 +3,16 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$32(ASC), $$33(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$32(ASC), $$33(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -37,8 +37,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -46,7 +46,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06.plan
index 7becb2c..ecc5367 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$32(ASC), $$33(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$32(ASC), $$33(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$34(ASC), $$35(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -16,7 +16,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06_ps.plan
index 101441e..24db839 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-06_ps.plan
@@ -3,16 +3,16 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$32(ASC), $$33(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$32(ASC), $$33(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -37,8 +37,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$30][$$31] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$30] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$32][$$33] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -46,7 +46,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07.plan
index 913c442..2809b27 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$34(ASC), $$35(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$36(ASC), $$37(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$32] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$34] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -16,7 +16,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07_ps.plan
index 3da4637..fa0e419 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-07_ps.plan
@@ -3,16 +3,16 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$32] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$34] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -37,8 +37,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$31][$$32] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$31] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$33][$$34] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$33] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -46,7 +46,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08.plan
index 9f54d38..60c716d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$34(ASC), $$35(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$36(ASC), $$37(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08_ps.plan
index 2eb5d36..1ab66f9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-08_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -43,7 +43,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09.plan
index 9f54d38..60c716d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$34(ASC), $$35(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$36(ASC), $$37(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09_ps.plan
index 2eb5d36..1ab66f9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-equi-join-non-enforced/btree-equi-join-non-enforced-09_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$34(ASC), $$35(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$34(ASC), $$35(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$36(ASC), $$37(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$36(ASC), $$37(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -43,7 +43,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$41(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04.plan
index 4c8008f..dac71c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04_ps.plan
index 16c9194..ce6de67 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-04_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05.plan
index 4c8008f..dac71c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05_ps.plan
index 16c9194..ce6de67 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-05_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06.plan
index 844758a..9d7ad60 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06_ps.plan
index 07710ba..a08b5c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-06_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07.plan
index 844758a..9d7ad60 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07_ps.plan
index 07710ba..a08b5c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-07_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08.plan
index 844758a..9d7ad60 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08_ps.plan
index 07710ba..a08b5c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-08_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09.plan
index 844758a..9d7ad60 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09_ps.plan
index 07710ba..a08b5c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-09_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10.plan
index 844758a..9d7ad60 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,7 +12,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105.plan
index 1a359dd..9e36831 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -14,7 +14,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -23,7 +23,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105_ps.plan
index dec1cb4..ebde34a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-105_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -18,7 +18,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -27,7 +27,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -51,7 +51,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- INTERSECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -60,7 +60,7 @@
-- ASSIGN |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10_ps.plan
index 07710ba..a08b5c8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-10_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -16,7 +16,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -38,7 +38,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11.plan
index ad089de..d1d90e5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$21(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -13,7 +13,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11_ps.plan
index 4adc026..5292b98 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/open-index-non-enforced/btree-index-non-enforced/btree-index-non-enforced-11_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$22(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -40,7 +40,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$26(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$27(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby_ps.plan
index 93e872a..16d0dba 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby_ps.plan
@@ -9,12 +9,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$39, $$40] |PARTITIONED|
+ -- SORT_GROUP_BY[$$43, $$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$39, $$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43, $$44] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -29,12 +29,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$39, $$40] |PARTITIONED|
+ -- SORT_GROUP_BY[$$43, $$44] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$39, $$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43, $$44] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan
index 59dc8e8..2348735 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan
@@ -15,14 +15,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$21(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01_ps.plan
index 2c7fcb7..1b855f5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01_ps.plan
@@ -16,8 +16,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$22(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -50,7 +50,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan
index 19be1fa..6bb0d82 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan
@@ -15,14 +15,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$24(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02_ps.plan
index 386c64a..179b91c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02_ps.plan
@@ -16,8 +16,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$24(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -50,7 +50,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan
index 59dc8e8..2348735 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan
@@ -15,14 +15,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$21(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01_ps.plan
index 2c7fcb7..1b855f5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01_ps.plan
@@ -16,8 +16,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$22(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -50,7 +50,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$28(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan
index 19be1fa..6bb0d82 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan
@@ -15,14 +15,14 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$24(ASC) ] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02_ps.plan
index 386c64a..179b91c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02_ps.plan
@@ -16,8 +16,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$24(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -50,7 +50,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$29(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$30(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/p_sort_seq_merge/p_sort_seq_merge.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/p_sort_seq_merge/p_sort_seq_merge.plan
index d3d1d85..457755e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/p_sort_seq_merge/p_sort_seq_merge.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/p_sort_seq_merge/p_sort_seq_merge.plan
@@ -8,8 +8,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC), $$17(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC), $$17(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC), $$18(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC), $$18(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -31,4 +31,4 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.1.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.1.plan
index d5b2526..9ca56da 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.1.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.1.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$12(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.2.plan
index 32499ea..1f380be 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/parallel_sort_enabled_disabled/parallel_sort_enabled_disabled.2.plan
@@ -1,8 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$12(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$12(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$13(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
index 8d5343d..6fdc9b8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
@@ -6,15 +6,15 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$34][$$35] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$36][$$37] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$35] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
index 8d02861..bbf4630 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
@@ -3,26 +3,26 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$36] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$39] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$36] |PARTITIONED|
+ -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$38] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$41] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$38] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$41] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/q01_pricing_summary_report_nt_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/q01_pricing_summary_report_nt_ps.plan
index 390afe3..f774187 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/q01_pricing_summary_report_nt_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/q01_pricing_summary_report_nt_ps.plan
@@ -22,13 +22,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$190, $$191] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$201, $$202] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$190, $$191] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$159, $$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$201, $$202] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$170, $$171] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -51,13 +51,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$190, $$191] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$201, $$202] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$190, $$191] |PARTITIONED|
- -- EXTERNAL_GROUP_BY[$$159, $$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$201, $$202] |PARTITIONED|
+ -- EXTERNAL_GROUP_BY[$$170, $$171] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/q08_group_by.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/q08_group_by.plan
index db613d0..683ddb3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/q08_group_by.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/q08_group_by.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$169][$$197] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$181][$$209] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -12,15 +12,15 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$197] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$209] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$194][$$176] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$194] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$206][$$188] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$206] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$170][$$172] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$170] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$182][$$184] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$182] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -28,11 +28,11 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$172] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$184] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$185][$$173] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$185] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$197][$$185] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$197] |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -40,22 +40,22 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$173] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$185] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$182][$$174] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$182] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$194][$$186] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$194] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$186] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$180][$$175] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$180] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$192][$$187] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$192] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/q09_group_by.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/q09_group_by.plan
index d6da05e..bfa0498 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/q09_group_by.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/q09_group_by.plan
@@ -4,7 +4,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$123][$$145] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$131][$$153] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -12,10 +12,10 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$145] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$153] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$124, $$125][$$145, $$130] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$132, $$133][$$153, $$138] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -23,15 +23,15 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$145, $$130] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$153, $$138] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$126][$$130] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$126] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$134][$$138] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$133][$$127] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$133] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$141][$$135] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$141] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -45,7 +45,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$130] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$138] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-159-3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-159-3.plan
index 07978f6..bef442f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-159-3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-159-3.plan
@@ -3,14 +3,14 @@
-- STREAM_LIMIT |UNPARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$41(DESC), $$42(DESC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$43(DESC), $$44(DESC) ] |PARTITIONED|
-- STREAM_LIMIT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [topK: 5] [$$41(DESC), $$42(DESC)] |PARTITIONED|
+ -- STABLE_SORT [topK: 5] [$$43(DESC), $$44(DESC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$41][$$50] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$43][$$52] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -27,7 +27,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- SUBPLAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1671.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1671.plan
index d26d5a0..fb47041 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1671.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1671.plan
@@ -4,10 +4,10 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$17(ASC), $$18(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$18(ASC), $$19(ASC) ] |PARTITIONED|
-- STREAM_LIMIT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [topK: 0] [$$17(ASC), $$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [topK: 0] [$$18(ASC), $$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
index fef4ae3..3f32020 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$l_returnflag(ASC), $$l_linestatus(ASC) ] |PARTITIONED|
- -- SORT_GROUP_BY[$$149, $$150] |PARTITIONED|
+ -- SORT_GROUP_BY[$$161, $$162] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$149, $$150] |PARTITIONED|
- -- SORT_GROUP_BY[$$117, $$118] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$161, $$162] |PARTITIONED|
+ -- SORT_GROUP_BY[$$129, $$130] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806_ps.plan
index 5585ddd..8e32b8b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-1806_ps.plan
@@ -9,13 +9,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$149, $$150] |PARTITIONED|
+ -- SORT_GROUP_BY[$$161, $$162] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$149, $$150] |PARTITIONED|
- -- SORT_GROUP_BY[$$117, $$118] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$161, $$162] |PARTITIONED|
+ -- SORT_GROUP_BY[$$129, $$130] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -37,13 +37,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$149, $$150] |PARTITIONED|
+ -- SORT_GROUP_BY[$$161, $$162] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$149, $$150] |PARTITIONED|
- -- SORT_GROUP_BY[$$117, $$118] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$161, $$162] |PARTITIONED|
+ -- SORT_GROUP_BY[$$129, $$130] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
index b255ab2..0181a84 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354.plan
@@ -1,8 +1,8 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$70(ASC), $$71(ASC), $$72(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$70(ASC), $$71(ASC), $$72(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$74(ASC), $$75(ASC), $$76(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$74(ASC), $$75(ASC), $$76(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- RANDOM_PARTITION_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354_ps.plan
index a110303..a17555e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2354_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$70(ASC), $$71(ASC), $$72(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$70(ASC), $$71(ASC), $$72(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$74(ASC), $$75(ASC), $$76(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$74(ASC), $$75(ASC), $$76(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
index 640a064..fef38d5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408.plan
@@ -3,12 +3,12 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$39(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$42(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$37] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$40][$$43] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -25,7 +25,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408_ps.plan
index bd0ff12..b47c7d3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-2408_ps.plan
@@ -4,15 +4,15 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$39(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$39(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$42(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$42(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$37] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -21,7 +21,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$40][$$43] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -29,7 +29,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -46,7 +46,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$37] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$40] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -55,7 +55,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$37][$$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$40][$$43] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -63,7 +63,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2.plan
index 1d80ccf..03a2bf2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2.plan
@@ -3,7 +3,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$l_returnflag(ASC), $$l_linestatus(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$104, $$105] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$112, $$113] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -13,9 +13,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$104(ASC), $$105(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$104, $$105] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$90, $$91] |PARTITIONED|
+ -- STABLE_SORT [$$112(ASC), $$113(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$113] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$98, $$99] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -27,7 +27,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$90(ASC), $$91(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$98(ASC), $$99(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2_ps.plan
index ed8309c..023a324 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-2_ps.plan
@@ -9,7 +9,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$104, $$105] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$112, $$113] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -19,9 +19,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$104(ASC), $$105(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$104, $$105] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$90, $$91] |PARTITIONED|
+ -- STABLE_SORT [$$112(ASC), $$113(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$113] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$98, $$99] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -33,7 +33,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$90(ASC), $$91(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$98(ASC), $$99(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -49,7 +49,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$104, $$105] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$112, $$113] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -59,9 +59,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$104(ASC), $$105(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$104, $$105] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$90, $$91] |PARTITIONED|
+ -- STABLE_SORT [$$112(ASC), $$113(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112, $$113] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$98, $$99] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -73,7 +73,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$90(ASC), $$91(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$98(ASC), $$99(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3.plan
index 56a7aca..e6f7289 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3.plan
@@ -3,7 +3,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$l_returnflag(ASC), $$l_linestatus(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$112, $$113] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$121, $$122] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -13,9 +13,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$112(ASC), $$113(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$112, $$113] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$99, $$100] |PARTITIONED|
+ -- STABLE_SORT [$$121(ASC), $$122(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$121, $$122] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$108, $$109] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -27,7 +27,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$99(ASC), $$100(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$108(ASC), $$109(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3_ps.plan
index 7b7285b..ef2b15a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810-3_ps.plan
@@ -9,7 +9,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$112, $$113] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$121, $$122] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -19,9 +19,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$112(ASC), $$113(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$112, $$113] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$99, $$100] |PARTITIONED|
+ -- STABLE_SORT [$$121(ASC), $$122(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$121, $$122] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$108, $$109] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -33,7 +33,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$99(ASC), $$100(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$108(ASC), $$109(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -49,7 +49,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$112, $$113] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$121, $$122] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -59,9 +59,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$112(ASC), $$113(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$112, $$113] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$99, $$100] |PARTITIONED|
+ -- STABLE_SORT [$$121(ASC), $$122(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$121, $$122] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$108, $$109] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -73,7 +73,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$99(ASC), $$100(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$108(ASC), $$109(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810.plan
index 76cd11f..418438a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810.plan
@@ -3,7 +3,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$l_returnflag(ASC), $$l_linestatus(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$120, $$121] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$130, $$131] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -13,9 +13,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$120(ASC), $$121(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$120, $$121] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$108, $$109] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$131(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$130, $$131] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$118, $$119] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -27,7 +27,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$108(ASC), $$109(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$119(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810_ps.plan
index 8451f5b..38e100a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-ASTERIXDB-810_ps.plan
@@ -9,7 +9,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$120, $$121] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$130, $$131] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -19,9 +19,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$120(ASC), $$121(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$120, $$121] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$108, $$109] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$131(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$130, $$131] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$118, $$119] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -33,7 +33,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$108(ASC), $$109(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$119(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -49,7 +49,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$120, $$121] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$130, $$131] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -59,9 +59,9 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$120(ASC), $$121(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$120, $$121] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$108, $$109] |PARTITIONED|
+ -- STABLE_SORT [$$130(ASC), $$131(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$130, $$131] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$118, $$119] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -73,7 +73,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$108(ASC), $$109(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$118(ASC), $$119(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan
index b988a0a..d2bfaf0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue562_ps.plan
@@ -9,12 +9,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$142] |PARTITIONED|
+ -- SORT_GROUP_BY[$$152] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$142] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
-- SORT_GROUP_BY[$$phone_substr] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -27,29 +27,29 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$139] |PARTITIONED|
+ -- SORT_GROUP_BY[$$149] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$139] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$135] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$149] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$145] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$135(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$145(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$122][$$129] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$132][$$139] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$phone_substr][$$124] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$phone_substr][$$134] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -60,7 +60,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- UNNEST |UNPARTITIONED|
-- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$129] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$139] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -75,12 +75,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$142] |PARTITIONED|
+ -- SORT_GROUP_BY[$$152] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$142] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
-- SORT_GROUP_BY[$$phone_substr] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
@@ -93,29 +93,29 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$139] |PARTITIONED|
+ -- SORT_GROUP_BY[$$149] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$139] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$135] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$149] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$145] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$135(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$145(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$122][$$129] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$132][$$139] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$phone_substr][$$124] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$phone_substr][$$134] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -126,7 +126,7 @@
-- BROADCAST_EXCHANGE |PARTITIONED|
-- UNNEST |UNPARTITIONED|
-- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$129] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$139] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
index 3651eba..37d5480 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query-issue601.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$42] |PARTITIONED|
+ -- SORT_GROUP_BY[$$46] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
- -- SORT_GROUP_BY[$$39] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$46] |PARTITIONED|
+ -- SORT_GROUP_BY[$$43] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan
index 8b7d56e..496ae5a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849-2.plan
@@ -20,12 +20,12 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$38][$$40] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$41][$$43] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$40] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$43] |PARTITIONED|
-- STREAM_PROJECT |UNPARTITIONED|
-- ASSIGN |UNPARTITIONED|
-- UNNEST |UNPARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan
index 709d5d5..08fa6a0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan
@@ -20,8 +20,8 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$38] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$39] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$41] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
-- ASSIGN |UNPARTITIONED|
-- UNNEST |UNPARTITIONED|
-- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
index f8b50c6..67313b2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_01_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$55(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$55(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$58(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$58(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$88] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$91] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$88(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$88] |PARTITIONED|
+ -- STABLE_SORT [$$91(ASC), $$52(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$91] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -74,15 +74,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$88] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$91] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$88(ASC), $$49(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$88] |PARTITIONED|
+ -- STABLE_SORT [$$91(ASC), $$52(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$91] |PARTITIONED|
-- UNION_ALL |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02.plan
index 80f1234..83f9db7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02.plan
@@ -2,16 +2,16 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$60(ASC) ] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$52] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$63(ASC) ] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC), $$53(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
+ -- STABLE_SORT [$$55(ASC), $$56(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -20,7 +20,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$72(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$75(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
index 35e1ec6..e90c368 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/leftouterjoin-probe-pidx-with-join-rtree-sidx_02_ps.plan
@@ -3,21 +3,21 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$60(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$60(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$63(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$63(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$52] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC), $$53(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
+ -- STABLE_SORT [$$55(ASC), $$56(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -26,7 +26,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$72(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$75(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -49,15 +49,15 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$52] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$55] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$52(ASC), $$53(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
+ -- STABLE_SORT [$$55(ASC), $$56(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$55] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -66,7 +66,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$72(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$75(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
index 3229470..e84357c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
index 3229470..e84357c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
@@ -8,7 +8,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$36(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$38(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
index 231c0f7..60f968f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/rtree-index/rtree-sidx-idxonly-01-disable-idxonly.plan
@@ -10,7 +10,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$56(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$60(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-ngram-index_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-ngram-index_ps.plan
index 86c5aac..a5a752f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-ngram-index_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-ngram-index_ps.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$13(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$13(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$14(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$14(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-secondary-btree-index-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-secondary-btree-index-2.plan
index 0d9a257..4b4412e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-secondary-btree-index-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/skip-index/skip-secondary-btree-index-2.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization.plan
index e707957..ae9bb70 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization.plan
@@ -2,8 +2,8 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$79(ASC), $$80(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$79(ASC), $$80(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$85(ASC), $$86(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$85(ASC), $$86(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- NESTED_LOOP |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization_ps.plan
index 8361112..a021d33 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/split-materialization_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$79(ASC), $$80(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$79(ASC), $$80(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$85(ASC), $$86(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$85(ASC), $$86(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-01.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-01.plan
index cd5c81e..c00661e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-01.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-01.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-02.plan
index cd5c81e..c00661e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-02.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-02.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-03.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-03.plan
index cd5c81e..c00661e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-03.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/statement-params/statement-params-03.plan
@@ -7,7 +7,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- BTREE_SEARCH |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$21(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
index a010ace..5e52c52 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$cntrycode(ASC) ] |PARTITIONED|
- -- SORT_GROUP_BY[$$164] |PARTITIONED|
+ -- SORT_GROUP_BY[$$176] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$164] |PARTITIONED|
- -- SORT_GROUP_BY[$$141] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$176] |PARTITIONED|
+ -- SORT_GROUP_BY[$$153] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -21,25 +21,25 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$161] |PARTITIONED|
+ -- SORT_GROUP_BY[$$173] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$161] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$155] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$173] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$167] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$155(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$167(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$150][$$147] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$162][$$159] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -66,7 +66,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$159] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan
index 4c9eff3..0a126ab 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists_ps.plan
@@ -9,13 +9,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$164] |PARTITIONED|
+ -- SORT_GROUP_BY[$$176] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$164] |PARTITIONED|
- -- SORT_GROUP_BY[$$141] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$176] |PARTITIONED|
+ -- SORT_GROUP_BY[$$153] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -27,25 +27,25 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$161] |PARTITIONED|
+ -- SORT_GROUP_BY[$$173] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$161] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$155] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$173] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$167] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$155(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$167(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$150][$$147] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$162][$$159] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -72,7 +72,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$159] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
@@ -86,13 +86,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$164] |PARTITIONED|
+ -- SORT_GROUP_BY[$$176] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$164] |PARTITIONED|
- -- SORT_GROUP_BY[$$141] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$176] |PARTITIONED|
+ -- SORT_GROUP_BY[$$153] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -104,25 +104,25 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$161] |PARTITIONED|
+ -- SORT_GROUP_BY[$$173] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$161] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$155] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$173] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$167] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$155(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$167(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$150][$$147] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$162][$$159] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -149,7 +149,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$159] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
index 6567388..c51b5e0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$44(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$47(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$39] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -17,7 +17,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$32] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -25,7 +25,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1.plan
index 62c2b89..3d62d53 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1.plan
@@ -1,10 +1,10 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1_ps.plan
index f4ab7c2..471eab2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_1_ps.plan
@@ -1,14 +1,14 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2.plan
index b36c3ac..defde04 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2.plan
@@ -1,21 +1,21 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$24(ASC) ] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$20] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$21][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$21] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2_ps.plan
index b4a8de2..664e0e5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_2_ps.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$24(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -9,19 +9,19 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$20] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$21][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$21] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -42,19 +42,19 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$20] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$21][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$21] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3.plan
index 62c2b89..3d62d53 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3.plan
@@ -1,10 +1,10 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3_ps.plan
index f4ab7c2..471eab2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_3_ps.plan
@@ -1,14 +1,14 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4.plan
index 35d91ac..b36c3ac 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4.plan
@@ -1,21 +1,21 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$18] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$18] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$19][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4_ps.plan
index 01a0df8..b4a8de2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_4_ps.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$22(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$22(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -9,19 +9,19 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$18] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$18] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$19][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -42,19 +42,19 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$18] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$18] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$19][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5.plan
index 62c2b89..3d62d53 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5.plan
@@ -1,10 +1,10 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5_ps.plan
index f4ab7c2..471eab2 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_5_ps.plan
@@ -1,14 +1,14 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$18(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$18(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$19(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -28,7 +28,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$13][$$19] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$14][$$20] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6.plan
index b36c3ac..defde04 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6.plan
@@ -1,21 +1,21 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$24(ASC) ] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$20] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$21][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$21] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6_ps.plan
index b4a8de2..664e0e5 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_as_or_6_ps.plan
@@ -1,7 +1,7 @@
-- DISTRIBUTE_RESULT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$23(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$23(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$24(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$24(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -9,19 +9,19 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$20] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$21][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$21] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -42,19 +42,19 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$19] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$20] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$19(ASC)] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$19] |PARTITIONED|
+ -- STABLE_SORT [$$20(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$20][$#1] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$20] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$21][$#1] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$21] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
index bf5fa63..7db3f31 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
@@ -2,13 +2,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$49(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$49(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$52(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -22,7 +22,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$43][$$42] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$46][$$45] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -30,7 +30,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$45] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated_ps.plan
index b430256..37d41e8 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$49(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$49(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$52(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$52(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -26,7 +26,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$43][$$42] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$46][$$45] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -34,7 +34,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$45] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -52,7 +52,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$43] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$46] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -66,7 +66,7 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$43][$$42] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$46][$$45] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -74,7 +74,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$42] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$45] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_ps.plan
index 74bd5b4..a60462d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_ps.plan
@@ -3,8 +3,8 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$44(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$47(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
@@ -12,7 +12,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$39] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -21,7 +21,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$32] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -29,7 +29,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -47,7 +47,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$39] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$42] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -56,7 +56,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$39][$$29] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$42][$$32] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -64,7 +64,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$29] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
index 57e0fa0..b92db3e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$cntrycode(ASC) ] |PARTITIONED|
- -- SORT_GROUP_BY[$$165] |PARTITIONED|
+ -- SORT_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$165] |PARTITIONED|
- -- SORT_GROUP_BY[$$142] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- SORT_GROUP_BY[$$154] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -21,25 +21,25 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$162] |PARTITIONED|
+ -- SORT_GROUP_BY[$$174] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$156] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$168] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$156(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$168(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$151][$$148] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$163][$$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$163] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -66,7 +66,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$148] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$160] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan
index 5a3e2f6..c99db85 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists_ps.plan
@@ -9,13 +9,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$165] |PARTITIONED|
+ -- SORT_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$165] |PARTITIONED|
- -- SORT_GROUP_BY[$$142] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- SORT_GROUP_BY[$$154] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -27,25 +27,25 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$162] |PARTITIONED|
+ -- SORT_GROUP_BY[$$174] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$156] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$168] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$156(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$168(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$151][$$148] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$163][$$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$163] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -72,7 +72,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$148] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$160] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
@@ -86,13 +86,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$165] |PARTITIONED|
+ -- SORT_GROUP_BY[$$177] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$165] |PARTITIONED|
- -- SORT_GROUP_BY[$$142] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- SORT_GROUP_BY[$$154] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -104,25 +104,25 @@
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$162] |PARTITIONED|
+ -- SORT_GROUP_BY[$$174] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$156] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$174] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$168] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$156(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$168(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$151][$$148] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$163][$$160] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$163] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -149,7 +149,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$148] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$160] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-1572.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-1572.plan
index 9b5bedd..1b0be9d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-1572.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/query-ASTERIXDB-1572.plan
@@ -5,20 +5,20 @@
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$64] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$62(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$64(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$62][$#4] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$64][$#4] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$60] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$62] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -27,22 +27,22 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$60][$#3] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$62][$#3] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$58] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$60] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$58(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$60(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$58][$#2] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$60][$#2] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$51] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$53] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
@@ -51,7 +51,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$51][$#1] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$53][$#1] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
index 8887588..6a74727 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1580.plan
@@ -3,21 +3,21 @@
-- STREAM_LIMIT |UNPARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$109(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$119(ASC) ] |PARTITIONED|
-- STREAM_LIMIT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [topK: 100] [$$109(ASC)] |PARTITIONED|
+ -- STABLE_SORT [topK: 100] [$$119(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$119] |PARTITIONED|
+ -- SORT_GROUP_BY[$$129] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$119] |PARTITIONED|
- -- SORT_GROUP_BY[$$100] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$129] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -25,33 +25,33 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$103][$$106] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$103] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$113][$$116] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$113] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$111][$$105] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$121][$$115] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$121] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$102][$$116] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$102] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$112][$$126] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$112] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$101][$$114] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$111][$$124] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$114] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$124] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$116] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$126] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
index 7919397..070af18 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581-correlated.plan
@@ -8,7 +8,7 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$152] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$162] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -20,9 +20,9 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$152][$$153] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$162][$$163] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$140] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$150] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -32,13 +32,13 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$140(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$150(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$140][$$141] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$150][$$151] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$120] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$130] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -53,7 +53,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$158][$$159] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$168][$$169] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -69,7 +69,7 @@
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$187] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -80,23 +80,23 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$141] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$134][$$133] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$144][$$143] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$171] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$181] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$176] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$186] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -106,7 +106,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$176][$$177] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$186][$$187] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -116,7 +116,7 @@
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$187] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -127,7 +127,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$133] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$143] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -140,13 +140,13 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$153] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$163] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$136][$$135] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$136] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$154] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$146][$$145] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$146] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$164] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -155,18 +155,18 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$154(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$164(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$154][$$157] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$164][$$167] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$158] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$168] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -178,7 +178,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$158][$$159] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$168][$$169] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -194,7 +194,7 @@
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$187] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -205,20 +205,20 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$157] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$167] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$171][$$170] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$181][$$180] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$171] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$181] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$176] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$186] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -228,7 +228,7 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$176][$$177] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$186][$$187] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -238,7 +238,7 @@
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$177] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$187] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -249,7 +249,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$170] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$180] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
@@ -262,7 +262,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$135] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$145] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
index a1ceb86..7f894db 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1581.plan
@@ -16,7 +16,7 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$149] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$159] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -28,9 +28,9 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$149][$$150] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$159][$$160] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$85] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$95] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -40,17 +40,17 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$85(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$95(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$85][$$142] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$95][$$152] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$161] |PARTITIONED|
-- STREAM_PROJECT |UNPARTITIONED|
-- ASSIGN |UNPARTITIONED|
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
@@ -68,7 +68,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$142] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -99,7 +99,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$160] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -113,7 +113,7 @@
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$151] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$161] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- AGGREGATE |LOCAL|
@@ -122,14 +122,14 @@
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$151(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$161(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$151][$$152] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$161][$$162] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$161] |PARTITIONED|
-- STREAM_PROJECT |UNPARTITIONED|
-- ASSIGN |UNPARTITIONED|
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
@@ -147,7 +147,7 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1591.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1591.plan
index 4925110..c16b826 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1591.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1591.plan
@@ -4,76 +4,76 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$168(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$176(ASC) ] |PARTITIONED|
-- STREAM_LIMIT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$177, $$178] |PARTITIONED|
+ -- SORT_GROUP_BY[$$185, $$186] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$177, $$178] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$165, $$166] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$185, $$186] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$173, $$174] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$165(ASC), $$166(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$173(ASC), $$174(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$165][$$147] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$165] |PARTITIONED|
- -- SORT_GROUP_BY[$$174, $$175] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$173][$$155] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$173] |PARTITIONED|
+ -- SORT_GROUP_BY[$$182, $$183] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$174, $$175] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$162, $$163] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$182, $$183] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$170, $$171] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$162(ASC), $$163(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$170(ASC), $$171(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$162][$$145] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$162] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$170][$$153] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$170] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$171, $$172] |PARTITIONED|
+ -- SORT_GROUP_BY[$$179, $$180] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$171, $$172] |PARTITIONED|
- -- PRE_CLUSTERED_GROUP_BY[$$126, $$127] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$179, $$180] |PARTITIONED|
+ -- PRE_CLUSTERED_GROUP_BY[$$134, $$135] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- STREAM_SELECT |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$126(ASC), $$127(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$134(ASC), $$135(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$126][$$143] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$126] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$134][$$151] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$134] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$137][$$127] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$137] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$145][$$135] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$145] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
@@ -83,12 +83,12 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$143] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$151] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$148][$$130] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$148] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$156][$$138] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$156] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -103,12 +103,12 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$145] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$153] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$150][$$133] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$150] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$158][$$141] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$158] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -126,12 +126,12 @@
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$147] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$155] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$152][$$136] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$152] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$160][$$144] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$160] |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596.plan
index d845b25..107d150 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596.plan
@@ -3,16 +3,16 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
- -- SORT_MERGE_EXCHANGE [$$44(ASC), $$45(ASC) ] |PARTITIONED|
- -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$47(ASC), $$48(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC), $$48(ASC)] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$44][$$48] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$47][$$51] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$47] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$45, $$44][$$47, $$46] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$48, $$47][$$50, $$49] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596_ps.plan
index 9a0cc83..e8d113b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpcds/query-ASTERIXDB-1596_ps.plan
@@ -4,19 +4,19 @@
-- ASSIGN |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- STABLE_SORT [$$44(ASC), $$45(ASC)] |PARTITIONED|
- -- RANGE_PARTITION_EXCHANGE [$$44(ASC), $$45(ASC)] |PARTITIONED|
+ -- STABLE_SORT [$$47(ASC), $$48(ASC)] |PARTITIONED|
+ -- RANGE_PARTITION_EXCHANGE [$$47(ASC), $$48(ASC)] |PARTITIONED|
-- FORWARD |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$44][$$48] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$47][$$51] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$47] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$45, $$44][$$47, $$46] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$48, $$47][$$50, $$49] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
@@ -39,11 +39,11 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$44][$$48] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$44] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$47][$$51] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$47] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$45, $$44][$$47, $$46] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$48, $$47][$$50, $$49] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- DATASOURCE_SCAN |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan
index b5e9913..122f5cc 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$l_shipmode(ASC) ] |PARTITIONED|
- -- SORT_GROUP_BY[$$122] |PARTITIONED|
+ -- SORT_GROUP_BY[$$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
- -- SORT_GROUP_BY[$$104] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$128] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -17,12 +17,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$104][$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$110][$$117] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$113][$$108] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$113] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$119][$$114] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$119] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast.plan
index 339e9ce..e24d30b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast.plan
@@ -3,13 +3,13 @@
-- STREAM_PROJECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
-- SORT_MERGE_EXCHANGE [$$l_shipmode(ASC) ] |PARTITIONED|
- -- SORT_GROUP_BY[$$122] |PARTITIONED|
+ -- SORT_GROUP_BY[$$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
- -- SORT_GROUP_BY[$$104] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$128] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -17,11 +17,11 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$104][$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$110][$$117] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$112][$$108] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$118][$$114] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast_ps.plan
index 17aa91c..083cd1e 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_broadcast_ps.plan
@@ -9,13 +9,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$122] |PARTITIONED|
+ -- SORT_GROUP_BY[$$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
- -- SORT_GROUP_BY[$$104] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$128] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -23,11 +23,11 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$104][$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$110][$$117] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$112][$$108] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$118][$$114] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
@@ -55,13 +55,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$122] |PARTITIONED|
+ -- SORT_GROUP_BY[$$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
- -- SORT_GROUP_BY[$$104] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$128] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -69,11 +69,11 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$104][$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$110][$$117] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$112][$$108] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$118][$$114] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_ps.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_ps.plan
index b7864dd..73d9b55 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_ps.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping_ps.plan
@@ -9,13 +9,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$122] |PARTITIONED|
+ -- SORT_GROUP_BY[$$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
- -- SORT_GROUP_BY[$$104] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$128] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -23,12 +23,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$104][$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$110][$$117] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$113][$$108] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$113] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$119][$$114] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$119] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
@@ -55,13 +55,13 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- REPLICATE |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- SORT_GROUP_BY[$$122] |PARTITIONED|
+ -- SORT_GROUP_BY[$$128] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- HASH_PARTITION_EXCHANGE [$$122] |PARTITIONED|
- -- SORT_GROUP_BY[$$104] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$128] |PARTITIONED|
+ -- SORT_GROUP_BY[$$110] |PARTITIONED|
{
-- AGGREGATE |LOCAL|
-- NESTED_TUPLE_SOURCE |LOCAL|
@@ -69,12 +69,12 @@
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$104][$$111] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$110][$$117] |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- -- HYBRID_HASH_JOIN [$$113][$$108] |PARTITIONED|
- -- HASH_PARTITION_EXCHANGE [$$113] |PARTITIONED|
+ -- HYBRID_HASH_JOIN [$$119][$$114] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$119] |PARTITIONED|
-- STREAM_PROJECT |PARTITIONED|
-- STREAM_SELECT |PARTITIONED|
-- ASSIGN |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/window/window_02.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/window/window_02.plan
new file mode 100644
index 0000000..e452d03
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/window/window_02.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$48(ASC) ] |PARTITIONED|
+ -- STABLE_SORT [$$48(ASC)] |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- WINDOW |PARTITIONED|
+ {
+ -- AGGREGATE |LOCAL|
+ -- NESTED_TUPLE_SOURCE |LOCAL|
+ }
+ -- WINDOW |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- STABLE_SORT [$$34(ASC), $$48(ASC)] |PARTITIONED|
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
+ -- STREAM_PROJECT |PARTITIONED|
+ -- ASSIGN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- DATASOURCE_SCAN |PARTITIONED|
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.3.query.sqlpp
index 2948a3f..144b586 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.3.query.sqlpp
@@ -44,5 +44,4 @@
min(rank_result_delta) rank_min_delta,
max(rank_result_delta) rank_max_delta,
min(percent_rank_result_delta) percent_rank_min_delta,
- max(percent_rank_result_delta) percent_rank_max_delta
-
+ max(percent_rank_result_delta) percent_rank_max_delta;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.4.query.sqlpp
index d3f7916..11226b8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.4.query.sqlpp
@@ -28,5 +28,5 @@
from t1, range(t1.one, P) p
group by p
select p, row_number() over (order by p desc) rn
-order by p
+order by p;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.5.query.sqlpp
index c0548c3..cea4bc3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.5.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.5.query.sqlpp
@@ -28,5 +28,5 @@
from t1, range(t1.one, P) p
group by p group as g
select p, ( from g select g.t1.c1, row_number() over ( order by g.t1.c2 desc ) rn order by g.t1.c1 ) gg
-order by p
+order by p;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.6.query.sqlpp
new file mode 100644
index 0000000..dcfc33f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/misc_01/misc_01.6.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Test window function with SQL++ aggregate
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from t1
+select c1, array_sum((from w select value w.t1.c1)) over w as (partition by c2 mod 2) as `sum`
+order by c1;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/ntile_02/ntile_02.1.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/ntile_02/ntile_02.1.query.sqlpp
index 3a46f18..77b7249 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/ntile_02/ntile_02.1.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/ntile_02/ntile_02.1.query.sqlpp
@@ -22,4 +22,4 @@
*/
from range(1,10) t
-select ntile("string") over (order by t desc)
+select ntile("string") over (order by t desc) as res
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.1.ddl.sqlpp
new file mode 100644
index 0000000..b91590f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.1.ddl.sqlpp
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use test;
+
+create type tenkType as closed {
+ unique1 : integer,
+ unique2 : integer,
+ two : integer,
+ four : integer,
+ ten : integer,
+ twenty : integer,
+ hundred : integer,
+ thousand : integer,
+ twothousand : integer,
+ fivethous : integer,
+ tenthous : integer,
+ odd : integer,
+ even : integer,
+ stringu1 : string,
+ stringu2 : string,
+ string4 : string
+};
+
+create dataset tenk1(tenkType) primary key unique2;
+
+create index idx_tenk1_unique1 on tenk1(unique1) type btree;
+
+create type empsalaryType as closed {
+ depname : string,
+ empno : bigint,
+ salary : integer,
+ enroll_date : date
+};
+
+create dataset empsalary(empsalaryType) primary key empno;
+
+create type numericsType as closed {
+ id : integer,
+ f_float4 : float,
+ f_float8 : double
+};
+
+create dataset numerics(numericsType) primary key id;
+
+create type datetimesType as closed {
+ id : integer,
+ f_timetz : time,
+ f_timestamptz : timestamp
+};
+
+create dataset datetimes(datetimesType) primary key id;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.10.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.10.query.sqlpp
new file mode 100644
index 0000000..66d32b2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.10.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT round_half_to_even(percent_rank() OVER (PARTITION BY four ORDER BY ten), 4) AS `percent_rank`, ten, four
+ORDER BY four, ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.100.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.100.query.sqlpp
new file mode 100644
index 0000000..a1767f7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.100.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from (from empsalary select value empsalary order by enroll_date, salary limit 10) s
+select enroll_date, salary,
+ first_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude ties) as `first_value`,
+ last_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following) as `last_value`
+order by enroll_date, salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.101.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.101.query.sqlpp
new file mode 100644
index 0000000..53f7657
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.101.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from (from empsalary select value empsalary order by enroll_date, salary limit 10) s
+select enroll_date, salary,
+ first_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude ties) as `first_value`,
+ last_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude ties) as `last_value`
+order by enroll_date, salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.102.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.102.query.sqlpp
new file mode 100644
index 0000000..0d263bc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.102.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from (from empsalary select value empsalary order by enroll_date, salary limit 10) s
+select enroll_date, salary,
+ first_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude group) as `first_value`,
+ last_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude group) as `last_value`
+order by enroll_date, salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.103.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.103.query.sqlpp
new file mode 100644
index 0000000..96a8824
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.103.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from (from empsalary select value empsalary order by enroll_date, salary limit 10) s
+select enroll_date, salary,
+ first_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude current row) as `first_value`,
+ last_value(salary) over(order by enroll_date range between unbounded preceding and duration("P1Y") following exclude current row) as `last_value`
+order by enroll_date, salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.104.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.104.query.sqlpp
new file mode 100644
index 0000000..825bc7d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.104.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from
+ (select x, x as y from range(1,5) as x
+ union all select null as x, 42 as y) ss
+select x, y,
+ first_value(y) over w as (order by x range between 2 preceding and 2 following) as `first_value`,
+ last_value(y) over w as (order by x range between 2 preceding and 2 following) as `last_value`
+order by x
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.105.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.105.query.sqlpp
new file mode 100644
index 0000000..e090b6f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.105.query.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from
+ (select x, x as y from range(1,5) as x
+ union all select null as x, 42 as y) ss
+select x, y,
+ first_value(y) over w as (order by x desc range between 2 preceding and 2 following) as `first_value`,
+ last_value(y) over w as (order by x desc range between 2 preceding and 2 following) as `last_value`
+order by x desc
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.106.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.106.query.sqlpp
new file mode 100644
index 0000000..2c09faa
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.106.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from range(32764, 32766) x
+select x,
+ last_value(x) over (order by smallint(tostring(x)) range between current row and 2147450884 following) as `last_value`
+order by smallint(tostring(x))
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.107.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.107.query.sqlpp
new file mode 100644
index 0000000..a7746db
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.107.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from range(-32766, -32764) x
+select x,
+ last_value(x) over (order by smallint(tostring(x)) desc range between current row and 2147450885 following) as `last_value`
+order by smallint(tostring(x)) desc
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.108.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.108.query.sqlpp
new file mode 100644
index 0000000..2d9c9f2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.108.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from range(2147483644, 2147483646) x
+select x,
+ last_value(x) over (order by x range between current row and 4 following) as `last_value`
+order by x
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.109.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.109.query.sqlpp
new file mode 100644
index 0000000..d5408fc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.109.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from range(-2147483646, -2147483644) x
+select x,
+ last_value(x) over (order by x desc range between current row and 5 following) as `last_value`
+order by x desc
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.11.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.11.query.sqlpp
new file mode 100644
index 0000000..b6808b9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.11.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT ntile(3) OVER (ORDER BY ten, four) AS `ntile`, ten, four
+ORDER BY ten, four
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.110.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.110.query.sqlpp
new file mode 100644
index 0000000..4601125
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.110.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from numerics
+select id, f_float4,
+ first_value(id) over w as (order by f_float4 range between 1 preceding and 1 following) as `first_value`,
+ last_value(id) over w as (order by f_float4 range between 1 preceding and 1 following) as `last_value`
+order by f_float4
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.111.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.111.query.sqlpp
new file mode 100644
index 0000000..87bf36f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.111.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from numerics
+select id, f_float4,
+ first_value(id) over w as (order by f_float4 range between 1 preceding and float("1.1") following) as `first_value`,
+ last_value(id) over w as (order by f_float4 range between 1 preceding and float("1.1") following) as `last_value`
+order by f_float4
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.112.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.112.query.sqlpp
new file mode 100644
index 0000000..5c9ef83
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.112.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from numerics
+select id, f_float8,
+ first_value(id) over w as (order by f_float8 range between 1 preceding and double("1.1") following) as `first_value`,
+ last_value(id) over w as (order by f_float8 range between 1 preceding and double("1.1") following) as `last_value`
+order by f_float8
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.113.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.113.query.sqlpp
new file mode 100644
index 0000000..4cb1f23
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.113.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from datetimes
+select id, f_timetz,
+ first_value(id) over w as (order by f_timetz range between duration('PT70M') preceding and duration('PT2H') following) as `first_value`,
+ last_value(id) over w as (order by f_timetz range between duration('PT70M') preceding and duration('PT2H') following) as `last_value`
+order by f_timetz
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.114.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.114.query.sqlpp
new file mode 100644
index 0000000..3556bef
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.114.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from datetimes
+select id, f_timetz,
+ first_value(id) over w as (order by f_timetz desc range between duration('PT70M') preceding and duration('PT2H') following) as `first_value`,
+ last_value(id) over w as (order by f_timetz desc range between duration('PT70M') preceding and duration('PT2H') following) as `last_value`
+order by f_timetz desc
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.115.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.115.query.sqlpp
new file mode 100644
index 0000000..a39d66e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.115.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from datetimes
+select id, f_timestamptz,
+ first_value(id) over w as (order by f_timestamptz range between duration('P1Y') preceding and duration('P1Y') following) as `first_value`,
+ last_value(id) over w as (order by f_timestamptz range between duration('P1Y') preceding and duration('P1Y') following) as `last_value`
+order by f_timestamptz
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.116.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.116.query.sqlpp
new file mode 100644
index 0000000..97d960c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.116.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from datetimes
+select id, f_timestamptz,
+ first_value(id) over w as (order by f_timestamptz desc range between duration('P1Y') preceding and duration('P1Y') following) as `first_value`,
+ last_value(id) over w as (order by f_timestamptz desc range between duration('P1Y') preceding and duration('P1Y') following) as `last_value`
+order by f_timestamptz desc
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.117.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.117.query.sqlpp
new file mode 100644
index 0000000..a1633bc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.117.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+GROUP BY four, ten
+SELECT four, ten, SUM(SUM(four)) OVER (PARTITION BY four) as `sum`, AVG(ten) as `avg`
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.118.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.118.query.sqlpp
new file mode 100644
index 0000000..20224fc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.118.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+GROUP BY ten, two
+SELECT ten, two,
+ sum(hundred) AS gsum,
+ sum(sum(hundred)) OVER (PARTITION BY two ORDER BY ten) AS wsum
+ORDER BY two, ten
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.119.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.119.query.sqlpp
new file mode 100644
index 0000000..7935b20
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.119.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM empsalary
+GROUP BY depname
+SELECT sum(salary) AS `sum`,
+ row_number() OVER (ORDER BY depname) AS `row_number`,
+ sum(sum(salary)) OVER (ORDER BY depname DESC) AS `sum_sum`
+ORDER BY depname DESC
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.12.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.12.query.sqlpp
new file mode 100644
index 0000000..d73a7f4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.12.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+SELECT ntile(NULL) OVER (ORDER BY ten, four) AS `ntile`, ten, four
+ORDER BY ten, four
+LIMIT 2;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.13.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.13.query.sqlpp
new file mode 100644
index 0000000..7ad736e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.13.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (SELECT VALUE tenk1 FROM tenk1 WHERE two = 1) s
+WHERE unique2 < 10
+SELECT count(*) OVER (PARTITION BY four) AS `count`, four
+ORDER BY four
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.14.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.14.query.sqlpp
new file mode 100644
index 0000000..a5f7984
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.14.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT (
+ count(*) OVER (PARTITION BY four ORDER BY ten) +
+ sum(hundred) OVER (PARTITION BY four ORDER BY ten)
+) AS cntsum
+ORDER BY cntsum
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.15.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.15.query.sqlpp
new file mode 100644
index 0000000..45487fb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.15.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT avg(four) OVER (PARTITION BY four ORDER BY thousand / 100) AS `avg`
+ORDER BY `avg`
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.16.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.16.query.sqlpp
new file mode 100644
index 0000000..a53e28f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.16.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (
+ FROM (SELECT * FROM tenk1 WHERE FALSE) s
+ SELECT count(*) OVER (PARTITION BY four) AS `count`
+) t
+SELECT count(*) AS `cnt`
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.17.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.17.query.sqlpp
new file mode 100644
index 0000000..1d92f8e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.17.query.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (
+ FROM empsalary
+ SELECT empsalary.*,
+ CASE WHEN enroll_date < date('2008-01-01') THEN 2008 - get_year(enroll_date) END * 500 AS bonus,
+ CASE WHEN AVG(salary) OVER (PARTITION BY depname) < salary THEN 200 END AS depadj
+) s
+SELECT empno, depname, salary, bonus, depadj,
+ MIN(bonus) OVER (ORDER BY empno) AS `min`,
+ MAX(depadj) OVER () AS `max`
+ORDER BY empno
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.18.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.18.query.sqlpp
new file mode 100644
index 0000000..1da33d1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.18.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from tenk1
+group by ten
+select ten,
+ sum(unique1) + sum(unique2) as res,
+ rank() over (order by sum(unique1) + sum(unique2)) as rank
+order by ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.19.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.19.query.sqlpp
new file mode 100644
index 0000000..dcdb92e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.19.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten,
+ sum(ten) over (partition by four order by ten) as `sum`,
+ last_value(ten) over (partition by four order by ten) as `last_value`
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.2.update.sqlpp
new file mode 100644
index 0000000..4b42cb2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.2.update.sqlpp
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+load dataset tenk1 using localfs ((`path`=`asterix_nc1://data/tenk.tbl`),(`format`=`delimited-text`),(`delimiter`=`|`));
+
+insert into empsalary
+select v[0] as depname, v[1] as empno, v[2] as salary, date(v[3]) as enroll_date
+from [
+ ['develop', 10, 5200, '2007-08-01'],
+ ['sales', 1, 5000, '2006-10-01'],
+ ['personnel', 5, 3500, '2007-12-10'],
+ ['sales', 4, 4800, '2007-08-08'],
+ ['personnel', 2, 3900, '2006-12-23'],
+ ['develop', 7, 4200, '2008-01-01'],
+ ['develop', 9, 4500, '2008-01-01'],
+ ['sales', 3, 4800, '2007-08-01'],
+ ['develop', 8, 6000, '2006-10-01'],
+ ['develop', 11, 5200, '2007-08-15']
+] v;
+
+insert into numerics
+select v[0] as id, float(v[1]) as f_float4, double(v[2]) as f_float8
+from [
+ [0, '-INF', '-INF'],
+ [1, '-3', '-3'],
+ [2, '-1', '-1'],
+ [3, '0', '0'],
+ [4, '1.1', '1.1'],
+ [5, '1.12', '1.12'],
+ [6, '2', '2'],
+ [7, '100', '100'],
+ [8, 'INF', 'INF'],
+ [9, 'NaN', 'NaN']
+] v;
+
+insert into datetimes
+select v[0] as id, time(v[1]) as f_timetz, datetime(v[2]) as f_timestamptz
+from [
+ [1, '11:00:00Z', '2000-10-19T10:23:54Z'],
+ [2, '12:00:00Z', '2001-10-19T10:23:54Z'],
+ [3, '13:00:00Z', '2002-10-19T10:23:54Z'],
+ [4, '14:00:00Z', '2003-10-19T10:23:54Z'],
+ [5, '15:00:00Z', '2004-10-19T10:23:54Z'],
+ [6, '16:00:00Z', '2005-10-19T10:23:54Z'],
+ [7, '17:00:00Z', '2006-10-19T10:23:54Z'],
+ [8, '18:00:00Z', '2007-10-19T10:23:54Z'],
+ [9, '19:00:00Z', '2008-10-19T10:23:54Z'],
+ [10, '20:00:00Z', '2009-10-19T10:23:54Z']
+] v;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.20.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.20.query.sqlpp
new file mode 100644
index 0000000..9d6b52b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.20.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten,
+ sum(ten) over (partition by four order by ten range between unbounded preceding and current row) as `sum`,
+ last_value(ten) over (partition by four order by ten range between unbounded preceding and current row) as `last_value`
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.21.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.21.query.sqlpp
new file mode 100644
index 0000000..c29d04c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.21.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten,
+ sum(ten) over (partition by four order by ten range between unbounded preceding and unbounded following) as `sum`,
+ last_value(ten) over (partition by four order by ten range between unbounded preceding and unbounded following) as `last_value`
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.22.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.22.query.sqlpp
new file mode 100644
index 0000000..dd05e2d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.22.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten div 4 as two,
+ sum(ten div 4) over (partition by four order by ten div 4 range between unbounded preceding and current row) as `sum`,
+ last_value(ten div 4) over (partition by four order by ten div 4 range between unbounded preceding and current row) as `last_value`
+ORDER BY four, ten div 4
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.23.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.23.query.sqlpp
new file mode 100644
index 0000000..a08ad42
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.23.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten div 4 as two,
+ sum(ten div 4) over (partition by four order by ten div 4 rows between unbounded preceding and current row) as `sum`,
+ last_value(ten div 4) over (partition by four order by ten div 4 rows between unbounded preceding and current row) as `last_value`
+ORDER BY four, ten div 4
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.24.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.24.query.sqlpp
new file mode 100644
index 0000000..1c35ced
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.24.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between current row and unbounded following) as `sum`
+ORDER BY four, unique1
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.25.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.25.query.sqlpp
new file mode 100644
index 0000000..aef49a1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.25.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between current row and unbounded following) as `sum`
+ORDER BY unique2
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.26.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.26.query.sqlpp
new file mode 100644
index 0000000..19d2040
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.26.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between 2 preceding and 2 following) as `sum`
+ORDER BY unique2
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.27.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.27.query.sqlpp
new file mode 100644
index 0000000..36069ed
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.27.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between 2 preceding and 2 following exclude no others) as `sum`
+ORDER BY unique2
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.28.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.28.query.sqlpp
new file mode 100644
index 0000000..38f1f65
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.28.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between 2 preceding and 2 following exclude current row) as `sum`
+ORDER BY unique2
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.29.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.29.query.sqlpp
new file mode 100644
index 0000000..0c9b434
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.29.query.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between 2 preceding and 1 preceding) as `sum`
+ORDER BY unique2
+
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.3.query.sqlpp
new file mode 100644
index 0000000..611c8ee
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.3.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM empsalary
+SELECT depname, empno, salary, sum(salary) OVER (PARTITION BY depname) AS `sum`
+ORDER BY depname, salary, empno
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.30.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.30.query.sqlpp
new file mode 100644
index 0000000..4d1a7a1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.30.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between 1 following and 3 following) as `sum`
+ORDER BY unique2
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.31.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.31.query.sqlpp
new file mode 100644
index 0000000..fc0b9aa
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.31.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by unique2 rows between unbounded preceding and 1 following) as `sum`
+ORDER BY unique2
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.32.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.32.query.sqlpp
new file mode 100644
index 0000000..69b8e4b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.32.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between unbounded preceding and current row exclude current row) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.33.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.33.query.sqlpp
new file mode 100644
index 0000000..464d83b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.33.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between unbounded preceding and current row exclude group) as `sum`
+order by four, unique1
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.34.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.34.query.sqlpp
new file mode 100644
index 0000000..8b2648b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.34.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between unbounded preceding and current row exclude ties) as `sum`
+ORDER BY four, unique1;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.35.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.35.query.sqlpp
new file mode 100644
index 0000000..adbdfcc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.35.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1 t1
+WHERE unique1 < 10
+SELECT unique1,
+ sum(unique1) over (order by unique1 rows
+ (SELECT VALUE unique1 FROM tenk1 t2 ORDER BY unique1 LIMIT 1)[0] + 1 PRECEDING) as `sum`
+ORDER BY unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.36.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.36.query.sqlpp
new file mode 100644
index 0000000..5f7aeb5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.36.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("1") preceding) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.37.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.37.query.sqlpp
new file mode 100644
index 0000000..247ee41
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.37.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four desc range between bigint("2") preceding and smallint("1") preceding) as `sum`
+ORDER BY four desc, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.38.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.38.query.sqlpp
new file mode 100644
index 0000000..5affbd1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.38.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("1") preceding
+ exclude no others) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.39.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.39.query.sqlpp
new file mode 100644
index 0000000..0438246
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.39.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("1") preceding
+ exclude current row) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.4.query.sqlpp
new file mode 100644
index 0000000..4b6e8a2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.4.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM empsalary
+SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary) AS `rank`
+ORDER BY depname, salary, empno
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.40.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.40.query.sqlpp
new file mode 100644
index 0000000..277ac2b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.40.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("1") preceding exclude group)
+ as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.41.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.41.query.sqlpp
new file mode 100644
index 0000000..e0563cc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.41.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("1") preceding exclude ties)
+ as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.42.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.42.query.sqlpp
new file mode 100644
index 0000000..b165caa
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.42.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("6") following exclude ties)
+ as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.43.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.43.query.sqlpp
new file mode 100644
index 0000000..0e978ac
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.43.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four range between bigint("2") preceding and smallint("6") following exclude group)
+ as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.44.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.44.query.sqlpp
new file mode 100644
index 0000000..dc66cb7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.44.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (partition by four order by unique1 range between bigint("5") preceding and smallint("6") following)
+ as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.45.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.45.query.sqlpp
new file mode 100644
index 0000000..682e43b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.45.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (partition by four order by unique1 range between bigint("5") preceding and smallint("6") following
+ exclude current row) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.46.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.46.query.sqlpp
new file mode 100644
index 0000000..9e5c023
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.46.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary, enroll_date,
+ sum(salary) over (order by enroll_date range between duration("P1Y") preceding and duration("P1Y") following) as `sum`
+order by enroll_date, salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.47.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.47.query.sqlpp
new file mode 100644
index 0000000..46702f7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.47.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary, enroll_date,
+ sum(salary) over (order by enroll_date desc range between duration("P1Y") preceding and duration("P1Y") following)
+ as `sum`
+order by enroll_date desc, salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.48.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.48.query.sqlpp
new file mode 100644
index 0000000..19410a9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.48.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary, enroll_date,
+ sum(salary) over (order by enroll_date desc range between duration("P1Y") following and duration("P1Y") following)
+ as `sum`
+order by enroll_date, salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.49.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.49.query.sqlpp
new file mode 100644
index 0000000..5e155c9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.49.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary, enroll_date,
+ sum(salary) over (order by enroll_date range between duration("P1Y") preceding and duration("P1Y") following
+ exclude current row) as `sum`
+order by enroll_date, salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.5.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.5.query.sqlpp
new file mode 100644
index 0000000..183e4ff
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.5.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT COUNT(*) OVER () AS `count`
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.50.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.50.query.sqlpp
new file mode 100644
index 0000000..c6e28d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.50.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary, enroll_date,
+ sum(salary) over (order by enroll_date range between duration("P1Y") preceding and duration("P1Y") following
+ exclude group) as `sum`
+order by enroll_date, salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.51.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.51.query.sqlpp
new file mode 100644
index 0000000..a311d4f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.51.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary, enroll_date,
+ sum(salary) over (order by enroll_date range between duration("P1Y") preceding and duration("P1Y") following
+ exclude ties) as `sum`
+order by enroll_date, salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.52.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.52.query.sqlpp
new file mode 100644
index 0000000..740b251
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.52.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between unbounded preceding and current row) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.53.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.53.query.sqlpp
new file mode 100644
index 0000000..f92a4c1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.53.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between unbounded preceding and unbounded following) as `sum`
+ORDER BY four, unique1
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.54.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.54.query.sqlpp
new file mode 100644
index 0000000..2656306
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.54.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between current row and unbounded following) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.55.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.55.query.sqlpp
new file mode 100644
index 0000000..c5d845e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.55.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 1 preceding and unbounded following) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.56.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.56.query.sqlpp
new file mode 100644
index 0000000..f085dee
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.56.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 1 following and unbounded following) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.57.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.57.query.sqlpp
new file mode 100644
index 0000000..2b19fac
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.57.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between unbounded preceding and 2 following) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.58.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.58.query.sqlpp
new file mode 100644
index 0000000..be5ac68
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.58.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 2 preceding and 1 preceding) as `sum`
+ORDER BY four, unique1
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.59.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.59.query.sqlpp
new file mode 100644
index 0000000..8a04a81
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.59.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 2 preceding and 1 following) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.6.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.6.query.sqlpp
new file mode 100644
index 0000000..e026ebf
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.6.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT sum(four) OVER (PARTITION BY ten ORDER BY unique2) AS sum_1, ten, four
+ORDER BY ten, sum_1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.60.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.60.query.sqlpp
new file mode 100644
index 0000000..549038c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.60.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 0 preceding and 0 following) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.61.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.61.query.sqlpp
new file mode 100644
index 0000000..3790493
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.61.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 2 preceding and 1 following exclude current row) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.62.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.62.query.sqlpp
new file mode 100644
index 0000000..c8721be
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.62.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 2 preceding and 1 following exclude group) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.63.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.63.query.sqlpp
new file mode 100644
index 0000000..241b048
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.63.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four,
+ sum(unique1) over (order by four groups between 2 preceding and 1 following exclude ties) as `sum`
+ORDER BY four, unique1
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.64.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.64.query.sqlpp
new file mode 100644
index 0000000..a0cbe0f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.64.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four, ten,
+ sum(unique1) over (partition by ten order by four groups between 0 preceding and 0 following) as `sum`
+ORDER BY ten, four
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.65.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.65.query.sqlpp
new file mode 100644
index 0000000..0e515d8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.65.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four, ten,
+ sum(unique1) over (partition by ten order by four groups between 0 preceding and 0 following exclude current row)
+ as `sum`
+ORDER BY ten, four
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.66.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.66.query.sqlpp
new file mode 100644
index 0000000..cceaff1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.66.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four, ten,
+ sum(unique1) over (partition by ten order by four groups between 0 preceding and 0 following exclude group) as `sum`
+ORDER BY ten, four
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.67.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.67.query.sqlpp
new file mode 100644
index 0000000..c671c41
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.67.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique1 < 10
+SELECT unique1, four, ten,
+ sum(unique1) over (partition by ten order by four groups between 0 preceding and 0 following exclude ties) as `sum`
+ORDER BY ten, four
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.68.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.68.query.sqlpp
new file mode 100644
index 0000000..7d39752
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.68.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+WITH cte AS (
+ FROM range(0, 17) v SELECT VALUE 1 + v * 2
+)
+FROM cte x
+SELECT x, sum(x) over (ORDER BY x rows between 1 preceding and 1 following) as `sum`
+ORDER BY x
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.69.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.69.query.sqlpp
new file mode 100644
index 0000000..34051cf
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.69.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+WITH cte AS (
+ FROM range(0, 17) v SELECT VALUE 1 + v * 2
+)
+FROM cte x
+SELECT x, sum(x) over (ORDER BY x range between 1 preceding and 1 following) as `sum`
+ORDER BY x
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.7.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.7.query.sqlpp
new file mode 100644
index 0000000..357782a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.7.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT row_number() OVER (ORDER BY unique2) AS `row_number`
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.70.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.70.query.sqlpp
new file mode 100644
index 0000000..90ecc97
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.70.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+WITH cte AS (
+ FROM range(0, 17) v SELECT VALUE 1 + v * 2
+)
+FROM cte x
+SELECT x, sum(x) over (ORDER BY x groups between 1 preceding and 1 following) as `sum`
+ORDER BY x
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.71.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.71.query.sqlpp
new file mode 100644
index 0000000..16f1f2a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.71.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+WITH cte AS (
+ select value 1 union all select value 1 union all select value 1 union all
+ SELECT VALUE 5 + v * 2 FROM range(0, 22) v
+)
+FROM cte x
+SELECT x, sum(x) over (ORDER BY x rows between 1 preceding and 1 following) as `sum`
+ORDER BY x
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.72.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.72.query.sqlpp
new file mode 100644
index 0000000..e6805fa
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.72.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+WITH cte AS (
+ select value 1 union all select value 1 union all select value 1 union all
+ SELECT VALUE 5 + v * 2 FROM range(0, 22) v
+)
+FROM cte x
+SELECT x, sum(x) over (ORDER BY x range between 1 preceding and 1 following) as `sum`
+ORDER BY x
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.73.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.73.query.sqlpp
new file mode 100644
index 0000000..30b89ee
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.73.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+WITH cte AS (
+ select value 1 union all select value 1 union all select value 1 union all
+ SELECT VALUE 5 + v * 2 FROM range(0, 22) v
+)
+FROM cte x
+SELECT x, sum(x) over (ORDER BY x groups between 1 preceding and 1 following) as `sum`
+ORDER BY x
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.74.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.74.query.sqlpp
new file mode 100644
index 0000000..a251721
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.74.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT lag(ten) OVER (PARTITION BY four ORDER BY ten) AS lag, ten, four
+ORDER BY four, ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.75.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.75.query.sqlpp
new file mode 100644
index 0000000..d6d27ab
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.75.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1 t
+WHERE t.unique2 < 10
+SELECT lag(t.ten) OVER (PARTITION BY t.four ORDER BY t.ten) AS lag, t.ten, t.four
+ORDER BY t.four, t.ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.76.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.76.query.sqlpp
new file mode 100644
index 0000000..ba9be1e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.76.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT lag(ten, four) OVER (PARTITION BY four ORDER BY ten) AS lag, ten, four
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.77.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.77.query.sqlpp
new file mode 100644
index 0000000..2081002
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.77.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT lag(ten, four, 0) OVER (PARTITION BY four ORDER BY ten) AS lag, ten, four
+ORDER BY four, ten
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.78.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.78.query.sqlpp
new file mode 100644
index 0000000..518516b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.78.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT lead(ten) OVER (PARTITION BY four ORDER BY ten) AS lead, ten, four
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.79.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.79.query.sqlpp
new file mode 100644
index 0000000..37ba499
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.79.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT lead(ten * 2, 1) OVER (PARTITION BY four ORDER BY ten) AS lead, ten, four
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.8.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.8.query.sqlpp
new file mode 100644
index 0000000..b866c47
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.8.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT rank() OVER (PARTITION BY four ORDER BY ten) AS rank_1, ten, four
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.80.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.80.query.sqlpp
new file mode 100644
index 0000000..226a854
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.80.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT lead(ten * 2, 1, -1) OVER (PARTITION BY four ORDER BY ten) AS lead, ten, four
+ORDER BY four, ten
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.81.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.81.query.sqlpp
new file mode 100644
index 0000000..b3fecc2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.81.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT first_value(ten) OVER (PARTITION BY four ORDER BY ten) AS `first_value`, ten, four
+ORDER BY four, ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.82.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.82.query.sqlpp
new file mode 100644
index 0000000..fc86522
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.82.query.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (SELECT VALUE tenk1 FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten LIMIT 10) s
+SELECT last_value(ten) OVER (PARTITION BY four) AS `last_value`, ten, four
+ORDER BY four, ten;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.83.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.83.query.sqlpp
new file mode 100644
index 0000000..ea44416
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.83.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (SELECT VALUE tenk1 FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten LIMIT 10) s
+SELECT nth_value(ten, four + 1) OVER (PARTITION BY four) AS `nth_value`, ten, four
+ORDER BY four, ten
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.84.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.84.query.sqlpp
new file mode 100644
index 0000000..a496305
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.84.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten,
+ sum(ten) over (partition by four order by ten) AS `sum`,
+ last_value(ten) over (partition by four order by ten) AS `last_value`
+ORDER BY four, ten
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.85.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.85.query.sqlpp
new file mode 100644
index 0000000..6c535d8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.85.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten,
+ sum(ten) over (partition by four order by ten range between unbounded preceding and current row) AS `sum`,
+ last_value(ten) over (partition by four order by ten range between unbounded preceding and current row) AS `last_value`
+ORDER BY four, ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.86.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.86.query.sqlpp
new file mode 100644
index 0000000..33dc26d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.86.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten,
+ sum(ten) over (partition by four order by ten range between unbounded preceding and unbounded following) AS `sum`,
+ last_value(ten) over (partition by four order by ten range between unbounded preceding and unbounded following) AS `last_value`
+ORDER BY four, ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.87.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.87.query.sqlpp
new file mode 100644
index 0000000..4973930
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.87.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten div 4 as two,
+ sum(ten div 4) over (partition by four order by ten div 4 range between unbounded preceding and current row) AS `sum`,
+ last_value(ten div 4) over (partition by four order by ten div 4 range between unbounded preceding and current row) AS `last_value`
+ORDER BY four, ten div 4
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.88.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.88.query.sqlpp
new file mode 100644
index 0000000..08c7446
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.88.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM (select distinct ten, four from tenk1) ss
+SELECT four, ten div 4 as two,
+ sum(ten div 4) over (partition by four order by ten div 4 rows between unbounded preceding and current row) AS `sum`,
+ last_value(ten div 4) over (partition by four order by ten div 4 rows between unbounded preceding and current row) AS `last_value`
+ORDER BY four, ten div 4
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.89.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.89.query.sqlpp
new file mode 100644
index 0000000..07c6357
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.89.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ first_value(unique1) over (ORDER BY four rows between current row and 2 following exclude current row) AS `first_value`
+ORDER BY four, unique2 DESC
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.9.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.9.query.sqlpp
new file mode 100644
index 0000000..4ed0560
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.9.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM tenk1
+WHERE unique2 < 10
+SELECT dense_rank() OVER (PARTITION BY four ORDER BY ten) AS `dense_rank`, ten, four
+ORDER BY four, ten
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.90.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.90.query.sqlpp
new file mode 100644
index 0000000..3751d87
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.90.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ first_value(unique1) over (ORDER BY four rows between current row and 2 following exclude group) AS `first_value`
+ORDER BY four, unique2 DESC
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.91.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.91.query.sqlpp
new file mode 100644
index 0000000..c7e3266
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.91.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ first_value(unique1) over (ORDER BY four rows between current row and 2 following exclude ties) AS `first_value`
+ORDER BY four, unique2 DESC
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.92.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.92.query.sqlpp
new file mode 100644
index 0000000..3073cc9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.92.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ last_value(unique1) over (ORDER BY four rows between current row and 2 following exclude current row) AS `last_value`
+ORDER BY four, unique2 DESC
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.93.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.93.query.sqlpp
new file mode 100644
index 0000000..88f239b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.93.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ last_value(unique1) over (ORDER BY four rows between current row and 2 following exclude group) AS `last_value`
+ORDER BY four, unique2 DESC
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.94.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.94.query.sqlpp
new file mode 100644
index 0000000..967de6d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.94.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ last_value(unique1) over (ORDER BY four rows between current row and 2 following exclude ties) AS `last_value`
+ORDER BY four, unique2 DESC
+
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.95.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.95.query.sqlpp
new file mode 100644
index 0000000..6c99283
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.95.query.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+FROM ( FROM tenk1 WHERE unique1 < 10 SELECT VALUE tenk1 ORDER BY four, unique2 DESC LIMIT 10 ) s
+SELECT unique1, four,
+ first_value(unique1) over w AS (order by four range between current row and unbounded following) AS `first_value`,
+ nth_value(unique1, 2) over w AS (order by four range between current row and unbounded following) AS nth_2,
+ last_value(unique1) over w AS (order by four range between current row and unbounded following) AS `last_value`
+ORDER BY four, unique2 DESC
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.96.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.96.query.sqlpp
new file mode 100644
index 0000000..45ce34e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.96.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary,
+ first_value(salary) over(order by salary range between 1000 preceding and 1000 following) AS `first_value`,
+ lead(salary) over(order by salary) AS `lead`,
+ nth_value(salary, 1) over(order by salary range between 1000 preceding and 1000 following) AS `nth_value`
+order by salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.97.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.97.query.sqlpp
new file mode 100644
index 0000000..81108eb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.97.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary,
+ last_value(salary) over(order by salary range between 1000 preceding and 1000 following) as `last_value`,
+ lag(salary) over(order by salary) as `lag`
+order by salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.98.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.98.query.sqlpp
new file mode 100644
index 0000000..a76883e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.98.query.sqlpp
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary,
+ first_value(salary) over(order by salary range between 1000 following and 3000 following exclude current row) as `first_value`,
+ lead(salary) over(order by salary) as `lead`,
+ nth_value(salary, 1) over(order by salary range between 1000 following and 3000 following exclude ties) as `nth_value`
+order by salary
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.99.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.99.query.sqlpp
new file mode 100644
index 0000000..95f828e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/pg_win.99.query.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Core window functions tests
+ * Expected Res : SUCCESS
+ */
+
+use test;
+
+from empsalary
+select salary,
+ last_value(salary) over(order by salary range between 1000 following and 3000 following exclude group) as `last_value`,
+ lag(salary) over(order by salary) as `lag`
+order by salary
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate-sql/count_dataset/count_dataset.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate-sql/count_dataset/count_dataset.1.adm
index a653416..486b421 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate-sql/count_dataset/count_dataset.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate-sql/count_dataset/count_dataset.1.adm
@@ -1,24 +1,24 @@
-distribute result [$$23]
+distribute result [$$24]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
- aggregate [$$23] <- [agg-sql-sum($$26)]
+ aggregate [$$24] <- [agg-sql-sum($$27)]
-- AGGREGATE |UNPARTITIONED|
- aggregate [$$26] <- [agg-sql-count(1)]
+ aggregate [$$27] <- [agg-sql-count(1)]
-- AGGREGATE |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$24(ASC) ] |PARTITIONED|
- project ([$$24])
+ -- SORT_MERGE_EXCHANGE [$$25(ASC) ] |PARTITIONED|
+ project ([$$25])
-- STREAM_PROJECT |PARTITIONED|
- select (and(ge($$22, 1), le($$22, 10)))
+ select (and(ge($$23, 1), le($$23, 10)))
-- STREAM_SELECT |PARTITIONED|
- project ([$$24, $$22])
+ project ([$$25, $$23])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$22] <- [$$Tweet.getField(1)]
+ assign [$$23] <- [$$Tweet.getField(1)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$24, $$Tweet] <- Twitter.Tweet
+ data-scan []<-[$$25, $$Tweet] <- Twitter.Tweet
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate/count_dataset/count_dataset.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate/count_dataset/count_dataset.1.adm
index b74e65f..42728fe 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate/count_dataset/count_dataset.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/aggregate/count_dataset/count_dataset.1.adm
@@ -1,24 +1,24 @@
-distribute result [$$23]
+distribute result [$$24]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
- aggregate [$$23] <- [agg-sum($$26)]
+ aggregate [$$24] <- [agg-sum($$27)]
-- AGGREGATE |UNPARTITIONED|
- aggregate [$$26] <- [agg-count(1)]
+ aggregate [$$27] <- [agg-count(1)]
-- AGGREGATE |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$24(ASC) ] |PARTITIONED|
- project ([$$24])
+ -- SORT_MERGE_EXCHANGE [$$25(ASC) ] |PARTITIONED|
+ project ([$$25])
-- STREAM_PROJECT |PARTITIONED|
- select (and(ge($$22, 1), le($$22, 10)))
+ select (and(ge($$23, 1), le($$23, 10)))
-- STREAM_SELECT |PARTITIONED|
- project ([$$24, $$22])
+ project ([$$25, $$23])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$22] <- [$$Tweet.getField(1)]
+ assign [$$23] <- [$$Tweet.getField(1)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$24, $$Tweet] <- Twitter.Tweet
+ data-scan []<-[$$25, $$Tweet] <- Twitter.Tweet
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access/explain_field_access.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access/explain_field_access.1.adm
index 4e079d0..f7790a0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access/explain_field_access.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access/explain_field_access.1.adm
@@ -1,46 +1,42 @@
-distribute result [$$40]
+distribute result [$$44]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$40])
+ project ([$$44])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$40] <- [{"deptId": $#1, "star_cost": $$43}]
+ assign [$$44] <- [{"deptId": $#1, "star_cost": $$47}]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- group by ([$#1 := $$48]) decor ([]) {
- aggregate [$$43] <- [agg-global-sql-sum($$47)]
+ group by ([$#1 := $$52]) decor ([]) {
+ aggregate [$$47] <- [agg-global-sql-sum($$51)]
-- AGGREGATE |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- SORT_GROUP_BY[$$48] |PARTITIONED|
+ -- SORT_GROUP_BY[$$52] |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$48] |PARTITIONED|
- group by ([$$48 := $$41]) decor ([]) {
- aggregate [$$47] <- [agg-local-sql-sum($$38)]
+ -- HASH_PARTITION_EXCHANGE [$$52] |PARTITIONED|
+ group by ([$$52 := $$45]) decor ([]) {
+ aggregate [$$51] <- [agg-local-sql-sum($$42)]
-- AGGREGATE |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- SORT_GROUP_BY[$$41] |PARTITIONED|
+ -- SORT_GROUP_BY[$$45] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$38, $$41])
+ project ([$$42, $$45])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$41] <- [substring($$45.getField("department_id"), 0)]
+ assign [$$45, $$42] <- [substring($$e.getField("dept").getField("department_id"), 0), $$e.getField("salary")]
-- ASSIGN |PARTITIONED|
- project ([$$38, $$45])
+ project ([$$e])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$38, $$45] <- [$$e.getField("salary"), $$e.getField("dept")]
- -- ASSIGN |PARTITIONED|
- project ([$$e])
- -- STREAM_PROJECT |PARTITIONED|
+ exchange
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$46, $$e] <- gby.Employee
+ -- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$42, $$e] <- gby.Employee
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
+ empty-tuple-source
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access_closed/explain_field_access_closed.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access_closed/explain_field_access_closed.1.adm
index 2477020..7bfd96b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access_closed/explain_field_access_closed.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/explain/explain_field_access_closed/explain_field_access_closed.1.adm
@@ -1,40 +1,40 @@
-distribute result [$$39]
+distribute result [$$43]
-- DISTRIBUTE_RESULT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$39])
+ project ([$$43])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$39] <- [{"deptId": $#1, "star_cost": $$42}]
+ assign [$$43] <- [{"deptId": $#1, "star_cost": $$46}]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- group by ([$#1 := $$46]) decor ([]) {
- aggregate [$$42] <- [agg-global-sql-sum($$45)]
+ group by ([$#1 := $$50]) decor ([]) {
+ aggregate [$$46] <- [agg-global-sql-sum($$49)]
-- AGGREGATE |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- SORT_GROUP_BY[$$46] |PARTITIONED|
+ -- SORT_GROUP_BY[$$50] |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$46] |PARTITIONED|
- group by ([$$46 := $$40]) decor ([]) {
- aggregate [$$45] <- [agg-local-sql-sum($$37)]
+ -- HASH_PARTITION_EXCHANGE [$$50] |PARTITIONED|
+ group by ([$$50 := $$44]) decor ([]) {
+ aggregate [$$49] <- [agg-local-sql-sum($$41)]
-- AGGREGATE |LOCAL|
nested tuple source
-- NESTED_TUPLE_SOURCE |LOCAL|
}
- -- SORT_GROUP_BY[$$40] |PARTITIONED|
+ -- SORT_GROUP_BY[$$44] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$37, $$40])
+ project ([$$41, $$44])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$40, $$37] <- [substring($$e.getField(1), 0), $$e.getField(2)]
+ assign [$$44, $$41] <- [substring($$e.getField(1), 0), $$e.getField(2)]
-- ASSIGN |PARTITIONED|
project ([$$e])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$41, $$e] <- gby.Employee
+ data-scan []<-[$$45, $$e] <- gby.Employee
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.3.adm
index 9c4866f..7a8668b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.3.adm
@@ -7,28 +7,28 @@
project ([$$c])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$15(ASC), $$16(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$16(ASC), $$17(ASC) ] |PARTITIONED|
limit 10
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$15, $$16, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$21, $$22, 2, $$21, $$22, TRUE, TRUE, TRUE) condition (and(lt($$c.getField(2), 150), lt($$c.getField(5), 10000))) limit 10
+ unnest-map [$$16, $$17, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$22, $$23, 2, $$22, $$23, TRUE, TRUE, TRUE) condition (and(lt($$c.getField(2), 150), lt($$c.getField(5), 10000))) limit 10
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$21) (ASC, $$22)
- -- STABLE_SORT [$$21(ASC), $$22(ASC)] |PARTITIONED|
+ order (ASC, $$22) (ASC, $$23)
+ -- STABLE_SORT [$$22(ASC), $$23(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$21, $$22])
+ project ([$$22, $$23])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$20, $$21, $$22] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$19, TRUE, FALSE, FALSE)
+ unnest-map [$$21, $$22, $$23] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$20, TRUE, FALSE, FALSE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$19] <- [150]
+ assign [$$20] <- [150]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.5.adm
index 7d9ef47..45e0602 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup-select/push-limit-to-primary-lookup-select.5.adm
@@ -1,40 +1,40 @@
-distribute result [$$17]
+distribute result [$$18]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
limit 5
-- STREAM_LIMIT |UNPARTITIONED|
- project ([$$17])
+ project ([$$18])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$19(ASC), $$20(ASC) ] |PARTITIONED|
- project ([$$19, $$20, $$17])
+ -- SORT_MERGE_EXCHANGE [$$20(ASC), $$21(ASC) ] |PARTITIONED|
+ project ([$$20, $$21, $$18])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$17] <- [{"shipdate": substring($$c.getField(10), 0, 4), "suppkey": gt($$18, 0)}]
+ assign [$$18] <- [{"shipdate": substring($$c.getField(10), 0, 4), "suppkey": gt($$19, 0)}]
-- ASSIGN |PARTITIONED|
limit 5
-- STREAM_LIMIT |PARTITIONED|
- assign [$$18] <- [$$c.getField(2)]
+ assign [$$19] <- [$$c.getField(2)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$19, $$20, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$24, $$25, 2, $$24, $$25, TRUE, TRUE, TRUE) condition (lt($$c.getField(2), 150)) limit 5
+ unnest-map [$$20, $$21, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$25, $$26, 2, $$25, $$26, TRUE, TRUE, TRUE) condition (lt($$c.getField(2), 150)) limit 5
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$24) (ASC, $$25)
- -- STABLE_SORT [$$24(ASC), $$25(ASC)] |PARTITIONED|
+ order (ASC, $$25) (ASC, $$26)
+ -- STABLE_SORT [$$25(ASC), $$26(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$24, $$25])
+ project ([$$25, $$26])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$23, $$24, $$25] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$22, TRUE, FALSE, FALSE)
+ unnest-map [$$24, $$25, $$26] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$23, TRUE, FALSE, FALSE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$22] <- [150]
+ assign [$$23] <- [150]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.3.adm
index 29357ae..e741aec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.3.adm
@@ -7,28 +7,28 @@
project ([$$c])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$12(ASC), $$13(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$13(ASC), $$14(ASC) ] |PARTITIONED|
limit 10
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$12, $$13, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$17, $$18, 2, $$17, $$18, TRUE, TRUE, TRUE) condition (lt($$c.getField(2), 150)) limit 10
+ unnest-map [$$13, $$14, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$18, $$19, 2, $$18, $$19, TRUE, TRUE, TRUE) condition (lt($$c.getField(2), 150)) limit 10
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$17) (ASC, $$18)
- -- STABLE_SORT [$$17(ASC), $$18(ASC)] |PARTITIONED|
+ order (ASC, $$18) (ASC, $$19)
+ -- STABLE_SORT [$$18(ASC), $$19(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$17, $$18])
+ project ([$$18, $$19])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$16, $$17, $$18] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$15, TRUE, FALSE, FALSE)
+ unnest-map [$$17, $$18, $$19] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$16, TRUE, FALSE, FALSE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$15] <- [150]
+ assign [$$16] <- [150]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.5.adm
index d070b2b..b64b9c5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-lookup/push-limit-to-primary-lookup.5.adm
@@ -7,28 +7,28 @@
project ([$$c])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$14(ASC), $$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$15(ASC), $$16(ASC) ] |PARTITIONED|
limit 10
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$14, $$15, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$19, $$20, 2, $$19, $$20, TRUE, TRUE, TRUE) condition (lt($$c.getField(2), 150)) limit 10
+ unnest-map [$$15, $$16, $$c] <- index-search("LineItem", 0, "test", "LineItem", FALSE, FALSE, 2, $$20, $$21, 2, $$20, $$21, TRUE, TRUE, TRUE) condition (lt($$c.getField(2), 150)) limit 10
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$19) (ASC, $$20)
- -- STABLE_SORT [$$19(ASC), $$20(ASC)] |PARTITIONED|
+ order (ASC, $$20) (ASC, $$21)
+ -- STABLE_SORT [$$20(ASC), $$21(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$19, $$20])
+ project ([$$20, $$21])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$18, $$19, $$20] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$17, TRUE, FALSE, FALSE)
+ unnest-map [$$19, $$20, $$21] <- index-search("idx_LineItem_suppkey", 0, "test", "LineItem", FALSE, FALSE, 0, 1, $$18, TRUE, FALSE, FALSE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$17] <- [150]
+ assign [$$18] <- [150]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.3.adm
index b60a0ee..82e42e8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.3.adm
@@ -7,12 +7,12 @@
project ([$$paper])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$12(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$13(ASC) ] |PARTITIONED|
limit 10
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$12, $$paper] <- test.DBLP1 condition (contains($$paper.getField(1), "kimL89")) limit 10
+ data-scan []<-[$$13, $$paper] <- test.DBLP1 condition (contains($$paper.getField(1), "kimL89")) limit 10
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.5.adm
index b83be67..9fd4ea8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.5.adm
@@ -1,4 +1,4 @@
-distribute result [$$31]
+distribute result [$$33]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
@@ -6,57 +6,57 @@
-- STREAM_LIMIT |UNPARTITIONED|
exchange
-- RANDOM_MERGE_EXCHANGE |PARTITIONED|
- project ([$$31])
+ project ([$$33])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$31] <- [{"dblpid": $$32}]
+ assign [$$33] <- [{"dblpid": $$34}]
-- ASSIGN |PARTITIONED|
limit 2
-- STREAM_LIMIT |PARTITIONED|
- project ([$$32])
+ project ([$$34])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- join (eq($$32, $$35))
- -- HYBRID_HASH_JOIN [$$32][$$35] |PARTITIONED|
+ join (eq($$34, $$37))
+ -- HYBRID_HASH_JOIN [$$34][$$37] |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$32] |PARTITIONED|
- project ([$$32])
+ -- HASH_PARTITION_EXCHANGE [$$34] |PARTITIONED|
+ project ([$$34])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$32] <- [$$d.getField(1)]
+ assign [$$34] <- [$$d.getField(1)]
-- ASSIGN |PARTITIONED|
project ([$$d])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$33, $$d] <- test.DBLP1
+ data-scan []<-[$$35, $$d] <- test.DBLP1
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
exchange
- -- HASH_PARTITION_EXCHANGE [$$35] |PARTITIONED|
- project ([$$35])
+ -- HASH_PARTITION_EXCHANGE [$$37] |PARTITIONED|
+ project ([$$37])
-- STREAM_PROJECT |UNPARTITIONED|
- assign [$$35] <- [get-item($$24, 0).getField(0).getField(1)]
+ assign [$$37] <- [get-item($$26, 0).getField(0).getField(1)]
-- ASSIGN |UNPARTITIONED|
- aggregate [$$24] <- [listify($$23)]
+ aggregate [$$26] <- [listify($$25)]
-- AGGREGATE |UNPARTITIONED|
limit 1
-- STREAM_LIMIT |UNPARTITIONED|
- project ([$$23])
+ project ([$$25])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$34(ASC) ] |PARTITIONED|
- project ([$$34, $$23])
+ -- SORT_MERGE_EXCHANGE [$$36(ASC) ] |PARTITIONED|
+ project ([$$36, $$25])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$23] <- [{"d": $$d}]
+ assign [$$25] <- [{"d": $$d}]
-- ASSIGN |PARTITIONED|
limit 1
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$34, $$d] <- test.DBLP1 condition (ends-with($$d.getField(1), "Blakeley95")) limit 1
+ data-scan []<-[$$36, $$d] <- test.DBLP1 condition (ends-with($$d.getField(1), "Blakeley95")) limit 1
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.6.adm
index 94608d0..8ffb399 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.6.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.6.adm
@@ -1,26 +1,26 @@
-distribute result [$$16]
+distribute result [$$17]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
limit 1
-- STREAM_LIMIT |UNPARTITIONED|
- project ([$$16])
+ project ([$$17])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$18(ASC) ] |PARTITIONED|
- project ([$$18, $$16])
+ -- SORT_MERGE_EXCHANGE [$$19(ASC) ] |PARTITIONED|
+ project ([$$19, $$17])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$16] <- [{"$1": substring($$17, 0, 21)}]
+ assign [$$17] <- [{"$1": substring($$18, 0, 21)}]
-- ASSIGN |PARTITIONED|
limit 1
-- STREAM_LIMIT |PARTITIONED|
- project ([$$18, $$17])
+ project ([$$19, $$18])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$17] <- [$$DBLP1.getField(1)]
+ assign [$$18] <- [$$DBLP1.getField(1)]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$18, $$DBLP1] <- test.DBLP1 condition (gt($$DBLP1.getField(1), "series")) limit 1
+ data-scan []<-[$$19, $$DBLP1] <- test.DBLP1 condition (gt($$DBLP1.getField(1), "series")) limit 1
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.8.adm
index 131b860..bc86e3a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.8.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan-select/push-limit-to-primary-scan-select.8.adm
@@ -1,26 +1,26 @@
-distribute result [$$19]
+distribute result [$$20]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
limit 2
-- STREAM_LIMIT |UNPARTITIONED|
- project ([$$19])
+ project ([$$20])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$22(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$23(ASC) ] |PARTITIONED|
limit 2
-- STREAM_LIMIT |PARTITIONED|
- project ([$$22, $$19])
+ project ([$$23, $$20])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$19] <- [$$23.getField("lang")]
+ assign [$$20] <- [$$24.getField("lang")]
-- ASSIGN |PARTITIONED|
- project ([$$22, $$23])
+ project ([$$23, $$24])
-- STREAM_PROJECT |PARTITIONED|
- assign [$$23] <- [$$t.getField("user")]
+ assign [$$24] <- [$$t.getField("user")]
-- ASSIGN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$22, $$t] <- test.TweetMessages condition (and(ge($$t.getField("user").getField("friends_count"), 0), le($$t.getField("user").getField("friends_count"), 150))) limit 2
+ data-scan []<-[$$23, $$t] <- test.TweetMessages condition (and(ge($$t.getField("user").getField("friends_count"), 0), le($$t.getField("user").getField("friends_count"), 150))) limit 2
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.3.adm
index daeeeb5..a810489 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.3.adm
@@ -7,12 +7,12 @@
project ([$$paper])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$10(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$11(ASC) ] |PARTITIONED|
limit 10
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$10, $$paper] <- test.DBLP1 limit 10
+ data-scan []<-[$$11, $$paper] <- test.DBLP1 limit 10
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.5.adm
index ee3e565..41880a5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.5.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/limit/push-limit-to-primary-scan/push-limit-to-primary-scan.5.adm
@@ -7,12 +7,12 @@
project ([$$paper])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$12(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$13(ASC) ] |PARTITIONED|
limit 10
-- STREAM_LIMIT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$12, $$paper] <- test.DBLP1 limit 10
+ data-scan []<-[$$13, $$paper] <- test.DBLP1 limit 10
-- DATASOURCE_SCAN |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/list/enforcing_item_type/enforcing_item_type.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/list/enforcing_item_type/enforcing_item_type.1.adm
index fbe0345..81de56f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/list/enforcing_item_type/enforcing_item_type.1.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/list/enforcing_item_type/enforcing_item_type.1.adm
@@ -1,12 +1,12 @@
-distribute result [$$18]
+distribute result [$$19]
-- DISTRIBUTE_RESULT |UNPARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |UNPARTITIONED|
- project ([$$18])
+ project ([$$19])
-- STREAM_PROJECT |UNPARTITIONED|
- assign [$$18] <- [{"id": get-item($$t, 0), "v": get-item($$t, 1)}]
+ assign [$$19] <- [{"id": get-item($$t, 0), "v": get-item($$t, 1)}]
-- ASSIGN |UNPARTITIONED|
unnest $$t <- scan-collection(ordered-list-constructor(ordered-list-constructor(29, cast({ f1: "a", f2: 3 }))))
-- UNNEST |UNPARTITIONED|
empty-tuple-source
- -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
\ No newline at end of file
+ -- EMPTY_TUPLE_SOURCE |UNPARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.13.adm
index 2a155f9..73492d27 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.13.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.13.adm
@@ -5,28 +5,28 @@
project ([$$l])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$14(ASC), $$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$15(ASC), $$16(ASC) ] |PARTITIONED|
select (eq($$l.getField(10), "1994-01-20"))
-- STREAM_SELECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$14, $$15, $$l] <- index-search("LineItem", 0, "tpch", "LineItem", FALSE, FALSE, 2, $$22, $$23, 2, $$22, $$23, TRUE, TRUE, TRUE)
+ unnest-map [$$15, $$16, $$l] <- index-search("LineItem", 0, "tpch", "LineItem", FALSE, FALSE, 2, $$23, $$24, 2, $$23, $$24, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$22) (ASC, $$23)
- -- STABLE_SORT [$$22(ASC), $$23(ASC)] |PARTITIONED|
+ order (ASC, $$23) (ASC, $$24)
+ -- STABLE_SORT [$$23(ASC), $$24(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$22, $$23])
+ project ([$$23, $$24])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$21, $$22, $$23] <- index-search("lineitem_shipdateIx", 0, "tpch", "LineItem", FALSE, FALSE, 1, $$19, 1, $$20, TRUE, TRUE, TRUE)
+ unnest-map [$$22, $$23, $$24] <- index-search("lineitem_shipdateIx", 0, "tpch", "LineItem", FALSE, FALSE, 1, $$20, 1, $$21, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$19, $$20] <- ["1994-01-20", "1994-01-20"]
+ assign [$$20, $$21] <- ["1994-01-20", "1994-01-20"]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.8.adm
index 2a155f9..73492d27 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.8.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/rebalance/single_dataset_with_index/single_dataset_with_index.8.adm
@@ -5,28 +5,28 @@
project ([$$l])
-- STREAM_PROJECT |PARTITIONED|
exchange
- -- SORT_MERGE_EXCHANGE [$$14(ASC), $$15(ASC) ] |PARTITIONED|
+ -- SORT_MERGE_EXCHANGE [$$15(ASC), $$16(ASC) ] |PARTITIONED|
select (eq($$l.getField(10), "1994-01-20"))
-- STREAM_SELECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$14, $$15, $$l] <- index-search("LineItem", 0, "tpch", "LineItem", FALSE, FALSE, 2, $$22, $$23, 2, $$22, $$23, TRUE, TRUE, TRUE)
+ unnest-map [$$15, $$16, $$l] <- index-search("LineItem", 0, "tpch", "LineItem", FALSE, FALSE, 2, $$23, $$24, 2, $$23, $$24, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- order (ASC, $$22) (ASC, $$23)
- -- STABLE_SORT [$$22(ASC), $$23(ASC)] |PARTITIONED|
+ order (ASC, $$23) (ASC, $$24)
+ -- STABLE_SORT [$$23(ASC), $$24(ASC)] |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$22, $$23])
+ project ([$$23, $$24])
-- STREAM_PROJECT |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- unnest-map [$$21, $$22, $$23] <- index-search("lineitem_shipdateIx", 0, "tpch", "LineItem", FALSE, FALSE, 1, $$19, 1, $$20, TRUE, TRUE, TRUE)
+ unnest-map [$$22, $$23, $$24] <- index-search("lineitem_shipdateIx", 0, "tpch", "LineItem", FALSE, FALSE, 1, $$20, 1, $$21, TRUE, TRUE, TRUE)
-- BTREE_SEARCH |PARTITIONED|
exchange
-- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- assign [$$19, $$20] <- ["1994-01-20", "1994-01-20"]
+ assign [$$20, $$21] <- ["1994-01-20", "1994-01-20"]
-- ASSIGN |PARTITIONED|
empty-tuple-source
-- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/misc_01/misc_01.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/misc_01/misc_01.6.adm
new file mode 100644
index 0000000..421034a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/misc_01/misc_01.6.adm
@@ -0,0 +1,4 @@
+{ "c1": 1, "sum": 4 }
+{ "c1": 2, "sum": 6 }
+{ "c1": 3, "sum": 4 }
+{ "c1": 4, "sum": 6 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.10.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.10.adm
new file mode 100644
index 0000000..a80b303
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.10.adm
@@ -0,0 +1,10 @@
+{ "percent_rank": 0.0, "ten": 0, "four": 0 }
+{ "percent_rank": 0.0, "ten": 0, "four": 0 }
+{ "percent_rank": 1.0, "ten": 4, "four": 0 }
+{ "percent_rank": 0.0, "ten": 1, "four": 1 }
+{ "percent_rank": 0.0, "ten": 1, "four": 1 }
+{ "percent_rank": 0.6667, "ten": 7, "four": 1 }
+{ "percent_rank": 1.0, "ten": 9, "four": 1 }
+{ "percent_rank": 0.0, "ten": 0, "four": 2 }
+{ "percent_rank": 0.0, "ten": 1, "four": 3 }
+{ "percent_rank": 1.0, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.100.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.100.adm
new file mode 100644
index 0000000..f52d836
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.100.adm
@@ -0,0 +1,10 @@
+{ "enroll_date": date("2006-10-01"), "salary": 5000, "first_value": 5000, "last_value": 5200 }
+{ "enroll_date": date("2006-10-01"), "salary": 6000, "first_value": 6000, "last_value": 5200 }
+{ "enroll_date": date("2006-12-23"), "salary": 3900, "first_value": 5000, "last_value": 3500 }
+{ "enroll_date": date("2007-08-01"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-01"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-08"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-15"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-12-10"), "salary": 3500, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4500, "first_value": 5000, "last_value": 4500 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.101.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.101.adm
new file mode 100644
index 0000000..374d759
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.101.adm
@@ -0,0 +1,10 @@
+{ "enroll_date": date("2006-10-01"), "salary": 5000, "first_value": 5000, "last_value": 5200 }
+{ "enroll_date": date("2006-10-01"), "salary": 6000, "first_value": 6000, "last_value": 5200 }
+{ "enroll_date": date("2006-12-23"), "salary": 3900, "first_value": 5000, "last_value": 3500 }
+{ "enroll_date": date("2007-08-01"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-01"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-08"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-15"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-12-10"), "salary": 3500, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4200, "first_value": 5000, "last_value": 4200 }
+{ "enroll_date": date("2008-01-01"), "salary": 4500, "first_value": 5000, "last_value": 4500 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.102.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.102.adm
new file mode 100644
index 0000000..c041317
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.102.adm
@@ -0,0 +1,10 @@
+{ "enroll_date": date("2006-10-01"), "salary": 5000, "first_value": 3900, "last_value": 5200 }
+{ "enroll_date": date("2006-10-01"), "salary": 6000, "first_value": 3900, "last_value": 5200 }
+{ "enroll_date": date("2006-12-23"), "salary": 3900, "first_value": 5000, "last_value": 3500 }
+{ "enroll_date": date("2007-08-01"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-01"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-08"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-15"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-12-10"), "salary": 3500, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4200, "first_value": 5000, "last_value": 3500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4500, "first_value": 5000, "last_value": 3500 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.103.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.103.adm
new file mode 100644
index 0000000..0713c9e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.103.adm
@@ -0,0 +1,10 @@
+{ "enroll_date": date("2006-10-01"), "salary": 5000, "first_value": 6000, "last_value": 5200 }
+{ "enroll_date": date("2006-10-01"), "salary": 6000, "first_value": 5000, "last_value": 5200 }
+{ "enroll_date": date("2006-12-23"), "salary": 3900, "first_value": 5000, "last_value": 3500 }
+{ "enroll_date": date("2007-08-01"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-01"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-08"), "salary": 4800, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-08-15"), "salary": 5200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2007-12-10"), "salary": 3500, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4200, "first_value": 5000, "last_value": 4500 }
+{ "enroll_date": date("2008-01-01"), "salary": 4500, "first_value": 5000, "last_value": 4200 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.104.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.104.adm
new file mode 100644
index 0000000..26f956b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.104.adm
@@ -0,0 +1,6 @@
+{ "x": null, "y": 42, "first_value": 42, "last_value": 42 }
+{ "x": 1, "y": 1, "first_value": 1, "last_value": 3 }
+{ "x": 2, "y": 2, "first_value": 1, "last_value": 4 }
+{ "x": 3, "y": 3, "first_value": 1, "last_value": 5 }
+{ "x": 4, "y": 4, "first_value": 2, "last_value": 5 }
+{ "x": 5, "y": 5, "first_value": 3, "last_value": 5 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.105.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.105.adm
new file mode 100644
index 0000000..4fba5a6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.105.adm
@@ -0,0 +1,6 @@
+{ "x": 5, "y": 5, "first_value": 5, "last_value": 3 }
+{ "x": 4, "y": 4, "first_value": 5, "last_value": 2 }
+{ "x": 3, "y": 3, "first_value": 5, "last_value": 1 }
+{ "x": 2, "y": 2, "first_value": 4, "last_value": 1 }
+{ "x": 1, "y": 1, "first_value": 3, "last_value": 1 }
+{ "x": null, "y": 42, "first_value": 42, "last_value": 42 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.106.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.106.adm
new file mode 100644
index 0000000..8214780
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.106.adm
@@ -0,0 +1,3 @@
+{ "x": 32764, "last_value": 32766 }
+{ "x": 32765, "last_value": 32766 }
+{ "x": 32766, "last_value": 32766 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.107.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.107.adm
new file mode 100644
index 0000000..ff8d4fb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.107.adm
@@ -0,0 +1,3 @@
+{ "x": -32764, "last_value": -32766 }
+{ "x": -32765, "last_value": -32766 }
+{ "x": -32766, "last_value": -32766 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.108.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.108.adm
new file mode 100644
index 0000000..eaacf51
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.108.adm
@@ -0,0 +1,3 @@
+{ "x": 2147483644, "last_value": 2147483646 }
+{ "x": 2147483645, "last_value": 2147483646 }
+{ "x": 2147483646, "last_value": 2147483646 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.109.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.109.adm
new file mode 100644
index 0000000..946b4fb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.109.adm
@@ -0,0 +1,3 @@
+{ "x": -2147483644, "last_value": -2147483646 }
+{ "x": -2147483645, "last_value": -2147483646 }
+{ "x": -2147483646, "last_value": -2147483646 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.11.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.11.adm
new file mode 100644
index 0000000..4e7d772
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.11.adm
@@ -0,0 +1,10 @@
+{ "ntile": 1, "ten": 0, "four": 0 }
+{ "ntile": 1, "ten": 0, "four": 0 }
+{ "ntile": 1, "ten": 0, "four": 2 }
+{ "ntile": 1, "ten": 1, "four": 1 }
+{ "ntile": 2, "ten": 1, "four": 1 }
+{ "ntile": 2, "ten": 1, "four": 3 }
+{ "ntile": 2, "ten": 3, "four": 3 }
+{ "ntile": 3, "ten": 4, "four": 0 }
+{ "ntile": 3, "ten": 7, "four": 1 }
+{ "ntile": 3, "ten": 9, "four": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.110.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.110.adm
new file mode 100644
index 0000000..d68b69c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.110.adm
@@ -0,0 +1,10 @@
+{ "id": 0, "f_float4": -INF, "first_value": 0, "last_value": 0 }
+{ "id": 1, "f_float4": -3.0, "first_value": 1, "last_value": 1 }
+{ "id": 2, "f_float4": -1.0, "first_value": 2, "last_value": 3 }
+{ "id": 3, "f_float4": 0.0, "first_value": 2, "last_value": 3 }
+{ "id": 4, "f_float4": 1.1, "first_value": 4, "last_value": 6 }
+{ "id": 5, "f_float4": 1.12, "first_value": 4, "last_value": 6 }
+{ "id": 6, "f_float4": 2.0, "first_value": 4, "last_value": 6 }
+{ "id": 7, "f_float4": 100.0, "first_value": 7, "last_value": 7 }
+{ "id": 8, "f_float4": INF, "first_value": 8, "last_value": 8 }
+{ "id": 9, "f_float4": NaN, "first_value": 9, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.111.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.111.adm
new file mode 100644
index 0000000..8186273
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.111.adm
@@ -0,0 +1,10 @@
+{ "id": 0, "f_float4": -INF, "first_value": 0, "last_value": 0 }
+{ "id": 1, "f_float4": -3.0, "first_value": 1, "last_value": 1 }
+{ "id": 2, "f_float4": -1.0, "first_value": 2, "last_value": 3 }
+{ "id": 3, "f_float4": 0.0, "first_value": 2, "last_value": 4 }
+{ "id": 4, "f_float4": 1.1, "first_value": 4, "last_value": 6 }
+{ "id": 5, "f_float4": 1.12, "first_value": 4, "last_value": 6 }
+{ "id": 6, "f_float4": 2.0, "first_value": 4, "last_value": 6 }
+{ "id": 7, "f_float4": 100.0, "first_value": 7, "last_value": 7 }
+{ "id": 8, "f_float4": INF, "first_value": 8, "last_value": 8 }
+{ "id": 9, "f_float4": NaN, "first_value": 9, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.112.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.112.adm
new file mode 100644
index 0000000..f65c24b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.112.adm
@@ -0,0 +1,10 @@
+{ "id": 0, "f_float8": -INF, "first_value": 0, "last_value": 0 }
+{ "id": 1, "f_float8": -3.0, "first_value": 1, "last_value": 1 }
+{ "id": 2, "f_float8": -1.0, "first_value": 2, "last_value": 3 }
+{ "id": 3, "f_float8": 0.0, "first_value": 2, "last_value": 4 }
+{ "id": 4, "f_float8": 1.1, "first_value": 4, "last_value": 6 }
+{ "id": 5, "f_float8": 1.12, "first_value": 4, "last_value": 6 }
+{ "id": 6, "f_float8": 2.0, "first_value": 4, "last_value": 6 }
+{ "id": 7, "f_float8": 100.0, "first_value": 7, "last_value": 7 }
+{ "id": 8, "f_float8": INF, "first_value": 8, "last_value": 8 }
+{ "id": 9, "f_float8": NaN, "first_value": 9, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.113.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.113.adm
new file mode 100644
index 0000000..3b7f6d7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.113.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f_timetz": time("11:00:00.000Z"), "first_value": 1, "last_value": 3 }
+{ "id": 2, "f_timetz": time("12:00:00.000Z"), "first_value": 1, "last_value": 4 }
+{ "id": 3, "f_timetz": time("13:00:00.000Z"), "first_value": 2, "last_value": 5 }
+{ "id": 4, "f_timetz": time("14:00:00.000Z"), "first_value": 3, "last_value": 6 }
+{ "id": 5, "f_timetz": time("15:00:00.000Z"), "first_value": 4, "last_value": 7 }
+{ "id": 6, "f_timetz": time("16:00:00.000Z"), "first_value": 5, "last_value": 8 }
+{ "id": 7, "f_timetz": time("17:00:00.000Z"), "first_value": 6, "last_value": 9 }
+{ "id": 8, "f_timetz": time("18:00:00.000Z"), "first_value": 7, "last_value": 10 }
+{ "id": 9, "f_timetz": time("19:00:00.000Z"), "first_value": 8, "last_value": 10 }
+{ "id": 10, "f_timetz": time("20:00:00.000Z"), "first_value": 9, "last_value": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.114.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.114.adm
new file mode 100644
index 0000000..b8fe968
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.114.adm
@@ -0,0 +1,10 @@
+{ "id": 10, "f_timetz": time("20:00:00.000Z"), "first_value": 10, "last_value": 8 }
+{ "id": 9, "f_timetz": time("19:00:00.000Z"), "first_value": 10, "last_value": 7 }
+{ "id": 8, "f_timetz": time("18:00:00.000Z"), "first_value": 9, "last_value": 6 }
+{ "id": 7, "f_timetz": time("17:00:00.000Z"), "first_value": 8, "last_value": 5 }
+{ "id": 6, "f_timetz": time("16:00:00.000Z"), "first_value": 7, "last_value": 4 }
+{ "id": 5, "f_timetz": time("15:00:00.000Z"), "first_value": 6, "last_value": 3 }
+{ "id": 4, "f_timetz": time("14:00:00.000Z"), "first_value": 5, "last_value": 2 }
+{ "id": 3, "f_timetz": time("13:00:00.000Z"), "first_value": 4, "last_value": 1 }
+{ "id": 2, "f_timetz": time("12:00:00.000Z"), "first_value": 3, "last_value": 1 }
+{ "id": 1, "f_timetz": time("11:00:00.000Z"), "first_value": 2, "last_value": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.115.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.115.adm
new file mode 100644
index 0000000..1e26eb8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.115.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f_timestamptz": datetime("2000-10-19T10:23:54.000Z"), "first_value": 1, "last_value": 2 }
+{ "id": 2, "f_timestamptz": datetime("2001-10-19T10:23:54.000Z"), "first_value": 1, "last_value": 3 }
+{ "id": 3, "f_timestamptz": datetime("2002-10-19T10:23:54.000Z"), "first_value": 2, "last_value": 4 }
+{ "id": 4, "f_timestamptz": datetime("2003-10-19T10:23:54.000Z"), "first_value": 3, "last_value": 5 }
+{ "id": 5, "f_timestamptz": datetime("2004-10-19T10:23:54.000Z"), "first_value": 4, "last_value": 6 }
+{ "id": 6, "f_timestamptz": datetime("2005-10-19T10:23:54.000Z"), "first_value": 5, "last_value": 7 }
+{ "id": 7, "f_timestamptz": datetime("2006-10-19T10:23:54.000Z"), "first_value": 6, "last_value": 8 }
+{ "id": 8, "f_timestamptz": datetime("2007-10-19T10:23:54.000Z"), "first_value": 7, "last_value": 9 }
+{ "id": 9, "f_timestamptz": datetime("2008-10-19T10:23:54.000Z"), "first_value": 8, "last_value": 10 }
+{ "id": 10, "f_timestamptz": datetime("2009-10-19T10:23:54.000Z"), "first_value": 9, "last_value": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.116.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.116.adm
new file mode 100644
index 0000000..ae6f718
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.116.adm
@@ -0,0 +1,10 @@
+{ "id": 10, "f_timestamptz": datetime("2009-10-19T10:23:54.000Z"), "first_value": 10, "last_value": 9 }
+{ "id": 9, "f_timestamptz": datetime("2008-10-19T10:23:54.000Z"), "first_value": 10, "last_value": 8 }
+{ "id": 8, "f_timestamptz": datetime("2007-10-19T10:23:54.000Z"), "first_value": 9, "last_value": 7 }
+{ "id": 7, "f_timestamptz": datetime("2006-10-19T10:23:54.000Z"), "first_value": 8, "last_value": 6 }
+{ "id": 6, "f_timestamptz": datetime("2005-10-19T10:23:54.000Z"), "first_value": 7, "last_value": 5 }
+{ "id": 5, "f_timestamptz": datetime("2004-10-19T10:23:54.000Z"), "first_value": 6, "last_value": 4 }
+{ "id": 4, "f_timestamptz": datetime("2003-10-19T10:23:54.000Z"), "first_value": 5, "last_value": 3 }
+{ "id": 3, "f_timestamptz": datetime("2002-10-19T10:23:54.000Z"), "first_value": 4, "last_value": 2 }
+{ "id": 2, "f_timestamptz": datetime("2001-10-19T10:23:54.000Z"), "first_value": 3, "last_value": 1 }
+{ "id": 1, "f_timestamptz": datetime("2000-10-19T10:23:54.000Z"), "first_value": 2, "last_value": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.117.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.117.adm
new file mode 100644
index 0000000..d7680f3
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.117.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 0, "avg": 0.0 }
+{ "four": 0, "ten": 2, "sum": 0, "avg": 2.0 }
+{ "four": 0, "ten": 4, "sum": 0, "avg": 4.0 }
+{ "four": 0, "ten": 6, "sum": 0, "avg": 6.0 }
+{ "four": 0, "ten": 8, "sum": 0, "avg": 8.0 }
+{ "four": 1, "ten": 1, "sum": 2500, "avg": 1.0 }
+{ "four": 1, "ten": 3, "sum": 2500, "avg": 3.0 }
+{ "four": 1, "ten": 5, "sum": 2500, "avg": 5.0 }
+{ "four": 1, "ten": 7, "sum": 2500, "avg": 7.0 }
+{ "four": 1, "ten": 9, "sum": 2500, "avg": 9.0 }
+{ "four": 2, "ten": 0, "sum": 5000, "avg": 0.0 }
+{ "four": 2, "ten": 2, "sum": 5000, "avg": 2.0 }
+{ "four": 2, "ten": 4, "sum": 5000, "avg": 4.0 }
+{ "four": 2, "ten": 6, "sum": 5000, "avg": 6.0 }
+{ "four": 2, "ten": 8, "sum": 5000, "avg": 8.0 }
+{ "four": 3, "ten": 1, "sum": 7500, "avg": 1.0 }
+{ "four": 3, "ten": 3, "sum": 7500, "avg": 3.0 }
+{ "four": 3, "ten": 5, "sum": 7500, "avg": 5.0 }
+{ "four": 3, "ten": 7, "sum": 7500, "avg": 7.0 }
+{ "four": 3, "ten": 9, "sum": 7500, "avg": 9.0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.118.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.118.adm
new file mode 100644
index 0000000..642ecf2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.118.adm
@@ -0,0 +1,10 @@
+{ "ten": 0, "two": 0, "gsum": 45000, "wsum": 45000 }
+{ "ten": 2, "two": 0, "gsum": 47000, "wsum": 92000 }
+{ "ten": 4, "two": 0, "gsum": 49000, "wsum": 141000 }
+{ "ten": 6, "two": 0, "gsum": 51000, "wsum": 192000 }
+{ "ten": 8, "two": 0, "gsum": 53000, "wsum": 245000 }
+{ "ten": 1, "two": 1, "gsum": 46000, "wsum": 46000 }
+{ "ten": 3, "two": 1, "gsum": 48000, "wsum": 94000 }
+{ "ten": 5, "two": 1, "gsum": 50000, "wsum": 144000 }
+{ "ten": 7, "two": 1, "gsum": 52000, "wsum": 196000 }
+{ "ten": 9, "two": 1, "gsum": 54000, "wsum": 250000 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.119.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.119.adm
new file mode 100644
index 0000000..b279aa9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.119.adm
@@ -0,0 +1,3 @@
+{ "sum": 14600, "row_number": 3, "sum_sum": 14600 }
+{ "sum": 7400, "row_number": 2, "sum_sum": 22000 }
+{ "sum": 25100, "row_number": 1, "sum_sum": 47100 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.12.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.12.adm
new file mode 100644
index 0000000..f88fb69
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.12.adm
@@ -0,0 +1,2 @@
+{ "ntile": null, "ten": 0, "four": 0 }
+{ "ntile": null, "ten": 0, "four": 0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.13.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.13.adm
new file mode 100644
index 0000000..92efd54
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.13.adm
@@ -0,0 +1,6 @@
+{ "count": 4, "four": 1 }
+{ "count": 4, "four": 1 }
+{ "count": 4, "four": 1 }
+{ "count": 4, "four": 1 }
+{ "count": 2, "four": 3 }
+{ "count": 2, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.14.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.14.adm
new file mode 100644
index 0000000..2b5481b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.14.adm
@@ -0,0 +1,10 @@
+{ "cntsum": 22 }
+{ "cntsum": 22 }
+{ "cntsum": 24 }
+{ "cntsum": 24 }
+{ "cntsum": 51 }
+{ "cntsum": 82 }
+{ "cntsum": 87 }
+{ "cntsum": 92 }
+{ "cntsum": 92 }
+{ "cntsum": 136 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.15.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.15.adm
new file mode 100644
index 0000000..f30fb49
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.15.adm
@@ -0,0 +1,10 @@
+{ "avg": 0.0 }
+{ "avg": 0.0 }
+{ "avg": 0.0 }
+{ "avg": 1.0 }
+{ "avg": 1.0 }
+{ "avg": 1.0 }
+{ "avg": 1.0 }
+{ "avg": 2.0 }
+{ "avg": 3.0 }
+{ "avg": 3.0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.16.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.16.adm
new file mode 100644
index 0000000..bacb60c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.16.adm
@@ -0,0 +1 @@
+{ "cnt": 0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.17.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.17.adm
new file mode 100644
index 0000000..95536c1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.17.adm
@@ -0,0 +1,10 @@
+{ "empno": 1, "depname": "sales", "salary": 5000, "bonus": 1000, "depadj": 200, "min": 1000, "max": 200 }
+{ "empno": 2, "depname": "personnel", "salary": 3900, "bonus": 1000, "depadj": 200, "min": 1000, "max": 200 }
+{ "empno": 3, "depname": "sales", "salary": 4800, "bonus": 500, "depadj": null, "min": 500, "max": 200 }
+{ "empno": 4, "depname": "sales", "salary": 4800, "bonus": 500, "depadj": null, "min": 500, "max": 200 }
+{ "empno": 5, "depname": "personnel", "salary": 3500, "bonus": 500, "depadj": null, "min": 500, "max": 200 }
+{ "empno": 7, "depname": "develop", "salary": 4200, "bonus": null, "depadj": null, "min": 500, "max": 200 }
+{ "empno": 8, "depname": "develop", "salary": 6000, "bonus": 1000, "depadj": 200, "min": 500, "max": 200 }
+{ "empno": 9, "depname": "develop", "salary": 4500, "bonus": null, "depadj": null, "min": 500, "max": 200 }
+{ "empno": 10, "depname": "develop", "salary": 5200, "bonus": 500, "depadj": 200, "min": 500, "max": 200 }
+{ "empno": 11, "depname": "develop", "salary": 5200, "bonus": 500, "depadj": 200, "min": 500, "max": 200 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.18.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.18.adm
new file mode 100644
index 0000000..fc832de
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.18.adm
@@ -0,0 +1,10 @@
+{ "ten": 0, "res": 9976146, "rank": 4 }
+{ "ten": 1, "res": 10114187, "rank": 9 }
+{ "ten": 2, "res": 10059554, "rank": 8 }
+{ "ten": 3, "res": 9878541, "rank": 1 }
+{ "ten": 4, "res": 9881005, "rank": 2 }
+{ "ten": 5, "res": 9981670, "rank": 5 }
+{ "ten": 6, "res": 9947099, "rank": 3 }
+{ "ten": 7, "res": 10120309, "rank": 10 }
+{ "ten": 8, "res": 9991305, "rank": 6 }
+{ "ten": 9, "res": 10040184, "rank": 7 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.19.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.19.adm
new file mode 100644
index 0000000..28eff74
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.19.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 0, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 0, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 0, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 1, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 1, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 1, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 1, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 1, "ten": 9, "sum": 25, "last_value": 9 }
+{ "four": 2, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 2, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 2, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 2, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 3, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 3, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 3, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 3, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 3, "ten": 9, "sum": 25, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.20.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.20.adm
new file mode 100644
index 0000000..28eff74
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.20.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 0, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 0, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 0, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 1, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 1, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 1, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 1, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 1, "ten": 9, "sum": 25, "last_value": 9 }
+{ "four": 2, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 2, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 2, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 2, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 3, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 3, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 3, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 3, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 3, "ten": 9, "sum": 25, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.21.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.21.adm
new file mode 100644
index 0000000..97f0a4f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.21.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 2, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 4, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 6, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 1, "ten": 1, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 3, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 5, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 7, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 9, "sum": 25, "last_value": 9 }
+{ "four": 2, "ten": 0, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 2, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 4, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 6, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 3, "ten": 1, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 3, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 5, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 7, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 9, "sum": 25, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.22.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.22.adm
new file mode 100644
index 0000000..7709a85
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.22.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 0, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 0, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 1, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 1, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 2, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 2, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 3, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 3, "two": 2, "sum": 4, "last_value": 2 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.23.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.23.adm
new file mode 100644
index 0000000..25038e6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.23.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 0, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 0, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 1, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 1, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 2, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 2, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 3, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 3, "two": 2, "sum": 4, "last_value": 2 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.24.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.24.adm
new file mode 100644
index 0000000..e6f27b1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.24.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 45 }
+{ "unique1": 4, "four": 0, "sum": 45 }
+{ "unique1": 8, "four": 0, "sum": 45 }
+{ "unique1": 1, "four": 1, "sum": 33 }
+{ "unique1": 5, "four": 1, "sum": 33 }
+{ "unique1": 9, "four": 1, "sum": 33 }
+{ "unique1": 2, "four": 2, "sum": 18 }
+{ "unique1": 6, "four": 2, "sum": 18 }
+{ "unique1": 3, "four": 3, "sum": 10 }
+{ "unique1": 7, "four": 3, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.25.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.25.adm
new file mode 100644
index 0000000..a3634c5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.25.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": 45 }
+{ "unique1": 2, "four": 2, "sum": 41 }
+{ "unique1": 1, "four": 1, "sum": 39 }
+{ "unique1": 6, "four": 2, "sum": 38 }
+{ "unique1": 9, "four": 1, "sum": 32 }
+{ "unique1": 8, "four": 0, "sum": 23 }
+{ "unique1": 5, "four": 1, "sum": 15 }
+{ "unique1": 3, "four": 3, "sum": 10 }
+{ "unique1": 7, "four": 3, "sum": 7 }
+{ "unique1": 0, "four": 0, "sum": 0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.26.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.26.adm
new file mode 100644
index 0000000..329ea42
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.26.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": 7 }
+{ "unique1": 2, "four": 2, "sum": 13 }
+{ "unique1": 1, "four": 1, "sum": 22 }
+{ "unique1": 6, "four": 2, "sum": 26 }
+{ "unique1": 9, "four": 1, "sum": 29 }
+{ "unique1": 8, "four": 0, "sum": 31 }
+{ "unique1": 5, "four": 1, "sum": 32 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 15 }
+{ "unique1": 0, "four": 0, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.27.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.27.adm
new file mode 100644
index 0000000..329ea42
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.27.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": 7 }
+{ "unique1": 2, "four": 2, "sum": 13 }
+{ "unique1": 1, "four": 1, "sum": 22 }
+{ "unique1": 6, "four": 2, "sum": 26 }
+{ "unique1": 9, "four": 1, "sum": 29 }
+{ "unique1": 8, "four": 0, "sum": 31 }
+{ "unique1": 5, "four": 1, "sum": 32 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 15 }
+{ "unique1": 0, "four": 0, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.28.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.28.adm
new file mode 100644
index 0000000..5216945
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.28.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": 3 }
+{ "unique1": 2, "four": 2, "sum": 11 }
+{ "unique1": 1, "four": 1, "sum": 21 }
+{ "unique1": 6, "four": 2, "sum": 20 }
+{ "unique1": 9, "four": 1, "sum": 20 }
+{ "unique1": 8, "four": 0, "sum": 23 }
+{ "unique1": 5, "four": 1, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 20 }
+{ "unique1": 7, "four": 3, "sum": 8 }
+{ "unique1": 0, "four": 0, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.29.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.29.adm
new file mode 100644
index 0000000..4145f34
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.29.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 2, "four": 2, "sum": 4 }
+{ "unique1": 1, "four": 1, "sum": 6 }
+{ "unique1": 6, "four": 2, "sum": 3 }
+{ "unique1": 9, "four": 1, "sum": 7 }
+{ "unique1": 8, "four": 0, "sum": 15 }
+{ "unique1": 5, "four": 1, "sum": 17 }
+{ "unique1": 3, "four": 3, "sum": 13 }
+{ "unique1": 7, "four": 3, "sum": 8 }
+{ "unique1": 0, "four": 0, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.3.adm
new file mode 100644
index 0000000..cb628c8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.3.adm
@@ -0,0 +1,10 @@
+{ "depname": "develop", "empno": 7, "salary": 4200, "sum": 25100 }
+{ "depname": "develop", "empno": 9, "salary": 4500, "sum": 25100 }
+{ "depname": "develop", "empno": 10, "salary": 5200, "sum": 25100 }
+{ "depname": "develop", "empno": 11, "salary": 5200, "sum": 25100 }
+{ "depname": "develop", "empno": 8, "salary": 6000, "sum": 25100 }
+{ "depname": "personnel", "empno": 5, "salary": 3500, "sum": 7400 }
+{ "depname": "personnel", "empno": 2, "salary": 3900, "sum": 7400 }
+{ "depname": "sales", "empno": 3, "salary": 4800, "sum": 14600 }
+{ "depname": "sales", "empno": 4, "salary": 4800, "sum": 14600 }
+{ "depname": "sales", "empno": 1, "salary": 5000, "sum": 14600 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.30.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.30.adm
new file mode 100644
index 0000000..ff88d0c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.30.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": 9 }
+{ "unique1": 2, "four": 2, "sum": 16 }
+{ "unique1": 1, "four": 1, "sum": 23 }
+{ "unique1": 6, "four": 2, "sum": 22 }
+{ "unique1": 9, "four": 1, "sum": 16 }
+{ "unique1": 8, "four": 0, "sum": 15 }
+{ "unique1": 5, "four": 1, "sum": 10 }
+{ "unique1": 3, "four": 3, "sum": 7 }
+{ "unique1": 7, "four": 3, "sum": 0 }
+{ "unique1": 0, "four": 0, "sum": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.31.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.31.adm
new file mode 100644
index 0000000..2827389
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.31.adm
@@ -0,0 +1,10 @@
+{ "unique1": 4, "four": 0, "sum": 6 }
+{ "unique1": 2, "four": 2, "sum": 7 }
+{ "unique1": 1, "four": 1, "sum": 13 }
+{ "unique1": 6, "four": 2, "sum": 22 }
+{ "unique1": 9, "four": 1, "sum": 30 }
+{ "unique1": 8, "four": 0, "sum": 35 }
+{ "unique1": 5, "four": 1, "sum": 38 }
+{ "unique1": 3, "four": 3, "sum": 45 }
+{ "unique1": 7, "four": 3, "sum": 45 }
+{ "unique1": 0, "four": 0, "sum": 45 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.32.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.32.adm
new file mode 100644
index 0000000..406183a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.32.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 12 }
+{ "unique1": 4, "four": 0, "sum": 8 }
+{ "unique1": 8, "four": 0, "sum": 4 }
+{ "unique1": 1, "four": 1, "sum": 26 }
+{ "unique1": 5, "four": 1, "sum": 22 }
+{ "unique1": 9, "four": 1, "sum": 18 }
+{ "unique1": 2, "four": 2, "sum": 33 }
+{ "unique1": 6, "four": 2, "sum": 29 }
+{ "unique1": 3, "four": 3, "sum": 42 }
+{ "unique1": 7, "four": 3, "sum": 38 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.33.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.33.adm
new file mode 100644
index 0000000..5272039
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.33.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 35 }
+{ "unique1": 7, "four": 3, "sum": 35 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.34.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.34.adm
new file mode 100644
index 0000000..b5b21a6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.34.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 0 }
+{ "unique1": 4, "four": 0, "sum": 4 }
+{ "unique1": 8, "four": 0, "sum": 8 }
+{ "unique1": 1, "four": 1, "sum": 13 }
+{ "unique1": 5, "four": 1, "sum": 17 }
+{ "unique1": 9, "four": 1, "sum": 21 }
+{ "unique1": 2, "four": 2, "sum": 29 }
+{ "unique1": 6, "four": 2, "sum": 33 }
+{ "unique1": 3, "four": 3, "sum": 38 }
+{ "unique1": 7, "four": 3, "sum": 42 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.35.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.35.adm
new file mode 100644
index 0000000..73e6945
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.35.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "sum": 0 }
+{ "unique1": 1, "sum": 1 }
+{ "unique1": 2, "sum": 3 }
+{ "unique1": 3, "sum": 5 }
+{ "unique1": 4, "sum": 7 }
+{ "unique1": 5, "sum": 9 }
+{ "unique1": 6, "sum": 11 }
+{ "unique1": 7, "sum": 13 }
+{ "unique1": 8, "sum": 15 }
+{ "unique1": 9, "sum": 17 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.36.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.36.adm
new file mode 100644
index 0000000..54df6d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.36.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.37.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.37.adm
new file mode 100644
index 0000000..8adf584
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.37.adm
@@ -0,0 +1,10 @@
+{ "unique1": 3, "four": 3, "sum": null }
+{ "unique1": 7, "four": 3, "sum": null }
+{ "unique1": 2, "four": 2, "sum": 10 }
+{ "unique1": 6, "four": 2, "sum": 10 }
+{ "unique1": 1, "four": 1, "sum": 18 }
+{ "unique1": 5, "four": 1, "sum": 18 }
+{ "unique1": 9, "four": 1, "sum": 18 }
+{ "unique1": 0, "four": 0, "sum": 23 }
+{ "unique1": 4, "four": 0, "sum": 23 }
+{ "unique1": 8, "four": 0, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.38.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.38.adm
new file mode 100644
index 0000000..54df6d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.38.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.39.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.39.adm
new file mode 100644
index 0000000..54df6d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.39.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.4.adm
new file mode 100644
index 0000000..c669c97
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.4.adm
@@ -0,0 +1,10 @@
+{ "depname": "develop", "empno": 7, "salary": 4200, "rank": 1 }
+{ "depname": "develop", "empno": 9, "salary": 4500, "rank": 2 }
+{ "depname": "develop", "empno": 10, "salary": 5200, "rank": 3 }
+{ "depname": "develop", "empno": 11, "salary": 5200, "rank": 3 }
+{ "depname": "develop", "empno": 8, "salary": 6000, "rank": 5 }
+{ "depname": "personnel", "empno": 5, "salary": 3500, "rank": 1 }
+{ "depname": "personnel", "empno": 2, "salary": 3900, "rank": 2 }
+{ "depname": "sales", "empno": 3, "salary": 4800, "rank": 1 }
+{ "depname": "sales", "empno": 4, "salary": 4800, "rank": 1 }
+{ "depname": "sales", "empno": 1, "salary": 5000, "rank": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.40.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.40.adm
new file mode 100644
index 0000000..54df6d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.40.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.41.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.41.adm
new file mode 100644
index 0000000..54df6d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.41.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.42.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.42.adm
new file mode 100644
index 0000000..283d875
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.42.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 33 }
+{ "unique1": 4, "four": 0, "sum": 37 }
+{ "unique1": 8, "four": 0, "sum": 41 }
+{ "unique1": 1, "four": 1, "sum": 31 }
+{ "unique1": 5, "four": 1, "sum": 35 }
+{ "unique1": 9, "four": 1, "sum": 39 }
+{ "unique1": 2, "four": 2, "sum": 39 }
+{ "unique1": 6, "four": 2, "sum": 43 }
+{ "unique1": 3, "four": 3, "sum": 26 }
+{ "unique1": 7, "four": 3, "sum": 30 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.43.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.43.adm
new file mode 100644
index 0000000..9c1c083
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.43.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 33 }
+{ "unique1": 4, "four": 0, "sum": 33 }
+{ "unique1": 8, "four": 0, "sum": 33 }
+{ "unique1": 1, "four": 1, "sum": 30 }
+{ "unique1": 5, "four": 1, "sum": 30 }
+{ "unique1": 9, "four": 1, "sum": 30 }
+{ "unique1": 2, "four": 2, "sum": 37 }
+{ "unique1": 6, "four": 2, "sum": 37 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.44.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.44.adm
new file mode 100644
index 0000000..5f09047
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.44.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 4 }
+{ "unique1": 4, "four": 0, "sum": 12 }
+{ "unique1": 8, "four": 0, "sum": 12 }
+{ "unique1": 1, "four": 1, "sum": 6 }
+{ "unique1": 5, "four": 1, "sum": 15 }
+{ "unique1": 9, "four": 1, "sum": 14 }
+{ "unique1": 2, "four": 2, "sum": 8 }
+{ "unique1": 6, "four": 2, "sum": 8 }
+{ "unique1": 3, "four": 3, "sum": 10 }
+{ "unique1": 7, "four": 3, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.45.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.45.adm
new file mode 100644
index 0000000..ea14976
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.45.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 4 }
+{ "unique1": 4, "four": 0, "sum": 8 }
+{ "unique1": 8, "four": 0, "sum": 4 }
+{ "unique1": 1, "four": 1, "sum": 5 }
+{ "unique1": 5, "four": 1, "sum": 10 }
+{ "unique1": 9, "four": 1, "sum": 5 }
+{ "unique1": 2, "four": 2, "sum": 6 }
+{ "unique1": 6, "four": 2, "sum": 2 }
+{ "unique1": 3, "four": 3, "sum": 7 }
+{ "unique1": 7, "four": 3, "sum": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.46.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.46.adm
new file mode 100644
index 0000000..f1ccc39
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.46.adm
@@ -0,0 +1,10 @@
+{ "salary": 5000, "enroll_date": date("2006-10-01"), "sum": 34900 }
+{ "salary": 6000, "enroll_date": date("2006-10-01"), "sum": 34900 }
+{ "salary": 3900, "enroll_date": date("2006-12-23"), "sum": 38400 }
+{ "salary": 4800, "enroll_date": date("2007-08-01"), "sum": 47100 }
+{ "salary": 5200, "enroll_date": date("2007-08-01"), "sum": 47100 }
+{ "salary": 4800, "enroll_date": date("2007-08-08"), "sum": 47100 }
+{ "salary": 5200, "enroll_date": date("2007-08-15"), "sum": 47100 }
+{ "salary": 3500, "enroll_date": date("2007-12-10"), "sum": 36100 }
+{ "salary": 4200, "enroll_date": date("2008-01-01"), "sum": 32200 }
+{ "salary": 4500, "enroll_date": date("2008-01-01"), "sum": 32200 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.47.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.47.adm
new file mode 100644
index 0000000..f975cd4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.47.adm
@@ -0,0 +1,10 @@
+{ "salary": 4200, "enroll_date": date("2008-01-01"), "sum": 32200 }
+{ "salary": 4500, "enroll_date": date("2008-01-01"), "sum": 32200 }
+{ "salary": 3500, "enroll_date": date("2007-12-10"), "sum": 36100 }
+{ "salary": 5200, "enroll_date": date("2007-08-15"), "sum": 47100 }
+{ "salary": 4800, "enroll_date": date("2007-08-08"), "sum": 47100 }
+{ "salary": 4800, "enroll_date": date("2007-08-01"), "sum": 47100 }
+{ "salary": 5200, "enroll_date": date("2007-08-01"), "sum": 47100 }
+{ "salary": 3900, "enroll_date": date("2006-12-23"), "sum": 38400 }
+{ "salary": 5000, "enroll_date": date("2006-10-01"), "sum": 34900 }
+{ "salary": 6000, "enroll_date": date("2006-10-01"), "sum": 34900 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.48.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.48.adm
new file mode 100644
index 0000000..54fd950
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.48.adm
@@ -0,0 +1,10 @@
+{ "salary": 5000, "enroll_date": date("2006-10-01"), "sum": null }
+{ "salary": 6000, "enroll_date": date("2006-10-01"), "sum": null }
+{ "salary": 3900, "enroll_date": date("2006-12-23"), "sum": null }
+{ "salary": 4800, "enroll_date": date("2007-08-01"), "sum": null }
+{ "salary": 5200, "enroll_date": date("2007-08-01"), "sum": null }
+{ "salary": 4800, "enroll_date": date("2007-08-08"), "sum": null }
+{ "salary": 5200, "enroll_date": date("2007-08-15"), "sum": null }
+{ "salary": 3500, "enroll_date": date("2007-12-10"), "sum": null }
+{ "salary": 4200, "enroll_date": date("2008-01-01"), "sum": null }
+{ "salary": 4500, "enroll_date": date("2008-01-01"), "sum": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.49.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.49.adm
new file mode 100644
index 0000000..f7fd8c9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.49.adm
@@ -0,0 +1,10 @@
+{ "salary": 5000, "enroll_date": date("2006-10-01"), "sum": 29900 }
+{ "salary": 6000, "enroll_date": date("2006-10-01"), "sum": 28900 }
+{ "salary": 3900, "enroll_date": date("2006-12-23"), "sum": 34500 }
+{ "salary": 4800, "enroll_date": date("2007-08-01"), "sum": 42300 }
+{ "salary": 5200, "enroll_date": date("2007-08-01"), "sum": 41900 }
+{ "salary": 4800, "enroll_date": date("2007-08-08"), "sum": 42300 }
+{ "salary": 5200, "enroll_date": date("2007-08-15"), "sum": 41900 }
+{ "salary": 3500, "enroll_date": date("2007-12-10"), "sum": 32600 }
+{ "salary": 4200, "enroll_date": date("2008-01-01"), "sum": 28000 }
+{ "salary": 4500, "enroll_date": date("2008-01-01"), "sum": 27700 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.5.adm
new file mode 100644
index 0000000..b6241f5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.5.adm
@@ -0,0 +1,10 @@
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
+{ "count": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.50.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.50.adm
new file mode 100644
index 0000000..f6a764f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.50.adm
@@ -0,0 +1,10 @@
+{ "salary": 5000, "enroll_date": date("2006-10-01"), "sum": 23900 }
+{ "salary": 6000, "enroll_date": date("2006-10-01"), "sum": 23900 }
+{ "salary": 3900, "enroll_date": date("2006-12-23"), "sum": 34500 }
+{ "salary": 4800, "enroll_date": date("2007-08-01"), "sum": 37100 }
+{ "salary": 5200, "enroll_date": date("2007-08-01"), "sum": 37100 }
+{ "salary": 4800, "enroll_date": date("2007-08-08"), "sum": 42300 }
+{ "salary": 5200, "enroll_date": date("2007-08-15"), "sum": 41900 }
+{ "salary": 3500, "enroll_date": date("2007-12-10"), "sum": 32600 }
+{ "salary": 4200, "enroll_date": date("2008-01-01"), "sum": 23500 }
+{ "salary": 4500, "enroll_date": date("2008-01-01"), "sum": 23500 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.51.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.51.adm
new file mode 100644
index 0000000..cf8a266
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.51.adm
@@ -0,0 +1,10 @@
+{ "salary": 5000, "enroll_date": date("2006-10-01"), "sum": 28900 }
+{ "salary": 6000, "enroll_date": date("2006-10-01"), "sum": 29900 }
+{ "salary": 3900, "enroll_date": date("2006-12-23"), "sum": 38400 }
+{ "salary": 4800, "enroll_date": date("2007-08-01"), "sum": 41900 }
+{ "salary": 5200, "enroll_date": date("2007-08-01"), "sum": 42300 }
+{ "salary": 4800, "enroll_date": date("2007-08-08"), "sum": 47100 }
+{ "salary": 5200, "enroll_date": date("2007-08-15"), "sum": 47100 }
+{ "salary": 3500, "enroll_date": date("2007-12-10"), "sum": 36100 }
+{ "salary": 4200, "enroll_date": date("2008-01-01"), "sum": 27700 }
+{ "salary": 4500, "enroll_date": date("2008-01-01"), "sum": 28000 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.52.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.52.adm
new file mode 100644
index 0000000..bdcd581
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.52.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 12 }
+{ "unique1": 4, "four": 0, "sum": 12 }
+{ "unique1": 8, "four": 0, "sum": 12 }
+{ "unique1": 1, "four": 1, "sum": 27 }
+{ "unique1": 5, "four": 1, "sum": 27 }
+{ "unique1": 9, "four": 1, "sum": 27 }
+{ "unique1": 2, "four": 2, "sum": 35 }
+{ "unique1": 6, "four": 2, "sum": 35 }
+{ "unique1": 3, "four": 3, "sum": 45 }
+{ "unique1": 7, "four": 3, "sum": 45 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.53.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.53.adm
new file mode 100644
index 0000000..5feecca
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.53.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 45 }
+{ "unique1": 4, "four": 0, "sum": 45 }
+{ "unique1": 8, "four": 0, "sum": 45 }
+{ "unique1": 1, "four": 1, "sum": 45 }
+{ "unique1": 5, "four": 1, "sum": 45 }
+{ "unique1": 9, "four": 1, "sum": 45 }
+{ "unique1": 2, "four": 2, "sum": 45 }
+{ "unique1": 6, "four": 2, "sum": 45 }
+{ "unique1": 3, "four": 3, "sum": 45 }
+{ "unique1": 7, "four": 3, "sum": 45 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.54.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.54.adm
new file mode 100644
index 0000000..e6f27b1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.54.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 45 }
+{ "unique1": 4, "four": 0, "sum": 45 }
+{ "unique1": 8, "four": 0, "sum": 45 }
+{ "unique1": 1, "four": 1, "sum": 33 }
+{ "unique1": 5, "four": 1, "sum": 33 }
+{ "unique1": 9, "four": 1, "sum": 33 }
+{ "unique1": 2, "four": 2, "sum": 18 }
+{ "unique1": 6, "four": 2, "sum": 18 }
+{ "unique1": 3, "four": 3, "sum": 10 }
+{ "unique1": 7, "four": 3, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.55.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.55.adm
new file mode 100644
index 0000000..ba24423
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.55.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 45 }
+{ "unique1": 4, "four": 0, "sum": 45 }
+{ "unique1": 8, "four": 0, "sum": 45 }
+{ "unique1": 1, "four": 1, "sum": 45 }
+{ "unique1": 5, "four": 1, "sum": 45 }
+{ "unique1": 9, "four": 1, "sum": 45 }
+{ "unique1": 2, "four": 2, "sum": 33 }
+{ "unique1": 6, "four": 2, "sum": 33 }
+{ "unique1": 3, "four": 3, "sum": 18 }
+{ "unique1": 7, "four": 3, "sum": 18 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.56.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.56.adm
new file mode 100644
index 0000000..264dc63
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.56.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 33 }
+{ "unique1": 4, "four": 0, "sum": 33 }
+{ "unique1": 8, "four": 0, "sum": 33 }
+{ "unique1": 1, "four": 1, "sum": 18 }
+{ "unique1": 5, "four": 1, "sum": 18 }
+{ "unique1": 9, "four": 1, "sum": 18 }
+{ "unique1": 2, "four": 2, "sum": 10 }
+{ "unique1": 6, "four": 2, "sum": 10 }
+{ "unique1": 3, "four": 3, "sum": null }
+{ "unique1": 7, "four": 3, "sum": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.57.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.57.adm
new file mode 100644
index 0000000..f2e778e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.57.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 35 }
+{ "unique1": 4, "four": 0, "sum": 35 }
+{ "unique1": 8, "four": 0, "sum": 35 }
+{ "unique1": 1, "four": 1, "sum": 45 }
+{ "unique1": 5, "four": 1, "sum": 45 }
+{ "unique1": 9, "four": 1, "sum": 45 }
+{ "unique1": 2, "four": 2, "sum": 45 }
+{ "unique1": 6, "four": 2, "sum": 45 }
+{ "unique1": 3, "four": 3, "sum": 45 }
+{ "unique1": 7, "four": 3, "sum": 45 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.58.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.58.adm
new file mode 100644
index 0000000..54df6d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.58.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": null }
+{ "unique1": 4, "four": 0, "sum": null }
+{ "unique1": 8, "four": 0, "sum": null }
+{ "unique1": 1, "four": 1, "sum": 12 }
+{ "unique1": 5, "four": 1, "sum": 12 }
+{ "unique1": 9, "four": 1, "sum": 12 }
+{ "unique1": 2, "four": 2, "sum": 27 }
+{ "unique1": 6, "four": 2, "sum": 27 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.59.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.59.adm
new file mode 100644
index 0000000..4645366
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.59.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 27 }
+{ "unique1": 4, "four": 0, "sum": 27 }
+{ "unique1": 8, "four": 0, "sum": 27 }
+{ "unique1": 1, "four": 1, "sum": 35 }
+{ "unique1": 5, "four": 1, "sum": 35 }
+{ "unique1": 9, "four": 1, "sum": 35 }
+{ "unique1": 2, "four": 2, "sum": 45 }
+{ "unique1": 6, "four": 2, "sum": 45 }
+{ "unique1": 3, "four": 3, "sum": 33 }
+{ "unique1": 7, "four": 3, "sum": 33 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.6.adm
new file mode 100644
index 0000000..6db85a2
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.6.adm
@@ -0,0 +1,10 @@
+{ "sum_1": 0, "ten": 0, "four": 0 }
+{ "sum_1": 0, "ten": 0, "four": 0 }
+{ "sum_1": 2, "ten": 0, "four": 2 }
+{ "sum_1": 3, "ten": 1, "four": 3 }
+{ "sum_1": 4, "ten": 1, "four": 1 }
+{ "sum_1": 5, "ten": 1, "four": 1 }
+{ "sum_1": 3, "ten": 3, "four": 3 }
+{ "sum_1": 0, "ten": 4, "four": 0 }
+{ "sum_1": 1, "ten": 7, "four": 1 }
+{ "sum_1": 1, "ten": 9, "four": 1 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.60.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.60.adm
new file mode 100644
index 0000000..4bbdb27
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.60.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 12 }
+{ "unique1": 4, "four": 0, "sum": 12 }
+{ "unique1": 8, "four": 0, "sum": 12 }
+{ "unique1": 1, "four": 1, "sum": 15 }
+{ "unique1": 5, "four": 1, "sum": 15 }
+{ "unique1": 9, "four": 1, "sum": 15 }
+{ "unique1": 2, "four": 2, "sum": 8 }
+{ "unique1": 6, "four": 2, "sum": 8 }
+{ "unique1": 3, "four": 3, "sum": 10 }
+{ "unique1": 7, "four": 3, "sum": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.61.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.61.adm
new file mode 100644
index 0000000..bd591e9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.61.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 27 }
+{ "unique1": 4, "four": 0, "sum": 23 }
+{ "unique1": 8, "four": 0, "sum": 19 }
+{ "unique1": 1, "four": 1, "sum": 34 }
+{ "unique1": 5, "four": 1, "sum": 30 }
+{ "unique1": 9, "four": 1, "sum": 26 }
+{ "unique1": 2, "four": 2, "sum": 43 }
+{ "unique1": 6, "four": 2, "sum": 39 }
+{ "unique1": 3, "four": 3, "sum": 30 }
+{ "unique1": 7, "four": 3, "sum": 26 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.62.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.62.adm
new file mode 100644
index 0000000..f2d76fd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.62.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 15 }
+{ "unique1": 4, "four": 0, "sum": 15 }
+{ "unique1": 8, "four": 0, "sum": 15 }
+{ "unique1": 1, "four": 1, "sum": 20 }
+{ "unique1": 5, "four": 1, "sum": 20 }
+{ "unique1": 9, "four": 1, "sum": 20 }
+{ "unique1": 2, "four": 2, "sum": 37 }
+{ "unique1": 6, "four": 2, "sum": 37 }
+{ "unique1": 3, "four": 3, "sum": 23 }
+{ "unique1": 7, "four": 3, "sum": 23 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.63.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.63.adm
new file mode 100644
index 0000000..d0b922c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.63.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "sum": 15 }
+{ "unique1": 4, "four": 0, "sum": 19 }
+{ "unique1": 8, "four": 0, "sum": 23 }
+{ "unique1": 1, "four": 1, "sum": 21 }
+{ "unique1": 5, "four": 1, "sum": 25 }
+{ "unique1": 9, "four": 1, "sum": 29 }
+{ "unique1": 2, "four": 2, "sum": 39 }
+{ "unique1": 6, "four": 2, "sum": 43 }
+{ "unique1": 3, "four": 3, "sum": 26 }
+{ "unique1": 7, "four": 3, "sum": 30 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.64.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.64.adm
new file mode 100644
index 0000000..9db0518
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.64.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "ten": 0, "sum": 0 }
+{ "unique1": 1, "four": 1, "ten": 1, "sum": 1 }
+{ "unique1": 2, "four": 2, "ten": 2, "sum": 2 }
+{ "unique1": 3, "four": 3, "ten": 3, "sum": 3 }
+{ "unique1": 4, "four": 0, "ten": 4, "sum": 4 }
+{ "unique1": 5, "four": 1, "ten": 5, "sum": 5 }
+{ "unique1": 6, "four": 2, "ten": 6, "sum": 6 }
+{ "unique1": 7, "four": 3, "ten": 7, "sum": 7 }
+{ "unique1": 8, "four": 0, "ten": 8, "sum": 8 }
+{ "unique1": 9, "four": 1, "ten": 9, "sum": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.65.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.65.adm
new file mode 100644
index 0000000..90c4929
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.65.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "ten": 0, "sum": null }
+{ "unique1": 1, "four": 1, "ten": 1, "sum": null }
+{ "unique1": 2, "four": 2, "ten": 2, "sum": null }
+{ "unique1": 3, "four": 3, "ten": 3, "sum": null }
+{ "unique1": 4, "four": 0, "ten": 4, "sum": null }
+{ "unique1": 5, "four": 1, "ten": 5, "sum": null }
+{ "unique1": 6, "four": 2, "ten": 6, "sum": null }
+{ "unique1": 7, "four": 3, "ten": 7, "sum": null }
+{ "unique1": 8, "four": 0, "ten": 8, "sum": null }
+{ "unique1": 9, "four": 1, "ten": 9, "sum": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.66.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.66.adm
new file mode 100644
index 0000000..90c4929
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.66.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "ten": 0, "sum": null }
+{ "unique1": 1, "four": 1, "ten": 1, "sum": null }
+{ "unique1": 2, "four": 2, "ten": 2, "sum": null }
+{ "unique1": 3, "four": 3, "ten": 3, "sum": null }
+{ "unique1": 4, "four": 0, "ten": 4, "sum": null }
+{ "unique1": 5, "four": 1, "ten": 5, "sum": null }
+{ "unique1": 6, "four": 2, "ten": 6, "sum": null }
+{ "unique1": 7, "four": 3, "ten": 7, "sum": null }
+{ "unique1": 8, "four": 0, "ten": 8, "sum": null }
+{ "unique1": 9, "four": 1, "ten": 9, "sum": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.67.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.67.adm
new file mode 100644
index 0000000..9db0518
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.67.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "ten": 0, "sum": 0 }
+{ "unique1": 1, "four": 1, "ten": 1, "sum": 1 }
+{ "unique1": 2, "four": 2, "ten": 2, "sum": 2 }
+{ "unique1": 3, "four": 3, "ten": 3, "sum": 3 }
+{ "unique1": 4, "four": 0, "ten": 4, "sum": 4 }
+{ "unique1": 5, "four": 1, "ten": 5, "sum": 5 }
+{ "unique1": 6, "four": 2, "ten": 6, "sum": 6 }
+{ "unique1": 7, "four": 3, "ten": 7, "sum": 7 }
+{ "unique1": 8, "four": 0, "ten": 8, "sum": 8 }
+{ "unique1": 9, "four": 1, "ten": 9, "sum": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.68.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.68.adm
new file mode 100644
index 0000000..a6036fb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.68.adm
@@ -0,0 +1,18 @@
+{ "x": 1, "sum": 4 }
+{ "x": 3, "sum": 9 }
+{ "x": 5, "sum": 15 }
+{ "x": 7, "sum": 21 }
+{ "x": 9, "sum": 27 }
+{ "x": 11, "sum": 33 }
+{ "x": 13, "sum": 39 }
+{ "x": 15, "sum": 45 }
+{ "x": 17, "sum": 51 }
+{ "x": 19, "sum": 57 }
+{ "x": 21, "sum": 63 }
+{ "x": 23, "sum": 69 }
+{ "x": 25, "sum": 75 }
+{ "x": 27, "sum": 81 }
+{ "x": 29, "sum": 87 }
+{ "x": 31, "sum": 93 }
+{ "x": 33, "sum": 99 }
+{ "x": 35, "sum": 68 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.69.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.69.adm
new file mode 100644
index 0000000..3356190
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.69.adm
@@ -0,0 +1,18 @@
+{ "x": 1, "sum": 1 }
+{ "x": 3, "sum": 3 }
+{ "x": 5, "sum": 5 }
+{ "x": 7, "sum": 7 }
+{ "x": 9, "sum": 9 }
+{ "x": 11, "sum": 11 }
+{ "x": 13, "sum": 13 }
+{ "x": 15, "sum": 15 }
+{ "x": 17, "sum": 17 }
+{ "x": 19, "sum": 19 }
+{ "x": 21, "sum": 21 }
+{ "x": 23, "sum": 23 }
+{ "x": 25, "sum": 25 }
+{ "x": 27, "sum": 27 }
+{ "x": 29, "sum": 29 }
+{ "x": 31, "sum": 31 }
+{ "x": 33, "sum": 33 }
+{ "x": 35, "sum": 35 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.7.adm
new file mode 100644
index 0000000..6c7f2dc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.7.adm
@@ -0,0 +1,10 @@
+{ "row_number": 1 }
+{ "row_number": 2 }
+{ "row_number": 3 }
+{ "row_number": 4 }
+{ "row_number": 5 }
+{ "row_number": 6 }
+{ "row_number": 7 }
+{ "row_number": 8 }
+{ "row_number": 9 }
+{ "row_number": 10 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.70.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.70.adm
new file mode 100644
index 0000000..a6036fb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.70.adm
@@ -0,0 +1,18 @@
+{ "x": 1, "sum": 4 }
+{ "x": 3, "sum": 9 }
+{ "x": 5, "sum": 15 }
+{ "x": 7, "sum": 21 }
+{ "x": 9, "sum": 27 }
+{ "x": 11, "sum": 33 }
+{ "x": 13, "sum": 39 }
+{ "x": 15, "sum": 45 }
+{ "x": 17, "sum": 51 }
+{ "x": 19, "sum": 57 }
+{ "x": 21, "sum": 63 }
+{ "x": 23, "sum": 69 }
+{ "x": 25, "sum": 75 }
+{ "x": 27, "sum": 81 }
+{ "x": 29, "sum": 87 }
+{ "x": 31, "sum": 93 }
+{ "x": 33, "sum": 99 }
+{ "x": 35, "sum": 68 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.71.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.71.adm
new file mode 100644
index 0000000..af6ffa1
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.71.adm
@@ -0,0 +1,26 @@
+{ "x": 1, "sum": 2 }
+{ "x": 1, "sum": 3 }
+{ "x": 1, "sum": 7 }
+{ "x": 5, "sum": 13 }
+{ "x": 7, "sum": 21 }
+{ "x": 9, "sum": 27 }
+{ "x": 11, "sum": 33 }
+{ "x": 13, "sum": 39 }
+{ "x": 15, "sum": 45 }
+{ "x": 17, "sum": 51 }
+{ "x": 19, "sum": 57 }
+{ "x": 21, "sum": 63 }
+{ "x": 23, "sum": 69 }
+{ "x": 25, "sum": 75 }
+{ "x": 27, "sum": 81 }
+{ "x": 29, "sum": 87 }
+{ "x": 31, "sum": 93 }
+{ "x": 33, "sum": 99 }
+{ "x": 35, "sum": 105 }
+{ "x": 37, "sum": 111 }
+{ "x": 39, "sum": 117 }
+{ "x": 41, "sum": 123 }
+{ "x": 43, "sum": 129 }
+{ "x": 45, "sum": 135 }
+{ "x": 47, "sum": 141 }
+{ "x": 49, "sum": 96 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.72.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.72.adm
new file mode 100644
index 0000000..e63f3be
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.72.adm
@@ -0,0 +1,26 @@
+{ "x": 1, "sum": 3 }
+{ "x": 1, "sum": 3 }
+{ "x": 1, "sum": 3 }
+{ "x": 5, "sum": 5 }
+{ "x": 7, "sum": 7 }
+{ "x": 9, "sum": 9 }
+{ "x": 11, "sum": 11 }
+{ "x": 13, "sum": 13 }
+{ "x": 15, "sum": 15 }
+{ "x": 17, "sum": 17 }
+{ "x": 19, "sum": 19 }
+{ "x": 21, "sum": 21 }
+{ "x": 23, "sum": 23 }
+{ "x": 25, "sum": 25 }
+{ "x": 27, "sum": 27 }
+{ "x": 29, "sum": 29 }
+{ "x": 31, "sum": 31 }
+{ "x": 33, "sum": 33 }
+{ "x": 35, "sum": 35 }
+{ "x": 37, "sum": 37 }
+{ "x": 39, "sum": 39 }
+{ "x": 41, "sum": 41 }
+{ "x": 43, "sum": 43 }
+{ "x": 45, "sum": 45 }
+{ "x": 47, "sum": 47 }
+{ "x": 49, "sum": 49 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.73.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.73.adm
new file mode 100644
index 0000000..d07858f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.73.adm
@@ -0,0 +1,26 @@
+{ "x": 1, "sum": 8 }
+{ "x": 1, "sum": 8 }
+{ "x": 1, "sum": 8 }
+{ "x": 5, "sum": 15 }
+{ "x": 7, "sum": 21 }
+{ "x": 9, "sum": 27 }
+{ "x": 11, "sum": 33 }
+{ "x": 13, "sum": 39 }
+{ "x": 15, "sum": 45 }
+{ "x": 17, "sum": 51 }
+{ "x": 19, "sum": 57 }
+{ "x": 21, "sum": 63 }
+{ "x": 23, "sum": 69 }
+{ "x": 25, "sum": 75 }
+{ "x": 27, "sum": 81 }
+{ "x": 29, "sum": 87 }
+{ "x": 31, "sum": 93 }
+{ "x": 33, "sum": 99 }
+{ "x": 35, "sum": 105 }
+{ "x": 37, "sum": 111 }
+{ "x": 39, "sum": 117 }
+{ "x": 41, "sum": 123 }
+{ "x": 43, "sum": 129 }
+{ "x": 45, "sum": 135 }
+{ "x": 47, "sum": 141 }
+{ "x": 49, "sum": 96 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.74.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.74.adm
new file mode 100644
index 0000000..c51058a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.74.adm
@@ -0,0 +1,10 @@
+{ "lag": null, "ten": 0, "four": 0 }
+{ "lag": 0, "ten": 0, "four": 0 }
+{ "lag": 0, "ten": 4, "four": 0 }
+{ "lag": null, "ten": 1, "four": 1 }
+{ "lag": 1, "ten": 1, "four": 1 }
+{ "lag": 1, "ten": 7, "four": 1 }
+{ "lag": 7, "ten": 9, "four": 1 }
+{ "lag": null, "ten": 0, "four": 2 }
+{ "lag": null, "ten": 1, "four": 3 }
+{ "lag": 1, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.75.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.75.adm
new file mode 100644
index 0000000..c51058a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.75.adm
@@ -0,0 +1,10 @@
+{ "lag": null, "ten": 0, "four": 0 }
+{ "lag": 0, "ten": 0, "four": 0 }
+{ "lag": 0, "ten": 4, "four": 0 }
+{ "lag": null, "ten": 1, "four": 1 }
+{ "lag": 1, "ten": 1, "four": 1 }
+{ "lag": 1, "ten": 7, "four": 1 }
+{ "lag": 7, "ten": 9, "four": 1 }
+{ "lag": null, "ten": 0, "four": 2 }
+{ "lag": null, "ten": 1, "four": 3 }
+{ "lag": 1, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.76.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.76.adm
new file mode 100644
index 0000000..bcfb3ad
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.76.adm
@@ -0,0 +1,10 @@
+{ "lag": 0, "ten": 0, "four": 0 }
+{ "lag": 0, "ten": 0, "four": 0 }
+{ "lag": 4, "ten": 4, "four": 0 }
+{ "lag": null, "ten": 1, "four": 1 }
+{ "lag": 1, "ten": 1, "four": 1 }
+{ "lag": 1, "ten": 7, "four": 1 }
+{ "lag": 7, "ten": 9, "four": 1 }
+{ "lag": null, "ten": 0, "four": 2 }
+{ "lag": null, "ten": 1, "four": 3 }
+{ "lag": null, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.77.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.77.adm
new file mode 100644
index 0000000..4d5be6c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.77.adm
@@ -0,0 +1,10 @@
+{ "ten": 0, "four": 0, "lag": 0 }
+{ "ten": 0, "four": 0, "lag": 0 }
+{ "ten": 4, "four": 0, "lag": 4 }
+{ "ten": 1, "four": 1, "lag": 0 }
+{ "ten": 1, "four": 1, "lag": 1 }
+{ "ten": 7, "four": 1, "lag": 1 }
+{ "ten": 9, "four": 1, "lag": 7 }
+{ "ten": 0, "four": 2, "lag": 0 }
+{ "ten": 1, "four": 3, "lag": 0 }
+{ "ten": 3, "four": 3, "lag": 0 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.78.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.78.adm
new file mode 100644
index 0000000..5c175f7
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.78.adm
@@ -0,0 +1,10 @@
+{ "lead": 0, "ten": 0, "four": 0 }
+{ "lead": 4, "ten": 0, "four": 0 }
+{ "lead": null, "ten": 4, "four": 0 }
+{ "lead": 1, "ten": 1, "four": 1 }
+{ "lead": 7, "ten": 1, "four": 1 }
+{ "lead": 9, "ten": 7, "four": 1 }
+{ "lead": null, "ten": 9, "four": 1 }
+{ "lead": null, "ten": 0, "four": 2 }
+{ "lead": 3, "ten": 1, "four": 3 }
+{ "lead": null, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.79.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.79.adm
new file mode 100644
index 0000000..971ad39
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.79.adm
@@ -0,0 +1,10 @@
+{ "lead": 0, "ten": 0, "four": 0 }
+{ "lead": 8, "ten": 0, "four": 0 }
+{ "lead": null, "ten": 4, "four": 0 }
+{ "lead": 2, "ten": 1, "four": 1 }
+{ "lead": 14, "ten": 1, "four": 1 }
+{ "lead": 18, "ten": 7, "four": 1 }
+{ "lead": null, "ten": 9, "four": 1 }
+{ "lead": null, "ten": 0, "four": 2 }
+{ "lead": 6, "ten": 1, "four": 3 }
+{ "lead": null, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.8.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.8.adm
new file mode 100644
index 0000000..bbfa9e0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.8.adm
@@ -0,0 +1,10 @@
+{ "rank_1": 1, "ten": 0, "four": 0 }
+{ "rank_1": 1, "ten": 0, "four": 0 }
+{ "rank_1": 3, "ten": 4, "four": 0 }
+{ "rank_1": 1, "ten": 1, "four": 1 }
+{ "rank_1": 1, "ten": 1, "four": 1 }
+{ "rank_1": 3, "ten": 7, "four": 1 }
+{ "rank_1": 4, "ten": 9, "four": 1 }
+{ "rank_1": 1, "ten": 0, "four": 2 }
+{ "rank_1": 1, "ten": 1, "four": 3 }
+{ "rank_1": 2, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.80.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.80.adm
new file mode 100644
index 0000000..64e1dff
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.80.adm
@@ -0,0 +1,10 @@
+{ "lead": 0, "ten": 0, "four": 0 }
+{ "lead": 8, "ten": 0, "four": 0 }
+{ "lead": -1, "ten": 4, "four": 0 }
+{ "lead": 2, "ten": 1, "four": 1 }
+{ "lead": 14, "ten": 1, "four": 1 }
+{ "lead": 18, "ten": 7, "four": 1 }
+{ "lead": -1, "ten": 9, "four": 1 }
+{ "lead": -1, "ten": 0, "four": 2 }
+{ "lead": 6, "ten": 1, "four": 3 }
+{ "lead": -1, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.81.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.81.adm
new file mode 100644
index 0000000..fa1e38a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.81.adm
@@ -0,0 +1,10 @@
+{ "first_value": 0, "ten": 0, "four": 0 }
+{ "first_value": 0, "ten": 0, "four": 0 }
+{ "first_value": 0, "ten": 4, "four": 0 }
+{ "first_value": 1, "ten": 1, "four": 1 }
+{ "first_value": 1, "ten": 1, "four": 1 }
+{ "first_value": 1, "ten": 7, "four": 1 }
+{ "first_value": 1, "ten": 9, "four": 1 }
+{ "first_value": 0, "ten": 0, "four": 2 }
+{ "first_value": 1, "ten": 1, "four": 3 }
+{ "first_value": 1, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.82.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.82.adm
new file mode 100644
index 0000000..28dffeb
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.82.adm
@@ -0,0 +1,10 @@
+{ "last_value": 4, "ten": 0, "four": 0 }
+{ "last_value": 4, "ten": 0, "four": 0 }
+{ "last_value": 4, "ten": 4, "four": 0 }
+{ "last_value": 9, "ten": 1, "four": 1 }
+{ "last_value": 9, "ten": 1, "four": 1 }
+{ "last_value": 9, "ten": 7, "four": 1 }
+{ "last_value": 9, "ten": 9, "four": 1 }
+{ "last_value": 0, "ten": 0, "four": 2 }
+{ "last_value": 3, "ten": 1, "four": 3 }
+{ "last_value": 3, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.83.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.83.adm
new file mode 100644
index 0000000..8dc1715
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.83.adm
@@ -0,0 +1,10 @@
+{ "nth_value": 0, "ten": 0, "four": 0 }
+{ "nth_value": 0, "ten": 0, "four": 0 }
+{ "nth_value": 0, "ten": 4, "four": 0 }
+{ "nth_value": 1, "ten": 1, "four": 1 }
+{ "nth_value": 1, "ten": 1, "four": 1 }
+{ "nth_value": 1, "ten": 7, "four": 1 }
+{ "nth_value": 1, "ten": 9, "four": 1 }
+{ "nth_value": null, "ten": 0, "four": 2 }
+{ "nth_value": null, "ten": 1, "four": 3 }
+{ "nth_value": null, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.84.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.84.adm
new file mode 100644
index 0000000..28eff74
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.84.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 0, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 0, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 0, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 1, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 1, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 1, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 1, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 1, "ten": 9, "sum": 25, "last_value": 9 }
+{ "four": 2, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 2, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 2, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 2, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 3, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 3, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 3, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 3, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 3, "ten": 9, "sum": 25, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.85.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.85.adm
new file mode 100644
index 0000000..28eff74
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.85.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 0, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 0, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 0, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 1, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 1, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 1, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 1, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 1, "ten": 9, "sum": 25, "last_value": 9 }
+{ "four": 2, "ten": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "ten": 2, "sum": 2, "last_value": 2 }
+{ "four": 2, "ten": 4, "sum": 6, "last_value": 4 }
+{ "four": 2, "ten": 6, "sum": 12, "last_value": 6 }
+{ "four": 2, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 3, "ten": 1, "sum": 1, "last_value": 1 }
+{ "four": 3, "ten": 3, "sum": 4, "last_value": 3 }
+{ "four": 3, "ten": 5, "sum": 9, "last_value": 5 }
+{ "four": 3, "ten": 7, "sum": 16, "last_value": 7 }
+{ "four": 3, "ten": 9, "sum": 25, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.86.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.86.adm
new file mode 100644
index 0000000..97f0a4f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.86.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "ten": 0, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 2, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 4, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 6, "sum": 20, "last_value": 8 }
+{ "four": 0, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 1, "ten": 1, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 3, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 5, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 7, "sum": 25, "last_value": 9 }
+{ "four": 1, "ten": 9, "sum": 25, "last_value": 9 }
+{ "four": 2, "ten": 0, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 2, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 4, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 6, "sum": 20, "last_value": 8 }
+{ "four": 2, "ten": 8, "sum": 20, "last_value": 8 }
+{ "four": 3, "ten": 1, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 3, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 5, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 7, "sum": 25, "last_value": 9 }
+{ "four": 3, "ten": 9, "sum": 25, "last_value": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.87.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.87.adm
new file mode 100644
index 0000000..7709a85
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.87.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 0, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 0, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 1, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 1, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 2, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 2, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 3, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 3, "two": 2, "sum": 4, "last_value": 2 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.88.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.88.adm
new file mode 100644
index 0000000..25038e6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.88.adm
@@ -0,0 +1,20 @@
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 0, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 0, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 0, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 1, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 1, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 1, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 2, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 2, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 2, "two": 2, "sum": 4, "last_value": 2 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 0, "sum": 0, "last_value": 0 }
+{ "four": 3, "two": 1, "sum": 1, "last_value": 1 }
+{ "four": 3, "two": 1, "sum": 2, "last_value": 1 }
+{ "four": 3, "two": 2, "sum": 4, "last_value": 2 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.89.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.89.adm
new file mode 100644
index 0000000..cb719b4
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.89.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "first_value": 8 }
+{ "unique1": 8, "four": 0, "first_value": 4 }
+{ "unique1": 4, "four": 0, "first_value": 5 }
+{ "unique1": 5, "four": 1, "first_value": 9 }
+{ "unique1": 9, "four": 1, "first_value": 1 }
+{ "unique1": 1, "four": 1, "first_value": 6 }
+{ "unique1": 6, "four": 2, "first_value": 2 }
+{ "unique1": 2, "four": 2, "first_value": 7 }
+{ "unique1": 7, "four": 3, "first_value": 3 }
+{ "unique1": 3, "four": 3, "first_value": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.9.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.9.adm
new file mode 100644
index 0000000..5eed6f0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.9.adm
@@ -0,0 +1,10 @@
+{ "dense_rank": 1, "ten": 0, "four": 0 }
+{ "dense_rank": 1, "ten": 0, "four": 0 }
+{ "dense_rank": 2, "ten": 4, "four": 0 }
+{ "dense_rank": 1, "ten": 1, "four": 1 }
+{ "dense_rank": 1, "ten": 1, "four": 1 }
+{ "dense_rank": 2, "ten": 7, "four": 1 }
+{ "dense_rank": 3, "ten": 9, "four": 1 }
+{ "dense_rank": 1, "ten": 0, "four": 2 }
+{ "dense_rank": 1, "ten": 1, "four": 3 }
+{ "dense_rank": 2, "ten": 3, "four": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.90.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.90.adm
new file mode 100644
index 0000000..e8a57d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.90.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "first_value": null }
+{ "unique1": 8, "four": 0, "first_value": 5 }
+{ "unique1": 4, "four": 0, "first_value": 5 }
+{ "unique1": 5, "four": 1, "first_value": null }
+{ "unique1": 9, "four": 1, "first_value": 6 }
+{ "unique1": 1, "four": 1, "first_value": 6 }
+{ "unique1": 6, "four": 2, "first_value": 7 }
+{ "unique1": 2, "four": 2, "first_value": 7 }
+{ "unique1": 7, "four": 3, "first_value": null }
+{ "unique1": 3, "four": 3, "first_value": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.91.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.91.adm
new file mode 100644
index 0000000..ddbad02
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.91.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "first_value": 0 }
+{ "unique1": 8, "four": 0, "first_value": 8 }
+{ "unique1": 4, "four": 0, "first_value": 4 }
+{ "unique1": 5, "four": 1, "first_value": 5 }
+{ "unique1": 9, "four": 1, "first_value": 9 }
+{ "unique1": 1, "four": 1, "first_value": 1 }
+{ "unique1": 6, "four": 2, "first_value": 6 }
+{ "unique1": 2, "four": 2, "first_value": 2 }
+{ "unique1": 7, "four": 3, "first_value": 7 }
+{ "unique1": 3, "four": 3, "first_value": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.92.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.92.adm
new file mode 100644
index 0000000..bdfb1d9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.92.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "last_value": 4 }
+{ "unique1": 8, "four": 0, "last_value": 5 }
+{ "unique1": 4, "four": 0, "last_value": 9 }
+{ "unique1": 5, "four": 1, "last_value": 1 }
+{ "unique1": 9, "four": 1, "last_value": 6 }
+{ "unique1": 1, "four": 1, "last_value": 2 }
+{ "unique1": 6, "four": 2, "last_value": 7 }
+{ "unique1": 2, "four": 2, "last_value": 3 }
+{ "unique1": 7, "four": 3, "last_value": 3 }
+{ "unique1": 3, "four": 3, "last_value": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.93.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.93.adm
new file mode 100644
index 0000000..dfeed13
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.93.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "last_value": null }
+{ "unique1": 8, "four": 0, "last_value": 5 }
+{ "unique1": 4, "four": 0, "last_value": 9 }
+{ "unique1": 5, "four": 1, "last_value": null }
+{ "unique1": 9, "four": 1, "last_value": 6 }
+{ "unique1": 1, "four": 1, "last_value": 2 }
+{ "unique1": 6, "four": 2, "last_value": 7 }
+{ "unique1": 2, "four": 2, "last_value": 3 }
+{ "unique1": 7, "four": 3, "last_value": null }
+{ "unique1": 3, "four": 3, "last_value": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.94.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.94.adm
new file mode 100644
index 0000000..ebff40e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.94.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "last_value": 0 }
+{ "unique1": 8, "four": 0, "last_value": 5 }
+{ "unique1": 4, "four": 0, "last_value": 9 }
+{ "unique1": 5, "four": 1, "last_value": 5 }
+{ "unique1": 9, "four": 1, "last_value": 6 }
+{ "unique1": 1, "four": 1, "last_value": 2 }
+{ "unique1": 6, "four": 2, "last_value": 7 }
+{ "unique1": 2, "four": 2, "last_value": 3 }
+{ "unique1": 7, "four": 3, "last_value": 7 }
+{ "unique1": 3, "four": 3, "last_value": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.95.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.95.adm
new file mode 100644
index 0000000..7f2030b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.95.adm
@@ -0,0 +1,10 @@
+{ "unique1": 0, "four": 0, "first_value": 0, "nth_2": 8, "last_value": 3 }
+{ "unique1": 8, "four": 0, "first_value": 0, "nth_2": 8, "last_value": 3 }
+{ "unique1": 4, "four": 0, "first_value": 0, "nth_2": 8, "last_value": 3 }
+{ "unique1": 5, "four": 1, "first_value": 5, "nth_2": 9, "last_value": 3 }
+{ "unique1": 9, "four": 1, "first_value": 5, "nth_2": 9, "last_value": 3 }
+{ "unique1": 1, "four": 1, "first_value": 5, "nth_2": 9, "last_value": 3 }
+{ "unique1": 6, "four": 2, "first_value": 6, "nth_2": 2, "last_value": 3 }
+{ "unique1": 2, "four": 2, "first_value": 6, "nth_2": 2, "last_value": 3 }
+{ "unique1": 7, "four": 3, "first_value": 7, "nth_2": 3, "last_value": 3 }
+{ "unique1": 3, "four": 3, "first_value": 7, "nth_2": 3, "last_value": 3 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.96.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.96.adm
new file mode 100644
index 0000000..a0c8b34
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.96.adm
@@ -0,0 +1,10 @@
+{ "salary": 3500, "first_value": 3500, "lead": 3900, "nth_value": 3500 }
+{ "salary": 3900, "first_value": 3500, "lead": 4200, "nth_value": 3500 }
+{ "salary": 4200, "first_value": 3500, "lead": 4500, "nth_value": 3500 }
+{ "salary": 4500, "first_value": 3500, "lead": 4800, "nth_value": 3500 }
+{ "salary": 4800, "first_value": 3900, "lead": 4800, "nth_value": 3900 }
+{ "salary": 4800, "first_value": 3900, "lead": 5000, "nth_value": 3900 }
+{ "salary": 5000, "first_value": 4200, "lead": 5200, "nth_value": 4200 }
+{ "salary": 5200, "first_value": 4200, "lead": 5200, "nth_value": 4200 }
+{ "salary": 5200, "first_value": 4200, "lead": 6000, "nth_value": 4200 }
+{ "salary": 6000, "first_value": 5000, "lead": null, "nth_value": 5000 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.97.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.97.adm
new file mode 100644
index 0000000..826e4b5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.97.adm
@@ -0,0 +1,10 @@
+{ "salary": 3500, "last_value": 4500, "lag": null }
+{ "salary": 3900, "last_value": 4800, "lag": 3500 }
+{ "salary": 4200, "last_value": 5200, "lag": 3900 }
+{ "salary": 4500, "last_value": 5200, "lag": 4200 }
+{ "salary": 4800, "last_value": 5200, "lag": 4500 }
+{ "salary": 4800, "last_value": 5200, "lag": 4800 }
+{ "salary": 5000, "last_value": 6000, "lag": 4800 }
+{ "salary": 5200, "last_value": 6000, "lag": 5000 }
+{ "salary": 5200, "last_value": 6000, "lag": 5200 }
+{ "salary": 6000, "last_value": 6000, "lag": 5200 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.98.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.98.adm
new file mode 100644
index 0000000..3526e5f
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.98.adm
@@ -0,0 +1,10 @@
+{ "salary": 3500, "first_value": 4500, "lead": 3900, "nth_value": 4500 }
+{ "salary": 3900, "first_value": 5000, "lead": 4200, "nth_value": 5000 }
+{ "salary": 4200, "first_value": 5200, "lead": 4500, "nth_value": 5200 }
+{ "salary": 4500, "first_value": 6000, "lead": 4800, "nth_value": 6000 }
+{ "salary": 4800, "first_value": 6000, "lead": 4800, "nth_value": 6000 }
+{ "salary": 4800, "first_value": 6000, "lead": 5000, "nth_value": 6000 }
+{ "salary": 5000, "first_value": 6000, "lead": 5200, "nth_value": 6000 }
+{ "salary": 5200, "first_value": null, "lead": 5200, "nth_value": null }
+{ "salary": 5200, "first_value": null, "lead": 6000, "nth_value": null }
+{ "salary": 6000, "first_value": null, "lead": null, "nth_value": null }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.99.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.99.adm
new file mode 100644
index 0000000..db59e8b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/window/pg_win/pg_win.99.adm
@@ -0,0 +1,10 @@
+{ "salary": 3500, "last_value": 6000, "lag": null }
+{ "salary": 3900, "last_value": 6000, "lag": 3500 }
+{ "salary": 4200, "last_value": 6000, "lag": 3900 }
+{ "salary": 4500, "last_value": 6000, "lag": 4200 }
+{ "salary": 4800, "last_value": 6000, "lag": 4500 }
+{ "salary": 4800, "last_value": 6000, "lag": 4800 }
+{ "salary": 5000, "last_value": 6000, "lag": 4800 }
+{ "salary": 5200, "last_value": null, "lag": 5000 }
+{ "salary": 5200, "last_value": null, "lag": 5200 }
+{ "salary": 6000, "last_value": null, "lag": 5200 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.1.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.1.ast
new file mode 100644
index 0000000..66bdbda
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.1.ast
@@ -0,0 +1,7 @@
+DataverseUse test
+TypeDecl t1Type [
+ open RecordType {
+ c1 : bigint
+ }
+]
+DatasetDecl t1(t1Type) partitioned by [[c1]]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.2.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.2.ast
new file mode 100644
index 0000000..b016508
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.2.ast
@@ -0,0 +1,2 @@
+DataverseUse test
+Set import-private-functions=true
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.3.ast
new file mode 100644
index 0000000..528b379
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.3.ast
@@ -0,0 +1,209 @@
+DataverseUse test
+Query:
+Let Variable [ Name=$P ]
+ :=
+ LiteralExpr [LONG] [10]
+Let Variable [ Name=$N ]
+ :=
+ LiteralExpr [LONG] [10]
+Let Variable [ Name=$D ]
+ :=
+ LiteralExpr [LONG] [4]
+SELECT [
+FunctionCall asterix.sql-min@1[
+ (
+ SELECT ELEMENT [
+ FieldAccessor [
+ Variable [ Name=#2 ]
+ Field=rank_result_delta
+ ]
+ ]
+ FROM [ Variable [ Name=#1 ]
+ AS Variable [ Name=#2 ]
+ ]
+ )
+]
+rank_min_delta
+FunctionCall asterix.sql-max@1[
+ (
+ SELECT ELEMENT [
+ FieldAccessor [
+ Variable [ Name=#3 ]
+ Field=rank_result_delta
+ ]
+ ]
+ FROM [ Variable [ Name=#1 ]
+ AS Variable [ Name=#3 ]
+ ]
+ )
+]
+rank_max_delta
+FunctionCall asterix.sql-min@1[
+ (
+ SELECT ELEMENT [
+ FieldAccessor [
+ Variable [ Name=#4 ]
+ Field=percent_rank_result_delta
+ ]
+ ]
+ FROM [ Variable [ Name=#1 ]
+ AS Variable [ Name=#4 ]
+ ]
+ )
+]
+percent_rank_min_delta
+FunctionCall asterix.sql-max@1[
+ (
+ SELECT ELEMENT [
+ FieldAccessor [
+ Variable [ Name=#5 ]
+ Field=percent_rank_result_delta
+ ]
+ ]
+ FROM [ Variable [ Name=#1 ]
+ AS Variable [ Name=#5 ]
+ ]
+ )
+]
+percent_rank_max_delta
+]
+FROM [ FunctionCall asterix.dataset@1[
+ LiteralExpr [STRING] [test.t1]
+ ]
+ AS Variable [ Name=$t1 ]
+,
+ FunctionCall test.range@2[
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=one
+ ]
+ Variable [ Name=$P ]
+ ]
+ AS Variable [ Name=$p ]
+,
+ FunctionCall test.range@2[
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=one
+ ]
+ Variable [ Name=$N ]
+ ]
+ AS Variable [ Name=$n ]
+,
+ FunctionCall test.range@2[
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=one
+ ]
+ Variable [ Name=$D ]
+ ]
+ AS Variable [ Name=$d ]
+]
+Let Variable [ Name=$rank_result_expected ]
+ :=
+ OperatorExpr [
+ OperatorExpr [
+ OperatorExpr [
+ Variable [ Name=$N ]
+ -
+ Variable [ Name=$n ]
+ ]
+ *
+ Variable [ Name=$D ]
+ ]
+ +
+ LiteralExpr [LONG] [1]
+ ]
+Let Variable [ Name=$rank_result_actual ]
+ :=
+ WINDOW test.rank@0[
+ ]
+ OVER (
+ PARTITION BY
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=c2
+ ]
+ Variable [ Name=$p ]
+ ORDER BY
+ Variable [ Name=$n ]
+ DESC
+ )
+Let Variable [ Name=$rank_result_delta ]
+ :=
+ OperatorExpr [
+ Variable [ Name=$rank_result_expected ]
+ -
+ Variable [ Name=$rank_result_actual ]
+ ]
+Let Variable [ Name=$percent_rank_result_expected ]
+ :=
+ OperatorExpr [
+ OperatorExpr [
+ Variable [ Name=$rank_result_expected ]
+ -
+ LiteralExpr [LONG] [1]
+ ]
+ /
+ OperatorExpr [
+ OperatorExpr [
+ Variable [ Name=$N ]
+ *
+ Variable [ Name=$D ]
+ ]
+ -
+ LiteralExpr [LONG] [1]
+ ]
+ ]
+Let Variable [ Name=$percent_rank_result_actual ]
+ :=
+ WINDOW test.percent_rank@0[
+ ]
+ OVER (
+ PARTITION BY
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=c2
+ ]
+ Variable [ Name=$p ]
+ ORDER BY
+ Variable [ Name=$n ]
+ DESC
+ )
+Let Variable [ Name=$percent_rank_result_delta_raw ]
+ :=
+ OperatorExpr [
+ Variable [ Name=$percent_rank_result_expected ]
+ -
+ Variable [ Name=$percent_rank_result_actual ]
+ ]
+Let Variable [ Name=$percent_rank_result_delta ]
+ :=
+ CASE LiteralExpr [TRUE]
+
+ WHEN OperatorExpr [
+ Variable [ Name=$percent_rank_result_delta_raw ]
+ <
+ LiteralExpr [DOUBLE] [0.001]
+ ]
+ THEN LiteralExpr [LONG] [0]
+
+ ELSE Variable [ Name=$percent_rank_result_delta_raw ]
+
+ END
+Group All
+ GROUP AS Variable [ Name=#1 ]
+ (
+ t1:=Variable [ Name=$t1 ]
+ p:=Variable [ Name=$p ]
+ n:=Variable [ Name=$n ]
+ d:=Variable [ Name=$d ]
+ rank_result_expected:=Variable [ Name=$rank_result_expected ]
+ rank_result_actual:=Variable [ Name=$rank_result_actual ]
+ rank_result_delta:=Variable [ Name=$rank_result_delta ]
+ percent_rank_result_expected:=Variable [ Name=$percent_rank_result_expected ]
+ percent_rank_result_actual:=Variable [ Name=$percent_rank_result_actual ]
+ percent_rank_result_delta_raw:=Variable [ Name=$percent_rank_result_delta_raw ]
+ percent_rank_result_delta:=Variable [ Name=$percent_rank_result_delta ]
+ )
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.4.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.4.ast
new file mode 100644
index 0000000..7330fe9
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.4.ast
@@ -0,0 +1,45 @@
+DataverseUse test
+Query:
+Let Variable [ Name=$P ]
+ :=
+ LiteralExpr [LONG] [4]
+SELECT [
+Variable [ Name=$p ]
+p
+WINDOW test.row_number@0[
+]
+OVER (
+ ORDER BY
+ Variable [ Name=$p ]
+ DESC
+)
+rn
+]
+FROM [ FunctionCall asterix.dataset@1[
+ LiteralExpr [STRING] [test.t1]
+ ]
+ AS Variable [ Name=$t1 ]
+,
+ FunctionCall test.range@2[
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=one
+ ]
+ Variable [ Name=$P ]
+ ]
+ AS Variable [ Name=$p ]
+]
+Groupby
+ Variable [ Name=$p ]
+ :=
+ Variable [ Name=$p ]
+ GROUP AS Variable [ Name=#1 ]
+ (
+ t1:=Variable [ Name=$t1 ]
+ p:=Variable [ Name=$p ]
+ )
+
+Orderby
+ Variable [ Name=$p ]
+ ASC
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.5.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.5.ast
new file mode 100644
index 0000000..cfad0ae
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.5.ast
@@ -0,0 +1,77 @@
+DataverseUse test
+Query:
+Let Variable [ Name=$P ]
+ :=
+ LiteralExpr [LONG] [4]
+SELECT [
+Variable [ Name=$p ]
+p
+(
+ SELECT [
+ FieldAccessor [
+ FieldAccessor [
+ Variable [ Name=$g ]
+ Field=t1
+ ]
+ Field=c1
+ ]
+ c1
+ WINDOW test.row_number@0[
+ ]
+ OVER (
+ ORDER BY
+ FieldAccessor [
+ FieldAccessor [
+ Variable [ Name=$g ]
+ Field=t1
+ ]
+ Field=c2
+ ]
+ DESC
+ )
+ rn
+ ]
+ FROM [ Variable [ Name=$g ]
+ AS Variable [ Name=$g ]
+ ]
+ Orderby
+ FieldAccessor [
+ FieldAccessor [
+ Variable [ Name=$g ]
+ Field=t1
+ ]
+ Field=c1
+ ]
+ ASC
+
+)
+gg
+]
+FROM [ FunctionCall asterix.dataset@1[
+ LiteralExpr [STRING] [test.t1]
+ ]
+ AS Variable [ Name=$t1 ]
+,
+ FunctionCall test.range@2[
+ FieldAccessor [
+ Variable [ Name=$t1 ]
+ Field=one
+ ]
+ Variable [ Name=$P ]
+ ]
+ AS Variable [ Name=$p ]
+]
+Groupby
+ Variable [ Name=$p ]
+ :=
+ Variable [ Name=$p ]
+ GROUP AS Variable [ Name=$g ]
+ (
+ t1:=Variable [ Name=$t1 ]
+ p:=Variable [ Name=$p ]
+ )
+
+Orderby
+ Variable [ Name=$p ]
+ ASC
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.6.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.6.ast
new file mode 100644
index 0000000..94f13a5
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/window/misc_01/misc_01.6.ast
@@ -0,0 +1,50 @@
+DataverseUse test
+Query:
+SELECT [
+FunctionCall asterix.field-access-by-name@2[
+ Variable [ Name=$t1 ]
+ LiteralExpr [STRING] [c1]
+]
+c1
+WINDOW test.array_sum@1[
+ (
+ SELECT ELEMENT [
+ FieldAccessor [
+ FieldAccessor [
+ Variable [ Name=$w ]
+ Field=t1
+ ]
+ Field=c1
+ ]
+ ]
+ FROM [ Variable [ Name=$w ]
+ AS Variable [ Name=$w ]
+ ]
+ )
+]
+ AS Variable [ Name=$w ]
+OVER (
+ PARTITION BY
+ OperatorExpr [
+ FunctionCall asterix.field-access-by-name@2[
+ Variable [ Name=$t1 ]
+ LiteralExpr [STRING] [c2]
+ ]
+ mod
+ LiteralExpr [LONG] [2]
+ ]
+)
+sum
+]
+FROM [ FunctionCall asterix.dataset@1[
+ LiteralExpr [STRING] [test.t1]
+ ]
+ AS Variable [ Name=$t1 ]
+]
+Orderby
+ FunctionCall asterix.field-access-by-name@2[
+ Variable [ Name=$t1 ]
+ LiteralExpr [STRING] [c1]
+ ]
+ ASC
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 39a3c76..7bd1eaf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -9246,6 +9246,11 @@
</compilation-unit>
</test-case>
<test-case FilePath="window">
+ <compilation-unit name="pg_win">
+ <output-dir compare="Text">pg_win</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="window">
<compilation-unit name="rank_01">
<output-dir compare="Text">rank_01</output-dir>
</compilation-unit>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
index 48a9553..aef4a79 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
@@ -7354,4 +7354,11 @@
</compilation-unit>
</test-case>
</test-group>
+ <test-group name="window">
+ <test-case FilePath="window">
+ <compilation-unit name="misc_01">
+ <output-dir compare="AST">misc_01</output-dir>
+ </compilation-unit>
+ </test-case>
+ </test-group>
</test-suite>
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 54fd65c..3d63936 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -183,6 +183,9 @@
public static final int COMPILATION_EXPECTED_FUNCTION_CALL = 1095;
public static final int UNKNOWN_COMPRESSION_SCHEME = 1096;
public static final int UNSUPPORTED_WITH_SUBFIELD = 1097;
+ public static final int COMPILATION_INVALID_WINDOW_FRAME = 1098;
+ public static final int COMPILATION_UNEXPECTED_WINDOW_FRAME = 1099;
+ public static final int COMPILATION_UNEXPECTED_WINDOW_EXPRESSION = 1100;
// Feed errors
public static final int DATAFLOW_ILLEGAL_STATE = 3001;
diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index 7aa9b91..12858ac 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -170,6 +170,9 @@
1095 = Expected function call
1096 = Unknown compression scheme %1$s. Supported schemes are %2$s
1097 = Subfield(s) %1$s in \"%2$s\" unsupported in the with clause
+1098 = Invalid window frame definition
+1099 = Unexpected window frame definition
+1100 = Unexpected window expression
# Feed Errors
3001 = Illegal state.
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
index 967fdae..61cecfb 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.asterix.common.exceptions.CompilationException;
@@ -46,11 +47,13 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.statement.FunctionDecl;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.util.CommonFunctionMapUtil;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.lang.common.visitor.GatherFunctionCallsVisitor;
import org.apache.asterix.metadata.declared.MetadataProvider;
+import org.apache.hyracks.algebricks.common.utils.Pair;
class AqlQueryRewriter implements IQueryRewriter {
@@ -176,8 +179,20 @@
for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
p.getExpr().accept(this, arg);
}
- for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
- p.getExpr().accept(this, arg);
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
+ p.getExpr().accept(this, arg);
+ }
+ }
+ if (gc.hasGroupFieldList()) {
+ for (Pair<Expression, Identifier> p : gc.getGroupFieldList()) {
+ p.first.accept(this, arg);
+ }
+ }
+ if (gc.hasWithMap()) {
+ for (Map.Entry<Expression, VariableExpr> me : gc.getWithVarMap().entrySet()) {
+ me.getKey().accept(this, arg);
+ }
}
return null;
}
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java
index 8d84dbc..59dfbb5 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java
@@ -404,10 +404,14 @@
for (GbyVariableExpressionPair keyPair : gbyClause.getGbyPairList()) {
producedVars.add(keyPair.getVar());
}
- for (GbyVariableExpressionPair keyPair : gbyClause.getDecorPairList()) {
- producedVars.add(keyPair.getVar());
+ if (gbyClause.hasDecorList()) {
+ for (GbyVariableExpressionPair keyPair : gbyClause.getDecorPairList()) {
+ producedVars.add(keyPair.getVar());
+ }
}
- producedVars.addAll(gbyClause.getWithVarMap().values());
+ if (gbyClause.hasWithMap()) {
+ producedVars.addAll(gbyClause.getWithVarMap().values());
+ }
return producedVars;
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
index 6adb050..de5e931 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.lang.common.util;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import org.apache.asterix.common.exceptions.CompilationException;
@@ -97,4 +99,8 @@
throw new CompilationException(ErrorCode.LITERAL_TYPE_NOT_SUPPORTED_IN_CONSTANT_RECORD, literalType);
}
}
+
+ public static <T> Collection<T> emptyIfNull(Collection<T> coll) {
+ return coll == null ? Collections.emptyList() : coll;
+ }
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
index e5cf386..d235883 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/VariableCloneAndSubstitutionUtil.java
@@ -29,6 +29,7 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.rewrites.VariableSubstitutionEnvironment;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.CloneAndSubstituteVariablesVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
@@ -56,6 +57,17 @@
return veList;
}
+ public static List<Pair<Expression, Identifier>> substInFieldList(List<Pair<Expression, Identifier>> fieldList,
+ VariableSubstitutionEnvironment newSubs, CloneAndSubstituteVariablesVisitor visitor)
+ throws CompilationException {
+ List<Pair<Expression, Identifier>> newFieldList = new ArrayList<>(fieldList.size());
+ for (Pair<Expression, Identifier> p : fieldList) {
+ Expression newExpr = (Expression) p.first.accept(visitor, newSubs).first;
+ newFieldList.add(new Pair<>(newExpr, p.second));
+ }
+ return newFieldList;
+ }
+
public static VariableSubstitutionEnvironment eliminateSubstFromList(VariableExpr variableExpr,
VariableSubstitutionEnvironment arg) {
VariableSubstitutionEnvironment newArg = new VariableSubstitutionEnvironment(arg);
@@ -73,5 +85,4 @@
}
return exprs;
}
-
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
index bf9cf89..1aab7f7 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
@@ -19,8 +19,10 @@
package org.apache.asterix.lang.common.visitor;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.exceptions.ErrorCode;
@@ -53,6 +55,7 @@
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.QuantifiedPair;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.AbstractQueryExpressionVisitor;
@@ -204,20 +207,23 @@
@Override
public Boolean visit(GroupbyClause gc, List<FunctionDecl> arg) throws CompilationException {
- boolean changed = false;
- for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
- Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), arg);
- p.setExpr(be.second);
- if (be.first) {
- changed = true;
- }
+ Pair<Boolean, List<GbyVariableExpressionPair>> p1 = inlineUdfsInGbyPairList(gc.getGbyPairList(), arg);
+ gc.setGbyPairList(p1.second);
+ boolean changed = p1.first;
+ if (gc.hasDecorList()) {
+ Pair<Boolean, List<GbyVariableExpressionPair>> p2 = inlineUdfsInGbyPairList(gc.getDecorPairList(), arg);
+ gc.setDecorPairList(p2.second);
+ changed |= p2.first;
}
- for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
- Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), arg);
- p.setExpr(be.second);
- if (be.first) {
- changed = true;
- }
+ if (gc.hasGroupFieldList()) {
+ Pair<Boolean, List<Pair<Expression, Identifier>>> p3 = inlineUdfsInFieldList(gc.getGroupFieldList(), arg);
+ gc.setGroupFieldList(p3.second);
+ changed |= p3.first;
+ }
+ if (gc.hasWithMap()) {
+ Pair<Boolean, Map<Expression, VariableExpr>> p4 = inlineUdfsInVarMap(gc.getWithVarMap(), arg);
+ gc.setWithVarMap(p4.second);
+ changed |= p4.first;
}
return changed;
}
@@ -319,18 +325,52 @@
protected Pair<Boolean, List<Expression>> inlineUdfsInExprList(List<Expression> exprList, List<FunctionDecl> fds)
throws CompilationException {
- ArrayList<Expression> newList = new ArrayList<>();
+ List<Expression> newList = new ArrayList<>(exprList.size());
boolean changed = false;
for (Expression e : exprList) {
- Pair<Boolean, Expression> p = inlineUdfsInExpr(e, fds);
- newList.add(p.second);
- if (p.first) {
- changed = true;
- }
+ Pair<Boolean, Expression> be = inlineUdfsInExpr(e, fds);
+ newList.add(be.second);
+ changed |= be.first;
}
return new Pair<>(changed, newList);
}
+ private Pair<Boolean, List<GbyVariableExpressionPair>> inlineUdfsInGbyPairList(
+ List<GbyVariableExpressionPair> gbyPairList, List<FunctionDecl> fds) throws CompilationException {
+ List<GbyVariableExpressionPair> newList = new ArrayList<>(gbyPairList.size());
+ boolean changed = false;
+ for (GbyVariableExpressionPair p : gbyPairList) {
+ Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), fds);
+ newList.add(new GbyVariableExpressionPair(p.getVar(), be.second));
+ changed |= be.first;
+ }
+ return new Pair<>(changed, newList);
+ }
+
+ protected Pair<Boolean, List<Pair<Expression, Identifier>>> inlineUdfsInFieldList(
+ List<Pair<Expression, Identifier>> fieldList, List<FunctionDecl> fds) throws CompilationException {
+ List<Pair<Expression, Identifier>> newList = new ArrayList<>(fieldList.size());
+ boolean changed = false;
+ for (Pair<Expression, Identifier> p : fieldList) {
+ Pair<Boolean, Expression> be = inlineUdfsInExpr(p.first, fds);
+ newList.add(new Pair<>(be.second, p.second));
+ changed |= be.first;
+ }
+ return new Pair<>(changed, newList);
+ }
+
+ private Pair<Boolean, Map<Expression, VariableExpr>> inlineUdfsInVarMap(Map<Expression, VariableExpr> varMap,
+ List<FunctionDecl> fds) throws CompilationException {
+ Map<Expression, VariableExpr> newMap = new HashMap<>();
+ boolean changed = false;
+ for (Map.Entry<Expression, VariableExpr> me : varMap.entrySet()) {
+ Pair<Boolean, Expression> be = inlineUdfsInExpr(me.getKey(), fds);
+ newMap.put(be.second, me.getValue());
+ changed |= be.first;
+ }
+ return new Pair<>(changed, newMap);
+ }
+
private Expression rewriteFunctionBody(FunctionDecl fnDecl) throws CompilationException {
SourceLocation sourceLoc = fnDecl.getSourceLocation();
Query wrappedQuery = new Query(false);
@@ -363,7 +403,7 @@
}
}
- protected static FunctionDecl findFuncDeclaration(FunctionSignature fid, List<FunctionDecl> sequence) {
+ private static FunctionDecl findFuncDeclaration(FunctionSignature fid, List<FunctionDecl> sequence) {
for (FunctionDecl f : sequence) {
if (f.getSignature().equals(fid)) {
return f;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
index c387a9a..3a19254 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
@@ -101,13 +101,8 @@
newWithMap.put(newKeyVar, newValueVar);
}
}
- List<Pair<Expression, Identifier>> newGroupFieldList = new ArrayList<>();
- if (gc.hasGroupFieldList()) {
- for (Pair<Expression, Identifier> varId : gc.getGroupFieldList()) {
- Expression newExpr = (Expression) varId.first.accept(this, env).first;
- newGroupFieldList.add(new Pair<>(newExpr, varId.second));
- }
- }
+ List<Pair<Expression, Identifier>> newGroupFieldList = gc.hasGroupFieldList()
+ ? VariableCloneAndSubstitutionUtil.substInFieldList(gc.getGroupFieldList(), env, this) : null;
GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, newWithMap, newGroupVar, newGroupFieldList,
gc.hasHashGroupByHint(), gc.isGroupAll());
newGroup.setSourceLocation(gc.getSourceLocation());
@@ -124,7 +119,7 @@
VariableExpr newVar = generateNewVariable(context, t.getVarExpr());
newSubs = VariableCloneAndSubstitutionUtil.eliminateSubstFromList(newVar, newSubs);
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 =
- visitUnnesBindingExpression(t.getExpr(), newSubs);
+ visitUnnestBindingExpression(t.getExpr(), newSubs);
QuantifiedPair t2 = new QuantifiedPair(newVar, (Expression) p1.first);
newPairs.add(t2);
}
@@ -392,7 +387,7 @@
* @return a pair of an ILangExpression and a variable substitution environment.
* @throws CompilationException
*/
- protected Pair<ILangExpression, VariableSubstitutionEnvironment> visitUnnesBindingExpression(Expression expr,
+ protected Pair<ILangExpression, VariableSubstitutionEnvironment> visitUnnestBindingExpression(Expression expr,
VariableSubstitutionEnvironment env) throws CompilationException {
return expr.accept(this, env);
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
index a239df1..1e20c96 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
@@ -20,6 +20,7 @@
*/
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import org.apache.asterix.common.exceptions.CompilationException;
@@ -48,8 +49,10 @@
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.QuantifiedPair;
import org.apache.asterix.lang.common.visitor.base.AbstractQueryExpressionVisitor;
+import org.apache.hyracks.algebricks.common.utils.Pair;
public class GatherFunctionCallsVisitor extends AbstractQueryExpressionVisitor<Void, Void> {
@@ -75,8 +78,20 @@
for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
p.getExpr().accept(this, arg);
}
- for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
- p.getExpr().accept(this, arg);
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
+ p.getExpr().accept(this, arg);
+ }
+ }
+ if (gc.hasGroupFieldList()) {
+ for (Pair<Expression, Identifier> p : gc.getGroupFieldList()) {
+ p.first.accept(this, arg);
+ }
+ }
+ if (gc.hasWithMap()) {
+ for (Map.Entry<Expression, VariableExpr> me : gc.getWithVarMap().entrySet()) {
+ me.getKey().accept(this, arg);
+ }
}
return null;
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/expression/WindowExpression.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/expression/WindowExpression.java
index d1c4e59..42b5605 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/expression/WindowExpression.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/expression/WindowExpression.java
@@ -20,29 +20,62 @@
package org.apache.asterix.lang.sqlpp.expression;
import java.util.List;
+import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.AbstractExpression;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.clause.OrderbyClause;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.struct.Identifier;
+import org.apache.asterix.lang.common.util.ExpressionUtils;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hyracks.algebricks.common.utils.Pair;
public class WindowExpression extends AbstractExpression {
- private Expression expr;
+
+ private FunctionSignature functionSignature;
+ private List<Expression> exprList;
+
private List<Expression> partitionList;
private List<Expression> orderbyList;
private List<OrderbyClause.OrderModifier> orderbyModifierList;
- public WindowExpression(Expression expr, List<Expression> partitionList, List<Expression> orderbyList,
- List<OrderbyClause.OrderModifier> orderbyModifierList) {
- if (expr == null || orderbyList == null) {
+ private FrameMode frameMode;
+ private FrameBoundaryKind frameStartKind;
+ private Expression frameStartExpr;
+ private FrameBoundaryKind frameEndKind;
+ private Expression frameEndExpr;
+ private FrameExclusionKind frameExclusionKind;
+
+ private VariableExpr windowVar;
+ private List<Pair<Expression, Identifier>> windowFieldList;
+
+ public WindowExpression(FunctionSignature functionSignature, List<Expression> exprList,
+ List<Expression> partitionList, List<Expression> orderbyList,
+ List<OrderbyClause.OrderModifier> orderbyModifierList, FrameMode frameMode,
+ FrameBoundaryKind frameStartKind, Expression frameStartExpr, FrameBoundaryKind frameEndKind,
+ Expression frameEndExpr, FrameExclusionKind frameExclusionKind, VariableExpr windowVar,
+ List<Pair<Expression, Identifier>> windowFieldList) {
+ if (functionSignature == null || exprList == null) {
throw new NullPointerException();
}
- this.expr = expr;
+ this.functionSignature = functionSignature;
+ this.exprList = exprList;
this.partitionList = partitionList;
this.orderbyList = orderbyList;
this.orderbyModifierList = orderbyModifierList;
+ this.frameMode = frameMode;
+ this.frameStartKind = frameStartKind;
+ this.frameStartExpr = frameStartExpr;
+ this.frameEndKind = frameEndKind;
+ this.frameEndExpr = frameEndExpr;
+ this.frameExclusionKind = frameExclusionKind;
+ this.windowVar = windowVar;
+ this.windowFieldList = windowFieldList;
}
@Override
@@ -50,15 +83,26 @@
return Kind.WINDOW_EXPRESSION;
}
- public Expression getExpr() {
- return expr;
+ public FunctionSignature getFunctionSignature() {
+ return functionSignature;
}
- public void setExpr(Expression expr) {
- if (expr == null) {
+ public void setFunctionSignature(FunctionSignature functionSignature) {
+ if (functionSignature == null) {
throw new NullPointerException();
}
- this.expr = expr;
+ this.functionSignature = functionSignature;
+ }
+
+ public List<Expression> getExprList() {
+ return exprList;
+ }
+
+ public void setExprList(List<Expression> exprList) {
+ if (exprList == null) {
+ throw new NullPointerException();
+ }
+ this.exprList = exprList;
}
public boolean hasPartitionList() {
@@ -70,20 +114,18 @@
}
public void setPartitionList(List<Expression> partitionList) {
- if (partitionList == null) {
- throw new NullPointerException();
- }
this.partitionList = partitionList;
}
+ public boolean hasOrderByList() {
+ return orderbyList != null && !orderbyList.isEmpty();
+ }
+
public List<Expression> getOrderbyList() {
return orderbyList;
}
public void setOrderbyList(List<Expression> orderbyList) {
- if (orderbyList == null) {
- throw new NullPointerException();
- }
this.orderbyList = orderbyList;
}
@@ -92,14 +134,235 @@
}
public void setOrderbyModifierList(List<OrderbyClause.OrderModifier> orderbyModifierList) {
- if (orderbyModifierList == null) {
- throw new NullPointerException();
- }
this.orderbyModifierList = orderbyModifierList;
}
+ public boolean hasFrameDefinition() {
+ return frameMode != null;
+ }
+
+ public FrameMode getFrameMode() {
+ return frameMode;
+ }
+
+ public void setFrameMode(FrameMode frameMode) {
+ this.frameMode = frameMode;
+ }
+
+ public FrameBoundaryKind getFrameStartKind() {
+ return frameStartKind;
+ }
+
+ public void setFrameStartKind(FrameBoundaryKind frameStartKind) {
+ this.frameStartKind = frameStartKind;
+ }
+
+ public boolean hasFrameStartExpr() {
+ return frameStartExpr != null;
+ }
+
+ public Expression getFrameStartExpr() {
+ return frameStartExpr;
+ }
+
+ public void setFrameStartExpr(Expression frameStartExpr) {
+ this.frameStartExpr = frameStartExpr;
+ }
+
+ public FrameBoundaryKind getFrameEndKind() {
+ return frameEndKind;
+ }
+
+ public void setFrameEndKind(FrameBoundaryKind frameEndKind) {
+ this.frameEndKind = frameEndKind;
+ }
+
+ public boolean hasFrameEndExpr() {
+ return frameEndExpr != null;
+ }
+
+ public Expression getFrameEndExpr() {
+ return frameEndExpr;
+ }
+
+ public void setFrameEndExpr(Expression frameEndExpr) {
+ this.frameEndExpr = frameEndExpr;
+ }
+
+ public FrameExclusionKind getFrameExclusionKind() {
+ return frameExclusionKind;
+ }
+
+ public void setFrameExclusionKind(FrameExclusionKind frameExclusionKind) {
+ this.frameExclusionKind = frameExclusionKind;
+ }
+
+ public boolean hasWindowVar() {
+ return windowVar != null;
+ }
+
+ public VariableExpr getWindowVar() {
+ return windowVar;
+ }
+
+ public void setWindowVar(VariableExpr windowVar) {
+ this.windowVar = windowVar;
+ }
+
+ public boolean hasWindowFieldList() {
+ return windowFieldList != null && !windowFieldList.isEmpty();
+ }
+
+ public List<Pair<Expression, Identifier>> getWindowFieldList() {
+ return windowFieldList;
+ }
+
+ public void setWindowFieldList(List<Pair<Expression, Identifier>> windowFieldList) {
+ this.windowFieldList = windowFieldList;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(functionSignature, exprList, ExpressionUtils.emptyIfNull(partitionList),
+ ExpressionUtils.emptyIfNull(orderbyList), ExpressionUtils.emptyIfNull(orderbyModifierList), frameMode,
+ frameStartKind, frameStartExpr, frameEndKind, frameEndExpr, frameExclusionKind, windowVar,
+ ExpressionUtils.emptyIfNull(windowFieldList));
+ }
+
+ @Override
+ @SuppressWarnings("squid:S1067") // expressions should not be too complex
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (!(object instanceof WindowExpression)) {
+ return false;
+ }
+ WindowExpression target = (WindowExpression) object;
+ return Objects.equals(functionSignature, target.functionSignature) && Objects.equals(exprList, target.exprList)
+ && Objects.equals(ExpressionUtils.emptyIfNull(partitionList),
+ ExpressionUtils.emptyIfNull(target.partitionList))
+ && Objects.equals(ExpressionUtils.emptyIfNull(orderbyList),
+ ExpressionUtils.emptyIfNull(target.orderbyList))
+ && Objects.equals(ExpressionUtils.emptyIfNull(orderbyModifierList),
+ ExpressionUtils.emptyIfNull(target.orderbyModifierList))
+ && frameMode == target.frameMode && frameStartKind == target.frameStartKind
+ && Objects.equals(frameStartExpr, target.frameStartExpr) && frameEndKind == target.frameEndKind
+ && Objects.equals(frameEndExpr, target.frameEndExpr) && frameExclusionKind == target.frameExclusionKind
+ && Objects.equals(windowVar, target.windowVar)
+ && Objects.equals(ExpressionUtils.emptyIfNull(windowFieldList),
+ ExpressionUtils.emptyIfNull(target.windowFieldList));
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("WINDOW ");
+ sb.append(functionSignature);
+ sb.append('(');
+ sb.append(StringUtils.join(exprList, ','));
+ sb.append(") OVER ");
+ if (hasWindowVar()) {
+ sb.append(windowVar);
+ if (hasWindowFieldList()) {
+ sb.append('{');
+ for (int i = 0, ln = windowFieldList.size(); i < ln; i++) {
+ if (i > 0) {
+ sb.append(',');
+ }
+ Pair<Expression, Identifier> p = windowFieldList.get(i);
+ sb.append(p.first).append(':').append(p.second);
+ }
+ sb.append('}');
+ }
+ sb.append(" AS ");
+ }
+ sb.append('(');
+ if (hasPartitionList()) {
+ sb.append(" PARTITION BY ");
+ sb.append(StringUtils.join(partitionList, ','));
+ }
+ if (hasOrderByList()) {
+ sb.append(" ORDER BY ");
+ for (int i = 0, ln = orderbyList.size(); i < ln; i++) {
+ if (i > 0) {
+ sb.append(',');
+ }
+ sb.append(orderbyList.get(i)).append(' ').append(orderbyModifierList.get(i));
+ }
+ }
+ if (hasFrameDefinition()) {
+ sb.append(" FRAME ").append(frameMode);
+ sb.append(" BETWEEN ").append(frameStartKind);
+ if (hasFrameStartExpr()) {
+ sb.append(' ').append(frameStartExpr);
+ }
+ sb.append(" AND ").append(frameEndKind);
+ if (hasFrameEndExpr()) {
+ sb.append(' ').append(frameEndExpr);
+ }
+ sb.append(" EXCLUDE ").append(frameExclusionKind);
+ }
+ sb.append(')');
+ return sb.toString();
+ }
+
@Override
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException {
return ((ISqlppVisitor<R, T>) visitor).visit(this, arg);
}
+
+ public enum FrameMode {
+ RANGE("range"),
+ ROWS("rows"),
+ GROUPS("groups");
+
+ private String text;
+
+ FrameMode(String text) {
+ this.text = text;
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+ }
+
+ public enum FrameBoundaryKind {
+ CURRENT_ROW("current row"),
+ UNBOUNDED_PRECEDING("unbounded preceding"),
+ UNBOUNDED_FOLLOWING("unbounded following"),
+ BOUNDED_PRECEDING("preceding"),
+ BOUNDED_FOLLOWING("following");
+
+ private String text;
+
+ FrameBoundaryKind(String text) {
+ this.text = text;
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+ }
+
+ public enum FrameExclusionKind {
+ CURRENT_ROW("current row"),
+ GROUP("group"),
+ TIES("ties"),
+ NO_OTHERS("no others");
+
+ private String text;
+
+ FrameExclusionKind(String text) {
+ this.text = text;
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+ }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java
index fa4018a..bde40de 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java
@@ -46,6 +46,9 @@
// Group-by core rewrites
rewriteGroupBys();
+ // Window expression core rewrites.
+ rewriteWindowExpressions();
+
// Rewrites set operations.
rewriteSetOperations();
@@ -58,6 +61,9 @@
// Rewrites SQL-92 global aggregations.
rewriteGroupByAggregationSugar();
+ // Rewrite window expression aggregations.
+ rewriteWindowAggregationSugar();
+
// Rewrites like/not-like expressions.
rewriteOperatorExpression();
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
index b785cbd..69a3e5e 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
@@ -23,6 +23,9 @@
import java.util.List;
import java.util.Set;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.Expression;
@@ -32,9 +35,11 @@
import org.apache.asterix.lang.common.expression.CallExpr;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.statement.FunctionDecl;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.lang.common.visitor.GatherFunctionCallsVisitor;
+import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
import org.apache.asterix.lang.sqlpp.clause.FromClause;
import org.apache.asterix.lang.sqlpp.clause.FromTerm;
@@ -65,14 +70,21 @@
import org.apache.asterix.lang.sqlpp.rewrites.visitor.SqlppGroupByVisitor;
import org.apache.asterix.lang.sqlpp.rewrites.visitor.SqlppInlineUdfsVisitor;
import org.apache.asterix.lang.sqlpp.rewrites.visitor.SqlppListInputFunctionRewriteVisitor;
+import org.apache.asterix.lang.sqlpp.rewrites.visitor.SqlppWindowRewriteVisitor;
+import org.apache.asterix.lang.sqlpp.rewrites.visitor.SqlppWindowAggregationSugarVisitor;
import org.apache.asterix.lang.sqlpp.rewrites.visitor.SubstituteGroupbyExpressionWithVariableVisitor;
import org.apache.asterix.lang.sqlpp.rewrites.visitor.VariableCheckAndRewriteVisitor;
import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
+import org.apache.asterix.lang.sqlpp.util.SqlppAstPrintUtil;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
import org.apache.asterix.metadata.declared.MetadataProvider;
+import org.apache.hyracks.algebricks.common.utils.Pair;
public class SqlppQueryRewriter implements IQueryRewriter {
+
+ private static final Logger LOGGER = LogManager.getLogger(SqlppQueryRewriter.class);
+
public static final String INLINE_WITH_OPTION = "inline_with";
private static final boolean INLINE_WITH_OPTION_DEFAULT = true;
private final FunctionParser functionRepository = new FunctionParser(new SqlppParserFactory());
@@ -81,14 +93,18 @@
private LangRewritingContext context;
private MetadataProvider metadataProvider;
private Collection<VarIdentifier> externalVars;
+ private boolean isLogEnabled;
protected void setup(List<FunctionDecl> declaredFunctions, IReturningStatement topExpr,
- MetadataProvider metadataProvider, LangRewritingContext context, Collection<VarIdentifier> externalVars) {
+ MetadataProvider metadataProvider, LangRewritingContext context, Collection<VarIdentifier> externalVars)
+ throws CompilationException {
this.topExpr = topExpr;
this.context = context;
this.declaredFunctions = declaredFunctions;
this.metadataProvider = metadataProvider;
this.externalVars = externalVars;
+ this.isLogEnabled = LOGGER.isTraceEnabled();
+ logExpression("Starting AST rewrites on", "");
}
@Override
@@ -117,12 +133,18 @@
// Inlines column aliases.
inlineColumnAlias();
+ // Window expression core rewrites.
+ rewriteWindowExpressions();
+
// Generate ids for variables (considering scopes) and replace global variable access with the dataset function.
variableCheckAndRewrite();
// Rewrites SQL-92 aggregate functions
rewriteGroupByAggregationSugar();
+ // Rewrite window expression aggregations.
+ rewriteWindowAggregationSugar();
+
// Rewrites like/not-like expressions.
rewriteOperatorExpression();
@@ -150,23 +172,23 @@
protected void rewriteGroupByAggregationSugar() throws CompilationException {
SqlppGroupByAggregationSugarVisitor visitor = new SqlppGroupByAggregationSugarVisitor(context);
- topExpr.accept(visitor, null);
+ rewriteTopExpr(visitor, null);
}
protected void rewriteDistinctAggregations() throws CompilationException {
SqlppDistinctAggregationSugarVisitor distinctAggregationVisitor =
new SqlppDistinctAggregationSugarVisitor(context);
- topExpr.accept(distinctAggregationVisitor, null);
+ rewriteTopExpr(distinctAggregationVisitor, null);
}
protected void rewriteListInputFunctions() throws CompilationException {
SqlppListInputFunctionRewriteVisitor listInputFunctionVisitor = new SqlppListInputFunctionRewriteVisitor();
- topExpr.accept(listInputFunctionVisitor, null);
+ rewriteTopExpr(listInputFunctionVisitor, null);
}
protected void rewriteFunctionNames() throws CompilationException {
SqlppBuiltinFunctionRewriteVisitor functionNameMapVisitor = new SqlppBuiltinFunctionRewriteVisitor();
- topExpr.accept(functionNameMapVisitor, null);
+ rewriteTopExpr(functionNameMapVisitor, null);
}
protected void inlineWithExpressions() throws CompilationException {
@@ -175,49 +197,60 @@
}
// Inlines with expressions.
InlineWithExpressionVisitor inlineWithExpressionVisitor = new InlineWithExpressionVisitor(context);
- topExpr.accept(inlineWithExpressionVisitor, null);
+ rewriteTopExpr(inlineWithExpressionVisitor, null);
}
protected void generateColumnNames() throws CompilationException {
// Generate column names if they are missing in the user query.
GenerateColumnNameVisitor generateColumnNameVisitor = new GenerateColumnNameVisitor(context);
- topExpr.accept(generateColumnNameVisitor, null);
+ rewriteTopExpr(generateColumnNameVisitor, null);
}
protected void substituteGroupbyKeyExpression() throws CompilationException {
// Substitute group-by key expressions that appear in the select clause.
SubstituteGroupbyExpressionWithVariableVisitor substituteGbyExprVisitor =
new SubstituteGroupbyExpressionWithVariableVisitor(context);
- topExpr.accept(substituteGbyExprVisitor, null);
+ rewriteTopExpr(substituteGbyExprVisitor, null);
}
protected void rewriteSetOperations() throws CompilationException {
// Rewrites set operation queries that contain order-by and limit clauses.
SetOperationVisitor setOperationVisitor = new SetOperationVisitor(context);
- topExpr.accept(setOperationVisitor, null);
+ rewriteTopExpr(setOperationVisitor, null);
}
protected void rewriteOperatorExpression() throws CompilationException {
// Rewrites like/not-like/in/not-in operators into function call expressions.
OperatorExpressionVisitor operatorExpressionVisitor = new OperatorExpressionVisitor(context);
- topExpr.accept(operatorExpressionVisitor, null);
+ rewriteTopExpr(operatorExpressionVisitor, null);
}
protected void inlineColumnAlias() throws CompilationException {
// Inline column aliases.
InlineColumnAliasVisitor inlineColumnAliasVisitor = new InlineColumnAliasVisitor(context);
- topExpr.accept(inlineColumnAliasVisitor, null);
+ rewriteTopExpr(inlineColumnAliasVisitor, null);
}
protected void variableCheckAndRewrite() throws CompilationException {
VariableCheckAndRewriteVisitor variableCheckAndRewriteVisitor =
new VariableCheckAndRewriteVisitor(context, metadataProvider, externalVars);
- topExpr.accept(variableCheckAndRewriteVisitor, null);
+ rewriteTopExpr(variableCheckAndRewriteVisitor, null);
}
protected void rewriteGroupBys() throws CompilationException {
SqlppGroupByVisitor groupByVisitor = new SqlppGroupByVisitor(context);
- topExpr.accept(groupByVisitor, null);
+ rewriteTopExpr(groupByVisitor, null);
+ }
+
+ protected void rewriteWindowExpressions() throws CompilationException {
+ // Create window variables and extract aggregation inputs into LET clauses
+ SqlppWindowRewriteVisitor windowVisitor = new SqlppWindowRewriteVisitor(context);
+ rewriteTopExpr(windowVisitor, null);
+ }
+
+ protected void rewriteWindowAggregationSugar() throws CompilationException {
+ SqlppWindowAggregationSugarVisitor windowVisitor = new SqlppWindowAggregationSugarVisitor(context);
+ rewriteTopExpr(windowVisitor, null);
}
protected void inlineDeclaredUdfs(boolean inlineUdfs) throws CompilationException {
@@ -238,13 +271,25 @@
SqlppInlineUdfsVisitor visitor = new SqlppInlineUdfsVisitor(context,
new SqlppFunctionBodyRewriterFactory() /* the rewriter for function bodies expressions*/,
declaredFunctions, metadataProvider);
- while (topExpr.accept(visitor, declaredFunctions)) {
+ while (rewriteTopExpr(visitor, declaredFunctions)) {
// loop until no more changes
}
}
declaredFunctions.removeAll(usedStoredFunctionDecls);
}
+ private <R, T> R rewriteTopExpr(ILangVisitor<R, T> visitor, T arg) throws CompilationException {
+ R result = topExpr.accept(visitor, arg);
+ logExpression(">>>> AST After", visitor.getClass().getSimpleName());
+ return result;
+ }
+
+ private void logExpression(String p0, String p1) throws CompilationException {
+ if (isLogEnabled) {
+ LOGGER.trace("{} {}\n{}", p0, p1, SqlppAstPrintUtil.toString(topExpr));
+ }
+ }
+
@Override
public Set<CallExpr> getFunctionCalls(Expression expression) throws CompilationException {
GatherFunctionCalls gfc = new GatherFunctionCalls();
@@ -396,13 +441,28 @@
@Override
public Void visit(WindowExpression winExpr, Void arg) throws CompilationException {
- winExpr.getExpr().accept(this, arg);
if (winExpr.hasPartitionList()) {
for (Expression expr : winExpr.getPartitionList()) {
expr.accept(this, arg);
}
}
- for (Expression expr : winExpr.getOrderbyList()) {
+ if (winExpr.hasOrderByList()) {
+ for (Expression expr : winExpr.getOrderbyList()) {
+ expr.accept(this, arg);
+ }
+ }
+ if (winExpr.hasFrameStartExpr()) {
+ winExpr.getFrameStartExpr().accept(this, arg);
+ }
+ if (winExpr.hasFrameEndExpr()) {
+ winExpr.getFrameEndExpr().accept(this, arg);
+ }
+ if (winExpr.hasWindowFieldList()) {
+ for (Pair<Expression, Identifier> p : winExpr.getWindowFieldList()) {
+ p.first.accept(this, arg);
+ }
+ }
+ for (Expression expr : winExpr.getExprList()) {
expr.accept(this, arg);
}
return null;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/AbstractSqlppExpressionExtractionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/AbstractSqlppExpressionExtractionVisitor.java
new file mode 100644
index 0000000..b78cd9c
--- /dev/null
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/AbstractSqlppExpressionExtractionVisitor.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.lang.sqlpp.rewrites.visitor;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.List;
+
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.clause.LetClause;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.common.struct.VarIdentifier;
+import org.apache.asterix.lang.sqlpp.clause.FromClause;
+import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.api.exceptions.SourceLocation;
+
+/**
+ * Base class for visitors that extract expressions into LET clauses.
+ * Subclasses should call {@link #extractExpressions(List, int, SourceLocation)} to perform the extraction.
+ */
+abstract class AbstractSqlppExpressionExtractionVisitor extends AbstractSqlppSimpleExpressionVisitor {
+
+ protected final LangRewritingContext context;
+
+ private final Deque<List<Pair<Expression, VarIdentifier>>> stack = new ArrayDeque<>();
+
+ AbstractSqlppExpressionExtractionVisitor(LangRewritingContext context) {
+ this.context = context;
+ }
+
+ @Override
+ public Expression visit(SelectBlock selectBlock, ILangExpression arg) throws CompilationException {
+ List<Pair<Expression, VarIdentifier>> extractionList = new ArrayList<>();
+ stack.push(extractionList);
+
+ if (selectBlock.hasFromClause()) {
+ FromClause clause = selectBlock.getFromClause();
+ clause.accept(this, arg);
+ if (!extractionList.isEmpty()) {
+ handleUnsupportedClause(clause, extractionList);
+ }
+ }
+ List<LetClause> letList = selectBlock.getLetList();
+ if (selectBlock.hasLetClauses()) {
+ visitLetClauses(letList, extractionList, arg);
+ }
+ if (selectBlock.hasWhereClause()) {
+ selectBlock.getWhereClause().accept(this, arg);
+ introduceLetClauses(extractionList, letList);
+ }
+ if (selectBlock.hasGroupbyClause()) {
+ selectBlock.getGroupbyClause().accept(this, arg);
+ introduceLetClauses(extractionList, letList);
+ }
+ List<LetClause> letListAfterGby = selectBlock.getLetListAfterGroupby();
+ if (selectBlock.hasLetClausesAfterGroupby()) {
+ visitLetClauses(letListAfterGby, extractionList, arg);
+ }
+ if (selectBlock.hasHavingClause()) {
+ selectBlock.getHavingClause().accept(this, arg);
+ introduceLetClauses(extractionList, letListAfterGby);
+ }
+ selectBlock.getSelectClause().accept(this, arg);
+ introduceLetClauses(extractionList, selectBlock.hasGroupbyClause() ? letListAfterGby : letList);
+
+ stack.pop();
+ return null;
+ }
+
+ private void visitLetClauses(List<LetClause> letList, List<Pair<Expression, VarIdentifier>> extractionList,
+ ILangExpression arg) throws CompilationException {
+ List<LetClause> newLetList = new ArrayList<>(letList.size());
+ for (LetClause letClause : letList) {
+ letClause.accept(this, arg);
+ introduceLetClauses(extractionList, newLetList);
+ newLetList.add(letClause);
+ }
+ if (newLetList.size() > letList.size()) {
+ letList.clear();
+ letList.addAll(newLetList);
+ }
+ }
+
+ private void introduceLetClauses(List<Pair<Expression, VarIdentifier>> fromBindingList, List<LetClause> toLetList) {
+ for (Pair<Expression, VarIdentifier> p : fromBindingList) {
+ Expression bindExpr = p.first;
+ VarIdentifier var = p.second;
+ VariableExpr varExpr = new VariableExpr(var);
+ varExpr.setSourceLocation(bindExpr.getSourceLocation());
+ toLetList.add(new LetClause(varExpr, bindExpr));
+ context.addExcludedForFieldAccessVar(var);
+ }
+ fromBindingList.clear();
+ }
+
+ List<Expression> extractExpressions(List<Expression> exprList, int limit, SourceLocation sourceLocation)
+ throws CompilationException {
+ List<Pair<Expression, VarIdentifier>> outLetList = stack.peek();
+ if (outLetList == null) {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLocation);
+ }
+ int n = exprList.size();
+ List<Expression> newExprList = new ArrayList<>(n);
+ for (int i = 0; i < n; i++) {
+ Expression expr = exprList.get(i);
+ Expression newExpr;
+ if (i < limit && isExtractableExpression(expr)) {
+ VarIdentifier v = context.newVariable();
+ VariableExpr vExpr = new VariableExpr(v);
+ vExpr.setSourceLocation(expr.getSourceLocation());
+ outLetList.add(new Pair<>(expr, v));
+ newExpr = vExpr;
+ } else {
+ newExpr = expr;
+ }
+ newExprList.add(newExpr);
+ }
+ return newExprList;
+ }
+
+ abstract boolean isExtractableExpression(Expression expr);
+
+ abstract void handleUnsupportedClause(FromClause clause, List<Pair<Expression, VarIdentifier>> extractionList)
+ throws CompilationException;
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/Sql92AggregateFunctionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/Sql92AggregateFunctionVisitor.java
new file mode 100644
index 0000000..2be752d
--- /dev/null
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/Sql92AggregateFunctionVisitor.java
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.lang.sqlpp.rewrites.visitor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.expression.CallExpr;
+import org.apache.asterix.lang.common.expression.FieldAccessor;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.common.struct.Identifier;
+import org.apache.asterix.lang.common.struct.VarIdentifier;
+import org.apache.asterix.lang.sqlpp.clause.FromClause;
+import org.apache.asterix.lang.sqlpp.clause.FromTerm;
+import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
+import org.apache.asterix.lang.sqlpp.clause.SelectClause;
+import org.apache.asterix.lang.sqlpp.clause.SelectElement;
+import org.apache.asterix.lang.sqlpp.clause.SelectSetOperation;
+import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
+import org.apache.asterix.lang.sqlpp.struct.SetOperationInput;
+import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
+import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
+import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
+
+/**
+ * Rewrites SQL-92 aggregate function into a SQL++ core aggregate function. <br/>
+ * For example
+ * <code>SUM(e.salary + i.bonus)</code>
+ * is turned into
+ * <code>array_sum( (FROM g AS gi SELECT ELEMENT gi.e.salary + gi.i.bonus) )</code>
+ * where <code>g</code> is a 'group as' variable
+ */
+class Sql92AggregateFunctionVisitor extends AbstractSqlppSimpleExpressionVisitor {
+
+ private final LangRewritingContext context;
+
+ private final Expression groupVar;
+
+ private final Map<Expression, Identifier> fieldVars;
+
+ private final Collection<VariableExpr> outerVars;
+
+ Sql92AggregateFunctionVisitor(LangRewritingContext context, VariableExpr groupVar,
+ Map<Expression, Identifier> fieldVars, Collection<VariableExpr> outerVars) {
+ this.context = context;
+ this.groupVar = groupVar;
+ this.fieldVars = fieldVars;
+ this.outerVars = outerVars;
+ }
+
+ @Override
+ public Expression visit(CallExpr callExpr, ILangExpression arg) throws CompilationException {
+ List<Expression> newExprList = new ArrayList<>();
+ FunctionSignature signature = callExpr.getFunctionSignature();
+ boolean aggregate = FunctionMapUtil.isSql92AggregateFunction(signature);
+ boolean rewritten = false;
+ for (Expression expr : callExpr.getExprList()) {
+ Expression newExpr =
+ aggregate ? wrapAggregationArgument(expr, groupVar, fieldVars, outerVars, context) : expr;
+ rewritten |= newExpr != expr;
+ newExprList.add(newExpr.accept(this, arg));
+ }
+ if (rewritten) {
+ // Rewrites the SQL-92 function name to core functions,
+ // e.g., SUM --> array_sum
+ callExpr.setFunctionSignature(FunctionMapUtil.sql92ToCoreAggregateFunction(signature));
+ }
+ callExpr.setExprList(newExprList);
+ return callExpr;
+ }
+
+ static Expression wrapAggregationArgument(Expression expr, Expression groupVar,
+ Map<Expression, Identifier> fieldVars, Collection<VariableExpr> outerVars, LangRewritingContext context)
+ throws CompilationException {
+ SourceLocation sourceLoc = expr.getSourceLocation();
+ Set<VariableExpr> freeVars = SqlppRewriteUtil.getFreeVariable(expr);
+
+ VariableExpr fromBindingVar = new VariableExpr(context.newVariable());
+ fromBindingVar.setSourceLocation(sourceLoc);
+ FromTerm fromTerm = new FromTerm(groupVar, fromBindingVar, null, null);
+ fromTerm.setSourceLocation(sourceLoc);
+ FromClause fromClause = new FromClause(Collections.singletonList(fromTerm));
+ fromClause.setSourceLocation(sourceLoc);
+
+ // Maps field variable expressions to field accesses.
+ Map<Expression, Expression> varExprMap = new HashMap<>();
+ for (VariableExpr usedVar : freeVars) {
+ // Reference to a field in the group variable.
+ if (fieldVars.containsKey(usedVar)) {
+ // Rewrites to a reference to a field in the group variable.
+ FieldAccessor fa =
+ new FieldAccessor(fromBindingVar, new VarIdentifier(fieldVars.get(usedVar).getValue()));
+ fa.setSourceLocation(usedVar.getSourceLocation());
+ varExprMap.put(usedVar, fa);
+ } else if (outerVars.contains(usedVar)) {
+ // Do nothing
+ } else {
+ // Rewrites to a reference to a single field in the group variable.
+ Identifier ident = findField(fieldVars, usedVar, context);
+ FieldAccessor faInner = new FieldAccessor(fromBindingVar, ident);
+ faInner.setSourceLocation(usedVar.getSourceLocation());
+ FieldAccessor faOuter =
+ new FieldAccessor(faInner, SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar()));
+ faOuter.setSourceLocation(usedVar.getSourceLocation());
+ varExprMap.put(usedVar, faOuter);
+ }
+ }
+
+ // Select clause.
+ SelectElement selectElement =
+ new SelectElement(SqlppRewriteUtil.substituteExpression(expr, varExprMap, context));
+ selectElement.setSourceLocation(sourceLoc);
+ SelectClause selectClause = new SelectClause(selectElement, null, false);
+ selectClause.setSourceLocation(sourceLoc);
+
+ // Construct the select expression.
+ SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, null, null, null, null);
+ selectBlock.setSourceLocation(sourceLoc);
+ SelectSetOperation selectSetOperation = new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
+ selectSetOperation.setSourceLocation(sourceLoc);
+ SelectExpression selectExpr = new SelectExpression(null, selectSetOperation, null, null, true);
+ selectExpr.setSourceLocation(sourceLoc);
+ return selectExpr;
+ }
+
+ private static Identifier findField(Map<Expression, Identifier> fieldVars, VariableExpr usedVar,
+ LangRewritingContext context) throws CompilationException {
+ Identifier ident = null;
+ for (Map.Entry<Expression, Identifier> me : fieldVars.entrySet()) {
+ Expression fieldVarExpr = me.getKey();
+ if (fieldVarExpr.getKind() == Expression.Kind.VARIABLE_EXPRESSION
+ && context.isExcludedForFieldAccessVar(((VariableExpr) fieldVarExpr).getVar())) {
+ continue;
+ }
+ if (ident != null) {
+ throw new CompilationException(ErrorCode.AMBIGUOUS_IDENTIFIER, usedVar.getSourceLocation(),
+ SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar().getValue()).getValue());
+ }
+ ident = me.getValue();
+ }
+ if (ident == null) {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, usedVar.getSourceLocation());
+ }
+ return ident;
+ }
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java
index abfa14e..82284f3 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java
@@ -31,6 +31,7 @@
import org.apache.asterix.lang.common.literal.TrueLiteral;
import org.apache.asterix.lang.common.struct.OperatorType;
import org.apache.asterix.lang.sqlpp.expression.CaseExpression;
+import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
@@ -41,15 +42,16 @@
@Override
public Expression visit(CallExpr callExpr, ILangExpression arg) throws CompilationException {
//TODO(buyingyi): rewrite SQL temporal functions
- FunctionSignature functionSignature = callExpr.getFunctionSignature();
- callExpr.setFunctionSignature(FunctionMapUtil.normalizeBuiltinFunctionSignature(functionSignature, true,
- callExpr.getSourceLocation()));
- List<Expression> newExprList = new ArrayList<>();
- for (Expression expr : callExpr.getExprList()) {
- newExprList.add(expr.accept(this, arg));
- }
- callExpr.setExprList(newExprList);
- return callExpr;
+ callExpr.setFunctionSignature(FunctionMapUtil.normalizeBuiltinFunctionSignature(callExpr.getFunctionSignature(),
+ true, callExpr.getSourceLocation()));
+ return super.visit(callExpr, arg);
+ }
+
+ @Override
+ public Expression visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
+ winExpr.setFunctionSignature(FunctionMapUtil.normalizeBuiltinFunctionSignature(winExpr.getFunctionSignature(),
+ true, winExpr.getSourceLocation()));
+ return super.visit(winExpr, arg);
}
@Override
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
index a73d44e..1c55f99 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
@@ -19,42 +19,28 @@
package org.apache.asterix.lang.sqlpp.rewrites.visitor;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.common.exceptions.ErrorCode;
-import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.ILangExpression;
import org.apache.asterix.lang.common.clause.GroupbyClause;
import org.apache.asterix.lang.common.clause.LetClause;
import org.apache.asterix.lang.common.clause.LimitClause;
import org.apache.asterix.lang.common.clause.OrderbyClause;
-import org.apache.asterix.lang.common.expression.CallExpr;
-import org.apache.asterix.lang.common.expression.FieldAccessor;
import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.struct.Identifier;
-import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.sqlpp.clause.FromClause;
-import org.apache.asterix.lang.sqlpp.clause.FromTerm;
import org.apache.asterix.lang.sqlpp.clause.HavingClause;
import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
import org.apache.asterix.lang.sqlpp.clause.SelectClause;
-import org.apache.asterix.lang.sqlpp.clause.SelectElement;
-import org.apache.asterix.lang.sqlpp.clause.SelectSetOperation;
import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
-import org.apache.asterix.lang.sqlpp.struct.SetOperationInput;
-import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
-import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
-import org.apache.hyracks.algebricks.common.utils.Pair;
-import org.apache.hyracks.api.exceptions.SourceLocation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -198,11 +184,14 @@
// is not able to optimize the latter case. The following query is such an example:
// asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11
List<GbyVariableExpressionPair> decorList = new ArrayList<>();
+ if (groupbyClause.hasDecorList()) {
+ decorList.addAll(groupbyClause.getDecorPairList());
+ }
for (VariableExpr var : decorVars) {
decorList.add(new GbyVariableExpressionPair((VariableExpr) SqlppRewriteUtil.deepCopy(var),
(Expression) SqlppRewriteUtil.deepCopy(var)));
}
- groupbyClause.getDecorPairList().addAll(decorList);
+ groupbyClause.setDecorPairList(decorList);
}
} else {
selectBlock.getSelectClause().accept(this, arg);
@@ -211,110 +200,15 @@
}
private Map<Expression, Identifier> getGroupFieldVariables(GroupbyClause groupbyClause) {
- Map<Expression, Identifier> fieldVars = new HashMap<>();
- for (Pair<Expression, Identifier> groupField : groupbyClause.getGroupFieldList()) {
- fieldVars.put(groupField.first, groupField.second);
- }
- return fieldVars;
+ return groupbyClause.hasGroupFieldList()
+ ? SqlppVariableUtil.createFieldVariableMap(groupbyClause.getGroupFieldList()) : Collections.emptyMap();
}
// Applying sugar rewriting for group-by.
private void rewriteExpressionUsingGroupVariable(VariableExpr groupVar, Map<Expression, Identifier> fieldVars,
ILangExpression expr, Set<VariableExpr> outerScopeVariables) throws CompilationException {
Sql92AggregateFunctionVisitor visitor =
- new Sql92AggregateFunctionVisitor(groupVar, fieldVars, outerScopeVariables);
+ new Sql92AggregateFunctionVisitor(context, groupVar, fieldVars, outerScopeVariables);
expr.accept(visitor, null);
}
-
- private final class Sql92AggregateFunctionVisitor extends AbstractSqlppSimpleExpressionVisitor {
-
- private final Expression groupVar;
-
- private final Map<Expression, Identifier> fieldVars;
-
- private final Collection<VariableExpr> outerVars;
-
- private Sql92AggregateFunctionVisitor(Expression groupVar, Map<Expression, Identifier> fieldVars,
- Collection<VariableExpr> outerVars) {
- this.groupVar = groupVar;
- this.fieldVars = fieldVars;
- this.outerVars = outerVars;
- }
-
- @Override
- public Expression visit(CallExpr callExpr, ILangExpression arg) throws CompilationException {
- List<Expression> newExprList = new ArrayList<>();
- FunctionSignature signature = callExpr.getFunctionSignature();
- boolean aggregate = FunctionMapUtil.isSql92AggregateFunction(signature);
- boolean rewritten = false;
- for (Expression expr : callExpr.getExprList()) {
- Expression newExpr = aggregate ? wrapAggregationArgument(expr) : expr;
- rewritten |= newExpr != expr;
- newExprList.add(newExpr.accept(this, arg));
- }
- if (rewritten) {
- // Rewrites the SQL-92 function name to core functions,
- // e.g., SUM --> array_sum
- callExpr.setFunctionSignature(FunctionMapUtil.sql92ToCoreAggregateFunction(signature));
- }
- callExpr.setExprList(newExprList);
- return callExpr;
- }
-
- private Expression wrapAggregationArgument(Expression argExpr) throws CompilationException {
- SourceLocation sourceLoc = argExpr.getSourceLocation();
- Expression expr = argExpr;
- Set<VariableExpr> freeVars = SqlppRewriteUtil.getFreeVariable(expr);
-
- VariableExpr fromBindingVar = new VariableExpr(context.newVariable());
- fromBindingVar.setSourceLocation(sourceLoc);
- FromTerm fromTerm = new FromTerm(groupVar, fromBindingVar, null, null);
- fromTerm.setSourceLocation(sourceLoc);
- FromClause fromClause = new FromClause(Collections.singletonList(fromTerm));
- fromClause.setSourceLocation(sourceLoc);
-
- // Maps field variable expressions to field accesses.
- Map<Expression, Expression> varExprMap = new HashMap<>();
- for (VariableExpr usedVar : freeVars) {
- // Reference to a field in the group variable.
- if (fieldVars.containsKey(usedVar)) {
- // Rewrites to a reference to a field in the group variable.
- FieldAccessor fa =
- new FieldAccessor(fromBindingVar, new VarIdentifier(fieldVars.get(usedVar).getValue()));
- fa.setSourceLocation(usedVar.getSourceLocation());
- varExprMap.put(usedVar, fa);
- } else if (outerVars.contains(usedVar)) {
- // Do nothing
- } else if (fieldVars.size() == 1) {
- // Rewrites to a reference to a single field in the group variable.
- FieldAccessor faInner = new FieldAccessor(fromBindingVar, fieldVars.values().iterator().next());
- faInner.setSourceLocation(usedVar.getSourceLocation());
- FieldAccessor faOuter =
- new FieldAccessor(faInner, SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar()));
- faOuter.setSourceLocation(usedVar.getSourceLocation());
- varExprMap.put(usedVar, faOuter);
- } else {
- throw new CompilationException(ErrorCode.AMBIGUOUS_IDENTIFIER, usedVar.getSourceLocation(),
- SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar().getValue()).getValue());
- }
- }
-
- // Select clause.
- SelectElement selectElement =
- new SelectElement(SqlppRewriteUtil.substituteExpression(expr, varExprMap, context));
- selectElement.setSourceLocation(sourceLoc);
- SelectClause selectClause = new SelectClause(selectElement, null, false);
- selectClause.setSourceLocation(sourceLoc);
-
- // Construct the select expression.
- SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, null, null, null, null);
- selectBlock.setSourceLocation(sourceLoc);
- SelectSetOperation selectSetOperation =
- new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
- selectSetOperation.setSourceLocation(sourceLoc);
- SelectExpression selectExpr = new SelectExpression(null, selectSetOperation, null, null, true);
- selectExpr.setSourceLocation(sourceLoc);
- return selectExpr;
- }
- }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
index faca85e..84aee71 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
@@ -34,7 +34,6 @@
import org.apache.hyracks.algebricks.common.utils.Pair;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -123,19 +122,14 @@
private List<Pair<Expression, Identifier>> createGroupFieldList(SelectBlock selectBlock) {
List<Pair<Expression, Identifier>> groupFieldList = new ArrayList<>();
- addToGroupFieldList(groupFieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getFromClause()));
- addToGroupFieldList(groupFieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getLetList()));
+ addToFieldList(groupFieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getFromClause()));
+ addToFieldList(groupFieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getLetList()));
return groupFieldList;
}
- private void addToGroupFieldList(List<Pair<Expression, Identifier>> groupFieldList,
- Collection<VariableExpr> fromBindingVars) {
- for (VariableExpr varExpr : fromBindingVars) {
- VariableExpr newVarExpr = new VariableExpr(varExpr.getVar());
- newVarExpr.setSourceLocation(varExpr.getSourceLocation());
- Pair<Expression, Identifier> varIdPair =
- new Pair<>(newVarExpr, SqlppVariableUtil.toUserDefinedVariableName(varExpr.getVar()));
- groupFieldList.add(varIdPair);
+ private void addToFieldList(List<Pair<Expression, Identifier>> outFieldList, List<VariableExpr> varList) {
+ for (VariableExpr varExpr : varList) {
+ SqlppVariableUtil.addToFieldVariableList(varExpr, outFieldList);
}
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
index 0ffb590..1fd4ff7 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
@@ -28,6 +28,7 @@
import org.apache.asterix.lang.common.clause.LetClause;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.statement.FunctionDecl;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.AbstractInlineUdfsVisitor;
import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
import org.apache.asterix.lang.sqlpp.clause.FromClause;
@@ -247,16 +248,35 @@
@Override
public Boolean visit(WindowExpression winExpr, List<FunctionDecl> funcs) throws CompilationException {
- Pair<Boolean, Expression> result = inlineUdfsInExpr(winExpr.getExpr(), funcs);
- winExpr.setExpr(result.second);
- boolean inlined = result.first;
+ boolean inlined = false;
if (winExpr.hasPartitionList()) {
Pair<Boolean, List<Expression>> inlinedList = inlineUdfsInExprList(winExpr.getPartitionList(), funcs);
winExpr.setPartitionList(inlinedList.second);
+ inlined = inlinedList.first;
+ }
+ if (winExpr.hasOrderByList()) {
+ Pair<Boolean, List<Expression>> inlinedList = inlineUdfsInExprList(winExpr.getOrderbyList(), funcs);
+ winExpr.setOrderbyList(inlinedList.second);
inlined |= inlinedList.first;
}
- Pair<Boolean, List<Expression>> inlinedList = inlineUdfsInExprList(winExpr.getOrderbyList(), funcs);
- winExpr.setOrderbyList(inlinedList.second);
+ if (winExpr.hasFrameStartExpr()) {
+ Pair<Boolean, Expression> inlinedExpr = inlineUdfsInExpr(winExpr.getFrameStartExpr(), funcs);
+ winExpr.setFrameStartExpr(inlinedExpr.second);
+ inlined |= inlinedExpr.first;
+ }
+ if (winExpr.hasFrameEndExpr()) {
+ Pair<Boolean, Expression> inlinedExpr = inlineUdfsInExpr(winExpr.getFrameEndExpr(), funcs);
+ winExpr.setFrameEndExpr(inlinedExpr.second);
+ inlined |= inlinedExpr.first;
+ }
+ if (winExpr.hasWindowFieldList()) {
+ Pair<Boolean, List<Pair<Expression, Identifier>>> inlinedList =
+ inlineUdfsInFieldList(winExpr.getWindowFieldList(), funcs);
+ winExpr.setWindowFieldList(inlinedList.second);
+ inlined |= inlinedList.first;
+ }
+ Pair<Boolean, List<Expression>> inlinedList = inlineUdfsInExprList(winExpr.getExprList(), funcs);
+ winExpr.setExprList(inlinedList.second);
inlined |= inlinedList.first;
return inlined;
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppWindowAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppWindowAggregationSugarVisitor.java
new file mode 100644
index 0000000..fa40d78
--- /dev/null
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppWindowAggregationSugarVisitor.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.lang.sqlpp.rewrites.visitor;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.common.struct.Identifier;
+import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
+import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
+import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
+import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
+import org.apache.asterix.om.functions.BuiltinFunctions;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+
+/**
+ * A pre-processor that adds a window field list into the AST:
+ *
+ * <pre>
+ * FROM ... AS e, ... AS i
+ * SELECT fn() OVER (...)
+ * ->
+ * FROM ... AS e, ... AS i
+ * SELECT fn() AS w(e AS e, i AS i) OVER (...)
+ * </pre>
+ *
+ * Also rewrites SQL-92 aggregate functions inside window expressions into SQL++ core aggregate functions
+ * using the same approach as {@link SqlppGroupByAggregationSugarVisitor}
+ * <br/>
+ * Must be executed after {@link VariableCheckAndRewriteVisitor}
+ */
+public class SqlppWindowAggregationSugarVisitor extends AbstractSqlppExpressionScopingVisitor {
+
+ private final Deque<SelectBlock> stack = new ArrayDeque<>();
+
+ public SqlppWindowAggregationSugarVisitor(LangRewritingContext context) {
+ super(context);
+ }
+
+ @Override
+ public Expression visit(SelectBlock selectBlock, ILangExpression arg) throws CompilationException {
+ stack.push(selectBlock);
+ Expression expr = super.visit(selectBlock, arg);
+ stack.pop();
+ return expr;
+ }
+
+ @Override
+ public Expression visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
+ if (!winExpr.hasWindowFieldList()) {
+ SelectBlock selectBlock = stack.peek();
+ List<Pair<Expression, Identifier>> winFieldList = createWindowFieldList(selectBlock);
+ winExpr.setWindowFieldList(winFieldList);
+ }
+
+ FunctionSignature signature = winExpr.getFunctionSignature();
+ FunctionIdentifier winfi = FunctionMapUtil.getInternalWindowFunction(signature);
+ if (winfi != null) {
+ winExpr.setFunctionSignature(new FunctionSignature(winfi));
+ if (BuiltinFunctions.windowFunctionWithListArg(winfi)) {
+ wrapAggregationArguments(winExpr, 1);
+ }
+ } else if (FunctionMapUtil.isSql92AggregateFunction(signature)) {
+ winExpr.setFunctionSignature(FunctionMapUtil.sql92ToCoreAggregateFunction(signature));
+ wrapAggregationArguments(winExpr, winExpr.getExprList().size());
+ }
+
+ return super.visit(winExpr, arg);
+ }
+
+ private void wrapAggregationArguments(WindowExpression winExpr, int limit) throws CompilationException {
+ Set<VariableExpr> liveVars = scopeChecker.getCurrentScope().getLiveVariables();
+
+ VariableExpr winVar = winExpr.getWindowVar();
+ List<Pair<Expression, Identifier>> winFieldList = winExpr.getWindowFieldList();
+ Map<Expression, Identifier> fieldMap = SqlppVariableUtil.createFieldVariableMap(winFieldList);
+
+ List<Expression> exprList = winExpr.getExprList();
+ int n = exprList.size();
+ List<Expression> newExprList = new ArrayList<>(n);
+ for (int i = 0; i < n; i++) {
+ Expression expr = exprList.get(i);
+ Expression newExpr = i < limit
+ ? Sql92AggregateFunctionVisitor.wrapAggregationArgument(expr, winVar, fieldMap, liveVars, context)
+ : expr;
+ newExprList.add(newExpr);
+ }
+ winExpr.setExprList(newExprList);
+ }
+
+ private List<Pair<Expression, Identifier>> createWindowFieldList(SelectBlock selectBlock) {
+ List<Pair<Expression, Identifier>> fieldList = new ArrayList<>();
+ if (selectBlock != null) {
+ addToFieldList(fieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getFromClause()));
+ addToFieldList(fieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getLetList()));
+ addToFieldList(fieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getGroupbyClause()));
+ addToFieldList(fieldList, SqlppVariableUtil.getBindingVariables(selectBlock.getLetListAfterGroupby()));
+ }
+ return fieldList;
+ }
+
+ private void addToFieldList(List<Pair<Expression, Identifier>> outFieldList, List<VariableExpr> varList) {
+ for (VariableExpr varExpr : varList) {
+ if (scopeChecker.lookupSymbol(varExpr.getVar().getValue()) != null) {
+ SqlppVariableUtil.addToFieldVariableList(varExpr, outFieldList);
+ }
+ }
+ }
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppWindowRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppWindowRewriteVisitor.java
new file mode 100644
index 0000000..cd0e151
--- /dev/null
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppWindowRewriteVisitor.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.lang.sqlpp.rewrites.visitor;
+
+import java.util.List;
+
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.common.struct.VarIdentifier;
+import org.apache.asterix.lang.sqlpp.clause.FromClause;
+import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
+import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
+import org.apache.asterix.om.functions.BuiltinFunctions;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+
+/**
+ * A pre-processor that transforms window expressions as follows:
+ * <ul>
+ * <li>adds window frame variable</li>
+ * <li>extracts list arguments of window functions into separate LET clauses</li>
+ * </ul>
+ *
+ * Must be executed before {@link VariableCheckAndRewriteVisitor}
+ */
+public final class SqlppWindowRewriteVisitor extends AbstractSqlppExpressionExtractionVisitor {
+
+ public SqlppWindowRewriteVisitor(LangRewritingContext context) {
+ super(context);
+ }
+
+ @Override
+ public Expression visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
+ super.visit(winExpr, arg);
+
+ if (!winExpr.hasWindowVar()) {
+ VariableExpr winVar = new VariableExpr(context.newVariable());
+ winVar.setSourceLocation(winExpr.getSourceLocation());
+ winExpr.setWindowVar(winVar);
+ }
+
+ FunctionSignature signature = winExpr.getFunctionSignature();
+ FunctionIdentifier winfi = FunctionMapUtil.getInternalWindowFunction(signature);
+ if (winfi != null) {
+ if (BuiltinFunctions.windowFunctionWithListArg(winfi)) {
+ List<Expression> newExprList =
+ extractExpressions(winExpr.getExprList(), 1, winExpr.getSourceLocation());
+ winExpr.setExprList(newExprList);
+ }
+ } else if (FunctionMapUtil.isSql92AggregateFunction(signature)) {
+ List<Expression> newExprList = extractExpressions(winExpr.getExprList(), winExpr.getExprList().size(),
+ winExpr.getSourceLocation());
+ winExpr.setExprList(newExprList);
+ }
+
+ return winExpr;
+ }
+
+ @Override
+ protected boolean isExtractableExpression(Expression expr) {
+ switch (expr.getKind()) {
+ case LITERAL_EXPRESSION:
+ case VARIABLE_EXPRESSION:
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ @Override
+ void handleUnsupportedClause(FromClause clause, List<Pair<Expression, VarIdentifier>> extractionList)
+ throws CompilationException {
+ throw new CompilationException(ErrorCode.COMPILATION_UNEXPECTED_WINDOW_EXPRESSION, clause.getSourceLocation());
+ }
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
index 8bac4ad..b48e024 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
@@ -20,6 +20,7 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -37,6 +38,7 @@
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.VarIdentifier;
+import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
import org.apache.asterix.lang.sqlpp.visitor.CheckDatasetOnlyResolutionVisitor;
@@ -45,6 +47,7 @@
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.commons.lang3.StringUtils;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.api.exceptions.SourceLocation;
public class VariableCheckAndRewriteVisitor extends AbstractSqlppExpressionScopingVisitor {
@@ -201,7 +204,6 @@
return path.length == 2 && metadataProvider.findDataset(path[0], path[1]) != null;
}
- @Override
public Expression visit(CallExpr callExpr, ILangExpression arg) throws CompilationException {
// skip variables inside SQL-92 aggregates (they will be resolved by SqlppGroupByAggregationSugarVisitor)
if (FunctionMapUtil.isSql92AggregateFunction(callExpr.getFunctionSignature())) {
@@ -209,4 +211,29 @@
}
return super.visit(callExpr, arg);
}
+
+ @Override
+ public Expression visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
+ // skip variables inside list arguments of window functions (will be resolved by SqlppWindowExpressionVisitor)
+ FunctionSignature fs = winExpr.getFunctionSignature();
+ FunctionIdentifier winfi = FunctionMapUtil.getInternalWindowFunction(fs);
+ if (winfi != null) {
+ if (BuiltinFunctions.windowFunctionWithListArg(winfi)) {
+ visitWindowExpressionExcludingExprList(winExpr, arg);
+ List<Expression> exprList = winExpr.getExprList();
+ List<Expression> newExprList = new ArrayList<>(exprList.size());
+ Iterator<Expression> i = exprList.iterator();
+ newExprList.add(i.next()); // don't visit the list arg
+ while (i.hasNext()) {
+ newExprList.add(visit(i.next(), arg));
+ }
+ winExpr.setExprList(newExprList);
+ return winExpr;
+ }
+ } else if (FunctionMapUtil.isSql92AggregateFunction(fs)) {
+ visitWindowExpressionExcludingExprList(winExpr, arg);
+ return winExpr;
+ }
+ return super.visit(winExpr, arg);
+ }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java
index 7773072..a6fa730 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java
@@ -63,7 +63,7 @@
* @return true if the function signature is a SQL-92 core aggregate,
* false otherwise.
*/
- public static boolean isSql92AggregateFunction(FunctionSignature signature) throws CompilationException {
+ public static boolean isSql92AggregateFunction(FunctionSignature signature) {
IFunctionInfo finfo = FunctionUtil.getFunctionInfo(new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
signature.getName().toLowerCase(), signature.getArity()));
if (finfo == null) {
@@ -78,9 +78,8 @@
* @param fs,
* the SQL-92 aggregate function signature.
* @return the SQL++ aggregate function signature.
- * @throws CompilationException
*/
- public static FunctionSignature sql92ToCoreAggregateFunction(FunctionSignature fs) throws CompilationException {
+ public static FunctionSignature sql92ToCoreAggregateFunction(FunctionSignature fs) {
if (!isSql92AggregateFunction(fs)) {
return fs;
}
@@ -110,11 +109,15 @@
if (finfo != null && BuiltinFunctions.getAggregateFunction(finfo.getFunctionIdentifier()) != null) {
return new FunctionSignature(FunctionConstants.ASTERIX_NS, internalName, fs.getArity());
}
- } else if (checkSql92Aggregate && isSql92AggregateFunction(fs)) {
- throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
- fs.getName() + " is a SQL-92 aggregate function. The SQL++ core aggregate function "
- + CORE_SQL_AGGREGATE_PREFIX + fs.getName().toLowerCase()
- + " could potentially express the intent.");
+ } else if (checkSql92Aggregate) {
+ if (isSql92AggregateFunction(fs)) {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ fs.getName() + " is a SQL-92 aggregate function. The SQL++ core aggregate function "
+ + CORE_SQL_AGGREGATE_PREFIX + fs.getName().toLowerCase()
+ + " could potentially express the intent.");
+ } else if (getInternalWindowFunction(fs) != null) {
+ throw new CompilationException(ErrorCode.COMPILATION_UNEXPECTED_WINDOW_EXPRESSION, sourceLoc);
+ }
}
String mappedName = CommonFunctionMapUtil.normalizeBuiltinFunctionSignature(fs).getName();
return new FunctionSignature(fs.getNamespace(), mappedName, fs.getArity());
@@ -160,4 +163,16 @@
return null;
}
}
+
+ /**
+ * Returns an internal implementation function for a public window function,
+ * or {@code null} if given function is not a public window function
+ * @param signature function signature
+ * @return said value
+ */
+ public static FunctionIdentifier getInternalWindowFunction(FunctionSignature signature) {
+ IFunctionInfo finfo = FunctionUtil.getFunctionInfo(new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+ signature.getName().toLowerCase(), signature.getArity()));
+ return finfo != null ? BuiltinFunctions.getWindowFunction(finfo.getFunctionIdentifier()) : null;
+ }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java
index 14dfaeb..8fabf13 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java
@@ -21,20 +21,27 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.ILangExpression;
import org.apache.asterix.lang.common.clause.GroupbyClause;
import org.apache.asterix.lang.common.clause.LetClause;
import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
import org.apache.asterix.lang.sqlpp.clause.FromClause;
import org.apache.asterix.lang.sqlpp.clause.FromTerm;
+import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
import org.apache.asterix.lang.sqlpp.visitor.FreeVariableVisitor;
+import org.apache.hyracks.algebricks.common.utils.Pair;
public class SqlppVariableUtil {
@@ -96,14 +103,14 @@
return isExternalVariableIdentifier(varExpr.getVar());
}
- public static Collection<VariableExpr> getFreeVariables(ILangExpression langExpr) throws CompilationException {
- Collection<VariableExpr> freeVars = new HashSet<>();
+ public static Set<VariableExpr> getFreeVariables(ILangExpression langExpr) throws CompilationException {
+ Set<VariableExpr> freeVars = new HashSet<>();
FreeVariableVisitor visitor = new FreeVariableVisitor();
langExpr.accept(visitor, freeVars);
return freeVars;
}
- public static Collection<VariableExpr> getBindingVariables(FromClause fromClause) {
+ public static List<VariableExpr> getBindingVariables(FromClause fromClause) {
if (fromClause == null) {
return Collections.emptyList();
}
@@ -114,7 +121,7 @@
return bindingVars;
}
- public static Collection<VariableExpr> getBindingVariables(FromTerm fromTerm) {
+ public static List<VariableExpr> getBindingVariables(FromTerm fromTerm) {
List<VariableExpr> bindingVars = new ArrayList<>();
if (fromTerm == null) {
return bindingVars;
@@ -132,7 +139,7 @@
return bindingVars;
}
- public static Collection<VariableExpr> getBindingVariables(GroupbyClause gbyClause) {
+ public static List<VariableExpr> getBindingVariables(GroupbyClause gbyClause) {
List<VariableExpr> bindingVars = new ArrayList<>();
if (gbyClause == null) {
return bindingVars;
@@ -143,10 +150,12 @@
bindingVars.add(var);
}
}
- for (GbyVariableExpressionPair gbyKey : gbyClause.getDecorPairList()) {
- VariableExpr var = gbyKey.getVar();
- if (var != null) {
- bindingVars.add(var);
+ if (gbyClause.hasDecorList()) {
+ for (GbyVariableExpressionPair gbyKey : gbyClause.getDecorPairList()) {
+ VariableExpr var = gbyKey.getVar();
+ if (var != null) {
+ bindingVars.add(var);
+ }
}
}
if (gbyClause.hasWithMap()) {
@@ -156,7 +165,7 @@
return bindingVars;
}
- public static Collection<VariableExpr> getBindingVariables(List<LetClause> letClauses) {
+ public static List<VariableExpr> getBindingVariables(List<LetClause> letClauses) {
List<VariableExpr> bindingVars = new ArrayList<>();
if (letClauses == null || letClauses.isEmpty()) {
return bindingVars;
@@ -167,4 +176,18 @@
return bindingVars;
}
+ public static Map<Expression, Identifier> createFieldVariableMap(List<Pair<Expression, Identifier>> fieldList) {
+ Map<Expression, Identifier> fieldVars = new HashMap<>();
+ for (Pair<Expression, Identifier> p : fieldList) {
+ fieldVars.put(p.first, p.second);
+ }
+ return fieldVars;
+ }
+
+ public static void addToFieldVariableList(VariableExpr varExpr, List<Pair<Expression, Identifier>> outFieldList) {
+ VarIdentifier var = varExpr.getVar();
+ VariableExpr newVarExpr = new VariableExpr(var);
+ newVarExpr.setSourceLocation(varExpr.getSourceLocation());
+ outFieldList.add(new Pair<>(newVarExpr, toUserDefinedVariableName(var)));
+ }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSql92AggregateVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSql92AggregateVisitor.java
index 6caf0f6..2caaa0c 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSql92AggregateVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSql92AggregateVisitor.java
@@ -44,6 +44,7 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.Query;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.sqlpp.clause.FromClause;
import org.apache.asterix.lang.sqlpp.clause.FromTerm;
import org.apache.asterix.lang.sqlpp.clause.HavingClause;
@@ -61,12 +62,16 @@
import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppQueryExpressionVisitor;
+import org.apache.hyracks.algebricks.common.utils.Pair;
/**
* This visitor checks if a non-subquery language construct contains SQL-92 aggregates.
*/
public class CheckSql92AggregateVisitor extends AbstractSqlppQueryExpressionVisitor<Boolean, ILangExpression> {
+ public CheckSql92AggregateVisitor() {
+ }
+
@Override
public Boolean visit(Query q, ILangExpression parentSelectBlock) throws CompilationException {
return false;
@@ -289,7 +294,23 @@
return false;
}
- private Boolean visitExprList(List<Expression> exprs, ILangExpression parentSelectBlock)
+ @Override
+ public Boolean visit(CaseExpression caseExpr, ILangExpression arg) throws CompilationException {
+ return caseExpr.getConditionExpr().accept(this, arg) || visitExprList(caseExpr.getWhenExprs(), arg)
+ || visitExprList(caseExpr.getThenExprs(), arg) || caseExpr.getElseExpr().accept(this, arg);
+ }
+
+ @Override
+ public Boolean visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
+ return (winExpr.hasPartitionList() && visitExprList(winExpr.getPartitionList(), arg))
+ || (winExpr.hasOrderByList() && visitExprList(winExpr.getOrderbyList(), arg))
+ || (winExpr.hasFrameStartExpr() && winExpr.getFrameStartExpr().accept(this, arg))
+ || (winExpr.hasFrameEndExpr() && winExpr.getFrameEndExpr().accept(this, arg))
+ || (winExpr.hasWindowFieldList() && visitFieldList(winExpr.getWindowFieldList(), arg))
+ || visitExprList(winExpr.getExprList(), arg);
+ }
+
+ private boolean visitExprList(List<Expression> exprs, ILangExpression parentSelectBlock)
throws CompilationException {
for (Expression item : exprs) {
if (item.accept(this, parentSelectBlock)) {
@@ -299,16 +320,13 @@
return false;
}
- @Override
- public Boolean visit(CaseExpression caseExpr, ILangExpression arg) throws CompilationException {
- return caseExpr.getConditionExpr().accept(this, arg) || visitExprList(caseExpr.getWhenExprs(), arg)
- || visitExprList(caseExpr.getThenExprs(), arg) || caseExpr.getElseExpr().accept(this, arg);
- }
-
- @Override
- public Boolean visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
- return winExpr.getExpr().accept(this, arg)
- || (winExpr.hasPartitionList() && visitExprList(winExpr.getPartitionList(), arg))
- || visitExprList(winExpr.getOrderbyList(), arg);
+ private boolean visitFieldList(List<Pair<Expression, Identifier>> fieldList, ILangExpression parentSelectBlock)
+ throws CompilationException {
+ for (Pair<Expression, Identifier> p : fieldList) {
+ if (p.first.accept(this, parentSelectBlock)) {
+ return true;
+ }
+ }
+ return false;
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
index e1647ea..c816d05 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
@@ -19,6 +19,7 @@
package org.apache.asterix.lang.sqlpp.visitor;
+import java.util.Collection;
import java.util.List;
import org.apache.asterix.common.exceptions.CompilationException;
@@ -117,8 +118,8 @@
public Boolean visit(SelectBlock selectBlock, ILangExpression arg) throws CompilationException {
boolean hasSubquery = visit(selectBlock.getFromClause(), arg) || visit(selectBlock.getGroupbyClause(), arg)
|| visit(selectBlock.getHavingClause(), arg) || visit(selectBlock.getWhereClause(), arg);
- return hasSubquery || visit(selectBlock.getSelectClause(), arg) || visit(selectBlock.getLetList(), arg)
- || visit(selectBlock.getLetListAfterGroupby(), arg);
+ return hasSubquery || visit(selectBlock.getSelectClause(), arg) || visitExprList(selectBlock.getLetList(), arg)
+ || visitExprList(selectBlock.getLetListAfterGroupby(), arg);
}
@Override
@@ -133,7 +134,7 @@
@Override
public Boolean visit(SelectRegular selectRegular, ILangExpression arg) throws CompilationException {
- return visit(selectRegular.getProjections(), arg);
+ return visitExprList(selectRegular.getProjections(), arg);
}
@Override
@@ -154,7 +155,7 @@
if (selectStatement.isSubquery()) {
return true;
}
- return visit(selectStatement.getLetList(), arg) || visit(selectStatement.getSelectSetOperation(), arg)
+ return visitExprList(selectStatement.getLetList(), arg) || visit(selectStatement.getSelectSetOperation(), arg)
|| visit(selectStatement.getOrderbyClause(), arg) || visit(selectStatement.getLimitClause(), arg);
}
@@ -171,8 +172,8 @@
@Override
public Boolean visit(CaseExpression caseExpression, ILangExpression arg) throws CompilationException {
- return visit(caseExpression.getConditionExpr(), arg) || visit(caseExpression.getWhenExprs(), arg)
- || visit(caseExpression.getThenExprs(), arg) || visit(caseExpression.getElseExpr(), arg);
+ return visit(caseExpression.getConditionExpr(), arg) || visitExprList(caseExpression.getWhenExprs(), arg)
+ || visitExprList(caseExpression.getThenExprs(), arg) || visit(caseExpression.getElseExpr(), arg);
}
@Override
@@ -197,7 +198,7 @@
@Override
public Boolean visit(ListConstructor lc, ILangExpression arg) throws CompilationException {
- return visit(lc.getExprList(), arg);
+ return visitExprList(lc.getExprList(), arg);
}
@Override
@@ -215,7 +216,7 @@
@Override
public Boolean visit(OperatorExpr operatorExpr, ILangExpression arg) throws CompilationException {
- return visit(operatorExpr.getExprList(), arg);
+ return visitExprList(operatorExpr.getExprList(), arg);
}
@Override
@@ -261,7 +262,7 @@
@Override
public Boolean visit(OrderbyClause oc, ILangExpression arg) throws CompilationException {
- return visit(oc.getOrderbyList(), arg);
+ return visitExprList(oc.getOrderbyList(), arg);
}
@Override
@@ -271,15 +272,18 @@
return true;
}
}
- for (GbyVariableExpressionPair key : gc.getDecorPairList()) {
- if (visit(key.getExpr(), arg)) {
- return true;
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair key : gc.getDecorPairList()) {
+ if (visit(key.getExpr(), arg)) {
+ return true;
+ }
}
}
- for (Pair<Expression, Identifier> field : gc.getGroupFieldList()) {
- if (visit(field.first, arg)) {
- return true;
- }
+ if (gc.hasGroupFieldList() && visitFieldList(gc.getGroupFieldList(), arg)) {
+ return true;
+ }
+ if (gc.hasWithMap() && visitExprList(gc.getWithVarMap().keySet(), arg)) {
+ return true;
}
return false;
}
@@ -296,29 +300,43 @@
@Override
public Boolean visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
- return visit(winExpr.getExpr(), arg) || (winExpr.hasPartitionList() && visit(winExpr.getPartitionList(), arg))
- || visit(winExpr.getOrderbyList(), arg);
+ return (winExpr.hasPartitionList() && visitExprList(winExpr.getPartitionList(), arg))
+ || (winExpr.hasOrderByList() && visitExprList(winExpr.getOrderbyList(), arg))
+ || (winExpr.hasFrameStartExpr() && visit(winExpr.getFrameStartExpr(), arg))
+ || (winExpr.hasFrameEndExpr() && visit(winExpr.getFrameEndExpr(), arg))
+ || (winExpr.hasWindowFieldList() && visitFieldList(winExpr.getWindowFieldList(), arg))
+ || visitExprList(winExpr.getExprList(), arg);
}
@Override
public Boolean visit(CallExpr callExpr, ILangExpression arg) throws CompilationException {
- return visit(callExpr.getExprList(), arg);
+ return visitExprList(callExpr.getExprList(), arg);
}
- private boolean visit(List<?> langExprs, ILangExpression arg) throws CompilationException {
- for (Object o : langExprs) {
- ILangExpression langExpr = (ILangExpression) o;
- if (langExpr.accept(this, arg)) {
+ private boolean visit(ILangExpression expr, ILangExpression arg) throws CompilationException {
+ if (expr == null) {
+ return false;
+ }
+ return expr.accept(this, arg);
+ }
+
+ private <T extends ILangExpression> boolean visitExprList(Collection<T> exprList, ILangExpression arg)
+ throws CompilationException {
+ for (T langExpr : exprList) {
+ if (visit(langExpr, arg)) {
return true;
}
}
return false;
}
- private boolean visit(ILangExpression langExpr, ILangExpression arg) throws CompilationException {
- if (langExpr == null) {
- return false;
+ private <T extends ILangExpression> boolean visitFieldList(Collection<Pair<T, Identifier>> fieldList,
+ ILangExpression arg) throws CompilationException {
+ for (Pair<T, Identifier> p : fieldList) {
+ if (visit(p.first, arg)) {
+ return true;
+ }
}
- return langExpr.accept(this, arg);
+ return false;
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
index 90cfab9..ed92bfd 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
@@ -293,30 +293,32 @@
@Override
public GroupbyClause visit(GroupbyClause gc, Void arg) throws CompilationException {
List<GbyVariableExpressionPair> gbyPairList = new ArrayList<>();
- List<GbyVariableExpressionPair> decorPairList = new ArrayList<>();
- Map<Expression, VariableExpr> withVarMap = new HashMap<>();
- VariableExpr groupVarExpr = null;
- List<Pair<Expression, Identifier>> groupFieldList = new ArrayList<>();
for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
VariableExpr var = gbyVarExpr.getVar();
gbyPairList.add(new GbyVariableExpressionPair(var == null ? null : (VariableExpr) var.accept(this, arg),
(Expression) gbyVarExpr.getExpr().accept(this, arg)));
}
- for (GbyVariableExpressionPair gbyVarExpr : gc.getDecorPairList()) {
- VariableExpr var = gbyVarExpr.getVar();
- decorPairList.add(new GbyVariableExpressionPair(var == null ? null : (VariableExpr) var.accept(this, arg),
- (Expression) gbyVarExpr.getExpr().accept(this, arg)));
+ List<GbyVariableExpressionPair> decorPairList = new ArrayList<>();
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair gbyVarExpr : gc.getDecorPairList()) {
+ VariableExpr var = gbyVarExpr.getVar();
+ decorPairList
+ .add(new GbyVariableExpressionPair(var == null ? null : (VariableExpr) var.accept(this, arg),
+ (Expression) gbyVarExpr.getExpr().accept(this, arg)));
+ }
}
- for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
- withVarMap.put((Expression) entry.getKey().accept(this, arg),
- (VariableExpr) entry.getValue().accept(this, arg));
+ Map<Expression, VariableExpr> withVarMap = new HashMap<>();
+ if (gc.hasWithMap()) {
+ for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+ withVarMap.put((Expression) entry.getKey().accept(this, arg),
+ (VariableExpr) entry.getValue().accept(this, arg));
+ }
}
+ VariableExpr groupVarExpr = null;
if (gc.hasGroupVar()) {
groupVarExpr = (VariableExpr) gc.getGroupVar().accept(this, arg);
}
- for (Pair<Expression, Identifier> field : gc.getGroupFieldList()) {
- groupFieldList.add(new Pair<>((Expression) field.first.accept(this, arg), field.second));
- }
+ List<Pair<Expression, Identifier>> groupFieldList = copyFieldList(gc.getGroupFieldList(), arg);
GroupbyClause copy = new GroupbyClause(gbyPairList, decorPairList, withVarMap, groupVarExpr, groupFieldList,
gc.hasHashGroupByHint(), gc.isGroupAll());
copy.setSourceLocation(gc.getSourceLocation());
@@ -515,12 +517,24 @@
@Override
public ILangExpression visit(WindowExpression winExpr, Void arg) throws CompilationException {
- Expression newExpr = (Expression) winExpr.getExpr().accept(this, arg);
+ List<Expression> newExprList = copyExprList(winExpr.getExprList(), arg);
List<Expression> newPartitionList =
winExpr.hasPartitionList() ? copyExprList(winExpr.getPartitionList(), arg) : null;
- List<Expression> newOrderbyList = copyExprList(winExpr.getOrderbyList(), arg);
- List<OrderbyClause.OrderModifier> newOrderbyModifierList = new ArrayList<>(winExpr.getOrderbyModifierList());
- WindowExpression copy = new WindowExpression(newExpr, newPartitionList, newOrderbyList, newOrderbyModifierList);
+ List<Expression> newOrderbyList = winExpr.hasOrderByList() ? copyExprList(winExpr.getOrderbyList(), arg) : null;
+ List<OrderbyClause.OrderModifier> newOrderbyModifierList =
+ winExpr.hasOrderByList() ? new ArrayList<>(winExpr.getOrderbyModifierList()) : null;
+ Expression newFrameStartExpr =
+ winExpr.hasFrameStartExpr() ? (Expression) winExpr.getFrameStartExpr().accept(this, arg) : null;
+ Expression newFrameEndExpr =
+ winExpr.hasFrameEndExpr() ? (Expression) winExpr.getFrameEndExpr().accept(this, arg) : null;
+ VariableExpr newWindowVar =
+ winExpr.hasWindowVar() ? (VariableExpr) winExpr.getWindowVar().accept(this, arg) : null;
+ List<Pair<Expression, Identifier>> newWindowFieldList =
+ winExpr.hasWindowFieldList() ? copyFieldList(winExpr.getWindowFieldList(), arg) : null;
+ WindowExpression copy = new WindowExpression(winExpr.getFunctionSignature(), newExprList, newPartitionList,
+ newOrderbyList, newOrderbyModifierList, winExpr.getFrameMode(), winExpr.getFrameStartKind(),
+ newFrameStartExpr, winExpr.getFrameEndKind(), newFrameEndExpr, winExpr.getFrameExclusionKind(),
+ newWindowVar, newWindowFieldList);
copy.setSourceLocation(winExpr.getSourceLocation());
copy.addHints(winExpr.getHints());
return copy;
@@ -533,4 +547,13 @@
}
return newExprList;
}
+
+ private List<Pair<Expression, Identifier>> copyFieldList(List<Pair<Expression, Identifier>> fieldList, Void arg)
+ throws CompilationException {
+ List<Pair<Expression, Identifier>> newFieldList = new ArrayList<>(fieldList.size());
+ for (Pair<Expression, Identifier> field : fieldList) {
+ newFieldList.add(new Pair<>((Expression) field.first.accept(this, arg), field.second));
+ }
+ return newFieldList;
+ }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
index dfa1430..b61f4e6 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
@@ -287,14 +287,21 @@
for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
gbyVarExpr.getExpr().accept(this, freeVars);
}
- for (GbyVariableExpressionPair decorVarExpr : gc.getDecorPairList()) {
- decorVarExpr.getExpr().accept(this, freeVars);
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair decorVarExpr : gc.getDecorPairList()) {
+ decorVarExpr.getExpr().accept(this, freeVars);
+ }
}
if (gc.hasGroupFieldList()) {
for (Pair<Expression, Identifier> groupField : gc.getGroupFieldList()) {
groupField.first.accept(this, freeVars);
}
}
+ if (gc.hasWithMap()) {
+ for (Expression expr : gc.getWithVarMap().keySet()) {
+ expr.accept(this, freeVars);
+ }
+ }
return null;
}
@@ -440,11 +447,27 @@
@Override
public Void visit(WindowExpression winExpr, Collection<VariableExpr> freeVars) throws CompilationException {
- winExpr.getExpr().accept(this, freeVars);
if (winExpr.hasPartitionList()) {
visit(winExpr.getPartitionList(), freeVars);
}
- visit(winExpr.getOrderbyList(), freeVars);
+ if (winExpr.hasOrderByList()) {
+ visit(winExpr.getOrderbyList(), freeVars);
+ }
+ if (winExpr.hasFrameStartExpr()) {
+ winExpr.getFrameStartExpr().accept(this, freeVars);
+ }
+ if (winExpr.hasFrameEndExpr()) {
+ winExpr.getFrameEndExpr().accept(this, freeVars);
+ }
+ if (winExpr.hasWindowFieldList()) {
+ for (Pair<Expression, Identifier> field : winExpr.getWindowFieldList()) {
+ field.first.accept(this, freeVars);
+ }
+ }
+ visit(winExpr.getExprList(), freeVars);
+ if (winExpr.hasWindowVar()) {
+ freeVars.remove(winExpr.getWindowVar());
+ }
return null;
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
index c12914d..f1039ff 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
@@ -293,12 +293,7 @@
out.print(skip(step + 1) + "GROUP AS ");
gc.getGroupVar().accept(this, 0);
if (gc.hasGroupFieldList()) {
- out.println(skip(step + 1) + "(");
- for (Pair<Expression, Identifier> field : gc.getGroupFieldList()) {
- out.print(skip(step + 2) + field.second + ":=");
- field.first.accept(this, 0);
- }
- out.println(skip(step + 1) + ")");
+ printFieldList(step + 1, gc.getGroupFieldList());
}
}
if (gc.hasWithMap()) {
@@ -335,31 +330,6 @@
}
@Override
- public Void visit(WindowExpression winExpr, Integer step) throws CompilationException {
- out.print(skip(step) + "WINDOW");
- winExpr.getExpr().accept(this, step + 1);
- out.println();
- out.println(skip(step) + "OVER (");
- if (winExpr.hasPartitionList()) {
- out.println(skip(step + 1) + "PARTITION BY");
- List<Expression> partitionList = winExpr.getPartitionList();
- for (Expression expr : partitionList) {
- expr.accept(this, step + 2);
- out.println();
- }
- }
- out.println(skip(step + 1) + "ORDER BY");
- List<Expression> orderbyList = winExpr.getOrderbyList();
- List<OrderbyClause.OrderModifier> orderbyModifierList = winExpr.getOrderbyModifierList();
- for (int i = 0, ln = orderbyList.size(); i < ln; i++) {
- orderbyList.get(i).accept(this, step + 2);
- out.println(" " + orderbyModifierList.get(i));
- }
- out.println(skip(step) + ")");
- return null;
- }
-
- @Override
public Void visit(ListSliceExpression expression, Integer step) throws CompilationException {
out.println(skip(step) + "ListSliceExpression [");
expression.getExpr().accept(this, step + 1);
@@ -376,4 +346,58 @@
out.println(skip(step) + "]");
return null;
}
+
+ @Override
+ public Void visit(WindowExpression winExpr, Integer step) throws CompilationException {
+ out.println(skip(step) + "WINDOW " + winExpr.getFunctionSignature() + "[");
+ for (Expression expr : winExpr.getExprList()) {
+ expr.accept(this, step + 1);
+ }
+ out.println(skip(step) + "]");
+ if (winExpr.hasWindowVar()) {
+ out.print(skip(step + 1) + "AS ");
+ winExpr.getWindowVar().accept(this, 0);
+ if (winExpr.hasWindowFieldList()) {
+ printFieldList(step + 1, winExpr.getWindowFieldList());
+ }
+ }
+ out.println(skip(step) + "OVER (");
+ if (winExpr.hasPartitionList()) {
+ out.println(skip(step + 1) + "PARTITION BY");
+ List<Expression> partitionList = winExpr.getPartitionList();
+ for (Expression expr : partitionList) {
+ expr.accept(this, step + 2);
+ }
+ }
+ if (winExpr.hasOrderByList()) {
+ out.println(skip(step + 1) + "ORDER BY");
+ List<Expression> orderbyList = winExpr.getOrderbyList();
+ List<OrderbyClause.OrderModifier> orderbyModifierList = winExpr.getOrderbyModifierList();
+ for (int i = 0, ln = orderbyList.size(); i < ln; i++) {
+ orderbyList.get(i).accept(this, step + 2);
+ out.println(skip(step + 2) + orderbyModifierList.get(i));
+ }
+ }
+ if (winExpr.hasFrameDefinition()) {
+ out.println(skip(step + 1) + winExpr.getFrameMode() + ' ' + winExpr.getFrameStartKind() + ' '
+ + winExpr.getFrameEndKind() + " EXCLUDE " + winExpr.getFrameExclusionKind());
+ if (winExpr.hasFrameStartExpr()) {
+ winExpr.getFrameStartExpr().accept(this, step + 2);
+ }
+ if (winExpr.hasFrameEndExpr()) {
+ winExpr.getFrameEndExpr().accept(this, step + 2);
+ }
+ }
+ out.println(skip(step) + ")");
+ return null;
+ }
+
+ private void printFieldList(int step, List<Pair<Expression, Identifier>> fieldList) throws CompilationException {
+ out.println(skip(step) + "(");
+ for (Pair<Expression, Identifier> field : fieldList) {
+ out.print(skip(step + 1) + field.second + ":=");
+ field.first.accept(this, 0);
+ }
+ out.println(skip(step) + ")");
+ }
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
index 0c70572..39e1883 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
@@ -33,6 +33,7 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.rewrites.VariableSubstitutionEnvironment;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.util.VariableCloneAndSubstitutionUtil;
import org.apache.asterix.lang.common.visitor.CloneAndSubstituteVariablesVisitor;
import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
@@ -90,7 +91,7 @@
VariableExpr newLeftVar = generateNewVariable(context, leftVar);
VariableExpr newLeftPosVar = fromTerm.hasPositionalVariable()
? generateNewVariable(context, fromTerm.getPositionalVariable()) : null;
- Expression newLeftExpr = (Expression) visitUnnesBindingExpression(fromTerm.getLeftExpression(), env).first;
+ Expression newLeftExpr = (Expression) visitUnnestBindingExpression(fromTerm.getLeftExpression(), env).first;
List<AbstractBinaryCorrelateClause> newCorrelateClauses = new ArrayList<>();
VariableSubstitutionEnvironment currentEnv = new VariableSubstitutionEnvironment(env);
@@ -131,7 +132,7 @@
? generateNewVariable(context, joinClause.getPositionalVariable()) : null;
// Visits the right expression.
- Expression newRightExpr = (Expression) visitUnnesBindingExpression(joinClause.getRightExpression(), env).first;
+ Expression newRightExpr = (Expression) visitUnnestBindingExpression(joinClause.getRightExpression(), env).first;
// Visits the condition.
VariableSubstitutionEnvironment currentEnv = new VariableSubstitutionEnvironment(env);
@@ -183,7 +184,7 @@
? generateNewVariable(context, unnestClause.getPositionalVariable()) : null;
// Visits the right expression.
- Expression rightExpr = (Expression) visitUnnesBindingExpression(unnestClause.getRightExpression(), env).first;
+ Expression rightExpr = (Expression) visitUnnestBindingExpression(unnestClause.getRightExpression(), env).first;
// Visits the condition.
VariableSubstitutionEnvironment currentEnv = new VariableSubstitutionEnvironment(env);
@@ -416,14 +417,26 @@
@Override
public Pair<ILangExpression, VariableSubstitutionEnvironment> visit(WindowExpression winExpr,
VariableSubstitutionEnvironment env) throws CompilationException {
- Expression newExpr = (Expression) winExpr.getExpr().accept(this, env).first;
+ List<Expression> newExprList =
+ VariableCloneAndSubstitutionUtil.visitAndCloneExprList(winExpr.getExprList(), env, this);
List<Expression> newPartitionList = winExpr.hasPartitionList()
? VariableCloneAndSubstitutionUtil.visitAndCloneExprList(winExpr.getPartitionList(), env, this) : null;
- List<Expression> newOrderbyList =
- VariableCloneAndSubstitutionUtil.visitAndCloneExprList(winExpr.getOrderbyList(), env, this);
- List<OrderbyClause.OrderModifier> newOrderbyModifierList = new ArrayList<>(winExpr.getOrderbyModifierList());
- WindowExpression newWinExpr =
- new WindowExpression(newExpr, newPartitionList, newOrderbyList, newOrderbyModifierList);
+ List<Expression> newOrderbyList = winExpr.hasOrderByList()
+ ? VariableCloneAndSubstitutionUtil.visitAndCloneExprList(winExpr.getOrderbyList(), env, this) : null;
+ List<OrderbyClause.OrderModifier> newOrderbyModifierList =
+ winExpr.hasOrderByList() ? new ArrayList<>(winExpr.getOrderbyModifierList()) : null;
+ Expression newFrameStartExpr =
+ winExpr.hasFrameStartExpr() ? (Expression) winExpr.getFrameStartExpr().accept(this, env).first : null;
+ Expression newFrameEndExpr =
+ winExpr.hasFrameEndExpr() ? (Expression) winExpr.getFrameEndExpr().accept(this, env).first : null;
+ VariableExpr newWindowVar =
+ winExpr.hasWindowVar() ? (VariableExpr) winExpr.getWindowVar().accept(this, env).first : null;
+ List<Pair<Expression, Identifier>> newWindowFieldList = winExpr.hasWindowFieldList()
+ ? VariableCloneAndSubstitutionUtil.substInFieldList(winExpr.getWindowFieldList(), env, this) : null;
+ WindowExpression newWinExpr = new WindowExpression(winExpr.getFunctionSignature(), newExprList,
+ newPartitionList, newOrderbyList, newOrderbyModifierList, winExpr.getFrameMode(),
+ winExpr.getFrameStartKind(), newFrameStartExpr, winExpr.getFrameEndKind(), newFrameEndExpr,
+ winExpr.getFrameExclusionKind(), newWindowVar, newWindowFieldList);
newWinExpr.setSourceLocation(winExpr.getSourceLocation());
newWinExpr.addHints(winExpr.getHints());
return new Pair<>(newWinExpr, env);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppFormatPrintVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppFormatPrintVisitor.java
index 99368f8..1ee3004 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppFormatPrintVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppFormatPrintVisitor.java
@@ -335,8 +335,16 @@
@Override
public Void visit(WindowExpression windowExpr, Integer step) throws CompilationException {
out.print(skip(step) + "window ");
- windowExpr.getExpr().accept(this, step + 2);
- out.print(skip(step) + " over (");
+ out.print(generateFullName(windowExpr.getFunctionSignature().getNamespace(),
+ windowExpr.getFunctionSignature().getName()) + "(");
+ printDelimitedExpressions(windowExpr.getExprList(), COMMA, step);
+ out.print(")");
+ out.print(skip(step) + " over ");
+ if (windowExpr.hasWindowVar()) {
+ windowExpr.getWindowVar().accept(this, step + 2);
+ out.print(skip(step) + "as ");
+ }
+ out.print("(");
if (windowExpr.hasPartitionList()) {
List<Expression> partitionList = windowExpr.getPartitionList();
for (int i = 0, ln = partitionList.size(); i < ln; i++) {
@@ -347,8 +355,22 @@
partExpr.accept(this, step + 2);
}
}
- out.print(" order by ");
- printDelimitedObyExpressions(windowExpr.getOrderbyList(), windowExpr.getOrderbyModifierList(), step + 2);
+ if (windowExpr.hasOrderByList()) {
+ out.print(skip(step) + " order by ");
+ printDelimitedObyExpressions(windowExpr.getOrderbyList(), windowExpr.getOrderbyModifierList(), step + 2);
+ }
+ if (windowExpr.hasFrameDefinition()) {
+ out.println(skip(step) + windowExpr.getFrameMode());
+ if (windowExpr.hasFrameStartExpr()) {
+ windowExpr.getFrameStartExpr().accept(this, step + 2);
+ }
+ out.println(skip(step) + windowExpr.getFrameStartKind());
+ if (windowExpr.hasFrameEndExpr()) {
+ windowExpr.getFrameEndExpr().accept(this, step + 2);
+ }
+ out.println(skip(step) + windowExpr.getFrameEndKind());
+ out.println(skip(step) + "exclude " + windowExpr.getFrameExclusionKind());
+ }
out.println(skip(step) + ")");
return null;
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
index df165c0..8650eec 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
@@ -51,6 +51,7 @@
import org.apache.asterix.lang.sqlpp.clause.SelectSetOperation;
import org.apache.asterix.lang.sqlpp.clause.UnnestClause;
import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
+import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
import org.apache.hyracks.algebricks.common.utils.Pair;
@@ -375,6 +376,22 @@
return null;
}
+ @Override
+ public Expression visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
+ visitWindowExpressionExcludingExprList(winExpr, arg);
+ if (winExpr.hasWindowVar()) {
+ Scope preScope = scopeChecker.getCurrentScope();
+ Scope newScope = scopeChecker.extendCurrentScope();
+ VariableExpr windowVar = winExpr.getWindowVar();
+ addNewVarSymbolToScope(newScope, windowVar.getVar(), windowVar.getSourceLocation());
+ winExpr.setExprList(visit(winExpr.getExprList(), arg));
+ scopeChecker.replaceCurrentScope(preScope);
+ } else {
+ winExpr.setExprList(visit(winExpr.getExprList(), arg));
+ }
+ return winExpr;
+ }
+
// Adds a new encountered alias identifier into a scope
private void addNewVarSymbolToScope(Scope scope, VarIdentifier var, SourceLocation sourceLoc)
throws CompilationException {
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
index 9454984..d1092b3 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
@@ -46,6 +46,7 @@
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
+import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.QuantifiedPair;
import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
import org.apache.asterix.lang.sqlpp.clause.FromClause;
@@ -64,6 +65,7 @@
import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
import org.apache.asterix.lang.sqlpp.expression.WindowExpression;
import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
+import org.apache.hyracks.algebricks.common.utils.Pair;
public class AbstractSqlppSimpleExpressionVisitor
extends AbstractSqlppQueryExpressionVisitor<Expression, ILangExpression> {
@@ -217,8 +219,10 @@
for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
gbyVarExpr.setExpr(visit(gbyVarExpr.getExpr(), gc));
}
- for (GbyVariableExpressionPair decVarExpr : gc.getDecorPairList()) {
- decVarExpr.setExpr(visit(decVarExpr.getExpr(), gc));
+ if (gc.hasDecorList()) {
+ for (GbyVariableExpressionPair decVarExpr : gc.getDecorPairList()) {
+ decVarExpr.setExpr(visit(decVarExpr.getExpr(), gc));
+ }
}
return null;
}
@@ -324,12 +328,30 @@
@Override
public Expression visit(WindowExpression winExpr, ILangExpression arg) throws CompilationException {
- winExpr.setExpr(visit(winExpr.getExpr(), arg));
+ visitWindowExpressionExcludingExprList(winExpr, arg);
+ winExpr.setExprList(visit(winExpr.getExprList(), arg));
+ return winExpr;
+ }
+
+ protected void visitWindowExpressionExcludingExprList(WindowExpression winExpr, ILangExpression arg)
+ throws CompilationException {
if (winExpr.hasPartitionList()) {
winExpr.setPartitionList(visit(winExpr.getPartitionList(), winExpr));
}
- winExpr.setOrderbyList(visit(winExpr.getOrderbyList(), winExpr));
- return winExpr;
+ if (winExpr.hasOrderByList()) {
+ winExpr.setOrderbyList(visit(winExpr.getOrderbyList(), winExpr));
+ }
+ if (winExpr.hasFrameStartExpr()) {
+ winExpr.setFrameStartExpr(visit(winExpr.getFrameStartExpr(), winExpr));
+ }
+ if (winExpr.hasFrameEndExpr()) {
+ winExpr.setFrameEndExpr(visit(winExpr.getFrameEndExpr(), winExpr));
+ }
+ if (winExpr.hasWindowFieldList()) {
+ for (Pair<Expression, Identifier> field : winExpr.getWindowFieldList()) {
+ field.first = visit(field.first, arg);
+ }
+ }
}
@Override
@@ -391,8 +413,8 @@
return expr;
}
- private List<Expression> visit(List<Expression> exprs, ILangExpression arg) throws CompilationException {
- List<Expression> newExprList = new ArrayList<>();
+ protected List<Expression> visit(List<Expression> exprs, ILangExpression arg) throws CompilationException {
+ List<Expression> newExprList = new ArrayList<>(exprs.size());
for (Expression expr : exprs) {
newExprList.add(visit(expr, arg));
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 19f2cee..4078389 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -186,6 +186,21 @@
class SQLPPParser extends ScopeChecker implements IParser {
+ // tokens parsed as identifiers
+ private static final String CURRENT = "CURRENT";
+ private static final String EXCLUDE = "EXCLUDE";
+ private static final String FOLLOWING = "FOLLOWING";
+ private static final String GROUPS = "GROUPS";
+ private static final String NO = "NO";
+ private static final String OTHERS = "OTHERS";
+ private static final String PARTITION = "PARTITION";
+ private static final String PRECEDING = "PRECEDING";
+ private static final String RANGE = "RANGE";
+ private static final String ROW = "ROW";
+ private static final String ROWS = "ROWS";
+ private static final String TIES = "TIES";
+ private static final String UNBOUNDED = "UNBOUNDED";
+
// optimizer hints
private static final String AUTO_HINT = "auto";
private static final String BROADCAST_JOIN_HINT = "bcast";
@@ -372,6 +387,33 @@
expr.setSourceLocation(getSourceLocation(token));
return expr;
}
+
+ private boolean isToken(String image) {
+ return token.image.equalsIgnoreCase(image);
+ }
+
+ private void expectToken(String image) throws SqlppParseException {
+ if (!isToken(image)) {
+ throw createUnexpectedTokenError();
+ }
+ }
+
+ private SqlppParseException createUnexpectedTokenError() {
+ return new SqlppParseException(getSourceLocation(token), "Unexpected token: " + token.image);
+ }
+
+ private boolean laToken(int idx, int kind, String image) {
+ Token t = getToken(idx);
+ return t.kind == kind && t.image.equalsIgnoreCase(image);
+ }
+
+ private boolean laIdentifier(int idx, String image) {
+ return laToken(idx, IDENTIFIER, image);
+ }
+
+ private boolean laIdentifier(String image) {
+ return laIdentifier(1, image);
+ }
}
PARSER_END(SQLPPParser)
@@ -2489,6 +2531,36 @@
}
}
+Pair<VariableExpr, List<Pair<Expression, Identifier>>> VariableWithFieldMap() throws ParseException:
+{
+ VariableExpr var = null;
+ List<Pair<Expression, Identifier>> fieldList = new ArrayList<Pair<Expression, Identifier>>();
+}
+{
+ var = Variable()
+ ( LOOKAHEAD(1)
+ {
+ VariableExpr fieldVarExpr = null;
+ String fieldIdentifierStr = null;
+ }
+ <LEFTPAREN>
+ fieldVarExpr = VariableRef() <AS> fieldIdentifierStr = Identifier()
+ {
+ fieldList.add(new Pair<Expression, Identifier>(fieldVarExpr, new Identifier(fieldIdentifierStr)));
+ }
+ (<COMMA>
+ fieldVarExpr = VariableRef() <AS> fieldIdentifierStr = Identifier()
+ {
+ fieldList.add(new Pair<Expression, Identifier>(fieldVarExpr, new Identifier(fieldIdentifierStr)));
+ }
+ )*
+ <RIGHTPAREN>
+ )?
+ {
+ return new Pair<VariableExpr, List<Pair<Expression, Identifier>>>(var, fieldList);
+ }
+}
+
VariableExpr ExternalVariableRef() throws ParseException:
{
String name = null;
@@ -2615,6 +2687,7 @@
Expression FunctionCallExpr() throws ParseException:
{
Expression resultExpr;
+ CallExpr callExpr;
List<Expression> argList = new ArrayList<Expression>();
Expression tmp = null;
int arity = 0;
@@ -2622,10 +2695,6 @@
String hint = null;
boolean star = false;
boolean distinct = false;
- Token overToken = null;
- Expression partitionExpr = null;
- List<Expression> partitionExprs = new ArrayList<Expression>();
- OrderbyClause orderByClause = null;
}
{
funcName = FunctionName()
@@ -2664,7 +2733,7 @@
if (signature == null) {
signature = new FunctionSignature(funcName.dataverse, fqFunctionName, arity);
}
- CallExpr callExpr = FunctionMapUtil.normalizedListInputFunctions(new CallExpr(signature,argList));
+ callExpr = FunctionMapUtil.normalizedListInputFunctions(new CallExpr(signature,argList));
if (hint != null) {
if (hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
@@ -2676,28 +2745,171 @@
resultExpr = callExpr;
}
- (
- <OVER> { overToken = token; }
- <LEFTPAREN>
- (
- <PARTITION> <BY>
- partitionExpr = Expression() { partitionExprs.add(partitionExpr); }
- ( <COMMA> partitionExpr = Expression() { partitionExprs.add(partitionExpr); } )*
- )?
- orderByClause = OrderbyClause()
- <RIGHTPAREN>
- {
- WindowExpression winExp = new WindowExpression(callExpr, partitionExprs, orderByClause.getOrderbyList(),
- orderByClause.getModifierList());
- resultExpr = addSourceLocation(winExp, overToken);
- }
- )?
+ ( <OVER> resultExpr = WindowExpr(callExpr.getFunctionSignature(), callExpr.getExprList(), token) )?
{
return resultExpr;
}
}
+WindowExpression WindowExpr(FunctionSignature signature, List<Expression> argList, Token startToken) throws ParseException:
+{
+ Expression partitionExpr = null;
+ List<Expression> partitionExprs = new ArrayList<Expression>();
+ OrderbyClause orderByClause = null;
+ List<Expression> orderbyList = null;
+ List<OrderbyClause.OrderModifier> orderbyModifierList = null;
+ WindowExpression.FrameMode frameMode = null;
+ Pair<WindowExpression.FrameBoundaryKind, Expression> frameStart = null, frameEnd = null;
+ WindowExpression.FrameBoundaryKind frameStartKind = null, frameEndKind = null;
+ Expression frameStartExpr = null, frameEndExpr = null;
+ WindowExpression.FrameExclusionKind frameExclusionKind = null;
+ Pair<VariableExpr, List<Pair<Expression, Identifier>>> windowVarWithFieldList = null;
+ VariableExpr windowVar = null;
+ List<Pair<Expression, Identifier>> windowFieldList = null;
+}
+{
+ (
+ windowVarWithFieldList = VariableWithFieldMap() <AS>
+ {
+ windowVar = windowVarWithFieldList.first;
+ windowFieldList = windowVarWithFieldList.second;
+ }
+ )?
+ <LEFTPAREN>
+ (
+ <IDENTIFIER> { expectToken(PARTITION); } <BY>
+ partitionExpr = Expression() { partitionExprs.add(partitionExpr); }
+ ( <COMMA> partitionExpr = Expression() { partitionExprs.add(partitionExpr); } )*
+ )?
+ (
+ orderByClause = OrderbyClause()
+ {
+ orderbyList = orderByClause.getOrderbyList();
+ orderbyModifierList = orderByClause.getModifierList();
+ }
+ (
+ frameMode = WindowFrameMode()
+ (
+ frameStart = WindowFrameBoundary() |
+ ( <BETWEEN> frameStart = WindowFrameBoundary() <AND> frameEnd = WindowFrameBoundary() )
+ )
+ ( frameExclusionKind = WindowFrameExclusion() )?
+ {
+ frameStartKind = frameStart.first;
+ frameStartExpr = frameStart.second;
+ if (frameEnd == null) {
+ frameEndKind = WindowExpression.FrameBoundaryKind.CURRENT_ROW;
+ } else {
+ frameEndKind = frameEnd.first;
+ frameEndExpr = frameEnd.second;
+ }
+ if (frameExclusionKind == null) {
+ frameExclusionKind = WindowExpression.FrameExclusionKind.NO_OTHERS;
+ }
+ }
+ )?
+ )?
+ <RIGHTPAREN>
+ {
+ WindowExpression winExp = new WindowExpression(signature, argList, partitionExprs, orderbyList, orderbyModifierList,
+ frameMode, frameStartKind, frameStartExpr, frameEndKind, frameEndExpr, frameExclusionKind, windowVar,
+ windowFieldList);
+ return addSourceLocation(winExp, startToken);
+ }
+}
+
+WindowExpression.FrameMode WindowFrameMode() throws ParseException:
+{
+}
+{
+ <IDENTIFIER>
+ {
+ if (isToken(RANGE)) {
+ return WindowExpression.FrameMode.RANGE;
+ } else if (isToken(ROWS)) {
+ return WindowExpression.FrameMode.ROWS;
+ } else if (isToken(GROUPS)) {
+ return WindowExpression.FrameMode.GROUPS;
+ } else {
+ throw createUnexpectedTokenError();
+ }
+ }
+}
+
+Pair<WindowExpression.FrameBoundaryKind, Expression> WindowFrameBoundary() throws ParseException:
+{
+ boolean current = false;
+ Expression expr = null;
+}
+{
+ (
+ LOOKAHEAD({ laIdentifier(CURRENT) }) <IDENTIFIER> { current = true; }
+ | LOOKAHEAD({ laIdentifier(UNBOUNDED) }) <IDENTIFIER>
+ | expr = Expression()
+ )
+ <IDENTIFIER>
+ {
+ WindowExpression.FrameBoundaryKind kind;
+ if (current && isToken(ROW)) {
+ kind = WindowExpression.FrameBoundaryKind.CURRENT_ROW;
+ } else if (!current && isToken(PRECEDING)) {
+ kind = expr == null
+ ? WindowExpression.FrameBoundaryKind.UNBOUNDED_PRECEDING
+ : WindowExpression.FrameBoundaryKind.BOUNDED_PRECEDING;
+ } else if (!current && isToken(FOLLOWING)) {
+ kind = expr == null
+ ? WindowExpression.FrameBoundaryKind.UNBOUNDED_FOLLOWING
+ : WindowExpression.FrameBoundaryKind.BOUNDED_FOLLOWING;
+ } else {
+ throw createUnexpectedTokenError();
+ }
+ return new Pair<WindowExpression.FrameBoundaryKind, Expression>(kind, expr);
+ }
+}
+
+WindowExpression.FrameExclusionKind WindowFrameExclusion() throws ParseException:
+{
+ boolean current = false, no = false;
+}
+{
+ <IDENTIFIER>
+ {
+ expectToken(EXCLUDE);
+ }
+ (
+ <GROUP>
+ {
+ return WindowExpression.FrameExclusionKind.GROUP;
+ }
+ |
+ (
+ <IDENTIFIER>
+ {
+ if (isToken(TIES)) {
+ return WindowExpression.FrameExclusionKind.TIES;
+ } else if (isToken(CURRENT)) {
+ current = true;
+ } else if (isToken(NO)) {
+ no = true;
+ } else {
+ throw createUnexpectedTokenError();
+ }
+ }
+ <IDENTIFIER>
+ {
+ if (current && isToken(ROW)) {
+ return WindowExpression.FrameExclusionKind.CURRENT_ROW;
+ } else if (no && isToken(OTHERS)) {
+ return WindowExpression.FrameExclusionKind.NO_OTHERS;
+ } else {
+ throw createUnexpectedTokenError();
+ }
+ }
+ )
+ )
+}
+
Expression ParenthesizedExpression() throws ParseException:
{
Expression expr;
@@ -3166,9 +3378,9 @@
Expression expr = null;
VariableExpr decorVar = null;
Expression decorExpr = null;
-
+ Pair<VariableExpr, List<Pair<Expression, Identifier>>> groupVarWithFieldList = null;
VariableExpr groupVar = null;
- List<Pair<Expression, Identifier>> groupFieldList = new ArrayList<Pair<Expression, Identifier>>();
+ List<Pair<Expression, Identifier>> groupFieldList = null;
}
{
{
@@ -3212,25 +3424,11 @@
}
)*
)
- (<GROUP> <AS> groupVar = Variable()
- ( LOOKAHEAD(1)
- {
- VariableExpr fieldVarExpr = null;
- String fieldIdentifierStr = null;
- }
- <LEFTPAREN>
- fieldVarExpr = VariableRef() <AS> fieldIdentifierStr = Identifier()
- {
- groupFieldList.add(new Pair<Expression, Identifier>(fieldVarExpr, new Identifier(fieldIdentifierStr)));
- }
- (<COMMA>
- fieldVarExpr = VariableRef() <AS> fieldIdentifierStr = Identifier()
- {
- groupFieldList.add(new Pair<Expression, Identifier>(fieldVarExpr, new Identifier(fieldIdentifierStr)));
- }
- )*
- <RIGHTPAREN>
- )?
+ (<GROUP> <AS> groupVarWithFieldList = VariableWithFieldMap()
+ {
+ groupVar = groupVarWithFieldList.first;
+ groupFieldList = groupVarWithFieldList.second;
+ }
)?
{
gbc.setGbyPairList(vePairList);
@@ -3446,7 +3644,6 @@
| <OUTPUT : "output">
| <OVER: "over">
| <PATH : "path">
- | <PARTITION : "partition">
| <POLICY : "policy">
| <PRESORTED : "pre-sorted">
| <PRIMARY : "primary">
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADayTimeDuration.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADayTimeDuration.java
index 6017d4b..7e30e2a 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADayTimeDuration.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ADayTimeDuration.java
@@ -22,6 +22,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.asterix.om.base.temporal.GregorianCalendarSystem;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.IAType;
@@ -37,6 +38,16 @@
return chrononInMillisecond;
}
+ @Override
+ public String toString() {
+ StringBuilder sbder = new StringBuilder();
+ sbder.append("day_time_duration: {");
+ GregorianCalendarSystem.getInstance().getDurationExtendStringRepWithTimezoneUntilField(chrononInMillisecond, 0,
+ sbder);
+ sbder.append(" }");
+ return sbder.toString();
+ }
+
/* (non-Javadoc)
* @see org.apache.hyracks.api.dataflow.value.JSONSerializable#toJSON()
*/
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AYearMonthDuration.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AYearMonthDuration.java
index fd35adf..138d79c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AYearMonthDuration.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/AYearMonthDuration.java
@@ -49,7 +49,8 @@
public String toString() {
StringBuilder sbder = new StringBuilder();
sbder.append("year_month_duration: {");
- GregorianCalendarSystem.getInstance().getDurationMonth(chrononInMonth);
+ GregorianCalendarSystem.getInstance().getDurationExtendStringRepWithTimezoneUntilField(0, chrononInMonth,
+ sbder);
sbder.append(" }");
return sbder.toString();
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
index 1bb5aa9..08f5139 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
@@ -165,9 +165,12 @@
private static final Map<IFunctionInfo, IFunctionInfo> scalarToAggregateFunctionMap = new HashMap<>();
private static final Map<IFunctionInfo, IFunctionInfo> distinctToRegularScalarAggregateFunctionMap =
new HashMap<>();
- private static final Map<IFunctionInfo, IFunctionInfo> builtinWindowFunctions = new HashMap<>();
- private static final Set<IFunctionInfo> builtinWindowFunctionsWithOrderArgs = new HashSet<>();
- private static final Set<IFunctionInfo> builtinWindowFunctionsWithMaterialization = new HashSet<>();
+ private static final Map<IFunctionInfo, IFunctionInfo> sqlToWindowFunctions = new HashMap<>();
+ private static final Set<IFunctionInfo> windowFunctions = new HashSet<>();
+ private static final Set<IFunctionInfo> windowFunctionsWithListArg = new HashSet<>();
+ private static final Set<IFunctionInfo> windowFunctionsWithFrameClause = new HashSet<>();
+ private static final Set<IFunctionInfo> windowFunctionsWithOrderArgs = new HashSet<>();
+ private static final Set<IFunctionInfo> windowFunctionsWithMaterialization = new HashSet<>();
private static final Map<IFunctionInfo, SpatialFilterKind> spatialFilterFunctions = new HashMap<>();
@@ -490,6 +493,8 @@
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-first-element", 1);
public static final FunctionIdentifier LOCAL_FIRST_ELEMENT =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-local-first-element", 1);
+ public static final FunctionIdentifier LAST_ELEMENT =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-last-element", 1);
public static final FunctionIdentifier STDDEV =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-stddev", 1);
public static final FunctionIdentifier GLOBAL_STDDEV =
@@ -538,6 +543,10 @@
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "local-avg", 1);
public static final FunctionIdentifier SCALAR_FIRST_ELEMENT =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "first-element", 1);
+ public static final FunctionIdentifier SCALAR_LOCAL_FIRST_ELEMENT =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "local-first-element", 1);
+ public static final FunctionIdentifier SCALAR_LAST_ELEMENT =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "last-element", 1);
public static final FunctionIdentifier SCALAR_STDDEV =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "stddev", 1);
public static final FunctionIdentifier SCALAR_GLOBAL_STDDEV =
@@ -843,23 +852,43 @@
// window functions
public static final FunctionIdentifier ROW_NUMBER =
- new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "row-number", 0);
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "row_number", 0);
public static final FunctionIdentifier ROW_NUMBER_IMPL =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "row-number-impl", 0);
public static final FunctionIdentifier RANK = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "rank", 0);
public static final FunctionIdentifier RANK_IMPL =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "rank-impl", FunctionIdentifier.VARARGS);
public static final FunctionIdentifier DENSE_RANK =
- new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "dense-rank", 0);
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "dense_rank", 0);
public static final FunctionIdentifier DENSE_RANK_IMPL =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "dense-rank-impl", FunctionIdentifier.VARARGS);
public static final FunctionIdentifier PERCENT_RANK =
- new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "percent-rank", 0);
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "percent_rank", 0);
public static final FunctionIdentifier PERCENT_RANK_IMPL =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "percent-rank-impl", FunctionIdentifier.VARARGS);
public static final FunctionIdentifier NTILE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "ntile", 1);
public static final FunctionIdentifier NTILE_IMPL =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "ntile-impl", FunctionIdentifier.VARARGS);
+ public static final FunctionIdentifier LEAD =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "lead", FunctionIdentifier.VARARGS);
+ public static final FunctionIdentifier LEAD_IMPL =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "lead-impl", FunctionIdentifier.VARARGS);
+ public static final FunctionIdentifier LAG =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "lag", FunctionIdentifier.VARARGS);
+ public static final FunctionIdentifier LAG_IMPL =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "lag-impl", FunctionIdentifier.VARARGS);
+ public static final FunctionIdentifier FIRST_VALUE =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "first_value", 1);
+ public static final FunctionIdentifier FIRST_VALUE_IMPL =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "first-value-impl", 1);
+ public static final FunctionIdentifier LAST_VALUE =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "last_value", 1);
+ public static final FunctionIdentifier LAST_VALUE_IMPL =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "last-value-impl", 1);
+ public static final FunctionIdentifier NTH_VALUE =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "nth_value", 2);
+ public static final FunctionIdentifier NTH_VALUE_IMPL =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "nth-value-impl", 2);
// unnesting functions
public static final FunctionIdentifier SCAN_COLLECTION =
@@ -1335,6 +1364,8 @@
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-null", FunctionIdentifier.VARARGS);
public static final FunctionIdentifier IF_MISSING_OR_NULL =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-missing-or-null", FunctionIdentifier.VARARGS);
+ public static final FunctionIdentifier IF_SYSTEM_NULL =
+ new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-system-null", FunctionIdentifier.VARARGS);
public static final FunctionIdentifier IF_INF =
new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-inf", FunctionIdentifier.VARARGS);
public static final FunctionIdentifier IF_NAN =
@@ -1420,7 +1451,7 @@
// and then, Asterix builtin functions
addPrivateFunction(CHECK_UNKNOWN, NotUnknownTypeComputer.INSTANCE, true);
- addPrivateFunction(ANY_COLLECTION_MEMBER, CollectionMemberResultType.INSTANCE, true);
+ addPrivateFunction(ANY_COLLECTION_MEMBER, CollectionMemberResultType.INSTANCE_MISSABLE, true);
addFunction(BOOLEAN_CONSTRUCTOR, ABooleanTypeComputer.INSTANCE, true);
addFunction(CIRCLE_CONSTRUCTOR, ACircleTypeComputer.INSTANCE, true);
addPrivateFunction(CONCAT_NON_NULL, ConcatNonNullTypeComputer.INSTANCE, true);
@@ -1578,6 +1609,7 @@
addFunction(IF_NULL, IfNullTypeComputer.INSTANCE, true);
addFunction(IF_NAN, IfNanOrInfTypeComputer.INSTANCE_SKIP_MISSING, true);
addFunction(IF_NAN_OR_INF, IfNanOrInfTypeComputer.INSTANCE_SKIP_MISSING, true);
+ addPrivateFunction(IF_SYSTEM_NULL, IfNullTypeComputer.INSTANCE, true);
addFunction(MISSING_IF, MissingIfTypeComputer.INSTANCE, true);
addFunction(NULL_IF, NullIfTypeComputer.INSTANCE, true);
@@ -1595,9 +1627,12 @@
addPrivateFunction(LOCAL_AVG, LocalAvgTypeComputer.INSTANCE, true);
addFunction(AVG, NullableDoubleTypeComputer.INSTANCE, true);
addPrivateFunction(GLOBAL_AVG, NullableDoubleTypeComputer.INSTANCE, true);
- addPrivateFunction(SCALAR_FIRST_ELEMENT, CollectionMemberResultType.INSTANCE, true);
- addPrivateFunction(FIRST_ELEMENT, PropagateTypeComputer.INSTANCE, true);
- addPrivateFunction(LOCAL_FIRST_ELEMENT, PropagateTypeComputer.INSTANCE, true);
+ addPrivateFunction(SCALAR_FIRST_ELEMENT, CollectionMemberResultType.INSTANCE_NULLABLE, true);
+ addPrivateFunction(SCALAR_LOCAL_FIRST_ELEMENT, CollectionMemberResultType.INSTANCE_NULLABLE, true);
+ addPrivateFunction(SCALAR_LAST_ELEMENT, CollectionMemberResultType.INSTANCE_NULLABLE, true);
+ addPrivateFunction(FIRST_ELEMENT, PropagateTypeComputer.INSTANCE_NULLABLE, true);
+ addPrivateFunction(LOCAL_FIRST_ELEMENT, PropagateTypeComputer.INSTANCE_NULLABLE, true);
+ addPrivateFunction(LAST_ELEMENT, PropagateTypeComputer.INSTANCE_NULLABLE, true);
addPrivateFunction(LOCAL_STDDEV, LocalSingleVarStatisticsTypeComputer.INSTANCE, true);
addFunction(STDDEV, NullableDoubleTypeComputer.INSTANCE, true);
addPrivateFunction(GLOBAL_STDDEV, NullableDoubleTypeComputer.INSTANCE, true);
@@ -1796,16 +1831,26 @@
// Window functions
- addFunction(ROW_NUMBER, AInt64TypeComputer.INSTANCE, true);
- addPrivateFunction(ROW_NUMBER_IMPL, AInt64TypeComputer.INSTANCE, true);
- addFunction(RANK, AInt64TypeComputer.INSTANCE, true);
- addPrivateFunction(RANK_IMPL, AInt64TypeComputer.INSTANCE, true);
- addFunction(DENSE_RANK, AInt64TypeComputer.INSTANCE, true);
- addPrivateFunction(DENSE_RANK_IMPL, AInt64TypeComputer.INSTANCE, true);
- addFunction(PERCENT_RANK, ADoubleTypeComputer.INSTANCE, true);
- addPrivateFunction(PERCENT_RANK_IMPL, ADoubleTypeComputer.INSTANCE, true);
- addFunction(NTILE, AInt64TypeComputer.INSTANCE, true);
- addPrivateFunction(NTILE_IMPL, AInt64TypeComputer.INSTANCE, true);
+ addFunction(ROW_NUMBER, AInt64TypeComputer.INSTANCE, false);
+ addFunction(ROW_NUMBER_IMPL, AInt64TypeComputer.INSTANCE, false);
+ addFunction(RANK, AInt64TypeComputer.INSTANCE, false);
+ addFunction(RANK_IMPL, AInt64TypeComputer.INSTANCE, false);
+ addFunction(DENSE_RANK, AInt64TypeComputer.INSTANCE, false);
+ addFunction(DENSE_RANK_IMPL, AInt64TypeComputer.INSTANCE, false);
+ addFunction(PERCENT_RANK, ADoubleTypeComputer.INSTANCE, false);
+ addFunction(PERCENT_RANK_IMPL, ADoubleTypeComputer.INSTANCE, false);
+ addFunction(NTILE, AInt64TypeComputer.INSTANCE_NULLABLE, false);
+ addFunction(NTILE_IMPL, AInt64TypeComputer.INSTANCE_NULLABLE, false);
+ addFunction(LEAD, AnyTypeComputer.INSTANCE, false);
+ addFunction(LEAD_IMPL, AnyTypeComputer.INSTANCE, false);
+ addFunction(LAG, AnyTypeComputer.INSTANCE, false);
+ addFunction(LAG_IMPL, AnyTypeComputer.INSTANCE, false);
+ addFunction(FIRST_VALUE, CollectionMemberResultType.INSTANCE_NULLABLE, false);
+ addFunction(FIRST_VALUE_IMPL, CollectionMemberResultType.INSTANCE_NULLABLE, false);
+ addFunction(LAST_VALUE, CollectionMemberResultType.INSTANCE_NULLABLE, false);
+ addFunction(LAST_VALUE_IMPL, CollectionMemberResultType.INSTANCE_NULLABLE, false);
+ addFunction(NTH_VALUE, CollectionMemberResultType.INSTANCE_NULLABLE, false);
+ addFunction(NTH_VALUE_IMPL, CollectionMemberResultType.INSTANCE_NULLABLE, false);
// Similarity functions
addFunction(EDIT_DISTANCE_CONTAINS, OrderedListOfAnyTypeComputer.INSTANCE, true);
@@ -2261,7 +2306,7 @@
// FIRST_ELEMENT
- addAgg(SCALAR_FIRST_ELEMENT);
+ addAgg(FIRST_ELEMENT);
addAgg(LOCAL_FIRST_ELEMENT);
addLocalAgg(FIRST_ELEMENT, LOCAL_FIRST_ELEMENT);
addIntermediateAgg(LOCAL_FIRST_ELEMENT, FIRST_ELEMENT);
@@ -2269,6 +2314,12 @@
addGlobalAgg(FIRST_ELEMENT, FIRST_ELEMENT);
addScalarAgg(FIRST_ELEMENT, SCALAR_FIRST_ELEMENT);
+ addScalarAgg(LOCAL_FIRST_ELEMENT, SCALAR_LOCAL_FIRST_ELEMENT);
+
+ // LAST_ELEMENT
+
+ addAgg(LAST_ELEMENT);
+ addScalarAgg(LAST_ELEMENT, SCALAR_LAST_ELEMENT);
// RANGE_MAP
addAgg(RANGE_MAP);
@@ -2574,11 +2625,16 @@
static {
// Window functions
- addWindowFunction(ROW_NUMBER, ROW_NUMBER_IMPL, false, false);
- addWindowFunction(RANK, RANK_IMPL, true, false);
- addWindowFunction(DENSE_RANK, DENSE_RANK_IMPL, true, false);
- addWindowFunction(PERCENT_RANK, PERCENT_RANK_IMPL, true, true);
- addWindowFunction(NTILE, NTILE_IMPL, false, true);
+ addWindowFunction(ROW_NUMBER, ROW_NUMBER_IMPL, false, false, false, false);
+ addWindowFunction(RANK, RANK_IMPL, false, false, true, false);
+ addWindowFunction(DENSE_RANK, DENSE_RANK_IMPL, false, false, true, false);
+ addWindowFunction(PERCENT_RANK, PERCENT_RANK_IMPL, false, false, true, true);
+ addWindowFunction(NTILE, NTILE_IMPL, false, false, false, true);
+ addWindowFunction(LEAD, LEAD_IMPL, false, true, false, false);
+ addWindowFunction(LAG, LAG_IMPL, false, true, false, false);
+ addWindowFunction(FIRST_VALUE, FIRST_VALUE_IMPL, true, true, false, false);
+ addWindowFunction(LAST_VALUE, LAST_VALUE_IMPL, true, true, false, false);
+ addWindowFunction(NTH_VALUE, NTH_VALUE_IMPL, true, true, false, false);
}
static {
@@ -2762,38 +2818,59 @@
getAsterixFunctionInfo(regularscalarfi));
}
- public static void addWindowFunction(FunctionIdentifier fi, FunctionIdentifier implfi, boolean requiresOrderArgs,
+ public static void addWindowFunction(FunctionIdentifier sqlfi, FunctionIdentifier winfi,
+ boolean supportsFrameClause, boolean hasListArg, boolean requiresOrderArgs,
boolean requiresMaterialization) {
- IFunctionInfo implFinfo = getAsterixFunctionInfo(implfi);
- builtinWindowFunctions.put(getAsterixFunctionInfo(fi), implFinfo);
+ IFunctionInfo sqlinfo = getAsterixFunctionInfo(sqlfi);
+ IFunctionInfo wininfo = getAsterixFunctionInfo(winfi);
+ sqlToWindowFunctions.put(sqlinfo, wininfo);
+ windowFunctions.add(wininfo);
+ if (supportsFrameClause) {
+ windowFunctionsWithFrameClause.add(wininfo);
+ }
+ if (hasListArg) {
+ windowFunctionsWithListArg.add(wininfo);
+ }
if (requiresOrderArgs) {
- builtinWindowFunctionsWithOrderArgs.add(implFinfo);
+ windowFunctionsWithOrderArgs.add(wininfo);
}
if (requiresMaterialization) {
- builtinWindowFunctionsWithMaterialization.add(implFinfo);
+ windowFunctionsWithMaterialization.add(wininfo);
}
}
- public static boolean isBuiltinWindowFunction(FunctionIdentifier fi) {
- return builtinWindowFunctions.containsKey(getAsterixFunctionInfo(fi));
+ public static FunctionIdentifier getWindowFunction(FunctionIdentifier sqlfi) {
+ IFunctionInfo finfo = sqlToWindowFunctions.get(getAsterixFunctionInfo(sqlfi));
+ return finfo == null ? null : finfo.getFunctionIdentifier();
}
- public static boolean windowFunctionRequiresOrderArgs(FunctionIdentifier implfi) {
- return builtinWindowFunctionsWithOrderArgs.contains(getAsterixFunctionInfo(implfi));
+ public static boolean isWindowFunction(FunctionIdentifier winfi) {
+ return windowFunctions.contains(getAsterixFunctionInfo(winfi));
}
- public static boolean windowFunctionRequiresMaterialization(FunctionIdentifier implfi) {
- return builtinWindowFunctionsWithMaterialization.contains(getAsterixFunctionInfo(implfi));
+ public static boolean windowFunctionSupportsFrameClause(FunctionIdentifier winfi) {
+ return windowFunctionsWithFrameClause.contains(getAsterixFunctionInfo(winfi));
}
- public static AbstractFunctionCallExpression makeWindowFunctionExpression(FunctionIdentifier scalarfi,
+ public static boolean windowFunctionWithListArg(FunctionIdentifier winfi) {
+ return windowFunctionsWithListArg.contains(getAsterixFunctionInfo(winfi));
+ }
+
+ public static boolean windowFunctionRequiresOrderArgs(FunctionIdentifier winfi) {
+ return windowFunctionsWithOrderArgs.contains(getAsterixFunctionInfo(winfi));
+ }
+
+ public static boolean windowFunctionRequiresMaterialization(FunctionIdentifier winfi) {
+ return windowFunctionsWithMaterialization.contains(getAsterixFunctionInfo(winfi));
+ }
+
+ public static AbstractFunctionCallExpression makeWindowFunctionExpression(FunctionIdentifier winfi,
List<Mutable<ILogicalExpression>> args) {
- IFunctionInfo finfo = getAsterixFunctionInfo(scalarfi);
- IFunctionInfo implFinfo = builtinWindowFunctions.get(finfo);
- if (implFinfo == null) {
+ IFunctionInfo finfo = getAsterixFunctionInfo(winfi);
+ if (finfo == null) {
throw new IllegalStateException("no implementation for window function " + finfo);
}
- return new StatefulFunctionCallExpression(implFinfo, UnpartitionedPropertyComputer.INSTANCE, args);
+ return new StatefulFunctionCallExpression(finfo, UnpartitionedPropertyComputer.INSTANCE, args);
}
static {
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
index 1db946d..26bc116 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
@@ -21,6 +21,7 @@
import org.apache.asterix.om.exceptions.TypeMismatchException;
import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer;
import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.om.types.AUnionType;
import org.apache.asterix.om.types.AbstractCollectionType;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.IAType;
@@ -29,9 +30,19 @@
import org.apache.hyracks.api.exceptions.SourceLocation;
public class CollectionMemberResultType extends AbstractResultTypeComputer {
- public static final CollectionMemberResultType INSTANCE = new CollectionMemberResultType();
+ public static final CollectionMemberResultType INSTANCE = new CollectionMemberResultType(false, false);
- protected CollectionMemberResultType() {
+ public static final CollectionMemberResultType INSTANCE_NULLABLE = new CollectionMemberResultType(true, false);
+
+ public static final CollectionMemberResultType INSTANCE_MISSABLE = new CollectionMemberResultType(false, true);
+
+ private final boolean nullable;
+
+ private final boolean missable;
+
+ private CollectionMemberResultType(boolean nullable, boolean missable) {
+ this.missable = missable;
+ this.nullable = nullable;
}
@Override
@@ -49,7 +60,13 @@
if (type.getTypeTag() == ATypeTag.ANY) {
return BuiltinType.ANY;
}
- return ((AbstractCollectionType) type).getItemType();
+ IAType itemType = ((AbstractCollectionType) type).getItemType();
+ if (nullable) {
+ itemType = AUnionType.createNullableType(itemType);
+ }
+ if (missable) {
+ itemType = AUnionType.createMissableType(itemType);
+ }
+ return itemType;
}
-
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java
index df4524f..2aea87d 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java
@@ -19,6 +19,7 @@
package org.apache.asterix.om.typecomputer.impl;
import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer;
+import org.apache.asterix.om.types.AUnionType;
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
@@ -28,10 +29,19 @@
*/
public class PropagateTypeComputer extends AbstractResultTypeComputer {
- public static final PropagateTypeComputer INSTANCE = new PropagateTypeComputer();
+ public static final PropagateTypeComputer INSTANCE = new PropagateTypeComputer(false);
+
+ public static final PropagateTypeComputer INSTANCE_NULLABLE = new PropagateTypeComputer(true);
+
+ private final boolean nullable;
+
+ public PropagateTypeComputer(boolean nullable) {
+ this.nullable = nullable;
+ }
@Override
public IAType getResultType(ILogicalExpression expr, IAType... knownTypes) throws AlgebricksException {
- return knownTypes[0];
+ IAType t = knownTypes[0];
+ return nullable ? AUnionType.createNullableType(t) : t;
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LastElementAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LastElementAggregateDescriptor.java
new file mode 100644
index 0000000..4d2280b
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LastElementAggregateDescriptor.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.runtime.aggregates.collections;
+
+import org.apache.asterix.om.functions.BuiltinFunctions;
+import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
+import org.apache.asterix.runtime.aggregates.base.AbstractAggregateFunctionDynamicDescriptor;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+// This aggregate function simply returns the last item in an input stream.
+public class LastElementAggregateDescriptor extends AbstractAggregateFunctionDynamicDescriptor {
+
+ private static final long serialVersionUID = 1L;
+ public static final IFunctionDescriptorFactory FACTORY = () -> new LastElementAggregateDescriptor();
+
+ @Override
+ public FunctionIdentifier getIdentifier() {
+ return BuiltinFunctions.LAST_ELEMENT;
+ }
+
+ @Override
+ public IAggregateEvaluatorFactory createAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new LastElementEvalFactory(args, sourceLoc);
+ }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LastElementEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LastElementEvalFactory.java
new file mode 100644
index 0000000..4b0bf35
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LastElementEvalFactory.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.runtime.aggregates.collections;
+
+import org.apache.asterix.runtime.aggregates.std.AbstractAggregateFunction;
+import org.apache.asterix.runtime.evaluators.functions.PointableHelper;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+class LastElementEvalFactory implements IAggregateEvaluatorFactory {
+
+ private static final long serialVersionUID = 1L;
+ private final IScalarEvaluatorFactory[] args;
+ private final SourceLocation sourceLoc;
+
+ LastElementEvalFactory(IScalarEvaluatorFactory[] args, SourceLocation sourceLoc) {
+ this.args = args;
+ this.sourceLoc = sourceLoc;
+ }
+
+ @Override
+ public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
+ return new AbstractAggregateFunction(sourceLoc) {
+
+ // Needs to copy the bytes from inputVal to outputVal because the byte space of inputVal could be re-used
+ // by consequent tuples.
+ private ArrayBackedValueStorage outputVal = new ArrayBackedValueStorage();
+ private IPointable inputVal = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
+ private boolean empty;
+
+ @Override
+ public void init() {
+ empty = true;
+ }
+
+ @Override
+ public void step(IFrameTupleReference tuple) throws HyracksDataException {
+ eval.evaluate(tuple, inputVal);
+ outputVal.assign(inputVal);
+ empty = false;
+ }
+
+ @Override
+ public void finish(IPointable result) {
+ if (empty) {
+ PointableHelper.setNull(result);
+ } else {
+ result.set(outputVal);
+ }
+ }
+
+ @Override
+ public void finishPartial(IPointable result) {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
index 38d8e05..9b28fb6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
@@ -94,7 +94,7 @@
// the string to be parsed should be at least 6 characters: hhmmss
if (stringLength < 6) {
throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
- ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
+ ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
int chrononTimeInMs =
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
index 746273f..0038d58 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
@@ -308,11 +308,13 @@
case FLOAT:
if (evaluateDouble(operandsFloating[0], operandsFloating[1], aDouble)) {
dres = aDouble.getDoubleValue();
- if (dres > Float.MAX_VALUE) {
- throw new OverflowException(sourceLoc, getIdentifier());
- }
- if (dres < -Float.MAX_VALUE) {
- throw new UnderflowException(sourceLoc, getIdentifier());
+ if (Double.isFinite(dres)) {
+ if (dres > Float.MAX_VALUE) {
+ throw new OverflowException(sourceLoc, getIdentifier());
+ }
+ if (dres < -Float.MAX_VALUE) {
+ throw new UnderflowException(sourceLoc, getIdentifier());
+ }
}
aFloat.setValue((float) dres);
floatSerde.serialize(aFloat, out);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IfSystemNullDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IfSystemNullDescriptor.java
new file mode 100644
index 0000000..90df330
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IfSystemNullDescriptor.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.asterix.runtime.evaluators.functions;
+
+import org.apache.asterix.om.functions.BuiltinFunctions;
+import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+public class IfSystemNullDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+ private static final long serialVersionUID = 1L;
+ public static final IFunctionDescriptorFactory FACTORY = IfSystemNullDescriptor::new;
+
+ @Override
+ public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
+ return new IfMissingOrNullDescriptor.AbstractIfMissingOrNullEval(ctx, args) {
+ @Override
+ protected boolean skip(byte argTypeTag) {
+ return argTypeTag == ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG;
+ }
+ };
+ }
+ };
+ }
+
+ @Override
+ public FunctionIdentifier getIdentifier() {
+ return BuiltinFunctions.IF_SYSTEM_NULL;
+ }
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java
index dceb5a8..0487385 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java
@@ -29,6 +29,7 @@
import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
import org.apache.asterix.om.functions.IFunctionRegistrant;
import org.apache.asterix.runtime.aggregates.collections.FirstElementAggregateDescriptor;
+import org.apache.asterix.runtime.aggregates.collections.LastElementAggregateDescriptor;
import org.apache.asterix.runtime.aggregates.collections.ListifyAggregateDescriptor;
import org.apache.asterix.runtime.aggregates.collections.LocalFirstElementAggregateDescriptor;
import org.apache.asterix.runtime.aggregates.scalar.ScalarAvgAggregateDescriptor;
@@ -271,6 +272,7 @@
import org.apache.asterix.runtime.evaluators.functions.IfNanDescriptor;
import org.apache.asterix.runtime.evaluators.functions.IfNanOrInfDescriptor;
import org.apache.asterix.runtime.evaluators.functions.IfNullDescriptor;
+import org.apache.asterix.runtime.evaluators.functions.IfSystemNullDescriptor;
import org.apache.asterix.runtime.evaluators.functions.InjectFailureDescriptor;
import org.apache.asterix.runtime.evaluators.functions.IsArrayDescriptor;
import org.apache.asterix.runtime.evaluators.functions.IsAtomicDescriptor;
@@ -532,6 +534,7 @@
fc.add(LocalMinAggregateDescriptor.FACTORY);
fc.add(FirstElementAggregateDescriptor.FACTORY);
fc.add(LocalFirstElementAggregateDescriptor.FACTORY);
+ fc.add(LastElementAggregateDescriptor.FACTORY);
fc.add(StddevAggregateDescriptor.FACTORY);
fc.add(LocalStddevAggregateDescriptor.FACTORY);
fc.add(IntermediateStddevAggregateDescriptor.FACTORY);
@@ -702,6 +705,7 @@
fc.add(IfMissingDescriptor.FACTORY);
fc.add(IfNullDescriptor.FACTORY);
fc.add(IfMissingOrNullDescriptor.FACTORY);
+ fc.add(IfSystemNullDescriptor.FACTORY);
// uuid generators (zero independent functions)
fc.add(CreateUUIDDescriptor.FACTORY);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/AbstractRankRunningAggregateEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/AbstractRankRunningAggregateEvaluator.java
index 54bcc1a..7e6d218 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/AbstractRankRunningAggregateEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/AbstractRankRunningAggregateEvaluator.java
@@ -51,9 +51,9 @@
private IBinaryComparator[] argComparators;
- private boolean first;
+ protected boolean first;
- private long rank;
+ protected long rank;
private long groupSize;
@@ -85,28 +85,28 @@
@Override
public void step(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
+ resultStorage.reset();
for (int i = 0; i < args.length; i++) {
args[i].evaluate(tuple, argCurrValues[i]);
}
computeRank();
+ computeResult(resultStorage.getDataOutput());
+
+ result.set(resultStorage);
for (int i = 0; i < args.length; i++) {
argPrevValues[i].assign(argCurrValues[i]);
}
-
- resultStorage.reset();
- writeResult(rank, resultStorage.getDataOutput());
- result.set(resultStorage);
+ first = false;
}
- protected abstract void writeResult(long rank, DataOutput out) throws HyracksDataException;
+ protected abstract void computeResult(DataOutput out) throws HyracksDataException;
private void computeRank() throws HyracksDataException {
if (first) {
rank = 1;
groupSize = 1;
- first = false;
} else if (sameGroup()) {
groupSize++;
} else {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/NtileRunningAggregateEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/NtileRunningAggregateEvaluator.java
index 9bd306e..aebef6a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/NtileRunningAggregateEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/NtileRunningAggregateEvaluator.java
@@ -22,8 +22,10 @@
import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
import org.apache.asterix.om.base.AInt64;
import org.apache.asterix.om.base.AMutableInt64;
+import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
+import org.apache.asterix.runtime.evaluators.functions.PointableHelper;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IWindowAggregateEvaluator;
@@ -63,6 +65,8 @@
private long count;
+ private boolean isNull;
+
NtileRunningAggregateEvaluator(IScalarEvaluator evalNumGroups, FunctionIdentifier funId) {
this.evalNumGroups = evalNumGroups;
this.funId = funId;
@@ -76,6 +80,9 @@
public void initPartition(long partitionLength) {
this.partitionLength = partitionLength;
resultValue = 0;
+ isNull = false;
+ groupSize = 1;
+ groupRemainder = 0;
}
@Override
@@ -93,23 +100,28 @@
count = 1;
}
- resultStorage.reset();
- aInt64.setValue(resultValue);
- serde.serialize(aInt64, resultStorage.getDataOutput());
- result.set(resultStorage);
+ if (isNull) {
+ PointableHelper.setNull(result);
+ } else {
+ resultStorage.reset();
+ aInt64.setValue(resultValue);
+ serde.serialize(aInt64, resultStorage.getDataOutput());
+ result.set(resultStorage);
+ }
}
private void evaluateGroupSize(IFrameTupleReference tuple) throws HyracksDataException {
evalNumGroups.evaluate(tuple, argNumGroups);
byte[] bytes = argNumGroups.getByteArray();
int offset = argNumGroups.getStartOffset();
- long numGroups = ATypeHierarchy.getLongValue(funId.getName(), 0, bytes, offset);
- if (numGroups > partitionLength || numGroups <= 0) {
- groupSize = partitionLength;
- groupRemainder = 0;
+ if (bytes[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ isNull = true;
} else {
- groupSize = partitionLength / numGroups;
- groupRemainder = partitionLength % numGroups;
+ long numGroups = ATypeHierarchy.getLongValue(funId.getName(), 0, bytes, offset);
+ if (numGroups > 0 && numGroups <= partitionLength) {
+ groupSize = partitionLength / numGroups;
+ groupRemainder = partitionLength % numGroups;
+ }
}
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/PercentRankRunningAggregateEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/PercentRankRunningAggregateEvaluator.java
index c73d9fd..edad37f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/PercentRankRunningAggregateEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/PercentRankRunningAggregateEvaluator.java
@@ -54,8 +54,8 @@
}
@Override
- protected void writeResult(long rank, DataOutput out) throws HyracksDataException {
- double percentRank = (rank - 1) / divisor;
+ protected void computeResult(DataOutput out) throws HyracksDataException {
+ double percentRank = first ? 0 : (rank - 1) / divisor;
aDouble.setValue(percentRank);
serde.serialize(aDouble, out);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/RankRunningAggregateEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/RankRunningAggregateEvaluator.java
index 56ab2996..9eba129 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/RankRunningAggregateEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/runningaggregates/std/RankRunningAggregateEvaluator.java
@@ -45,7 +45,7 @@
super(args, dense, sourceLoc);
}
- protected void writeResult(long rank, DataOutput out) throws HyracksDataException {
+ protected void computeResult(DataOutput out) throws HyracksDataException {
aInt64.setValue(rank);
serde.serialize(aInt64, out);
}
diff --git a/asterixdb/src/main/licenses/templates/source_only_licenses.ftl b/asterixdb/src/main/licenses/templates/source_only_licenses.ftl
index eb75200..021416a 100644
--- a/asterixdb/src/main/licenses/templates/source_only_licenses.ftl
+++ b/asterixdb/src/main/licenses/templates/source_only_licenses.ftl
@@ -214,4 +214,30 @@
END OF TERMS AND CONDITIONS
</@license>
+<@license files=["asterix-app/src/test/resources/runtimets/queries_sqlpp/window/pg_win/*", "asterix-app/data/tenk.tbl"]
+ component="AsterixDB tests" licenseName="PostgreSQL License">
+PostgreSQL Database Management System
+(formerly known as Postgres, then as Postgres95)
+
+Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
+
+Portions Copyright (c) 1994, The Regents of the University of California
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose, without fee, and without a written agreement
+is hereby granted, provided that the above copyright notice and this
+paragraph and the following two paragraphs appear in all copies.
+
+IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
+LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
+DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+</@license>
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractOperatorWithNestedPlans.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractOperatorWithNestedPlans.java
index 167c022..95e60a9 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractOperatorWithNestedPlans.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractOperatorWithNestedPlans.java
@@ -28,6 +28,11 @@
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.properties.TypePropagationPolicy;
+import org.apache.hyracks.algebricks.core.algebra.typing.ITypeEnvPointer;
+import org.apache.hyracks.algebricks.core.algebra.typing.ITypingContext;
+import org.apache.hyracks.algebricks.core.algebra.typing.OpRefTypeEnvPointer;
+import org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment;
public abstract class AbstractOperatorWithNestedPlans extends AbstractLogicalOperator {
protected final List<ILogicalPlan> nestedPlans;
@@ -87,6 +92,35 @@
return false;
}
+ protected PropagatingTypeEnvironment createNestedPlansPropagatingTypeEnvironment(ITypingContext ctx,
+ boolean propagateInput) {
+ int n = 0;
+ for (ILogicalPlan p : nestedPlans) {
+ n += p.getRoots().size();
+ }
+
+ int i;
+ ITypeEnvPointer[] envPointers;
+ if (propagateInput) {
+ i = inputs.size();
+ envPointers = new ITypeEnvPointer[n + i];
+ for (int j = 0; j < i; j++) {
+ envPointers[j] = new OpRefTypeEnvPointer(inputs.get(j), ctx);
+ }
+ } else {
+ envPointers = new ITypeEnvPointer[n];
+ i = 0;
+ }
+ for (ILogicalPlan p : nestedPlans) {
+ for (Mutable<ILogicalOperator> r : p.getRoots()) {
+ envPointers[i] = new OpRefTypeEnvPointer(r, ctx);
+ i++;
+ }
+ }
+ return new PropagatingTypeEnvironment(ctx.getExpressionTypeComputer(), ctx.getMissableTypeComputer(),
+ ctx.getMetadataProvider(), TypePropagationPolicy.ALL, envPointers);
+ }
+
public abstract void getUsedVariablesExceptNestedPlans(Collection<LogicalVariable> vars);
public abstract void getProducedVariablesExceptNestedPlans(Collection<LogicalVariable> vars);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/GroupByOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/GroupByOperator.java
index 365d77e..49bf062 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/GroupByOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/GroupByOperator.java
@@ -34,12 +34,8 @@
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import org.apache.hyracks.algebricks.core.algebra.properties.TypePropagationPolicy;
import org.apache.hyracks.algebricks.core.algebra.properties.VariablePropagationPolicy;
-import org.apache.hyracks.algebricks.core.algebra.typing.ITypeEnvPointer;
import org.apache.hyracks.algebricks.core.algebra.typing.ITypingContext;
-import org.apache.hyracks.algebricks.core.algebra.typing.OpRefTypeEnvPointer;
-import org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
@@ -233,20 +229,7 @@
@Override
public IVariableTypeEnvironment computeOutputTypeEnvironment(ITypingContext ctx) throws AlgebricksException {
- int n = 0;
- for (ILogicalPlan p : nestedPlans) {
- n += p.getRoots().size();
- }
- ITypeEnvPointer[] envPointers = new ITypeEnvPointer[n];
- int i = 0;
- for (ILogicalPlan p : nestedPlans) {
- for (Mutable<ILogicalOperator> r : p.getRoots()) {
- envPointers[i] = new OpRefTypeEnvPointer(r, ctx);
- i++;
- }
- }
- IVariableTypeEnvironment env = new PropagatingTypeEnvironment(ctx.getExpressionTypeComputer(),
- ctx.getMissableTypeComputer(), ctx.getMetadataProvider(), TypePropagationPolicy.ALL, envPointers);
+ IVariableTypeEnvironment env = createNestedPlansPropagatingTypeEnvironment(ctx, false);
ILogicalOperator child = inputs.get(0).getValue();
IVariableTypeEnvironment env2 = ctx.getOutputTypeEnvironment(child);
for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : getGroupByList()) {
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/SubplanOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/SubplanOperator.java
index b805761..72150a9 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/SubplanOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/SubplanOperator.java
@@ -31,12 +31,8 @@
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
-import org.apache.hyracks.algebricks.core.algebra.properties.TypePropagationPolicy;
import org.apache.hyracks.algebricks.core.algebra.properties.VariablePropagationPolicy;
-import org.apache.hyracks.algebricks.core.algebra.typing.ITypeEnvPointer;
import org.apache.hyracks.algebricks.core.algebra.typing.ITypingContext;
-import org.apache.hyracks.algebricks.core.algebra.typing.OpRefTypeEnvPointer;
-import org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
@@ -94,21 +90,6 @@
@Override
public IVariableTypeEnvironment computeOutputTypeEnvironment(ITypingContext ctx) throws AlgebricksException {
- int n = 0;
- for (ILogicalPlan p : nestedPlans) {
- n += p.getRoots().size();
- }
- ITypeEnvPointer[] envPointers = new ITypeEnvPointer[n + 1];
- envPointers[0] = new OpRefTypeEnvPointer(inputs.get(0), ctx);
- int i = 1;
- for (ILogicalPlan p : nestedPlans) {
- for (Mutable<ILogicalOperator> r : p.getRoots()) {
- envPointers[i] = new OpRefTypeEnvPointer(r, ctx);
- i++;
- }
- }
- return new PropagatingTypeEnvironment(ctx.getExpressionTypeComputer(), ctx.getMissableTypeComputer(),
- ctx.getMetadataProvider(), TypePropagationPolicy.ALL, envPointers);
+ return createNestedPlansPropagatingTypeEnvironment(ctx, true);
}
-
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/WindowOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/WindowOperator.java
index aa1791f..e09b471 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/WindowOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/WindowOperator.java
@@ -20,12 +20,15 @@
package org.apache.hyracks.algebricks.core.algebra.operators.logical;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
@@ -39,22 +42,54 @@
* <ul>
* <li>{@link #partitionExpressions} - define how input data must be partitioned</li>
* <li>{@link #orderExpressions} - define how data inside these partitions must be ordered</li>
- * <li>{@link #expressions} - window function expressions (running aggregates)</li>
+ * <li>{@link #frameValueExpressions} - value expressions for comparing against frame start / end boundaries and frame exclusion</li>
+ * <li>{@link #frameStartExpressions} - frame start boundary</li>
+ * <li>{@link #frameEndExpressions} - frame end boundary</li>
+ * <li>{@link #frameExcludeExpressions} - define values to be excluded from the frame</li>
+ * <li>{@link #frameOffset} - sets how many tuples to skip inside each frame</li>
+ * <li>{@link #frameMaxObjects} - limits number of tuples to be returned for each frame</li>
* <li>{@link #variables} - output variables containing return values of these functions</li>
+ * <li>{@link #expressions} - window function expressions (running aggregates)</li>
* </ul>
*
* Window operator does not change cardinality of the input stream.
*/
-public class WindowOperator extends AbstractAssignOperator {
+public class WindowOperator extends AbstractOperatorWithNestedPlans {
private final List<Mutable<ILogicalExpression>> partitionExpressions;
private final List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExpressions;
+ private final List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> frameValueExpressions;
+
+ private final List<Mutable<ILogicalExpression>> frameStartExpressions;
+
+ private final List<Mutable<ILogicalExpression>> frameEndExpressions;
+
+ private final List<Mutable<ILogicalExpression>> frameExcludeExpressions;
+
+ private final int frameExcludeNegationStartIdx;
+
+ private final Mutable<ILogicalExpression> frameOffset;
+
+ private int frameMaxObjects;
+
+ private final List<LogicalVariable> variables;
+
+ private final List<Mutable<ILogicalExpression>> expressions;
+
+ public WindowOperator(List<Mutable<ILogicalExpression>> partitionExpressions,
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExpressions) {
+ this(partitionExpressions, orderExpressions, null, null, null, null, -1, null, -1);
+ }
+
public WindowOperator(List<Mutable<ILogicalExpression>> partitionExpressions,
List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExpressions,
- List<LogicalVariable> variables, List<Mutable<ILogicalExpression>> expressions) {
- super(variables, expressions);
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> frameValueExpressions,
+ List<Mutable<ILogicalExpression>> frameStartExpressions,
+ List<Mutable<ILogicalExpression>> frameEndExpressions,
+ List<Mutable<ILogicalExpression>> frameExcludeExpressions, int frameExcludeNegationStartIdx,
+ ILogicalExpression frameOffset, int frameMaxObjects) {
this.partitionExpressions = new ArrayList<>();
if (partitionExpressions != null) {
this.partitionExpressions.addAll(partitionExpressions);
@@ -63,6 +98,48 @@
if (orderExpressions != null) {
this.orderExpressions.addAll(orderExpressions);
}
+ this.frameValueExpressions = new ArrayList<>();
+ if (frameValueExpressions != null) {
+ this.frameValueExpressions.addAll(frameValueExpressions);
+ }
+ this.frameStartExpressions = new ArrayList<>();
+ if (frameStartExpressions != null) {
+ this.frameStartExpressions.addAll(frameStartExpressions);
+ }
+ this.frameEndExpressions = new ArrayList<>();
+ if (frameEndExpressions != null) {
+ this.frameEndExpressions.addAll(frameEndExpressions);
+ }
+ this.frameExcludeExpressions = new ArrayList<>();
+ if (frameExcludeExpressions != null) {
+ this.frameExcludeExpressions.addAll(frameExcludeExpressions);
+ }
+ this.frameExcludeNegationStartIdx = frameExcludeNegationStartIdx;
+ this.frameOffset = new MutableObject<>(frameOffset);
+ this.variables = new ArrayList<>();
+ this.expressions = new ArrayList<>();
+ setFrameMaxObjects(frameMaxObjects);
+ }
+
+ public WindowOperator(List<Mutable<ILogicalExpression>> partitionExpressions,
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExpressions,
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> frameValueExpressions,
+ List<Mutable<ILogicalExpression>> frameStartExpressions,
+ List<Mutable<ILogicalExpression>> frameEndExpressions,
+ List<Mutable<ILogicalExpression>> frameExcludeExpressions, int frameExcludeNegationStartIdx,
+ ILogicalExpression frameOffset, int frameMaxObjects, List<LogicalVariable> variables,
+ List<Mutable<ILogicalExpression>> expressions, List<ILogicalPlan> nestedPlans) {
+ this(partitionExpressions, orderExpressions, frameValueExpressions, frameStartExpressions, frameEndExpressions,
+ frameExcludeExpressions, frameExcludeNegationStartIdx, frameOffset, frameMaxObjects);
+ if (variables != null) {
+ this.variables.addAll(variables);
+ }
+ if (expressions != null) {
+ this.expressions.addAll(expressions);
+ }
+ if (nestedPlans != null) {
+ this.nestedPlans.addAll(nestedPlans);
+ }
}
@Override
@@ -70,12 +147,63 @@
return LogicalOperatorTag.WINDOW;
}
+ public List<Mutable<ILogicalExpression>> getPartitionExpressions() {
+ return partitionExpressions;
+ }
+
public List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> getOrderExpressions() {
return orderExpressions;
}
- public List<Mutable<ILogicalExpression>> getPartitionExpressions() {
- return partitionExpressions;
+ public List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> getFrameValueExpressions() {
+ return frameValueExpressions;
+ }
+
+ public List<Mutable<ILogicalExpression>> getFrameStartExpressions() {
+ return frameStartExpressions;
+ }
+
+ public List<Mutable<ILogicalExpression>> getFrameEndExpressions() {
+ return frameEndExpressions;
+ }
+
+ public List<Mutable<ILogicalExpression>> getFrameExcludeExpressions() {
+ return frameExcludeExpressions;
+ }
+
+ public int getFrameExcludeNegationStartIdx() {
+ return frameExcludeNegationStartIdx;
+ }
+
+ public Mutable<ILogicalExpression> getFrameOffset() {
+ return frameOffset;
+ }
+
+ public int getFrameMaxObjects() {
+ return frameMaxObjects;
+ }
+
+ public void setFrameMaxObjects(int value) {
+ frameMaxObjects = Math.max(-1, value);
+ }
+
+ public List<LogicalVariable> getVariables() {
+ return variables;
+ }
+
+ public List<Mutable<ILogicalExpression>> getExpressions() {
+ return expressions;
+ }
+
+ @Override
+ public boolean hasNestedPlans() {
+ return !nestedPlans.isEmpty();
+ }
+
+ @Override
+ public void recomputeSchema() {
+ super.recomputeSchema();
+ schema.addAll(variables);
}
@Override
@@ -85,19 +213,45 @@
@Override
public boolean acceptExpressionTransform(ILogicalExpressionReferenceTransform visitor) throws AlgebricksException {
- boolean mod = super.acceptExpressionTransform(visitor);
+ boolean mod = false;
for (Mutable<ILogicalExpression> expr : partitionExpressions) {
mod |= visitor.transform(expr);
}
for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExpressions) {
mod |= visitor.transform(p.second);
}
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : frameValueExpressions) {
+ mod |= visitor.transform(p.second);
+ }
+ for (Mutable<ILogicalExpression> expr : frameStartExpressions) {
+ mod |= visitor.transform(expr);
+ }
+ for (Mutable<ILogicalExpression> expr : frameEndExpressions) {
+ mod |= visitor.transform(expr);
+ }
+ for (Mutable<ILogicalExpression> excludeExpr : frameExcludeExpressions) {
+ mod |= visitor.transform(excludeExpr);
+ }
+ if (frameOffset.getValue() != null) {
+ mod |= visitor.transform(frameOffset);
+ }
+ for (Mutable<ILogicalExpression> expr : expressions) {
+ mod |= visitor.transform(expr);
+ }
return mod;
}
@Override
public VariablePropagationPolicy getVariablePropagationPolicy() {
- return createVariablePropagationPolicy(true);
+ return new VariablePropagationPolicy() {
+ @Override
+ public void propagateVariables(IOperatorSchema target, IOperatorSchema... sources) {
+ target.addAllVariables(sources[0]);
+ for (LogicalVariable v : variables) {
+ target.addVariable(v);
+ }
+ }
+ };
}
@Override
@@ -107,12 +261,44 @@
@Override
public IVariableTypeEnvironment computeOutputTypeEnvironment(ITypingContext ctx) throws AlgebricksException {
- IVariableTypeEnvironment env = createPropagatingAllInputsTypeEnvironment(ctx);
- int n = variables.size();
- for (int i = 0; i < n; i++) {
+ IVariableTypeEnvironment env = createNestedPlansPropagatingTypeEnvironment(ctx, true);
+ for (int i = 0, n = variables.size(); i < n; i++) {
env.setVarType(variables.get(i), ctx.getExpressionTypeComputer().getType(expressions.get(i).getValue(),
ctx.getMetadataProvider(), env));
}
return env;
}
+
+ @Override
+ public void getProducedVariablesExceptNestedPlans(Collection<LogicalVariable> vars) {
+ vars.addAll(variables);
+ }
+
+ @Override
+ public void getUsedVariablesExceptNestedPlans(Collection<LogicalVariable> vars) {
+ for (Mutable<ILogicalExpression> expr : partitionExpressions) {
+ expr.getValue().getUsedVariables(vars);
+ }
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExpressions) {
+ p.second.getValue().getUsedVariables(vars);
+ }
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : frameValueExpressions) {
+ p.second.getValue().getUsedVariables(vars);
+ }
+ for (Mutable<ILogicalExpression> expr : frameStartExpressions) {
+ expr.getValue().getUsedVariables(vars);
+ }
+ for (Mutable<ILogicalExpression> expr : frameEndExpressions) {
+ expr.getValue().getUsedVariables(vars);
+ }
+ for (Mutable<ILogicalExpression> excludeExpr : frameExcludeExpressions) {
+ excludeExpr.getValue().getUsedVariables(vars);
+ }
+ if (frameOffset != null) {
+ frameOffset.getValue().getUsedVariables(vars);
+ }
+ for (Mutable<ILogicalExpression> expr : expressions) {
+ expr.getValue().getUsedVariables(vars);
+ }
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java
index d91a255..764fe49 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java
@@ -196,7 +196,7 @@
return Boolean.FALSE;
}
LimitOperator limitOpArg = (LimitOperator) copyAndSubstituteVar(op, arg);
- if (op.getOffset() != limitOpArg.getOffset()) {
+ if (!Objects.equals(op.getOffset().getValue(), limitOpArg.getOffset().getValue())) {
return Boolean.FALSE;
}
boolean isomorphic = op.getMaxObjects().getValue().equals(limitOpArg.getMaxObjects().getValue());
@@ -621,21 +621,45 @@
public Boolean visitWindowOperator(WindowOperator op, ILogicalOperator arg) throws AlgebricksException {
AbstractLogicalOperator aop = (AbstractLogicalOperator) arg;
if (aop.getOperatorTag() != LogicalOperatorTag.WINDOW) {
- return Boolean.FALSE;
+ return false;
}
WindowOperator windowOpArg = (WindowOperator) copyAndSubstituteVar(op, arg);
if (!VariableUtilities.varListEqualUnordered(op.getPartitionExpressions(),
windowOpArg.getPartitionExpressions())) {
- return Boolean.FALSE;
+ return false;
}
if (!compareIOrderAndExpressions(op.getOrderExpressions(), windowOpArg.getOrderExpressions())) {
- return Boolean.FALSE;
+ return false;
+ }
+ if (!compareIOrderAndExpressions(op.getFrameValueExpressions(), windowOpArg.getFrameValueExpressions())) {
+ return false;
+ }
+ if (!compareExpressions(op.getFrameStartExpressions(), windowOpArg.getFrameStartExpressions())) {
+ return false;
+ }
+ if (!compareExpressions(op.getFrameEndExpressions(), windowOpArg.getFrameEndExpressions())) {
+ return false;
+ }
+ if (!compareExpressions(op.getFrameExcludeExpressions(), windowOpArg.getFrameExcludeExpressions())) {
+ return false;
+ }
+ if (op.getFrameExcludeNegationStartIdx() != windowOpArg.getFrameExcludeNegationStartIdx()) {
+ return false;
+ }
+ if (!Objects.equals(op.getFrameOffset().getValue(), windowOpArg.getFrameOffset().getValue())) {
+ return false;
+ }
+ if (op.getFrameMaxObjects() != windowOpArg.getFrameMaxObjects()) {
+ return false;
}
if (!VariableUtilities.varListEqualUnordered(getPairList(op.getVariables(), op.getExpressions()),
getPairList(windowOpArg.getVariables(), windowOpArg.getExpressions()))) {
- return Boolean.FALSE;
+ return false;
}
- return Boolean.TRUE;
+ List<ILogicalPlan> plans = op.getNestedPlans();
+ List<ILogicalPlan> plansArg = windowOpArg.getNestedPlans();
+ boolean isomorphic = compareSubplans(plans, plansArg);
+ return isomorphic;
}
private Boolean compareExpressions(List<Mutable<ILogicalExpression>> opExprs,
@@ -670,6 +694,19 @@
return Boolean.TRUE;
}
+ private boolean compareSubplans(List<ILogicalPlan> plans, List<ILogicalPlan> plansArg) throws AlgebricksException {
+ int plansSize = plans.size();
+ if (plansSize != plansArg.size()) {
+ return false;
+ }
+ for (int i = 0; i < plansSize; i++) {
+ if (!IsomorphismUtilities.isOperatorIsomorphicPlan(plans.get(i), plansArg.get(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
private ILogicalOperator copyAndSubstituteVar(ILogicalOperator op, ILogicalOperator argOp)
throws AlgebricksException {
ILogicalOperator newOp = OperatorManipulationUtil.deepCopy(argOp);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java
index d0aec16..5591053 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismVariableMappingVisitor.java
@@ -100,6 +100,7 @@
public Void visitWindowOperator(WindowOperator op, ILogicalOperator arg) throws AlgebricksException {
mapChildren(op, arg);
mapVariablesForAbstractAssign(op, arg);
+ mapVariablesInNestedPlans(op, arg);
return null;
}
@@ -417,8 +418,8 @@
}
}
- private void mapVariablesInNestedPlans(ILogicalOperator opOrigin, ILogicalOperator arg) throws AlgebricksException {
- AbstractOperatorWithNestedPlans op = (AbstractOperatorWithNestedPlans) opOrigin;
+ private void mapVariablesInNestedPlans(AbstractOperatorWithNestedPlans op, ILogicalOperator arg)
+ throws AlgebricksException {
AbstractOperatorWithNestedPlans argOp = (AbstractOperatorWithNestedPlans) arg;
List<ILogicalPlan> plans = op.getNestedPlans();
List<ILogicalPlan> plansArg = argOp.getNestedPlans();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
index 198ffdc..8ab23c2 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
@@ -618,11 +618,24 @@
exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getPartitionExpressions());
List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprCopy =
deepCopyOrderExpressionReferencePairList(op.getOrderExpressions());
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> frameValueExprCopy =
+ deepCopyOrderExpressionReferencePairList(op.getFrameValueExpressions());
+ List<Mutable<ILogicalExpression>> frameStartExprCopy =
+ exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getFrameStartExpressions());
+ List<Mutable<ILogicalExpression>> frameEndExprCopy =
+ exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getFrameEndExpressions());
+ List<Mutable<ILogicalExpression>> frameExclusionExprCopy =
+ exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getFrameExcludeExpressions());
+ ILogicalExpression frameOffsetCopy = exprDeepCopyVisitor.deepCopy(op.getFrameOffset().getValue());
List<LogicalVariable> varCopy = deepCopyVariableList(op.getVariables());
List<Mutable<ILogicalExpression>> exprCopy =
exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getExpressions());
- WindowOperator opCopy = new WindowOperator(partitionExprCopy, orderExprCopy, varCopy, exprCopy);
+ List<ILogicalPlan> nestedPlansCopy = new ArrayList<>();
+ WindowOperator opCopy = new WindowOperator(partitionExprCopy, orderExprCopy, frameValueExprCopy,
+ frameStartExprCopy, frameEndExprCopy, frameExclusionExprCopy, op.getFrameExcludeNegationStartIdx(),
+ frameOffsetCopy, op.getFrameMaxObjects(), varCopy, exprCopy, nestedPlansCopy);
deepCopyInputsAnnotationsAndExecutionMode(op, arg, opCopy);
+ deepCopyPlanList(op.getNestedPlans(), nestedPlansCopy, opCopy);
return opCopy;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java
index 0aaa529..5a566ee 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java
@@ -18,6 +18,8 @@
*/
package org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors;
+import java.util.List;
+
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
@@ -26,7 +28,6 @@
import org.apache.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionEvalSizeComputer;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableEvalSizeEnvironment;
-import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractAssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator;
@@ -96,7 +97,7 @@
@Override
public Void visitAssignOperator(AssignOperator op, IOptimizationContext context) throws AlgebricksException {
- visitAssignment(op, context);
+ visitAssignment(op, op.getExpressions(), context);
return null;
}
@@ -201,13 +202,13 @@
@Override
public Void visitRunningAggregateOperator(RunningAggregateOperator op, IOptimizationContext context)
throws AlgebricksException {
- visitAssignment(op, context);
+ visitAssignment(op, op.getExpressions(), context);
return null;
}
@Override
public Void visitWindowOperator(WindowOperator op, IOptimizationContext context) throws AlgebricksException {
- visitAssignment(op, context);
+ visitAssignment(op, op.getExpressions(), context);
return null;
}
@@ -320,7 +321,8 @@
return v;
}
- private void visitAssignment(AbstractAssignOperator op, IOptimizationContext context) throws AlgebricksException {
+ private void visitAssignment(ILogicalOperator op, List<Mutable<ILogicalExpression>> exprList,
+ IOptimizationContext context) throws AlgebricksException {
LogicalPropertiesVectorImpl v = propagateCardinality(op, context);
if (v != null && v.getNumberOfTuples() != null) {
IVariableEvalSizeEnvironment varSizeEnv = context.getVariableEvalSizeEnvironment();
@@ -331,7 +333,7 @@
if (v0 != null) {
long frames0 = v0.getMaxOutputFrames();
long overhead = 0; // added per tuple
- for (Mutable<ILogicalExpression> exprRef : op.getExpressions()) {
+ for (Mutable<ILogicalExpression> exprRef : exprList) {
int sz = evalSize.getEvalSize(exprRef.getValue(), varSizeEnv);
if (sz == -1) {
return;
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
index e5ca646..cc0879e 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
@@ -414,12 +414,26 @@
deepCopyExpressionRefs(op.getPartitionExpressions(), newPartitionExprs);
List<Pair<IOrder, Mutable<ILogicalExpression>>> newOrderExprs =
deepCopyOrderAndExpression(op.getOrderExpressions());
-
- ArrayList<LogicalVariable> newList = new ArrayList<>();
- ArrayList<Mutable<ILogicalExpression>> newExpressions = new ArrayList<>();
- newList.addAll(op.getVariables());
+ List<Pair<IOrder, Mutable<ILogicalExpression>>> newFrameValueExprs =
+ deepCopyOrderAndExpression(op.getFrameValueExpressions());
+ List<Mutable<ILogicalExpression>> newFrameStartExprs = new ArrayList<>();
+ deepCopyExpressionRefs(newFrameStartExprs, op.getFrameStartExpressions());
+ List<Mutable<ILogicalExpression>> newFrameEndExprs = new ArrayList<>();
+ deepCopyExpressionRefs(newFrameEndExprs, op.getFrameEndExpressions());
+ List<Mutable<ILogicalExpression>> newFrameExclusionExprs = new ArrayList<>();
+ deepCopyExpressionRefs(newFrameExclusionExprs, op.getFrameExcludeExpressions());
+ ILogicalExpression newFrameOffset = deepCopyExpressionRef(op.getFrameOffset()).getValue();
+ List<LogicalVariable> newVariables = new ArrayList<>();
+ deepCopyVars(newVariables, op.getVariables());
+ List<Mutable<ILogicalExpression>> newExpressions = new ArrayList<>();
deepCopyExpressionRefs(newExpressions, op.getExpressions());
-
- return new WindowOperator(newPartitionExprs, newOrderExprs, newList, newExpressions);
+ List<ILogicalPlan> newNestedPlans = new ArrayList<>();
+ WindowOperator newWinOp = new WindowOperator(newPartitionExprs, newOrderExprs, newFrameValueExprs,
+ newFrameStartExprs, newFrameEndExprs, newFrameExclusionExprs, op.getFrameExcludeNegationStartIdx(),
+ newFrameOffset, op.getFrameMaxObjects(), newVariables, newExpressions, newNestedPlans);
+ for (ILogicalPlan nestedPlan : op.getNestedPlans()) {
+ newNestedPlans.add(OperatorManipulationUtil.deepCopy(nestedPlan, newWinOp));
+ }
+ return newWinOp;
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/ProducedVariableVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/ProducedVariableVisitor.java
index 43b7c80..7084a60 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/ProducedVariableVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/ProducedVariableVisitor.java
@@ -93,6 +93,11 @@
@Override
public Void visitWindowOperator(WindowOperator op, Void arg) throws AlgebricksException {
+ for (ILogicalPlan p : op.getNestedPlans()) {
+ for (Mutable<ILogicalOperator> r : p.getRoots()) {
+ VariableUtilities.getLiveVariables(r.getValue(), producedVariables);
+ }
+ }
producedVariables.addAll(op.getVariables());
return null;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SchemaVariableVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SchemaVariableVisitor.java
index 69b17ed..bd90729 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SchemaVariableVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SchemaVariableVisitor.java
@@ -346,7 +346,15 @@
@Override
public Void visitWindowOperator(WindowOperator op, Void arg) throws AlgebricksException {
- standardLayout(op);
+ for (Mutable<ILogicalOperator> c : op.getInputs()) {
+ VariableUtilities.getLiveVariables(c.getValue(), schemaVariables);
+ }
+ for (ILogicalPlan p : op.getNestedPlans()) {
+ for (Mutable<ILogicalOperator> r : p.getRoots()) {
+ VariableUtilities.getLiveVariables(r.getValue(), schemaVariables);
+ }
+ }
+ schemaVariables.addAll(op.getVariables());
return null;
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java
index 99d3488..e9f82ef 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractOperatorWithNestedPlans;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestMapOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestNonMapOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
@@ -154,11 +155,7 @@
throws AlgebricksException {
subst(pair.first, pair.second, op.getGroupByList());
subst(pair.first, pair.second, op.getDecorList());
- for (ILogicalPlan p : op.getNestedPlans()) {
- for (Mutable<ILogicalOperator> r : p.getRoots()) {
- VariableUtilities.substituteVariablesInDescendantsAndSelf(r.getValue(), pair.first, pair.second, ctx);
- }
- }
+ substInNestedPlans(pair.first, pair.second, op);
substVarTypes(op, pair);
return null;
}
@@ -248,11 +245,7 @@
@Override
public Void visitSubplanOperator(SubplanOperator op, Pair<LogicalVariable, LogicalVariable> pair)
throws AlgebricksException {
- for (ILogicalPlan p : op.getNestedPlans()) {
- for (Mutable<ILogicalOperator> r : p.getRoots()) {
- VariableUtilities.substituteVariablesInDescendantsAndSelf(r.getValue(), pair.first, pair.second, ctx);
- }
- }
+ substInNestedPlans(pair.first, pair.second, op);
return null;
}
@@ -380,6 +373,15 @@
}
}
+ private void substInNestedPlans(LogicalVariable v1, LogicalVariable v2, AbstractOperatorWithNestedPlans op)
+ throws AlgebricksException {
+ for (ILogicalPlan p : op.getNestedPlans()) {
+ for (Mutable<ILogicalOperator> r : p.getRoots()) {
+ VariableUtilities.substituteVariablesInDescendantsAndSelf(r.getValue(), v1, v2, ctx);
+ }
+ }
+ }
+
private void substAssignVariables(List<LogicalVariable> variables, List<Mutable<ILogicalExpression>> expressions,
Pair<LogicalVariable, LogicalVariable> pair) {
int n = variables.size();
@@ -503,13 +505,30 @@
@Override
public Void visitWindowOperator(WindowOperator op, Pair<LogicalVariable, LogicalVariable> pair)
throws AlgebricksException {
- for (Mutable<ILogicalExpression> pe : op.getPartitionExpressions()) {
- pe.getValue().substituteVar(pair.first, pair.second);
+ for (Mutable<ILogicalExpression> expr : op.getPartitionExpressions()) {
+ expr.getValue().substituteVar(pair.first, pair.second);
}
- for (Pair<IOrder, Mutable<ILogicalExpression>> oe : op.getOrderExpressions()) {
- oe.second.getValue().substituteVar(pair.first, pair.second);
+ for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getOrderExpressions()) {
+ p.second.getValue().substituteVar(pair.first, pair.second);
+ }
+ for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getFrameValueExpressions()) {
+ p.second.getValue().substituteVar(pair.first, pair.second);
+ }
+ for (Mutable<ILogicalExpression> expr : op.getFrameStartExpressions()) {
+ expr.getValue().substituteVar(pair.first, pair.second);
+ }
+ for (Mutable<ILogicalExpression> expr : op.getFrameEndExpressions()) {
+ expr.getValue().substituteVar(pair.first, pair.second);
+ }
+ for (Mutable<ILogicalExpression> expr : op.getFrameExcludeExpressions()) {
+ expr.getValue().substituteVar(pair.first, pair.second);
+ }
+ ILogicalExpression frameOffset = op.getFrameOffset().getValue();
+ if (frameOffset != null) {
+ frameOffset.substituteVar(pair.first, pair.second);
}
substAssignVariables(op.getVariables(), op.getExpressions(), pair);
+ substInNestedPlans(pair.first, pair.second, op);
substVarTypes(op, pair);
return null;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
index b4bea84..ae6ab07 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java
@@ -32,6 +32,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.IPhysicalOperator;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractOperatorWithNestedPlans;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestMapOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
@@ -184,11 +185,7 @@
@Override
public Void visitGroupByOperator(GroupByOperator op, Void arg) throws AlgebricksException {
- for (ILogicalPlan p : op.getNestedPlans()) {
- for (Mutable<ILogicalOperator> r : p.getRoots()) {
- VariableUtilities.getUsedVariablesInDescendantsAndSelf(r.getValue(), usedVariables);
- }
- }
+ visitNestedPlans(op);
for (Pair<LogicalVariable, Mutable<ILogicalExpression>> g : op.getGroupByList()) {
g.second.getValue().getUsedVariables(usedVariables);
}
@@ -272,11 +269,7 @@
@Override
public Void visitSubplanOperator(SubplanOperator op, Void arg) throws AlgebricksException {
- for (ILogicalPlan p : op.getNestedPlans()) {
- for (Mutable<ILogicalOperator> r : p.getRoots()) {
- VariableUtilities.getUsedVariablesInDescendantsAndSelf(r.getValue(), usedVariables);
- }
- }
+ visitNestedPlans(op);
return null;
}
@@ -473,16 +466,41 @@
}
@Override
- public Void visitWindowOperator(WindowOperator op, Void arg) {
+ public Void visitWindowOperator(WindowOperator op, Void arg) throws AlgebricksException {
+ visitNestedPlans(op);
for (Mutable<ILogicalExpression> exprRef : op.getPartitionExpressions()) {
exprRef.getValue().getUsedVariables(usedVariables);
}
- for (Pair<IOrder, Mutable<ILogicalExpression>> oe : op.getOrderExpressions()) {
- oe.second.getValue().getUsedVariables(usedVariables);
+ for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getOrderExpressions()) {
+ p.second.getValue().getUsedVariables(usedVariables);
+ }
+ for (Pair<IOrder, Mutable<ILogicalExpression>> p : op.getFrameValueExpressions()) {
+ p.second.getValue().getUsedVariables(usedVariables);
+ }
+ for (Mutable<ILogicalExpression> exprRef : op.getFrameStartExpressions()) {
+ exprRef.getValue().getUsedVariables(usedVariables);
+ }
+ for (Mutable<ILogicalExpression> exprRef : op.getFrameEndExpressions()) {
+ exprRef.getValue().getUsedVariables(usedVariables);
+ }
+ for (Mutable<ILogicalExpression> exprRef : op.getFrameExcludeExpressions()) {
+ exprRef.getValue().getUsedVariables(usedVariables);
+ }
+ ILogicalExpression frameOffset = op.getFrameOffset().getValue();
+ if (frameOffset != null) {
+ frameOffset.getUsedVariables(usedVariables);
}
for (Mutable<ILogicalExpression> exprRef : op.getExpressions()) {
exprRef.getValue().getUsedVariables(usedVariables);
}
return null;
}
+
+ private void visitNestedPlans(AbstractOperatorWithNestedPlans op) throws AlgebricksException {
+ for (ILogicalPlan p : op.getNestedPlans()) {
+ for (Mutable<ILogicalOperator> r : p.getRoots()) {
+ VariableUtilities.getUsedVariablesInDescendantsAndSelf(r.getValue(), usedVariables);
+ }
+ }
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java
index 09ee358..e1dd8db 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java
@@ -90,7 +90,7 @@
int[] projectionList = JobGenHelper.projectAllVariables(opSchema);
RunningAggregateRuntimeFactory runtime =
- new RunningAggregateRuntimeFactory(outColumns, runningAggFuns, projectionList);
+ new RunningAggregateRuntimeFactory(projectionList, outColumns, runningAggFuns);
runtime.setSourceLocation(ragg.getSourceLocation());
// contribute one Asterix framewriter
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WindowPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WindowPOperator.java
index 7853524..7389d8e 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WindowPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WindowPOperator.java
@@ -23,10 +23,12 @@
import java.util.Collections;
import java.util.List;
import java.util.Set;
+import java.util.function.Function;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.ListSet;
+import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.IHyracksJobBuilder;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
@@ -34,6 +36,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider;
+import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.expressions.StatefulFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
@@ -50,8 +53,15 @@
import org.apache.hyracks.algebricks.core.algebra.properties.UnorderedPartitionedProperty;
import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenHelper;
+import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
+import org.apache.hyracks.algebricks.runtime.base.AlgebricksPipeline;
import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.operators.aggrun.WindowRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.win.AbstractWindowRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.win.WindowNestedPlansRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.win.WindowSimpleRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.win.WindowAggregatorDescriptorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.win.WindowMaterializingRuntimeFactory;
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.ErrorCode;
@@ -114,7 +124,8 @@
for (LogicalVariable pColumn : pcVars) {
lopColumns.add(pIdx++, new OrderColumn(pColumn, OrderOperator.IOrder.OrderKind.ASC));
}
- List<ILocalStructuralProperty> localProps = Collections.singletonList(new LocalOrderProperty(lopColumns));
+ List<ILocalStructuralProperty> localProps =
+ lopColumns.isEmpty() ? null : Collections.singletonList(new LocalOrderProperty(lopColumns));
return new PhysicalRequirements(
new StructuralPropertiesVector[] { new StructuralPropertiesVector(pp, localProps) },
@@ -132,34 +143,85 @@
IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
throws AlgebricksException {
WindowOperator winOp = (WindowOperator) op;
- int[] outColumns = JobGenHelper.projectVariables(opSchema, winOp.getVariables());
- List<Mutable<ILogicalExpression>> expressions = winOp.getExpressions();
- IRunningAggregateEvaluatorFactory[] winFuncs = new IRunningAggregateEvaluatorFactory[expressions.size()];
- IExpressionRuntimeProvider expressionRuntimeProvider = context.getExpressionRuntimeProvider();
- for (int i = 0; i < winFuncs.length; i++) {
- StatefulFunctionCallExpression expr = (StatefulFunctionCallExpression) expressions.get(i).getValue();
- winFuncs[i] = expressionRuntimeProvider.createRunningAggregateFunctionFactory(expr,
- context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas, context);
- }
- // TODO push projections into the operator
- int[] projectionList = JobGenHelper.projectAllVariables(opSchema);
+ int[] partitionColumnsList = JobGenHelper.projectVariables(inputSchemas[0], partitionColumns);
- int[] partitionColumnList = JobGenHelper.projectVariables(inputSchemas[0], partitionColumns);
-
- IBinaryComparatorFactory[] partitionComparatorFactories = JobGenHelper
- .variablesToAscBinaryComparatorFactories(partitionColumns, context.getTypeEnvironment(op), context);
+ IVariableTypeEnvironment opTypeEnv = context.getTypeEnvironment(op);
+ IBinaryComparatorFactory[] partitionComparatorFactories =
+ JobGenHelper.variablesToAscBinaryComparatorFactories(partitionColumns, opTypeEnv, context);
//TODO not all functions need order comparators
- IBinaryComparatorFactory[] orderComparatorFactories = JobGenHelper
- .variablesToBinaryComparatorFactories(orderColumns, context.getTypeEnvironment(op), context);
+ IBinaryComparatorFactory[] orderComparatorFactories =
+ JobGenHelper.variablesToBinaryComparatorFactories(orderColumns, opTypeEnv, context);
- WindowRuntimeFactory runtime = new WindowRuntimeFactory(outColumns, winFuncs, projectionList,
- partitionColumnList, partitionComparatorFactories, partitionMaterialization, orderComparatorFactories);
+ IVariableTypeEnvironment inputTypeEnv = context.getTypeEnvironment(op.getInputs().get(0).getValue());
+ IExpressionRuntimeProvider exprRuntimeProvider = context.getExpressionRuntimeProvider();
+ IBinaryComparatorFactoryProvider binaryComparatorFactoryProvider = context.getBinaryComparatorFactoryProvider();
+
+ IScalarEvaluatorFactory[] frameStartExprEvals = createEvaluatorFactories(winOp.getFrameStartExpressions(),
+ inputSchemas, inputTypeEnv, exprRuntimeProvider, context);
+
+ IScalarEvaluatorFactory[] frameEndExprEvals = createEvaluatorFactories(winOp.getFrameEndExpressions(),
+ inputSchemas, inputTypeEnv, exprRuntimeProvider, context);
+
+ Pair<IScalarEvaluatorFactory[], IBinaryComparatorFactory[]> frameValueExprEvalsAndComparators =
+ createEvaluatorAndComparatorFactories(winOp.getFrameValueExpressions(), Pair::getSecond, Pair::getFirst,
+ inputSchemas, inputTypeEnv, exprRuntimeProvider, binaryComparatorFactoryProvider, context);
+
+ Pair<IScalarEvaluatorFactory[], IBinaryComparatorFactory[]> frameExcludeExprEvalsAndComparators =
+ createEvaluatorAndComparatorFactories(winOp.getFrameExcludeExpressions(), v -> v,
+ v -> OrderOperator.ASC_ORDER, inputSchemas, inputTypeEnv, exprRuntimeProvider,
+ binaryComparatorFactoryProvider, context);
+
+ IScalarEvaluatorFactory frameOffsetExprEval = null;
+ ILogicalExpression frameOffsetExpr = winOp.getFrameOffset().getValue();
+ if (frameOffsetExpr != null) {
+ frameOffsetExprEval =
+ exprRuntimeProvider.createEvaluatorFactory(frameOffsetExpr, inputTypeEnv, inputSchemas, context);
+ }
+
+ int[] projectionColumnsExcludingSubplans = JobGenHelper.projectAllVariables(opSchema);
+
+ int[] runningAggOutColumns = JobGenHelper.projectVariables(opSchema, winOp.getVariables());
+
+ List<Mutable<ILogicalExpression>> runningAggExprs = winOp.getExpressions();
+ int runningAggExprCount = runningAggExprs.size();
+ IRunningAggregateEvaluatorFactory[] runningAggFactories =
+ new IRunningAggregateEvaluatorFactory[runningAggExprCount];
+ for (int i = 0; i < runningAggExprCount; i++) {
+ StatefulFunctionCallExpression expr = (StatefulFunctionCallExpression) runningAggExprs.get(i).getValue();
+ runningAggFactories[i] = exprRuntimeProvider.createRunningAggregateFunctionFactory(expr, inputTypeEnv,
+ inputSchemas, context);
+ }
+
+ AbstractWindowRuntimeFactory runtime;
+ if (winOp.hasNestedPlans()) {
+ int opSchemaSizePreSubplans = opSchema.getSize();
+ AlgebricksPipeline[] subplans = compileSubplans(inputSchemas[0], winOp, opSchema, context);
+ int aggregatorOutputSchemaSize = opSchema.getSize() - opSchemaSizePreSubplans;
+ WindowAggregatorDescriptorFactory nestedAggFactory = new WindowAggregatorDescriptorFactory(subplans);
+ nestedAggFactory.setSourceLocation(winOp.getSourceLocation());
+ runtime = new WindowNestedPlansRuntimeFactory(partitionColumnsList, partitionComparatorFactories,
+ orderComparatorFactories, frameValueExprEvalsAndComparators.first,
+ frameValueExprEvalsAndComparators.second, frameStartExprEvals, frameEndExprEvals,
+ frameExcludeExprEvalsAndComparators.first, winOp.getFrameExcludeNegationStartIdx(),
+ frameExcludeExprEvalsAndComparators.second, frameOffsetExprEval,
+ context.getBinaryIntegerInspectorFactory(), winOp.getFrameMaxObjects(),
+ projectionColumnsExcludingSubplans, runningAggOutColumns, runningAggFactories,
+ aggregatorOutputSchemaSize, nestedAggFactory);
+ } else if (partitionMaterialization) {
+ runtime = new WindowMaterializingRuntimeFactory(partitionColumnsList, partitionComparatorFactories,
+ orderComparatorFactories, projectionColumnsExcludingSubplans, runningAggOutColumns,
+ runningAggFactories);
+ } else {
+ runtime = new WindowSimpleRuntimeFactory(partitionColumnsList, partitionComparatorFactories,
+ orderComparatorFactories, projectionColumnsExcludingSubplans, runningAggOutColumns,
+ runningAggFactories);
+ }
runtime.setSourceLocation(winOp.getSourceLocation());
// contribute one Asterix framewriter
- RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
+ RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(opTypeEnv, opSchema, context);
builder.contributeMicroOperator(winOp, runtime, recDesc);
// and contribute one edge from its child
ILogicalOperator src = winOp.getInputs().get(0).getValue();
@@ -180,6 +242,44 @@
return partitionMaterialization;
}
+ private IScalarEvaluatorFactory[] createEvaluatorFactories(List<Mutable<ILogicalExpression>> exprList,
+ IOperatorSchema[] inputSchemas, IVariableTypeEnvironment inputTypeEnv,
+ IExpressionRuntimeProvider exprRuntimeProvider, JobGenContext context) throws AlgebricksException {
+ if (exprList.isEmpty()) {
+ return null;
+ }
+ int ln = exprList.size();
+ IScalarEvaluatorFactory[] evals = new IScalarEvaluatorFactory[ln];
+ for (int i = 0; i < ln; i++) {
+ ILogicalExpression expr = exprList.get(i).getValue();
+ evals[i] = exprRuntimeProvider.createEvaluatorFactory(expr, inputTypeEnv, inputSchemas, context);
+ }
+ return evals;
+ }
+
+ private <T> Pair<IScalarEvaluatorFactory[], IBinaryComparatorFactory[]> createEvaluatorAndComparatorFactories(
+ List<T> exprList, Function<T, Mutable<ILogicalExpression>> exprGetter,
+ Function<T, OrderOperator.IOrder> orderGetter, IOperatorSchema[] inputSchemas,
+ IVariableTypeEnvironment inputTypeEnv, IExpressionRuntimeProvider exprRuntimeProvider,
+ IBinaryComparatorFactoryProvider binaryComparatorFactoryProvider, JobGenContext context)
+ throws AlgebricksException {
+ if (exprList.isEmpty()) {
+ return new Pair<>(null, null);
+ }
+ int ln = exprList.size();
+ IScalarEvaluatorFactory[] evals = new IScalarEvaluatorFactory[ln];
+ IBinaryComparatorFactory[] comparators = new IBinaryComparatorFactory[ln];
+ for (int i = 0; i < ln; i++) {
+ T exprObj = exprList.get(i);
+ ILogicalExpression expr = exprGetter.apply(exprObj).getValue();
+ OrderOperator.IOrder order = orderGetter.apply(exprObj);
+ evals[i] = exprRuntimeProvider.createEvaluatorFactory(expr, inputTypeEnv, inputSchemas, context);
+ comparators[i] = binaryComparatorFactoryProvider.getBinaryComparatorFactory(inputTypeEnv.getType(expr),
+ order.getKind() == OrderOperator.IOrder.OrderKind.ASC);
+ }
+ return new Pair<>(evals, comparators);
+ }
+
private boolean containsAny(List<OrderColumn> ocList, int startIdx, Set<LogicalVariable> varSet) {
for (int i = startIdx, ln = ocList.size(); i < ln; i++) {
if (varSet.contains(ocList.get(i).getColumn())) {
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
index ad45614..62b935b 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
@@ -486,10 +486,57 @@
public Void visitWindowOperator(WindowOperator op, Integer indent) throws AlgebricksException {
addIndent(indent).append("window ").append(str(op.getVariables())).append(" <- ");
pprintExprList(op.getExpressions(), indent);
- buffer.append(" partition ");
- pprintExprList(op.getPartitionExpressions(), indent);
- buffer.append(" order ");
- pprintOrderList(op.getOrderExpressions(), indent);
+ if (!op.getPartitionExpressions().isEmpty()) {
+ buffer.append(" partition ");
+ pprintExprList(op.getPartitionExpressions(), indent);
+ }
+ if (!op.getOrderExpressions().isEmpty()) {
+ buffer.append(" order ");
+ pprintOrderList(op.getOrderExpressions(), indent);
+ }
+ if (op.hasNestedPlans()) {
+ buffer.append(" frame on ");
+ pprintOrderList(op.getFrameValueExpressions(), indent);
+ buffer.append("start ");
+ List<Mutable<ILogicalExpression>> frameStartExpressions = op.getFrameStartExpressions();
+ if (!frameStartExpressions.isEmpty()) {
+ pprintExprList(frameStartExpressions, indent);
+ } else {
+ buffer.append("unbounded");
+ }
+ buffer.append(" end ");
+ List<Mutable<ILogicalExpression>> frameEndExpressions = op.getFrameEndExpressions();
+ if (!frameEndExpressions.isEmpty()) {
+ pprintExprList(frameEndExpressions, indent);
+ } else {
+ buffer.append("unbounded");
+ }
+ List<Mutable<ILogicalExpression>> frameExcludeExpressions = op.getFrameExcludeExpressions();
+ if (!frameExcludeExpressions.isEmpty()) {
+ buffer.append(" exclude ");
+ int negStartIdx = op.getFrameExcludeNegationStartIdx();
+ if (negStartIdx >= 0 && op.getFrameExcludeNegationStartIdx() < frameExcludeExpressions.size()) {
+ pprintExprList(frameExcludeExpressions.subList(0, negStartIdx), indent);
+ buffer.append(" and not ");
+ pprintExprList(frameExcludeExpressions.subList(negStartIdx, frameExcludeExpressions.size()),
+ indent);
+ } else {
+ pprintExprList(frameExcludeExpressions, indent);
+ }
+ }
+ Mutable<ILogicalExpression> frameOffset = op.getFrameOffset();
+ if (frameOffset.getValue() != null) {
+ buffer.append(" offset ");
+ buffer.append(frameOffset.getValue().accept(exprVisitor, indent));
+ }
+ int frameMaxObjects = op.getFrameMaxObjects();
+ if (frameMaxObjects != -1) {
+ buffer.append(" maxObjects " + frameMaxObjects);
+ }
+
+ buffer.append(" {");
+ printNestedPlans(op, indent);
+ }
return null;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
index 4c810ab1..8ba2aff 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
@@ -661,9 +661,50 @@
addIndent(indent).append("\"partition by\": ");
pprintExprList(op.getPartitionExpressions(), indent);
}
- buffer.append(",\n");
- addIndent(indent).append("\"order by\": ");
- pprintOrderExprList(op.getOrderExpressions(), -1, indent);
+ if (!op.getOrderExpressions().isEmpty()) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"order by\": ");
+ pprintOrderExprList(op.getOrderExpressions(), -1, indent);
+ }
+ if (op.hasNestedPlans()) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"frame on\": ");
+ pprintOrderExprList(op.getFrameValueExpressions(), -1, indent);
+ List<Mutable<ILogicalExpression>> frameStartExpressions = op.getFrameStartExpressions();
+ if (!frameStartExpressions.isEmpty()) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"frame start\": ");
+ pprintExprList(frameStartExpressions, indent);
+ }
+ List<Mutable<ILogicalExpression>> frameEndExpressions = op.getFrameEndExpressions();
+ if (!frameEndExpressions.isEmpty()) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"frame end\": ");
+ pprintExprList(frameEndExpressions, indent);
+ }
+ List<Mutable<ILogicalExpression>> frameExcludeExpressions = op.getFrameExcludeExpressions();
+ if (!frameExcludeExpressions.isEmpty()) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"frame exclude\": ");
+ pprintExprList(frameExcludeExpressions, indent);
+ addIndent(indent).append("\"frame exclude negation start\": ")
+ .append(String.valueOf(op.getFrameExcludeNegationStartIdx()));
+ }
+ Mutable<ILogicalExpression> frameOffset = op.getFrameOffset();
+ if (frameOffset.getValue() != null) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"frame offset\": ");
+ pprintExpr(frameOffset, indent);
+ }
+ int frameMaxObjects = op.getFrameMaxObjects();
+ if (frameMaxObjects != -1) {
+ buffer.append(",\n");
+ addIndent(indent).append("\"frame maxObjects\": " + frameMaxObjects);
+ }
+
+ addIndent(indent).append("\"subplan\": ");
+ printNestedPlans(op, indent);
+ }
return null;
}
@@ -693,11 +734,15 @@
} else {
buffer.append(", ");
}
- buffer.append(exprRef.getValue().accept(exprVisitor, indent).replace('"', ' '));
+ pprintExpr(exprRef, indent);
}
buffer.append("\"");
}
+ protected void pprintExpr(Mutable<ILogicalExpression> exprRef, Integer indent) throws AlgebricksException {
+ buffer.append(exprRef.getValue().accept(exprVisitor, indent).replace('"', ' '));
+ }
+
protected void pprintVeList(List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> vePairList, Integer indent)
throws AlgebricksException {
buffer.append("[");
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
index ea914fa..4d05a1b 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
@@ -28,8 +28,9 @@
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
-import org.apache.commons.lang3.tuple.Pair;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
@@ -42,6 +43,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.LogicalOperatorDeepCopyWithNewVariablesVisitor;
@@ -215,7 +217,7 @@
LogicalOperatorDeepCopyWithNewVariablesVisitor deepCopyVisitor =
new LogicalOperatorDeepCopyWithNewVariablesVisitor(ctx, ctx, true);
ILogicalOperator newRoot = deepCopyVisitor.deepCopy(root);
- return Pair.of(newRoot, deepCopyVisitor.getInputToOutputVariableMapping());
+ return new Pair<>(newRoot, deepCopyVisitor.getInputToOutputVariableMapping());
}
private static void setDataSource(ILogicalPlan plan, ILogicalOperator dataSource) {
@@ -380,4 +382,29 @@
}
return -1;
}
+
+ public static List<Mutable<ILogicalExpression>> cloneExpressions(List<Mutable<ILogicalExpression>> exprList) {
+ if (exprList == null) {
+ return null;
+ }
+ List<Mutable<ILogicalExpression>> clonedExprList = new ArrayList<>(exprList.size());
+ for (Mutable<ILogicalExpression> expr : exprList) {
+ clonedExprList.add(new MutableObject<>(expr.getValue().cloneExpression()));
+ }
+ return clonedExprList;
+ }
+
+ public static List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> cloneOrderExpressions(
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprList) {
+ if (orderExprList == null) {
+ return null;
+ }
+ List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> clonedExprList =
+ new ArrayList<>(orderExprList.size());
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> orderExpr : orderExprList) {
+ clonedExprList.add(
+ new Pair<>(orderExpr.first, new MutableObject<>(orderExpr.second.getValue().cloneExpression())));
+ }
+ return clonedExprList;
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/LogicalOperatorDotVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/LogicalOperatorDotVisitor.java
index f10c3a4..f50ca3a 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/LogicalOperatorDotVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/utils/LogicalOperatorDotVisitor.java
@@ -188,14 +188,11 @@
public String visitOrderOperator(OrderOperator op, Boolean showDetails) throws AlgebricksException {
stringBuilder.setLength(0);
stringBuilder.append("order ");
- for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : op.getOrderExpressions()) {
- if (op.getTopK() != -1) {
- stringBuilder.append("(topK: ").append(op.getTopK()).append(") ");
- }
- stringBuilder.append("(");
- appendOrder(p.first);
- stringBuilder.append(", ").append(p.second.getValue().toString()).append(") ");
+ int topK = op.getTopK();
+ if (topK != -1) {
+ stringBuilder.append("(topK: ").append(topK).append(") ");
}
+ printOrderExprList(op.getOrderExpressions());
appendSchema(op, showDetails);
appendAnnotations(op, showDetails);
appendPhysicalOperatorInfo(op, showDetails);
@@ -608,10 +605,36 @@
stringBuilder.append(") partition by (");
printExprList(op.getPartitionExpressions());
stringBuilder.append(") order by (");
- for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : op.getOrderExpressions()) {
- stringBuilder.append("(");
- appendOrder(p.first);
- stringBuilder.append(", ").append(p.second.getValue().toString()).append(") ");
+ printOrderExprList(op.getOrderExpressions());
+ if (op.hasNestedPlans()) {
+ stringBuilder.append(") frame on (");
+ printOrderExprList(op.getFrameValueExpressions());
+ List<Mutable<ILogicalExpression>> frameStartExpressions = op.getFrameStartExpressions();
+ if (!frameStartExpressions.isEmpty()) {
+ stringBuilder.append(") frame start (");
+ printExprList(frameStartExpressions);
+ }
+ List<Mutable<ILogicalExpression>> frameEndExpressions = op.getFrameEndExpressions();
+ if (!frameEndExpressions.isEmpty()) {
+ stringBuilder.append(") frame end (");
+ printExprList(frameEndExpressions);
+ }
+ List<Mutable<ILogicalExpression>> frameExcludeExpressions = op.getFrameExcludeExpressions();
+ if (!frameExcludeExpressions.isEmpty()) {
+ stringBuilder.append(") frame exclude (");
+ stringBuilder.append(" (negation start: ").append(op.getFrameExcludeNegationStartIdx()).append(") ");
+ printExprList(frameExcludeExpressions);
+ }
+ Mutable<ILogicalExpression> frameOffset = op.getFrameOffset();
+ if (frameOffset.getValue() != null) {
+ stringBuilder.append(") frame offset (");
+ stringBuilder.append(frameOffset.getValue());
+ stringBuilder.append(") ");
+ }
+ int frameMaxObjects = op.getFrameMaxObjects();
+ if (frameMaxObjects != -1) {
+ stringBuilder.append("(frame maxObjects: ").append(frameMaxObjects).append(") ");
+ }
}
stringBuilder.append(")");
appendSchema(op, showDetails);
@@ -644,6 +667,14 @@
stringBuilder.append("]");
}
+ private void printOrderExprList(List<Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>> orderExprList) {
+ for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> p : orderExprList) {
+ stringBuilder.append("(");
+ appendOrder(p.first);
+ stringBuilder.append(", ").append(p.second.getValue().toString()).append(") ");
+ }
+ }
+
private void appendSchema(AbstractLogicalOperator op, boolean show) {
if (show) {
stringBuilder.append("\\nSchema: ");
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
index ad0a9da..b8dd24f 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
@@ -92,6 +92,7 @@
ignoreOps.add(LogicalOperatorTag.PROJECT);
ignoreOps.add(LogicalOperatorTag.AGGREGATE);
ignoreOps.add(LogicalOperatorTag.RUNNINGAGGREGATE);
+ ignoreOps.add(LogicalOperatorTag.WINDOW); //TODO: can extract from partition/order/frame expressions
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
index 2c825b7..dc9a11f 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
@@ -19,7 +19,7 @@
package org.apache.hyracks.algebricks.rewriter.rules;
import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -52,7 +52,7 @@
// Maps from variable to a list of operators using that variable.
protected Map<LogicalVariable, List<ILogicalOperator>> usedVarsMap =
- new HashMap<LogicalVariable, List<ILogicalOperator>>();
+ new LinkedHashMap<LogicalVariable, List<ILogicalOperator>>();
protected List<LogicalVariable> usedVars = new ArrayList<LogicalVariable>();
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/IntroduceAggregateCombinerRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/IntroduceAggregateCombinerRule.java
index 3987380..f906f9b 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/IntroduceAggregateCombinerRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/IntroduceAggregateCombinerRule.java
@@ -26,15 +26,40 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.ExecutionMode;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.WindowOperator;
public class IntroduceAggregateCombinerRule extends AbstractIntroduceCombinerRule {
@Override
+ public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) {
+ AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
+ if (context.checkIfInDontApplySet(this, op)) {
+ return false;
+ }
+ // Disable aggregate combiners for nested plans inside window operators
+ if (op.getOperatorTag() == LogicalOperatorTag.WINDOW) {
+ WindowOperator winOp = (WindowOperator) op;
+ if (winOp.hasNestedPlans()) {
+ for (ILogicalPlan plan : winOp.getNestedPlans()) {
+ for (Mutable<ILogicalOperator> root : plan.getRoots()) {
+ ILogicalOperator rootOp = root.getValue();
+ if (rootOp.getOperatorTag() == LogicalOperatorTag.AGGREGATE) {
+ context.addToDontApplySet(this, rootOp);
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
throws AlgebricksException {
AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java
index 3efa46b..8e41a15 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/PushSubplanIntoGroupByRule.java
@@ -31,9 +31,9 @@
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
-import org.apache.commons.lang3.tuple.Pair;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.ListSet;
+import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
@@ -184,11 +184,11 @@
// Copy the original nested pipeline inside the group-by.
Pair<ILogicalOperator, Map<LogicalVariable, LogicalVariable>> copiedAggOpAndVarMap =
OperatorManipulationUtil.deepCopyWithNewVars(aggOp, context);
- ILogicalOperator newBottomAgg = copiedAggOpAndVarMap.getLeft();
+ ILogicalOperator newBottomAgg = copiedAggOpAndVarMap.first;
// Substitutes variables in the upper nested pipe line.
VariableUtilities.substituteVariablesInDescendantsAndSelf(rootOpRef.getValue(),
- copiedAggOpAndVarMap.getRight(), context);
+ copiedAggOpAndVarMap.second, context);
// Does the actual push.
Mutable<ILogicalOperator> ntsRef = downToNts(rootOpRef);
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java
index b260a8a..0ee7c1d 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java
@@ -21,9 +21,7 @@
import java.nio.ByteBuffer;
import org.apache.hyracks.algebricks.runtime.base.AlgebricksPipeline;
-import org.apache.hyracks.algebricks.runtime.base.EnforcePushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.meta.PipelineAssembler;
import org.apache.hyracks.algebricks.runtime.operators.std.NestedTupleSourceRuntimeFactory.NestedTupleSourceRuntime;
import org.apache.hyracks.api.comm.IFrameTupleAccessor;
import org.apache.hyracks.api.comm.IFrameWriter;
@@ -31,9 +29,9 @@
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.ErrorCode;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.job.JobFlag;
import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
+import org.apache.hyracks.dataflow.common.utils.TupleUtils;
import org.apache.hyracks.dataflow.std.group.AbstractAccumulatingAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.AggregateState;
import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptor;
@@ -56,10 +54,11 @@
public IAggregatorDescriptor createAggregator(IHyracksTaskContext ctx, RecordDescriptor inRecordDesc,
RecordDescriptor outRecordDescriptor, int[] keys, int[] partialKeys, long memoryBudget)
throws HyracksDataException {
- final AggregatorOutput outputWriter = new AggregatorOutput(subplans, keyFieldIdx.length, decorFieldIdx.length);
+ final AggregatorOutput outputWriter = new AggregatorOutput(subplans, keyFieldIdx.length + decorFieldIdx.length);
final NestedTupleSourceRuntime[] pipelines = new NestedTupleSourceRuntime[subplans.length];
for (int i = 0; i < subplans.length; i++) {
- pipelines[i] = (NestedTupleSourceRuntime) assemblePipeline(subplans[i], outputWriter, ctx);
+ pipelines[i] =
+ (NestedTupleSourceRuntime) PipelineAssembler.assemblePipeline(subplans[i], outputWriter, ctx);
}
return new IAggregatorDescriptor() {
@@ -78,7 +77,6 @@
for (int i = 0; i < pipelines.length; ++i) {
pipelines[i].open();
}
-
// aggregate the first tuple
for (int i = 0; i < pipelines.length; i++) {
pipelines[i].writeTuple(accessor.getBuffer(), tIndex);
@@ -108,18 +106,8 @@
memoryUsageCheck();
tupleBuilder.reset();
- ArrayTupleBuilder tb = outputWriter.getTupleBuilder();
- byte[] data = tb.getByteArray();
- int[] fieldEnds = tb.getFieldEndOffsets();
- int start = 0;
- int offset;
- for (int i = 0; i < fieldEnds.length; i++) {
- if (i > 0) {
- start = fieldEnds[i - 1];
- }
- offset = fieldEnds[i] - start;
- tupleBuilder.addField(data, start, offset);
- }
+ TupleUtils.addFields(outputWriter.getTupleBuilder(), tupleBuilder);
+
return true;
}
@@ -159,34 +147,10 @@
};
}
- private IFrameWriter assemblePipeline(AlgebricksPipeline subplan, IFrameWriter writer, IHyracksTaskContext ctx)
- throws HyracksDataException {
- // plug the operators
- IFrameWriter start = writer;
- IPushRuntimeFactory[] runtimeFactories = subplan.getRuntimeFactories();
- RecordDescriptor[] recordDescriptors = subplan.getRecordDescriptors();
- // should enforce protocol
- boolean enforce = ctx.getJobFlags().contains(JobFlag.ENFORCE_CONTRACT);
- for (int i = runtimeFactories.length - 1; i >= 0; i--) {
- IPushRuntime newRuntime = runtimeFactories[i].createPushRuntime(ctx)[0];
- newRuntime = enforce ? EnforcePushRuntime.enforce(newRuntime) : newRuntime;
- start = enforce ? EnforcePushRuntime.enforce(start) : start;
- newRuntime.setOutputFrameWriter(0, start, recordDescriptors[i]);
- if (i > 0) {
- newRuntime.setInputRecordDescriptor(0, recordDescriptors[i - 1]);
- } else {
- // the nts has the same input and output rec. desc.
- newRuntime.setInputRecordDescriptor(0, recordDescriptors[0]);
- }
- start = newRuntime;
- }
- return start;
- }
-
/**
* We suppose for now, that each subplan only produces one tuple.
*/
- private static class AggregatorOutput implements IFrameWriter {
+ public static class AggregatorOutput implements IFrameWriter {
// private ByteBuffer frame;
private FrameTupleAccessor[] tAccess;
@@ -195,9 +159,8 @@
private ArrayTupleBuilder tb;
private AlgebricksPipeline[] subplans;
- public AggregatorOutput(AlgebricksPipeline[] subplans, int numKeys, int numDecors) {
+ public AggregatorOutput(AlgebricksPipeline[] subplans, int numPropagatedFields) {
this.subplans = subplans;
- // this.keyFieldIndexes = keyFieldIndexes;
int totalAggFields = 0;
this.inputRecDesc = new RecordDescriptor[subplans.length];
for (int i = 0; i < subplans.length; i++) {
@@ -205,7 +168,7 @@
this.inputRecDesc[i] = rd[rd.length - 1];
totalAggFields += subplans[i].getOutputWidth();
}
- tb = new ArrayTupleBuilder(numKeys + numDecors + totalAggFields);
+ tb = new ArrayTupleBuilder(numPropagatedFields + totalAggFields);
this.tAccess = new FrameTupleAccessor[inputRecDesc.length];
for (int i = 0; i < inputRecDesc.length; i++) {
@@ -250,5 +213,4 @@
public void fail() throws HyracksDataException {
}
}
-
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java
index f057515..d14f5c1 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java
@@ -21,9 +21,7 @@
import java.nio.ByteBuffer;
import org.apache.hyracks.algebricks.runtime.base.AlgebricksPipeline;
-import org.apache.hyracks.algebricks.runtime.base.EnforcePushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.meta.PipelineAssembler;
import org.apache.hyracks.algebricks.runtime.operators.std.NestedTupleSourceRuntimeFactory.NestedTupleSourceRuntime;
import org.apache.hyracks.api.comm.IFrameTupleAccessor;
import org.apache.hyracks.api.comm.IFrameWriter;
@@ -37,9 +35,11 @@
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
+import org.apache.hyracks.dataflow.common.utils.TupleUtils;
import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.AggregateState;
import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptor;
+import org.apache.hyracks.dataflow.std.structures.TuplePointer;
public class NestedPlansRunningAggregatorFactory extends AbstractAggregatorDescriptorFactory {
@@ -62,13 +62,14 @@
RecordDescriptor outRecordDescriptor, int[] keyFields, int[] keyFieldsInPartialResults,
final IFrameWriter writer, long memoryBudget) throws HyracksDataException {
final RunningAggregatorOutput outputWriter =
- new RunningAggregatorOutput(ctx, subplans, keyFieldIdx.length, decorFieldIdx.length, writer);
+ new RunningAggregatorOutput(ctx, subplans, keyFieldIdx.length + decorFieldIdx.length, writer);
// should enforce protocol
boolean enforce = ctx.getJobFlags().contains(JobFlag.ENFORCE_CONTRACT);
IFrameWriter enforcedWriter = enforce ? EnforceFrameWriter.enforce(outputWriter) : outputWriter;
final NestedTupleSourceRuntime[] pipelines = new NestedTupleSourceRuntime[subplans.length];
for (int i = 0; i < subplans.length; i++) {
- pipelines[i] = (NestedTupleSourceRuntime) assemblePipeline(subplans[i], enforcedWriter, ctx);
+ pipelines[i] =
+ (NestedTupleSourceRuntime) PipelineAssembler.assemblePipeline(subplans[i], enforcedWriter, ctx);
}
final ArrayTupleBuilder gbyTb = outputWriter.getGroupByTupleBuilder();
@@ -140,30 +141,6 @@
};
}
- private IFrameWriter assemblePipeline(AlgebricksPipeline subplan, IFrameWriter writer, IHyracksTaskContext ctx)
- throws HyracksDataException {
- // should enforce protocol
- boolean enforce = ctx.getJobFlags().contains(JobFlag.ENFORCE_CONTRACT);
- // plug the operators
- IFrameWriter start = writer;
- IPushRuntimeFactory[] runtimeFactories = subplan.getRuntimeFactories();
- RecordDescriptor[] recordDescriptors = subplan.getRecordDescriptors();
- for (int i = runtimeFactories.length - 1; i >= 0; i--) {
- IPushRuntime newRuntime = runtimeFactories[i].createPushRuntime(ctx)[0];
- newRuntime = enforce ? EnforcePushRuntime.enforce(newRuntime) : newRuntime;
- start = enforce ? EnforceFrameWriter.enforce(start) : start;
- newRuntime.setOutputFrameWriter(0, start, recordDescriptors[i]);
- if (i > 0) {
- newRuntime.setInputRecordDescriptor(0, recordDescriptors[i - 1]);
- } else {
- // the nts has the same input and output rec. desc.
- newRuntime.setInputRecordDescriptor(0, recordDescriptors[0]);
- }
- start = newRuntime;
- }
- return start;
- }
-
private static class RunningAggregatorOutput implements IFrameWriter {
private final FrameTupleAccessor[] tAccess;
@@ -175,8 +152,8 @@
private final IFrameWriter outputWriter;
private final FrameTupleAppender outputAppender;
- public RunningAggregatorOutput(IHyracksTaskContext ctx, AlgebricksPipeline[] subplans, int numKeys,
- int numDecors, IFrameWriter outputWriter) throws HyracksDataException {
+ public RunningAggregatorOutput(IHyracksTaskContext ctx, AlgebricksPipeline[] subplans, int numPropagatedFields,
+ IFrameWriter outputWriter) throws HyracksDataException {
this.subplans = subplans;
this.outputWriter = outputWriter;
@@ -188,8 +165,8 @@
this.inputRecDesc[i] = rd[rd.length - 1];
totalAggFields += subplans[i].getOutputWidth();
}
- tb = new ArrayTupleBuilder(numKeys + numDecors + totalAggFields);
- gbyTb = new ArrayTupleBuilder(numKeys + numDecors);
+ tb = new ArrayTupleBuilder(numPropagatedFields + totalAggFields);
+ gbyTb = new ArrayTupleBuilder(numPropagatedFields);
this.tAccess = new FrameTupleAccessor[inputRecDesc.length];
for (int i = 0; i < inputRecDesc.length; i++) {
@@ -211,17 +188,7 @@
accessor.reset(buffer);
for (int tIndex = 0; tIndex < accessor.getTupleCount(); tIndex++) {
tb.reset();
- byte[] data = gbyTb.getByteArray();
- int[] fieldEnds = gbyTb.getFieldEndOffsets();
- int start = 0;
- int offset = 0;
- for (int i = 0; i < fieldEnds.length; i++) {
- if (i > 0) {
- start = fieldEnds[i - 1];
- }
- offset = fieldEnds[i] - start;
- tb.addField(data, start, offset);
- }
+ TupleUtils.addFields(gbyTb, tb);
for (int f = 0; f < w; f++) {
tb.addField(accessor, tIndex, f);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractRunningAggregatePushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractRunningAggregatePushRuntime.java
index 27354cb..0449cf5 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractRunningAggregatePushRuntime.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractRunningAggregatePushRuntime.java
@@ -37,51 +37,55 @@
public abstract class AbstractRunningAggregatePushRuntime<T extends IRunningAggregateEvaluator>
extends AbstractOneInputOneOutputOneFramePushRuntime {
protected final IHyracksTaskContext ctx;
- private final IRunningAggregateEvaluatorFactory[] aggFactories;
- private final Class<T> aggEvalClass;
- protected final List<T> aggEvals;
- private final int[] projectionList;
+ private final IRunningAggregateEvaluatorFactory[] runningAggFactories;
+ private final Class<T> runningAggEvalClass;
+ protected final List<T> runningAggEvals;
+ private final int[] projectionColumns;
private final int[] projectionToOutColumns;
private final IPointable p = VoidPointable.FACTORY.createPointable();
- private final ArrayTupleBuilder tupleBuilder;
- private boolean first;
+ protected ArrayTupleBuilder tupleBuilder;
+ private boolean isFirst;
- public AbstractRunningAggregatePushRuntime(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories,
- int[] projectionList, IHyracksTaskContext ctx, Class<T> aggEvalClass) {
+ public AbstractRunningAggregatePushRuntime(int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories, Class<T> runningAggEvalClass,
+ IHyracksTaskContext ctx) {
this.ctx = ctx;
- this.projectionList = projectionList;
- this.aggFactories = aggFactories;
- this.aggEvalClass = aggEvalClass;
- aggEvals = new ArrayList<>(aggFactories.length);
- tupleBuilder = new ArrayTupleBuilder(projectionList.length);
- projectionToOutColumns = new int[projectionList.length];
-
- for (int j = 0; j < projectionList.length; j++) {
- projectionToOutColumns[j] = Arrays.binarySearch(outColumns, projectionList[j]);
+ this.projectionColumns = projectionColumns;
+ this.runningAggFactories = runningAggFactories;
+ this.runningAggEvalClass = runningAggEvalClass;
+ runningAggEvals = new ArrayList<>(runningAggFactories.length);
+ projectionToOutColumns = new int[projectionColumns.length];
+ for (int j = 0; j < projectionColumns.length; j++) {
+ projectionToOutColumns[j] = Arrays.binarySearch(runningAggOutColumns, projectionColumns[j]);
}
- first = true;
+ isFirst = true;
}
@Override
public void open() throws HyracksDataException {
super.open();
- if (first) {
- first = false;
+ if (isFirst) {
+ isFirst = false;
init();
}
- for (T aggEval : aggEvals) {
- aggEval.init();
+ for (T runningAggEval : runningAggEvals) {
+ runningAggEval.init();
}
}
protected void init() throws HyracksDataException {
+ tupleBuilder = createOutputTupleBuilder(projectionColumns);
initAccessAppendRef(ctx);
- for (IRunningAggregateEvaluatorFactory aggFactory : aggFactories) {
- IRunningAggregateEvaluator aggEval = aggFactory.createRunningAggregateEvaluator(ctx);
- aggEvals.add(aggEvalClass.cast(aggEval));
+ for (IRunningAggregateEvaluatorFactory runningAggFactory : runningAggFactories) {
+ IRunningAggregateEvaluator runningAggEval = runningAggFactory.createRunningAggregateEvaluator(ctx);
+ runningAggEvals.add(runningAggEvalClass.cast(runningAggEval));
}
}
+ protected ArrayTupleBuilder createOutputTupleBuilder(int[] projectionList) {
+ return new ArrayTupleBuilder(projectionList.length);
+ }
+
protected void produceTuples(IFrameTupleAccessor accessor, int beginIdx, int endIdx) throws HyracksDataException {
for (int t = beginIdx; t <= endIdx; t++) {
tRef.reset(accessor, t);
@@ -90,16 +94,16 @@
}
}
- private void produceTuple(ArrayTupleBuilder tb, IFrameTupleAccessor accessor, int tIndex,
+ protected void produceTuple(ArrayTupleBuilder tb, IFrameTupleAccessor accessor, int tIndex,
FrameTupleReference tupleRef) throws HyracksDataException {
tb.reset();
- for (int f = 0; f < projectionList.length; f++) {
+ for (int f = 0; f < projectionColumns.length; f++) {
int k = projectionToOutColumns[f];
if (k >= 0) {
- aggEvals.get(k).step(tupleRef, p);
+ runningAggEvals.get(k).step(tupleRef, p);
tb.addField(p.getByteArray(), p.getStartOffset(), p.getLength());
} else {
- tb.addField(accessor, tIndex, projectionList[f]);
+ tb.addField(accessor, tIndex, projectionColumns[f]);
}
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/MaterializingWindowPushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/MaterializingWindowPushRuntime.java
deleted file mode 100644
index 850430f..0000000
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/MaterializingWindowPushRuntime.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.hyracks.algebricks.runtime.operators.aggrun;
-
-import java.nio.ByteBuffer;
-
-import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
-import org.apache.hyracks.api.comm.FrameHelper;
-import org.apache.hyracks.api.comm.IFrame;
-import org.apache.hyracks.api.comm.VSizeFrame;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.io.FileReference;
-import org.apache.hyracks.dataflow.common.io.GeneratedRunFileReader;
-import org.apache.hyracks.dataflow.common.io.RunFileWriter;
-import org.apache.hyracks.storage.common.arraylist.IntArrayList;
-
-class MaterializingWindowPushRuntime extends AbstractWindowPushRuntime {
-
- private RunFileWriter run;
-
- private IntArrayList runInfo;
-
- private long partitionLength;
-
- private IFrame curFrame;
-
- private long curFrameId;
-
- private long runLastFrameId;
-
- MaterializingWindowPushRuntime(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories,
- int[] projectionList, int[] partitionColumnList, IBinaryComparatorFactory[] partitionComparatorFactories,
- IBinaryComparatorFactory[] orderComparatorFactories, IHyracksTaskContext ctx) {
- super(outColumns, aggFactories, projectionList, partitionColumnList, partitionComparatorFactories,
- orderComparatorFactories, ctx);
- }
-
- @Override
- public void open() throws HyracksDataException {
- super.open();
- run = null;
- curFrameId = -1;
- }
-
- @Override
- protected void init() throws HyracksDataException {
- super.init();
- curFrame = new VSizeFrame(ctx);
- runInfo = new IntArrayList(128, 128);
- }
-
- @Override
- public void close() throws HyracksDataException {
- super.close();
- if (run != null) {
- run.erase();
- }
- }
-
- @Override
- protected void beginPartitionImpl() {
- runInfo.clear();
- partitionLength = 0;
- if (run != null) {
- run.rewind();
- }
- }
-
- @Override
- protected void partitionChunkImpl(long frameId, ByteBuffer frameBuffer, int tBeginIdx, int tEndIdx)
- throws HyracksDataException {
- boolean firstChunk = runInfo.isEmpty();
- runInfo.add(tBeginIdx);
- runInfo.add(tEndIdx);
-
- // save frame. first one to memory, remaining ones to the run file
- if (firstChunk || tBeginIdx == 0) {
- int pos = frameBuffer.position();
- frameBuffer.position(0);
-
- if (firstChunk) {
- if (frameId != curFrameId) {
- curFrame.resize(curFrame.getMinSize() * FrameHelper.deserializeNumOfMinFrame(frameBuffer));
- curFrame.getBuffer().clear();
- curFrame.getBuffer().put(frameBuffer);
- curFrameId = frameId;
- }
- } else {
- if (run == null) {
- FileReference file = ctx.getJobletContext().createManagedWorkspaceFile(getClass().getSimpleName());
- run = new RunFileWriter(file, ctx.getIoManager());
- run.open();
- }
- run.nextFrame(frameBuffer);
- runLastFrameId = frameId;
- }
-
- frameBuffer.position(pos);
- }
-
- partitionLength += tEndIdx - tBeginIdx + 1;
- }
-
- @Override
- protected void endPartitionImpl() throws HyracksDataException {
- aggInitPartition(partitionLength);
- GeneratedRunFileReader reader = null;
- try {
- boolean runRead = false;
- for (int idx = 0, ln = runInfo.size(); idx < ln; idx += 2) {
- int tBeginIdx = runInfo.get(idx);
- int tEndIdx = runInfo.get(idx + 1);
- if (tBeginIdx == 0 && idx > 0) {
- if (reader == null) {
- reader = run.createReader();
- reader.open();
- }
- reader.nextFrame(curFrame);
- runRead = true;
- }
- tAccess.reset(curFrame.getBuffer());
- produceTuples(tAccess, tBeginIdx, tEndIdx);
- }
- if (runRead) {
- curFrameId = runLastFrameId;
- }
- } finally {
- if (reader != null) {
- reader.close();
- }
- }
- }
-}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregatePushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregatePushRuntime.java
index 7c39a21..4ca166f 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregatePushRuntime.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregatePushRuntime.java
@@ -28,15 +28,14 @@
class RunningAggregatePushRuntime extends AbstractRunningAggregatePushRuntime<IRunningAggregateEvaluator> {
- RunningAggregatePushRuntime(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories,
- int[] projectionList, IHyracksTaskContext ctx) {
- super(outColumns, aggFactories, projectionList, ctx, IRunningAggregateEvaluator.class);
+ RunningAggregatePushRuntime(int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories, IHyracksTaskContext ctx) {
+ super(projectionColumns, runningAggOutColumns, runningAggFactories, IRunningAggregateEvaluator.class, ctx);
}
@Override
public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
tAccess.reset(buffer);
- int nTuple = tAccess.getTupleCount();
- produceTuples(tAccess, 0, nTuple - 1);
+ produceTuples(tAccess, 0, tAccess.getTupleCount() - 1);
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregateRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregateRuntimeFactory.java
index e97ea7d..d9b3b5c 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregateRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/RunningAggregateRuntimeFactory.java
@@ -29,31 +29,32 @@
private static final long serialVersionUID = 1L;
- protected final int[] outColumns;
+ protected final int[] runningAggOutColumns;
- protected final IRunningAggregateEvaluatorFactory[] aggFactories;
+ protected final IRunningAggregateEvaluatorFactory[] runningAggFactories;
/**
- * @param outColumns
- * a sorted array of columns into which the result is written to
- * @param aggFactories
- * @param projectionList
+ * @param projectionColumns
* an array of columns to be projected
+ * @param runningAggOutColumns
+ * a sorted array of columns into which the result is written to
+ * @param runningAggFactories
*/
- public RunningAggregateRuntimeFactory(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories,
- int[] projectionList) {
- super(projectionList);
- this.outColumns = outColumns;
- this.aggFactories = aggFactories;
+ public RunningAggregateRuntimeFactory(int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories) {
+ super(projectionColumns);
+ this.runningAggOutColumns = runningAggOutColumns;
+ this.runningAggFactories = runningAggFactories;
}
@Override
public AbstractOneInputOneOutputOneFramePushRuntime createOneOutputPushRuntime(IHyracksTaskContext ctx) {
- return new RunningAggregatePushRuntime(outColumns, aggFactories, projectionList, ctx);
+ return new RunningAggregatePushRuntime(projectionList, runningAggOutColumns, runningAggFactories, ctx);
}
@Override
public String toString() {
- return "running-aggregate " + Arrays.toString(outColumns) + " := " + Arrays.toString(aggFactories);
+ return "running-aggregate " + Arrays.toString(runningAggOutColumns) + " := "
+ + Arrays.toString(runningAggFactories);
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/WindowRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/WindowRuntimeFactory.java
deleted file mode 100644
index fe7f554..0000000
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/WindowRuntimeFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.hyracks.algebricks.runtime.operators.aggrun;
-
-import java.util.Arrays;
-
-import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime;
-import org.apache.hyracks.api.context.IHyracksTaskContext;
-import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-
-public class WindowRuntimeFactory extends RunningAggregateRuntimeFactory {
-
- private static final long serialVersionUID = 1L;
-
- private final int[] partitionColumnList;
-
- private final IBinaryComparatorFactory[] partitionComparatorFactories;
-
- private final boolean partitionMaterialization;
-
- private final IBinaryComparatorFactory[] orderComparatorFactories;
-
- public WindowRuntimeFactory(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories,
- int[] projectionList, int[] partitionColumnList, IBinaryComparatorFactory[] partitionComparatorFactories,
- boolean partitionMaterialization, IBinaryComparatorFactory[] orderComparatorFactories) {
- super(outColumns, aggFactories, projectionList);
- this.partitionColumnList = partitionColumnList;
- this.partitionComparatorFactories = partitionComparatorFactories;
- this.partitionMaterialization = partitionMaterialization;
- this.orderComparatorFactories = orderComparatorFactories;
- }
-
- @Override
- public AbstractOneInputOneOutputOneFramePushRuntime createOneOutputPushRuntime(IHyracksTaskContext ctx) {
- return partitionMaterialization
- ? new MaterializingWindowPushRuntime(outColumns, aggFactories, projectionList, partitionColumnList,
- partitionComparatorFactories, orderComparatorFactories, ctx)
- : new SimpleWindowPushRuntime(outColumns, aggFactories, projectionList, partitionColumnList,
- partitionComparatorFactories, orderComparatorFactories, ctx);
- }
-
- @Override
- public String toString() {
- return "window (" + Arrays.toString(partitionColumnList) + ") " + Arrays.toString(outColumns) + " := "
- + Arrays.toString(aggFactories);
- }
-}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
index a717794..376a7a1 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
@@ -93,4 +93,29 @@
public IPushRuntime[] getPushRuntime(IPushRuntimeFactory runtimeFactory) {
return runtimeMap.get(runtimeFactory);
}
+
+ //TODO: refactoring is needed
+ public static IFrameWriter assemblePipeline(AlgebricksPipeline subplan, IFrameWriter writer,
+ IHyracksTaskContext ctx) throws HyracksDataException {
+ // should enforce protocol
+ boolean enforce = ctx.getJobFlags().contains(JobFlag.ENFORCE_CONTRACT);
+ // plug the operators
+ IFrameWriter start = writer;
+ IPushRuntimeFactory[] runtimeFactories = subplan.getRuntimeFactories();
+ RecordDescriptor[] recordDescriptors = subplan.getRecordDescriptors();
+ for (int i = runtimeFactories.length - 1; i >= 0; i--) {
+ IPushRuntime newRuntime = runtimeFactories[i].createPushRuntime(ctx)[0];
+ newRuntime = enforce ? EnforcePushRuntime.enforce(newRuntime) : newRuntime;
+ start = enforce ? EnforceFrameWriter.enforce(start) : start;
+ newRuntime.setOutputFrameWriter(0, start, recordDescriptors[i]);
+ if (i > 0) {
+ newRuntime.setInputRecordDescriptor(0, recordDescriptors[i - 1]);
+ } else {
+ // the nts has the same input and output rec. desc.
+ newRuntime.setInputRecordDescriptor(0, recordDescriptors[0]);
+ }
+ start = newRuntime;
+ }
+ return start;
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractWindowPushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/AbstractWindowPushRuntime.java
similarity index 82%
rename from hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractWindowPushRuntime.java
rename to hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/AbstractWindowPushRuntime.java
index f0bd204..a63aaf8 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/AbstractWindowPushRuntime.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/AbstractWindowPushRuntime.java
@@ -17,12 +17,13 @@
* under the License.
*/
-package org.apache.hyracks.algebricks.runtime.operators.aggrun;
+package org.apache.hyracks.algebricks.runtime.operators.win;
import java.nio.ByteBuffer;
import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IWindowAggregateEvaluator;
+import org.apache.hyracks.algebricks.runtime.operators.aggrun.AbstractRunningAggregatePushRuntime;
import org.apache.hyracks.api.comm.IFrame;
import org.apache.hyracks.api.comm.VSizeFrame;
import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -35,7 +36,7 @@
public abstract class AbstractWindowPushRuntime extends AbstractRunningAggregatePushRuntime<IWindowAggregateEvaluator> {
- private final int[] partitionColumnList;
+ private final int[] partitionColumns;
private final IBinaryComparatorFactory[] partitionComparatorFactories;
private IBinaryComparator[] partitionComparators;
private final IBinaryComparatorFactory[] orderComparatorFactories;
@@ -45,11 +46,11 @@
private long frameId;
private boolean inPartition;
- public AbstractWindowPushRuntime(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories,
- int[] projectionList, int[] partitionColumnList, IBinaryComparatorFactory[] partitionComparatorFactories,
- IBinaryComparatorFactory[] orderComparatorFactories, IHyracksTaskContext ctx) {
- super(outColumns, aggFactories, projectionList, ctx, IWindowAggregateEvaluator.class);
- this.partitionColumnList = partitionColumnList;
+ AbstractWindowPushRuntime(int[] partitionColumns, IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories, IHyracksTaskContext ctx) {
+ super(projectionColumns, runningAggOutColumns, runningAggFactories, IWindowAggregateEvaluator.class, ctx);
+ this.partitionColumns = partitionColumns;
this.partitionComparatorFactories = partitionComparatorFactories;
this.orderComparatorFactories = orderComparatorFactories;
}
@@ -70,8 +71,8 @@
copyFrameAccessor = new FrameTupleAccessor(inputRecordDesc);
copyFrameAccessor.reset(copyFrame.getBuffer());
IBinaryComparator[] orderComparators = createBinaryComparators(orderComparatorFactories);
- for (IWindowAggregateEvaluator aggEval : aggEvals) {
- aggEval.configure(orderComparators);
+ for (IWindowAggregateEvaluator runningAggEval : runningAggEvals) {
+ runningAggEval.configure(orderComparators);
}
}
@@ -95,7 +96,7 @@
beginPartition();
} else {
boolean samePartition = PreclusteredGroupWriter.sameGroup(copyFrameAccessor,
- copyFrameAccessor.getTupleCount() - 1, frameAccessor, 0, partitionColumnList, partitionComparators);
+ copyFrameAccessor.getTupleCount() - 1, frameAccessor, 0, partitionColumns, partitionComparators);
if (!samePartition) {
endPartition();
beginPartition();
@@ -108,7 +109,7 @@
int tLastIndex = nTuple - 1;
for (int tIndex = 1; tIndex <= tLastIndex; tIndex++) {
boolean samePartition = PreclusteredGroupWriter.sameGroup(frameAccessor, tIndex - 1, frameAccessor,
- tIndex, partitionColumnList, partitionComparators);
+ tIndex, partitionColumns, partitionComparators);
if (!samePartition) {
partitionChunk(frameId, buffer, tBeginIndex, tIndex - 1);
endPartition();
@@ -149,13 +150,13 @@
inPartition = false;
}
- void aggInitPartition(long partitionLength) throws HyracksDataException {
- for (IWindowAggregateEvaluator aggEval : aggEvals) {
- aggEval.initPartition(partitionLength);
+ void runningAggInitPartition(long partitionLength) throws HyracksDataException {
+ for (IWindowAggregateEvaluator runningAggEval : runningAggEvals) {
+ runningAggEval.initPartition(partitionLength);
}
}
- private static IBinaryComparator[] createBinaryComparators(IBinaryComparatorFactory[] factories) {
+ protected static IBinaryComparator[] createBinaryComparators(IBinaryComparatorFactory[] factories) {
IBinaryComparator[] comparators = new IBinaryComparator[factories.length];
for (int i = 0; i < factories.length; i++) {
comparators[i] = factories[i].createBinaryComparator();
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/AbstractWindowRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/AbstractWindowRuntimeFactory.java
new file mode 100644
index 0000000..6c52b0b
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/AbstractWindowRuntimeFactory.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputRuntimeFactory;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+
+public abstract class AbstractWindowRuntimeFactory extends AbstractOneInputOneOutputRuntimeFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ final int[] partitionColumns;
+
+ final IBinaryComparatorFactory[] partitionComparatorFactories;
+
+ final IBinaryComparatorFactory[] orderComparatorFactories;
+
+ final int[] runningAggOutColumns;
+
+ final IRunningAggregateEvaluatorFactory[] runningAggFactories;
+
+ AbstractWindowRuntimeFactory(int[] partitionColumns, IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories) {
+ super(projectionColumns);
+ this.runningAggOutColumns = runningAggOutColumns;
+ this.runningAggFactories = runningAggFactories;
+ this.partitionColumns = partitionColumns;
+ this.partitionComparatorFactories = partitionComparatorFactories;
+ this.orderComparatorFactories = orderComparatorFactories;
+ }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowAggregatorDescriptorFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowAggregatorDescriptorFactory.java
new file mode 100644
index 0000000..6177723
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowAggregatorDescriptorFactory.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import org.apache.hyracks.algebricks.runtime.base.AlgebricksPipeline;
+import org.apache.hyracks.algebricks.runtime.operators.aggreg.NestedPlansAccumulatingAggregatorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.meta.PipelineAssembler;
+import org.apache.hyracks.algebricks.runtime.operators.std.NestedTupleSourceRuntimeFactory.NestedTupleSourceRuntime;
+import org.apache.hyracks.api.comm.IFrameTupleAccessor;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import org.apache.hyracks.dataflow.common.utils.TupleUtils;
+import org.apache.hyracks.dataflow.std.group.AbstractAccumulatingAggregatorDescriptorFactory;
+import org.apache.hyracks.dataflow.std.group.AggregateState;
+import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptor;
+
+/**
+ * Aggregator factory for window operators
+ */
+public final class WindowAggregatorDescriptorFactory extends AbstractAccumulatingAggregatorDescriptorFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ private AlgebricksPipeline[] subplans;
+
+ public WindowAggregatorDescriptorFactory(AlgebricksPipeline[] subplans) {
+ this.subplans = subplans;
+ }
+
+ @Override
+ public IAggregatorDescriptor createAggregator(IHyracksTaskContext ctx, RecordDescriptor inRecordDesc,
+ RecordDescriptor outRecordDescriptor, int[] keys, int[] partialKeys, long memoryBudget)
+ throws HyracksDataException {
+ NestedPlansAccumulatingAggregatorFactory.AggregatorOutput outputWriter =
+ new NestedPlansAccumulatingAggregatorFactory.AggregatorOutput(subplans, 0);
+ NestedTupleSourceRuntime[] pipelines = new NestedTupleSourceRuntime[subplans.length];
+ for (int i = 0; i < subplans.length; i++) {
+ pipelines[i] =
+ (NestedTupleSourceRuntime) PipelineAssembler.assemblePipeline(subplans[i], outputWriter, ctx);
+ }
+
+ return new IAggregatorDescriptor() {
+
+ @Override
+ public void init(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ outputWriter.getTupleBuilder().reset();
+
+ for (NestedTupleSourceRuntime pipeline : pipelines) {
+ pipeline.open();
+ }
+ }
+
+ @Override
+ public void aggregate(IFrameTupleAccessor accessor, int tIndex, IFrameTupleAccessor stateAccessor,
+ int stateTupleIndex, AggregateState state) throws HyracksDataException {
+ memoryUsageCheck();
+ for (NestedTupleSourceRuntime pipeline : pipelines) {
+ pipeline.writeTuple(accessor.getBuffer(), tIndex);
+ }
+ }
+
+ @Override
+ public boolean outputFinalResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor stateAccessor,
+ int tIndex, AggregateState state) throws HyracksDataException {
+ for (int i = 0; i < pipelines.length; i++) {
+ outputWriter.setInputIdx(i);
+ pipelines[i].close();
+ }
+ memoryUsageCheck();
+ TupleUtils.addFields(outputWriter.getTupleBuilder(), tupleBuilder);
+ return true;
+ }
+
+ @Override
+ public AggregateState createAggregateStates() {
+ return null;
+ }
+
+ @Override
+ public void reset() {
+ }
+
+ @Override
+ public boolean outputPartialResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void close() {
+ }
+
+ private void memoryUsageCheck() {
+ // TODO: implement as in NestedPlansAccumulatingAggregatorFactory.memoryUsageCheck()
+ }
+ };
+ }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowMaterializingPushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowMaterializingPushRuntime.java
new file mode 100644
index 0000000..ec13c5f
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowMaterializingPushRuntime.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import java.nio.ByteBuffer;
+
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.api.comm.FrameHelper;
+import org.apache.hyracks.api.comm.IFrame;
+import org.apache.hyracks.api.comm.VSizeFrame;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
+import org.apache.hyracks.dataflow.common.io.GeneratedRunFileReader;
+import org.apache.hyracks.dataflow.common.io.RunFileWriter;
+import org.apache.hyracks.storage.common.arraylist.IntArrayList;
+
+/**
+ * Runtime for window operators that performs partition materialization and evaluates running aggregates
+ * that require information about number of tuples in the partition.
+ */
+class WindowMaterializingPushRuntime extends AbstractWindowPushRuntime {
+
+ private long partitionLength;
+
+ IFrame curFrame;
+
+ private long curFrameId;
+
+ private int chunkBeginIdx;
+
+ private IntArrayList chunkEndIdx;
+
+ private RunFileWriter run;
+
+ private long runLastFrameId;
+
+ WindowMaterializingPushRuntime(int[] partitionColumns, IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories, IHyracksTaskContext ctx) {
+ super(partitionColumns, partitionComparatorFactories, orderComparatorFactories, projectionColumns,
+ runningAggOutColumns, runningAggFactories, ctx);
+ }
+
+ @Override
+ public void open() throws HyracksDataException {
+ super.open();
+ run = null;
+ curFrameId = -1;
+ }
+
+ @Override
+ protected void init() throws HyracksDataException {
+ super.init();
+ curFrame = new VSizeFrame(ctx);
+ chunkEndIdx = new IntArrayList(128, 128);
+ }
+
+ @Override
+ public void close() throws HyracksDataException {
+ super.close();
+ if (run != null) {
+ run.erase();
+ }
+ }
+
+ @Override
+ protected void beginPartitionImpl() {
+ chunkEndIdx.clear();
+ partitionLength = 0;
+ if (run != null) {
+ run.rewind();
+ }
+ }
+
+ @Override
+ protected void partitionChunkImpl(long frameId, ByteBuffer frameBuffer, int tBeginIdx, int tEndIdx)
+ throws HyracksDataException {
+ // save the frame. first one to memory, remaining ones to the run file
+ boolean isFirstChunk = chunkEndIdx.isEmpty();
+ if (isFirstChunk) {
+ if (frameId != curFrameId) {
+ int nBlocks = FrameHelper.deserializeNumOfMinFrame(frameBuffer);
+ curFrame.ensureFrameSize(curFrame.getMinSize() * nBlocks);
+ int pos = frameBuffer.position();
+ FrameUtils.copyAndFlip(frameBuffer, curFrame.getBuffer());
+ frameBuffer.position(pos);
+ curFrameId = frameId;
+ }
+ chunkBeginIdx = tBeginIdx;
+ } else {
+ if (tBeginIdx != 0) {
+ throw new IllegalStateException(String.valueOf(tBeginIdx));
+ }
+ if (run == null) {
+ FileReference file = ctx.getJobletContext().createManagedWorkspaceFile(getClass().getSimpleName());
+ run = new RunFileWriter(file, ctx.getIoManager());
+ run.open();
+ }
+ int pos = frameBuffer.position();
+ frameBuffer.position(0);
+ run.nextFrame(frameBuffer);
+ frameBuffer.position(pos);
+ runLastFrameId = frameId;
+ }
+
+ chunkEndIdx.add(tEndIdx);
+ partitionLength += tEndIdx - tBeginIdx + 1;
+ }
+
+ @Override
+ protected void endPartitionImpl() throws HyracksDataException {
+ runningAggInitPartition(partitionLength);
+
+ int nChunks = getPartitionChunkCount();
+ if (nChunks == 1) {
+ producePartitionTuples(0, null);
+ } else {
+ GeneratedRunFileReader reader = run.createReader();
+ reader.open();
+ try {
+ for (int chunkIdx = 0; chunkIdx < nChunks; chunkIdx++) {
+ if (chunkIdx > 0) {
+ reader.nextFrame(curFrame);
+ }
+ producePartitionTuples(chunkIdx, reader);
+ }
+ curFrameId = runLastFrameId;
+ } finally {
+ reader.close();
+ }
+ }
+ }
+
+ protected void producePartitionTuples(int chunkIdx, GeneratedRunFileReader reader) throws HyracksDataException {
+ tAccess.reset(curFrame.getBuffer());
+ produceTuples(tAccess, getTupleBeginIdx(chunkIdx), getTupleEndIdx(chunkIdx));
+ }
+
+ int getPartitionChunkCount() {
+ return chunkEndIdx.size();
+ }
+
+ int getTupleBeginIdx(int chunkIdx) {
+ return chunkIdx == 0 ? chunkBeginIdx : 0;
+ }
+
+ int getTupleEndIdx(int chunkIdx) {
+ return chunkEndIdx.get(chunkIdx);
+ }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowMaterializingRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowMaterializingRuntimeFactory.java
new file mode 100644
index 0000000..1b02fb1
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowMaterializingRuntimeFactory.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import java.util.Arrays;
+
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+
+/**
+ * Runtime factory for window operators that performs partition materialization and evaluates running aggregates
+ * that require information about number of tuples in the partition.
+ */
+public class WindowMaterializingRuntimeFactory extends AbstractWindowRuntimeFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public WindowMaterializingRuntimeFactory(int[] partitionColumns,
+ IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, int[] projectionColumnsExcludingSubplans,
+ int[] runningAggOutColumns, IRunningAggregateEvaluatorFactory[] runningAggFactories) {
+ super(partitionColumns, partitionComparatorFactories, orderComparatorFactories,
+ projectionColumnsExcludingSubplans, runningAggOutColumns, runningAggFactories);
+ }
+
+ @Override
+ public AbstractOneInputOneOutputOneFramePushRuntime createOneOutputPushRuntime(IHyracksTaskContext ctx) {
+ return new WindowMaterializingPushRuntime(partitionColumns, partitionComparatorFactories,
+ orderComparatorFactories, projectionList, runningAggOutColumns, runningAggFactories, ctx);
+ }
+
+ @Override
+ public String toString() {
+ return "window [materialize] (" + Arrays.toString(partitionColumns) + ") "
+ + Arrays.toString(runningAggOutColumns) + " := " + Arrays.toString(runningAggFactories);
+ }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowNestedPlansPushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowNestedPlansPushRuntime.java
new file mode 100644
index 0000000..e7daf11
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowNestedPlansPushRuntime.java
@@ -0,0 +1,358 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import java.nio.ByteBuffer;
+
+import org.apache.hyracks.algebricks.data.IBinaryIntegerInspector;
+import org.apache.hyracks.algebricks.data.IBinaryIntegerInspectorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.comm.FrameHelper;
+import org.apache.hyracks.api.comm.IFrame;
+import org.apache.hyracks.api.comm.VSizeFrame;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
+import org.apache.hyracks.data.std.util.DataUtils;
+import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
+import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
+import org.apache.hyracks.dataflow.common.data.accessors.FrameTupleReference;
+import org.apache.hyracks.dataflow.common.io.GeneratedRunFileReader;
+import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptor;
+
+/**
+ * Runtime for window operators that performs partition materialization and can evaluate running aggregates
+ * as well as regular aggregates (in nested plans) over window frames.
+ */
+public class WindowNestedPlansPushRuntime extends WindowMaterializingPushRuntime {
+
+ private final boolean frameValueExists;
+
+ private final IScalarEvaluatorFactory[] frameValueEvalFactories;
+
+ private IScalarEvaluator[] frameValueEvals;
+
+ private IPointable[] frameValuePointables;
+
+ private final IBinaryComparatorFactory[] frameValueComparatorFactories;
+
+ private IBinaryComparator[] frameValueComparators;
+
+ private final boolean frameStartExists;
+
+ private final IScalarEvaluatorFactory[] frameStartEvalFactories;
+
+ private IScalarEvaluator[] frameStartEvals;
+
+ private IPointable[] frameStartPointables;
+
+ private final boolean frameEndExists;
+
+ private final IScalarEvaluatorFactory[] frameEndEvalFactories;
+
+ private IScalarEvaluator[] frameEndEvals;
+
+ private IPointable[] frameEndPointables;
+
+ private final boolean frameExcludeExists;
+
+ private final IScalarEvaluatorFactory[] frameExcludeEvalFactories;
+
+ private IScalarEvaluator[] frameExcludeEvals;
+
+ private final int frameExcludeNegationStartIdx;
+
+ private IPointable[] frameExcludePointables;
+
+ private IPointable frameExcludePointable2;
+
+ private final IBinaryComparatorFactory[] frameExcludeComparatorFactories;
+
+ private IBinaryComparator[] frameExcludeComparators;
+
+ private final boolean frameOffsetExists;
+
+ private final IScalarEvaluatorFactory frameOffsetEvalFactory;
+
+ private IScalarEvaluator frameOffsetEval;
+
+ private IPointable frameOffsetPointable;
+
+ private final IBinaryIntegerInspectorFactory binaryIntegerInspectorFactory;
+
+ private final int frameMaxObjects;
+
+ private final int nestedAggOutSchemaSize;
+
+ private final WindowAggregatorDescriptorFactory nestedAggFactory;
+
+ private IAggregatorDescriptor nestedAgg;
+
+ private IFrame copyFrame2;
+
+ private IFrame runFrame;
+
+ private FrameTupleAccessor tAccess2;
+
+ private FrameTupleReference tRef2;
+
+ private IBinaryIntegerInspector bii;
+
+ WindowNestedPlansPushRuntime(int[] partitionColumns, IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, IScalarEvaluatorFactory[] frameValueEvalFactories,
+ IBinaryComparatorFactory[] frameValueComparatorFactories, IScalarEvaluatorFactory[] frameStartEvalFactories,
+ IScalarEvaluatorFactory[] frameEndEvalFactories, IScalarEvaluatorFactory[] frameExcludeEvalFactories,
+ int frameExcludeNegationStartIdx, IBinaryComparatorFactory[] frameExcludeComparatorFactories,
+ IScalarEvaluatorFactory frameOffsetEvalFactory,
+ IBinaryIntegerInspectorFactory binaryIntegerInspectorFactory, int frameMaxObjects, int[] projectionColumns,
+ int[] runningAggOutColumns, IRunningAggregateEvaluatorFactory[] runningAggFactories,
+ int nestedAggOutSchemaSize, WindowAggregatorDescriptorFactory nestedAggFactory, IHyracksTaskContext ctx) {
+ super(partitionColumns, partitionComparatorFactories, orderComparatorFactories, projectionColumns,
+ runningAggOutColumns, runningAggFactories, ctx);
+ this.frameValueEvalFactories = frameValueEvalFactories;
+ this.frameValueExists = frameValueEvalFactories != null && frameValueEvalFactories.length > 0;
+ this.frameStartEvalFactories = frameStartEvalFactories;
+ this.frameStartExists = frameStartEvalFactories != null && frameStartEvalFactories.length > 0;
+ this.frameEndEvalFactories = frameEndEvalFactories;
+ this.frameEndExists = frameEndEvalFactories != null && frameEndEvalFactories.length > 0;
+ this.frameValueComparatorFactories = frameValueComparatorFactories;
+ this.frameExcludeEvalFactories = frameExcludeEvalFactories;
+ this.frameExcludeExists = frameExcludeEvalFactories != null && frameExcludeEvalFactories.length > 0;
+ this.frameExcludeComparatorFactories = frameExcludeComparatorFactories;
+ this.frameExcludeNegationStartIdx = frameExcludeNegationStartIdx;
+ this.frameOffsetExists = frameOffsetEvalFactory != null;
+ this.frameOffsetEvalFactory = frameOffsetEvalFactory;
+ this.binaryIntegerInspectorFactory = binaryIntegerInspectorFactory;
+ this.frameMaxObjects = frameMaxObjects;
+ this.nestedAggFactory = nestedAggFactory;
+ this.nestedAggOutSchemaSize = nestedAggOutSchemaSize;
+ }
+
+ @Override
+ protected void init() throws HyracksDataException {
+ super.init();
+
+ if (frameValueExists) {
+ frameValueEvals = createEvaluators(frameValueEvalFactories, ctx);
+ frameValueComparators = createBinaryComparators(frameValueComparatorFactories);
+ frameValuePointables = createPointables(frameValueEvalFactories.length);
+ }
+ if (frameStartExists) {
+ frameStartEvals = createEvaluators(frameStartEvalFactories, ctx);
+ frameStartPointables = createPointables(frameStartEvalFactories.length);
+ }
+ if (frameEndExists) {
+ frameEndEvals = createEvaluators(frameEndEvalFactories, ctx);
+ frameEndPointables = createPointables(frameEndEvalFactories.length);
+ }
+ if (frameExcludeExists) {
+ frameExcludeEvals = createEvaluators(frameExcludeEvalFactories, ctx);
+ frameExcludeComparators = createBinaryComparators(frameExcludeComparatorFactories);
+ frameExcludePointables = createPointables(frameExcludeEvalFactories.length);
+ frameExcludePointable2 = VoidPointable.FACTORY.createPointable();
+ }
+ if (frameOffsetExists) {
+ frameOffsetEval = frameOffsetEvalFactory.createScalarEvaluator(ctx);
+ frameOffsetPointable = VoidPointable.FACTORY.createPointable();
+ bii = binaryIntegerInspectorFactory.createBinaryIntegerInspector(ctx);
+ }
+
+ nestedAgg = nestedAggFactory.createAggregator(ctx, null, null, null, null, null, -1);
+
+ runFrame = new VSizeFrame(ctx);
+ copyFrame2 = new VSizeFrame(ctx);
+ tAccess2 = new FrameTupleAccessor(inputRecordDesc);
+ tRef2 = new FrameTupleReference();
+ }
+
+ @Override
+ protected void producePartitionTuples(int chunkIdx, GeneratedRunFileReader reader) throws HyracksDataException {
+ long readerPos = -1;
+ int nChunks = getPartitionChunkCount();
+ if (nChunks > 1) {
+ readerPos = reader.position();
+ if (chunkIdx == 0) {
+ ByteBuffer curFrameBuffer = curFrame.getBuffer();
+ int nBlocks = FrameHelper.deserializeNumOfMinFrame(curFrameBuffer);
+ copyFrame2.ensureFrameSize(copyFrame2.getMinSize() * nBlocks);
+ int pos = curFrameBuffer.position();
+ FrameUtils.copyAndFlip(curFrameBuffer, copyFrame2.getBuffer());
+ curFrameBuffer.position(pos);
+ }
+ }
+
+ tAccess.reset(curFrame.getBuffer());
+ int tBeginIdx = getTupleBeginIdx(chunkIdx);
+ int tEndIdx = getTupleEndIdx(chunkIdx);
+ for (int tIdx = tBeginIdx; tIdx <= tEndIdx; tIdx++) {
+ tRef.reset(tAccess, tIdx);
+
+ // running aggregates
+ produceTuple(tupleBuilder, tAccess, tIdx, tRef);
+
+ // frame boundaries
+ if (frameStartExists) {
+ for (int i = 0; i < frameStartEvals.length; i++) {
+ frameStartEvals[i].evaluate(tRef, frameStartPointables[i]);
+ }
+ }
+ if (frameEndExists) {
+ for (int i = 0; i < frameEndEvals.length; i++) {
+ frameEndEvals[i].evaluate(tRef, frameEndPointables[i]);
+ }
+ }
+ if (frameExcludeExists) {
+ for (int i = 0; i < frameExcludeEvals.length; i++) {
+ frameExcludeEvals[i].evaluate(tRef, frameExcludePointables[i]);
+ }
+ }
+ int toSkip = 0;
+ if (frameOffsetExists) {
+ frameOffsetEval.evaluate(tRef, frameOffsetPointable);
+ toSkip = bii.getIntegerValue(frameOffsetPointable.getByteArray(), frameOffsetPointable.getStartOffset(),
+ frameOffsetPointable.getLength());
+ }
+ int toWrite = frameMaxObjects;
+
+ // aggregator created by WindowAggregatorDescriptorFactory does not process argument tuple in init()
+ nestedAgg.init(null, null, -1, null);
+
+ if (nChunks > 1) {
+ reader.seek(0);
+ }
+
+ frame_loop: for (int chunkIdx2 = 0; chunkIdx2 < nChunks; chunkIdx2++) {
+ IFrame innerFrame;
+ if (chunkIdx2 == 0) {
+ // first chunk's frame is always in memory
+ innerFrame = chunkIdx == 0 ? curFrame : copyFrame2;
+ } else {
+ reader.nextFrame(runFrame);
+ innerFrame = runFrame;
+ }
+ tAccess2.reset(innerFrame.getBuffer());
+
+ int tBeginIdx2 = getTupleBeginIdx(chunkIdx2);
+ int tEndIdx2 = getTupleEndIdx(chunkIdx2);
+ for (int tIdx2 = tBeginIdx2; tIdx2 <= tEndIdx2; tIdx2++) {
+ tRef2.reset(tAccess2, tIdx2);
+
+ if (frameStartExists || frameEndExists) {
+ for (int frameValueIdx = 0; frameValueIdx < frameValueEvals.length; frameValueIdx++) {
+ frameValueEvals[frameValueIdx].evaluate(tRef2, frameValuePointables[frameValueIdx]);
+ }
+ if (frameStartExists
+ && compare(frameValuePointables, frameStartPointables, frameValueComparators) < 0) {
+ // skip if value < start
+ continue;
+ }
+ if (frameEndExists
+ && compare(frameValuePointables, frameEndPointables, frameValueComparators) > 0) {
+ // skip and exit if value > end
+ break frame_loop;
+ }
+ }
+ if (frameExcludeExists && isExcluded()) {
+ // skip if excluded
+ continue;
+ }
+
+ if (toSkip > 0) {
+ // skip if offset hasn't been reached
+ toSkip--;
+ continue;
+ }
+
+ if (toWrite != 0) {
+ nestedAgg.aggregate(tAccess2, tIdx2, null, -1, null);
+ }
+ if (toWrite > 0) {
+ toWrite--;
+ }
+ if (toWrite == 0) {
+ break frame_loop;
+ }
+ }
+ }
+
+ nestedAgg.outputFinalResult(tupleBuilder, null, -1, null);
+ appendToFrameFromTupleBuilder(tupleBuilder);
+ }
+
+ if (nChunks > 1) {
+ reader.seek(readerPos);
+ }
+ }
+
+ private boolean isExcluded() throws HyracksDataException {
+ for (int i = 0; i < frameExcludeEvals.length; i++) {
+ frameExcludeEvals[i].evaluate(tRef2, frameExcludePointable2);
+ boolean b = DataUtils.compare(frameExcludePointables[i], frameExcludePointable2,
+ frameExcludeComparators[i]) != 0;
+ if (i >= frameExcludeNegationStartIdx) {
+ b = !b;
+ }
+ if (b) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ protected ArrayTupleBuilder createOutputTupleBuilder(int[] projectionList) {
+ return new ArrayTupleBuilder(projectionList.length + nestedAggOutSchemaSize);
+ }
+
+ private static IScalarEvaluator[] createEvaluators(IScalarEvaluatorFactory[] evalFactories, IHyracksTaskContext ctx)
+ throws HyracksDataException {
+ IScalarEvaluator[] evals = new IScalarEvaluator[evalFactories.length];
+ for (int i = 0; i < evalFactories.length; i++) {
+ evals[i] = evalFactories[i].createScalarEvaluator(ctx);
+ }
+ return evals;
+ }
+
+ private static IPointable[] createPointables(int ln) {
+ IPointable[] pointables = new IPointable[ln];
+ for (int i = 0; i < ln; i++) {
+ pointables[i] = VoidPointable.FACTORY.createPointable();
+ }
+ return pointables;
+ }
+
+ private static int compare(IValueReference[] first, IValueReference[] second, IBinaryComparator[] comparators)
+ throws HyracksDataException {
+ for (int i = 0; i < first.length; i++) {
+ int c = DataUtils.compare(first[i], second[i], comparators[i]);
+ if (c != 0) {
+ return c;
+ }
+ }
+ return 0;
+ }
+}
\ No newline at end of file
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowNestedPlansRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowNestedPlansRuntimeFactory.java
new file mode 100644
index 0000000..640e260
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowNestedPlansRuntimeFactory.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import java.util.Arrays;
+
+import org.apache.hyracks.algebricks.data.IBinaryIntegerInspectorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+
+/**
+ * Runtime factory for window operators that performs partition materialization and can evaluate running aggregates
+ * as well as regular aggregates (in nested plans) over window frames.
+ */
+public class WindowNestedPlansRuntimeFactory extends AbstractWindowRuntimeFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ private final IScalarEvaluatorFactory[] frameValueEvalFactories;
+
+ private final IScalarEvaluatorFactory[] frameStartEvalFactories;
+
+ private final IScalarEvaluatorFactory[] frameEndEvalFactories;
+
+ private final IBinaryComparatorFactory[] frameValueComparatorFactories;
+
+ private final IScalarEvaluatorFactory[] frameExcludeEvalFactories;
+
+ private final int frameExcludeNegationStartIdx;
+
+ private final IBinaryComparatorFactory[] frameExcludeComparatorFactories;
+
+ private final IScalarEvaluatorFactory frameOffsetEvalFactory;
+
+ private final IBinaryIntegerInspectorFactory binaryIntegerInspectorFactory;
+
+ private final int frameMaxObjects;
+
+ private final int nestedAggOutSchemaSize;
+
+ private final WindowAggregatorDescriptorFactory nestedAggFactory;
+
+ public WindowNestedPlansRuntimeFactory(int[] partitionColumns,
+ IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, IScalarEvaluatorFactory[] frameValueEvalFactories,
+ IBinaryComparatorFactory[] frameValueComparatorFactories, IScalarEvaluatorFactory[] frameStartEvalFactories,
+ IScalarEvaluatorFactory[] frameEndEvalFactories, IScalarEvaluatorFactory[] frameExcludeEvalFactories,
+ int frameExcludeNegationStartIdx, IBinaryComparatorFactory[] frameExcludeComparatorFactories,
+ IScalarEvaluatorFactory frameOffsetEvalFactory,
+ IBinaryIntegerInspectorFactory binaryIntegerInspectorFactory, int frameMaxObjects,
+ int[] projectionColumnsExcludingSubplans, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories, int nestedAggOutSchemaSize,
+ WindowAggregatorDescriptorFactory nestedAggFactory) {
+ super(partitionColumns, partitionComparatorFactories, orderComparatorFactories,
+ projectionColumnsExcludingSubplans, runningAggOutColumns, runningAggFactories);
+ this.frameValueEvalFactories = frameValueEvalFactories;
+ this.frameStartEvalFactories = frameStartEvalFactories;
+ this.frameEndEvalFactories = frameEndEvalFactories;
+ this.frameValueComparatorFactories = frameValueComparatorFactories;
+ this.frameExcludeEvalFactories = frameExcludeEvalFactories;
+ this.frameExcludeComparatorFactories = frameExcludeComparatorFactories;
+ this.frameExcludeNegationStartIdx = frameExcludeNegationStartIdx;
+ this.frameOffsetEvalFactory = frameOffsetEvalFactory;
+ this.binaryIntegerInspectorFactory = binaryIntegerInspectorFactory;
+ this.frameMaxObjects = frameMaxObjects;
+ this.nestedAggFactory = nestedAggFactory;
+ this.nestedAggOutSchemaSize = nestedAggOutSchemaSize;
+ }
+
+ @Override
+ public AbstractOneInputOneOutputOneFramePushRuntime createOneOutputPushRuntime(IHyracksTaskContext ctx) {
+ return new WindowNestedPlansPushRuntime(partitionColumns, partitionComparatorFactories,
+ orderComparatorFactories, frameValueEvalFactories, frameValueComparatorFactories,
+ frameStartEvalFactories, frameEndEvalFactories, frameExcludeEvalFactories, frameExcludeNegationStartIdx,
+ frameExcludeComparatorFactories, frameOffsetEvalFactory, binaryIntegerInspectorFactory, frameMaxObjects,
+ projectionList, runningAggOutColumns, runningAggFactories, nestedAggOutSchemaSize, nestedAggFactory,
+ ctx);
+ }
+
+ @Override
+ public String toString() {
+ return "window [nested] (" + Arrays.toString(partitionColumns) + ") " + Arrays.toString(runningAggOutColumns)
+ + " := " + Arrays.toString(runningAggFactories);
+ }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/SimpleWindowPushRuntime.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowSimplePushRuntime.java
similarity index 69%
rename from hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/SimpleWindowPushRuntime.java
rename to hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowSimplePushRuntime.java
index 61b06bf..bf71ed9 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggrun/SimpleWindowPushRuntime.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowSimplePushRuntime.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.hyracks.algebricks.runtime.operators.aggrun;
+package org.apache.hyracks.algebricks.runtime.operators.win;
import java.nio.ByteBuffer;
@@ -26,18 +26,21 @@
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-class SimpleWindowPushRuntime extends AbstractWindowPushRuntime {
+/**
+ * Runtime for window operators that evaluates running aggregates without partition materialization.
+ */
+class WindowSimplePushRuntime extends AbstractWindowPushRuntime {
- SimpleWindowPushRuntime(int[] outColumns, IRunningAggregateEvaluatorFactory[] aggFactories, int[] projectionList,
- int[] partitionColumnList, IBinaryComparatorFactory[] partitionComparatorFactories,
- IBinaryComparatorFactory[] orderComparatorFactories, IHyracksTaskContext ctx) {
- super(outColumns, aggFactories, projectionList, partitionColumnList, partitionComparatorFactories,
- orderComparatorFactories, ctx);
+ WindowSimplePushRuntime(int[] partitionColumns, IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, int[] projectionColumns, int[] runningAggOutColumns,
+ IRunningAggregateEvaluatorFactory[] runningAggFactories, IHyracksTaskContext ctx) {
+ super(partitionColumns, partitionComparatorFactories, orderComparatorFactories, projectionColumns,
+ runningAggOutColumns, runningAggFactories, ctx);
}
@Override
protected void beginPartitionImpl() throws HyracksDataException {
- aggInitPartition(-1);
+ runningAggInitPartition(-1);
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowSimpleRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowSimpleRuntimeFactory.java
new file mode 100644
index 0000000..ded399f
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/win/WindowSimpleRuntimeFactory.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.hyracks.algebricks.runtime.operators.win;
+
+import java.util.Arrays;
+
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+
+/**
+ * Runtime factory for window operators that evaluates running aggregates without partition materialization.
+ */
+public class WindowSimpleRuntimeFactory extends AbstractWindowRuntimeFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public WindowSimpleRuntimeFactory(int[] partitionColumns, IBinaryComparatorFactory[] partitionComparatorFactories,
+ IBinaryComparatorFactory[] orderComparatorFactories, int[] projectionColumnsExcludingSubplans,
+ int[] runningAggOutColumns, IRunningAggregateEvaluatorFactory[] runningAggFactories) {
+ super(partitionColumns, partitionComparatorFactories, orderComparatorFactories,
+ projectionColumnsExcludingSubplans, runningAggOutColumns, runningAggFactories);
+ }
+
+ @Override
+ public AbstractOneInputOneOutputOneFramePushRuntime createOneOutputPushRuntime(IHyracksTaskContext ctx) {
+ return new WindowSimplePushRuntime(partitionColumns, partitionComparatorFactories, orderComparatorFactories,
+ projectionList, runningAggOutColumns, runningAggFactories, ctx);
+ }
+
+ @Override
+ public String toString() {
+ return "window (" + Arrays.toString(partitionColumns) + ") " + Arrays.toString(runningAggOutColumns) + " := "
+ + Arrays.toString(runningAggFactories);
+ }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java b/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java
index d235d6d..6d763d1 100644
--- a/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java
+++ b/hyracks-fullstack/algebricks/algebricks-tests/src/test/java/org/apache/hyracks/algebricks/tests/pushruntime/PushRuntimeTest.java
@@ -494,9 +494,8 @@
RecordDescriptor unnestDesc =
new RecordDescriptor(new ISerializerDeserializer[] { IntegerSerializerDeserializer.INSTANCE });
- RunningAggregateRuntimeFactory ragg = new RunningAggregateRuntimeFactory(new int[] { 1 },
- new IRunningAggregateEvaluatorFactory[] { new TupleCountRunningAggregateFunctionFactory() },
- new int[] { 0, 1 });
+ RunningAggregateRuntimeFactory ragg = new RunningAggregateRuntimeFactory(new int[] { 0, 1 }, new int[] { 1 },
+ new IRunningAggregateEvaluatorFactory[] { new TupleCountRunningAggregateFunctionFactory() });
RecordDescriptor raggDesc = new RecordDescriptor(new ISerializerDeserializer[] {
IntegerSerializerDeserializer.INSTANCE, IntegerSerializerDeserializer.INSTANCE });
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java
index ebfa903..a8195ac 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/BytePointable.java
@@ -99,7 +99,7 @@
public int compareTo(byte[] bytes, int start, int length) {
byte b = getByte();
byte ob = getByte(bytes, start);
- return b < ob ? -1 : (b > ob ? 1 : 0);
+ return Byte.compare(b, ob);
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java
index 9306818..07ba40e 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/DoublePointable.java
@@ -120,7 +120,7 @@
public int compareTo(byte[] bytes, int start, int length) {
double v = getDouble();
double ov = getDouble(bytes, start);
- return v < ov ? -1 : (v > ov ? 1 : 0);
+ return Double.compare(v, ov);
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java
index 926ee32..a55a398 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/FloatPointable.java
@@ -105,7 +105,7 @@
public int compareTo(byte[] bytes, int start, int length) {
float v = getFloat();
float ov = getFloat(bytes, start);
- return v < ov ? -1 : (v > ov ? 1 : 0);
+ return Float.compare(v, ov);
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java
index b36d6a4..81b11d2 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/IntegerPointable.java
@@ -109,7 +109,7 @@
public int compareTo(byte[] bytes, int start, int length) {
int v = getInteger();
int ov = getInteger(bytes, start);
- return v < ov ? -1 : (v > ov ? 1 : 0);
+ return Integer.compare(v, ov);
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java
index 007d0c7..1c2171c 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/LongPointable.java
@@ -123,7 +123,7 @@
public int compareTo(byte[] bytes, int start, int length) {
long v = getLong();
long ov = getLong(bytes, start);
- return v < ov ? -1 : (v > ov ? 1 : 0);
+ return Long.compare(v, ov);
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java
index 7332ba8..73f3779 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/primitive/ShortPointable.java
@@ -100,7 +100,7 @@
public int compareTo(byte[] bytes, int start, int length) {
short v = getShort();
short ov = getShort(bytes, start);
- return v < ov ? -1 : (v > ov ? 1 : 0);
+ return Short.compare(v, ov);
}
@Override
diff --git a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
index 23f4b66..4993527 100644
--- a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
@@ -18,6 +18,8 @@
*/
package org.apache.hyracks.data.std.util;
+import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.data.std.api.IValueReference;
public class DataUtils {
@@ -97,4 +99,20 @@
}
return true;
}
+
+ /**
+ * Compare two value references using given comparator
+ *
+ * @param first
+ * first value
+ * @param second
+ * second value
+ * @param cmp
+ * comparator
+ */
+ public static int compare(IValueReference first, IValueReference second, IBinaryComparator cmp)
+ throws HyracksDataException {
+ return cmp.compare(first.getByteArray(), first.getStartOffset(), first.getLength(), second.getByteArray(),
+ second.getStartOffset(), second.getLength());
+ }
}
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileReader.java b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileReader.java
index ffee1a6..03fdb49 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileReader.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/io/RunFileReader.java
@@ -53,6 +53,17 @@
readPtr = 0;
}
+ public void seek(long position) {
+ if (position < 0) {
+ throw new IllegalArgumentException(String.valueOf(position));
+ }
+ readPtr = position;
+ }
+
+ public long position() {
+ return readPtr;
+ }
+
@Override
public boolean nextFrame(IFrame frame) throws HyracksDataException {
if (readPtr >= size) {
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/TupleUtils.java b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/TupleUtils.java
index 49b5309..bbba85a 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/TupleUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/utils/TupleUtils.java
@@ -190,4 +190,19 @@
}
return true;
}
+
+ public static void addFields(ArrayTupleBuilder sourceBuilder, ArrayTupleBuilder targetBuilder)
+ throws HyracksDataException {
+ byte[] data = sourceBuilder.getByteArray();
+ int[] fieldEnds = sourceBuilder.getFieldEndOffsets();
+ int start = 0;
+ int offset;
+ for (int i = 0; i < fieldEnds.length; i++) {
+ if (i > 0) {
+ start = fieldEnds[i - 1];
+ }
+ offset = fieldEnds[i] - start;
+ targetBuilder.addField(data, start, offset);
+ }
+ }
}