From 2598100690fe56d623b46352d1da6a267c26f8ed Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Thu, 14 Feb 2008 16:01:10 +0000 Subject: [PATCH] Big formula update from Josh from bug #44364 - support for Match, NA and SumProduct functions, and initial error support in functions git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@627788 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 1 + src/documentation/content/xdocs/status.xml | 1 + .../apache/poi/hssf/model/FormulaParser.java | 22 +- .../poi/hssf/record/formula/FuncPtg.java | 4 + .../hssf/record/formula/eval/BoolEval.java | 19 +- .../hssf/record/formula/eval/ErrorEval.java | 106 ++++-- .../record/formula/eval/UnaryPlusEval.java | 5 +- .../hssf/record/formula/functions/Match.java | 298 +++++++++++++++- .../MultiOperandNumericFunction.java | 196 +++++------ .../poi/hssf/record/formula/functions/Na.java | 20 +- .../record/formula/functions/Rounddown.java | 3 + .../record/formula/functions/Roundup.java | 3 + .../record/formula/functions/Sumproduct.java | 226 +++++++++++- .../poi/hssf/record/formula/functions/T.java | 44 ++- .../hssf/usermodel/HSSFFormulaEvaluator.java | 138 +++----- .../apache/poi/hssf/data/42464-ExpPtg-bad.xls | Bin 141824 -> 0 bytes .../apache/poi/hssf/data/42464-ExpPtg-ok.xls | Bin 143872 -> 0 bytes .../formula/eval/GenericFormulaTestCase.java | 147 -------- .../record/formula/eval/TestEverything.java | 59 ---- .../eval/TestFormulasFromSpreadsheet.java | 329 ++++++++++++++++++ .../formula/eval/TestUnaryPlusEval.java | 61 ++++ .../AllIndividualFunctionEvaluationTests.java | 3 + .../functions/NumericFunctionInvoker.java | 34 +- .../formula/functions/TestEverything.java | 48 --- .../record/formula/functions/TestMatch.java | 184 ++++++++++ .../formula/functions/TestRoundFuncs.java | 49 +++ .../formula/functions/TestSumproduct.java | 120 +++++++ .../record/formula/functions/TestTFunc.java | 118 +++++++ .../poi/hssf/data/FormulaEvalTestData.xls | Bin 130048 -> 134656 bytes .../poi/hssf/data/TestDataValidation.xls | Bin 134656 -> 21504 bytes .../poi/hssf/model/TestFormulaParser.java | 27 +- 31 files changed, 1755 insertions(+), 510 deletions(-) delete mode 100644 src/scratchpad/testcases/org/apache/poi/hssf/data/42464-ExpPtg-bad.xls delete mode 100644 src/scratchpad/testcases/org/apache/poi/hssf/data/42464-ExpPtg-ok.xls delete mode 100644 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java delete mode 100644 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestEverything.java create mode 100644 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestFormulasFromSpreadsheet.java create mode 100755 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java delete mode 100644 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestEverything.java create mode 100755 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java create mode 100755 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java create mode 100755 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java create mode 100755 src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 34345df5d0..26de01f977 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -36,6 +36,7 @@ + 44364 - Support for Match, NA and SumProduct functions, as well as initial function error support 44375 - Cope with a broken dictionary in Document Summary Information stream. RuntimeExceptions that occured when trying to read bogus data are now caught. Dictionary entries up to but not including the bogus one are preserved, the rest is ignored. 38641 - Handle timezones better with cell.setCellValue(Calendar), so now 20:00-03:00, 20:00+00:00 and 20:00+03:00 will all be recorded as 20:00, and not 17:00 / 20:00 / 23:00 (pass a Date not a Calendar for old behaviour) 44373 - Have HSSFDateUtil.isADateFormat recognize more formats as being dates diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 91641b13ba..2407b58fef 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,6 +33,7 @@ + 44364 - Support for Match, NA and SumProduct functions, as well as initial function error support 44375 - Cope with a broken dictionary in Document Summary Information stream. RuntimeExceptions that occured when trying to read bogus data are now caught. Dictionary entries up to but not including the bogus one are preserved, the rest is ignored. 38641 - Handle timezones better with cell.setCellValue(Calendar), so now 20:00-03:00, 20:00+00:00 and 20:00+03:00 will all be recorded as 20:00, and not 17:00 / 20:00 / 23:00 (pass a Date not a Calendar for old behaviour) 44373 - Have HSSFDateUtil.isADateFormat recognize more formats as being dates diff --git a/src/java/org/apache/poi/hssf/model/FormulaParser.java b/src/java/org/apache/poi/hssf/model/FormulaParser.java index 832dbdef7a..1d78b1b239 100644 --- a/src/java/org/apache/poi/hssf/model/FormulaParser.java +++ b/src/java/org/apache/poi/hssf/model/FormulaParser.java @@ -947,20 +947,28 @@ end; // Excel allows to have AttrPtg at position 0 (such as Blanks) which // do not have any operands. Skip them. - stack.push(ptgs[0].toFormulaString(book)); + int i; + if(ptgs[0] instanceof AttrPtg) { + // TODO -this requirement is unclear and is not addressed by any junits + stack.push(ptgs[0].toFormulaString(book)); + i=1; + } else { + i=0; + } - for (int i = 1; i < ptgs.length; i++) { - if (! (ptgs[i] instanceof OperationPtg)) { - stack.push(ptgs[i].toFormulaString(book)); + for ( ; i < ptgs.length; i++) { + Ptg ptg = ptgs[i]; + if (! (ptg instanceof OperationPtg)) { + stack.push(ptg.toFormulaString(book)); continue; } - if (ptgs[i] instanceof AttrPtg && ((AttrPtg) ptgs[i]).isOptimizedIf()) { - ifptg = (AttrPtg) ptgs[i]; + if (ptg instanceof AttrPtg && ((AttrPtg) ptg).isOptimizedIf()) { + ifptg = (AttrPtg) ptg; continue; } - final OperationPtg o = (OperationPtg) ptgs[i]; + final OperationPtg o = (OperationPtg) ptg; final String[] operands = new String[o.getNumberOfOperands()]; for (int j = operands.length; j > 0; j--) { diff --git a/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java b/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java index 410364971c..1123fc803a 100644 --- a/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java @@ -62,6 +62,10 @@ public class FuncPtg extends AbstractFunctionPtg{ numParams=0; } + } + public FuncPtg(int functionIndex, int numberOfParameters) { + field_2_fnc_index = (short) functionIndex; + numParams = numberOfParameters; } public void writeBytes(byte[] array, int offset) { diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/BoolEval.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/BoolEval.java index 6a04068b76..7b625aaa98 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/BoolEval.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/BoolEval.java @@ -34,6 +34,16 @@ public class BoolEval implements NumericValueEval, StringValueEval { public static final BoolEval FALSE = new BoolEval(false); public static final BoolEval TRUE = new BoolEval(true); + + /** + * Convenience method for the following:
+ * (b ? BoolEval.TRUE : BoolEval.FALSE) + * @return a BoolEval instance representing b. + */ + public static final BoolEval valueOf(boolean b) { + // TODO - find / replace all occurrences + return b ? TRUE : FALSE; + } public BoolEval(Ptg ptg) { this.value = ((BoolPtg) ptg).getValue(); @@ -48,10 +58,17 @@ public class BoolEval implements NumericValueEval, StringValueEval { } public double getNumberValue() { - return value ? (short) 1 : (short) 0; + return value ? 1 : 0; } public String getStringValue() { return value ? "TRUE" : "FALSE"; } + public String toString() { + StringBuffer sb = new StringBuffer(64); + sb.append(getClass().getName()).append(" ["); + sb.append(getStringValue()); + sb.append("]"); + return sb.toString(); + } } diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/ErrorEval.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/ErrorEval.java index 43ef6c5127..f57976d3ed 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/ErrorEval.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/ErrorEval.java @@ -24,31 +24,91 @@ package org.apache.poi.hssf.record.formula.eval; * @author Amol S. Deshmukh < amolweb at ya hoo dot com > * */ -public class ErrorEval implements ValueEval { - - private int errorCode; - - - public static final ErrorEval NAME_INVALID = new ErrorEval(525); +public final class ErrorEval implements ValueEval { + /** + * Contains raw Excel error codes (as defined in OOO's excelfileformat.pdf (2.5.6) + */ + private static final class ErrorCode { + /** #NULL! - Intersection of two cell ranges is empty */ + public static final int NULL = 0x00; + /** #DIV/0! - Division by zero */ + public static final int DIV_0 = 0x07; + /** #VALUE! - Wrong type of operand */ + public static final int VALUE = 0x0F; + /** #REF! - Illegal or deleted cell reference */ + public static final int REF = 0x17; + /** #NAME? - Wrong function or range name */ + public static final int NAME = 0x1D; + /** #NUM! - Value range overflow */ + public static final int NUM = 0x24; + /** #N/A - Argument or function not available */ + public static final int N_A = 0x2A; + + public static final String getText(int errorCode) { + switch(errorCode) { + case NULL: return "#NULL!"; + case DIV_0: return "#DIV/0!"; + case VALUE: return "#VALUE!"; + case REF: return "#REF!"; + case NAME: return "#NAME?"; + case NUM: return "#NUM!"; + case N_A: return "#N/A"; + } + return "???"; + } + } - public static final ErrorEval VALUE_INVALID = new ErrorEval(519); + /** #NULL! - Intersection of two cell ranges is empty */ + public static final ErrorEval NULL_INTERSECTION = new ErrorEval(ErrorCode.NULL); + /** #DIV/0! - Division by zero */ + public static final ErrorEval DIV_ZERO = new ErrorEval(ErrorCode.DIV_0); + /** #VALUE! - Wrong type of operand */ + public static final ErrorEval VALUE_INVALID = new ErrorEval(ErrorCode.VALUE); + /** #REF! - Illegal or deleted cell reference */ + public static final ErrorEval REF_INVALID = new ErrorEval(ErrorCode.REF); + /** #NAME? - Wrong function or range name */ + public static final ErrorEval NAME_INVALID = new ErrorEval(ErrorCode.NAME); + /** #NUM! - Value range overflow */ + public static final ErrorEval NUM_ERROR = new ErrorEval(ErrorCode.NUM); + /** #N/A - Argument or function not available */ + public static final ErrorEval NA = new ErrorEval(ErrorCode.N_A); - // Non std error codes + /** + * Translates an Excel internal error code into the corresponding POI ErrorEval instance + * @param errorCode + */ + public static ErrorEval valueOf(int errorCode) { + switch(errorCode) { + case ErrorCode.NULL: return NULL_INTERSECTION; + case ErrorCode.DIV_0: return DIV_ZERO; + case ErrorCode.VALUE: return VALUE_INVALID; +// case ErrorCode.REF: return REF_INVALID; + case ErrorCode.REF: return UNKNOWN_ERROR; + case ErrorCode.NAME: return NAME_INVALID; + case ErrorCode.NUM: return NUM_ERROR; + case ErrorCode.N_A: return NA; + + // these cases probably shouldn't be coming through here + // but (as of Jan-2008) a lot of code depends on it. +// case -20: return UNKNOWN_ERROR; +// case -30: return FUNCTION_NOT_IMPLEMENTED; +// case -60: return CIRCULAR_REF_ERROR; + } + throw new RuntimeException("Unexpected error code (" + errorCode + ")"); + } + + // POI internal error codes public static final ErrorEval UNKNOWN_ERROR = new ErrorEval(-20); - public static final ErrorEval FUNCTION_NOT_IMPLEMENTED = new ErrorEval(-30); + // Note - Excel does not seem to represent this condition with an error code + public static final ErrorEval CIRCULAR_REF_ERROR = new ErrorEval(-60); - public static final ErrorEval REF_INVALID = new ErrorEval(-40); - - public static final ErrorEval NA = new ErrorEval(-50); - - public static final ErrorEval CIRCULAR_REF_ERROR = new ErrorEval(-60); - - public static final ErrorEval DIV_ZERO = new ErrorEval(-70); - - public static final ErrorEval NUM_ERROR = new ErrorEval(-80); + private int errorCode; + /** + * @param errorCode an 8-bit value + */ private ErrorEval(int errorCode) { this.errorCode = errorCode; } @@ -56,9 +116,11 @@ public class ErrorEval implements ValueEval { public int getErrorCode() { return errorCode; } - - public String getStringValue() { - return "Err:" + Integer.toString(errorCode); + public String toString() { + StringBuffer sb = new StringBuffer(64); + sb.append(getClass().getName()).append(" ["); + sb.append(ErrorCode.getText(errorCode)); + sb.append("]"); + return sb.toString(); } - } diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/UnaryPlusEval.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/UnaryPlusEval.java index 847aa56fa6..7816b228f7 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/UnaryPlusEval.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/eval/UnaryPlusEval.java @@ -58,6 +58,9 @@ public class UnaryPlusEval implements OperationEval /*extends NumericOperationEv // )); + /** + * called by reflection + */ public UnaryPlusEval(Ptg ptg) { this.delegate = (UnaryPlusPtg) ptg; } @@ -108,7 +111,7 @@ public class UnaryPlusEval implements OperationEval /*extends NumericOperationEv } else if (ae.isColumn()) { if (ae.containsRow(srcRow)) { - ValueEval ve = ae.getValueAt(ae.getFirstRow(), srcCol); + ValueEval ve = ae.getValueAt(srcRow, ae.getFirstColumn()); if (ve instanceof RefEval) { ve = ((RefEval) ve).getInnerValueEval(); } diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Match.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Match.java index 74afaf695c..b2b252c4f0 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Match.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/Match.java @@ -14,12 +14,300 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* - * Created on May 15, 2005 - * - */ + package org.apache.poi.hssf.record.formula.functions; -public class Match extends NotImplementedFunction { +import org.apache.poi.hssf.record.formula.eval.AreaEval; +import org.apache.poi.hssf.record.formula.eval.BoolEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.NumericValueEval; +import org.apache.poi.hssf.record.formula.eval.RefEval; +import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; +import org.apache.poi.hssf.util.AreaReference; + +/** + * Implementation for the MATCH() Excel function.

+ * + * Syntax:
+ * MATCH(lookup_value, lookup_array, match_type)

+ * + * Returns a 1-based index specifying at what position in the lookup_array the specified + * lookup_value is found.

+ * + * Specific matching behaviour can be modified with the optional match_type parameter. + * + * + * + * + * + * + *
ValueMatching Behaviour
1(default) find the largest value that is less than or equal to lookup_value. + * The lookup_array must be in ascending order*.
0find the first value that is exactly equal to lookup_value. + * The lookup_array can be in any order.
-1find the smallest value that is greater than or equal to lookup_value. + * The lookup_array must be in descending order*.
+ * + * * Note regarding order - For the match_type cases that require the lookup_array to + * be ordered, MATCH() can produce incorrect results if this requirement is not met. Observed + * behaviour in Excel is to return the lowest index value for which every item after that index + * breaks the match rule.
+ * The (ascending) sort order expected by MATCH() is:
+ * numbers (low to high), strings (A to Z), boolean (FALSE to TRUE)
+ * MATCH() ignores all elements in the lookup_array with a different type to the lookup_value. + * Type conversion of the lookup_array elements is never performed. + * + * + * @author Josh Micich + */ +public final class Match implements Function { + + private static final class EvalEx extends Exception { + private final ErrorEval _error; + + public EvalEx(ErrorEval error) { + _error = error; + } + public ErrorEval getError() { + return _error; + } + } + + + public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + + double match_type = 1; // default + + switch(args.length) { + case 3: + try { + match_type = evaluateMatchTypeArg(args[2], srcCellRow, srcCellCol); + } catch (EvalEx e) { + // Excel/MATCH() seems to have slightly abnormal handling of errors with + // the last parameter. Errors do not propagate up. Every error gets + // translated into #REF! + return ErrorEval.REF_INVALID; + } + case 2: + break; + default: + return ErrorEval.VALUE_INVALID; + } + + boolean matchExact = match_type == 0; + // Note - Excel does not strictly require -1 and +1 + boolean findLargestLessThanOrEqual = match_type > 0; + + + try { + ValueEval lookupValue = evaluateLookupValue(args[0], srcCellRow, srcCellCol); + ValueEval[] lookupRange = evaluateLookupRange(args[1]); + int index = findIndexOfValue(lookupValue, lookupRange, matchExact, findLargestLessThanOrEqual); + return new NumberEval(index + 1); // +1 to convert to 1-based + } catch (EvalEx e) { + return e.getError(); + } + } + + private static ValueEval chooseSingleElementFromArea(AreaEval ae, + int srcCellRow, short srcCellCol) throws EvalEx { + if (ae.isColumn()) { + if(ae.isRow()) { + return ae.getValues()[0]; + } + if(!ae.containsRow(srcCellRow)) { + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + return ae.getValueAt(srcCellRow, ae.getFirstColumn()); + } + if(!ae.isRow()) { + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + if(!ae.containsColumn(srcCellCol)) { + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + return ae.getValueAt(ae.getFirstRow(), srcCellCol); + + } + + private static ValueEval evaluateLookupValue(Eval eval, int srcCellRow, short srcCellCol) + throws EvalEx { + if (eval instanceof RefEval) { + RefEval re = (RefEval) eval; + return re.getInnerValueEval(); + } + if (eval instanceof AreaEval) { + return chooseSingleElementFromArea((AreaEval) eval, srcCellRow, srcCellCol); + } + if (eval instanceof ValueEval) { + return (ValueEval) eval; + } + throw new RuntimeException("Unexpected eval type (" + eval.getClass().getName() + ")"); + } + + + private static ValueEval[] evaluateLookupRange(Eval eval) throws EvalEx { + if (eval instanceof RefEval) { + RefEval re = (RefEval) eval; + return new ValueEval[] { re.getInnerValueEval(), }; + } + if (eval instanceof AreaEval) { + AreaEval ae = (AreaEval) eval; + if(!ae.isColumn() && !ae.isRow()) { + throw new EvalEx(ErrorEval.NA); + } + return ae.getValues(); + } + + // Error handling for lookup_range arg is also unusual + if(eval instanceof NumericValueEval) { + throw new EvalEx(ErrorEval.NA); + } + if (eval instanceof StringEval) { + StringEval se = (StringEval) eval; + Double d = parseDouble(se.getStringValue()); + if(d == null) { + // plain string + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + // else looks like a number + throw new EvalEx(ErrorEval.NA); + } + throw new RuntimeException("Unexpected eval type (" + eval.getClass().getName() + ")"); + } + + + private static Double parseDouble(String stringValue) { + // TODO find better home for parseDouble + return Countif.parseDouble(stringValue); + } + + + + private static double evaluateMatchTypeArg(Eval arg, int srcCellRow, short srcCellCol) + throws EvalEx { + Eval match_type = arg; + if(arg instanceof AreaReference) { + AreaEval ae = (AreaEval) arg; + // an area ref can work as a scalar value if it is 1x1 + if(ae.isColumn() && ae.isRow()) { + match_type = ae.getValues()[0]; + } else { + match_type = chooseSingleElementFromArea(ae, srcCellRow, srcCellCol); + } + } + + if(match_type instanceof RefEval) { + RefEval re = (RefEval) match_type; + match_type = re.getInnerValueEval(); + } + if(match_type instanceof ErrorEval) { + throw new EvalEx((ErrorEval)match_type); + } + if(match_type instanceof NumericValueEval) { + NumericValueEval ne = (NumericValueEval) match_type; + return ne.getNumberValue(); + } + if (match_type instanceof StringEval) { + StringEval se = (StringEval) match_type; + Double d = parseDouble(se.getStringValue()); + if(d == null) { + // plain string + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + // if the string parses as a number, it is ok + return d.doubleValue(); + } + throw new RuntimeException("Unexpected match_type type (" + match_type.getClass().getName() + ")"); + } + + /** + * @return zero based index + */ + private static int findIndexOfValue(ValueEval lookupValue, ValueEval[] lookupRange, + boolean matchExact, boolean findLargestLessThanOrEqual) throws EvalEx { + // TODO - wildcard matching when matchExact and lookupValue is text containing * or ? + if(matchExact) { + for (int i = 0; i < lookupRange.length; i++) { + ValueEval lri = lookupRange[i]; + if(lri.getClass() != lookupValue.getClass()) { + continue; + } + if(compareValues(lookupValue, lri) == 0) { + return i; + } + } + } else { + // Note - backward iteration + if(findLargestLessThanOrEqual) { + for (int i = lookupRange.length - 1; i>=0; i--) { + ValueEval lri = lookupRange[i]; + if(lri.getClass() != lookupValue.getClass()) { + continue; + } + int cmp = compareValues(lookupValue, lri); + if(cmp == 0) { + return i; + } + if(cmp > 0) { + return i; + } + } + } else { + // find smallest greater than or equal to + for (int i = 0; i 0) { + if(i<1) { + throw new EvalEx(ErrorEval.NA); + } + return i-1; + } + } + + } + } + + throw new EvalEx(ErrorEval.NA); + } + + /** + * This method can only compare a pair of NumericValueEvals, StringEvals + * or BoolEvals + * @return negative for a<b, positive for a>b and 0 for a = b + */ + private static int compareValues(ValueEval a, ValueEval b) { + if (a instanceof StringEval) { + StringEval sa = (StringEval) a; + StringEval sb = (StringEval) b; + return sa.getStringValue().compareToIgnoreCase(sb.getStringValue()); + } + if (a instanceof NumericValueEval) { + NumericValueEval na = (NumericValueEval) a; + NumericValueEval nb = (NumericValueEval) b; + return Double.compare(na.getNumberValue(), nb.getNumberValue()); + } + if (a instanceof BoolEval) { + boolean ba = ((BoolEval) a).getBooleanValue(); + boolean bb = ((BoolEval) b).getBooleanValue(); + if(ba == bb) { + return 0; + } + // TRUE > FALSE + if(ba) { + return +1; + } + return -1; + } + throw new RuntimeException("bad eval type (" + a.getClass().getName() + ")"); + } } diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java index 2840c89883..f7dc60fea7 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java @@ -14,10 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* - * Created on May 22, 2005 - * - */ + package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.AreaEval; @@ -36,6 +33,49 @@ import org.apache.poi.hssf.record.formula.eval.ValueEvalToNumericXlator; * where the order of operands does not matter */ public abstract class MultiOperandNumericFunction extends NumericFunction { + static final double[] EMPTY_DOUBLE_ARRAY = { }; + + private static class DoubleList { + private double[] _array; + private int _count; + + public DoubleList() { + _array = new double[8]; + _count = 0; + } + + public double[] toArray() { + if(_count < 1) { + return EMPTY_DOUBLE_ARRAY; + } + double[] result = new double[_count]; + System.arraycopy(_array, 0, result, 0, _count); + return result; + } + + public void add(double[] values) { + int addLen = values.length; + ensureCapacity(_count + addLen); + System.arraycopy(values, 0, _array, _count, addLen); + _count += addLen; + } + + private void ensureCapacity(int reqSize) { + if(reqSize > _array.length) { + int newSize = reqSize * 3 / 2; // grow with 50% extra + double[] newArr = new double[newSize]; + System.arraycopy(_array, 0, newArr, 0, _count); + _array = newArr; + } + } + + public void add(double value) { + ensureCapacity(_count + 1); + _array[_count] = value; + _count++; + } + } + private static final ValueEvalToNumericXlator DEFAULT_NUM_XLATOR = new ValueEvalToNumericXlator((short) ( @@ -76,40 +116,26 @@ public abstract class MultiOperandNumericFunction extends NumericFunction { * from among the list of operands. Blanks and Blank equivalent cells * are ignored. Error operands or cells containing operands of type * that are considered invalid and would result in #VALUE! error in - * excel cause this function to return null. + * excel cause this function to return null. * * @param operands * @param srcRow * @param srcCol */ protected double[] getNumberArray(Eval[] operands, int srcRow, short srcCol) { - double[] retval = new double[30]; - int count = 0; + if (operands.length > getMaxNumOperands()) { + return null; + } + DoubleList retval = new DoubleList(); - outer: do { // goto simulator loop - if (operands.length > getMaxNumOperands()) { - break outer; + for (int i=0, iSize=operands.length; i indicate to calling subclass that error occurred - break; + return null; // indicate to calling subclass that error occurred } } + return retval.toArray(); } - else { // for ValueEvals other than AreaEval - retval = new double[1]; - ValueEval ve = singleOperandEvaluate(operand, srcRow, srcCol); - - if (ve instanceof NumericValueEval) { - NumericValueEval nve = (NumericValueEval) ve; - retval = putInArray(retval, count++, nve.getNumberValue()); - } - else if (ve instanceof BlankEval) {} // ignore operand - else { - retval = null; // null => indicate to calling subclass that error occurred - } - } - if (retval != null && retval.length >= 1) { - double[] temp = retval; - retval = new double[count]; - System.arraycopy(temp, 0, retval, 0, count); + // for ValueEvals other than AreaEval + ValueEval ve = singleOperandEvaluate(operand, srcRow, srcCol); + + if (ve instanceof NumericValueEval) { + NumericValueEval nve = (NumericValueEval) ve; + return new double[] { nve.getNumberValue(), }; } - return retval; + if (ve instanceof BlankEval) { + // ignore blanks + return EMPTY_DOUBLE_ARRAY; + } + return null; } /** - * puts d at position pos in array arr. If pos is greater than arr, the - * array is dynamically resized (using a simple doubling rule). - * @param arr - * @param pos - * @param d + * Ensures that a two dimensional array has all sub-arrays present and the same length + * @return false if any sub-array is missing, or is of different length */ - private static double[] putInArray(double[] arr, int pos, double d) { - double[] tarr = arr; - while (pos >= arr.length) { - arr = new double[arr.length << 1]; - } - if (tarr.length != arr.length) { - System.arraycopy(tarr, 0, arr, 0, tarr.length); - } - arr[pos] = d; - return arr; - } - - private static double[] putInArray(double[] arr, int pos, double[] d) { - double[] tarr = arr; - while (pos+d.length >= arr.length) { - arr = new double[arr.length << 1]; + protected static final boolean areSubArraysConsistent(double[][] values) { + + if (values == null || values.length < 1) { + // TODO this doesn't seem right. Fix or add comment. + return true; } - if (tarr.length != arr.length) { - System.arraycopy(tarr, 0, arr, 0, tarr.length); + + if (values[0] == null) { + return false; } - for (int i=0, iSize=d.length; i 0) { - if (values[0] == null) - break outer; - int len = values[0].length; - for (int i=1, iSize=values.length; i + * + * Syntax :
+ * SUMPRODUCT ( array1[, array2[, array3[, ...]]]) + * + * + *
array1, ... arrayN  typically area references, + * possibly cell references or scalar values

+ * + * Let An(i,j) represent the element in the ith row jth column + * of the nth array
+ * Assuming each array has the same dimensions (W, H), the result is defined as:
+ * SUMPRODUCT = Σi: 1..H   + * (  Σj: 1..W   + * (  Πn: 1..N + * An(i,j)  + * )  + * ) + * + * @author Josh Micich */ -public class Sumproduct extends NotImplementedFunction { +public final class Sumproduct implements Function { + + private static final class EvalEx extends Exception { + private final ErrorEval _error; + + public EvalEx(ErrorEval error) { + _error = error; + } + public ErrorEval getError() { + return _error; + } + } + + public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + + int maxN = args.length; + + if(maxN < 1) { + return ErrorEval.VALUE_INVALID; + } + Eval firstArg = args[0]; + try { + if(firstArg instanceof NumericValueEval) { + return evaluateSingleProduct(args); + } + if(firstArg instanceof RefEval) { + return evaluateSingleProduct(args); + } + if(firstArg instanceof AreaEval) { + AreaEval ae = (AreaEval) firstArg; + if(ae.isRow() && ae.isColumn()) { + return evaluateSingleProduct(args); + } + return evaluateAreaSumProduct(args); + } + } catch (EvalEx e) { + return e.getError(); + } + throw new RuntimeException("Invalid arg type for SUMPRODUCT: (" + + firstArg.getClass().getName() + ")"); + } + + private Eval evaluateSingleProduct(Eval[] evalArgs) throws EvalEx { + int maxN = evalArgs.length; + + double term = 1D; + for(int n=0; ndouble value for the specified ValueEval. + * @param isScalarProduct false for SUMPRODUCTs over area refs. + * @throws EvalEx if ve represents an error value. + *

+ * Note - string values and empty cells are interpreted differently depending on + * isScalarProduct. For scalar products, if any term is blank or a string, the + * error (#VALUE!) is raised. For area (sum)products, if any term is blank or a string, the + * result is zero. + */ + private static double getProductTerm(ValueEval ve, boolean isScalarProduct) throws EvalEx { + + if(ve instanceof BlankEval || ve == null) { + // TODO - shouldn't BlankEval.INSTANCE be used always instead of null? + // null seems to occur when the blank cell is part of an area ref (but not reliably) + if(isScalarProduct) { + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + return 0; + } + + if(ve instanceof ErrorEval) { + throw new EvalEx((ErrorEval)ve); + } + if(ve instanceof StringEval) { + if(isScalarProduct) { + throw new EvalEx(ErrorEval.VALUE_INVALID); + } + // Note for area SUMPRODUCTs, string values are interpreted as zero + // even if they would parse as valid numeric values + return 0; + } + if(ve instanceof NumericValueEval) { + NumericValueEval nve = (NumericValueEval) ve; + return nve.getNumberValue(); + } + throw new RuntimeException("Unexpected value eval class (" + + ve.getClass().getName() + ")"); + } } diff --git a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/T.java b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/T.java index 686c40b627..b322cd985c 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/T.java +++ b/src/scratchpad/src/org/apache/poi/hssf/record/formula/functions/T.java @@ -22,28 +22,34 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.StringEval; -import org.apache.poi.hssf.record.formula.eval.ValueEval; -public class T implements Function { - - +public final class T implements Function { - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { - ValueEval retval = null; - switch (operands.length) { - default: - retval = ErrorEval.VALUE_INVALID; - break; - case 1: - if (operands[0] instanceof StringEval - || operands[0] instanceof ErrorEval) { - retval = (ValueEval) operands[0]; - } - else if (operands[0] instanceof ErrorEval) { - retval = StringEval.EMPTY_INSTANCE; - } + public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + switch (args.length) { + default: + return ErrorEval.VALUE_INVALID; + case 1: + break; } - return retval; + Eval arg = args[0]; + if (arg instanceof RefEval) { + RefEval re = (RefEval) arg; + arg = re.getInnerValueEval(); + } + + if (arg instanceof StringEval) { + // Text values are returned unmodified + return arg; + } + + if (arg instanceof ErrorEval) { + // Error values also returned unmodified + return arg; + } + // for all other argument types the result is empty string + return StringEval.EMPTY_INSTANCE; } } diff --git a/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java b/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java index f60a6adaac..70b78dfae4 100644 --- a/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java +++ b/src/scratchpad/src/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.java @@ -173,7 +173,7 @@ public class HSSFFormulaEvaluator { * formula evaluated. */ public static FormulaParser getUnderlyingParser(HSSFWorkbook workbook, String formula) { - return new FormulaParser(formula, workbook.getWorkbook()); + return new FormulaParser(formula, workbook.getWorkbook()); } /** @@ -286,19 +286,19 @@ public class HSSFFormulaEvaluator { CellValue cv = getCellValueForEval(internalEvaluate(cell, row, sheet, workbook)); switch (cv.getCellType()) { case HSSFCell.CELL_TYPE_BOOLEAN: - cell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN); + cell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN); cell.setCellValue(cv.getBooleanValue()); break; case HSSFCell.CELL_TYPE_ERROR: - cell.setCellType(HSSFCell.CELL_TYPE_ERROR); + cell.setCellType(HSSFCell.CELL_TYPE_ERROR); cell.setCellValue(cv.getErrorValue()); break; case HSSFCell.CELL_TYPE_NUMERIC: - cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); + cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); cell.setCellValue(cv.getNumberValue()); break; case HSSFCell.CELL_TYPE_STRING: - cell.setCellType(HSSFCell.CELL_TYPE_STRING); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(cv.getRichTextStringValue()); break; case HSSFCell.CELL_TYPE_BLANK: @@ -337,6 +337,11 @@ public class HSSFFormulaEvaluator { else if (eval instanceof BlankEval) { retval = new CellValue(HSSFCell.CELL_TYPE_BLANK); } + else if (eval instanceof ErrorEval) { + retval = new CellValue(HSSFCell.CELL_TYPE_ERROR); + retval.setErrorValue((byte)((ErrorEval)eval).getErrorCode()); +// retval.setRichTextStringValue(new HSSFRichTextString("#An error occurred. check cell.getErrorCode()")); + } else { retval = new CellValue(HSSFCell.CELL_TYPE_ERROR); } @@ -401,7 +406,7 @@ public class HSSFFormulaEvaluator { short rownum = ptg.getRow(); HSSFRow row = sheet.getRow(rownum); HSSFCell cell = (row != null) ? row.getCell(colnum) : null; - pushRef2DEval(ptg, stack, cell, row, sheet, workbook); + stack.push(createRef2DEval(ptg, cell, row, sheet, workbook)); } else if (ptgs[i] instanceof Ref3DPtg) { Ref3DPtg ptg = (Ref3DPtg) ptgs[i]; @@ -411,7 +416,7 @@ public class HSSFFormulaEvaluator { HSSFSheet xsheet = workbook.getSheetAt(wb.getSheetIndexFromExternSheetIndex(ptg.getExternSheetIndex())); HSSFRow row = xsheet.getRow(rownum); HSSFCell cell = (row != null) ? row.getCell(colnum) : null; - pushRef3DEval(ptg, stack, cell, row, xsheet, workbook); + stack.push(createRef3DEval(ptg, cell, row, xsheet, workbook)); } else if (ptgs[i] instanceof AreaPtg) { AreaPtg ap = (AreaPtg) ptgs[i]; @@ -544,104 +549,77 @@ public class HSSFFormulaEvaluator { * @param workbook */ protected static ValueEval getEvalForCell(HSSFCell cell, HSSFRow row, HSSFSheet sheet, HSSFWorkbook workbook) { - ValueEval retval = BlankEval.INSTANCE; - if (cell != null) { - switch (cell.getCellType()) { + + if (cell == null) { + return BlankEval.INSTANCE; + } + switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: - retval = new NumberEval(cell.getNumericCellValue()); - break; + return new NumberEval(cell.getNumericCellValue()); case HSSFCell.CELL_TYPE_STRING: - retval = new StringEval(cell.getRichStringCellValue().getString()); - break; + return new StringEval(cell.getRichStringCellValue().getString()); case HSSFCell.CELL_TYPE_FORMULA: - retval = internalEvaluate(cell, row, sheet, workbook); - break; + return internalEvaluate(cell, row, sheet, workbook); case HSSFCell.CELL_TYPE_BOOLEAN: - retval = cell.getBooleanCellValue() ? BoolEval.TRUE : BoolEval.FALSE; - break; + return BoolEval.valueOf(cell.getBooleanCellValue()); case HSSFCell.CELL_TYPE_BLANK: - retval = BlankEval.INSTANCE; - break; + return BlankEval.INSTANCE; case HSSFCell.CELL_TYPE_ERROR: - retval = ErrorEval.UNKNOWN_ERROR; // TODO: think about this... - break; - } + return ErrorEval.valueOf(cell.getErrorCellValue()); } - return retval; + throw new RuntimeException("Unexpected cell type (" + cell.getCellType() + ")"); } /** - * create a Ref2DEval for ReferencePtg and push it on the stack. + * Creates a Ref2DEval for ReferencePtg. * Non existent cells are treated as RefEvals containing BlankEval. - * @param ptg - * @param stack - * @param cell - * @param sheet - * @param workbook */ - protected static void pushRef2DEval(ReferencePtg ptg, Stack stack, - HSSFCell cell, HSSFRow row, HSSFSheet sheet, HSSFWorkbook workbook) { - if (cell != null) - switch (cell.getCellType()) { + private static Ref2DEval createRef2DEval(ReferencePtg ptg, HSSFCell cell, + HSSFRow row, HSSFSheet sheet, HSSFWorkbook workbook) { + if (cell == null) { + return new Ref2DEval(ptg, BlankEval.INSTANCE, false); + } + + switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: - stack.push(new Ref2DEval(ptg, new NumberEval(cell.getNumericCellValue()), false)); - break; + return new Ref2DEval(ptg, new NumberEval(cell.getNumericCellValue()), false); case HSSFCell.CELL_TYPE_STRING: - stack.push(new Ref2DEval(ptg, new StringEval(cell.getRichStringCellValue().getString()), false)); - break; + return new Ref2DEval(ptg, new StringEval(cell.getRichStringCellValue().getString()), false); case HSSFCell.CELL_TYPE_FORMULA: - stack.push(new Ref2DEval(ptg, internalEvaluate(cell, row, sheet, workbook), true)); - break; + return new Ref2DEval(ptg, internalEvaluate(cell, row, sheet, workbook), true); case HSSFCell.CELL_TYPE_BOOLEAN: - stack.push(new Ref2DEval(ptg, cell.getBooleanCellValue() ? BoolEval.TRUE : BoolEval.FALSE, false)); - break; + return new Ref2DEval(ptg, BoolEval.valueOf(cell.getBooleanCellValue()), false); case HSSFCell.CELL_TYPE_BLANK: - stack.push(new Ref2DEval(ptg, BlankEval.INSTANCE, false)); - break; + return new Ref2DEval(ptg, BlankEval.INSTANCE, false); case HSSFCell.CELL_TYPE_ERROR: - stack.push(new Ref2DEval(ptg, ErrorEval.UNKNOWN_ERROR, false)); // TODO: think abt this - break; - } - else { - stack.push(new Ref2DEval(ptg, BlankEval.INSTANCE, false)); + return new Ref2DEval(ptg, ErrorEval.valueOf(cell.getErrorCellValue()), false); } + throw new RuntimeException("Unexpected cell type (" + cell.getCellType() + ")"); } /** - * create a Ref3DEval for Ref3DPtg and push it on the stack. - * - * @param ptg - * @param stack - * @param cell - * @param sheet - * @param workbook + * create a Ref3DEval for Ref3DPtg. */ - protected static void pushRef3DEval(Ref3DPtg ptg, Stack stack, HSSFCell cell, + private static Ref3DEval createRef3DEval(Ref3DPtg ptg, HSSFCell cell, HSSFRow row, HSSFSheet sheet, HSSFWorkbook workbook) { - if (cell != null) - switch (cell.getCellType()) { + if (cell == null) { + return new Ref3DEval(ptg, BlankEval.INSTANCE, false); + } + switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: - stack.push(new Ref3DEval(ptg, new NumberEval(cell.getNumericCellValue()), false)); - break; + return new Ref3DEval(ptg, new NumberEval(cell.getNumericCellValue()), false); case HSSFCell.CELL_TYPE_STRING: - stack.push(new Ref3DEval(ptg, new StringEval(cell.getRichStringCellValue().getString()), false)); - break; + return new Ref3DEval(ptg, new StringEval(cell.getRichStringCellValue().getString()), false); case HSSFCell.CELL_TYPE_FORMULA: - stack.push(new Ref3DEval(ptg, internalEvaluate(cell, row, sheet, workbook), true)); - break; + return new Ref3DEval(ptg, internalEvaluate(cell, row, sheet, workbook), true); case HSSFCell.CELL_TYPE_BOOLEAN: - stack.push(new Ref3DEval(ptg, cell.getBooleanCellValue() ? BoolEval.TRUE : BoolEval.FALSE, false)); - break; + return new Ref3DEval(ptg, BoolEval.valueOf(cell.getBooleanCellValue()), false); case HSSFCell.CELL_TYPE_BLANK: - stack.push(new Ref3DEval(ptg, BlankEval.INSTANCE, false)); - break; + return new Ref3DEval(ptg, BlankEval.INSTANCE, false); case HSSFCell.CELL_TYPE_ERROR: - stack.push(new Ref3DEval(ptg, ErrorEval.UNKNOWN_ERROR, false)); // TODO: think abt this - break; - } - else { - stack.push(new Ref3DEval(ptg, BlankEval.INSTANCE, false)); + return new Ref3DEval(ptg, ErrorEval.valueOf(cell.getErrorCellValue()), false); } + throw new RuntimeException("Unexpected cell type (" + cell.getCellType() + ")"); } /** @@ -726,15 +704,15 @@ public class HSSFFormulaEvaluator { /** * @return Returns the richTextStringValue. */ - public HSSFRichTextString getRichTextStringValue() { - return richTextStringValue; - } + public HSSFRichTextString getRichTextStringValue() { + return richTextStringValue; + } /** * @param richTextStringValue The richTextStringValue to set. */ - public void setRichTextStringValue(HSSFRichTextString richTextStringValue) { - this.richTextStringValue = richTextStringValue; - } + public void setRichTextStringValue(HSSFRichTextString richTextStringValue) { + this.richTextStringValue = richTextStringValue; + } } /** diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/data/42464-ExpPtg-bad.xls b/src/scratchpad/testcases/org/apache/poi/hssf/data/42464-ExpPtg-bad.xls deleted file mode 100644 index 54a7edb404f7d5a106a264819f5873d6fdc2cfcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141824 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 diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/data/42464-ExpPtg-ok.xls b/src/scratchpad/testcases/org/apache/poi/hssf/data/42464-ExpPtg-ok.xls deleted file mode 100644 index 5ae84bc90e26fa9914ebc887b39ea7b6fd38677a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143872 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̼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 SENDq0IR3$j^8XJUBdKiw diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java deleted file mode 100644 index b53e8ebc3a..0000000000 --- a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java +++ /dev/null @@ -1,147 +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. -*/ -/* - * Created on May 11, 2005 - * - */ -package org.apache.poi.hssf.record.formula.eval; - -import java.io.FileInputStream; - -import junit.framework.AssertionFailedError; -import junit.framework.TestCase; - -import org.apache.poi.hssf.record.formula.functions.TestMathX; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.hssf.util.CellReference; - -/** - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * - */ -public class GenericFormulaTestCase extends TestCase { - - protected final static String FILENAME = System.getProperty("HSSF.testdata.path")+ "/FormulaEvalTestData.xls"; - - protected static HSSFWorkbook workbook = null; - - protected CellReference beginCell; - protected int getBeginRow() { - return beginCell.getRow(); - } - - protected short getBeginCol() { - return beginCell.getCol(); - } - - protected final HSSFCell getExpectedValueCell(HSSFSheet sheet, HSSFRow row, HSSFCell cell) { - HSSFCell retval = null; - if (sheet != null) { - row = sheet.getRow(row.getRowNum()+1); - if (row != null) { - retval = row.getCell(cell.getCellNum()); - } - } - - return retval; - } - - protected void assertEquals(String msg, HSSFCell expected, HSSFFormulaEvaluator.CellValue actual) { - if (expected != null && actual!=null) { - if (expected!=null && expected.getCellType() == HSSFCell.CELL_TYPE_STRING) { - String value = expected.getRichStringCellValue().getString(); - if (value.startsWith("#")) { - expected.setCellType(HSSFCell.CELL_TYPE_ERROR); - } - } - if (!(expected == null || actual == null)) { - switch (expected.getCellType()) { - case HSSFCell.CELL_TYPE_BLANK: - assertEquals(msg, HSSFCell.CELL_TYPE_BLANK, actual.getCellType()); - break; - case HSSFCell.CELL_TYPE_BOOLEAN: - assertEquals(msg, HSSFCell.CELL_TYPE_BOOLEAN, actual.getCellType()); - assertEquals(msg, expected.getBooleanCellValue(), actual.getBooleanValue()); - break; - case HSSFCell.CELL_TYPE_ERROR: - assertEquals(msg, HSSFCell.CELL_TYPE_ERROR, actual.getCellType()); // TODO: check if exact error matches - break; - case HSSFCell.CELL_TYPE_FORMULA: // will never be used, since we will call method after formula evaluation - throw new AssertionFailedError("Cannot expect formula as result of formula evaluation: " + msg); - case HSSFCell.CELL_TYPE_NUMERIC: - assertEquals(msg, HSSFCell.CELL_TYPE_NUMERIC, actual.getCellType()); - TestMathX.assertEquals(msg, expected.getNumericCellValue(), actual.getNumberValue(), TestMathX.POS_ZERO, TestMathX.DIFF_TOLERANCE_FACTOR); -// double delta = Math.abs(expected.getNumericCellValue()-actual.getNumberValue()); -// double pctExpected = Math.abs(0.00001*expected.getNumericCellValue()); -// assertTrue(msg, delta <= pctExpected); - break; - case HSSFCell.CELL_TYPE_STRING: - assertEquals(msg, HSSFCell.CELL_TYPE_STRING, actual.getCellType()); - assertEquals(msg, expected.getRichStringCellValue().getString(), actual.getRichTextStringValue().getString()); - break; - } - } - else { - throw new AssertionFailedError("expected: " + expected + " got:" + actual); - } - } - } - - public GenericFormulaTestCase(String beginCell) throws Exception { - super("genericTest"); - if (workbook == null) { - FileInputStream fin = new FileInputStream( FILENAME ); - workbook = new HSSFWorkbook( fin ); - fin.close(); - } - this.beginCell = new CellReference(beginCell); - } - - public void setUp() { - } - - public void genericTest() throws Exception { - HSSFSheet s = workbook.getSheetAt( 0 ); - HSSFRow r = s.getRow(getBeginRow()); - short endcolnum = r.getLastCellNum(); - HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(s, workbook); - evaluator.setCurrentRow(r); - - HSSFCell c = null; - for (short colnum=getBeginCol(); colnum < endcolnum; colnum++) { - try { - c = r.getCell(colnum); - if (c==null || c.getCellType() != HSSFCell.CELL_TYPE_FORMULA) - continue; - - HSSFFormulaEvaluator.CellValue actualValue = evaluator.evaluate(c); - - HSSFCell expectedValueCell = getExpectedValueCell(s, r, c); - assertEquals("Formula: " + c.getCellFormula() - + " @ " + getBeginRow() + ":" + colnum, - expectedValueCell, actualValue); - } catch (RuntimeException re) { - throw new RuntimeException("CELL["+getBeginRow()+","+colnum+"]: "+re.getMessage(), re); - } - } - } - -} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestEverything.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestEverything.java deleted file mode 100644 index ac3ca2eb29..0000000000 --- a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestEverything.java +++ /dev/null @@ -1,59 +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. -*/ -/* - * Created on May 11, 2005 - * - */ -package org.apache.poi.hssf.record.formula.eval; - -import junit.framework.TestSuite; - -/** - * This is a test of all the Eval functions we have implemented. - * Add newly implemented Eval functions in here to have them - * tested. - * For newly implemented functions, - * @see org.apache.poi.hssf.record.formula.functions.TestEverything - * - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - */ -public class TestEverything extends TestSuite { - - public static TestSuite suite() throws Exception { - TestSuite suite = new TestSuite("Tests for OperationEval concrete implementation classes."); - suite.addTest(new GenericFormulaTestCase("D23")); // Add - suite.addTest(new GenericFormulaTestCase("D27")); // ConcatEval - suite.addTest(new GenericFormulaTestCase("D31")); // DivideEval - suite.addTest(new GenericFormulaTestCase("D35")); // EqualEval - suite.addTest(new GenericFormulaTestCase("D39")); // GreaterEqualEval - suite.addTest(new GenericFormulaTestCase("D43")); // GreaterThanEval - suite.addTest(new GenericFormulaTestCase("D47")); // LessEqualEval - suite.addTest(new GenericFormulaTestCase("D51")); // LessThanEval - suite.addTest(new GenericFormulaTestCase("D55")); // MultiplyEval - suite.addTest(new GenericFormulaTestCase("D59")); // NotEqualEval - suite.addTest(new GenericFormulaTestCase("D63")); // PowerEval - suite.addTest(new GenericFormulaTestCase("D67")); // SubtractEval - suite.addTest(new GenericFormulaTestCase("D71")); // UnaryMinusEval - suite.addTest(new GenericFormulaTestCase("D75")); // UnaryPlusEval - - // Add newly implemented Eval functions here - // (Formula functions go in - // @see org.apache.poi.hssf.record.formula.functions.TestEverything ) - - return suite; - } -} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestFormulasFromSpreadsheet.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestFormulasFromSpreadsheet.java new file mode 100644 index 0000000000..f57221c9b0 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestFormulasFromSpreadsheet.java @@ -0,0 +1,329 @@ +/* +* 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.poi.hssf.record.formula.eval; + +import java.io.FileInputStream; +import java.io.PrintStream; + +import junit.framework.Assert; +import junit.framework.AssertionFailedError; +import junit.framework.TestCase; + +import org.apache.poi.hssf.record.formula.functions.TestMathX; +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +/** + * Tests formulas and operators as loaded from a test data spreadsheet.

+ * This class does not test implementors of Function and OperationEval in + * isolation. Much of the evaluation engine (i.e. HSSFFormulaEvaluator, ...) gets + * exercised as well. Tests for bug fixes and specific/tricky behaviour can be found in the + * corresponding test class (TestXxxx) of the target (Xxxx) implementor, + * where execution can be observed more easily. + * + * @author Amol S. Deshmukh < amolweb at ya hoo dot com > + */ +public final class TestFormulasFromSpreadsheet extends TestCase { + + private static final class Result { + public static final int SOME_EVALUATIONS_FAILED = -1; + public static final int ALL_EVALUATIONS_SUCCEEDED = +1; + public static final int NO_EVALUATIONS_FOUND = 0; + } + + /** + * This class defines constants for navigating around the test data spreadsheet used for these tests. + */ + private static final class SS { + + /** + * Name of the test spreadsheet (found in the standard test data folder) + */ + public final static String FILENAME = "FormulaEvalTestData.xls"; + /** + * Row (zero-based) in the test spreadsheet where the operator examples start. + */ + public static final int START_OPERATORS_ROW_INDEX = 22; // Row '23' + /** + * Row (zero-based) in the test spreadsheet where the function examples start. + */ + public static final int START_FUNCTIONS_ROW_INDEX = 83; // Row '84' + /** + * Index of the column that contains the function names + */ + public static final short COLUMN_INDEX_FUNCTION_NAME = 1; // Column 'B' + + /** + * Used to indicate when there are no more functions left + */ + public static final String FUNCTION_NAMES_END_SENTINEL = ""; + + /** + * Index of the column where the test values start (for each function) + */ + public static final short COLUMN_INDEX_FIRST_TEST_VALUE = 3; // Column 'D' + + /** + * Each function takes 4 rows in the test spreadsheet + */ + public static final int NUMBER_OF_ROWS_PER_FUNCTION = 4; + } + + private HSSFWorkbook workbook; + private HSSFSheet sheet; + // Note - multiple failures are aggregated before ending. + // If one or more functions fail, a single AssertionFailedError is thrown at the end + private int _functionFailureCount; + private int _functionSuccessCount; + private int _evaluationFailureCount; + private int _evaluationSuccessCount; + + private static final HSSFCell getExpectedValueCell(HSSFRow row, short columnIndex) { + if (row == null) { + return null; + } + return row.getCell(columnIndex); + } + + + private static void confirmExpectedResult(String msg, HSSFCell expected, HSSFFormulaEvaluator.CellValue actual) { + if (expected == null) { + throw new AssertionFailedError(msg + " - Bad setup data expected value is null"); + } + if(actual == null) { + throw new AssertionFailedError(msg + " - actual value was null"); + } + + if (expected.getCellType() == HSSFCell.CELL_TYPE_STRING) { + String value = expected.getRichStringCellValue().getString(); + if (value.startsWith("#")) { + // TODO - this code never called + expected.setCellType(HSSFCell.CELL_TYPE_ERROR); + // expected.setCellErrorValue(...?); + } + } + + switch (expected.getCellType()) { + case HSSFCell.CELL_TYPE_BLANK: + assertEquals(msg, HSSFCell.CELL_TYPE_BLANK, actual.getCellType()); + break; + case HSSFCell.CELL_TYPE_BOOLEAN: + assertEquals(msg, HSSFCell.CELL_TYPE_BOOLEAN, actual.getCellType()); + assertEquals(msg, expected.getBooleanCellValue(), actual.getBooleanValue()); + break; + case HSSFCell.CELL_TYPE_ERROR: + assertEquals(msg, HSSFCell.CELL_TYPE_ERROR, actual.getCellType()); + if(false) { // TODO: fix ~45 functions which are currently returning incorrect error values + assertEquals(msg, expected.getErrorCellValue(), actual.getErrorValue()); + } + break; + case HSSFCell.CELL_TYPE_FORMULA: // will never be used, since we will call method after formula evaluation + throw new AssertionFailedError("Cannot expect formula as result of formula evaluation: " + msg); + case HSSFCell.CELL_TYPE_NUMERIC: + assertEquals(msg, HSSFCell.CELL_TYPE_NUMERIC, actual.getCellType()); + TestMathX.assertEquals(msg, expected.getNumericCellValue(), actual.getNumberValue(), TestMathX.POS_ZERO, TestMathX.DIFF_TOLERANCE_FACTOR); +// double delta = Math.abs(expected.getNumericCellValue()-actual.getNumberValue()); +// double pctExpected = Math.abs(0.00001*expected.getNumericCellValue()); +// assertTrue(msg, delta <= pctExpected); + break; + case HSSFCell.CELL_TYPE_STRING: + assertEquals(msg, HSSFCell.CELL_TYPE_STRING, actual.getCellType()); + assertEquals(msg, expected.getRichStringCellValue().getString(), actual.getRichTextStringValue().getString()); + break; + } + } + + + protected void setUp() throws Exception { + if (workbook == null) { + String filePath = System.getProperty("HSSF.testdata.path")+ "/" + SS.FILENAME; + FileInputStream fin = new FileInputStream( filePath ); + workbook = new HSSFWorkbook( fin ); + sheet = workbook.getSheetAt( 0 ); + } + _functionFailureCount = 0; + _functionSuccessCount = 0; + _evaluationFailureCount = 0; + _evaluationSuccessCount = 0; + } + + public void testFunctionsFromTestSpreadsheet() { + + processFunctionGroup(SS.START_OPERATORS_ROW_INDEX, null); + processFunctionGroup(SS.START_FUNCTIONS_ROW_INDEX, null); + // example for debugging individual functions/operators: +// processFunctionGroup(SS.START_OPERATORS_ROW_INDEX, "ConcatEval"); +// processFunctionGroup(SS.START_FUNCTIONS_ROW_INDEX, "AVERAGE"); + + // confirm results + String successMsg = "There were " + + _evaluationSuccessCount + " successful evaluation(s) and " + + _functionSuccessCount + " function(s) without error"; + if(_functionFailureCount > 0) { + String msg = _functionFailureCount + " function(s) failed in " + + _evaluationFailureCount + " evaluation(s). " + successMsg; + throw new AssertionFailedError(msg); + } + if(false) { // normally no output for successful tests + System.out.println(getClass().getName() + ": " + successMsg); + } + } + + /** + * @param startRowIndex row index in the spreadsheet where the first function/operator is found + * @param testFocusFunctionName name of a single function/operator to test alone. + * Typically pass null to test all functions + */ + private void processFunctionGroup(int startRowIndex, String testFocusFunctionName) { + + HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, workbook); + + int rowIndex = startRowIndex; + while (true) { + HSSFRow r = sheet.getRow(rowIndex); + String targetFunctionName = getTargetFunctionName(r); + if(targetFunctionName == null) { + throw new AssertionFailedError("Test spreadsheet cell empty on row (" + + (rowIndex+1) + "). Expected function name or '" + + SS.FUNCTION_NAMES_END_SENTINEL + "'"); + } + if(targetFunctionName.equals(SS.FUNCTION_NAMES_END_SENTINEL)) { + // found end of functions list + break; + } + if(testFocusFunctionName == null || targetFunctionName.equalsIgnoreCase(testFocusFunctionName)) { + + // expected results are on the row below + HSSFRow expectedValuesRow = sheet.getRow(rowIndex + 1); + if(expectedValuesRow == null) { + int missingRowNum = rowIndex + 2; //+1 for 1-based, +1 for next row + throw new AssertionFailedError("Missing expected values row for function '" + + targetFunctionName + " (row " + missingRowNum + ")"); + } + switch(processFunctionRow(evaluator, targetFunctionName, r, expectedValuesRow)) { + case Result.ALL_EVALUATIONS_SUCCEEDED: _functionSuccessCount++; break; + case Result.SOME_EVALUATIONS_FAILED: _functionFailureCount++; break; + default: + throw new RuntimeException("unexpected result"); + case Result.NO_EVALUATIONS_FOUND: // do nothing + } + } + rowIndex += SS.NUMBER_OF_ROWS_PER_FUNCTION; + } + } + + /** + * + * @return a constant from the local Result class denoting whether there were any evaluation + * cases, and whether they all succeeded. + */ + private int processFunctionRow(HSSFFormulaEvaluator evaluator, String targetFunctionName, + HSSFRow formulasRow, HSSFRow expectedValuesRow) { + + int result = Result.NO_EVALUATIONS_FOUND; // so far + short endcolnum = formulasRow.getLastCellNum(); + evaluator.setCurrentRow(formulasRow); + + // iterate across the row for all the evaluation cases + for (short colnum=SS.COLUMN_INDEX_FIRST_TEST_VALUE; colnum < endcolnum; colnum++) { + HSSFCell c = formulasRow.getCell(colnum); + if (c == null || c.getCellType() != HSSFCell.CELL_TYPE_FORMULA) { + continue; + } + + HSSFFormulaEvaluator.CellValue actualValue = evaluator.evaluate(c); + + HSSFCell expectedValueCell = getExpectedValueCell(expectedValuesRow, colnum); + try { + confirmExpectedResult("Function '" + targetFunctionName + "': Formula: " + c.getCellFormula() + " @ " + formulasRow.getRowNum() + ":" + colnum, + expectedValueCell, actualValue); + _evaluationSuccessCount ++; + if(result != Result.SOME_EVALUATIONS_FAILED) { + result = Result.ALL_EVALUATIONS_SUCCEEDED; + } + } catch (AssertionFailedError e) { + _evaluationFailureCount ++; + printShortStackTrace(System.err, e); + result = Result.SOME_EVALUATIONS_FAILED; + } + } + return result; + } + + /** + * Useful to keep output concise when expecting many failures to be reported by this test case + */ + private static void printShortStackTrace(PrintStream ps, AssertionFailedError e) { + StackTraceElement[] stes = e.getStackTrace(); + + int startIx = 0; + // skip any top frames inside junit.framework.Assert + while(startIx= endIx) { + // something went wrong. just print the whole stack trace + e.printStackTrace(ps); + } + endIx -= 4; // skip 4 frames of reflection invocation + ps.println(e.toString()); + for(int i=startIx; inull if cell is missing, empty or blank + */ + private static String getTargetFunctionName(HSSFRow r) { + if(r == null) { + System.err.println("Warning - given null row, can't figure out function name"); + return null; + } + HSSFCell cell = r.getCell(SS.COLUMN_INDEX_FUNCTION_NAME); + if(cell == null) { + System.err.println("Warning - Row " + r.getRowNum() + " has no cell " + SS.COLUMN_INDEX_FUNCTION_NAME + ", can't figure out function name"); + return null; + } + if(cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) { + return null; + } + if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { + return cell.getRichStringCellValue().getString(); + } + + throw new AssertionFailedError("Bad cell type for 'function name' column: (" + + cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")"); + } +} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java new file mode 100755 index 0000000000..724c54cd90 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/TestUnaryPlusEval.java @@ -0,0 +1,61 @@ +/* +* 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.poi.hssf.record.formula.eval; + +import org.apache.poi.hssf.record.formula.AreaPtg; +import org.apache.poi.hssf.record.formula.UnaryPlusPtg; +import org.apache.poi.hssf.record.formula.functions.NumericFunctionInvoker; + +import junit.framework.TestCase; + +/** + * Test for unary plus operator evaluator. + * + * @author Josh Micich + */ +public final class TestUnaryPlusEval extends TestCase { + + /** + * Test for bug observable at svn revision 618865 (5-Feb-2008)
+ * The code for handling column operands had been copy-pasted from the row handling code. + */ + public void testColumnOperand() { + + short firstRow = (short)8; + short lastRow = (short)12; + short colNum = (short)5; + AreaPtg areaPtg = new AreaPtg(firstRow, lastRow, colNum, colNum, false, false, false, false); + ValueEval[] values = { + new NumberEval(27), + new NumberEval(29), + new NumberEval(35), // value in row 10 + new NumberEval(37), + new NumberEval(38), + }; + Eval areaEval = new Area2DEval(areaPtg, values); + Eval[] args = { + areaEval, + }; + + double result = NumericFunctionInvoker.invoke(new UnaryPlusEval(new UnaryPlusPtg()), args, 10, (short)20); + + assertEquals(35, result, 0); + } + +} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java index b5e0843671..c504aaa0a6 100755 --- a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/AllIndividualFunctionEvaluationTests.java @@ -36,8 +36,11 @@ public final class AllIndividualFunctionEvaluationTests { result.addTestSuite(TestFinanceLib.class); result.addTestSuite(TestIndex.class); result.addTestSuite(TestMathX.class); + result.addTestSuite(TestMatch.class); result.addTestSuite(TestRowCol.class); + result.addTestSuite(TestSumproduct.class); result.addTestSuite(TestStatsLib.class); + result.addTestSuite(TestTFunc.class); return result; } diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/NumericFunctionInvoker.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/NumericFunctionInvoker.java index 87405a4918..2093d35b1e 100755 --- a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/NumericFunctionInvoker.java +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/NumericFunctionInvoker.java @@ -23,13 +23,14 @@ import junit.framework.AssertionFailedError; import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumericValueEval; +import org.apache.poi.hssf.record.formula.eval.OperationEval; /** * Test helper class for invoking functions with numeric results. * * @author Josh Micich */ -final class NumericFunctionInvoker { +public final class NumericFunctionInvoker { private NumericFunctionInvoker() { // no instances of this class @@ -59,13 +60,37 @@ final class NumericFunctionInvoker { + ") failed: " + e.getMessage()); } + } + /** + * Invokes the specified operator with the arguments. + *

+ * This method cannot be used for confirming error return codes. Any non-numeric evaluation + * result causes the current junit test to fail. + */ + public static double invoke(OperationEval f, Eval[] args, int srcCellRow, int srcCellCol) { + try { + return invokeInternal(f, args, srcCellRow, srcCellCol); + } catch (NumericEvalEx e) { + throw new AssertionFailedError("Evaluation of function (" + f.getClass().getName() + + ") failed: " + e.getMessage()); + } + } /** * Formats nicer error messages for the junit output */ - private static double invokeInternal(Function f, Eval[] args, int srcCellRow, int srcCellCol) + private static double invokeInternal(Object target, Eval[] args, int srcCellRow, int srcCellCol) throws NumericEvalEx { - Eval evalResult = f.evaluate(args, srcCellRow, (short)srcCellCol); + Eval evalResult; + // TODO - make OperationEval extend Function + if (target instanceof Function) { + Function ff = (Function) target; + evalResult = ff.evaluate(args, srcCellRow, (short)srcCellCol); + } else { + OperationEval ff = (OperationEval) target; + evalResult = ff.evaluate(args, srcCellRow, (short)srcCellCol); + } + if(evalResult == null) { throw new NumericEvalEx("Result object was null"); } @@ -89,6 +114,9 @@ final class NumericFunctionInvoker { if(errorCodesAreEqual(ee, ErrorEval.UNKNOWN_ERROR)) { return "Unknown error"; } + if(errorCodesAreEqual(ee, ErrorEval.VALUE_INVALID)) { + return "Error code: #VALUE! (invalid value)"; + } return "Error code=" + ee.getErrorCode(); } private static boolean errorCodesAreEqual(ErrorEval a, ErrorEval b) { diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestEverything.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestEverything.java deleted file mode 100644 index 8337810216..0000000000 --- a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestEverything.java +++ /dev/null @@ -1,48 +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. -*/ -/* - * Created on May 11, 2005 - * - */ -package org.apache.poi.hssf.record.formula.functions; - -import org.apache.poi.hssf.record.formula.eval.GenericFormulaTestCase; - -import junit.framework.TestSuite; - -/** - * This is a test of all the normal formula functions we have implemented. - * It should pick up newly implemented functions which are correctly added - * to the test formula excel file, but tweak the rows below if you - * add any past the end of what's currently checked. - * For newly implemented eval functions, - * @see org.apache.poi.hssf.record.formula.eval.TestEverything - * - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - */ -public class TestEverything extends TestSuite { - public static TestSuite suite() throws Exception { - TestSuite suite = new TestSuite("Tests for individual function classes"); - String s; - for(int i=80; i<1485;i=i+4) { - s = "D"+Integer.toString(i).trim(); - suite.addTest(new GenericFormulaTestCase(s)); - } -// suite.addTest(new GenericFormulaTestCase("D1164")); - return suite; - } -} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java new file mode 100755 index 0000000000..7ad528d61f --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java @@ -0,0 +1,184 @@ +/* ==================================================================== + 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.poi.hssf.record.formula.functions; + +import junit.framework.TestCase; + +import org.apache.poi.hssf.record.formula.AreaPtg; +import org.apache.poi.hssf.record.formula.eval.Area2DEval; +import org.apache.poi.hssf.record.formula.eval.BoolEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.NumericValueEval; +import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; + +/** + * Test cases for MATCH() + * + * @author Josh Micich + */ +public final class TestMatch extends TestCase { + /** less than or equal to */ + private static final NumberEval MATCH_LARGEST_LTE = new NumberEval(1); + private static final NumberEval MATCH_EXACT = new NumberEval(0); + /** greater than or equal to */ + private static final NumberEval MATCH_SMALLEST_GTE = new NumberEval(-1); + + + private static Eval invokeMatch(Eval lookup_value, Eval lookup_array, Eval match_type) { + Eval[] args = { lookup_value, lookup_array, match_type, }; + return new Match().evaluate(args, -1, (short)-1); + } + private static void confirmInt(int expected, Eval actualEval) { + if(!(actualEval instanceof NumericValueEval)) { + fail("Expected numeric result"); + } + NumericValueEval nve = (NumericValueEval)actualEval; + assertEquals(expected, nve.getNumberValue(), 0); + } + + public void testSimpleNumber() { + + ValueEval[] values = { + new NumberEval(4), + new NumberEval(5), + new NumberEval(10), + new NumberEval(10), + new NumberEval(25), + }; + + AreaPtg areaPtg = new AreaPtg("A1:A5"); + Area2DEval ae = new Area2DEval(areaPtg, values); + + + confirmInt(2, invokeMatch(new NumberEval(5), ae, MATCH_LARGEST_LTE)); + confirmInt(2, invokeMatch(new NumberEval(5), ae, MATCH_EXACT)); + confirmInt(4, invokeMatch(new NumberEval(10), ae, MATCH_LARGEST_LTE)); + confirmInt(3, invokeMatch(new NumberEval(10), ae, MATCH_EXACT)); + confirmInt(4, invokeMatch(new NumberEval(20), ae, MATCH_LARGEST_LTE)); + assertEquals(ErrorEval.NA, invokeMatch(new NumberEval(20), ae, MATCH_EXACT)); + } + + public void testReversedNumber() { + + ValueEval[] values = { + new NumberEval(25), + new NumberEval(10), + new NumberEval(10), + new NumberEval(10), + new NumberEval(4), + }; + + AreaPtg areaPtg = new AreaPtg("A1:A5"); + Area2DEval ae = new Area2DEval(areaPtg, values); + + + confirmInt(2, invokeMatch(new NumberEval(10), ae, MATCH_SMALLEST_GTE)); + confirmInt(2, invokeMatch(new NumberEval(10), ae, MATCH_EXACT)); + confirmInt(4, invokeMatch(new NumberEval(9), ae, MATCH_SMALLEST_GTE)); + confirmInt(1, invokeMatch(new NumberEval(20), ae, MATCH_SMALLEST_GTE)); + assertEquals(ErrorEval.NA, invokeMatch(new NumberEval(20), ae, MATCH_EXACT)); + assertEquals(ErrorEval.NA, invokeMatch(new NumberEval(26), ae, MATCH_SMALLEST_GTE)); + } + + public void testSimpleString() { + + ValueEval[] values = { + new StringEval("Albert"), + new StringEval("Charles"), + new StringEval("Ed"), + new StringEval("Greg"), + new StringEval("Ian"), + }; + + AreaPtg areaPtg = new AreaPtg("A1:A5"); + Area2DEval ae = new Area2DEval(areaPtg, values); + + // Note String comparisons are case insensitive + confirmInt(3, invokeMatch(new StringEval("Ed"), ae, MATCH_LARGEST_LTE)); + confirmInt(3, invokeMatch(new StringEval("eD"), ae, MATCH_LARGEST_LTE)); + confirmInt(3, invokeMatch(new StringEval("Ed"), ae, MATCH_EXACT)); + confirmInt(3, invokeMatch(new StringEval("ed"), ae, MATCH_EXACT)); + confirmInt(4, invokeMatch(new StringEval("Hugh"), ae, MATCH_LARGEST_LTE)); + assertEquals(ErrorEval.NA, invokeMatch(new StringEval("Hugh"), ae, MATCH_EXACT)); + } + + public void testSimpleBoolean() { + + ValueEval[] values = { + BoolEval.FALSE, + BoolEval.FALSE, + BoolEval.TRUE, + BoolEval.TRUE, + }; + + AreaPtg areaPtg = new AreaPtg("A1:A4"); + Area2DEval ae = new Area2DEval(areaPtg, values); + + // Note String comparisons are case insensitive + confirmInt(2, invokeMatch(BoolEval.FALSE, ae, MATCH_LARGEST_LTE)); + confirmInt(1, invokeMatch(BoolEval.FALSE, ae, MATCH_EXACT)); + confirmInt(4, invokeMatch(BoolEval.TRUE, ae, MATCH_LARGEST_LTE)); + confirmInt(3, invokeMatch(BoolEval.TRUE, ae, MATCH_EXACT)); + } + + public void testHeterogeneous() { + + ValueEval[] values = { + new NumberEval(4), + BoolEval.FALSE, + new NumberEval(5), + new StringEval("Albert"), + BoolEval.FALSE, + BoolEval.TRUE, + new NumberEval(10), + new StringEval("Charles"), + new StringEval("Ed"), + new NumberEval(10), + new NumberEval(25), + BoolEval.TRUE, + new StringEval("Ed"), + }; + + AreaPtg areaPtg = new AreaPtg("A1:A13"); + Area2DEval ae = new Area2DEval(areaPtg, values); + + assertEquals(ErrorEval.NA, invokeMatch(new StringEval("Aaron"), ae, MATCH_LARGEST_LTE)); + + confirmInt(5, invokeMatch(BoolEval.FALSE, ae, MATCH_LARGEST_LTE)); + confirmInt(2, invokeMatch(BoolEval.FALSE, ae, MATCH_EXACT)); + confirmInt(3, invokeMatch(new NumberEval(5), ae, MATCH_LARGEST_LTE)); + confirmInt(3, invokeMatch(new NumberEval(5), ae, MATCH_EXACT)); + + confirmInt(8, invokeMatch(new StringEval("CHARLES"), ae, MATCH_EXACT)); + + confirmInt(4, invokeMatch(new StringEval("Ben"), ae, MATCH_LARGEST_LTE)); + + confirmInt(13, invokeMatch(new StringEval("ED"), ae, MATCH_LARGEST_LTE)); + confirmInt(9, invokeMatch(new StringEval("ED"), ae, MATCH_EXACT)); + + confirmInt(13, invokeMatch(new StringEval("Hugh"), ae, MATCH_LARGEST_LTE)); + assertEquals(ErrorEval.NA, invokeMatch(new StringEval("Hugh"), ae, MATCH_EXACT)); + + confirmInt(11, invokeMatch(new NumberEval(30), ae, MATCH_LARGEST_LTE)); + confirmInt(12, invokeMatch(BoolEval.TRUE, ae, MATCH_LARGEST_LTE)); + } + +} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java new file mode 100755 index 0000000000..a6ce345aeb --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java @@ -0,0 +1,49 @@ +/* ==================================================================== + 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.poi.hssf.record.formula.functions; + +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.StringEval; + +import junit.framework.TestCase; + +/** + * Test cases for ROUND(), ROUNDUP(), ROUNDDOWN() + * + * @author Josh Micich + */ +public final class TestRoundFuncs extends TestCase { + public void testRounddownWithStringArg() { + + Eval strArg = new StringEval("abc"); + Eval[] args = { strArg, new NumberEval(2), }; + Eval result = new Rounddown().evaluate(args, -1, (short)-1); + assertEquals(ErrorEval.VALUE_INVALID, result); + } + + public void testRoundupWithStringArg() { + + Eval strArg = new StringEval("abc"); + Eval[] args = { strArg, new NumberEval(2), }; + Eval result = new Roundup().evaluate(args, -1, (short)-1); + assertEquals(ErrorEval.VALUE_INVALID, result); + } + +} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java new file mode 100755 index 0000000000..9fbc9e42fe --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java @@ -0,0 +1,120 @@ +/* ==================================================================== + 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.poi.hssf.record.formula.functions; + +import org.apache.poi.hssf.record.formula.ReferencePtg; +import org.apache.poi.hssf.record.formula.eval.AreaEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.NumericValueEval; +import org.apache.poi.hssf.record.formula.eval.Ref2DEval; +import org.apache.poi.hssf.record.formula.eval.RefEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; + +import junit.framework.TestCase; + +/** + * Test cases for SUMPRODUCT() + * + * @author Josh Micich + */ +public final class TestSumproduct extends TestCase { + + private static Eval invokeSumproduct(Eval[] args) { + // srcCellRow and srcCellColumn are ignored by SUMPRODUCT + return new Sumproduct().evaluate(args, -1, (short)-1); + } + private static void confirmDouble(double expected, Eval actualEval) { + if(!(actualEval instanceof NumericValueEval)) { + fail("Expected numeric result"); + } + NumericValueEval nve = (NumericValueEval)actualEval; + assertEquals(expected, nve.getNumberValue(), 0); + } + + public void testScalarSimple() { + + RefEval refEval = new Ref2DEval(new ReferencePtg("A1"), new NumberEval(3), true); + Eval[] args = { + refEval, + new NumberEval(2), + }; + Eval result = invokeSumproduct(args); + confirmDouble(6D, result); + } + + + public void testAreaSimple() { + + AreaEval aeA = EvalFactory.createAreaEval("A1:A3", 1, 3); + AreaEval aeB = EvalFactory.createAreaEval("B1:B3", 1, 3); + ValueEval[] aValues = aeA.getValues(); + ValueEval[] bValues = aeB.getValues(); + aValues[0] = new NumberEval(2); + aValues[1] = new NumberEval(4); + aValues[2] = new NumberEval(5); + bValues[0] = new NumberEval(3); + bValues[1] = new NumberEval(6); + bValues[2] = new NumberEval(7); + + Eval[] args = { aeA, aeB, }; + Eval result = invokeSumproduct(args); + confirmDouble(65D, result); + } + + /** + * For scalar products, the terms may be 1x1 area refs + */ + public void testOneByOneArea() { + + AreaEval ae = EvalFactory.createAreaEval("A1:A1", 1, 1); + ae.getValues()[0] = new NumberEval(7); + + Eval[] args = { + ae, + new NumberEval(2), + }; + Eval result = invokeSumproduct(args); + confirmDouble(14D, result); + } + + + public void testMismatchAreaDimensions() { + + AreaEval aeA = EvalFactory.createAreaEval("A1:A3", 1, 3); + AreaEval aeB = EvalFactory.createAreaEval("B1:D1", 3, 1); + + Eval[] args; + args = new Eval[] { aeA, aeB, }; + assertEquals(ErrorEval.VALUE_INVALID, invokeSumproduct(args)); + + args = new Eval[] { aeA, new NumberEval(5), }; + assertEquals(ErrorEval.VALUE_INVALID, invokeSumproduct(args)); + } + + public void testAreaWithErrorCell() { + AreaEval aeA = EvalFactory.createAreaEval("A1:A2", 1, 2); + AreaEval aeB = EvalFactory.createAreaEval("B1:B2", 1, 2); + aeB.getValues()[1] = ErrorEval.REF_INVALID; + + Eval[] args = { aeA, aeB, }; + assertEquals(ErrorEval.REF_INVALID, invokeSumproduct(args)); + } + +} diff --git a/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java new file mode 100755 index 0000000000..6ecc3619c4 --- /dev/null +++ b/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.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.poi.hssf.record.formula.functions; + +import org.apache.poi.hssf.record.formula.ReferencePtg; +import org.apache.poi.hssf.record.formula.eval.BlankEval; +import org.apache.poi.hssf.record.formula.eval.BoolEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.Ref2DEval; +import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; + +import junit.framework.TestCase; + +/** + * Test cases for Excel function T() + * + * @author Josh Micich + */ +public final class TestTFunc extends TestCase { + + /** + * @return the result of calling function T() with the specified argument + */ + private static Eval invokeT(Eval arg) { + Eval[] args = { arg, }; + Eval result = new T().evaluate(args, -1, (short)-1); + assertNotNull("result may never be null", result); + return result; + } + /** + * Simulates call: T(A1) + * where cell A1 has the specified innerValue + */ + private Eval invokeTWithReference(ValueEval innerValue) { + Eval arg = new Ref2DEval(new ReferencePtg((short)1, (short)1, false, false), innerValue, true); + return invokeT(arg); + } + + private static void confirmText(String text) { + Eval arg = new StringEval(text); + Eval eval = invokeT(arg); + StringEval se = (StringEval) eval; + assertEquals(text, se.getStringValue()); + } + + public void testTextValues() { + + confirmText("abc"); + confirmText(""); + confirmText(" "); + confirmText("~"); + confirmText("123"); + confirmText("TRUE"); + } + + private static void confirmError(Eval arg) { + Eval eval = invokeT(arg); + assertTrue(arg == eval); + } + + public void testErrorValues() { + + confirmError(ErrorEval.VALUE_INVALID); + confirmError(ErrorEval.NA); + confirmError(ErrorEval.REF_INVALID); + } + + private static void confirmString(Eval eval, String expected) { + assertTrue(eval instanceof StringEval); + assertEquals(expected, ((StringEval)eval).getStringValue()); + } + + private static void confirmOther(Eval arg) { + Eval eval = invokeT(arg); + confirmString(eval, ""); + } + + public void testOtherValues() { + confirmOther(new NumberEval(2)); + confirmOther(BoolEval.FALSE); + confirmOther(BlankEval.INSTANCE); // can this particular case be verified? + } + + public void testRefValues() { + Eval eval; + + eval = invokeTWithReference(new StringEval("def")); + confirmString(eval, "def"); + eval = invokeTWithReference(new StringEval(" ")); + confirmString(eval, " "); + + eval = invokeTWithReference(new NumberEval(2)); + confirmString(eval, ""); + eval = invokeTWithReference(BoolEval.TRUE); + confirmString(eval, ""); + + eval = invokeTWithReference(ErrorEval.NAME_INVALID); + assertTrue(eval == ErrorEval.NAME_INVALID); + } +} diff --git a/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls b/src/testcases/org/apache/poi/hssf/data/FormulaEvalTestData.xls index cf4b6fa5011723ad05fd24152a3a3e4a451d2c98..001432f0aaa78d228526d4cb9086e10e8baeb1ec 100644 GIT binary patch literal 134656 zcmeFa3!GL})jz(UXKv42xFaBP83qs(L2iMHF=v<=E^?I_M1_K3<^d*#8JvrtVq#ia zT9TNcQqrrvlKQHZm8I!pT2fM4S=Ot)S!t45VOo+}^Z$O=-uqmh*>fJ=&;R#%KcC<4 z^B&l9&RTn&wfA0Y?X}n5XP@&t`^bOO>4q@hT|kWNGzj&u^z2&9onqmV`;l_QNosz4fxG!AJz(#c2@kR~FX zf^;gKjIvr^$(ln&$NHdUTB7Fd97Se2_Gmy?iItytI(%DEKM4F3KiR2+w zAX)V%+kUosG4rx7715zUr_0WWK8fhcaCZx?s%}5_X+Je-Av=ylpsSRlx(nUz^ zNF7L>NL@%5BW*|8fpiJdrAU_{?L@j9>7z(jAnih02~KUevm7mN#kpPXK*n(%Ltru1 z%#*mMJjK6CW#q4jQq8Zvr1O)T4kf$`XK%P{^Pxmu0cLk2_l|+^ zLixDG*5P>WW(}Wy7nQ(K0L^tls#~E6wtW$#uu3_&?t3Ciw6FC^*ICO+qNHX`Gu&_FjIbU3ca|nKz(`ikBWY^E1?P@%-^b{ zdLaLC{8j3ANNZtfATR%)JmyIq8WOBS28DkxkwP7kkaND;k8^)`7Un_!_&Z4c-Y?XT z$lnjrD~+1iz5c=jXV4FDqJaF=uh?yMl&FGj zG{YWR;BWqia?z}U9_1!bt4G*iNA57#VQ;x3)B)Udu96nv-oivZTC*9JM=PHO&wKz< zI9FNT+4*d9KKwuLr>L@PM(##lj$GdR!CvnT$=Z2u@2wi8UPQSm+o~Ij64j!kW_T0o zYZ^uxQWWQ;7@UJ5fw9HNrk7F@C?%dEi80a0zZV`HP2(s|gNDzDEhRrE#f#8$JP%52 zZfreBF*7H{**Pc@7=z;^w%O5^twyu7S?V?c?Z@$8O-p*M$Ef@f@V|&uD#lfeJ#FmR zsq0Revv#5d)}Asde+*)w5s~~gE7MIMiV{^ISVCB1@0&6;$_Fr6O+ZyEvZ=DT8PeH^ zco5U9V^vNqw>2~1+KGZ#d&(SxsF+-Vdas-4twSkO5HKNRS~oF#->K!{n@%l{+);_J z3IS5MFx`S^c~Z4dk(HG}p|cR3ArA8kwfFnw+MA{5@SP*nos_?BQ8}7BXYJ$wp!~l? z`3I;uT4E8R3ia=lzYwvcFdqw3{&!LSQK~SvfOL*J$QW|nWFti3xNb7)mW3b%glY5F zP4?DJ9+iKF`ZB}O(CzESMei2azu7=?Z?(Fc;i-SGtyK8_5YF(Ztjwx{r|x0I8)Xx% zg>VU1giOL!DO2}y7SPnRcJkJ(TSw&&SO3B2zM_8Rs@jS<_B6k0NnLHlsQiKIKF$rM zf~|jy${(Wc=L{i&W%f%lS5WG2-R0<^_Q;eI&p}u4Zyz5XgNBp7H$1tz`2W9(FF?Z* zs$5U!*hr=2%o&`>;Xy%S`ggm?zbF1bdcoh_3;w=d@VE7XzrPp!y}jT+-wXb_Uhuuu zr#Jpz6F!KGv*h!IUhuj;J?V9QdgAZwh0j-d!9Umw{?T6WpXvqwtzPi|-THi8_@G~B z$w%7>;%<$?%^$j5Ko_}J*jMyvd93cdioO6>3$2;|WAi8)Cx_`7?- zA9UgegQu&%b2Z~_&eyX141AoX_xpvm^C1@hoJ{;j+kS-cOVew7sl^Wq@a4Efx6yQ|oaFQ1d^@;{E#HW8`f3>>n^-Na+yhu? z5UD?Bvo1b9{)iBS=Mm-i^w=hIucM=C13at}B5Qcr{T`5Y;)P$7EieSIEo ze*hP91boDA(@;Zr@^Rq{Fao>r_dD^07@OVn)0}u+hw>is(Q9zPU#}^w9EeX*o>xcl z2?2pW*bDyJo_OJth1XQzvnxuk5T^+Jo!NK}fj#Mcy&Owccq-6ifM?w3!bkPURnY`V z&xqOsq9R>xR(myn&^yZ|K3cBdUmgNOIkcVV>+&9Y(fs>&t78>OuiOKfrVrtzRSrC@ z6AZ)j0G;(DK3dN}ZsiqH0f<2*Bi6o{!zJ@2BfSx;S8DPc3Bi60aQw6vx3NUOVN-$0S}m zV~&qWymsK}b2mpnoa?<8k3Bvn@!A=8d`#lCGyeFP#B1l|<6{!9oe9UsBwjlceI`j< z?N^1}J;ohobU*du?m#=A%^JK;0Y#AvUZj2Za^+_7*T4SNXHtX#jl@@6aYc8zIZ_T> zaR>);IZ7P3%Tw8vIu*3KQhDY+XUo3yr7!iURApslk4lAcwo=3y-dKj!4GQBfPfgB} z)af8k`jTSfBbDkoq+{LD^d3qJGmq#Ej0>3Y{lA3ulO0@Ou{G2MDUL{~lsl2}4iZa# zxtVlV#xt3DJWR4(b+!;c047?9taXp(^fZOpAPelXvhrfL5W5fG(!&(~&)H|TQqJ&2 z;p{ZFGj#7t_?7Bu9%n|F>`(V%9^J3+4>8%1Wt3PRM~rDrsk{5IFCN=Vzxvg$b}Pfg zR!ne4JhnrGakfMFIF!;;HCV-ssHV~{+mCxG9^*QsY+EVQBc*IxDT9-;ZKc9J(pD;r z>)A^`h!T4@u*Bu5Rap|mk~ZYmYxK?DaQ_za#e*V@{QPw!5tCW z!zA$ZvnW5k@r763>@MInrywY9JZB#)W4lnt`w;pmAGc3Cphow!3DJE=bhnGD6@+0nIPRuUG zVQG_MiV0iV;U$MN|LHDfcy=)kOFKQLn6RZCUh<7!A8{9RQg$&8OPdi>OxV&6FM0px z54wvP!D42`TUt4anROhNHhsqDzV^H>h7Jvf@6$$R7vr$BaWTb&Ep7UYU+w*zyO>eg z#W*Z&VoWh%OPfC9yT7>AUCik0VjPxsT1+uvOPfC9t6zM|T}*j)F%C^A;o9Xy~DXb-%=_y%E!xn;d z>85{kGd($A3fstLIysAJ*dDMC_1^EhnNA3p!Vu zoi=#>QoT9dxTU;0-O_Sn>WZv-4ec&Ly*48lY{WLza$KiTyB0J%s1@hP5)_6zsjU@5 z=|aC&8nU(0kgb)5_Fyr4(yqMj8&l=csubj*kZRep$6b3oNPF6@LeNgkqAkSU{eZR{ z`;Vu}-eY~wbpm#3 zW9`0n$F`P+)`rfu_Djm^(>pqEOf87AN`9cbKeiz6z*bZ0zE$+kt-+T-=Jlw~4%h={ z9aj5PwlS}KHFZ}pYIjx^%i`{V*nr$7>T1J|=rpXg9J{(NK_O|dZowYGR@qrisT3p9 z$K-rLTN})MPLx$*cy~UwgmbHO)Zn?UU~7ab+Zy%7Yy#^_3)2lv&8?ftG2_T;ZeD-r zXCZ3A9>iK~Le2C{LktPsZuFwdH9Hz~5o)I0>7Ha?>@Es1hX>7OKET0Td(mE)cUK1N@^ACiX!=q-omApX?=Jcvs??qv;&?;x`O7*n; zWJ;L0wOoQX1F#CZsC8QxjIb-J=Hy_=fIGmqp%>8Hf-cUr536V{ko^C2JpHi=6CQC% zbL*CLlkq%@vnn$T9&w2=QEj?`@5%G~f$s&a-{XQvA%tCqcONizFH3iIwl~1BWeo|5 z5f~Dd!2;RRcGw|Znx0FEC&!A2ZSQ_8oA_N#?NShVMYOKiqgx1O?5}i9WTm^*S?p5F z+B(xWrZz-xNtU2X@s>{1f$J-r#YxFnU$MTEYa@Y2*O2v{8nV7qLwk~?*!PA7>g8RX zqTuaWg`NP`%caRZRU95$=!zpMCL*YbhHOnVWNV@!TIboj3LvU+(JB-aK<+EV|JW4< zEvypkk%nc~H+Qx`TGOI;<@JL$>R}9>5H97_vqL2IBulV&kSy9dsqm~tj=U3v1qH4( zlrJ_ES;(N=t*g_+Pb;2(FWZ;;m3p~{!Y)l#&b{*rHOoCzs5<6RdvD4<}6*@WSm>o&90 zjd*{7>xeS1;qnkJ^dG*dfh9X;z@l-OKf7?=MF1C>Oa`Z2>Xuu&)h#nNg7mOD4El}u z*A2Yd2>37=?h;<)srd;9;lWaHliYV0_jh;SqHY1)eGBddU-%U@V`I0PariLspk}%S zX(QNgyhYu7^UZjl0iK`#AR2exr?W zKUI5iy8V*Q&CpwYx}&p$Su=l;kgWO5tqrY>=_Sn@Ox6kN`+s0oA63`c(Ag1Wl&SB% z&5V4twYj75*3>X{Ye;d-;lcAAc&+4)P#*Eu);aFst4+al~e!{j9~dCQEX zJQ};&+p${Lh^Xvwy!`PvNH?Kcufr&?m+I(+LR5IP9OneAk^*32!^xE!26&y1G((jh z9fUA3gjNz~HTwxw%Z3=t%BUK=CgmUIjivR0?l zTbdd!$wkz>p{u1O2T^ltQ``2A7$S^ItA(hOt|*2OvbiAL&>lkpR?FI!OM$tFEf6t*c#Dx2S&6d6cBsTql`y(l9&Q@r;;PObre8YQqM5)z}DKZEfgm+}zU8 zfxitaacgUvV4%VF^rrNV`g-8oJ5ayrQ>IOWYIySo1fW}l3}$lbsi%TC-66=<^!AQ+ z*h+ahG+wv0Ay$May>1(95ZtmFD(3plo8d|n(p4r;9bq1^jowyyT73mVB zZAhI+8$mXI(Xy&#)wSg{RrOU+=EZA1gulyHoCgs!T%3lOAg&II3upZ8xCrN#hW1Tq z;;CN{ZcR5eH?*QQTicq_fMI!1Dfl#OXoM{++6c2rx3{;omp7$5(~X_!CSV)N(PJCR zH7!e%OJuaRp=u4ds9#BF6aF-&@n=;n@S9*W>DH!>)o5uQTZ)dL+wNmPH5IJ+*b&Dx zfYSh;X%3fjsq5OhW9uc;W0Z}y)LqgPLx581W3q97eM4&u0fYyF%`p^^cYRZHM_dFDLTb@u{_W$5ajTkposd; zXn-O0XpeQktVh#^pe@0b%UP^wZ)@smjME038HnPA2!FOB&X^(ObGsVab4N2Pu`B|M zj;S-GxDw-HPKq4E@5*?m0`@D@8$01OAn^-x*ehB;bs7er>6iYj0_SV{h*4 zDCa9te<^UM{!bNrE_+PbTN%@lHt7})H2Ggd`D4+R( zSx`V#UCsOj3!zz{@b?2VX0nffHwVjkwF?$4t6ROOeqr5;s_I%)q-x2Eg)^6}S~_Fp zqH2hqU=={#KV=#iPoE-n0X%gwM-y^lLbn3J>& zm+s6JNRZX$w(aqK2}-VO-V|4BD7mgVjzCz%Ms%dul8&=A7Sa+|2s%ey3x=8)@y2H@ zWklY-HHHZ4St{{;3=QhJv^mEJ1A;h%5*Beyg|wC;vW=+)Yuen}6&w4)MnHoFoY(+R z%4%yrH^np(^vl}Xx8|6^fB~tXp%_+h_ay4b!ON7`5zh?5$C`Rf zX|M$@y2nrmi@0t~7V+UAS!|1IGr|BwKO11TGPjPe&GM$WzKCwJeB(xh6fsO-PRqAp z29#@r!t8tbHv0FD7R)R<;s+l@eamx98CEoO#db_oc?HI=j@SVOm0yu==k~<-wLpxT zh7NPWxab!W1L4-LIElg9R%~u-O?NiO&E**OH^;~wYF^QNG5keSQ&U4{oU?<)tk@b? zA&RQ4xg%awu*?;0TjGox4r4{z_Sgv_nQV)#3wrE|_H;)FBbk`ilTmxyh8}Jg_yuj9 zZ83MEmJ8b3VgoxU5hU9?<3b-4w6GyIHbxy5HniuM?~_fsC2m$qHaSFBhFL2=C+E5k#>vjU5e* zaaJfT5Tdvk0s;f89Gzli`l7D*)sz@JL$6!Z9;Xr9yGXBu$8dqQF6zL7Xbg$)spXn! z3=!17r~^}o=Em6g0%BRzu`JG+2&2}vR!-kz%7Ydbbzn&u!%z&Bv@YHs2uZvJ!O9kO zkVjo((OFDGOaO);Xia%P^A0DU`E=^rj8Xcy>$c=wWqKXGhMbqVsdF+Ro3V z@9pi)v2!I1A@hYMysUAyx?ot3I>Ry+G$44$VeVikWD)!6!3^RTs&J`JqI6r1*bYX$ zAl(_idc@MwvfCm??a&#C@NgY#1?jlyzb>*V_Bk7TB)B!THDcMeHExtbln26%aHiNk z98*2bkbz}$>&Cdyn+iyGZe>@9VW&lsV*$?)#m}~B7g!SA@DVI5#uTW6VYOgkGk#BTl2t%#AyOm*OXX#k255A<(iz&m`Kr-YbA_CIoC-bDbnRy zE{1v6U=6;#AvTD_kW-UuOA!b7rgU5=f);?J zxjnwWK>CYvcJxK9&7IBhI+6-uzi3S3Ago2PJ_@P<0he%MCv&Va<{3SNhrU;X=MJ66 z@!$lttx3mEM1%zUUSb+V%iR>aomOY^> zQp7)+fm^_+R(DGr6KP5Dk?rdzG*0?s;LPfRaZ=b znuzP0F+{KcaLPS^Lkd-~Q!^;GY8%$v1S)7}?`!X(8Aw7Q>B= zgP`LY$Gb@qJNbZdg9uBLt&MT6A7u0FG%u!BsCRYz-dnh1QskPPS93di%a(LpoluYJ zbTg(3IrkuQ zyoeBI1aLRivHeYi)DgEZgC1FpZ9Z|`T51B4xCyYd3N*5p34S?-CcSdX|Em7u4NlO3d6g-!G^T*(9!({q!=l>-G-$?ozPHpl`^ zj)@lsF-;VwOHj>A26>$hyyF0UoAhBXs6SqbWDb{Rg%+dd98gm#as-tP* zT892o6T3`HF6m9}>Dcu{Sd^YI#jk7m6RX?~7`;bxjK)qda=vI#UWZqJ@L~h>vS?X- z?Shq6OJET-%U8`?QVRo{x1?&>Vj$}3S1ww%08Lz3J0IStYGrLz`9wU!?Ks7U8rxbz z5GhUpQ|=aRz=JB(Lb`9qqSnS1Xsz}PWVW`+Qbq?Z?KVvmft{H^U@9oIPQ&SI5 zgLe-Y!1+m>tMO{=X{g4xaQ-)(XW?skqfw9haNdjaSbX@d3=-Lo^T%;M0Ux9L7tUAX z%(qD1!TBXRptJG&b}+@?;ruktoAG_Pb0LbK;`}hqtMK`^x$rSR!TH-b*H+>;{LrxP z;d~#?vpkdwYx)Mxx8pp!3T=ZWK7jKrIFFu(w=!WuH{*N-&L!1Ky@m5GoSWeW-p2XY zIB%)JCU@+z{}ax?zH*pR8t3ohym&rDI|y~e`9Yi)F2GLs!Ac#%`71bAFN8c! zKpkxm*L!Z31ouvH8^iO z5nm5jiuY7;-hp$&aHal?^Yb{Tmq8CFK|VM?jPru!C<`CyJ%saDaIRc|-#*0mb|1j` z7M#bP3q9bq$bC3piSw|Pc*S+JQlG@R9cTXd;2&|`g)^F>j^X?m&O7VTCfG@06?o&k z6X$B!N!fWy{S4>bIIo6%3|+0%f8o3b=L=yMrRSq=IDZ1?rLc>F3zRyH^LCu)!Y=-S za|Y*a7eZIChgWgF59dv5pjX(#&vD+5^QyJ5N!Y{Bao&$}?T1h{?BTmOe-h`~4+Dlh zd>iL0aXxjOQg7mX7tXD)i;DGV7tZ@}=3Ad58 zsb@Y7&EJ7vocso~^9Xv%4`I`SOu4kXks?oOx^9!aP* zc)NQJO!U$pC)Bc^;NG7l@Jcp+nXe3goAAOnuLsBr-TmihflwKv&SIgg%L5=t5as088KhtHeCx)(130*H$ zbHQ@HYLH*pwB`JF&wLC1Mf~zZ-pPC^KA~PKX-mOCadk*w{zY(sFCKK_AHP@gKX=q@ zY}molScCsP{#OG3D}n#B68Iv%tCx^ZNwJ3|)oF>-OjmoUQkV2nWddX9$uf@iRyO^b zK30K83cu}(!4k)+d{6uuVS1Lk`v-6mId>26_>CN)&%;MEM)V8v`Du<-A^HM*BxY4v zkY9*9SM{y(`D56}PhVC^xhmNgfF6DHFFvP|{RMLp{I8HC`YGZNeBc+MqqsZ=jx9V% zVesLR=!YK{?vMHexLt`wf@5p4`JrY$ZdYQSl*>^en+}1AkF#_fW3%ZHnD{tLM|o${ zAwcnQmJUIRk3&18E(lb7oTWpsf?v&!$^`+7kF#_GLpaM1flCiMj&{ScR?P7O5hj0>wPGR@35`%p*%q6`A|Nf)jm`J=zJe4RGZWVfF4CJE5MhwHsfD2K5wSW zC_ye`=|}PTm;!v)hPlk|Yx4Wyi+pSRyZhreme=C@d;?AHAhlk8ZTwMS3h*K9hS0wg z4b5=;j`+RckVvvmVpgHP1L{IZqgwix{tNj@ejc!e_|4=(^zUl)`I;Zx#7`9gF2I)@ zq5nb{BLHLu#}HM7Z${OCXXZO<9I^|A3uX}#g;w*^IJl-Yk~?G5Jotb@w6|J)?9aEK{tmrq=>ZACW7Qg;hgFMXo(5fOxwMMUkYt%ZlfnqFz7;A7BkE8JCMQQ-W2zD9Gs1Vs!JQ`C3%+p`2 z{l;7WEb_jC?o}ox+E>$B8ay}J$1@iH$L56mM zEpL7fN^70mQ;>JHy7d+wZ&qqbS}`psC04xN$QzXe9`oMO>kcGQSW5M$yi1I{sorWe zIMr%6EJ=6wlo<5}zqQy z9;mG+WwHk%J5PD00~bR>(ns?%)IbUvfF(l%{5#I$-wXH`8qj#Hfs|N$KhXe3K&^pd zvG@y(!4!+dw?BE|&JysW28!u9q}jz{@r|ZQs08q~Z_rSsQs^=ns;d|psFChZt1O1} zwYBOzS~}&Yp<+NyMw-RAw?^Dc4XQZMNW2)%q(<>WLNt?N3@Sm8yv1U?Lq&A#m1(I5tWDIWjgU1f z5d(he^FMw3UG!6m5B(Q3EV)DscoRyd$~i>&76Fc@sxqz9yo@HM0ka9335}NxWk1ly zri-J&S{*zJCqfE(%ILp=(%2GXCrYehqWt|Z|Dv&BJ1G%687Ylr1f&~VDt2Oe+;>@e zsn|-_1OMv2;_4|?tTldM62jeVnpkRl;^24B&f~aKrt;ZDbmUACKH3P2v(Gj3y)+m- zCJX~78Vuc7jdUul++rw{c_r}v+5ZNLN=ikc)|pXar5H=0P&He+cqvu_=BX$CHgW9@ zcdz%@eM{94VAf||iYUBP6h2O5z=%)x6~@;1x#oAeyV-uOQ{daVy8VxHJV6VA!OE}c zsCVFd$oUG3C{v4){1Bd+O4T!VAk_nVEAlCq0V+Yc^cT5s2(sVecvO{xxG+nZVb$tJ zmx*G-jV?o@sZ!nOGBmm>(&#cYx=I=yR(zQ#{#0o+Lt5SFKBD+{@sW5onoBeoiL`}h zXq{)xS(D`-*Cf8+=St>Tqf} z?$Jsmb) zb}o_C*x^!Y+0W==1n$tf*!Q6$B3D=!zJoe6Pd*d_j(PG$7}m6(XdsYa_LY`szlcQL zo{}}?bVk>d(?FUzt%lP--%&lP>9jn{k*DS9?bF?XpM)(@LyK%LD3Y+uLaZ?-gt=wg zKO$SVyJJl_*-FEvMzSM{{a!!gV(FN33JUSz)}i_G8J(geBR;w0sKSLwjw*S$a||FY zZO>T#Ky+!beEVr2WBC?jD+c70J0&+j5Vk50Yi?j#)6C}6Zh>rYEQ(uu#DT2_ml zbF^ZM7@V_3qj05laI|%fSivC3Hl>CZDESaj5yD`EEpp8^4HPXg(x5{|7lf3X(Pq|` zlahFuv$g|8=Hc27G@htG?HRSLlG<9^eiXXoBsMLwq&)Lc?~{OIa1k6s6hDNHSxH`o zE?^LdvduJr(P#*P^WcrrkRcF)r#^y)uvtUUNKb76#NZc<0R_hpbdwA>SA%dX1JcRJDvHz?Gmq|}dcp?zkd#v5U;l;_Zb*s` z;czoV758#OK1&!wf=CHNR0)h(*kVEh-i7$lBp@SPheJb%x>$o+P8tg{#hEX*L9t zfofDz4aICf_(T|Pl94O?*|0)<6d&Yr`+ooS!tN94U-&^Wa2b`Sicd(Pcglywz(sz? zD)O~4TEKABS~}4CXGy0X4r74@pf6`2|3oGws!G*x3YuY5!gpZ zUP1Q>3Q9yMo+%~EJYiXoNzqhMT7-NQ6pslc$@^snX3!e$LQGNUCyAKbjL=UKG5-$Y z(|Hu-?|q1pdD(~9z*hiK!JJ%IL5=#Fg=>{^DaljY40kRYdFmpgQdA01aEuD6w2(Fq zgiml3y>k>a2^;79u?CTD#t>S0mU_N9lgYd{KhoRE*++1KJ}e_I8ON4N*x}oyvS7mT8De zBSeT8{5m1Vu|#DcvJ)ECsV|8btJZ{w`haNYhdO^!JM>SLBq}Bm^Tm6ixbeI*Qrsxj z4-Uik6|z)f2>WFb_Sb~8#}dj*)I*N_BZL*=g21szEKw8E)T+udmJv^F?eIzW*)oYAm)tqpw##cuDQbo(Xf!bT&E4TPvM zVTtK`DIR+-C19`FNIhvUhs9T6G%i!+XhW6!D^Sm?v(!cC;;Cc>#_0;Q>33>LVq4;4 zi8+Zssr)F1Hs+jpz4s-NQL;#Wf+A5DBhbtOKmPE8(?W$7{C8(ya6k~<$(WaGv< zaN``f@ebU{4%`F>ZlVKsiUW7512@TmJI#Tc?7&TN;7)horUHj`p@j56v#dYOft&8Y z&2ZpmI&iZbxY-We84lc84%{3E?raBct^-%;z^O&`Yb*_V~E)I!OX0g>Fvp5x>w+-pLdF_l>T5l|>1#cV>1*9$ea(j1ds%;bt(}^tVMRCv=#S|t zBQg80L~!G?aI6)(x~DES3O`xuxLp)J5_wUDpR5OF#6C$?MwI{|`eWOvzmp>ab20;> z@kC}36*Bn5;$>#EUAr{gjDme`X0*(sg7e6YMQR0GE5P0m-wHU48zQ6NKWS4rS&wlt z%+nMMk=Aced5N4QGUFc*or2<`gY(H)KNu7Yg#L(Vh@*q_sW1c~)`KC4^+g#4KS4yj z!BO#`YD&7Z1$0V7(8%lc4PKt?owYREiDX^5icajK5ngcE~1 zL!_G?6ep&EB|b(rNlRq8@hSmD1vg{=xn}ms`IAa>`T$H3;_sf$& z3d>&^1e67~IMeO@rKLWhKq{X^;~|2mNldX}kDhd)Uc!xp3_F6z6zj2(KnhFHnLgAC zw^4cOGGjNB6!oB8!K9GgObXe}B>d``xO8nmHJ(cVlVc08USr}3ymwhfhO(+Js+A&lD4bZczIs#H%76PXff z<#f@*M~w}gZuCGMpRTmH^>r{5oh~+{{mtoOL-soGJ*S)aTHhPk(CNnaXnbHpQ?u-a zHZ&~@$J#PF^VAi_hNes1cNrT(6C>s^J!C_)kz(2qkU|7?iL;un{gBuY{fr@s`l0FC zhB!<~OkjwjHZ(oUh73{EhGszx2vo#|FmKBgvr#jo8CMz=%m}GqhSXMf*BPO1JVQjI z#XbWnVBo~*#SC;~PyXpqex^f&3{pMyF(blRQub9M!jbqDChbBf9UikFLaeAHFlAE( z6dw?{IdDz0M0{rLKogw;B8u<5_0u1^@RbKD$wflB&&>JKRe$U5t{lB&_9v^>zjC0` zaHJS-xclU5-z~buBeA%1Jl$jmN@fg^c2!a-saMpU8zS0YxNb6=#V!g?!-dm$uxD4) zNB<0qV)>8sA-0RvrBz&Gr}xP+ChPAr~niri18_^JW}+-(}9tRQHZT|K4+l8F$<5^xm1QI z4f)hxbn1PUwnr?WXAs1qqO`}^Xtt-WhD~s7Znkd|?6kAR0QB^Dc0|vd9?uqgv&z(W z+f`3}cd+I+8=621RR4_5(QAJC9xYLuqum6zTFl1Omd(=-T&g_XR6Gcgn&}BQUB?*? zyXOSUQy({Wf0nfI6JqycFcH_TgMy>0$4}w0n@ZrpKYbb7^Y`&&&U25RDx3w|?_-}b zi1ZAZ8GwAU!VnoH4YE<-X55EgWD#^dQepK^D8_@r_zs^U1q+n$W%S^`-S)lLS3yYys;X-I6bHHHC}GZ#uh zjHhLp0k#?gKpePRQvW=1LnsDIIGhe&aA0P&^N>r04+!(?)E=W2XWFH|v8g4?l{C-U0&~P2ADuV;;yx z6P-oIAI(Jop2%R-0m&GUutOy=+tq5Ds|ONJ31qxAM8QC!i!)P3_&*NHhDZl8x>l@{ z8Azg>*q53L$N%}g@d=MaX37}l#O^a<^CQOw!)K9*57uRxg5nakIO=Keyw#T<`N)sv zl1LVPWdy`Cd`lD^Jm%^SgxxxNa5ELBX2ZrPa}|FC1kre~k9M57!Fp~H$14t%hAc80Sj80T3201Rl1>#ESAeMrgwKyhKq6d1uqBMq`#A-!j!Ya^w z^{At-DOSC#TPf1hPpvAY!>~L}rNG9s#B;AA+luj+$O0Ox6U zNhT76f#?(>K@@nxd2p9zST4(y>0!A~rVlxe2QmBi*_@r+(3K&_zVu(ka2%zXzI01M zNUl-WIZwwNBQdDrl9kxR*Va*lIV)6p%MFNy;|I#byD228{}v~9(_#TqaB{+7#4`m z4dR4q6DQEM)nvIgwu#QgQ=c&gK3`gRgBbV-T7{$Xg4%O+ge~Xl%XXoi0DJ- zYYk|tSs?n?!{Gu{+>>h1Vip)1)Ylw>^`vnDO7wiG=v>M{53dWP-&%gUU3wb0zzn>! zx`hs_!%Dmy;g%+b!$7Urdg_UQClSG!#vkMoexYZ_X528g^Pa*6+l{Iojk(6}HsE z_9{FE{0i|Hc{kxYNlDQJ_kP3n64>@W~bCav$LiS zCIcSYBlgJ*EJ|XCkZ+an5h6$bDtSn_Sj4`^n9^d`=83ZzDiR6e3^GIcl?a{7qi z8LfEgbHKC2I+5SafVe~esYf(f2g}0-d@e{-4Kox`cUcE_2@1MPpMusK>;tKTb%TP| z?NdYpfjZc)l#&-vP!ECC)xlv3MZTsOiJAs8CXViPuw87x#KM(d2vub_ypy1mEa(e; z3Mw$D=sUV8e8eIY6}%^_8fAD?3x8Rv*ol0qsK=~>#}q1T>Cf~DsC=KfyUSyJ`jU#B zHbOs-BHXma2v>y;1HDm^8*yNh}_s0AKMz}^CHI@ge8l|%UMt-nButr-LV-KH#QVVmC z&LSPo@~~3W+FYYMi)hkPP_khj(pf~4mV%w-Q*VCZ*@6mP&tk1>bV*A=9fWz5kb+^k zPeGjoU2=`?PmDc$3hF30*1*MsM-lszEk*Z~aUkNN=Nj}BP~a6TO;JHiRz0Mb6v23; zmyi#s*h|8-m0ofI-jd{_CMk_n(O$9!y+rzDk?M=sS*S*XiuRH2n0&^{$JtZXp&t}; zJI2&09{>rBWvv**=b>~O=h}$UX>Myp&EsSP*IEgkZPnNf)}qQ&}BV8h$#5BDH0Qg{L`%1*PeA*U-7)rn9A-QF`hN#@PA&3{TxI#y*OI0W>pz z-$nBV{!IiWV}ls;AI03)WtscB(AZ!pXzoFWSf|GZE~-^o3M(ybNb5r8ZYe0iz!2Bz zu|b@lrJzK^rHHwUF^~O^5HFYsgVwv^6jp`gqSUcPG;;P5VmfH0a{n%^D$6iws z+6GZ+T-!F&%GO8Pr}?uj{Swcssj41tAl#YglgwbX>4C&o@%OUCeb_nNAJNEgK*Q82 z$rs^j`=al?rZNexIW@vc!)qMGH92sb9JtL6+!hC}#er*c;I;vmy(ZS-z;!xs+a0(a z4%}r9+)fAX3I}di7LHaz`FZM#uo4Z?X8z4UO=3ZJ7>E+|)SW&=$}jm4{lPJGQ*zlX z_x-!c+bou6^C(|W-DUE&2<1T^3Ug_ZywBumo-GkBl)k5KFnMi4x!Z@rT((KxXHDL= z2p8(cQ#YEt4x!v*piY5qG7zuE)&XI02N|i z0QxZU65{AM9A1X-VT2mbm!1=uL}nbJp>Cg!u` zc}dcZ2A%e`d?8HJ@d1Wrl_1GjkkHwND^P?-A*cYC|4^b&Mt_hHLd_{fGR_mR)8CLy z1UKz=g93~3%ELH1#BqE!$KZTk9!nkrTJ3-XS}x9+=gztXY^nCa0Z|!S%FW{A@Uo+6 z=?6eZ{}a>?&j-6ltMPo7EI*T<8D9qPk<27B<5SWwh)8O|_S0E~+uw%`>xUbufS~>K z&;kF;5W0h`FPu=6jBYK=tslwyBjk*dMZ=OC;K@NY0MV=^V~5(QXmGc}ROm8yimBLZ zZ2%fiC2Lo`Q?zMmw8}IM^B6X zdhhq4a7WoCd7n3VyZnywJk0v%c)jej1RedUaQ8M@_{`+pz|qlPh0?Me?$r+5H4fah z4%~GP-1QFJ4G!FH2X2o8casCR*MZyTz}@D+?RVgAci;{HhfgJFlf=UcYK!tih-Y+g zm1yL416?i90RvHj7$$s3h6w{*E0lK_h%&@5;X^V^80dPT{C5LUiWmxfh?EBbaq$5i z0Z?$<5L$fLU?^z$-XC9 z!Eu8QFl9bvDcGZIkk5KZfJt}Ym%@G)95-Ou%+9AQkEnCIAvB+|6zr4XQiAyuDJoE| z?y0t%8}!Np7v55tGF=x^u@46U^9_3C!7lSjjY*|@cfbpCsw)9~4CyMQtC2pA^a-SE zkgi4gB+{plu0y&W2_Fk(jSptLwX(Q4WvII{Tb;f(m(Nn`kOfa73nRcw~_va z^mn9pkQkl)1L<9)_mJL4`X|!AkPwVu=@O~-)6k<#Luhd$p;-F;z$W)#@G{G88^pcr zmhL_xUoRT%_PaD^0=reX`*KLxEisCoMeIfaoJDZXyj$5WsP7ARH=S?0m*%1eGEE!q zG@90S5>3m_pl8y%eUsOBhMPuLNmuTvk!XvCl7L15qO(H70R_jNkh3~sDA?MQW%l<* zCHsJJR&WxQg3fAo-&^PPe`q$C?a|Jvgl@!AP$sX8`SSxuUOp*93Rx)?XJsiUsc z_#>{!Qc!xqu}3>AnGIWtXfU?NIxEa%NihQDMxE6jI4gW201I8rABlWQJzR@2YZfG^ z00ET{_@F)7Q*n8}n4Zc~Q8~e}M|&#zGd>pespzTRU48ES#oPWUf|b>u&%(pV>W}3W z4YT&z2{Rv<_9HJU^(Hab(Z*bF@|8-1xJk^_HcDf{3e%Xdf;1+q5E|f35*M>oG{BoA z^3_q-O(ItPlnRv(iBMBgX4+J55+6<;x{R;{G;I)%F|zPfxiQH|X zVXrkxn4F~uIz3B4kk1j6!M{+9M7cEEa6L+_(ODKztKF+vaMt1%LZR1he#rzBd-W=h zJR~5G3KSAG+`WO}%7Ub&iW=_Tu;KR6rIA;3h~0~a`B=mG9EL(!+_$`!o3&&`p!LZpg-@hCEY}x%j5@eaR-Rp94H_||t38St2!b02H2@2%XR`9q@HR z-5wD6>-g|MC{{dx7TH+wfU?rlcTiG#cs(Hf$zHSdde%iUb zz&!w5erU4Kx_r%nd(eUVrUUno1NX24_lN`cm;;vqt}IkP>YnoR)G4NS-XWH7s`Soj z$YbyPQQM+>SFGamraRC(PvYVvy+0O4`KnH^RF~H$!I1z&xM}w()0e)!=r?i`M*>+= z#rJM9^AeUU+H3DXfMUq74>3d*?YdaXBw3kRSPZz)0{`m=$tzF!@M}`2tdF8!p^9N{ zG|ezsu`ZNk$xxx}$@{0jKBsQUOEAzo5RIeIA{aAw_XLH~pl>Z*J8H}PH&N(aGMLHQ zEjRCwj1s<6WI72lr6;{JB2$eC3yl5X&QL$Q)ATb<8E&PNi<*{sH7s=Ns4WK6~+Qd>ajL0atSQ^)>3;s2dk}i$dY^LRiTyKo!S=P&;ZH zD7+^TfZQl#2}`E+Zpk|GL{r!`4sO&G$tHjs^{&5?N7K6t<}pB4r%|w8oS%n}{ctrN zSs>M)b9zZgQ(U9wiW~kS@&`UdKJW7O2rV@0~dX8Yp=tzR&DLs|I`yUx> zF~g=AOGZZ$98bwOgBb_7m4wOYMD&sJST~LgHS$86On5CfcHl$ild3pd!JTH@vRV5*bx0LuigX>vgPa~Zh|-=yT!?uA9UW&6crnUv48x{? z@Gs)RP_n!bge^SfGU6N(mHZ51=VvPqX|Y4(o=P0(#9tn|vHY9ziezLugyMp>F%mpv zno;4=@g0&{>R1k+Gy$!iJ+d=+>N%tGr={$l8|bh=zc3KHgQuSNAsWXo4fL!~{>nh? z5T5!^A0p)oJ`{Ej&&ho+n!M+H_do~4?&7Imo4n_RlE0(Gyk83R8w0V!c@O86n0AXdW1Yq`#m^@I~<+U%MRSD z4%`t3?sW(54F~Qo4%|`TvK{4H4&2)g+&d23F$eBF2kw0buG@jb7vK>nL?5S7exCY+ z(ZTOU2d^6FWr2m~@UxKho> zWsj3z@`V{32+61_6^#Mu(t}5g>a<2Tc93C#W#PFj)VV z!cmdOn`rZQ@PPQJX>-cM9p=3~TfC3a)PJ6JIA2@Aw!laO_ztb?_Oy?Tv`V~UI}!jEK> zbwKux9)ILTR(`?6FIKNHj6);1g76MzCio^5ARMzZqp&7m+sYwDj?DQU2}{}5M!se1 z^Rjbrb)XF-??Ju&)Tp7V_U{Pc7_)c7_+wCq zo%$b>hUavkWjRuBy;+ekFDgu(jL(4b4&B4*&DVb4L!5v+`q4PJQaCTkJLC)J^($A^GV!%} zOkbp+g_oAgH^Sb7-tgKy*PXDz5HSYd(uD@WAfF8Speg)Z^W^FBgwjC_eq&wVu6yaBa{Ynhv4}NryTls&jEJtdlskQje5)A6 z7pl`xb<=OV^oLJ3VTv_GzsSK4z1F^q2aN?8TfTg@6u&APuKPsr(1vF1`#l)iKz0PI z9%m43*b4ANtH^^EgQx`aA<{B@k#CZ6b(58)Exj+=eAnpqeMN2Z@u<$Drud*#LsS4C znQDl#Ov&9+kM|9P=@#<-35Wyt zXE8U`1GgQhlZmrs0KY7;O}&`76xST2^Rfmb;_@9h{ES9q&>~&Rfh%?3${aX+U$O_k z{=j9=Dh4@lgB>{hQbLb=hdFR3IdCH!xX}(=c@~a(qx?MeFQbDz(E(o35}oD?glY*y z3Bq&x5Ve&A#06ql8z6nqWfvvP3p4Ov{S5`}Dr}$f7+ChrTMF9R^@U&WH}Ra`3J+OA zmcXABBf*vS7p5q(Pr57%nq-(DcnWMOg5gwG)Vu}O7g<3rNTd>cEa8hKSV7jj(7r}B*fmP%U+i~*v($O{ax z)EXf4`Uf#UU_i0I4Yn;>D@_EOrYr?p{pe|LkG@_AVYmEuZmbx!XP?p+)$`WDQDnr!E9DQF{78(<7yT*ju zsd;M~W6kNxJym4vs-LtYWuX276&r}o+*2h!L>E{Jh%x4%kOgv{(TISNds70SK_8YWOb1924aRDU00MFs%k8~7)MDgrbs z_OC&lrf`o*N#;cOaO~cxx==!a5yEyLZe?{w*juGK96~%b$P_YKC^=H6t?LVa^D=2w<2QGl(DDIHhFbI z`9U8FbE%iSxhAhZ!i5^}RHeyVEtH;t&KIc4K-7V!=J^n7U2UMXLRn)VYQa;rK19m- z23jwa3jhW7Zf%`s{a7cke?1v%1jn!r*$0{&xJ?e+W(RJI1J~lfwK;IxfMblSc$hB~ zbvSUH4%~JJZifSRnFF`efxE(i+XY`BYbh9og?R)KuBBj9795QU ziEw38qorW17R11fI>MFsl@udUF5|awDgKs4%Ys2&m>>vnEd_(T;AljEi+zzYaUw+p z3SrQ9=}&$*D7`c7v9ZzDPAwG!!Qg1r)2oI=Q$n`zSgPps>arjNme)>KOEA?W3Off1 zV=&d^D~us%Q$#r$6IO=CgoUqpSYb10ZIU2ZhrLY^5$e0cGShck8R`76JaoQoyXGED zwb(&Dwb&TqCTZ6a9|}9I&62m& z+JthY4~4mGlf0S6nQx15Vb{k~c$3#5l(T#&%%xNEW}Cdu2p2jAPn}`%whQH%2HGLe zSq7qO@YEb1qH{eP5T^>T9zf>6#bxNq@*u(NsYuL)0poo>F`291`tDt4UNBV13iU1! zO@@e`3!&Hr!Z-Zn2}B-mB!61gX~Qo4)t`Qno`*%{e6wGN%cXn*K{C9kh`(XezYMe4 zfqIh=7oNwF`@E!ONka^l#xFy!N0sfng_`Afuw>V_zpKcW@q?&*pAl&~R_^CX74c4^ znD1u~JyLP3djQ(D7aa=wMYy+T96!{>a_JFwicmiY!O>uMTETfV=$#SyXiT`_`VQMh zn)ptcQR+9ecSfqJ@1|F>bzdAPUqvsHr9X*B} zb9U6UXO5%`5+4PgBjr^nEj%I+ceMj|jRSYB19zPRcfA95g9Eo4xa=K$dmOl%9Jsv> z+&%~HHV1CM19!UvcL2D&(CAKWQGTAPGCH_QG&0YJ!rHo8@~TbV)xNgKh0^s@jmf)4 zC~FOLtw8e)MEQDZfe*2ZFEr5gLb=F5l(47H@gY(!HqdUNTw)-~*i%b=h?L8GDBOmd ziezI{doDV+e%7-`DET_yb9FF5Jj%soS z6?m=7{2t<71Qj6X6TL9`G@qP3P^q#u{qu=?5n+Iw4|?3>rhEG2MY=MwN6}FkJshqu zKYY0tUI^UzfKGFl--4YujO*FGAG?1ev)#^%cnnuNVxsf^#i63tVSSb69Mj)nL* z$|~jgH7JZ?oH3C($*D1RlC&tJmaXOxfnqYd_hu6hta1P7^aMxbQ3O3e#}hD=|1lO$FQ3q?oJ2pE(h+Q19y)D zcdr9?zXSIGaM|wtYYyCl4%{~#xQ86LhaI>_9Jt3ExD0S%mrvbMexAC(=->{~!G#98 zQ=l~lq69s))`zIO4;kp7P=44zl%c2A`4B1B8|Yr4Y%ma|=&21pM9M}3Js^}#2BI82 zmG&W0ZZyz?Lb=I6l%%IN`w%IceJJc;ACmh%V)7n}I9SRVKZ$Dc9u~?L9}07MMDn(p zyhkEjs0B~8nmqg*F(5vlpyV?GZ3E<^9`*g%w_r?&eLDR%(klpPKmP;fjQn$!sdW_SIHZ+ zmdeg-HJ@kneEkQB!wH$y50#PWu;}R$=z^Q34*R-5!TL7TLCVU6{$il#Xm?mf!hZPt z`6yhQc4=z;SIIq|9);OI@Vi~c2A+{}FB2Q6P^cU7@L81?^{-nz0~;t)qb`%*!ka#$ zstcA<4l3FKs192y{^s|{g#OwgX~u$vmXN?Z^p-|m?33*>vVX~v(HubbYfC0C_HlO= zHq<~DmW(!m5`8jG`4IVG-wikT`eZbWFqv%H^*7iE*(B60Y8}tOI`EdB{&-Gd#=j8q z2_UCP!L>pEBE>T>6}&FUFpJ+(MFmQ91xQMp0qF)!`T}$f(jOld!6%d{3vm*GN z5Ij}*tP#Av*5cLIxhVz@ z3J)01N!}GE?>VWXeR4y$=&4;M?|GrT(ucxaekpk$GkL#^aG}%mu&YiFG%pC{)qv=3 zAUxzXuO56|$zuiR2QO%cBpdinFcg79;*NzEtV2pJ#@#Byq!{`?ya^xGpFB(T~gYE)D7nX#+Gu(2G3AdD% z^`db;T;V_^P&>P~;>Ac^X?Yy_@V2kf_HU$?*BIy}fvyF_Amf9n@RqAv6Cc4`_)=v9 zjPnxv5Lh#y_&qp=2TtN%cHmxh;Ep(OuRCyWIB99aO*Nz`gCjz2m?gbKu@{ z;NExOx*a%`j7~tP5z5a~pENr7z3AXmKE(cqjwd$tvgBQ7@?I93vU!v)_UM?rSB3J^ zfcTvXSg7y-8`VSeP1wKWz|GujGuk59KMf5|&uO{R}#PU&CTaVyF#9AJMSPEaB6CM?)*+5@nTINOE3~@ev8$^tWw}$Pxj|(NvTm!>M8575-GQ`Czd(P{!;d3ARoz zEYNRUpzb!00$!IEb)rRu>O_TBLqrL-L$o?5nTK7CRb!>`ZwP4@NLln7rtuUDT?~GR z7daYYtiIic$kGnQM}@}@lXp~j*gQHQ{AR1kdrK%UHPG7vU1lJ(U19Rx6Utpa6z1~28QRl~jBHw{4a^O-9T&V+B=D_uH;Q9lX{p;+59Js*_ z+)xK@m;-l`12@8f8|}cA0~a31Xn%RY;fM2#4)R0?pD<9qK-U2$)4Dlm4K19mv4OAwSUp7MurRb@oqA{&@1V)X_@5%rO%7g#B~aOKb?`#l%5LdE+p6G0~E7Xfi*slfmw`q|9;n zL1L^jWAw3P9G~nmCds%=D-^O^?2{FNEI0-wWsbvnZ@_Id?heK(5)Vpp85!dxhfEeo z5!_Ye^=6Bp9u@LvT>C%+6_Ki#|U2qxr>U#Y8T+6l-@L9JkQ|)k zO9M4%bwH}eFYE80fu{p0zmvlkgs>QlR~$#me0Q*D?S5#60qJ00GpGwho-Y9@3JA%U z;pbqy1#Rnc^f7&>m712Fo)Hfg2^7hP%LbdKraa9d+#34a!AVwHyK(j|Pd#9)XQF35da1$K3i4NQ(2ktZn?sNxksslH}ft%^T&353< zaNy=RaA!Mkl@6Q-TzEyEevb0<)VGWd#)=NUZJ==iJ!~LK&{L225Owz*9}3&bM7i%# zlQ%J9E0nLN9y589gfinpVJ@dh-s2|kv=zhU#JGhuzuMWY8_en{#6U}g@;e5i6!8j#50UaQ1FaCsjDaXePd)BKr2MXd>V@(N z15uKmdeVnT`8^*BTmSiT-}g=4`4Q`smAoIAytR=$YQa-K zGV=Je^@ff{l$LFOO%B{92X3nJ!|qd3FS|GD9mNE^=1}lea}EpYx$GmlnzUxyfsZaG_>A^$U~N zCX~%UTskH11(Vkq;XP3^cT_}I;Lt!pE zB=5gW-i`fBSmF?p8>?-iN|mc1a#bBkFdS z&xQSxPfPW-{GcBO-%!^$jz?FawCsL)wF7sJ19zfb89k|;axC2=@N}cla)GI~@SBXacV4$l7deuObpr?-bP!iA|4RozgzGfiG z&{MDb5Gmg<(Dg$3Cj(K6p8B&7k@7DF+AWkv4MaKO7Y}`ilz;W1uvOh8_q}EEZt|^) zt)-Ol4z$VJE0llpp)i+ylJ|F$w=cqlI>7t;Chs<(Jmy1TF8d|#A0}^qgbOv~sdr7@ z?LzsU4~4lLki7Rz-T|Kr`w0Rx$Gj%mXV_2fKxx_iXntdW^7GU`jSlV*jr_}p!rHo1 z@_vWAX>oV@+9E{h;$t@^?=GQy*+2&cdc{DLFFwNJLrFld8t7i3JYpb97(LO4Ncoz9 z9uUgc4MZ8EC;AX6|74&Ch4Rk^qLk4SeTbAt4fK#uzG)!J89mX5Ncon59udm74Ma)f zgCjmf%D)>ZBb4s|qD^yN6n!NtJ2unvlPAD2tS8#}lMdWd4%{IJ?r8_^umksu1NW>0 z_cI6XIS1}}2kw^++zSreiw@jx9JrT&3%|}oYoz?J3T|}pgy`TO26|GUcMU`d;#&_s zMBSYT&%>|kJp~J2EVh0~?ip_8&6K96PVyn%Gr~ZJg>s~UC{GVx=F>gq8Ohs%^%{PA z1504YL%}%sNaq=>IS!GvxTNZHViG^uou^L3yMyz2YKa`VxNh zUT(|dZ7haMW%}TH-ZNN=w8a!ViwT~YY5F3+n1DX3m@2R>QdKDBr8kbq7fhbP8s#Lt z16OwK7FMA($rIGjzW-l)?*gV}RqhY3_b>-$24;W}P!L{+K@bpzLy1YvGs7UD2n2XY z-2%c0=x~S`52b$)7y?*O--}k!L@mY^)U9)D@n%t7sj@HE;txH@L%hJ8E zY*iFkYOX@c<&rY1patsDeX&iMJN}w7#Faw5r&DT>fC?}T&X`0YVzJh^n{c{zu>f@t zR`TCw5#DU%&Gk}zrt1ADKTcP4pUQh#>~%qzW2AD}|4Qdej`{D_@l52yMc3FC_G5YU z1NN>O*0Dr#D8++A$Omh+s0eO{;x6Q|VT*lljhQ{U80r;&( zR1-xaPFAiwDitH&Eh_vNINUkgZN;t+eeV`QFica_HDcyPSAaJySc89Favox-7lg`L ziq0T1CwM9is?Jg`338~V=nn9HyfWQp58=AYAn9gbMT$vxLf&fu-u?jZK!A5Jz&jM+y%FGbfmeJu@o<25B*1$s zz#@Nh2+-j`K4oS^(7Gt%ndRnfsHOT8x4XiHIokvZ8@)ZG|RvU6{3 z76vDu{cw)hXXg3;reiH4c8A=2*bjH;cElYb_I$Ee4bKOJ?A<#AeO-JQa6dLMfRMd= zhfuf1LTDOt!bgrRIz;TAx^}S~_O6z6TvF>qq$WhjT`h8m&85Nilq`oFIh1D+9ikG5 z__H6oGAOAWIV1x6?y^~-2)fDrY5yRh965BT_>_R6;uwc2e30-hxFflz zrQFDagvW}%I3U^_3ysNsxYrmmHzv<-?7HiIxNOeYeRJDU=#F{UF0B_CYBZ556Qfy@y3V4dhL7-^EkQ%5IUI?To7~e|R@O2hJ8wTPvhY%ZfZ8(XD zPpLTsZ5Rg&eHvoJa#M>#(1w#~*k@sJGQ=Th!${+GR}Onhtwa%Zs0(cvh%Seyphfh= zZneC%fawrryRkPF)vb0@1r+xVksEuAw?%@-LrT=;+tzOMx3+2ht*uvoYaR8swn+W0 z<<{R?Lj4{0PxNo-pO72#epm7yVyX9p%2|pY4*ip-sLMJ~)Fo;H3No}3>Q3k~V-Z%D z9wEAv^MpjyBMsGM%1cMCmt+49$Cj3X45ipDtp&37I5|Osd-wr@S7B;Isa8|97mw%g zu^R&}XrvmQ7w<6_6w9p=ipwpUMKg-iQMs8vIGu@R^(0P3jIx^bC^>_OS!1R=UmoYi zHVY})GG#LInsOAC2+AM3w~*sdNR@gr8A{dtj&*NvQ8=Zom{|8Fqjgrk`d$649#(&= z?)A6&5cdBs$@7iu|MRJTD(Lqoru5ELJh+U$K2y}Ek(Ukd$^yLd0IxE@s|xU{1H765 zuWx`?8{qX1@CF2U0|UH40p5@RF9%-oxC%8)`C;q^4J$=`4+F(k1bYAl`}nomS|$_s z>OZsyZAB@MkX9spwnNxfk(nUY=4}HE#(*kih4vj5e7Z_ za*G~~Y3fAy@d($lncrybtD#4E)8HZj35nyl!^A#9WN z2+^Vp)g8iW(IZ5Q;yN6{Hre00LWmZ7uu(gN?dCkf4#e>wi9^_S>k%>#m!Y~tRH@N= zgdEkCBmWM;K{%x85pqcR_M1yKiyRV%{UTXm*}{-YG) z|CGRTFConmt}qU*8HHSMe>VRJRmYm@aRHPRRzM%$g@sTs$QJLMX& zIqk%2q;)uqcFG!;vU2>MVq?l@{T-h*b-!63wNQ4182F>qwBEi_hjEsw6>7Yt*cD>n z?QFgOYQobwFn=GaH~zLgn_QVVes(?*8V2tqx=4bfE)m7_bDsgfly-H-w-nx7^}(O zsRjmWf76eH3x}|t$|Iz8pO8dYEqa7_s)20(Ors9DSWo3kBK^$?2ukG>Iaw{*bcSkw z(~o*yEAks8@|y(tQO<)BdK@IOa(uOK#l&rYP@=yXl<02;CEETVl+@Y4AXpWDQ*#_p z;^H#otQ1@2hb)zoQk@2hL-);<+%-8%Zd2}MX5rs=QV&Agz07?4CT&kRBE{rzltcIW z0B?AJHzL3r72u5y@Wuvs4d4~;;7kbcCI)z?1bCAIywd`_$pKztfER(6d^00CDA1tnwaO9FXyKI+Ovl}tfh*$Cs$&g` z@MK-J&m)w}h@;RBtx&RgyaON|3q?Cb;5JUS$xLN8NOLWL(I8jNktS(O-bX7(j=0P}D|g$v^-h%pNpu|(W0pq)JZ97>er}~Qq;wTo}zp&@Dv;D`JSRA{=rjh zgbP5??naBP=?VMMQpk%ejy@IFKBhIdu~L%LE!7~@G)vK|;z}b=u^*WMimn3{1*IP@ zcTdm-2YEko&LRrk)dbiSW`}**(>g@#r4A3H86g? zAY}GZVK8nZq7HE=7yW2S{W2Wi5a>}K~t(m?_OC(xSTK?Sv^%H&A-b zI+kH`qQQwG#WT`ezHcxSt)$AM2+6D0z#tgEa}mGm<-1(IyBc-5exhhhwZ}dS*F_;U zTE{7p_DoAn66!2VvDd<${TA-j^AwSDErmxmK+OZi5yCsNxOY!V zZ`IkEx>iO9lTx$fUp-^N(ZCd>nC$h)YYFhC1$ff~yfXv5nE~GH0B;U>#T$+D0=)SF z-njwZc>&%90p5iH-hu#cVG)mdrTii@-|AqB=-_NnY-_MGgvGt)6m4rVgXw1xaa)5) zA%?UyE`T>V1lw9N4QXrgf?kJ++nS~!D+MykcL=t%WE#@e_{tZbiw*>w>ztzPRn`(* z8f<6Jo<8{#jhF01JDURMiZ(CXehyLG#^NnIhhU$dOhZ-*X0v23X%x_S_OHbxkGWb{G0QhyXyB>4TxA;c~v>Dp^#ViIuz&87cBb0mA`uDJ=AHM zdWEJ;OQu)87jvYBTSTYlK&SN2EuvF>6t=|=>@C;wl!Yi6PJyhTcG--o6|0> zLZh7~BUpLc`QTb~{tiXMoz_^h_?!)OQ1moe0>G&dq*Y~6_2dH8cJ=o!+3=Oe1XZCg z6T;(yT|E6qvkSh_Cm-W_n2iM}^HFzwXn0 zhtwh8Ghtvz&p#WqkFXf-aXeYzNz zlZJAVHCH_As75qhmNe9ere~66WvS@OBXd4Vr4&u(0#I~qs0pZ80%s;%TYrlvbZuuQ zT$@ACTIQ~}@x;_md1uL)I*gE^h(pj)lDUX$6X)j;tbP1BQO7%ZEyV!>E}`=j(_Ct)3kA8%QXC@S&K*w?c_}E)`Jok1#%!_Es|9Eu zxKI~{Hgjg~>^XC$&TU$aNm&)v0L-Gcw%p~bSGTUwh}vxK^bxsOfQV-;zp8b~ltt~W zal{p5Ee4A%a)I>@yX{PAL83J=D@=5a`M`vUid7H%n!VX_0X#75Sy~OTWd;Z3xM8GV zZDKR+&6x|diAnPafN3Mf+-YCiwm@4O_U-agZh2u_?&8*^%U8Bvxx8ap`|3rDZ7ytt z#tgFWU0a}ykS|q~h}D?yLsF}kOBPO6%y#W0p2wM z-n9YV+5oS!h(`@jevxUjcClEjWCf^Fb0Wgj>p-Q3Q|7y2Sv6*G2^ZkltztZvj({8q zWZXOR=rm$t4QKFqX|8(|p&JlN3ri!Oj*Aex`#5)AxK@^L3gWPwOQd8gQ8HdVu*8;3 zC(|`iR_teqq&reBIiS9AjVADny;Nea2E{uj&_WOvFSRbkSVAsd=lKK|~_I+QfHEEQP1+Z-(*pj66+LPoGm?gRf?Ef10kkOO!x9 zOW`h&eKqP;n0-7J;kn19@O^;ww9B_~Db+=~b>p?j9x!zBSWCqX>b^2;o!4c5uyNc& z{UWATK^R{Q$!#lzoklib@{#4y%b>_%rk?Lpz*jae)#73YObZdO=x~ zVt+b6r51o{fs)UCo%nH?Q>``Y)TLM$A4)c0Z!UXv!*}0)?GeJnP}K&rx^(E>2Fx>8p9~u7OGy#^AWeO)F1)4;^ zcc1zF(~qZ-<7MbOVQTLB{d&f)r$U=EE`mypWvh}1JrDsZE6-cim*(r`{ihP)B&4YQ zCL{3E4*mBvNErGTLv~=wv`w^qHe^cax2a4aPim*FKy(_eQqs5owG{|MVro)_0cBUhGTm6YLJORW~_JWJ8{;@Vc|{#Xpfr$)WUuys(QIE89B1()dw$Rwfdh?!P&SMog# z@{Wcyvm8Pu($Wv#cG!+lkzX@+rD6vk+vQr99ZLmkM5(B&4$;m9&;YgD;WdDq(a!ba znGW%$PF%E$4zUy`8IBV=q#5YUp+js$XS5xzIuXnJb|bG&V*F&`SPu5JSXxIpl%iey zgQc#LGG1gU_O`gB+EYX>wA8hNTx2Qsw~@KnQ$#KXMK=O*fU^C~V+OSCNYuod(Y6&9 zccL_?wd!s7DsXip4n~8r-O{6kiKSGDx1m#VFdCHYmY}wSS$S0l?OJ;;!cJjqz~awZ zxReugD~_rYZvuZ&mapdxLiMt2QNpO>5S2#utLS6L(}yE-VFiXh5+xz0Pm&%Z)1SB3B2Ol$u|dh zTLQeT0p7L%@0I{>dw_RqfVTs@KPsFrVj=ZuJG|d zf*Eaf9-ez}uJ9v}NZh&!n&kLf>2M1xG^DL!NG@JW%u6j`d&q4Xko2tOXb8(R7hmHqKMW9q#(Otuj0T43~v-=;2c`)3TY(OF#A925 z9qVeliS(ezHfe-TtQ^~HlTNiv4u@>>t*MEn& zl%j=w5fm*9l>imbyl)W;Yb}L8)*;3j@C}5~!jdqKSzF8e)YHKVE$kMtFr-FPi}*i*WUXSWQzWOrQd}LSGWU^y(dy#d_d@Y-jLbNhXvrDk#kPy~w?e+u z-gc4i$dvx35J$>Ih}*qW*ANP%+M-xjK9Sc4v9&7p$vt}rV7rt@SI^j8MP?gvqi%1N zyuW0r9YTE>6bA-x%7*>Cf(?3IH~VR76MPz<$l?0gZAdZM*^zg9fOkiLcV~cicYt?K zfcNbH?>_L3y4)kcdmzAjD8Snp;C(N^dpN+`72xHIc+>&q7nxhE4sH`2Z1+?KVeV?m z+a>HPHtcq>6c<&TRYNcmH!@%I6kGS#LGiX@tj~dpo9)n&9=z?i zLX71eN#-^{X@d7yLuD1HiU_xjs8M}eaNn@heL{WHQuhn;4o@-j4YqrHK#-rd6x9)# z&v=T+8!fd{kT+S13PHE(DIz~-sfPu*(Na_ix>ZjRd9$VRg8V!v8vl#wzE0Pn{E-fr-UN5#(vcrOHadjhfmwF!4^wBA=DQvMG2xC@)UKq)lyFha+{?n!^nKeQ$&8*QqKzV z7E4izk=gDkBEMp(-Gcn8r6|Y9-0CSJcUbBLL4M6rlq4FIr-;1GQZEVec1ux~k@<$F zi2SCdUJ>LSmZCHx+!w3uYp;ZT3lw+5(77N?KkSqCqC=LgU<~6%qB|lY9_?{eU@t~{ zK*&3J9Kv_QJ3I44#AkXOA|B&uF0w(#KG)~MZYWs}InyKC+AfX4es(YVS+~hYL>=-i z>|gg{RA;x(Ua=x?Ay2Z}>Jd1zWU4EBj$?t)&vZzh|4Rxj>!FNy%!QbMkC4*#yT z!?S&Mct&5lPlji@t+fVQT}R&~ob*oLl==Fru$f|S@LGVkKfpT>;2jL`4h48`1bAKG z6`!;}9N--Z@ZJjW-VX5I4e;Iz@VWy$lPw&=&@)kfxThT2REn+h9!tF@n*L`?QG&Rq z+*3q;+f!_vu9H3>@$R!>2gE{L808z8f3aZ)1^FFMB~v*hVfWjxLj|c&`jL6ShP@%k z?}FkoEUXq`An@T6Yj40);EEca{%cMR1LSnF1VWHPO1c~3HEk^8VS9j&Ak}jvyPl03 zJk0dDs;Aokk1?v=2siA=Al+tatzadjfY?f33#MfprZ^Gz&k}1jl7GEq? zp07y2=zU@-4#~>GIAMID6jP(YbcyI61da{3%Q^%7tuof%l#-6)yQJ>!x7JEAEWYDw z8I`YYkh!rj;qr0hrW8$Zr>CfPXJ$vFT>omrjuaRVn_6W4&4#@t$nRO|ZJ{2v6dPM) zzV9jK_lTw56XY&SvAIPi?irRY8QyEass>&taQ#PzTn+&6TBlENks}$tFTdGQ^XDmet zM|cUImaJOBp7T^P%^C^&kqxUU$dB@m@G>_|rLQ1&TdG#5pIC|-h|Ett#ri#OsR4p~ z!BW&gWM1?Xkw5cPvSfoK-X0q^sGwxjP-I@RVM7G@b5Qg?a3cuQ4+k|vG}LLw~dVFVA!a$N=MSj8~+)tA#ayyJj_$M@tw%1Bw+Fy55h*F$b}m;L$W>j)<7-<^6DiF<#-68N;4l0 zc)WDS8jppO$Gb3&&*rl7DnJy5P&TKWsPR9bMlQhQtQy_Z8ChA<%Vm@5;F4Z0tCF{i z()lLnva3y|HlkX|c^OzDhDs&Fh{Y&S`-!ICja41Z$ z*kRQNc*6s{5dq$)0B>}FH#Wd)2=FEZcoPG>Qv$q60p4i=-sAwUF~Ez8c+@uK7vV*I z>Rg73?q9J~y->ff6eSp$|MV1H#$Hb)UB(EBx6g)+C~z5+Z)ARH!$t}63D^qDGFqq~ zSc(#cv-XrYYfz-8@KNe1=H>Rbswub$rBR|1vTe3KtncJ zM@`FBM=Pb@m69vl4LVumK+BjQW%zeXO%&=GOR?pkll2tswkusydvagMA{fCI#-Uzz*$)AxQ2+H8c$0l_VR zCWoMSXMpzmUvQ^~}G%`ipEC^YjkiO0#Xj>K`xybs295Hr?xc_2#8(~#aQgmGo zQP_1g!k`3!Udth9OUYd1U_QGeLDV5tn$f`!fJ}#|!v3le{S{Um zKAerR<@xeBt-^JQbuh`~y2LrsLq(#i7f>Uf7>K++Xk}4>?3I(0wQ`cORZdctnyQl> zrzVl@!4#X6h;ot=(AciF8k@D!)sFj0i~F?=_Jo3)6ns_swJET`;(o0qz?&A}O%L$S z4De0=$JqJbDbu4+C7-h*E69Kl2n@ z@SiQ!BG$CWQ^_z&7Xw@yHcgN}x72i@{=-s~FZxkWF~3(VHB*qkuoNYXe$-P$zGwTx z*<#CX5;8~P{l$jODF~zdBlErunokR_fnUX0v|ZF)(7w=}?87T{eL;I##Ks{*{$0bYB6*Ad`d8Q@(N z;9V2oT^r!74e&a_OFqHO7Df3*ro!rAv1p{yQcHxYvJ@p4nVz1az4x-zGC@{biZYB$ zji-q0ZK*av_OTSD7~$Q2YAdTGtkzPig*wJklq22?VOv|fguUyjq*ZlD*n2jt!&?<= zODRXNZq4sXLB8*)WGYulSho$ksvs5WATnHPW180pGG(c2g-TnBT8Io*ngqF4!oadr zGQUm^_esbBKe2Y5FGcpCz|8w0$X0=$g@-lhO= zbAY!cz}p(&Z42;j3GlWDc((?4JHSi&4Qi6|i%hB2!8*}M87N+vfe{QfX*!{D&)Fq;Y8HNwbp70Ak^nj=R{#_aRaPGx0jm?9 zg;vNLF>DOpHNrgPu92nG+j`Mdxz*cx(bTU|Ck@L&Ea!NN^1Z-Q96v7f6eY39Q>@~} zpg8hdZ^wU5?|4JYA%6 zFbYaP+^F5C%W(peB`*h4TOyDTRc+MeI634eo4O9>hUA*!MqQ5MHO5$u!+nYl=4O=+ zCd+YLu*2#jralfvb;PT78xzZM1*vgtpM>?)RXex1=TdV6eyzeld8DC*&mJRFJOWAB zaMa8%!^yKm8?(K*4Cju|wQwufmyb{W#h;DYYG&NS^yCxu7RD5L!-9My#m%~~_u1^G zEFV?|v=>vP0d5k5=naG5*Xt(?BX3wdy`E2xR5s( zzqR%f2gUF)@w-~`rVEcupOl*BW+_QuP&|K#A{W@)W|$^kge-N!BMVqqX?oEDX`Fu= zapA_t{>aBJHp4gp+&lZTTUYk^v%E2xz~KyVDQ@b_6Ico{LmR2QO%`<|^aKV$eiP(V z77<#8=RM?r>0sP1=F*D|l*QT%14Vi?siV^?G}6s5Ql!Vz!>%IClqP!UqdNzG>Y!%I zhfKt0^0cKZS)qY$#*7&t?i#w1F(sPkGhdtf;Nib8rQsz~eA*rF?P5w4Fx3;=@EL}3 zgO}xF0D8d}fujKQ=9yoE)HcIBv8YV*tjzavbv1cOmvC>Q7G6#G=Ij^5_N-_uoW-E2 z#>LnQQ?=(zdFViEPD9-y=1~jtprLND=0OupbuNxjE+`c{mbo>NH#EbepsD-TL~5v8 ztf6vtzNJ7!G~F#C4?SSGMXQYRBQ1R6h6zEisCvMVql(BJgVL~UTcvFMK(RwZ6`Y}= z1ULf>)Ag^vegP1i*o`+h^4CX%aQzYO(%T{gBd>#;%t%rwU?D4^}S8>jiaux#gU+#zELNrQ@-=8XmSsuKGJ=UZ6YaqAlV9} zJfeMVlbWjqZWC){#h6Zcgy#YT!2+rUa=eOHL!b;S(JfMKBXDM zV!P7} zCDlQe+9A~Opg03Nzb9v4?rt#7xQ3*!#eLVG!^+KiGd(pO>k^!8-G&sCvkLNV5Af~? z@a_!o?hf$o3Gluh;N2JC-5=mR5a2x&;Oz|Xz8By<9N_H=@bX1G>VWdY3pcC|ZWA30 zvDEECqQbK^Ucv`|fSnw*@)EQ^~U2Ct)Yqu=@&9p>BAnUUR=+kfSX1fKa0?MeX3Wbx*PG zV=T2(kYg=H{otN!PZ2rJQV$Dqyrrn2$V~7QkrOSI7vu*(6|P3aD{;xAFg%G&yMG)h z7Po~b0=y>!yr%-ZX9B!u1H2yxc)P(XUKx2lzMIRc`9jtPf5JfY}iu;_DA{R245TYj37Vk zsbnh8O4vti*s}$xQ2LQ+v|&FMWaO!2D!V1D$%gGNNQJtIOtTGpUXW8jao-M|0>a|Y z^XMsMuPc>rI?f`pMF`oqlcOFE;YVob@!8SHzMZ^0$syt{l2hL2F)%|eeD2Zb68Dap zM!aw5(ug}omiKwxx092{4&nPmOxK8zeLHy~&LQG1QFD=fJ9#k8Aqr=<&+Bzr@>T&N z>X2$Y?9wy}U+?8m@t8}?A~*E>B>Mt-Xq;YlsKNo)9(2*z+2d}#T*-5s_|6wZV=d4a zd*~Ou#v)N0zwKG$T}}QsNB(Zo+Jy()IeK~_F}`}i*22Zq@zo15chT_`TPp5-MXqc= zd!!7fgQC@-oCP+qCt)?!7D21|eN~T*^MChS*u)+T@S$;8RB;Ge&FK&P z)yRIZL(ppOS+U~F`v!bR5MniQ4Vy#IYLdCcR^t$~ns`XNN3Diu4VoN+Rx|Us@4vd> zcfW`7RSL(poHX~fsCIRvd{(&Ce6{$TwfDQSGeBoTE;l~!}Xiw~}tRP&f1yw%7# zb%&zWTwgh(=KWU>2uiHxXW5ssm6!}liJ4Zh)yOTAJjozd{09T z!%L#mY0xQmXJ7I<<^1p^nV`AY%1P==IZ6E}C#etG+)FZ?)te<>l99iYw1!f$E;K1a zO)V)izqLz6Y8)v_1Cjl|Z5UzYmLur>^N6xi^~2^)T0Y#1CMcKq_e#XrvU zL^FF?ZCEVSAt)1z$P*EtSa1l+==y)1^~9~u{Q(+%Sv{YeM{o$rEVizfF&~AV#6lgS z(DS{lHY^_4Aqr=oFRKlU*K!C-I$4hR#DYUm{z-(`u&mP&QHQcqANS7avH!##oDRRN zrxkdpPHfnrsG~o;K4Z&6tKX6uiw*xr_7$~Zhbpw;gX;Ob4Zkj4=M~Y|8P-By@fxGH zUn$Uza+2CmPEz``mshfsw$46Z@l!1gp$yd)Uy*sKlZB>~l#X(e(ojya=9;EjCvA}< zmB^fFZE>&EY^J6533V1IjtLLpaz1_bBRM9_<3z--Qoq6>>u2ql@KvOk9OrPH_*#Is zKfpT>;2jL`4h48`1bAKG6^{uI2Y5#Uyte|pw*$O)1HAVFyzT(cU^6iJ1Rpg*`QiR+ ztAkfX2eU2pnox5rMG4~mYfo`ZIM-4K1Ub)Alwo8}MBmFC4ocW?P+Zx8jUz1n9E8WI z=ED+tk`DK!HJy%QK?G(2j1RsYlqFpNbwyz?jM@Qd@yWYeN;O5j7mABY4#c= z9|z%vBx{~(!|GEy2C{t^y`!R;x53y~Gw_BUT|RXw(kaDRzpE+oCaQEEuV%nYBOEXu zm9g#z;hT^(@2-**vHIkI+ReH$9)?S>W#nyFgO?CUsU8xkjzC)Mw+?x!vJD<85S?<8 zGGePdB+G<){p=y}2d=(~PgYEGa5d1_EM~owge@V$9;Isg4Jp@1Pf^=$Zrmkdqik50 zl-Y%`okVy+xTbPgkSBxUdvqWKgz1MD<{gI3U<8JjFV#vP1=@!bby)i-o)q^8)?Ysy zuO8MuN=9NX4I0Ov&bjpIgHI|###yo#m-cr=tkY?O7I#E!RIjl*B68MitWXRopIc?sQT`D- z%BSTXv7>ywa^grqtue$WgajYj5gvcu9V9*5+WQSXXbKX=;NOTN0} z*NAwB$>Pc=f2X0`WXI#U^&HM>q@he5xuqd^b#m|Odab+lt~tfD>j0y<$7#O{W5zpb zaBlwndSGe%d-^nfexsE3T{uk~XqKy_ zIDS$b3rK~%Q+-13Ki$~{%j#PqE3$kYgq~E^_qn_$GMtE7&>r3^kfCz2sHdv{HTRy> zT+bN4S5Q3-WmQ~gvZ$I`vQX4E`_Bm4Q;l{@X+CHvOe7I@3Mh_Lt}k~Z6|UkgNqt7n zlf9O@51y+RddN;YQpptcz8tA!1H7^TuROr34DhM~yy^h2rUY-rO}r|dW$ByXb*9dd z6}Q>|uYZDPQn*eQaR&r=0|UH40p5@RFNZQGUo}sSP=1k_WOa}c9h_>ZtWY1a6eSp$ z(>z6OO}13IAU|v=$}qwOhpOdD2}4Vh_Fg5_s+3ZcVq{i(ifMk_QZ<5H11g1U)+oob zC566-bGB)>sJ=j*Z7?Q4(;7~*2W8B@+!b;zr*8?LQ^0DFT=B9Jt#DRz<|-UY>4o8~ znYC)x$+IqB(JFT@e+ZGY61j8A{tOTG^u?Kidegt!%$PT&Y2MU%Q)kVaF@MH6Q*l!q zuc*d9WNUhT3?2?G!qH734N0@h9x>`$QVKWKzsz*Bws+t>5lYm7zxhM-#a8b(HfLEp z+-qvge1(+4S0WmciF<;+*mgcPkPP-BnSe$qlbp?$>Z~Zri=$l4oUw?X$kP^!Zme%f zxg-$Xd%%jLqI;C-k6RN_u0@OZeeuQoUc8tuW5o}=Y>5BxPo;7K7IZvIqcBjT@z>(T zrG|p9kdr@?>`mEy@j@&JzNcBSsAKW6wne}#TeOD9oKRr*?_ABI1|!!39A2C>2`N@e ziZ#CSRo!^cW0_gGO45|HGUn>5ueQI=KmUA9Pb6W@qI!R4Xp2q-NR{t-LIjkTEu~ z6ADVw8y>g_UW$VQeM@R2Hk&>orS1Q&hXMPR^ko}3 zx;R^xsSbtd-iHt)c z9Ld}~e8!$x<`gw%{a`+ zopdCIa>k#5aL3sHcEiDAYqkM)3Sb-^HGlG%XTQCE%%dy=FE+LJ8*+Gw9dpiUF-qkb zj1&fc%^02X_5(l>^@OLIdfdP3lPLahm?3UIVDWiWqn=j^)br6(lneXvh(+BD5*dF2 za^&!9P=OqklN5?_k~QYQeUPu4h9|3_oMg$E>k!f9)yP#T>hc;-C8w%6Dc`j=EGOmT zRFwn1r~T3t2YBx9?(94A`<&Dj7yxomG!(fd2QlQ;2YAB*yx{@fhyZU?fHyk88yny? zfLHuBfC&NK!~pM<0B=%&cUpiqIlyZS@FMV%4?0n2lxbu>Y4tKxwDgalXzN2oOKR&p z3p5l)EEn<7V0rP!Yk-Xgo2Iq*Z>hBI*8{dixWJ{>AQXz9&qho|9vvSsF{ z6_5DDyQfLzM~oki^x5Q|dlsJ!w@5K~tP9IfOPIkDPWGBJOnM@qwAmTIyt?+@8DAA> zY4>0ztusOw$1|F?7^fwXjjtz1=#3&aZZb?ZrVB`YwjWLQaQzBDgC z_@rH2VO@jjZ*&Sdtfa!>dF!L#c`Q%y^+;bABOHDx@R$f8S{`3$^AIF;S1;OH3vIFW z)?00rM{KM01xis)QtTRog8k+7B~2QhlpXt_dXY-C+!Rfw+v^rOt8=3^Wlm;10?@SUZ2m+3A%q-bie`tCiWRuU>fD3-#+rA&F_6wBFLpO zjKGed*%w$BY>fSkLU$)8ve-o;H4iIX0~@8w1Xb`@`lPbUl=_5Z%_HyCi7+KKY#pOy znkn@$LNstaaMaZZ(Ez1SLmE*aXyqhjs+^?wl#>*Xa+3Au3fBl2AI&-hkC>CL6bl&z3ps{&Z_+~2d3Y#Y+HPuqrU<8{#7jP- zU@3qT#dYnY;jG;gYmbb+>AQ3Dc>6D$hor80LN?__t{`)%v+8l`BTWxYT`x06>Uv$V zFAU}K;hqDsXWFutE8Kh6GDCCla0;#JM@vRLyl=D=#-`4fk-|5z61;}O!zt1D(#BD6 zHBwdHw_cV<*_nE&!iS=2G@{Wr^!xdb-Wrm}!}DT9ONhajq)O?J7VG#Fq)$DLE|5MQ z%V-g>t{sh*ftQn>hEhN-G+BF1Em=XuvkoKWS@_Wf1!P&+QAg&VtX+(ilHFkK0>wwz zz(>1(wp(O7Hfa|rr)WIxFiz|O!GNE4u=%aQ_x6Zb`%)(?b`Pz+44)atV-F5ayNDG% zR_(&Qd!g06(!s+E?P4q(4^-jaxPsI<@Xf}lQ!@8XV_%m-Vcs>~>ex9Wbq^4Oa51uk}xfb+_#9x+^fxm(wq0K1ST zpf84ymc|86q)weQh!!q2Y99>+TA+>_3It6ZH;9##Nte@5qV_@0(@;Vwq;^~;onC`< zG_I1GQnDVJ5{p_U<>259mvN&UEY$=lRU0Te0aO8D4R3aiKX?v%l?g?*LFYlOH;onB zKrrAh?7e6A7mxd7GvVShD&!z8Y{R|CL*PRg47h%{12X}pgwyP4E@$}^#U3`sGPMe( z7s}8$`7VV-0Vs*MB~MWEam5q`7reB_8u@! zZreyAxE{-YveYwwE+5Qe zhOBzV9Pt_Q6i0m-48SKxHD=7S9>IGjWEkQR)Equ1=(^}>@bExzT@(nr9J+GV%9HUH zI9(29zILo|k*@!pR>D&osD_Ori#J%c(lT@d3j2y^F`m(Ave$1)-aH9li zNr_+cCFYqWT++{L_ux<{YNEK8mN9pF6wiAM^LJ}H6nC03=8%2yc_XY6s1KD)#wc0R zqB%@1p_1ECMy04^w}>%WR2owy1z}XxAs>&rh>?_gOi{+m>_X3EkzSXNNBO+zDb_xY z$6Ce|YvU+R;3Csu<6$ce)a9TkbJP=5{Aq-tVlPtmXM0-&O?B1@|Mb&4R&`?(+bE{m zBD=2+!MeUZr^lE-UCsWZ5grI>$h{~I!TNvm)kiL@Kgegm8qt3NA^WNhL7Bv#M)({l z2kg@!)XiXtTrP!dgqslrEXg4#yJRl*e5FO;J`<5=5+QfC(iX}wYm#(`qMWyXZ~WQ6 zzI(3JNA5;xEQ!<>m>W@)e>`=YA{K+jX0Pz-Ej9ul1le4HGSf9hUfOhBkywnAta6f) zR8CTInue1UU0Nh=Oiu-&c!~OJY_>jEU*#n0rYW!d32Z940Kf&5mH=;BfHytBJ2SwW8Q{$h@aBM5eD-`^ zfHyzDJ2${PFTlGXz`HQOTM*za1h4pP&lK=o~jc-be%*o9a_`m6Y5^McF!BT@V0N)E-j*t9O(WVt6%-rug^Llh%%5I0S7tS$jDNC>@_G zadF#})2wWpa#ONH(Pzf#v}+6Ic|l&aitirPcgsso=T=U zU*dhrhRqk*yRxw5Vm4;O&K2Yho=T>2o`h|%VdoX3!gd{*Pus8y1o;_DT`1IzmSW3} z%uSwRsXuF}g@XJXC@w;CCw+A4uGCKPnLH!Og=lwHQWvG^FBc=lq+cL!Nr1OBz*`pJ zT^8WA1$e6hywxc4z@k$J?Ezj#fOlnpcU6FQO@Mc8fVVcl>qMD*C(1`_r2HbY(duBa z=wOqjmI!sTr6@tXtjJT;-DXQI6XX_4QHEHv^AwR^v{aiQw_1u)#4AiZMdX((wOWv0 z2F1lp%5ko=pLWEVYi_ZqcA(~(%P`iXw}$rtl`-4xIJMn*eR#$zEFud8KA+e7LfUmC z#+$E!u(yP)TqW<0Zr3DBBtor^U>{*fMrdE1TeP?}XCstKgq?Q#v|Yz(oO(+RvQOT+ za!LESct`a-_l|0yBv#ID2Dj_jjprvNmKTp&Ih|OwYyTnV?-)n!32D&ER|s;1ue|glTpEj|)i9=kADMo%W7tRWuJ%bww;~TD z_@pheN|5DtQqx`{2l%8DBQiOuL6~6Y*hx)0w(8MwaBeKcD4f*L3~(?BrHFj7tBL1D z<#DlP3M8{2MyQquFL<5RFaj?%mk9A2!f{GP-w@77HHefk+k9PnGg4oT#Nll_cGBmX zWarpNJAIm)B+YqlJNCv|+8UeAHRwVieDq*mVy8Z0`T^G$xWfOAGu-EVOXC`H5EtG&IjF_sD8o53}5t7;fFLi|!ElX;<6ABf zIuXyc0^NZi7V=sPW#(%o^RFR9Df+XoTdGrH-3E&N+s@MDsXDjGdVHoT#ozjt8un%D zkYdtjlea#=yCJ~a5a8Vy;N2A9Z4B@>1$dhSye$FV)&Or?fOkuPw>`kSHNe{eUUCjY z9Z-IFpOMwUI?=&5EVW*!Z(52HjLaRLqVDdr)CNI*%TknKWbX15k#~D4IcmB|;@xAz zZW2pzV=qcLGXHGDHVX1yP~4n?xgpG$Ip2F8+jag_t=SFmQJ$d|U-1rH(i68i& zL>KpI8FX6!N$#tCq*A!8{+Q;>YdL+|bcrL^a4Ah6wo!)Z@L|@QZ$zgDA9jrqu=?`x z6WFC71jB1%26&__Qplmt|>Oqi%x4(yF-*zLp+zh;Kmg4MZ=GIKX3@?crHkQq$? ztV?R0Ucl0^Nq0+dU##w%T=UdvGiJ>@cgFnb^X4>7!DNla=d1yrwR$*eqpZbgPr-=N zQ#8$-GkxN$v(K6^cg7SID5p|Tk?oH*qOY@)Ki=XYGLq}b7_kWvH4^6`#tiZ~$um}; zE!k8e&k6pG+_-QR_c|MKB299`R#v{6xoPq|2%bdM5XEi(DlL;%7f&IekDF`0inU5UM311Tn5BD;^<1H3x|ygLKDy92y?0=#brc=rW(_Xl_n1b7bxcsm2U z?*(`d2Y9;zynGRl_Iw+7k$Kqa;5O00_bqk1P>)!O5{%3)Pf>SyOWi5RM=eDe;$118 zBJy!d-6Kd4(wZnmjzSzoWZF~7j^;jzm$6~@6?8O|F)pdKVfPCX14hZ=0ij?_LQ%@N zh}KiguiR2Q1=+(=lrt_t^%RknmU>u_RhFWpac!Tci0oylydb$4O`Ed)7q#$cOm9&SaBERL6E?Qk0f7M74$4a~CJux-x8i9XPrbibgS^P*RY^ss^QM zOlMGbyw6>*HC@zE2EVVvs|=ST)0gmSLiTRGyBPl;aQ^KWoVGd^nBEa{+Bb1AtAw`D z&+PoStM8eyZ`>Ihrl0lv_07} Hg;khHj-lE#CnK86?n>SryE-0(9QB{xkgR<(Vo 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 bKwDk&_W=J+jLVz<{+&_&UxodDIsg9y%+(1~ literal 130048 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

~ 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 diff --git a/src/testcases/org/apache/poi/hssf/data/TestDataValidation.xls b/src/testcases/org/apache/poi/hssf/data/TestDataValidation.xls index 001432f0aaa78d228526d4cb9086e10e8baeb1ec..524136921295c334de8c0ac65bbb96c77dc9e63c 100644 GIT binary patch literal 21504 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 Hg;khHj-lE#CnK86?n>SryE-0(9QB{xkgR<(Vo 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 bKwDk&_W=J+jLVz<{+&_&UxodDIsg9y%+(1~ diff --git a/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java b/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java index 1b41d87d4d..e7400bc351 100644 --- a/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java +++ b/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java @@ -18,6 +18,8 @@ package org.apache.poi.hssf.model; +import java.util.List; + import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.AbstractFunctionPtg; @@ -26,6 +28,7 @@ import org.apache.poi.hssf.record.formula.AttrPtg; import org.apache.poi.hssf.record.formula.BoolPtg; import org.apache.poi.hssf.record.formula.DividePtg; import org.apache.poi.hssf.record.formula.EqualPtg; +import org.apache.poi.hssf.record.formula.FuncPtg; import org.apache.poi.hssf.record.formula.FuncVarPtg; import org.apache.poi.hssf.record.formula.IntPtg; import org.apache.poi.hssf.record.formula.LessEqualPtg; @@ -397,7 +400,7 @@ public class TestFormulaParser extends TestCase { public void testUnderscore() { HSSFWorkbook wb = new HSSFWorkbook(); - wb.createSheet("Cash_Flow");; + wb.createSheet("Cash_Flow"); HSSFSheet sheet = wb.createSheet("Test"); HSSFRow row = sheet.createRow(0); @@ -438,7 +441,7 @@ public class TestFormulaParser extends TestCase { public void testExponentialInSheet() throws Exception { HSSFWorkbook wb = new HSSFWorkbook(); - wb.createSheet("Cash_Flow");; + wb.createSheet("Cash_Flow"); HSSFSheet sheet = wb.createSheet("Test"); HSSFRow row = sheet.createRow(0); @@ -514,7 +517,7 @@ public class TestFormulaParser extends TestCase { public void testNumbers() { HSSFWorkbook wb = new HSSFWorkbook(); - wb.createSheet("Cash_Flow");; + wb.createSheet("Cash_Flow"); HSSFSheet sheet = wb.createSheet("Test"); HSSFRow row = sheet.createRow(0); @@ -553,7 +556,7 @@ public class TestFormulaParser extends TestCase { public void testRanges() { HSSFWorkbook wb = new HSSFWorkbook(); - wb.createSheet("Cash_Flow");; + wb.createSheet("Cash_Flow"); HSSFSheet sheet = wb.createSheet("Test"); HSSFRow row = sheet.createRow(0); @@ -571,5 +574,19 @@ public class TestFormulaParser extends TestCase { cell.setCellFormula("A1...A2"); formula = cell.getCellFormula(); assertEquals("A1:A2", formula); - } + } + + /** + * Test for bug observable at svn revision 618865 (5-Feb-2008)
+ * a formula consisting of a single no-arg function got rendered without the function braces + */ + public void testToFormulaStringZeroArgFunction() { + + Workbook book = Workbook.createWorkbook(); // not really used in this test + + Ptg[] ptgs = { + new FuncPtg(10, 0), + }; + assertEquals("NA()", FormulaParser.toFormulaString(book, ptgs)); + } } -- 2.39.5