tdf#127293 Add Excel2021 function XLOOKUP to Calc
https://issues.oasis-open.org/browse/OFFICE-4154
What is working already: xlookup with normal forward,
backward search in columns/rows. Binary search in rows with
real binary search algorithm, in columns only works with linear search yet.
Linear forward backward wildcard/regex search in columns/rows.
Looking for the first smaller or greater value with linear and binary search
ALso all the combination of all these options. Except XLOOKUP
not supperted wildcard/regex search with binary search.
TODO in next patches:
- add the binary search option for searching in columns.
- Evaluate Formula calculation not working in general.
Co-authored-by: Balazs Varga <balazs.varga.extern@allotropia.de>
Change-Id: I15fd4479b63ec13b093d269760d1bbb5957553e8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131905
Tested-by: Jenkins
Tested-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de>
Reviewed-by: Balazs Varga <balazs.varga.extern@allotropia.de>
diff --git a/formula/inc/core_resource.hrc b/formula/inc/core_resource.hrc
index baed318..835d928 100644
--- a/formula/inc/core_resource.hrc
+++ b/formula/inc/core_resource.hrc
@@ -275,6 +275,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_ODFF[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
{ "COM.MICROSOFT.XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -722,6 +723,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_OOXML[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
{ "_xlfn.XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "_xlfn.ORG.OPENOFFICE.MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -1172,6 +1174,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_PODF[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
{ "XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -1623,6 +1626,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH_API[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
{ "XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -2072,6 +2076,7 @@ const std::pair<const char *, int> RID_STRLIST_FUNCTION_NAMES_ENGLISH[] =
{ "COUNTIFS" , SC_OPCODE_COUNT_IFS },
{ "LOOKUP" , SC_OPCODE_LOOKUP },
{ "VLOOKUP" , SC_OPCODE_V_LOOKUP },
{ "XLOOKUP" , SC_OPCODE_X_LOOKUP },
{ "HLOOKUP" , SC_OPCODE_H_LOOKUP },
{ "MULTIRANGE" , SC_OPCODE_MULTI_AREA },
{ "OFFSET" , SC_OPCODE_OFFSET },
@@ -2502,6 +2507,7 @@ const std::pair<TranslateId, int> RID_STRLIST_FUNCTION_NAMES[] =
{ NC_("RID_STRLIST_FUNCTION_NAMES", "COUNTIFS") , SC_OPCODE_COUNT_IFS },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "LOOKUP") , SC_OPCODE_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "VLOOKUP") , SC_OPCODE_V_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "XLOOKUP") , SC_OPCODE_X_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "HLOOKUP") , SC_OPCODE_H_LOOKUP },
{ NC_("RID_STRLIST_FUNCTION_NAMES", "MULTIRANGE") , SC_OPCODE_MULTI_AREA }, // legacy for range list (union)
{ NC_("RID_STRLIST_FUNCTION_NAMES", "OFFSET") , SC_OPCODE_OFFSET },
diff --git a/include/formula/compiler.hxx b/include/formula/compiler.hxx
index fcf7326..479008d 100644
--- a/include/formula/compiler.hxx
+++ b/include/formula/compiler.hxx
@@ -398,7 +398,7 @@
#define SC_OPCODE_CELL 385
#define SC_OPCODE_ISPMT 386
#define SC_OPCODE_HYPERLINK 387
// free: 388
#define SC_OPCODE_X_LOOKUP 388
// free: 389
#define SC_OPCODE_GET_PIVOT_DATA 390
#define SC_OPCODE_EUROCONVERT 391
diff --git a/include/formula/opcode.hxx b/include/formula/opcode.hxx
index d92ae0b..ad056a9 100644
--- a/include/formula/opcode.hxx
+++ b/include/formula/opcode.hxx
@@ -316,6 +316,7 @@ enum OpCode : sal_uInt16
ocCountIfs = SC_OPCODE_COUNT_IFS,
ocLookup = SC_OPCODE_LOOKUP,
ocVLookup = SC_OPCODE_V_LOOKUP,
ocXLookup = SC_OPCODE_X_LOOKUP,
ocHLookup = SC_OPCODE_H_LOOKUP,
ocMultiArea = SC_OPCODE_MULTI_AREA,
ocOffset = SC_OPCODE_OFFSET,
@@ -798,6 +799,7 @@ inline std::string OpCodeEnumToString(OpCode eCode)
case ocCountIfs: return "CountIfs";
case ocLookup: return "Lookup";
case ocVLookup: return "VLookup";
case ocXLookup: return "XLookup";
case ocHLookup: return "HLookup";
case ocMultiArea: return "MultiArea";
case ocOffset: return "Offset";
diff --git a/sc/README.md b/sc/README.md
index 826bb71..a778661 100644
--- a/sc/README.md
+++ b/sc/README.md
@@ -75,6 +75,7 @@ https://docs.oasis-open.org/office/OpenDocument/v1.3/os/part4-formula/OpenDocume
* LOOKUP
* MATCH
* VLOOKUP
* XLOOKUP
* Mathematical Functions
* SUMIF
* SUMIFS
diff --git a/sc/inc/helpids.h b/sc/inc/helpids.h
index eb3f590..3dfc889 100644
--- a/sc/inc/helpids.h
+++ b/sc/inc/helpids.h
@@ -593,5 +593,6 @@ inline constexpr OUString HID_FUNC_REGEX = u"SC_HID_FUNC_REGEX"_ustr;
inline constexpr OUString HID_FUNC_FOURIER = u"SC_HID_FUNC_FOURIER"_ustr;
inline constexpr OUString HID_FUNC_RAND_NV = u"SC_HID_FUNC_RAND_NV"_ustr;
inline constexpr OUString HID_FUNC_RANDBETWEEN_NV = u"SC_HID_FUNC_RANDBETWEEN_NV"_ustr;
inline constexpr OUString HID_FUNC_XLOOKUP_MS = u"SC_HID_FUNC_XLOOKUP_MS"_ustr;
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/queryiter.hxx b/sc/inc/queryiter.hxx
index 1d0066d..e34a7be 100644
--- a/sc/inc/queryiter.hxx
+++ b/sc/inc/queryiter.hxx
@@ -62,7 +62,7 @@ class ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >
{
protected:
ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext,
const ScQueryParam& rParam );
const ScQueryParam& rParam, bool bReverseSearch );
// Initialize position for new column.
void InitPos();
// Increase position (next row).
@@ -71,12 +71,19 @@ protected:
// should call IncPos().
void IncBlock();
// Decrease position (prev row).
void DecPos();
// Prev mdds block. If access is not direct/linear, then
// should call DecPos().
void DecBlock();
// These members needs to be available already in the base class.
typedef sc::CellStoreType::const_position_type PositionType;
PositionType maCurPos;
ScQueryParam maParam;
ScDocument& rDoc;
ScInterpreterContext& mrContext;
bool mbReverseSearch;
SCTAB nTab;
SCCOL nCol;
SCROW nRow;
@@ -98,19 +105,24 @@ public:
bool IncPosImpl();
protected:
ScQueryCellIteratorAccessSpecific( ScDocument& rDocument, ScInterpreterContext& rContext,
const ScQueryParam& rParam );
const ScQueryParam& rParam, bool bReverseSearch );
void InitPosStart();
void InitPosFinish( SCROW beforeRow, SCROW lastRow );
void InitPosFinish( SCROW beforeRow, SCROW lastRow, bool bFirstMatch );
void IncPos() { IncPosImpl<false>(); }
bool IncPosFast() { return IncPosImpl<true>(); }
void IncBlock() { IncPos(); } // Cannot skip entire block, not linear.
// Initialize for backward search. (no need for SortedCache)
static void DecPos() {};
static void DecBlock() {};
// These members needs to be available already in the base class.
typedef sc::CellStoreType::const_position_type PositionType;
PositionType maCurPos;
ScQueryParam maParam;
ScDocument& rDoc;
ScInterpreterContext& mrContext;
bool mbReverseSearch;
SCTAB nTab;
SCCOL nCol;
SCROW nRow;
@@ -163,17 +175,24 @@ protected:
sal_uInt8 nTestEqualCondition;
bool bAdvanceQuery;
bool bIgnoreMismatchOnLeadingStrings;
bool bSortedBinarySearch;
bool bXLookUp;
SCCOL nBestFitCol;
SCROW nBestFitRow;
// Make base members directly visible here (templated bases need 'this->').
using AccessBase::maCurPos;
using AccessBase::maParam;
using AccessBase::rDoc;
using AccessBase::mrContext;
using AccessBase::mbReverseSearch;
using AccessBase::nTab;
using AccessBase::nCol;
using AccessBase::nRow;
using AccessBase::IncPos;
using AccessBase::IncBlock;
using AccessBase::DecPos;
using AccessBase::DecBlock;
using typename AccessBase::BinarySearchCellType;
using AccessBase::MakeBinarySearchIndexer;
using TypeBase::HandleItemFound;
@@ -227,9 +246,14 @@ protected:
bool IsEqualConditionFulfilled() const
{ return nTestEqualCondition == nTestEqualConditionFulfilled; }
void HandleBestFitItemFound(SCCOL nBFitCol, SCROW nBFitRow)
{
nBestFitCol = nBFitCol;
nBestFitRow = nBFitRow;
}
public:
ScQueryCellIteratorBase(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
const ScQueryParam& aParam, bool bMod);
const ScQueryParam& aParam, bool bMod, bool bReverse);
// when !bMod, the QueryParam has to be filled
// (bIsString)
@@ -238,6 +262,12 @@ public:
void SetAdvanceQueryParamEntryField( bool bVal )
{ bAdvanceQuery = bVal; }
void AdvanceQueryParamEntryField();
void SetSortedBinarySearchMode( bool bVal )
{ bSortedBinarySearch = bVal; }
void SetXlookupMode( bool bVal )
{ bXLookUp = bVal; }
};
@@ -259,11 +289,13 @@ class ScQueryCellIterator
using Base::maParam;
using Base::rDoc;
using Base::mrContext;
using Base::mbReverseSearch;
using Base::nTab;
using Base::nCol;
using Base::nRow;
using Base::InitPos;
using Base::IncPos;
using Base::DecPos;
using Base::bIgnoreMismatchOnLeadingStrings;
using Base::SetStopOnMismatch;
using Base::SetTestEqualCondition;
@@ -279,13 +311,17 @@ class ScQueryCellIterator
using Base::nTestEqualConditionEnabled;
using Base::PerformQuery;
using Base::getThisResult;
using Base::nBestFitCol;
using Base::nBestFitRow;
using Base::bSortedBinarySearch;
using Base::bXLookUp;
bool GetThis();
public:
ScQueryCellIterator(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
const ScQueryParam& aParam, bool bMod)
: Base( rDocument, rContext, nTable, aParam, bMod ) {}
const ScQueryParam& aParam, bool bMod, bool bReverse)
: Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
bool GetFirst();
bool GetNext();
SCCOL GetCol() const { return nCol; }
@@ -320,8 +356,8 @@ class ScQueryCellIteratorSortedCache
typedef ScQueryCellIterator< ScQueryCellIteratorAccess::SortedCache > Base;
public:
ScQueryCellIteratorSortedCache(ScDocument& rDocument, ScInterpreterContext& rContext,
SCTAB nTable, const ScQueryParam& aParam, bool bMod)
: Base( rDocument, rContext, nTable, aParam, bMod ) {}
SCTAB nTable, const ScQueryParam& aParam, bool bMod, bool bReverse )
: Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
// Returns true if this iterator can be used for the given query.
static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam,
SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData,
@@ -357,8 +393,8 @@ protected:
public:
ScCountIfCellIterator(ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
const ScQueryParam& aParam, bool bMod)
: Base( rDocument, rContext, nTable, aParam, bMod ) {}
const ScQueryParam& aParam, bool bMod, bool bReverse)
: Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
sal_uInt64 GetCount();
};
@@ -370,8 +406,8 @@ class ScCountIfCellIteratorSortedCache
typedef ScCountIfCellIterator< ScQueryCellIteratorAccess::SortedCache > Base;
public:
ScCountIfCellIteratorSortedCache(ScDocument& rDocument, ScInterpreterContext& rContext,
SCTAB nTable, const ScQueryParam& aParam, bool bMod)
: Base( rDocument, rContext, nTable, aParam, bMod ) {}
SCTAB nTable, const ScQueryParam& aParam, bool bMod, bool bReverse)
: Base( rDocument, rContext, nTable, aParam, bMod, bReverse ) {}
// Returns true if this iterator can be used for the given query.
static bool CanBeUsed(ScDocument& rDoc, const ScQueryParam& aParam,
SCTAB nTab, const ScFormulaCell* cell, const ScComplexRefData* refData,
diff --git a/sc/inc/scfuncs.hrc b/sc/inc/scfuncs.hrc
index 8fb9f59..279ba37 100644
--- a/sc/inc/scfuncs.hrc
+++ b/sc/inc/scfuncs.hrc
@@ -3377,6 +3377,24 @@ const TranslateId SC_OPCODE_V_LOOKUP_ARY[] =
NC_("SC_OPCODE_V_LOOKUP", "If the value is TRUE or not given, the search column of the array represents a series of ranges, and must be sorted in ascending order.")
};
// -=*# Resource for function XLOOKUP #*=-
const TranslateId SC_OPCODE_X_LOOKUP_ARY[] =
{
NC_("SC_OPCODE_X_LOOKUP", "Extended vertical search and reference to indicated cells."),
NC_("SC_OPCODE_X_LOOKUP", "Search criterion"),
NC_("SC_OPCODE_X_LOOKUP", "The value to be found in the first column."),
NC_("SC_OPCODE_X_LOOKUP", "Search Array"),
NC_("SC_OPCODE_X_LOOKUP", "The array or range to search."),
NC_("SC_OPCODE_X_LOOKUP", "Result Array"),
NC_("SC_OPCODE_X_LOOKUP", "The array or range to return."),
NC_("SC_OPCODE_X_LOOKUP", "Result if not found"),
NC_("SC_OPCODE_X_LOOKUP", "If given, return given text, otherwise return #N/A."),
NC_("SC_OPCODE_X_LOOKUP", "Match Mode"),
NC_("SC_OPCODE_X_LOOKUP", "0, -1, 1 or 2 "), // TODO : add explanation of values
NC_("SC_OPCODE_X_LOOKUP", "Search Mode"),
NC_("SC_OPCODE_X_LOOKUP", "1, -1, 2 or -2 ") // TODO : add explanation of values
};
// -=*# Resource for function INDEX #*=-
const TranslateId SC_OPCODE_INDEX_ARY[] =
{
diff --git a/sc/qa/extras/scfunctionlistobj.cxx b/sc/qa/extras/scfunctionlistobj.cxx
index 940aba8c..03cd767 100644
--- a/sc/qa/extras/scfunctionlistobj.cxx
+++ b/sc/qa/extras/scfunctionlistobj.cxx
@@ -78,7 +78,7 @@ public:
ScFunctionListObj::ScFunctionListObj()
: UnoApiTest("/sc/qa/extras/testdocuments")
, XElementAccess(cppu::UnoType<uno::Sequence<beans::PropertyValue>>::get())
, XIndexAccess(395)
, XIndexAccess(396)
, XNameAccess("IF")
, XServiceInfo("stardiv.StarCalc.ScFunctionListObj", "com.sun.star.sheet.FunctionDescriptions")
{
diff --git a/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
new file mode 100644
index 0000000..16abcbc
--- /dev/null
+++ b/sc/qa/unit/data/functions/spreadsheet/fods/xlookup.fods
@@ -0,0 +1,4553 @@
<?xml version="1.0" encoding="UTF-8"?>
<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.spreadsheet">
<office:meta><meta:creation-date>2024-01-16T18:30:06.278000000</meta:creation-date><meta:editing-duration>PT52M13S</meta:editing-duration><meta:editing-cycles>14</meta:editing-cycles><meta:generator>LibreOfficeDev/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/8f959fffda28199c3d97aea8d5468776a0e43d90</meta:generator><dc:date>2024-01-26T18:16:42.850000000</dc:date><meta:document-statistic meta:table-count="2" meta:cell-count="754" meta:object-count="0"/></office:meta>
<office:settings>
<config:config-item-set config:name="ooo:view-settings">
<config:config-item config:name="VisibleAreaTop" config:type="int">0</config:config-item>
<config:config-item config:name="VisibleAreaLeft" config:type="int">0</config:config-item>
<config:config-item config:name="VisibleAreaWidth" config:type="int">15882</config:config-item>
<config:config-item config:name="VisibleAreaHeight" config:type="int">5013</config:config-item>
<config:config-item-map-indexed config:name="Views">
<config:config-item-map-entry>
<config:config-item config:name="ViewId" config:type="string">view1</config:config-item>
<config:config-item-map-named config:name="Tables">
<config:config-item-map-entry config:name="Sheet1">
<config:config-item config:name="CursorPositionX" config:type="int">2</config:config-item>
<config:config-item config:name="CursorPositionY" config:type="int">0</config:config-item>
<config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item>
<config:config-item config:name="PositionLeft" config:type="int">0</config:config-item>
<config:config-item config:name="PositionRight" config:type="int">0</config:config-item>
<config:config-item config:name="PositionTop" config:type="int">0</config:config-item>
<config:config-item config:name="PositionBottom" config:type="int">0</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ZoomValue" config:type="int">65</config:config-item>
<config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
<config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
<config:config-item-map-entry config:name="Sheet2">
<config:config-item config:name="CursorPositionX" config:type="int">0</config:config-item>
<config:config-item config:name="CursorPositionY" config:type="int">104</config:config-item>
<config:config-item config:name="ActiveSplitRange" config:type="short">2</config:config-item>
<config:config-item config:name="PositionLeft" config:type="int">0</config:config-item>
<config:config-item config:name="PositionRight" config:type="int">0</config:config-item>
<config:config-item config:name="PositionTop" config:type="int">0</config:config-item>
<config:config-item config:name="PositionBottom" config:type="int">81</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ZoomValue" config:type="int">65</config:config-item>
<config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
<config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-named>
<config:config-item config:name="ActiveTable" config:type="string">Sheet1</config:config-item>
<config:config-item config:name="HorizontalScrollbarWidth" config:type="int">1835</config:config-item>
<config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
<config:config-item config:name="ZoomValue" config:type="int">65</config:config-item>
<config:config-item config:name="PageViewZoomValue" config:type="int">60</config:config-item>
<config:config-item config:name="ShowPageBreakPreview" config:type="boolean">false</config:config-item>
<config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="GridColor" config:type="int">12632256</config:config-item>
<config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
<config:config-item config:name="FormulaBarHeight" config:type="short">1</config:config-item>
<config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsValueHighlightingEnabled" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item>
<config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item>
<config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
<config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
<config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
<config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
<config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
<config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
<config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-indexed>
</config:config-item-set>
<config:config-item-set config:name="ooo:configuration-settings">
<config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
<config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
<config:config-item config:name="AutoCalculate" config:type="boolean">true</config:config-item>
<config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
<config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
<config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
<config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
<config:config-item-map-indexed config:name="ForbiddenCharacters">
<config:config-item-map-entry>
<config:config-item config:name="Language" config:type="string">en</config:config-item>
<config:config-item config:name="Country" config:type="string">US</config:config-item>
<config:config-item config:name="Variant" config:type="string"/>
<config:config-item config:name="BeginLine" config:type="string"/>
<config:config-item config:name="EndLine" config:type="string"/>
</config:config-item-map-entry>
</config:config-item-map-indexed>
<config:config-item config:name="GridColor" config:type="int">12632256</config:config-item>
<config:config-item config:name="HasColumnRowHeaders" config:type="boolean">true</config:config-item>
<config:config-item config:name="HasSheetTabs" config:type="boolean">true</config:config-item>
<config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
<config:config-item config:name="IsDocumentShared" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
<config:config-item config:name="IsOutlineSymbolsSet" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsRasterAxisSynchronized" config:type="boolean">true</config:config-item>
<config:config-item config:name="IsSnapToRaster" config:type="boolean">false</config:config-item>
<config:config-item config:name="LinkUpdateMode" config:type="short">3</config:config-item>
<config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrinterName" config:type="string">Microsoft Print to PDF</config:config-item>
<config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
<config:config-item config:name="PrinterSetup" config:type="base64Binary">ZBb+/01pY3Jvc29mdCBQcmludCB0byBQREYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWljcm9zb2Z0IFByaW50IFRvIFBERgAAAAAAAAAAAAAWAAEANhUAAAAAAAAEAAhSAAAEdAAAM1ROVwAAAAAKAE0AaQBjAHIAbwBzAG8AZgB0ACAAUAByAGkAbgB0ACAAdABvACAAUABEAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAMG3ABQFAMvAQABAAkAmgs0CGQAAQAPAFgCAgABAFgCAwABAEEANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAIAAAABAAAA/////0dJUzQAAAAAAAAAAAAAAABESU5VIgDIACQDLBE/XXt+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAFNNVEoAAAAAEAC4AHsAMAA4ADQARgAwADEARgBBAC0ARQA2ADMANAAtADQARAA3ADcALQA4ADMARQBFAC0AMAA3ADQAOAAxADcAQwAwADMANQA4ADEAfQAAAFJFU0RMTABVbmlyZXNETEwAUGFwZXJTaXplAEE0AE9yaWVudGF0aW9uAFBPUlRSQUlUAFJlc29sdXRpb24AUmVzT3B0aW9uMQBDb2xvck1vZGUAQ29sb3IAAAAAAAAAAAAAAAAAAAAAAAAsEQAAVjRETQEAAAAAAAAAnApwIhwAAADsAAAAAwAAAPoBTwg05ndNg+4HSBfANYHQAAAATAAAAAMAAAAACAAAAAAAAAAAAAADAAAAAAgAACoAAAAACAAAAwAAAEAAAABWAAAAABAAAEQAbwBjAHUAbQBlAG4AdABVAHMAZQByAFAAYQBzAHMAdwBvAHIAZAAAAEQAbwBjAHUAbQBlAG4AdABPAHcAbgBlAHIAUABhAHMAcwB3AG8AcgBkAAAARABvAGMAdQBtAGUAbgB0AEMAcgB5AHAAdABTAGUAYwB1AHIAaQB0AHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgBDT01QQVRfRFVQTEVYX01PREUTAER1cGxleE1vZGU6OlVua25vd24MAFBSSU5URVJfTkFNRRYATWljcm9zb2Z0IFByaW50IHRvIFBERgsARFJJVkVSX05BTUUWAE1pY3Jvc29mdCBQcmludCBUbyBQREY=</config:config-item>
<config:config-item config:name="RasterIsVisible" config:type="boolean">false</config:config-item>
<config:config-item config:name="RasterResolutionX" config:type="int">1270</config:config-item>
<config:config-item config:name="RasterResolutionY" config:type="int">1270</config:config-item>
<config:config-item config:name="RasterSubdivisionX" config:type="int">1</config:config-item>
<config:config-item config:name="RasterSubdivisionY" config:type="int">1</config:config-item>
<config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
<config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
<config:config-item config:name="ShowFormulasMarks" config:type="boolean">false</config:config-item>
<config:config-item config:name="ShowGrid" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowNotes" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowPageBreaks" config:type="boolean">true</config:config-item>
<config:config-item config:name="ShowZeroValues" config:type="boolean">true</config:config-item>
<config:config-item config:name="SyntaxStringRef" config:type="short">7</config:config-item>
<config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
<config:config-item-map-named config:name="ScriptConfiguration">
<config:config-item-map-entry config:name="Sheet1">
<config:config-item config:name="CodeName" config:type="string">Sheet1</config:config-item>
</config:config-item-map-entry>
<config:config-item-map-entry config:name="Sheet2">
<config:config-item config:name="CodeName" config:type="string">Sheet2</config:config-item>
</config:config-item-map-entry>
</config:config-item-map-named>
</config:config-item-set>
</office:settings>
<office:scripts>
<office:script script:language="ooo:Basic">
<ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</office:script>
</office:scripts>
<office:font-face-decls>
<style:font-face style:name="FreeSans" svg:font-family="FreeSans" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Liberation Sans" svg:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
<style:font-face style:name="Lucida Sans" svg:font-family="'Lucida Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="Microsoft YaHei" svg:font-family="'Microsoft YaHei'" style:font-family-generic="system" style:font-pitch="variable"/>
<style:font-face style:name="WenQuanYi Micro Hei" svg:font-family="'WenQuanYi Micro Hei'" style:font-family-generic="system" style:font-pitch="variable"/>
</office:font-face-decls>
<office:styles>
<style:default-style style:family="table-cell">
<style:paragraph-properties style:tab-stop-distance="1.27cm"/>
<style:text-properties style:font-name="Liberation Sans" fo:font-size="10pt" fo:language="en" fo:country="US" style:font-name-asian="WenQuanYi Micro Hei" style:font-size-asian="10pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-size-complex="10pt" style:language-complex="hi" style:country-complex="IN"/>
</style:default-style>
<style:default-style style:family="graphic">
<style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" style:writing-mode="page"/>
<style:paragraph-properties style:text-autospace="ideograph-alpha" style:punctuation-wrap="simple" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="page" style:font-independent-line-spacing="false">
<style:tab-stops/>
</style:paragraph-properties>
<style:text-properties style:use-window-font-color="true" loext:opacity="0%" fo:font-family="'Liberation Serif'" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-family-asian="'Segoe UI'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="12pt" style:language-asian="zh" style:country-asian="CN" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
</style:default-style>
<style:style style:name="Default" style:family="graphic"/>
<style:style style:name="Note" style:family="graphic" style:parent-style-name="Default">
<style:graphic-properties draw:stroke="solid" draw:marker-start="Arrowheads_20_1" draw:marker-start-width="0.2cm" draw:marker-start-center="false" draw:fill="solid" draw:fill-color="#ffffc0" draw:auto-grow-height="true" draw:auto-grow-width="false" fo:padding-top="0.1cm" fo:padding-bottom="0.1cm" fo:padding-left="0.1cm" fo:padding-right="0.1cm" draw:shadow="visible" draw:shadow-offset-x="0.1cm" draw:shadow-offset-y="0.1cm"/>
<style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="10pt" style:font-name-asian="WenQuanYi Micro Hei" style:font-family-asian="'WenQuanYi Micro Hei'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="10pt"/>
</style:style>
<number:number-style style:name="N0">
<number:number number:min-integer-digits="1"/>
</number:number-style>
<number:currency-style style:name="N149P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N149">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N149P0"/>
</number:currency-style>
<number:number-style style:name="N151P0" style:volatile="true">
<number:text>\</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:number-style>
<number:number-style style:name="N151">
<style:text-properties fo:color="#ff0000"/>
<number:text>\-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N151P0"/>
</number:number-style>
<number:percentage-style style:name="N152">
<number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/>
<number:text>%</number:text>
</number:percentage-style>
<number:number-style style:name="N156P0" style:volatile="true">
<number:text> \</number:text>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N156P1" style:volatile="true">
<number:text> \</number:text>
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N156P2" style:volatile="true">
<number:text> \</number:text>
<number:fill-character> </number:fill-character>
<number:text>- </number:text>
</number:number-style>
<number:text-style style:name="N156">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N156P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N156P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N156P2"/>
</number:text-style>
<number:currency-style style:name="N158P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N158">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N158P0"/>
</number:currency-style>
<number:number-style style:name="N159">
<number:number number:decimal-places="3" number:min-decimal-places="3" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N163P0" style:volatile="true">
<number:text> $</number:text>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N163P1" style:volatile="true">
<number:text> $</number:text>
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N163P2" style:volatile="true">
<number:text> $</number:text>
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N163">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N163P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N163P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N163P2"/>
</number:text-style>
<number:date-style style:name="N164">
<number:day number:style="long"/>
<number:text>.</number:text>
<number:month number:style="long"/>
<number:text>.</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:number-style style:name="N166P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N166">
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N166P0"/>
</number:number-style>
<number:currency-style style:name="N168P0" style:volatile="true">
<number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
<number:text> </number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N168">
<number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
<number:text> -</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N168P0"/>
</number:currency-style>
<number:number-style style:name="N170P0" style:volatile="true">
<number:text>$</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N170">
<number:text>($</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N170P0"/>
</number:number-style>
<number:number-style style:name="N174P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N174P1" style:volatile="true">
<number:text> (</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N174P2" style:volatile="true">
<number:text> - </number:text>
</number:number-style>
<number:text-style style:name="N174">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N174P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N174P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N174P2"/>
</number:text-style>
<number:date-style style:name="N175">
<number:text>⌀ </number:text>
<number:year number:style="long"/>
</number:date-style>
<number:number-style style:name="N179P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> € </number:text>
</number:number-style>
<number:number-style style:name="N179P1" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> € </number:text>
</number:number-style>
<number:number-style style:name="N179P2" style:volatile="true">
<number:text> - € </number:text>
</number:number-style>
<number:text-style style:name="N179">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N179P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N179P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N179P2"/>
</number:text-style>
<number:number-style style:name="N180">
<number:number number:decimal-places="17" number:min-decimal-places="17" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N181">
<number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/>
</number:number-style>
<number:currency-style style:name="N182P0" style:volatile="true">
<number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
<number:text> </number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N182">
<style:text-properties fo:color="#ff0000"/>
<number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
<number:text> </number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>-</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N182P0"/>
</number:currency-style>
<number:date-style style:name="N183">
<number:month number:style="long"/>
<number:text>-</number:text>
<number:day number:style="long"/>
<number:text>-</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:currency-style style:name="N185P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N185">
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N185P0"/>
</number:currency-style>
<number:date-style style:name="N186">
<number:day number:style="long"/>
<number:text>-</number:text>
<number:month number:style="long"/>
</number:date-style>
<number:number-style style:name="N187">
<number:number number:decimal-places="9" number:min-decimal-places="9" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N188">
<number:number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N192P0" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N192P1" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N192P2" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N192">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N192P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N192P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N192P2"/>
</number:text-style>
<number:currency-style style:name="N194P0" style:volatile="true">
<number:currency-symbol>€</number:currency-symbol>
<number:text> </number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N194">
<style:text-properties fo:color="#ff0000"/>
<number:text>(</number:text>
<number:currency-symbol>€</number:currency-symbol>
<number:text> </number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N194P0"/>
</number:currency-style>
<number:number-style style:name="N195">
<number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N196">
<number:number number:decimal-places="5" number:min-decimal-places="5" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N197">
<number:text>$</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:number-style>
<number:number-style style:name="N198P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N198">
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N198P0"/>
</number:number-style>
<number:currency-style style:name="N200P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N200">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N200P0"/>
</number:currency-style>
<number:currency-style style:name="N202P0" style:volatile="true">
<number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N202">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:currency-symbol number:language="es" number:country="MX">$</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N202P0"/>
</number:currency-style>
<number:number-style style:name="N206P0" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N206P1" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N206P2" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>- </number:text>
</number:number-style>
<number:text-style style:name="N206">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N206P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N206P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N206P2"/>
</number:text-style>
<number:currency-style style:name="N208P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N208">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N208P0"/>
</number:currency-style>
<number:number-style style:name="N210P0" style:volatile="true">
<number:text>Yes</number:text>
</number:number-style>
<number:number-style style:name="N210P1" style:volatile="true">
<number:text>Yes</number:text>
</number:number-style>
<number:number-style style:name="N210">
<number:text>No</number:text>
<style:map style:condition="value()>0" style:apply-style-name="N210P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N210P1"/>
</number:number-style>
<number:number-style style:name="N211">
<number:number number:decimal-places="12" number:min-decimal-places="12" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N212">
<number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1"/>
</number:number-style>
<number:currency-style style:name="N214P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol>EUR</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N214">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol>EUR</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N214P0"/>
</number:currency-style>
<number:number-style style:name="N216P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N216">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N216P0"/>
</number:number-style>
<number:number-style style:name="N218P0" style:volatile="true">
<number:text>\</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
</number:number-style>
<number:number-style style:name="N218">
<number:text>\-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N218P0"/>
</number:number-style>
<number:number-style style:name="N222P0" style:volatile="true">
<number:text> \</number:text>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N222P1" style:volatile="true">
<number:text> \</number:text>
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N222P2" style:volatile="true">
<number:text> \</number:text>
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N222">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N222P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N222P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N222P2"/>
</number:text-style>
<number:number-style style:name="N223">
<number:number number:decimal-places="18" number:min-decimal-places="18" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N224">
<number:number number:decimal-places="4" number:min-decimal-places="4" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N225">
<number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="3" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/>
</number:number-style>
<number:number-style style:name="N227P0" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N227P1" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N227P2" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>- </number:text>
</number:number-style>
<number:text-style style:name="N227">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N227P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N227P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N227P2"/>
</number:text-style>
<number:currency-style style:name="N228P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N228">
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N228P0"/>
</number:currency-style>
<number:number-style style:name="N229">
<number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="1" number:forced-exponent-sign="true"/>
</number:number-style>
<number:number-style style:name="N230">
<number:scientific-number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" number:min-exponent-digits="1" number:exponent-interval="3" number:forced-exponent-sign="true"/>
</number:number-style>
<number:currency-style style:name="N232P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol>EUR</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N232">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol>EUR</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N232P0"/>
</number:currency-style>
<number:number-style style:name="N233P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N233">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N233P0"/>
</number:number-style>
<number:date-style style:name="N234">
<number:month number:style="long"/>
<number:text>-</number:text>
<number:day/>
<number:text>-</number:text>
<number:year/>
</number:date-style>
<number:number-style style:name="N238P0" style:volatile="true">
<number:text> $</number:text>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N238P1" style:volatile="true">
<number:text> $</number:text>
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N238P2" style:volatile="true">
<number:text> $</number:text>
<number:fill-character> </number:fill-character>
<number:text>- </number:text>
</number:number-style>
<number:text-style style:name="N238">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N238P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N238P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N238P2"/>
</number:text-style>
<number:number-style style:name="N242P0" style:volatile="true">
<number:text> $</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N242P1" style:volatile="true">
<number:text> $(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N242P2" style:volatile="true">
<number:text> $- </number:text>
</number:number-style>
<number:text-style style:name="N242">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N242P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N242P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N242P2"/>
</number:text-style>
<number:date-style style:name="N243">
<number:year number:style="long"/>
</number:date-style>
<number:number-style style:name="N244">
<number:number number:decimal-places="20" number:min-decimal-places="20" number:min-integer-digits="1"/>
</number:number-style>
<number:currency-style style:name="N246P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N246">
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N246P0"/>
</number:currency-style>
<number:number-style style:name="N248P0" style:volatile="true">
<number:text>On</number:text>
</number:number-style>
<number:number-style style:name="N248P1" style:volatile="true">
<number:text>On</number:text>
</number:number-style>
<number:number-style style:name="N248">
<number:text>Off</number:text>
<style:map style:condition="value()>0" style:apply-style-name="N248P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N248P1"/>
</number:number-style>
<number:number-style style:name="N250P0" style:volatile="true">
<number:text>$</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N250">
<style:text-properties fo:color="#ff0000"/>
<number:text>($</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N250P0"/>
</number:number-style>
<number:number-style style:name="N252P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N252">
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N252P0"/>
</number:number-style>
<number:number-style style:name="N253">
<number:number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N254P0" style:volatile="true">
<number:text>$</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N254">
<number:text>($</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N254P0"/>
</number:number-style>
<number:number-style style:name="N255P0" style:volatile="true">
<number:text>$</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N255">
<style:text-properties fo:color="#ff0000"/>
<number:text>($</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N255P0"/>
</number:number-style>
<number:number-style style:name="N256">
<number:number number:decimal-places="8" number:min-decimal-places="8" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N258P0" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N258P1" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N258P2" style:volatile="true">
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N258">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N258P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N258P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N258P2"/>
</number:text-style>
<number:currency-style style:name="N259P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N259">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N259P0"/>
</number:currency-style>
<number:number-style style:name="N260">
<number:number number:decimal-places="11" number:min-decimal-places="11" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N262P0" style:volatile="true">
<number:text>True</number:text>
</number:number-style>
<number:number-style style:name="N262P1" style:volatile="true">
<number:text>True</number:text>
</number:number-style>
<number:number-style style:name="N262">
<number:text>False</number:text>
<style:map style:condition="value()>0" style:apply-style-name="N262P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N262P1"/>
</number:number-style>
<number:number-style style:name="N266P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> € </number:text>
</number:number-style>
<number:number-style style:name="N266P1" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> € </number:text>
</number:number-style>
<number:number-style style:name="N266P2" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> € </number:text>
</number:number-style>
<number:text-style style:name="N266">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N266P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N266P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N266P2"/>
</number:text-style>
<number:number-style style:name="N267">
<number:number number:decimal-places="7" number:min-decimal-places="7" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N271P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N271P1" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N271P2" style:volatile="true">
<number:text> - </number:text>
</number:number-style>
<number:text-style style:name="N271">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N271P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N271P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N271P2"/>
</number:text-style>
<number:date-style style:name="N272">
<number:month number:style="long"/>
<number:text>/</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:currency-style style:name="N273P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N273">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N273P0"/>
</number:currency-style>
<number:currency-style style:name="N275P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N275">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:number number:decimal-places="2" number:min-decimal-places="0" number:decimal-replacement="--" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N275P0"/>
</number:currency-style>
<number:number-style style:name="N279P0" style:volatile="true">
<number:text> $</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N279P1" style:volatile="true">
<number:text> $(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N279P2" style:volatile="true">
<number:text> $-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N279">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N279P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N279P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N279P2"/>
</number:text-style>
<number:number-style style:name="N283P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N283P1" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N283P2" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N283">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N283P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N283P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N283P2"/>
</number:text-style>
<number:number-style style:name="N285P0" style:volatile="true">
<number:text>WAHR</number:text>
</number:number-style>
<number:number-style style:name="N285P1" style:volatile="true">
<number:text>WAHR</number:text>
</number:number-style>
<number:number-style style:name="N285">
<number:text>FALSCH</number:text>
<style:map style:condition="value()>0" style:apply-style-name="N285P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N285P1"/>
</number:number-style>
<number:date-style style:name="N286">
<number:month number:style="long"/>
<number:text>.</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:currency-style style:name="N288P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N288">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="fr" number:country="FR">€</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N288P0"/>
</number:currency-style>
<number:currency-style style:name="N290P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N290">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N290P0"/>
</number:currency-style>
<number:number-style style:name="N291">
<number:number number:decimal-places="16" number:min-decimal-places="16" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N294P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N294P1" style:volatile="true">
<number:text> (</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N294P2" style:volatile="true">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N294">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N294P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N294P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N294P2"/>
</number:text-style>
<number:time-style style:name="N295">
<number:minutes number:style="long"/>
<number:text>:</number:text>
<number:seconds number:style="long" number:decimal-places="1"/>
</number:time-style>
<number:time-style style:name="N296">
<number:minutes number:style="long"/>
<number:text>:</number:text>
<number:seconds number:style="long"/>
</number:time-style>
<number:currency-style style:name="N298P0" style:volatile="true">
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N298">
<number:text>-</number:text>
<number:currency-symbol number:language="en" number:country="GB">£</number:currency-symbol>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N298P0"/>
</number:currency-style>
<number:number-style style:name="N299P0" style:volatile="true">
<number:text>\</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
</number:number-style>
<number:number-style style:name="N299">
<style:text-properties fo:color="#ff0000"/>
<number:text>\-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N299P0"/>
</number:number-style>
<number:currency-style style:name="N301P0" style:volatile="true">
<number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
<number:text> </number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
</number:currency-style>
<number:currency-style style:name="N301">
<number:currency-symbol number:language="nl" number:country="NL">€</number:currency-symbol>
<number:text> -</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N301P0"/>
</number:currency-style>
<number:currency-style style:name="N303P0" style:volatile="true">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N303">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="de" number:country="DE">€</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N303P0"/>
</number:currency-style>
<number:number-style style:name="N304">
<number:number number:decimal-places="10" number:min-decimal-places="10" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N305">
<number:number number:decimal-places="13" number:min-decimal-places="13" number:min-integer-digits="1"/>
</number:number-style>
<number:number-style style:name="N306P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N306">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N306P0"/>
</number:number-style>
<number:currency-style style:name="N307P0" style:volatile="true">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
</number:currency-style>
<number:currency-style style:name="N307">
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<number:currency-symbol number:language="cs" number:country="CZ">Kč</number:currency-symbol>
<style:map style:condition="value()>=0" style:apply-style-name="N307P0"/>
</number:currency-style>
<number:time-style style:name="N308" number:truncate-on-overflow="false">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
<number:text>:</number:text>
<number:seconds number:style="long"/>
</number:time-style>
<number:number-style style:name="N309P0" style:volatile="true">
<number:text>\</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
</number:number-style>
<number:number-style style:name="N309">
<number:text>\-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<style:map style:condition="value()>=0" style:apply-style-name="N309P0"/>
</number:number-style>
<number:date-style style:name="N10129" number:language="en" number:country="US">
<number:month/>
<number:text>/</number:text>
<number:day/>
<number:text>/</number:text>
<number:year number:style="long"/>
</number:date-style>
<number:date-style style:name="N10130" number:language="en" number:country="US">
<number:day/>
<number:text>-</number:text>
<number:month number:textual="true"/>
<number:text>-</number:text>
<number:year/>
</number:date-style>
<number:date-style style:name="N10131" number:language="en" number:country="US">
<number:day/>
<number:text>-</number:text>
<number:month number:textual="true"/>
</number:date-style>
<number:date-style style:name="N10132" number:language="en" number:country="US">
<number:month number:textual="true"/>
<number:text>-</number:text>
<number:year/>
</number:date-style>
<number:time-style style:name="N10133" number:language="en" number:country="US">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
<number:text> </number:text>
<number:am-pm/>
</number:time-style>
<number:time-style style:name="N10134" number:language="en" number:country="US">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
<number:text>:</number:text>
<number:seconds number:style="long"/>
<number:text> </number:text>
<number:am-pm/>
</number:time-style>
<number:time-style style:name="N10135" number:language="en" number:country="US">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
</number:time-style>
<number:time-style style:name="N10136" number:language="en" number:country="US">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
<number:text>:</number:text>
<number:seconds number:style="long"/>
</number:time-style>
<number:date-style style:name="N10137" number:language="en" number:country="US">
<number:month/>
<number:text>/</number:text>
<number:day/>
<number:text>/</number:text>
<number:year number:style="long"/>
<number:text> </number:text>
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
</number:date-style>
<number:number-style style:name="N10139P0" style:volatile="true" number:language="en" number:country="US">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N10139" number:language="en" number:country="US">
<style:text-properties fo:color="#ff0000"/>
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10139P0"/>
</number:number-style>
<number:number-style style:name="N10141P0" style:volatile="true" number:language="en" number:country="US">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N10141" number:language="en" number:country="US">
<style:text-properties fo:color="#ff0000"/>
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10141P0"/>
</number:number-style>
<number:currency-style style:name="N10143P0" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N10143" number:language="en" number:country="US">
<number:text>(</number:text>
<number:currency-symbol/>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10143P0"/>
</number:currency-style>
<number:currency-style style:name="N10144P0" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N10144" number:language="en" number:country="US">
<style:text-properties fo:color="#ff0000"/>
<number:text>(</number:text>
<number:currency-symbol/>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10144P0"/>
</number:currency-style>
<number:currency-style style:name="N10146P0" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N10146" number:language="en" number:country="US">
<number:text>(</number:text>
<number:currency-symbol/>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10146P0"/>
</number:currency-style>
<number:currency-style style:name="N10147P0" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N10147" number:language="en" number:country="US">
<style:text-properties fo:color="#ff0000"/>
<number:text>(</number:text>
<number:currency-symbol/>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10147P0"/>
</number:currency-style>
<number:number-style style:name="N10148P0" style:volatile="true" number:language="en" number:country="US">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N10148" number:language="en" number:country="US">
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10148P0"/>
</number:number-style>
<number:number-style style:name="N10149P0" style:volatile="true" number:language="en" number:country="US">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N10149" number:language="en" number:country="US">
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N10149P0"/>
</number:number-style>
<number:number-style style:name="N10153P0" style:volatile="true" number:language="en" number:country="US">
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N10153P1" style:volatile="true" number:language="en" number:country="US">
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N10153P2" style:volatile="true" number:language="en" number:country="US">
<number:fill-character> </number:fill-character>
<number:text>- </number:text>
</number:number-style>
<number:text-style style:name="N10153" number:language="en" number:country="US">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N10153P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N10153P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N10153P2"/>
</number:text-style>
<number:currency-style style:name="N10157P0" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N10157P1" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:currency-style>
<number:currency-style style:name="N10157P2" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:fill-character> </number:fill-character>
<number:text>- </number:text>
</number:currency-style>
<number:text-style style:name="N10157" number:language="en" number:country="US">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N10157P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N10157P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N10157P2"/>
</number:text-style>
<number:number-style style:name="N10161P0" style:volatile="true" number:language="en" number:country="US">
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N10161P1" style:volatile="true" number:language="en" number:country="US">
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:number-style>
<number:number-style style:name="N10161P2" style:volatile="true" number:language="en" number:country="US">
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:number-style>
<number:text-style style:name="N10161" number:language="en" number:country="US">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N10161P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N10161P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N10161P2"/>
</number:text-style>
<number:currency-style style:name="N10165P0" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:fill-character> </number:fill-character>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:currency-style>
<number:currency-style style:name="N10165P1" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:fill-character> </number:fill-character>
<number:text>(</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text>)</number:text>
</number:currency-style>
<number:currency-style style:name="N10165P2" style:volatile="true" number:language="en" number:country="US">
<number:currency-symbol/>
<number:fill-character> </number:fill-character>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="0"/>
<number:text> </number:text>
</number:currency-style>
<number:text-style style:name="N10165" number:language="en" number:country="US">
<number:text-content/>
<number:text> </number:text>
<style:map style:condition="value()>0" style:apply-style-name="N10165P0"/>
<style:map style:condition="value()<0" style:apply-style-name="N10165P1"/>
<style:map style:condition="value()=0" style:apply-style-name="N10165P2"/>
</number:text-style>
<number:number-style style:name="N10166" number:language="en" number:country="US">
<number:scientific-number number:decimal-places="14" number:min-decimal-places="14" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/>
</number:number-style>
<number:number-style style:name="N10167" number:language="en" number:country="US">
<number:scientific-number number:decimal-places="15" number:min-decimal-places="15" number:min-integer-digits="1" number:min-exponent-digits="3" number:exponent-interval="1" number:forced-exponent-sign="true"/>
</number:number-style>
<number:date-style style:name="N20114" number:language="de" number:country="DE">
<number:day number:style="long"/>
<number:text>. </number:text>
<number:month number:textual="true"/>
<number:text> </number:text>
<number:year/>
</number:date-style>
<number:date-style style:name="N20115" number:language="de" number:country="DE">
<number:day number:style="long"/>
<number:text>. </number:text>
<number:month number:textual="true"/>
</number:date-style>
<number:date-style style:name="N20116" number:language="de" number:country="DE">
<number:month number:textual="true"/>
<number:text> </number:text>
<number:year/>
</number:date-style>
<number:time-style style:name="N20117" number:language="de" number:country="DE">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
<number:text> </number:text>
<number:am-pm/>
</number:time-style>
<number:time-style style:name="N20118" number:language="de" number:country="DE">
<number:hours/>
<number:text>:</number:text>
<number:minutes number:style="long"/>
<number:text>:</number:text>
<number:seconds number:style="long"/>
<number:text> </number:text>
<number:am-pm/>
</number:time-style>
<number:number-style style:name="N20120P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N20120" number:language="de" number:country="DE">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20120P0"/>
</number:number-style>
<number:number-style style:name="N20121P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N20121" number:language="de" number:country="DE">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20121P0"/>
</number:number-style>
<number:number-style style:name="N20123P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N20123" number:language="de" number:country="DE">
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20123P0"/>
</number:number-style>
<number:number-style style:name="N20124P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
</number:number-style>
<number:number-style style:name="N20124" number:language="de" number:country="DE">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> </number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20124P0"/>
</number:number-style>
<number:number-style style:name="N20126P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N20126" number:language="de" number:country="DE">
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20126P0"/>
</number:number-style>
<number:number-style style:name="N20127P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N20127" number:language="de" number:country="DE">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20127P0"/>
</number:number-style>
<number:number-style style:name="N20129P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N20129" number:language="de" number:country="DE">
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20129P0"/>
</number:number-style>
<number:number-style style:name="N20130P0" style:volatile="true" number:language="de" number:country="DE">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
</number:number-style>
<number:number-style style:name="N20130" number:language="de" number:country="DE">
<style:text-properties fo:color="#ff0000"/>
<number:text>-</number:text>
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1" number:grouping="true"/>
<number:text> €</number:text>
<style:map style:condition="value()>=0" style:apply-style-name="N20130P0"/>
</number:number-style>
<style:style style:name="Default" style:family="table-cell"/>
<style:style style:name="Heading" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:color="#000000" fo:font-size="24pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="24pt" style:font-style-asian="normal" style:font-weight-asian="bold" style:font-size-complex="24pt" style:font-style-complex="normal" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="table-cell" style:parent-style-name="Heading">
<style:text-properties fo:font-size="18pt" style:font-size-asian="18pt" style:font-size-complex="18pt"/>
</style:style>
<style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="table-cell" style:parent-style-name="Heading">
<style:text-properties fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
</style:style>
<style:style style:name="Text" style:family="table-cell" style:parent-style-name="Default"/>
<style:style style:name="Note" style:family="table-cell" style:parent-style-name="Text">
<style:table-cell-properties fo:background-color="#ffffcc" style:diagonal-bl-tr="none" style:diagonal-tl-br="none" fo:border="0.74pt solid #808080"/>
<style:text-properties fo:color="#333333"/>
</style:style>
<style:style style:name="Footnote" style:family="table-cell" style:parent-style-name="Text">
<style:text-properties fo:color="#808080" fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
</style:style>
<style:style style:name="Hyperlink" style:family="table-cell" style:parent-style-name="Text">
<style:text-properties fo:color="#0000ee" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="#0000ee"/>
</style:style>
<style:style style:name="Status" style:family="table-cell" style:parent-style-name="Default"/>
<style:style style:name="Good" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#ccffcc"/>
<style:text-properties fo:color="#006600"/>
</style:style>
<style:style style:name="Neutral" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#ffffcc"/>
<style:text-properties fo:color="#996600"/>
</style:style>
<style:style style:name="Bad" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#ffcccc"/>
<style:text-properties fo:color="#cc0000"/>
</style:style>
<style:style style:name="Warning" style:family="table-cell" style:parent-style-name="Status">
<style:text-properties fo:color="#cc0000"/>
</style:style>
<style:style style:name="Error" style:family="table-cell" style:parent-style-name="Status">
<style:table-cell-properties fo:background-color="#cc0000"/>
<style:text-properties fo:color="#ffffff" fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Accent" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="Accent_20_1" style:display-name="Accent 1" style:family="table-cell" style:parent-style-name="Accent">
<style:table-cell-properties fo:background-color="#000000"/>
<style:text-properties fo:color="#ffffff"/>
</style:style>
<style:style style:name="Accent_20_2" style:display-name="Accent 2" style:family="table-cell" style:parent-style-name="Accent">
<style:table-cell-properties fo:background-color="#808080"/>
<style:text-properties fo:color="#ffffff"/>
</style:style>
<style:style style:name="Accent_20_3" style:display-name="Accent 3" style:family="table-cell" style:parent-style-name="Accent">
<style:table-cell-properties fo:background-color="#dddddd"/>
</style:style>
<style:style style:name="Result" style:family="table-cell" style:parent-style-name="Default">
<style:text-properties fo:font-style="italic" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" fo:font-weight="bold" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-style-complex="italic" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="false" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:background-color="#ff3333"/>
</style:style>
<style:style style:name="true" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:background-color="#99ff66"/>
</style:style>
<draw:marker draw:name="Arrowheads_20_1" draw:display-name="Arrowheads 1" svg:viewBox="0 0 20 30" svg:d="M10 0l-10 30h20z"/>
<loext:theme loext:name="Office">
<loext:theme-colors loext:name="LibreOffice">
<loext:color loext:name="dark1" loext:color="#000000"/>
<loext:color loext:name="light1" loext:color="#ffffff"/>
<loext:color loext:name="dark2" loext:color="#000000"/>
<loext:color loext:name="light2" loext:color="#ffffff"/>
<loext:color loext:name="accent1" loext:color="#18a303"/>
<loext:color loext:name="accent2" loext:color="#0369a3"/>
<loext:color loext:name="accent3" loext:color="#a33e03"/>
<loext:color loext:name="accent4" loext:color="#8e03a3"/>
<loext:color loext:name="accent5" loext:color="#c99c00"/>
<loext:color loext:name="accent6" loext:color="#c9211e"/>
<loext:color loext:name="hyperlink" loext:color="#0000ee"/>
<loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
</loext:theme-colors>
</loext:theme>
</office:styles>
<office:automatic-styles>
<style:style style:name="co1" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="3.884cm"/>
</style:style>
<style:style style:name="co2" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="1.365cm"/>
</style:style>
<style:style style:name="co3" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="10.633cm"/>
</style:style>
<style:style style:name="co4" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="2.258cm"/>
</style:style>
<style:style style:name="co5" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="3.341cm"/>
</style:style>
<style:style style:name="co6" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="1.473cm"/>
</style:style>
<style:style style:name="co7" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="13.19cm"/>
</style:style>
<style:style style:name="co8" style:family="table-column">
<style:table-column-properties fo:break-before="auto" style:column-width="5.657cm"/>
</style:style>
<style:style style:name="ro1" style:family="table-row">
<style:table-row-properties style:row-height="1.614cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ro2" style:family="table-row">
<style:table-row-properties style:row-height="0.452cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ro3" style:family="table-row">
<style:table-row-properties style:row-height="0.612cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ro4" style:family="table-row">
<style:table-row-properties style:row-height="0.529cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ro5" style:family="table-row">
<style:table-row-properties style:row-height="1.656cm" fo:break-before="auto" style:use-optimal-row-height="true"/>
</style:style>
<style:style style:name="ta1" style:family="table" style:master-page-name="Default">
<style:table-properties table:display="true" style:writing-mode="lr-tb"/>
</style:style>
<number:number-style style:name="N2">
<number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/>
</number:number-style>
<number:boolean-style style:name="N99">
<number:boolean/>
</number:boolean-style>
<style:style style:name="ce9" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:wrap-option="wrap"/>
<style:text-properties fo:font-size="20pt" fo:font-weight="bold" style:font-size-asian="20pt" style:font-weight-asian="bold" style:font-size-complex="20pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce11" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
<style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce13" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
<style:text-properties fo:font-size="12pt" fo:font-weight="bold" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-weight-complex="bold"/>
</style:style>
<style:style style:name="ce14" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
<style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
</style:style>
<style:style style:name="ce5" style:family="table-cell" style:parent-style-name="Default">
<style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
</style:style>
<style:style style:name="ce16" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
<style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
<style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
</style:style>
<style:style style:name="ce17" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99">
<style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet1.B3"/>
<style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet1.B3"/>
</style:style>
<style:style style:name="ce22" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
<style:paragraph-properties fo:text-align="center" fo:margin-left="0cm"/>
</style:style>
<style:style style:name="ce10" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99"/>
<style:style style:name="ce18" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N99">
<style:map style:condition="cell-content()=""" style:apply-style-name="Default" style:base-cell-address="Sheet2.C2"/>
<style:map style:condition="cell-content()=1" style:apply-style-name="true" style:base-cell-address="Sheet2.C2"/>
<style:map style:condition="cell-content()=0" style:apply-style-name="false" style:base-cell-address="Sheet2.C2"/>
</style:style>
<style:style style:name="ce12" style:family="table-cell" style:parent-style-name="Default">
<style:table-cell-properties fo:wrap-option="wrap"/>
</style:style>
<style:page-layout style:name="pm1">
<style:page-layout-properties style:writing-mode="lr-tb"/>
<style:header-style>
<style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm"/>
</style:header-style>
<style:footer-style>
<style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm"/>
</style:footer-style>
</style:page-layout>
<style:page-layout style:name="pm2">
<style:page-layout-properties style:writing-mode="lr-tb"/>
<style:header-style>
<style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0">
<style:background-image/>
</style:header-footer-properties>
</style:header-style>
<style:footer-style>
<style:header-footer-properties fo:min-height="0.75cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.25cm" fo:border="1.5pt solid #000000" fo:padding="0.018cm" fo:background-color="#c0c0c0">
<style:background-image/>
</style:header-footer-properties>
</style:footer-style>
</style:page-layout>
</office:automatic-styles>
<office:master-styles>
<style:master-page style:name="Default" style:page-layout-name="pm1">
<style:header>
<text:p><text:sheet-name>???</text:sheet-name></text:p>
</style:header>
<style:header-left style:display="false"/>
<style:header-first style:display="false"/>
<style:footer>
<text:p>Page <text:page-number>1</text:page-number></text:p>
</style:footer>
<style:footer-left style:display="false"/>
<style:footer-first style:display="false"/>
</style:master-page>
<style:master-page style:name="Report" style:page-layout-name="pm2">
<style:header>
<style:region-left>
<text:p><text:sheet-name>???</text:sheet-name><text:s/>(<text:title>???</text:title>)</text:p>
</style:region-left>
<style:region-right>
<text:p><text:date style:data-style-name="N2" text:date-value="2024-01-26">0000.00.00</text:date>, <text:time style:data-style-name="N2" text:time-value="18:11:05.851000000">00:00:00</text:time></text:p>
</style:region-right>
</style:header>
<style:header-left style:display="false"/>
<style:header-first style:display="false"/>
<style:footer>
<text:p>Page <text:page-number>1</text:page-number><text:s/>/ <text:page-count>99</text:page-count></text:p>
</style:footer>
<style:footer-left style:display="false"/>
<style:footer-first style:display="false"/>
</style:master-page>
</office:master-styles>
<office:body>
<office:spreadsheet>
<table:calculation-settings table:automatic-find-labels="false" table:use-regular-expressions="false" table:use-wildcards="true"/>
<table:table table:name="Sheet1" table:style-name="ta1">
<table:table-column table:style-name="co1" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co2" table:default-cell-style-name="ce5"/>
<table:table-column table:style-name="co3" table:default-cell-style-name="Default"/>
<table:table-row table:style-name="ro1">
<table:table-cell table:style-name="ce9" office:value-type="string" calcext:value-type="string">
<text:p>XLOOKUP Function</text:p>
</table:table-cell>
<table:table-cell table:style-name="Default"/>
<table:table-cell/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell/>
<table:table-cell table:style-name="Default"/>
<table:table-cell/>
</table:table-row>
<table:table-row table:style-name="ro3">
<table:table-cell table:style-name="ce11" office:value-type="string" calcext:value-type="string">
<text:p>Result</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce14" table:formula="of:=AND([.B8:.B95])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell/>
</table:table-row>
<table:table-row table:style-name="ro2" table:number-rows-repeated="3">
<table:table-cell table:number-columns-repeated="3"/>
</table:table-row>
<table:table-row table:style-name="ro4">
<table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string">
<text:p>Sheet</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce16" office:value-type="string" calcext:value-type="string">
<text:p>Result</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce13" office:value-type="string" calcext:value-type="string">
<text:p>Description</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce14" table:formula="of:=AND([Sheet2.C2:.C201])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce22" office:value-type="string" calcext:value-type="string">
<text:p>Simple XLOOKUP formulas with local references and values</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2" table:number-rows-repeated="20">
<table:table-cell/>
<table:table-cell table:style-name="ce17"/>
<table:table-cell/>
</table:table-row>
<table:table-row table:style-name="ro2" table:number-rows-repeated="21">
<table:table-cell table:number-columns-repeated="3"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="3"/>
</table:table-row>
<calcext:conditional-formats>
<calcext:conditional-format calcext:target-range-address="Sheet1.B3:Sheet1.B50">
<calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet1.B3"/>
<calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet1.B3"/>
<calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet1.B3"/>
</calcext:conditional-format>
</calcext:conditional-formats>
</table:table>
<table:table table:name="Sheet2" table:style-name="ta1">
<table:table-column table:style-name="co5" table:number-columns-repeated="2" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co6" table:default-cell-style-name="ce10"/>
<table:table-column table:style-name="co7" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co8" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="co4" table:number-columns-repeated="15" table:default-cell-style-name="Default"/>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Function</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Expected</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Correct</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>FunctionString</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Comment</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>XL-test</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Country</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Abr</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Prefix</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Asc</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Desc</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
<text:p>5</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="4" calcext:value-type="float">
<text:p>4</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="6"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G2];[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+55" calcext:value-type="string">
<text:p>+55</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+55</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A2]=[.B2]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A2])" office:value-type="string" office:string-value="=XLOOKUP(G2;H2:H11;J2:J11)" calcext:value-type="string">
<text:p>=XLOOKUP(G2;H2:H11;J2:J11)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Brazil</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>China</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>CN</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+86</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0" calcext:value-type="float">
<text:p>0</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="10" calcext:value-type="float">
<text:p>10</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("India";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string">
<text:p>+91</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+91</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A3]=[.B3]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A3])" office:value-type="string" office:string-value="=XLOOKUP("India";H2:H11;J2:J11)" calcext:value-type="string">
<text:p>=XLOOKUP("India";H2:H11;J2:J11)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>India</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>IN</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+91</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="9" calcext:value-type="float">
<text:p>9</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("INDIA";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="+91" calcext:value-type="string">
<text:p>+91</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+91</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A4]=[.B4]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A4])" office:value-type="string" office:string-value="=XLOOKUP("INDIA";H2:H11;J2:J11)" calcext:value-type="string">
<text:p>=XLOOKUP("INDIA";H2:H11;J2:J11)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>United States</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>US</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="8" calcext:value-type="float">
<text:p>8</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A5])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A5])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11)" calcext:value-type="string">
<text:p>=XLOOKUP("Ireland";H2:H11;J2:J11)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Nigeria</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>NG2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>00234</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="7" calcext:value-type="float">
<text:p>7</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11];"")">
<text:p/>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p/>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A6]=[.B6]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A6])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;"")" calcext:value-type="string">
<text:p>=XLOOKUP("Ireland";H2:H11;J2:J11;"")</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Indonesia</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>ID</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+62</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="4" calcext:value-type="float">
<text:p>4</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11];-99)" office:value-type="float" office:value="-99" calcext:value-type="float">
<text:p>-99</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-99" calcext:value-type="float">
<text:p>-99</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A7]=[.B7]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A7])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;-99)" calcext:value-type="string">
<text:p>=XLOOKUP("Ireland";H2:H11;J2:J11;-99)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Brazil</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>BR</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+55</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2" office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Ireland";[.H2:.H11];[.J2:.J11];"Not here")" office:value-type="string" office:string-value="Not here" calcext:value-type="string">
<text:p>Not here</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Not here</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A8]=[.B8]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A8])" office:value-type="string" office:string-value="=XLOOKUP("Ireland";H2:H11;J2:J11;"Not here")" calcext:value-type="string">
<text:p>=XLOOKUP("Ireland";H2:H11;J2:J11;"Not here")</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Pakistan</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>PK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+92</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="4" calcext:value-type="float">
<text:p>4</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("";[.H2:.H11];[.J2:.J11])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A9])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A9])" office:value-type="string" office:string-value="=XLOOKUP("";H2:H11;J2:J11)" calcext:value-type="string">
<text:p>=XLOOKUP("";H2:H11;J2:J11)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Nigeria</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>NG</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+234</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="7" calcext:value-type="float">
<text:p>7</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Nigeria";[.H2:.H11];[.J2:.J11];;;1)" office:value-type="string" office:string-value="00234" calcext:value-type="string">
<text:p>00234</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>00234</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A10]=[.B10]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A10])" office:value-type="string" office:string-value="=XLOOKUP("Nigeria";H2:H11;J2:J11;;;1)" calcext:value-type="string">
<text:p>=XLOOKUP("Nigeria";H2:H11;J2:J11;;;1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Bangladesh</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>BD</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+880</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="8" calcext:value-type="float">
<text:p>8</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("Nigeria";[.H2:.H11];[.J2:.J11];;;-1)" office:value-type="string" office:string-value="+234" calcext:value-type="string">
<text:p>+234</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+234</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A11]=[.B11]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A11])" office:value-type="string" office:string-value="=XLOOKUP("Nigeria";H2:H11;J2:J11;;;-1)" calcext:value-type="string">
<text:p>=XLOOKUP("Nigeria";H2:H11;J2:J11;;;-1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Russia</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>RU</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+7</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="9" calcext:value-type="float">
<text:p>9</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Mexico</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>MX</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>+52</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="10" calcext:value-type="float">
<text:p>10</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0" calcext:value-type="float">
<text:p>0</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4390;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Ned Lanning" calcext:value-type="string">
<text:p>Ned Lanning</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Ned Lanning</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A14]=[.B14]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A14])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4390;I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="float" office:value="8299" calcext:value-type="float">
<text:p>8299</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>EmpID</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="4390" calcext:value-type="float">
<text:p>4390</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="8604" calcext:value-type="float">
<text:p>8604</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="8389" calcext:value-type="float">
<text:p>8389</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="4937" calcext:value-type="float">
<text:p>4937</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="8299" calcext:value-type="float">
<text:p>8299</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2643" calcext:value-type="float">
<text:p>2643</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="5243" calcext:value-type="float">
<text:p>5243</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="9693" calcext:value-type="float">
<text:p>9693</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1636" calcext:value-type="float">
<text:p>1636</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="6703" calcext:value-type="float">
<text:p>6703</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="Marketing" calcext:value-type="string">
<text:p>Marketing</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Marketing</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A15]=[.B15]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A15])" office:value-type="string" office:string-value="{=XLOOKUP(4390;I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4390;I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Name</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Ned Lanning</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Margo Hendrix</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Dianne Pugh</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Mia Arnold</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Jorge Fellows</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Rose Winters</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Carmela Hahn</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Delia Cochran</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Marguerite Cervantes</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G14];[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Mia Arnold" calcext:value-type="string">
<text:p>Mia Arnold</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Mia Arnold</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A16]=[.B16]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A16])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(G14;I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Dept</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Marketing</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Sales</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Finance</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Operations</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Executive</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Sales</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Finance</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Marketing</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="Operations" calcext:value-type="string">
<text:p>Operations</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Operations</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A17]=[.B17]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A17])" office:value-type="string" office:string-value="{=XLOOKUP(G14;I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(G14;I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G18];[.I14:.R14];[.I15:.R16];"ID not found")" office:value-type="string" office:string-value="ID not found" calcext:value-type="string">
<text:p>ID not found</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>ID not found</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A18]=[.B18]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A18])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}" calcext:value-type="string">
<text:p>{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="float" office:value="5678" calcext:value-type="float">
<text:p>5678</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="13"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="ID not found" calcext:value-type="string">
<text:p>ID not found</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>ID not found</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A19]=[.B19]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A19])" office:value-type="string" office:string-value="{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}" calcext:value-type="string">
<text:p>{=XLOOKUP(G18;I14:R14;I15:R16;"ID not found")}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP("";[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A20])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A20])" office:value-type="string" office:string-value="{=XLOOKUP("";I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP("";I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=#N/A" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISNA([.A21])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A21])" office:value-type="string" office:string-value="{=XLOOKUP("";I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP("";I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16];;1)" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A22]=[.B22]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A22])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;1)}</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p/>
</table:table-cell>
<table:table-cell table:number-columns-repeated="15"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A23]=[.B23]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A23])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;1)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;1)}</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p/>
</table:table-cell>
<table:table-cell table:number-columns-repeated="15"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16];;-1)" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A24]=[.B24]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A24])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A25]=[.B25]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A25])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4937;I14:R14;I15:R16;;-1)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP(4937;[.I14:.R14];[.I15:.R16])" office:value-type="string" office:string-value="Earlene McCartney" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Earlene McCartney</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A26]=[.B26]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A26])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4937;I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="Accounting" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Accounting</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A27]=[.B27]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A27])" office:value-type="string" office:string-value="{=XLOOKUP(4937;I14:R14;I15:R16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(4937;I14:R14;I15:R16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;1;1)" office:value-type="float" office:value="0.24" calcext:value-type="float">
<text:p>0,24</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
<text:p>0,24</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A29]=[.B29]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A29])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;1)" calcext:value-type="string">
<text:p>=XLOOKUP(G29;I30:I35;H30:H35;;1;1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="float" office:value="46523" calcext:value-type="float">
<text:p>46523</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>tax rate</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>max income</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;1;2)" office:value-type="float" office:value="0.24" calcext:value-type="float">
<text:p>0,24</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
<text:p>0,24</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" office:value-type="string" calcext:value-type="string">
<text:p/>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A30])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;1;2)" calcext:value-type="string">
<text:p>=XLOOKUP(G29;I30:I35;H30:H35;;1;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="float" office:value="0.1" calcext:value-type="float">
<text:p>0,1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-9700" calcext:value-type="float">
<text:p>-9700</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;-1;2)" office:value-type="float" office:value="0.22" calcext:value-type="float">
<text:p>0,22</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float">
<text:p>0,22</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A31]=[.B31]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A31])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)" calcext:value-type="string">
<text:p>=XLOOKUP(G29;I30:I35;H30:H35;;-1;2)</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p/>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="float" office:value="0.22" calcext:value-type="float">
<text:p>0,22</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="39475" calcext:value-type="float">
<text:p>39475</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.G29];[.I30:.I35];[.H30:.H35];;2;2)" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A32])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A32])" office:value-type="string" office:string-value="=XLOOKUP(G29;I30:I35;H30:H35;;2;2)" calcext:value-type="string">
<text:p>=XLOOKUP(G29;I30:I35;H30:H35;;2;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
<text:p>0,24</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="84200" calcext:value-type="float">
<text:p>84200</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="float" office:value="0.32" calcext:value-type="float">
<text:p>0,32</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="160726" calcext:value-type="float">
<text:p>160726</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="float" office:value="0.35" calcext:value-type="float">
<text:p>0,35</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="204100" calcext:value-type="float">
<text:p>204100</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="float" office:value="0.37" calcext:value-type="float">
<text:p>0,37</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="510300" calcext:value-type="float">
<text:p>510300</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="25000" calcext:value-type="float">
<text:p>25000</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float">
<text:p>25000</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A37]=[.B37]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A37])" office:value-type="string" office:string-value="=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string">
<text:p>=XLOOKUP(K37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Q1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>income stmnt</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Total sales</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cost of sales</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>gross profit</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>depriciation</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>interest</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>earnings before tax</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>tax</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>net profit</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>profit [%]</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.S37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="19342" calcext:value-type="float">
<text:p>19342</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float">
<text:p>19342</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A38]=[.B38]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A38])" office:value-type="string" office:string-value="=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string">
<text:p>=XLOOKUP(S37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Q1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="50000" calcext:value-type="float">
<text:p>50000</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-25000" calcext:value-type="float">
<text:p>-25000</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="25000" calcext:value-type="float">
<text:p>25000</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-899" calcext:value-type="float">
<text:p>-899</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-513" calcext:value-type="float">
<text:p>-513</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="23588" calcext:value-type="float">
<text:p>23588</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-4246" calcext:value-type="float">
<text:p>-4246</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="19342" calcext:value-type="float">
<text:p>19342</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float">
<text:p>0,293</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.T37];[.$I37:.$T37];COM.MICROSOFT.XLOOKUP([.$G37];[.$H38:.$H42];[.$I38:.$T42]))" office:value-type="float" office:value="0.293" calcext:value-type="float">
<text:p>0,293</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.293" calcext:value-type="float">
<text:p>0,293</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A39]=[.B39]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A39])" office:value-type="string" office:string-value="=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))" calcext:value-type="string">
<text:p>=XLOOKUP(T37;$I37:$T37;XLOOKUP($G37;$H38:$H42;$I38:$T42))</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Q2</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="78200" calcext:value-type="float">
<text:p>78200</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-42050" calcext:value-type="float">
<text:p>-42050</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="36150" calcext:value-type="float">
<text:p>36150</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-791" calcext:value-type="float">
<text:p>-791</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-853" calcext:value-type="float">
<text:p>-853</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="34506" calcext:value-type="float">
<text:p>34506</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-6211" calcext:value-type="float">
<text:p>-6211</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="28295" calcext:value-type="float">
<text:p>28295</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.278" calcext:value-type="float">
<text:p>0,278</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Q3</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="89500" calcext:value-type="float">
<text:p>89500</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-59450" calcext:value-type="float">
<text:p>-59450</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="30050" calcext:value-type="float">
<text:p>30050</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-202" calcext:value-type="float">
<text:p>-202</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-150" calcext:value-type="float">
<text:p>-150</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="29698" calcext:value-type="float">
<text:p>29698</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-5346" calcext:value-type="float">
<text:p>-5346</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="24352" calcext:value-type="float">
<text:p>24352</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.234" calcext:value-type="float">
<text:p>0,234</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-matrix-columns-spanned="1" table:number-matrix-rows-spanned="2" table:formula="of:=COM.MICROSOFT.XLOOKUP([.G14];[.$H14:.$R14];[.$H$15:.$R$16])" office:value-type="string" office:string-value="Mia Arnold" calcext:value-type="string">
<text:p>Mia Arnold</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Mia Arnold</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A41]=[.B41]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A41])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Q4</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="91250" calcext:value-type="float">
<text:p>91250</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-60450" calcext:value-type="float">
<text:p>-60450</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="30800" calcext:value-type="float">
<text:p>30800</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-412" calcext:value-type="float">
<text:p>-412</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-956" calcext:value-type="float">
<text:p>-956</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="29432" calcext:value-type="float">
<text:p>29432</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-5298" calcext:value-type="float">
<text:p>-5298</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="24134" calcext:value-type="float">
<text:p>24134</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.276" calcext:value-type="float">
<text:p>0,276</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell office:value-type="string" office:string-value="Operations" calcext:value-type="string">
<text:p>Operations</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Operations</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A42]=[.B42]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A42])" office:value-type="string" office:string-value="{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}" calcext:value-type="string">
<text:p>{=XLOOKUP(G14;$H14:$R14;$H$15:$R$16)}</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Total</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="308950" calcext:value-type="float">
<text:p>308950</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-186950" calcext:value-type="float">
<text:p>-186950</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="122000" calcext:value-type="float">
<text:p>122000</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-2304" calcext:value-type="float">
<text:p>-2304</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="-2472" calcext:value-type="float">
<text:p>-2472</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="117224" calcext:value-type="float">
<text:p>117224</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="-21101" calcext:value-type="float">
<text:p>-21101</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="96123" calcext:value-type="float">
<text:p>96123</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.27025" calcext:value-type="float">
<text:p>0,27025</text:p>
</table:table-cell>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro5">
<table:table-cell table:formula="of:=SUM(COM.MICROSOFT.XLOOKUP([.G44];[.H45:.H49];[.K45:.K49]):COM.MICROSOFT.XLOOKUP([.G45];[.H45:.H49];[.K45:.K49]))" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>Err:502</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="11070" calcext:value-type="float">
<text:p>11070</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:formula="of:=FORMULA([.A44])" office:value-type="string" office:string-value="=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))" calcext:value-type="string">
<text:p>=SUM(XLOOKUP(G44;H45:H49;K45:K49):XLOOKUP(G45;H45:H49;K45:K49))</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce12" office:value-type="string" calcext:value-type="string">
<text:p>XLOOKUP should (in this case) return a range (TODO: Missing feature from Calc: Evaluate Formula)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Grape</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>product</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>qty</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>price</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>total</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="9"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Banana</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Apple</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="23" calcext:value-type="float">
<text:p>23</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.52" calcext:value-type="float">
<text:p>0,52</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=[.I45]*[.J45]" office:value-type="float" office:value="11.96" calcext:value-type="float">
<text:p>11,96</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="9"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Grape</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="98" calcext:value-type="float">
<text:p>98</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.77" calcext:value-type="float">
<text:p>0,77</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=[.I46]*[.J46]" office:value-type="float" office:value="75.46" calcext:value-type="float">
<text:p>75,46</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="9"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Pear</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="75" calcext:value-type="float">
<text:p>75</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.24" calcext:value-type="float">
<text:p>0,24</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=[.I47]*[.J47]" office:value-type="float" office:value="18" calcext:value-type="float">
<text:p>18</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="9"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Banana</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="95" calcext:value-type="float">
<text:p>95</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.18" calcext:value-type="float">
<text:p>0,18</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=[.I48]*[.J48]" office:value-type="float" office:value="17.1" calcext:value-type="float">
<text:p>17,1</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="9"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Cherry</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="42" calcext:value-type="float">
<text:p>42</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="0.16" calcext:value-type="float">
<text:p>0,16</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=[.I49]*[.J49]" office:value-type="float" office:value="6.72" calcext:value-type="float">
<text:p>6,72</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="9"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("B";[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>Err:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A51])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A51])" office:value-type="string" office:string-value="=XLOOKUP("B";H51:H53;K51:K52)" calcext:value-type="string">
<text:p>=XLOOKUP("B";H51:H53;K51:K52)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>D</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>d</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H51:.H53];[.K51:.K52])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>Err:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A52])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A52])" office:value-type="string" office:string-value="=XLOOKUP("C";H51:H53;K51:K52)" calcext:value-type="string">
<text:p>=XLOOKUP("C";H51:H53;K51:K52)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>B</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>E</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("E";[.H51:.I53];[.K51:.L53])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>Err:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A53])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A53])" office:value-type="string" office:string-value="=XLOOKUP("E";H51:I53;K51:L53)" calcext:value-type="string">
<text:p>=XLOOKUP("E";H51:I53;K51:L53)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>C</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>F</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>f</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("E";[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>Err:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A54])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A54])" office:value-type="string" office:string-value="=XLOOKUP("E";H51:I53;K51:K53)" calcext:value-type="string">
<text:p>=XLOOKUP("E";H51:I53;K51:K53)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H51:.I53];[.K51:.K53])" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>Err:504</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>err:504</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A55])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A55])" office:value-type="string" office:string-value="=XLOOKUP("C";H51:I53;K51:K53)" calcext:value-type="string">
<text:p>=XLOOKUP("C";H51:I53;K51:K53)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2" table:number-rows-repeated="2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;0;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A58]=[.B58]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A58])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)" calcext:value-type="string">
<text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
<text:p>5</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a6</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;-1;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A59]=[.B59]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A59])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)" calcext:value-type="string">
<text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
<text:p>5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b5</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;1;1)" office:value-type="string" office:string-value="a5" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A60]=[.B60]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A60])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)" calcext:value-type="string">
<text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;2;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A61]=[.B61]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A61])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)" calcext:value-type="string">
<text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="float" office:value="5.2" calcext:value-type="float">
<text:p>5,2</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>D5.2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>d6</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>d2</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;0;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A62]=[.B62]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A62])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)" calcext:value-type="string">
<text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;0;-1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e6</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e1</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;-1;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A63]=[.B63]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A63])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)" calcext:value-type="string">
<text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;-1;-1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.I$58:.I$62];[.L$58:.L$62];;1;-1)" office:value-type="string" office:string-value="a5" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A64]=[.B64]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A64])" office:value-type="string" office:string-value="=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)" calcext:value-type="string">
<text:p>=XLOOKUP(4;I$58:I$62;L$58:L$62;;1;-1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.I$58:.I$62];[.L$58:.L$62];;2;-1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A65]=[.B65]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A65])" office:value-type="string" office:string-value="=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)" calcext:value-type="string">
<text:p>=XLOOKUP(3;I$58:I$62;L$58:L$62;;2;-1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$58:.H$62];[.K$58:.K$62];;0;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A66]=[.B66]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A66])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)" calcext:value-type="string">
<text:p>=XLOOKUP(3;H$58:H$62;K$58:K$62;;0;2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$58:.H$62];[.K$58:.K$62];;-1;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A67]=[.B67]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A67])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)" calcext:value-type="string">
<text:p>=XLOOKUP(4;H$58:H$62;K$58:K$62;;-1;2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$58:.H$62];[.K$58:.K$62];;1;2)" office:value-type="string" office:string-value="D5.2" calcext:value-type="string">
<text:p>D5.2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>D5.2</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A68]=[.B68]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A68])" office:value-type="string" office:string-value="=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)" calcext:value-type="string">
<text:p>=XLOOKUP(4;H$58:H$62;K$58:K$62;;1;2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$58:.H$62];[.K$58:.K$62];;2;2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A69]=[.B69]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A69])" office:value-type="string" office:string-value="=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)" calcext:value-type="string">
<text:p>=XLOOKUP(3;H$58:H$62;K$58:K$62;;2;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.J$58:.J$62];[.M$58:.M$62];;0;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A70]=[.B70]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A70])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)" calcext:value-type="string">
<text:p>=XLOOKUP(3;J$58:J$62;M$58:M$62;;0;-2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.J$58:.J$62];[.M$58:.M$62];;-1;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A71]=[.B71]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A71])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)" calcext:value-type="string">
<text:p>=XLOOKUP(4;J$58:J$62;M$58:M$62;;-1;-2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.J$58:.J$62];[.M$58:.M$62];;1;-2)" office:value-type="string" office:string-value="b5" calcext:value-type="string">
<text:p>b5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b5</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A72]=[.B72]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A72])" office:value-type="string" office:string-value="=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)" calcext:value-type="string">
<text:p>=XLOOKUP(4;J$58:J$62;M$58:M$62;;1;-2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.J$58:.J$62];[.M$58:.M$62];;2;-2)" office:value-type="string" office:string-value="c3" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A73]=[.B73]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A73])" office:value-type="string" office:string-value="=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)" calcext:value-type="string">
<text:p>=XLOOKUP(3;J$58:J$62;M$58:M$62;;2;-2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$74:.L$74];[.H$75:.L$75];;0;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A74]=[.B74]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A74])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)" calcext:value-type="string">
<text:p>=XLOOKUP(3;H$74:L$74;H$75:L$75;;0;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
<text:p>5</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="6" calcext:value-type="float">
<text:p>6</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$74:.L$74];[.H$75:.L$75];;-1;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A75]=[.B75]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A75])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)" calcext:value-type="string">
<text:p>=XLOOKUP(4;H$74:L$74;H$75:L$75;;-1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>d6</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e2</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(4;[.H$74:.L$74];[.H$75:.L$75];;1;1)" office:value-type="string" office:string-value="a5" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a5</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A76]=[.B76]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A76])" office:value-type="string" office:string-value="=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)" calcext:value-type="string">
<text:p>=XLOOKUP(4;H$74:L$74;H$75:L$75;;1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP(3;[.H$74:.L$74];[.H$75:.L$75];;2;1)" office:value-type="string" office:string-value="b3" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b3</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A77]=[.B77]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A77])" office:value-type="string" office:string-value="=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)" calcext:value-type="string">
<text:p>=XLOOKUP(3;H$74:L$74;H$75:L$75;;2;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.I$79:.I$83];[.L$79:.L$83];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A79]=[.B79]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A79])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string">
<text:p>=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>E</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>F</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aA</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>fF</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A80]=[.B80]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A80])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string">
<text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>B</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>C</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>E</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bB</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eE</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A81]=[.B81]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A81])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string">
<text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>C</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>C</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cA</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("b?b";[.I$84:.I$88];[.L$79:.L$83];;2;1)" office:value-type="string" office:string-value="eB" calcext:value-type="string">
<text:p>eB</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eB</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A82]=[.B82]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A82])" office:value-type="string" office:string-value="=XLOOKUP("b?b";I$84:I$88;L$79:L$83;;2;1)" calcext:value-type="string">
<text:p>=XLOOKUP("b?b";I$84:I$88;L$79:L$83;;2;1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>E</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>F</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>B</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>dF</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bB</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.I$79:.I$83];[.L$79:.L$83];;0;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A83]=[.B83]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A83])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;-1)" calcext:value-type="string">
<text:p>=XLOOKUP("C";I$79:I$83;L$79:L$83;;0;-1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>F</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>B</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>fF</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eB</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aA</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="7"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;-1;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A84]=[.B84]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A84])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;-1)" calcext:value-type="string">
<text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;-1;-1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eEe</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.I$79:.I$83];[.L$79:.L$83];;1;-1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A85]=[.B85]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A85])" office:value-type="string" office:string-value="=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;-1)" calcext:value-type="string">
<text:p>=XLOOKUP("D";I$79:I$83;L$79:L$83;;1;-1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cCc</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.I$79:.I$83];[.L$79:.L$83];;2;-1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A86]=[.B86]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A86])" office:value-type="string" office:string-value="=XLOOKUP("C";I$79:I$83;L$79:L$83;;2;-1)" calcext:value-type="string">
<text:p>=XLOOKUP("C";I$79:I$83;L$79:L$83;;2;-1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aAa</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H$79:.H$83];[.K$79:.K$83];;0;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A87]=[.B87]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A87])" office:value-type="string" office:string-value="=XLOOKUP("C";H$79:H$83;K$79:K$83;;0;2)" calcext:value-type="string">
<text:p>=XLOOKUP("C";H$79:H$83;K$79:K$83;;0;2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>fFf</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$79:.H$83];[.K$79:.K$83];;-1;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A88]=[.B88]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A88])" office:value-type="string" office:string-value="=XLOOKUP("D";H$79:H$83;K$79:K$83;;-1;2)" calcext:value-type="string">
<text:p>=XLOOKUP("D";H$79:H$83;K$79:K$83;;-1;2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bBb</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$79:.H$83];[.K$79:.K$83];;1;2)" office:value-type="string" office:string-value="eE" calcext:value-type="string">
<text:p>eE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eE</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A89]=[.B89]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A89])" office:value-type="string" office:string-value="=XLOOKUP("D";H$79:H$83;K$79:K$83;;1;2)" calcext:value-type="string">
<text:p>=XLOOKUP("D";H$79:H$83;K$79:K$83;;1;2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H$79:.H$83];[.K$79:.K$83];;2;2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A90]=[.B90]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A90])" office:value-type="string" office:string-value="=XLOOKUP("C";H$79:H$83;K$79:K$83;;2;2)" calcext:value-type="string">
<text:p>=XLOOKUP("C";H$79:H$83;K$79:K$83;;2;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.J$79:.J$83];[.M$79:.M$83];;0;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A91]=[.B91]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A91])" office:value-type="string" office:string-value="=XLOOKUP("C";J$79:J$83;M$79:M$83;;0;-2)" calcext:value-type="string">
<text:p>=XLOOKUP("C";J$79:J$83;M$79:M$83;;0;-2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.J$79:.J$83];[.M$79:.M$83];;-1;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A92]=[.B92]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A92])" office:value-type="string" office:string-value="=XLOOKUP("D";J$79:J$83;M$79:M$83;;-1;-2)" calcext:value-type="string">
<text:p>=XLOOKUP("D";J$79:J$83;M$79:M$83;;-1;-2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.J$79:.J$83];[.M$79:.M$83];;1;-2)" office:value-type="string" office:string-value="eE" calcext:value-type="string">
<text:p>eE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eE</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A93]=[.B93]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A93])" office:value-type="string" office:string-value="=XLOOKUP("D";J$79:J$83;M$79:M$83;;1;-2)" calcext:value-type="string">
<text:p>=XLOOKUP("D";J$79:J$83;M$79:M$83;;1;-2)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.J$79:.J$83];[.M$79:.M$83];;2;-2)" office:value-type="string" office:string-value="cC" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A94]=[.B94]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A94])" office:value-type="string" office:string-value="=XLOOKUP("C";J$79:J$83;M$79:M$83;;2;-2)" calcext:value-type="string">
<text:p>=XLOOKUP("C";J$79:J$83;M$79:M$83;;2;-2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C";[.H$95:.L$95];[.H$96:.L$96];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A95]=[.B95]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A95])" office:value-type="string" office:string-value="=XLOOKUP("C";H$95:L$95;H$96:L$96;;0;1)" calcext:value-type="string">
<text:p>=XLOOKUP("C";H$95:L$95;H$96:L$96;;0;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>E</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>C</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>F</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>B</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$95:.L$95];[.H$96:.L$96];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A96]=[.B96]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A96])" office:value-type="string" office:string-value="=XLOOKUP("D";H$95:L$95;H$96:L$96;;-1;1)" calcext:value-type="string">
<text:p>=XLOOKUP("D";H$95:L$95;H$96:L$96;;-1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>cA</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>dF</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>eB</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="8"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("D";[.H$95:.L$95];[.H$96:.L$96];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A97]=[.B97]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A97])" office:value-type="string" office:string-value="=XLOOKUP("D";H$95:L$95;H$96:L$96;;1;1)" calcext:value-type="string">
<text:p>=XLOOKUP("D";H$95:L$95;H$96:L$96;;1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="14"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("C?";[.H$95:.L$95];[.H$96:.L$96];;2;1)" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A98])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A98])" office:value-type="string" office:string-value="=XLOOKUP("C?";H$95:L$95;H$96:L$96;;2;1)" calcext:value-type="string">
<text:p>=XLOOKUP("C?";H$95:L$95;H$96:L$96;;2;1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="4"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>LookCol</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>SearchCol</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>SearchValue</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>LookRow</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>w</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>q</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("c";[.I$79:.I$83];[.L$79:.L$83];;0;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A100]=[.B100]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A100])" office:value-type="string" office:string-value="=XLOOKUP("c";I$79:I$83;L$79:L$83;;0;1)" calcext:value-type="string">
<text:p>=XLOOKUP("c";I$79:I$83;L$79:L$83;;0;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>SearchhRow</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>d</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="2"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("d";[.I$79:.I$83];[.L$79:.L$83];;-1;1)" office:value-type="string" office:string-value="bC" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>bC</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A101]=[.B101]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A101])" office:value-type="string" office:string-value="=XLOOKUP("d";I$79:I$83;L$79:L$83;;-1;1)" calcext:value-type="string">
<text:p>=XLOOKUP("d";I$79:I$83;L$79:L$83;;-1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="3" calcext:value-type="float">
<text:p>3</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>b</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("d";[.I$79:.I$83];[.L$79:.L$83];;1;1)" office:value-type="string" office:string-value="aE" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>aE</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A102]=[.B102]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A102])" office:value-type="string" office:string-value="=XLOOKUP("d";I$79:I$83;L$79:L$83;;1;1)" calcext:value-type="string">
<text:p>=XLOOKUP("d";I$79:I$83;L$79:L$83;;1;1)</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>?</text:p>
</table:table-cell>
<table:table-cell/>
<table:table-cell office:value-type="float" office:value="1" calcext:value-type="float">
<text:p>1</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>c</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP("f?";[.I$79:.I$83];[.L$79:.L$83];;2;1)" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A103])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A103])" office:value-type="string" office:string-value="=XLOOKUP("f?";I$79:I$83;L$79:L$83;;2;1)" calcext:value-type="string">
<text:p>=XLOOKUP("f?";I$79:I$83;L$79:L$83;;2;1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>w</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>d</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K99];[.H$99:.H$109];[.I$99:.I$109];;-1;-1)" office:value-type="string" office:string-value="g" calcext:value-type="string">
<text:p>g</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>g</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A104]=[.B104]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A104])" office:value-type="string" office:string-value="=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)" calcext:value-type="string">
<text:p>=XLOOKUP(K99;H$99:H$109;I$99:I$109;;-1;-1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>q</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.K99];[.N$99:.R$99];[.N$100:.R$100];;-1;-1)" office:value-type="string" office:string-value="a" calcext:value-type="string">
<text:p>a</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>a</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A105]=[.B105]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A105])" office:value-type="string" office:string-value="=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)" calcext:value-type="string">
<text:p>=XLOOKUP(K99;N$99:R$99;N$100:R$100;;-1;-1)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="float" office:value="5" calcext:value-type="float">
<text:p>5</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>f</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.K$1:.K$12];[.I$1:.I$12];0;1;2)" office:value-type="string" office:string-value="BR" calcext:value-type="string">
<text:p>BR</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>BR</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A106]=[.B106]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A106])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)" calcext:value-type="string">
<text:p>=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;1;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="float" office:value="2" calcext:value-type="float">
<text:p>2</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>g</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.L$1:.L$12];[.I$1:.I$12];0;1;-2)" office:value-type="string" office:string-value="BR" calcext:value-type="string">
<text:p>BR</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>BR</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A107]=[.B107]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A107])" office:value-type="string" office:string-value="=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)" calcext:value-type="string">
<text:p>=XLOOKUP($M$1;L$1:L$12;I$1:I$12;0;1;-2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="float" office:value="9" calcext:value-type="float">
<text:p>9</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>h</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.$M$1];[.K$1:.K$12];[.I$1:.I$12];0;-1;2)" office:value-type="string" office:string-value="ID" calcext:value-type="string">
<text:p>ID</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>ID</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A108]=[.B108]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A108])" office:value-type="string" office:string-value="=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)" calcext:value-type="string">
<text:p>=XLOOKUP($M$1;K$1:K$12;I$1:I$12;0;-1;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>e</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>I</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.M1];[.L$1:.L$12];[.I$1:.I$12];0;-1;-2)" office:value-type="string" office:string-value="PK" calcext:value-type="string">
<text:p>PK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>PK</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A109]=[.B109]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A109])" office:value-type="string" office:string-value="=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)" calcext:value-type="string">
<text:p>=XLOOKUP(M1;L$1:L$12;I$1:I$12;0;-1;-2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="3"/>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>Russia</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>j</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="11"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.N1];[.L$1:.L$12];[.I$1:.I$12];0;0;-2)" office:value-type="string" office:string-value="PK" calcext:value-type="string">
<text:p>PK</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>PK</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=[.A110]=[.B110]" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A110])" office:value-type="string" office:string-value="=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)" calcext:value-type="string">
<text:p>=XLOOKUP(N1;L$1:L$12;I$1:I$12;0;0;-2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:formula="of:=COM.MICROSOFT.XLOOKUP([.M1];[.K$1:.K$12];[.I$1:.I$12];;0;2)" office:value-type="string" office:string-value="" calcext:value-type="error">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell office:value-type="string" calcext:value-type="string">
<text:p>#N/A</text:p>
</table:table-cell>
<table:table-cell table:style-name="ce18" table:formula="of:=ISERROR([.A111])" office:value-type="boolean" office:boolean-value="true" calcext:value-type="boolean">
<text:p>IGAZ</text:p>
</table:table-cell>
<table:table-cell table:formula="of:=FORMULA([.A111])" office:value-type="string" office:string-value="=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)" calcext:value-type="string">
<text:p>=XLOOKUP(M1;K$1:K$12;I$1:I$12;;0;2)</text:p>
</table:table-cell>
<table:table-cell table:number-columns-repeated="16"/>
</table:table-row>
<table:table-row table:style-name="ro2" table:number-rows-repeated="90">
<table:table-cell table:number-columns-repeated="2"/>
<table:table-cell table:style-name="ce18"/>
<table:table-cell table:number-columns-repeated="17"/>
</table:table-row>
<table:table-row table:style-name="ro2" table:number-rows-repeated="1048374">
<table:table-cell table:number-columns-repeated="20"/>
</table:table-row>
<table:table-row table:style-name="ro2">
<table:table-cell table:number-columns-repeated="20"/>
</table:table-row>
<calcext:conditional-formats>
<calcext:conditional-format calcext:target-range-address="Sheet2.C2:Sheet2.C201">
<calcext:condition calcext:apply-style-name="Default" calcext:value="=""" calcext:base-cell-address="Sheet2.C2"/>
<calcext:condition calcext:apply-style-name="true" calcext:value="=1" calcext:base-cell-address="Sheet2.C2"/>
<calcext:condition calcext:apply-style-name="false" calcext:value="=0" calcext:base-cell-address="Sheet2.C2"/>
</calcext:conditional-format>
</calcext:conditional-formats>
</table:table>
<table:named-expressions/>
</office:spreadsheet>
</office:body>
</office:document>
\ No newline at end of file
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index e300b4b..39ccb34 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -2922,6 +2922,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFunctionLists)
"SHEETS",
"STYLE",
"VLOOKUP",
"XLOOKUP",
nullptr
};
diff --git a/sc/qa/unit/ucalc_sort.cxx b/sc/qa/unit/ucalc_sort.cxx
index f2cd7d2..17e2444 100644
--- a/sc/qa/unit/ucalc_sort.cxx
+++ b/sc/qa/unit/ucalc_sort.cxx
@@ -1972,8 +1972,8 @@ class TestQueryIterator
typedef ScQueryCellIteratorBase< ScQueryCellIteratorAccess::Direct, ScQueryCellIteratorType::Generic > Base;
public:
TestQueryIterator( ScDocument& rDocument, ScInterpreterContext& rContext, SCTAB nTable,
const ScQueryParam& aParam, bool bMod )
: Base( rDocument, rContext, nTable, aParam, bMod )
const ScQueryParam& aParam, bool bMod, bool bReverse = false )
: Base( rDocument, rContext, nTable, aParam, bMod, bReverse )
{
}
using Base::BinarySearch; // make public
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index e1fafe1..a9c123d8 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -675,6 +675,7 @@ ScFunctionList::ScFunctionList( bool bEnglishFunctionNames )
{ SC_OPCODE_CELL, ENTRY(SC_OPCODE_CELL_ARY), 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ZELLE, 2, { 0, 1 }, 0 },
{ SC_OPCODE_ISPMT, ENTRY(SC_OPCODE_ISPMT_ARY), 0, ID_FUNCTION_GRP_FINANCIAL, HID_FUNC_ISPMT, 4, { 0, 0, 0, 0 }, 0 },
{ SC_OPCODE_HYPERLINK, ENTRY(SC_OPCODE_HYPERLINK_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_HYPERLINK, 2, { 0, 1 }, 0 },
{ SC_OPCODE_X_LOOKUP, ENTRY(SC_OPCODE_X_LOOKUP_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_XLOOKUP_MS, 6, { 0, 0, 0, 1, 1, 1 }, 0 },
{ SC_OPCODE_GET_PIVOT_DATA, ENTRY(SC_OPCODE_GET_PIVOT_DATA_ARY), 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_GETPIVOTDATA, VAR_ARGS+2, { 0, 0, 1 }, 0 },
{ SC_OPCODE_EUROCONVERT, ENTRY(SC_OPCODE_EUROCONVERT_ARY), 0, ID_FUNCTION_GRP_MATH, HID_FUNC_EUROCONVERT, 5, { 0, 0, 0, 1, 1 }, 0 },
{ SC_OPCODE_NUMBERVALUE, ENTRY(SC_OPCODE_NUMBERVALUE_ARY), 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_NUMBERVALUE, 3, { 0, 1, 1 }, 0 },
diff --git a/sc/source/core/data/queryiter.cxx b/sc/source/core/data/queryiter.cxx
index 6c5635b..39b86fe 100644
--- a/sc/source/core/data/queryiter.cxx
+++ b/sc/source/core/data/queryiter.cxx
@@ -60,16 +60,20 @@
template< ScQueryCellIteratorAccess accessType, ScQueryCellIteratorType queryType >
ScQueryCellIteratorBase< accessType, queryType >::ScQueryCellIteratorBase(ScDocument& rDocument,
ScInterpreterContext& rContext, SCTAB nTable, const ScQueryParam& rParam, bool bMod )
: AccessBase( rDocument, rContext, rParam )
ScInterpreterContext& rContext, SCTAB nTable, const ScQueryParam& rParam, bool bMod, bool bReverse )
: AccessBase( rDocument, rContext, rParam, bReverse )
, nStopOnMismatch( nStopOnMismatchDisabled )
, nTestEqualCondition( nTestEqualConditionDisabled )
, bAdvanceQuery( false )
, bIgnoreMismatchOnLeadingStrings( false )
, bSortedBinarySearch( false )
, bXLookUp( false )
, nBestFitCol(SCCOL_MAX)
, nBestFitRow(SCROW_MAX)
{
nTab = nTable;
nCol = maParam.nCol1;
nRow = maParam.nRow1;
nCol = !bReverse ? maParam.nCol1 : maParam.nCol2;
nRow = !bReverse ? maParam.nRow1 : maParam.nRow2;
SCSIZE i;
if (!bMod) // Or else it's already inserted
return;
@@ -127,7 +131,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
bool bNextColumn = maCurPos.first == pCol->maCells.end();
if (!bNextColumn)
{
if (nRow > maParam.nRow2)
if ((!mbReverseSearch && nRow > maParam.nRow2) || (mbReverseSearch && nRow < maParam.nRow1))
bNextColumn = true;
}
@@ -135,9 +139,18 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
{
do
{
++nCol;
if (nCol > maParam.nCol2 || nCol >= rDoc.maTabs[nTab]->GetAllocatedColumnsCount())
return;
if (!mbReverseSearch)
{
++nCol;
if (nCol > maParam.nCol2 || nCol >= rDoc.maTabs[nTab]->GetAllocatedColumnsCount())
return;
}
else
{
--nCol;
if (nCol < maParam.nCol1 || nCol < static_cast<SCCOL>(0))
return;
}
if ( bAdvanceQuery )
{
AdvanceQueryParamEntryField();
@@ -169,12 +182,12 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
// ValidQuery().
if(HandleItemFound())
return;
IncPos();
!mbReverseSearch ? IncPos() : DecPos();
continue;
}
else
{
IncBlock();
!mbReverseSearch ? IncBlock() : DecBlock();
continue;
}
}
@@ -182,7 +195,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
ScRefCellValue aCell = sc::toRefCell(maCurPos.first, maCurPos.second);
if (bAllStringIgnore && aCell.hasString())
IncPos();
!mbReverseSearch ? IncPos() : DecPos();
else
{
if ( queryEvaluator.ValidQuery( nRow,
@@ -192,9 +205,54 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
nTestEqualCondition |= nTestEqualConditionMatched;
if ( aCell.isEmpty())
return;
if( HandleItemFound())
// XLookUp: Forward/backward search for best fit value, except if we have an exact match
if (bXLookUp && !bSortedBinarySearch && (rEntry.eOp == SC_LESS_EQUAL || rEntry.eOp == SC_GREATER_EQUAL) &&
(nBestFitCol != nCol || nBestFitRow != nRow))
{
bool bNumSearch = rItem.meType == ScQueryEntry::ByValue && aCell.hasNumeric();
bool bStringSearch = rItem.meType == ScQueryEntry::ByString && aCell.hasString();
if (bNumSearch || bStringSearch)
{
if (nTestEqualCondition == nTestEqualConditionFulfilled || (nBestFitCol == SCCOL_MAX && nBestFitRow == SCROW_MAX))
HandleBestFitItemFound(nCol, nRow);
else
{
ScAddress aBFAddr(nBestFitCol, nBestFitRow, nTab);
ScRefCellValue aBFCell(rDoc, aBFAddr);
ScQueryParam aParamTmp(maParam);
ScQueryEntry& rEntryTmp = aParamTmp.GetEntry(0);
if (rEntry.eOp == SC_LESS_EQUAL)
rEntryTmp.eOp = SC_GREATER;
else if (rEntry.eOp == SC_GREATER_EQUAL)
rEntryTmp.eOp = SC_LESS;
ScQueryEntry::Item& rItemTmp = rEntryTmp.GetQueryItem();
if (bNumSearch)
rItemTmp.mfVal = aBFCell.getValue();
else if (bStringSearch)
rItemTmp.maString = svl::SharedString(aBFCell.getString(&rDoc));
ScQueryEvaluator queryEvaluatorTmp(rDoc, *rDoc.maTabs[nTab], aParamTmp, &mrContext, nullptr);
if (queryEvaluatorTmp.ValidQuery(nRow, (nCol == static_cast<SCCOL>(nFirstQueryField) ? &aCell : nullptr)))
HandleBestFitItemFound(nCol, nRow);
else
{
!mbReverseSearch ? IncPos() : DecPos();
continue;
}
}
}
else
{
!mbReverseSearch ? IncPos() : DecPos();
continue;
}
}
if (HandleItemFound())
return;
IncPos();
!mbReverseSearch ? IncPos() : DecPos();
continue;
}
else if ( nStopOnMismatch )
@@ -213,7 +271,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
{
if (aCell.hasString())
{
IncPos();
!mbReverseSearch ? IncPos() : DecPos();
bStop = false;
}
else
@@ -228,7 +286,7 @@ void ScQueryCellIteratorBase< accessType, queryType >::PerformQuery()
}
}
else
IncPos();
!mbReverseSearch ? IncPos() : DecPos();
}
bFirstStringIgnore = false;
}
@@ -279,7 +337,8 @@ void ScQueryCellIteratorBase< accessType, queryType >::InitPos()
if( BinarySearch( nCol ))
lastRow = nRow;
}
AccessBase::InitPosFinish( beforeRow, lastRow );
bool bFirstMatch = (bXLookUp && op != SC_EQUAL);
AccessBase::InitPosFinish(beforeRow, lastRow, bFirstMatch);
}
}
@@ -292,11 +351,13 @@ void ScQueryCellIteratorBase< accessType, queryType >::AdvanceQueryParamEntryFie
ScQueryEntry& rEntry = maParam.GetEntry( j );
if ( rEntry.bDoQuery )
{
if ( rEntry.nField < rDoc.MaxCol() )
if (!mbReverseSearch && rEntry.nField < rDoc.MaxCol())
rEntry.nField++;
else if (mbReverseSearch && rEntry.nField > static_cast<SCCOLROW>(0))
rEntry.nField--;
else
{
assert(!"AdvanceQueryParamEntryField: ++rEntry.nField > MAXCOL");
assert(!"AdvanceQueryParamEntryField: ++rEntry.nField > MAXCOL || --rEntry.nField < 0");
}
}
else
@@ -670,14 +731,25 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
nFoundCol = rDoc.MaxCol()+1;
nFoundRow = rDoc.MaxRow()+1;
SetStopOnMismatch( true ); // assume sorted keys
if (bXLookUp && !bSortedBinarySearch)
SetStopOnMismatch( false ); // assume not sorted keys for XLookup
else
SetStopOnMismatch( true ); // assume sorted keys
SetTestEqualCondition( true );
bIgnoreMismatchOnLeadingStrings = true;
bool bLiteral = maParam.eSearchType == utl::SearchParam::SearchType::Normal &&
maParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByString;
bool bBinary = maParam.bByRow &&
(bLiteral || maParam.GetEntry(0).GetQueryItem().meType == ScQueryEntry::ByValue) &&
(maParam.GetEntry(0).eOp == SC_LESS_EQUAL || maParam.GetEntry(0).eOp == SC_GREATER_EQUAL);
// assume not sorted properly if we are using XLookup with forward or backward search
if (bBinary && bXLookUp && !bSortedBinarySearch)
bBinary = false;
bool bFound = false;
if (bBinary)
{
@@ -768,9 +840,10 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
}
}
}
if ( IsEqualConditionFulfilled() )
if ( IsEqualConditionFulfilled() && !bXLookUp )
{
// Position on last equal entry.
// Position on last equal entry, except for XLOOKUP,
// which looking for the first equal entry
SCSIZE nEntries = maParam.GetEntryCount();
for ( SCSIZE j = 0; j < nEntries; j++ )
{
@@ -861,19 +934,27 @@ bool ScQueryCellIterator< accessType >::FindEqualOrSortedLastInRange( SCCOL& nFo
ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >
::ScQueryCellIteratorAccessSpecific( ScDocument& rDocument,
ScInterpreterContext& rContext, const ScQueryParam& rParam )
ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch )
: maParam( rParam )
, rDoc( rDocument )
, mrContext( rContext )
, mbReverseSearch( bReverseSearch )
{
// coverity[uninit_member] - this just contains data, subclass will initialize some of it
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::InitPos()
{
nRow = maParam.nRow1;
if (maParam.bHasHeader && maParam.bByRow)
++nRow;
if (!mbReverseSearch)
{
nRow = maParam.nRow1;
if (maParam.bHasHeader && maParam.bByRow)
++nRow;
}
else
{
nRow = maParam.nRow2;
}
const ScColumn& rCol = rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol);
maCurPos = rCol.maCells.position(nRow);
}
@@ -891,6 +972,19 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::Inc
IncBlock();
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::DecPos()
{
if (maCurPos.second > 0)
{
// Move within the same block.
--maCurPos.second;
--nRow;
}
else
// Move to the prev block.
DecBlock();
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::IncBlock()
{
++maCurPos.first;
@@ -899,6 +993,26 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::Inc
nRow = maCurPos.first->position;
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::DecBlock()
{
// Set current position to the last possible row.
const ScColumn& rCol = rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol);
if (maCurPos.first != rCol.maCells.begin())
{
--maCurPos.first;
maCurPos.second = maCurPos.first->size - 1;
nRow = maCurPos.first->position + maCurPos.second;
}
else
{
// No rows, set to end. This will make PerformQuery() go to next column.
nRow = maParam.nRow1 - 1;
maCurPos.first = rCol.maCells.end();
maCurPos.second = 0;
}
}
/**
* This class sequentially indexes non-empty cells in order, from the top of
* the block where the start row position is, to the bottom of the block
@@ -1073,10 +1187,11 @@ ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::Direct >::MakeBina
ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >
::ScQueryCellIteratorAccessSpecific( ScDocument& rDocument,
ScInterpreterContext& rContext, const ScQueryParam& rParam )
ScInterpreterContext& rContext, const ScQueryParam& rParam, bool bReverseSearch )
: maParam( rParam )
, rDoc( rDocument )
, mrContext( rContext )
, mbReverseSearch( bReverseSearch )
{
// coverity[uninit_member] - this just contains data, subclass will initialize some of it
}
@@ -1101,7 +1216,7 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >
}
void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >::InitPosFinish(
SCROW beforeRow, SCROW lastRow )
SCROW beforeRow, SCROW lastRow, bool bFirstMatch )
{
pColumn = &rDoc.maTabs[nTab]->CreateColumnIfNotExists(nCol);
if(lastRow >= 0)
@@ -1110,7 +1225,10 @@ void ScQueryCellIteratorAccessSpecific< ScQueryCellIteratorAccess::SortedCache >
sortedCachePosLast = sortedCache->indexForRow(lastRow);
if(sortedCachePos <= sortedCachePosLast)
{
nRow = sortedCache->rowForIndex(sortedCachePos);
if (!bFirstMatch)
nRow = sortedCache->rowForIndex(sortedCachePos);
else
nRow = sortedCache->rowForIndex(sortedCachePosLast);
maCurPos = pColumn->maCells.position(nRow);
return;
}
@@ -1322,7 +1440,10 @@ template< ScQueryCellIteratorAccess accessType >
bool ScQueryCellIterator< accessType >::GetFirst()
{
assert(nTab < rDoc.GetTableCount() && "index out of bounds, FIX IT");
nCol = maParam.nCol1;
if (!mbReverseSearch)
nCol = maParam.nCol1;
else
nCol = maParam.nCol2;
InitPos();
return GetThis();
}
@@ -1330,7 +1451,10 @@ bool ScQueryCellIterator< accessType >::GetFirst()
template< ScQueryCellIteratorAccess accessType >
bool ScQueryCellIterator< accessType >::GetNext()
{
IncPos();
if (!mbReverseSearch)
IncPos();
else
DecPos();
if ( nStopOnMismatch )
nStopOnMismatch = nStopOnMismatchEnabled;
if ( nTestEqualCondition )
diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 64b9a8a..e577a5e 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -30,6 +30,7 @@
#include <token.hxx>
#include <math.hxx>
#include <kahan.hxx>
#include <queryiter.hxx>
#include "parclass.hxx"
#include <map>
@@ -55,6 +56,57 @@ struct ScInterpreterContext;
class ScJumpMatrix;
struct ScRefCellValue;
enum MatchMode{ exactorNA=0, exactorS=-1, exactorG=1, wildcard=2 };
enum SearchMode{ searchfwd=1, searchrev=-1, searchbasc=2, searchbdesc=-2 };
struct VectorSearchArguments
{
// struct contains the contents of the function arguments
// Struct owner, ScMatch or ScXLookup
bool isXLookup = false;
// match mode (common, enum values are from XLOOKUP)
// optional 5th argument to set match mode
// 0 - Exact match. If none found, return #N/A. (MATCH value 0)
// -1 - Exact match. If none found, return the next smaller item. (MATCH value 1)
// 1 - Exact match. If none found, return the next larger item. (MATCH value -1)
// 2 - A wildcard match where *, ?, and ~ have special meaning. (XLOOKUP only)
// TODO : is this enum needed, or do we solely use rEntry.eOp ?
MatchMode eMatchMode = exactorG;
// value to be searched for (common)
SCCOL nCol1 = 0;
SCROW nRow1 = 0;
SCTAB nTab1 = 0;
SCCOL nCol2 = 0;
SCROW nRow2 = 0;
SCTAB nTab2 = 0;
ScMatrixRef pMatSrc;
bool isStringSearch = true;
double fSearchVal;
svl::SharedString sSearchStr;
bool bVLookup;
// search mode (only XLOOKUP has all 4 options, MATCH only uses searchfwd)
// optional 6th argument to set search mode
// 1 - Perform a search starting at the first item. This is the default.
// -1 - Perform a reverse search starting at the last item.
// 2 - Perform a binary search that relies on lookup_array being sorted in ascending order.
// If not sorted, invalid results will be returned.
// -2 - Perform a binary search that relies on lookup_array being sorted in descending order.
// If not sorted, invalid results will be returned.
//
SearchMode eSearchMode = searchfwd;
// search variables
SCSIZE nHitIndex = 0;
SCSIZE nBestFit = SCSIZE_MAX;
// result
int nIndex = -1;
bool isResultNA = false;
};
namespace sc {
struct CompareOptions;
@@ -234,6 +286,10 @@ private:
bool IsTableOpInRange( const ScRange& );
sal_uInt32 GetCellNumberFormat( const ScAddress& rPos, ScRefCellValue& rCell );
double ConvertStringToValue( const OUString& );
bool SearchVectorForValue( VectorSearchArguments& );
bool SearchMatrixForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry&, ScQueryEntry::Item& );
bool SearchRangeForValue( VectorSearchArguments&, ScQueryParam&, ScQueryEntry& );
public:
static double ScGetGCD(double fx, double fy);
/** For matrix back calls into the current interpreter.
@@ -485,8 +541,8 @@ private:
// Set error according to rVal, and set rVal to 0.0 if there was an error.
inline void TreatDoubleError( double& rVal );
// Lookup using ScLookupCache, @returns true if found and result address
bool LookupQueryWithCache( ScAddress & o_rResultPos,
const ScQueryParam & rParam, const ScComplexRefData* refData ) const;
bool LookupQueryWithCache( ScAddress & o_rResultPos, const ScQueryParam & rParam,
const ScComplexRefData* refData, sal_Int8 nSearchMode, bool bXlookupMode ) const;
void ScIfJump();
void ScIfError( bool bNAonly );
@@ -628,6 +684,7 @@ private:
void ScLookup();
void ScHLookup();
void ScVLookup();
void ScXLookup();
void ScSubTotal();
// If upon call rMissingField==true then the database field parameter may be
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 13036fe..6b82844 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -62,7 +62,6 @@
#include <doubleref.hxx>
#include <queryparam.hxx>
#include <queryentry.hxx>
#include <queryiter.hxx>
#include <tokenarray.hxx>
#include <compare.hxx>
#include <comphelper/lok.hxx>
@@ -4777,7 +4776,7 @@ private:
they are equal, and 1 when the matrix value is larger than the query
value. */
sal_Int32 lcl_CompareMatrix2Query(
SCSIZE i, const VectorMatrixAccessor& rMat, const ScQueryEntry& rEntry)
SCSIZE i, const VectorMatrixAccessor& rMat, const ScQueryParam& rParam, const ScQueryEntry& rEntry, bool bMatchWholeCell )
{
if (rMat.IsEmpty(i))
{
@@ -4818,7 +4817,61 @@ sal_Int32 lcl_CompareMatrix2Query(
OUString aStr1 = rMat.GetString(i);
OUString aStr2 = rEntry.GetQueryItem().maString.getString();
return ScGlobal::GetCollator().compareString(aStr1, aStr2); // case-insensitive
// bRealWildOrRegExp
if (rParam.eSearchType != utl::SearchParam::SearchType::Normal &&
((rEntry.eOp == SC_EQUAL) || (rEntry.eOp == SC_NOT_EQUAL)))
{
sal_Int32 nStart = 0;
sal_Int32 nEnd = aStr1.getLength();
bool bMatch = rEntry.GetSearchTextPtr(rParam.eSearchType, rParam.bCaseSens, bMatchWholeCell)
->SearchForward(aStr1, &nStart, &nEnd);
// from 614 on, nEnd is behind the found text
if (bMatch && bMatchWholeCell
&& (nStart != 0 || nEnd != aStr1.getLength()))
bMatch = false; // RegExp must match entire cell string
bool bOk = ((rEntry.eOp == SC_NOT_EQUAL) ? !bMatch : bMatch);
if (bOk)
return 0; // we have a WildOrRegExp match
}
CollatorWrapper& rCollator = ScGlobal::GetCollator(rParam.bCaseSens);
return rCollator.compareString(aStr1, aStr2);
}
/** returns -1 when matrix(i) value is smaller than matrix(j) value, 0 when
they are equal, and 1 when larger */
sal_Int32 lcl_Compare2MatrixCells( SCSIZE i, const VectorMatrixAccessor& rMat, SCSIZE j )
{
// empty always less than anything else
if (rMat.IsEmpty(i))
return ( rMat.IsEmpty(j) ? 0 : -1 );
else if (rMat.IsEmpty(j))
return 1;
bool bByString = rMat.IsStringOrEmpty(j); // string, empty has already been handled
if (rMat.IsValue(i))
{
const double nVal1 = rMat.GetDouble(i);
if (!std::isfinite(nVal1))
return 1; // error always greater than numeric or string
if (bByString)
return -1; // numeric always less than string
const double nVal2 = rMat.GetDouble(j);
if (nVal1 == nVal2)
return 0;
return ( nVal1 < nVal2 ? -1 : 1 );
}
if (!bByString)
return 1; // string always greater than numeric
return ScGlobal::GetCollator().compareString(rMat.GetString(i), rMat.GetString(j)); // case-insensitive
}
/** returns the last item with the identical value as the original item
@@ -4861,35 +4914,50 @@ void lcl_GetLastMatch( SCSIZE& rIndex, const VectorMatrixAccessor& rMat,
void ScInterpreter::ScMatch()
{
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, 2, 3 ) )
return;
double fTyp;
if (nParamCount == 3)
fTyp = GetDouble();
else
fTyp = 1.0;
SCCOL nCol1 = 0;
SCROW nRow1 = 0;
SCTAB nTab1 = 0;
SCCOL nCol2 = 0;
SCROW nRow2 = 0;
ScMatrixRef pMatSrc = nullptr;
VectorSearchArguments vsa;
vsa.isXLookup = false;
// get match mode
double fType = ( nParamCount == 3 ? GetDouble() : 1.0 );
switch ( static_cast<int>(fType) )
{
case -1 :
vsa.eMatchMode = exactorG;
vsa.eSearchMode = searchbdesc;
break;
case 0 :
vsa.eMatchMode = exactorNA;
vsa.eSearchMode = searchfwd;
break;
case 1 :
// default value
vsa.eMatchMode = exactorS;
vsa.eSearchMode = searchbasc;
break;
default :
PushIllegalParameter();
return;
}
// get vector to be searched
switch (GetStackType())
{
case svSingleRef:
PopSingleRef( nCol1, nRow1, nTab1);
nCol2 = nCol1;
nRow2 = nRow1;
PopSingleRef( vsa.nCol1, vsa.nRow1, vsa.nTab1);
vsa.nCol2 = vsa.nCol1;
vsa.nRow2 = vsa.nRow1;
vsa.pMatSrc = nullptr;
break;
case svDoubleRef:
{
vsa.pMatSrc = nullptr;
SCTAB nTab2 = 0;
PopDoubleRef(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2);
if (nTab1 != nTab2 || (nCol1 != nCol2 && nRow1 != nRow2))
PopDoubleRef(vsa.nCol1, vsa.nRow1, vsa.nTab1, vsa.nCol2, vsa.nRow2, nTab2);
if (vsa.nTab1 != nTab2 || (vsa.nCol1 != vsa.nCol2 && vsa.nRow1 != vsa.nRow2))
{
PushIllegalParameter();
return;
@@ -4900,11 +4968,11 @@ void ScInterpreter::ScMatch()
case svExternalDoubleRef:
{
if (GetStackType() == svMatrix)
pMatSrc = PopMatrix();
vsa.pMatSrc = PopMatrix();
else
PopExternalDoubleRef(pMatSrc);
PopExternalDoubleRef(vsa.pMatSrc);
if (!pMatSrc)
if (!vsa.pMatSrc)
{
PushIllegalParameter();
return;
@@ -4916,41 +4984,24 @@ void ScInterpreter::ScMatch()
return;
}
// get search value
if (nGlobalError == FormulaError::NONE)
{
double fVal;
ScQueryParam rParam;
rParam.nCol1 = nCol1;
rParam.nRow1 = nRow1;
rParam.nCol2 = nCol2;
rParam.nTab = nTab1;
const ScComplexRefData* refData = nullptr;
ScQueryEntry& rEntry = rParam.GetEntry(0);
ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
rEntry.bDoQuery = true;
if (fTyp < 0.0)
rEntry.eOp = SC_GREATER_EQUAL;
else if (fTyp > 0.0)
rEntry.eOp = SC_LESS_EQUAL;
switch ( GetStackType() )
{
case svDouble:
{
fVal = GetDouble();
rItem.mfVal = fVal;
rItem.meType = ScQueryEntry::ByValue;
vsa.isStringSearch = false;
vsa.fSearchVal = GetDouble();
}
break;
case svString:
{
rItem.meType = ScQueryEntry::ByString;
rItem.maString = GetString();
vsa.isStringSearch = true;
vsa.sSearchStr = GetString();
}
break;
case svDoubleRef :
refData = GetStackDoubleRef();
[[fallthrough]];
case svSingleRef :
{
ScAddress aAdr;
@@ -4962,14 +5013,13 @@ void ScInterpreter::ScMatch()
ScRefCellValue aCell(mrDoc, aAdr);
if (aCell.hasNumeric())
{
fVal = GetCellValue(aAdr, aCell);
rItem.meType = ScQueryEntry::ByValue;
rItem.mfVal = fVal;
vsa.isStringSearch = false;
vsa.fSearchVal = GetCellValue(aAdr, aCell);
}
else
{
GetCellString(rItem.maString, aCell);
rItem.meType = ScQueryEntry::ByString;
vsa.isStringSearch = true;
GetCellString(vsa.sSearchStr, aCell);
}
}
break;
@@ -4984,25 +5034,22 @@ void ScInterpreter::ScMatch()
}
if (pToken->GetType() == svDouble)
{
rItem.meType = ScQueryEntry::ByValue;
rItem.mfVal = pToken->GetDouble();
vsa.isStringSearch = false;
vsa.fSearchVal = pToken->GetDouble();
}
else
{
rItem.meType = ScQueryEntry::ByString;
rItem.maString = pToken->GetString();
vsa.isStringSearch = true;
vsa.sSearchStr = pToken->GetString();
}
}
break;
case svExternalDoubleRef:
case svMatrix :
{
svl::SharedString aStr;
ScMatValType nType = GetDoubleOrStringFromMatrix(
rItem.mfVal, aStr);
rItem.maString = aStr;
rItem.meType = ScMatrix::IsNonValueType(nType) ?
ScQueryEntry::ByString : ScQueryEntry::ByValue;
vsa.fSearchVal, vsa.sSearchStr);
vsa.isStringSearch = ScMatrix::IsNonValueType(nType);
}
break;
default:
@@ -5011,163 +5058,17 @@ void ScInterpreter::ScMatch()
return;
}
}
if (rItem.meType == ScQueryEntry::ByString)
{
bool bIsVBAMode = mrDoc.IsInVBAMode();
if ( bIsVBAMode )
rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
else
rParam.eSearchType = DetectSearchType(rEntry.GetQueryItem().maString.getString(), mrDoc);
}
if (pMatSrc) // The source data is matrix array.
{
SCSIZE nC, nR;
pMatSrc->GetDimensions( nC, nR);
if (nC > 1 && nR > 1)
{
// The source matrix must be a vector.
PushIllegalParameter();
return;
}
// Do not propagate errors from matrix while searching.
pMatSrc->SetErrorInterpreter( nullptr);
SCSIZE nMatCount = (nC == 1) ? nR : nC;
VectorMatrixAccessor aMatAcc(*pMatSrc, nC == 1);
// simple serial search for equality mode (source data doesn't
// need to be sorted).
if (rEntry.eOp == SC_EQUAL)
{
for (SCSIZE i = 0; i < nMatCount; ++i)
{
if (lcl_CompareMatrix2Query( i, aMatAcc, rEntry) == 0)
{
PushDouble(i+1); // found !
return;
}
}
PushNA(); // not found
return;
}
// binary search for non-equality mode (the source data is
// assumed to be sorted).
bool bAscOrder = (rEntry.eOp == SC_LESS_EQUAL);
SCSIZE nFirst = 0, nLast = nMatCount-1, nHitIndex = 0;
for (SCSIZE nLen = nLast-nFirst; nLen > 0; nLen = nLast-nFirst)
{
SCSIZE nMid = nFirst + nLen/2;
sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc, rEntry);
if (nCmp == 0)
{
// exact match. find the last item with the same value.
lcl_GetLastMatch( nMid, aMatAcc, nMatCount);
PushDouble( nMid+1);
return;
}
if (nLen == 1) // first and last items are next to each other.
{
if (nCmp < 0)
nHitIndex = bAscOrder ? nLast : nFirst;
else
nHitIndex = bAscOrder ? nFirst : nLast;
break;
}
if (nCmp < 0)
{
if (bAscOrder)
nFirst = nMid;
else
nLast = nMid;
}
else
{
if (bAscOrder)
nLast = nMid;
else
nFirst = nMid;
}
}
if (nHitIndex == nMatCount-1) // last item
{
sal_Int32 nCmp = lcl_CompareMatrix2Query( nHitIndex, aMatAcc, rEntry);
if ((bAscOrder && nCmp <= 0) || (!bAscOrder && nCmp >= 0))
{
// either the last item is an exact match or the real
// hit is beyond the last item.
PushDouble( nHitIndex+1);
return;
}
}
if (nHitIndex > 0) // valid hit must be 2nd item or higher
{
if ( ! ( rItem.meType == ScQueryEntry::ByString && aMatAcc.IsValue( nHitIndex-1 ) ) &&
! ( rItem.meType == ScQueryEntry::ByValue && !aMatAcc.IsValue( nHitIndex-1 ) ) )
PushDouble( nHitIndex); // non-exact match
else
PushNA();
return;
}
PushNA();
return;
}
// The source data is cell range.
SCCOLROW nDelta = 0;
if (nCol1 == nCol2)
{ // search row in column
rParam.nRow2 = nRow2;
rEntry.nField = nCol1;
ScAddress aResultPos( nCol1, nRow1, nTab1);
if (!LookupQueryWithCache( aResultPos, rParam, refData))
{
PushNA();
return;
}
nDelta = aResultPos.Row() - nRow1;
}
// execute search
if ( SearchVectorForValue( vsa ) )
PushDouble( vsa.nIndex );
else
{ // search column in row
SCCOL nC;
rParam.bByRow = false;
rParam.nRow2 = nRow1;
rEntry.nField = nCol1;
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
// Advance Entry.nField in Iterator if column changed
aCellIter.SetAdvanceQueryParamEntryField( true );
if (fTyp == 0.0)
{ // EQUAL
if ( aCellIter.GetFirst() )
nC = aCellIter.GetCol();
else
{
PushNA();
return;
}
}
{
if ( vsa.isResultNA )
PushNA();
else
{ // <= or >=
SCROW nR;
if ( !aCellIter.FindEqualOrSortedLastInRange( nC, nR ) )
{
PushNA();
return;
}
}
nDelta = nC - nCol1;
return; // error occurred and has already been pushed
}
PushDouble(static_cast<double>(nDelta + 1));
}
else
PushIllegalParameter();
@@ -5627,7 +5528,7 @@ void ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc )
}
else
{
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
// Increment Entry.nField in iterator when switching to next column.
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( aCellIter.GetFirst() )
@@ -5886,12 +5787,12 @@ void ScInterpreter::ScCountIf()
if(ScCountIfCellIteratorSortedCache::CanBeUsed(mrDoc, rParam, nTab1, pMyFormulaCell,
refData, mrContext))
{
ScCountIfCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false);
ScCountIfCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
fCount += aCellIter.GetCount();
}
else
{
ScCountIfCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
ScCountIfCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
fCount += aCellIter.GetCount();
}
}
@@ -6289,7 +6190,7 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf
if( ScQueryCellIteratorSortedCache::CanBeUsed( mrDoc, rParam, nTab1, pMyFormulaCell,
refData, mrContext ))
{
ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false);
ScQueryCellIteratorSortedCache aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
// Increment Entry.nField in iterator when switching to next column.
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( aCellIter.GetFirst() )
@@ -6304,7 +6205,7 @@ void ScInterpreter::IterateParametersIfs( double(*ResultFunc)( const sc::ParamIf
}
else
{
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, rParam, false, false);
// Increment Entry.nField in iterator when switching to next column.
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( aCellIter.GetFirst() )
@@ -7061,12 +6962,13 @@ void ScInterpreter::ScLookup()
// assumed to be sorted in ascending order).
SCCOLROW nDelta = -1;
bool bMatchWholeCell = mrDoc.GetDocOptions().IsMatchWholeCell();
SCSIZE nFirst = 0, nLast = nLenMajor-1; //, nHitIndex = 0;
for (SCSIZE nLen = nLast-nFirst; nLen > 0; nLen = nLast-nFirst)
{
SCSIZE nMid = nFirst + nLen/2;
sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc2, rEntry);
sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc2, aParam, rEntry, bMatchWholeCell );
if (nCmp == 0)
{
// exact match. find the last item with the same value.
@@ -7092,7 +6994,7 @@ void ScInterpreter::ScLookup()
if (nDelta == static_cast<SCCOLROW>(nLenMajor-2)) // last item
{
sal_Int32 nCmp = lcl_CompareMatrix2Query(nDelta+1, aMatAcc2, rEntry);
sal_Int32 nCmp = lcl_CompareMatrix2Query(nDelta+1, aMatAcc2, aParam, rEntry, bMatchWholeCell );
if (nCmp <= 0)
{
// either the last item is an exact match or the real
@@ -7254,7 +7156,7 @@ void ScInterpreter::ScLookup()
if (rItem.meType == ScQueryEntry::ByString)
aParam.eSearchType = DetectSearchType(rItem.maString.getString(), mrDoc);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false, false);
SCCOL nC;
SCROW nR;
// Advance Entry.nField in iterator upon switching columns if
@@ -7490,8 +7392,13 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
return;
ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
svl::SharedString aParamStr;
if (rItem.meType == ScQueryEntry::ByString)
{
aParam.eSearchType = DetectSearchType(rItem.maString.getString(), mrDoc);
aParamStr = rItem.maString;
}
if (pMat)
{
SCSIZE nMatCount = bHLookup ? nC : nR;
@@ -7501,7 +7408,6 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
//!!!!!!!
//TODO: enable regex on matrix strings
//!!!!!!!
svl::SharedString aParamStr = rItem.maString;
if ( bSorted )
{
CollatorWrapper& rCollator = ScGlobal::GetCollator();
@@ -7611,6 +7517,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
}
else
{
// not a matrix
rEntry.nField = nCol1;
bool bFound = false;
SCCOL nCol = 0;
@@ -7619,7 +7526,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
rEntry.eOp = SC_LESS_EQUAL;
if ( bHLookup )
{
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab1, aParam, false, false);
// advance Entry.nField in Iterator upon switching columns
aCellIter.SetAdvanceQueryParamEntryField( true );
if ( bSorted )
@@ -7637,7 +7544,7 @@ void ScInterpreter::CalculateLookup(bool bHLookup)
else
{
ScAddress aResultPos( nCol1, nRow1, nTab1);
bFound = LookupQueryWithCache( aResultPos, aParam, refData);
bFound = LookupQueryWithCache( aResultPos, aParam, refData, 0, false );
nRow = aResultPos.Row();
nCol = nSpIndex;
}
@@ -7716,6 +7623,300 @@ void ScInterpreter::ScVLookup()
CalculateLookup(false);
}
void ScInterpreter::ScXLookup()
{
/* TODO
-use VectorSearchArguments and SearchVectorForValue() with ScLookup, ScHLookup and ScVLookup
as well to reduce redundant code, can de done later with lots of other MATCH/LOOKUP related code
that can be unified
-BinarySearch not supported for columns (horizontal search), now just use linear mode in this case
-improve efficiency of code
*/
sal_uInt8 nParamCount = GetByte();
if ( !MustHaveParamCount( nParamCount, 3, 6 ) )
return;
VectorSearchArguments vsa;
vsa.isXLookup = true;
if ( nParamCount == 6 )
{
sal_Int16 k = GetInt16();
if ( k >= -2 && k <= 2 && k != 0 )
vsa.eSearchMode = static_cast<SearchMode>(k);
else
{
PushIllegalParameter();
return;
}
}
else
vsa.eSearchMode = searchfwd;
if ( nParamCount >= 5 )
{
sal_Int16 k = GetInt16();
if ( k >= -1 && k <= 2 )
vsa.eMatchMode = static_cast<MatchMode>(k);
else
{
PushIllegalParameter();
return;
}
}
else
vsa.eMatchMode = exactorNA;
// Optional 4th argument to set return values if not found (default is #N/A)
formula::FormulaConstTokenRef xNotFound;
if ( nParamCount >= 4 && GetStackType() != svEmptyCell )
xNotFound = PopToken();
// 3rd argument is return value array
ScMatrixRef prMat = nullptr;
SCSIZE nrC = 0, nrR = 0;
StackVar eType = GetStackType();
switch ( eType )
{
case svDoubleRef :
case svSingleRef :
case svExternalDoubleRef :
case svExternalSingleRef :
case svMatrix :
prMat = GetMatrix();
if ( prMat )
prMat->GetDimensions( nrC, nrR );
else
{
PushIllegalParameter();
return;
}
break;
default :
PushIllegalParameter();
return;
}
// 2nd argument is vector to be searched
SCSIZE nsC = 0, nsR = 0;
switch ( GetStackType() )
{
case svSingleRef:
vsa.pMatSrc = nullptr;
PopSingleRef( vsa.nCol1, vsa.nRow1, vsa.nTab1);
vsa.nCol2 = vsa.nCol1;
vsa.nRow2 = vsa.nRow1;
nsC = vsa.nCol2 - vsa.nCol1 + 1;
nsR = vsa.nRow2 - vsa.nRow1 + 1;
break;
case svDoubleRef:
{
vsa.pMatSrc = nullptr;
SCTAB nTab2 = 0;
PopDoubleRef(vsa.nCol1, vsa.nRow1, vsa.nTab1, vsa.nCol2, vsa.nRow2, nTab2);
if (vsa.nTab1 != nTab2 || (vsa.nCol1 != vsa.nCol2 && vsa.nRow1 != vsa.nRow2))
{
PushIllegalParameter();
return;
}
nsC = vsa.nCol2 - vsa.nCol1 + 1;
nsR = vsa.nRow2 - vsa.nRow1 + 1;
}
break;
case svMatrix:
case svExternalDoubleRef:
{
if (GetStackType() == svMatrix)
vsa.pMatSrc = PopMatrix();
else
PopExternalDoubleRef(vsa.pMatSrc);
if (!vsa.pMatSrc)
{
PushIllegalParameter();
return;
}
vsa.pMatSrc->GetDimensions( nsC, nsR);
}
break;
default:
PushIllegalParameter();
return;
}
if ( ( nsR >= nsC && nsR != nrR ) || ( nsR < nsC && nsC != nrC ) )
{
// search matrix must have same number of elements as result matrix in search direction
PushIllegalParameter();
return;
}
// 1st argument is search value
if (nGlobalError == FormulaError::NONE)
{
switch ( GetStackType() )
{
case svDouble:
{
vsa.isStringSearch = false;
vsa.fSearchVal = GetDouble();
}
break;
case svString:
{
vsa.isStringSearch = true;
vsa.sSearchStr = GetString();
}
break;
case svDoubleRef :
case svSingleRef :
{
ScAddress aAdr;
if ( !PopDoubleRefOrSingleRef( aAdr ) )
{
PushInt(0);
return ;
}
ScRefCellValue aCell(mrDoc, aAdr);
if (aCell.hasNumeric())
{
vsa.isStringSearch = false;
vsa.fSearchVal = GetCellValue(aAdr, aCell);
}
else
{
vsa.isStringSearch = true;
GetCellString(vsa.sSearchStr, aCell);
}
}
break;
case svExternalSingleRef:
{
ScExternalRefCache::TokenRef pToken;
PopExternalSingleRef(pToken);
if (nGlobalError != FormulaError::NONE)
{
PushError( nGlobalError);
return;
}
if (pToken->GetType() == svDouble)
{
vsa.isStringSearch = false;
vsa.fSearchVal = pToken->GetDouble();
}
else
{
vsa.isStringSearch = false;
vsa.sSearchStr = pToken->GetString();
}
}
break;
case svExternalDoubleRef:
case svMatrix :
{
ScMatValType nType = GetDoubleOrStringFromMatrix(
vsa.fSearchVal, vsa.sSearchStr);
vsa.isStringSearch = ScMatrix::IsNonValueType(nType);
}
break;
default:
{
PushIllegalParameter();
return;
}
}
}
// start search
if ( SearchVectorForValue( vsa ) )
{
// found, output result
assert( vsa.bVLookup ? ( o3tl::make_unsigned(vsa.nIndex) < nrR ) :
( o3tl::make_unsigned(vsa.nIndex) < nrC ) );
SCSIZE nX;
SCSIZE nY;
SCSIZE nResCols;
SCSIZE nResRows;
if ( vsa.bVLookup )
{
nX = static_cast<SCSIZE>(0);
nY = vsa.nIndex;
nResCols = nrC;
nResRows = 1;
}
else
{
nX = vsa.nIndex;
nY = static_cast<SCSIZE>(0);
nResCols = 1;
nResRows = nrR;
}
// if result matrix has more than one row or column push matrix else push single value
if ( nResCols > 1 || nResRows > 1 )
{
// result is matrix, make/fill matrix with output and push that
ScMatrixRef pResMat = GetNewMat( nResCols, nResRows, /*bEmpty*/true );
if ( pResMat )
{
for ( SCSIZE i = 0; i < nResCols; i++ )
{
for ( SCSIZE j = 0; j < nResRows; j++ )
{
SCSIZE ri;
SCSIZE rj;
if ( vsa.bVLookup )
{
ri = nX + i;
rj = nY;
}
else
{
ri = nX;
rj = nY + j;
}
if ( prMat->IsStringOrEmpty( ri, rj ) )
pResMat->PutString( prMat->GetString( ri, rj ), i, j );
else
pResMat->PutDouble( prMat->GetDouble( ri, rj ), i, j );
}
}
PushMatrix( pResMat );
}
else
{
PushIllegalParameter();
return;
}
}
else
{
// result is a single value
if ( prMat->IsStringOrEmpty( nX, nY) )
PushString( prMat->GetString( nX, nY ).getString() );
else
PushDouble( prMat->GetDouble( nX, nY ) );
}
}
else
{
if ( vsa.isResultNA )
{
if ( xNotFound && ( xNotFound->GetType() != svMissing ) )
PushTokenRef(xNotFound);
else
PushNA();
}
}
return;
}
void ScInterpreter::ScSubTotal()
{
sal_uInt8 nParamCount = GetByte();
@@ -8093,7 +8294,7 @@ void ScInterpreter::ScDBCount()
// so the source range has to be restricted, like before the introduction
// of ScDBQueryParamBase.
p->nCol1 = p->nCol2 = p->mnField;
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab, *p, true);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, nTab, *p, true, false);
if ( aCellIter.GetFirst() )
{
do
@@ -10192,28 +10393,465 @@ utl::SearchParam::SearchType ScInterpreter::DetectSearchType( std::u16string_vie
return utl::SearchParam::SearchType::Normal;
}
bool ScInterpreter::SearchMatrixForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry, ScQueryEntry::Item& rItem )
{
SCSIZE nC, nR;
vsa.pMatSrc->GetDimensions( nC, nR);
if (nC > 1 && nR > 1)
{
// The source matrix must be a vector.
PushIllegalParameter();
return false;
}
vsa.bVLookup = ( nC == 1 );
// Do not propagate errors from matrix while searching.
vsa.pMatSrc->SetErrorInterpreter( nullptr );
SCSIZE nMatCount = (vsa.bVLookup ? nR : nC);
VectorMatrixAccessor aMatAcc(*(vsa.pMatSrc), vsa.bVLookup);
bool bMatchWholeCell = mrDoc.GetDocOptions().IsMatchWholeCell();
switch ( vsa.eSearchMode )
{
case searchfwd :
{
switch ( vsa.eMatchMode )
{
case exactorNA :
case wildcard :
// simple serial search for equality mode (source data doesn't
// need to be sorted).
for (SCSIZE i = 0; i < nMatCount; ++i)
{
if (lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell ) == 0)
{
vsa.nHitIndex = i+1; // found !
break;
}
}
break;
case exactorS :
case exactorG :
for (SCSIZE i = 0; i < nMatCount; ++i)
{
sal_Int32 result = lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell );
if (result == 0)
{
vsa.nHitIndex = i+1; // found !
break;
}
else if (vsa.eMatchMode == exactorS && result == -1)
{
if ( vsa.nBestFit == SCSIZE_MAX )
vsa.nBestFit = i;
else
{
// replace value of vsa.nBestFit if value(i) > value(vsa.nBestFit)
if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == 1 )
vsa.nBestFit = i;
}
}
else if (vsa.eMatchMode == exactorG && result == 1)
{
if ( vsa.nBestFit == SCSIZE_MAX )
vsa.nBestFit = i;
else
{
// replace value of vsa.nBestFit if value(i) < value(vsa.nBestFit)
if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == -1 )
vsa.nBestFit = i;
}
}
// else do nothing
}
break;
default :
PushIllegalParameter();
return false;
}
}
break;
case searchrev:
{
switch ( vsa.eMatchMode )
{
case exactorNA :
case wildcard :
// simple serial search for equality mode (source data doesn't
// need to be sorted).
for ( SCSIZE i = nMatCount - 1; i > 0; i-- )
{
if (lcl_CompareMatrix2Query(i, aMatAcc, rParam, rEntry, bMatchWholeCell) == 0)
{
vsa.nHitIndex = i + 1; // found !
break;
}
}
break;
case exactorS :
case exactorG :
for (SCSIZE i = nMatCount - 1; i-- > 0; )
{
sal_Int32 result = lcl_CompareMatrix2Query( i, aMatAcc, rParam, rEntry, bMatchWholeCell );
if (result == 0)
{
vsa.nHitIndex = i + 1; // found !
break;
}
else if (vsa.eMatchMode == exactorS && result == -1)
{
if ( vsa.nBestFit == SCSIZE_MAX )
vsa.nBestFit = i;
else
{
// replace value of vsa.nBestFit if value(i) > value(vsa.nBestFit)
if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == 1 )
vsa.nBestFit = i;
}
}
else if (vsa.eMatchMode == exactorG && result == 1)
{
if ( vsa.nBestFit == SCSIZE_MAX )
vsa.nBestFit = i;
else
{
// replace value of vsa.nBestFit if value(i) < value(vsa.nBestFit)
if ( lcl_Compare2MatrixCells( i, aMatAcc, vsa.nBestFit) == -1 )
vsa.nBestFit = i;
}
}
// else do nothing
}
break;
default :
PushIllegalParameter();
return false;
}
}
break;
case searchbasc:
case searchbdesc:
{
// binary search for non-equality mode (the source data is sorted)
bool bAscOrder = ( vsa.eSearchMode == searchbasc );
SCSIZE nFirst = 0;
SCSIZE nLast = nMatCount - 1;
for ( SCSIZE nLen = nLast - nFirst; nLen > 0; nLen = nLast - nFirst )
{
SCSIZE nMid = nFirst + nLen / 2;
sal_Int32 nCmp = lcl_CompareMatrix2Query( nMid, aMatAcc, rParam, rEntry, bMatchWholeCell );
if ( nCmp == 0 )
{
// exact match. find the last item with the same value.
lcl_GetLastMatch( nMid, aMatAcc, nMatCount);
vsa.nHitIndex = nMid + 1;
break;
}
if ( nLen == 1 ) // first and last items are next to each other.
{
if ( bAscOrder && vsa.eMatchMode == exactorS )
vsa.nHitIndex = ( nCmp > 0 ? nFirst : nLast );
else if ( !bAscOrder && vsa.eMatchMode == exactorG )
vsa.nHitIndex = ( nCmp < 0 ? nFirst : nLast );
break;
}
else
{
if ( nCmp < 0 )
{
if ( bAscOrder )
nFirst = nMid;
else
nLast = nMid;
}
else
{
if ( bAscOrder )
nLast = nMid;
else
nFirst = nMid;
}
if ( vsa.nHitIndex == nMatCount - 1 ) // last item
{
nCmp = lcl_CompareMatrix2Query( vsa.nHitIndex, aMatAcc, rParam, rEntry, bMatchWholeCell );
if ( ( vsa.eMatchMode == exactorS && nCmp <= 0 ) ||
( vsa.eMatchMode == exactorG && nCmp >= 0 ) )
{
// either the last item is an exact match or the real
// hit is beyond the last item.
vsa.nHitIndex++;
}
else
vsa.nHitIndex = 0;
}
}
}
}
break;
default:
PushIllegalParameter();
return false;
}
if ((vsa.nHitIndex > 0) && ((rItem.meType == ScQueryEntry::ByString && aMatAcc.IsValue(vsa.nHitIndex - 1)) ||
(rItem.meType == ScQueryEntry::ByValue && !aMatAcc.IsValue(vsa.nHitIndex - 1))))
{
vsa.nHitIndex = 0;
vsa.isResultNA = true;
return false;
}
return true;
}
bool ScInterpreter::SearchRangeForValue( VectorSearchArguments& vsa, ScQueryParam& rParam, ScQueryEntry& rEntry )
{
vsa.bVLookup = ( vsa.nCol1 == vsa.nCol2 );
switch ( vsa.eSearchMode )
{
case searchfwd:
case searchrev:
case searchbasc:
case searchbdesc:
{
if (vsa.bVLookup)
{
// search of rows in column
rParam.bByRow = true;
ScAddress aResultPos( vsa.nCol1, vsa.nRow1, vsa.nTab1 );
const ScComplexRefData* refData = nullptr;
if ( LookupQueryWithCache( aResultPos, rParam, refData, vsa.eSearchMode, vsa.isXLookup ) )
vsa.nHitIndex = aResultPos.Row() - vsa.nRow1 + 1;
}
else
{
// search of columns in row
rParam.bByRow = false;
bool bReverseSearch = (vsa.eSearchMode == searchrev);
ScQueryCellIteratorDirect aCellIter(mrDoc, mrContext, vsa.nTab1, rParam, false, bReverseSearch);
// Advance Entry.nField in Iterator if column changed
aCellIter.SetAdvanceQueryParamEntryField(true);
aCellIter.SetXlookupMode(vsa.isXLookup);
// TODO: no binary search for column (horizontal) search (use linear)
aCellIter.SetSortedBinarySearchMode(false);
if (rEntry.eOp == SC_EQUAL)
{
if (aCellIter.GetFirst())
vsa.nHitIndex = aCellIter.GetCol() - vsa.nCol1 + 1;
}
else
{
SCCOL nC;
SCROW nR;
if (aCellIter.FindEqualOrSortedLastInRange(nC, nR))
vsa.nHitIndex = nC - vsa.nCol1 + 1;
}
}
}
break;
default :
PushIllegalParameter();
return false;
}
return true;
}
/** When search value is found, the index is stored in struct VectorSearchArguments.nIndex
and SearchVectorForValue() returns true. When search value is not found or an error
occurs, SearchVectorForValue() pushes the relevant (error)message and returns false,
expect when SearchVectorForValue() is called by ScXLookup and the search value is not
found.
This difference in behaviour is because MATCH returns the found index and XLOOKUP
uses the found index to determine the result(s) to be pushed and may return a custom
value when the search value is not found.
*/
bool ScInterpreter::SearchVectorForValue( VectorSearchArguments& vsa )
{
// preparations
ScQueryParam rParam;
rParam.nCol1 = vsa.nCol1;
rParam.nRow1 = vsa.nRow1;
rParam.nCol2 = vsa.nCol2;
rParam.nRow2 = vsa.nRow2;
rParam.nTab = vsa.nTab1;
ScQueryEntry& rEntry = rParam.GetEntry(0);
rEntry = rParam.GetEntry(0);
rEntry.nField = vsa.eSearchMode != searchrev ? vsa.nCol1 : vsa.nCol2;
rEntry.bDoQuery = true;
ScQueryEntry::Item& rItem = rEntry.GetQueryItem();
switch ( vsa.eMatchMode )
{
case exactorNA :
rEntry.eOp = SC_EQUAL;
break;
case exactorS :
rEntry.eOp = SC_LESS_EQUAL;
break;
case exactorG :
rEntry.eOp = SC_GREATER_EQUAL;
break;
case wildcard :
// this mode can only used with XLOOKUP
if ( vsa.isXLookup )
{
rEntry.eOp = SC_EQUAL;
if ( vsa.isStringSearch )
{
if ( mrDoc.IsInVBAMode() )
rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
else
{
// set searchtype hard to wildcard or regexp if applicable, the XLOOKUP
// argument prevails over the configuration setting
if ( MayBeWildcard( vsa.sSearchStr.getString() ) )
rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
else if ( MayBeRegExp( vsa.sSearchStr.getString() ) )
rParam.eSearchType = utl::SearchParam::SearchType::Regexp;
}
}
}
else
{
PushIllegalParameter();
return false;
}
break;
default :
PushIllegalParameter();
return false;
}
if ( vsa.isStringSearch )
{
rItem.meType = ScQueryEntry::ByString;
rItem.maString = vsa.sSearchStr;
if ( !vsa.isXLookup )
{
if ( mrDoc.IsInVBAMode() )
rParam.eSearchType = utl::SearchParam::SearchType::Wildcard;
else
rParam.eSearchType = DetectSearchType(rEntry.GetQueryItem().maString.getString(), mrDoc);
}
}
else
{
rItem.mfVal = vsa.fSearchVal;
rItem.meType = ScQueryEntry::ByValue;
}
// execute search
if (vsa.pMatSrc) // The source data is matrix array.
{
// matrix
if ( !SearchMatrixForValue( vsa, rParam, rEntry, rItem ) )
return false;
}
else
{
// not a matrix
if ( !SearchRangeForValue( vsa, rParam, rEntry ) )
return false;
}
// MATCH expects index starting with 1, XLOOKUP expects index starting with 0
if ( vsa.nHitIndex > 0 )
{
vsa.nIndex = ( vsa.isXLookup ? --vsa.nHitIndex : vsa.nHitIndex );
return true;
}
else if ( vsa.nHitIndex == 0 && vsa.nBestFit != SCSIZE_MAX )
{
if ( vsa.isXLookup )
{
vsa.nIndex = vsa.nBestFit;
if ( !vsa.pMatSrc )
{
vsa.nIndex -= ( vsa.bVLookup ? vsa.nRow1 : vsa.nCol1 );
}
}
else
{
vsa.nIndex = ++vsa.nBestFit;
}
return true;
}
// nomatch
vsa.isResultNA = true;
return false;
}
static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInterpreterContext& rContext,
const ScQueryParam & rParam, const ScQueryEntry & rEntry, const ScFormulaCell* cell,
const ScComplexRefData* refData )
const ScComplexRefData* refData, sal_Int8 nSearchMode, bool bXlookupMode )
{
if (rEntry.eOp != SC_EQUAL)
{
// range lookup <= or >=
SCCOL nCol;
SCROW nRow;
ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false);
if( aCellIter.FindEqualOrSortedLastInRange( nCol, nRow ))
bool bLessOrEqual = rEntry.eOp == SC_LESS || rEntry.eOp == SC_LESS_EQUAL;
// we can use binary search if the SearchMode is searchbasc or searchbdesc
if (ScQueryCellIteratorSortedCache::CanBeUsed(rDoc, rParam, rParam.nTab, cell, refData, rContext) ||
(static_cast<SearchMode>(nSearchMode) == searchbasc && !bLessOrEqual) ||
(static_cast<SearchMode>(nSearchMode) == searchbdesc && bLessOrEqual))
{
o_rResultPos.SetCol( nCol);
o_rResultPos.SetRow( nRow);
return true;
// search for the first LessOrEqual value if SearchMode is desc or
// search for the first GreaterOrEqual value if SearchMode is asc
ScQueryCellIteratorSortedCache aCellIter(rDoc, rContext, rParam.nTab, rParam, false, false);
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
o_rResultPos.SetCol(aCellIter.GetCol());
o_rResultPos.SetRow(aCellIter.GetRow());
return true;
}
}
else
{
// search for the last LessOrEqual value or GreaterOrEqual value
bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev);
ScQueryCellIteratorDirect aCellIter(rDoc, rContext, rParam.nTab, rParam, false, bReverse);
aCellIter.SetSortedBinarySearchMode(static_cast<SearchMode>(nSearchMode) == searchbasc ||
static_cast<SearchMode>(nSearchMode) == searchbdesc);
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.FindEqualOrSortedLastInRange(nCol, nRow))
{
o_rResultPos.SetCol(nCol);
o_rResultPos.SetRow(nRow);
return true;
}
}
}
else // EQUAL
{
if( ScQueryCellIteratorSortedCache::CanBeUsed( rDoc, rParam, rParam.nTab, cell, refData, rContext ))
// we can use binary search for rows if the SearchMode is searchbasc or searchbdesc
bool bLiteral = rParam.eSearchType == utl::SearchParam::SearchType::Normal &&
rEntry.GetQueryItem().meType == ScQueryEntry::ByString;
bool bBinary = rParam.bByRow &&
(bLiteral || rEntry.GetQueryItem().meType == ScQueryEntry::ByValue);
if( bBinary && (ScQueryCellIteratorSortedCache::CanBeUsed( rDoc, rParam, rParam.nTab, cell, refData, rContext ) ||
static_cast<SearchMode>(nSearchMode) == searchbasc || static_cast<SearchMode>(nSearchMode) == searchbdesc ))
{
ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false);
ScQueryCellIteratorSortedCache aCellIter( rDoc, rContext, rParam.nTab, rParam, false, false );
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
o_rResultPos.SetCol( aCellIter.GetCol());
@@ -10223,7 +10861,9 @@ static bool lcl_LookupQuery( ScAddress & o_rResultPos, ScDocument& rDoc, ScInter
}
else
{
ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false);
bool bReverse = (static_cast<SearchMode>(nSearchMode) == searchrev);
ScQueryCellIteratorDirect aCellIter( rDoc, rContext, rParam.nTab, rParam, false, bReverse );
aCellIter.SetXlookupMode(bXlookupMode);
if (aCellIter.GetFirst())
{
o_rResultPos.SetCol( aCellIter.GetCol());
@@ -10274,12 +10914,12 @@ static SCROW lcl_getPrevRowWithEmptyValueLookup( const ScLookupCache& rCache,
}
bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos,
const ScQueryParam & rParam, const ScComplexRefData* refData ) const
const ScQueryParam & rParam, const ScComplexRefData* refData,
sal_Int8 nSearchMode, bool bXlookupMode ) const
{
bool bFound = false;
const ScQueryEntry& rEntry = rParam.GetEntry(0);
bool bColumnsMatch = (rParam.nCol1 == rEntry.nField);
OSL_ENSURE( bColumnsMatch, "ScInterpreter::LookupQueryWithCache: columns don't match");
// At least all volatile functions that generate indirect references have
// to force non-cached lookup.
/* TODO: We could further classify volatile functions into reference
@@ -10287,13 +10927,14 @@ bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos,
* direct lookups here. We could even further attribute volatility per
* parameter so it would affect only the lookup range parameter. */
if (!bColumnsMatch || GetVolatileType() != NOT_VOLATILE)
bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, refData);
bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell,
refData, nSearchMode, bXlookupMode );
else
{
ScRange aLookupRange( rParam.nCol1, rParam.nRow1, rParam.nTab,
rParam.nCol2, rParam.nRow2, rParam.nTab);
ScLookupCache& rCache = mrDoc.GetLookupCache( aLookupRange, &mrContext );
ScLookupCache::QueryCriteria aCriteria( rEntry);
ScLookupCache::QueryCriteria aCriteria( rEntry );
ScLookupCache::Result eCacheResult = rCache.lookup( o_rResultPos,
aCriteria, aPos);
@@ -10318,7 +10959,8 @@ bool ScInterpreter::LookupQueryWithCache( ScAddress & o_rResultPos,
{
case ScLookupCache::NOT_CACHED :
case ScLookupCache::CRITERIA_DIFFERENT :
bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry, pMyFormulaCell, refData);
bFound = lcl_LookupQuery( o_rResultPos, mrDoc, mrContext, rParam, rEntry,
pMyFormulaCell, refData, nSearchMode, bXlookupMode );
if (eCacheResult == ScLookupCache::NOT_CACHED)
rCache.insert( o_rResultPos, aCriteria, aPos, bFound);
break;
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 95dff9f1..60190ba 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -4326,6 +4326,7 @@ StackVar ScInterpreter::Interpret()
case ocCountIfs : ScCountIfs(); break;
case ocLookup : ScLookup(); break;
case ocVLookup : ScVLookup(); break;
case ocXLookup : ScXLookup(); break;
case ocHLookup : ScHLookup(); break;
case ocIndex : ScIndex(); break;
case ocMultiArea : ScMultiArea(); break;
diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx
index 473177c..e6a5cda 100644
--- a/sc/source/core/tool/parclass.cxx
+++ b/sc/source/core/tool/parclass.cxx
@@ -264,6 +264,7 @@ const ScParameterClassification::RawData ScParameterClassification::pRawData[] =
{ ocVarS, {{ Reference }, 1, Value }},
{ ocWhitespace, {{ Bounds }, 0, Bounds }},
{ ocWorkday_MS, {{ Value, Value, Value, Reference }, 0, Value }},
{ ocXLookup, {{ Value, ReferenceOrForceArray, ReferenceOrForceArray, Value, Value, Value }, 0, Value }},
{ ocXor, {{ Reference }, 1, Value }},
{ ocZTest, {{ Reference, Value, Value }, 0, Value }},
{ ocZTest_MS, {{ Reference, Value, Value }, 0, Value }},
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 25c5b6f0..114bdae 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -1387,6 +1387,7 @@ void ScTokenArray::CheckToken( const FormulaToken& r )
case ocCount:
case ocCount2:
case ocVLookup:
case ocXLookup:
case ocSLN:
case ocIRR:
case ocMIRR:
diff --git a/sc/source/filter/excel/xlformula.cxx b/sc/source/filter/excel/xlformula.cxx
index 2612f0d..f0e5b09 100644
--- a/sc/source/filter/excel/xlformula.cxx
+++ b/sc/source/filter/excel/xlformula.cxx
@@ -593,6 +593,18 @@ const XclFunctionInfo saFuncTable_2016[] =
EXC_FUNCENTRY_V_VR( ocMaxIfs_MS, 3, MX, 0, "MAXIFS" )
};
/** Functions new in Excel 2021.
@See sc/source/filter/oox/formulabase.cxx saFuncTable2021 for V,VR,RO,...
*/
const XclFunctionInfo saFuncTable_2021[] =
{
EXC_FUNCENTRY_V_VR( ocXLookup, 3, 6, 0, "XLOOKUP" )
};
#define EXC_FUNCENTRY_ODF( opcode, minparam, maxparam, flags, asciiname ) \
{ opcode, NOID, minparam, maxparam, V, { VR }, EXC_FUNCFLAG_IMPORTONLY|(flags), EXC_FUNCNAME_ODF( asciiname ) }, \
{ opcode, 255, (minparam)+1, (maxparam)+1, V, { RO_E, RO }, EXC_FUNCFLAG_EXPORTONLY|(flags), EXC_FUNCNAME_ODF( asciiname ) }
@@ -669,6 +681,7 @@ XclFunctionProvider::XclFunctionProvider( const XclRoot& rRoot )
(this->*pFillFunc)(saFuncTable_2010, std::end(saFuncTable_2010));
(this->*pFillFunc)(saFuncTable_2013, std::end(saFuncTable_2013));
(this->*pFillFunc)(saFuncTable_2016, std::end(saFuncTable_2016));
(this->*pFillFunc)(saFuncTable_2021, std::end(saFuncTable_2021));
(this->*pFillFunc)(saFuncTable_Odf, std::end(saFuncTable_Odf));
(this->*pFillFunc)(saFuncTable_OOoLO, std::end(saFuncTable_OOoLO));
}
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index 464d30d..6ee06ff 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -866,6 +866,20 @@ const FunctionData saFuncTable2016[] =
};
/** Functions new in Excel 2021.
@See sc/source/filter/excel/xlformula.cxx saFuncTable_2021
*/
/* FIXME: BIFF?? function identifiers available? Where to obtain? */
const FunctionData saFuncTable2021[] =
{
{ "COM.MICROSOFT.XLOOKUP", "XLOOKUP", NOID, NOID, 3, 6, V, { VR, VA, VR }, FuncFlags::MACROCALL_NEW }
};
/** Functions defined by OpenFormula, but not supported by Calc or by Excel. */
const FunctionData saFuncTableOdf[] =
{
@@ -1008,6 +1022,7 @@ FunctionProviderImpl::FunctionProviderImpl( bool bImportFilter )
initFuncs(saFuncTable2010 , std::end(saFuncTable2010) , bImportFilter);
initFuncs(saFuncTable2013 , std::end(saFuncTable2013) , bImportFilter);
initFuncs(saFuncTable2016 , std::end(saFuncTable2016) , bImportFilter);
initFuncs(saFuncTable2021 , std::end(saFuncTable2021 ), bImportFilter);
initFuncs(saFuncTableOdf , std::end(saFuncTableOdf) , bImportFilter);
initFuncs(saFuncTableOOoLO, std::end(saFuncTableOOoLO), bImportFilter);
}