From 3bf0158951cb83c6fe9395b21dfcb6e8c3cf58b4 Mon Sep 17 00:00:00 2001 From: Jiaju Zhuang Date: Fri, 17 Sep 2021 22:00:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Elocaldatetime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../converters/DefaultConverterLoader.java | 16 +++++ .../BigIntegerBooleanConverter.java | 47 +++++++++++++++ .../biginteger/BigIntegerNumberConverter.java | 41 +++++++++++++ .../LocalDateNumberConverter.java | 55 ++++++++++++++++++ .../LocalDateTimeDateConverter.java | 34 +++++++++++ .../LocalDateTimeStringConverter.java | 52 +++++++++++++++++ .../excel/metadata/data/WriteCellData.java | 14 ++++- .../com/alibaba/excel/util/DateUtils.java | 45 +++++++++++++- .../core/converter/ConverterDataListener.java | 3 + .../core/converter/ConverterDataTest.java | 3 + .../core/converter/ConverterReadData.java | 6 ++ .../core/converter/ConverterWriteData.java | 6 ++ .../core/converter/ReadAllConverterData.java | 7 +++ .../ReadAllConverterDataListener.java | 6 ++ src/test/resources/converter/converter03.xls | Bin 20992 -> 23552 bytes src/test/resources/converter/converter07.xlsx | Bin 10693 -> 11790 bytes src/test/resources/converter/converterCsv.csv | 4 +- 17 files changed, 335 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java create mode 100644 src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java diff --git a/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java b/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java index 02f00313..fda84b84 100644 --- a/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java +++ b/src/main/java/com/alibaba/excel/converters/DefaultConverterLoader.java @@ -5,6 +5,8 @@ import java.util.Map; import com.alibaba.excel.converters.bigdecimal.BigDecimalBooleanConverter; import com.alibaba.excel.converters.bigdecimal.BigDecimalNumberConverter; import com.alibaba.excel.converters.bigdecimal.BigDecimalStringConverter; +import com.alibaba.excel.converters.biginteger.BigIntegerBooleanConverter; +import com.alibaba.excel.converters.biginteger.BigIntegerNumberConverter; import com.alibaba.excel.converters.biginteger.BigIntegerStringConverter; import com.alibaba.excel.converters.booleanconverter.BooleanBooleanConverter; import com.alibaba.excel.converters.booleanconverter.BooleanNumberConverter; @@ -28,6 +30,9 @@ import com.alibaba.excel.converters.inputstream.InputStreamImageConverter; import com.alibaba.excel.converters.integer.IntegerBooleanConverter; import com.alibaba.excel.converters.integer.IntegerNumberConverter; import com.alibaba.excel.converters.integer.IntegerStringConverter; +import com.alibaba.excel.converters.localdatetime.LocalDateNumberConverter; +import com.alibaba.excel.converters.localdatetime.LocalDateTimeDateConverter; +import com.alibaba.excel.converters.localdatetime.LocalDateTimeStringConverter; import com.alibaba.excel.converters.longconverter.LongBooleanConverter; import com.alibaba.excel.converters.longconverter.LongNumberConverter; import com.alibaba.excel.converters.longconverter.LongStringConverter; @@ -61,6 +66,10 @@ public class DefaultConverterLoader { putAllConverter(new BigDecimalNumberConverter()); putAllConverter(new BigDecimalStringConverter()); + putAllConverter(new BigIntegerBooleanConverter()); + putAllConverter(new BigIntegerNumberConverter()); + putAllConverter(new BigIntegerStringConverter()); + putAllConverter(new BooleanBooleanConverter()); putAllConverter(new BooleanNumberConverter()); putAllConverter(new BooleanStringConverter()); @@ -72,6 +81,9 @@ public class DefaultConverterLoader { putAllConverter(new DateNumberConverter()); putAllConverter(new DateStringConverter()); + putAllConverter(new LocalDateNumberConverter()); + putAllConverter(new LocalDateTimeStringConverter()); + putAllConverter(new DoubleBooleanConverter()); putAllConverter(new DoubleNumberConverter()); putAllConverter(new DoubleStringConverter()); @@ -103,9 +115,11 @@ public class DefaultConverterLoader { private static void initDefaultWriteConverter() { defaultWriteConverter = MapUtils.newHashMapWithExpectedSize(40); putWriteConverter(new BigDecimalNumberConverter()); + putWriteConverter(new BigIntegerNumberConverter()); putWriteConverter(new BooleanBooleanConverter()); putWriteConverter(new ByteNumberConverter()); putWriteConverter(new DateDateConverter()); + putWriteConverter(new LocalDateTimeDateConverter()); putWriteConverter(new DoubleNumberConverter()); putWriteConverter(new FloatNumberConverter()); putWriteConverter(new IntegerNumberConverter()); @@ -120,9 +134,11 @@ public class DefaultConverterLoader { // In some cases, it must be converted to string putWriteStringConverter(new BigDecimalStringConverter()); + putWriteStringConverter(new BigIntegerStringConverter()); putWriteStringConverter(new BooleanStringConverter()); putWriteStringConverter(new ByteStringConverter()); putWriteStringConverter(new DateStringConverter()); + putWriteStringConverter(new LocalDateTimeStringConverter()); putWriteStringConverter(new DoubleStringConverter()); putWriteStringConverter(new FloatStringConverter()); putWriteStringConverter(new IntegerStringConverter()); diff --git a/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java b/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java new file mode 100644 index 00000000..0ac0e6c9 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerBooleanConverter.java @@ -0,0 +1,47 @@ +package com.alibaba.excel.converters.biginteger; + +import java.math.BigInteger; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +/** + * BigInteger and boolean converter + * + * @author Jiaju Zhuang + */ +public class BigIntegerBooleanConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return BigInteger.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.BOOLEAN; + } + + @Override + public BigInteger convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (cellData.getBooleanValue()) { + return BigInteger.ONE; + } + return BigInteger.ZERO; + } + + @Override + public WriteCellData convertToExcelData(BigInteger value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (BigInteger.ONE.equals(value)) { + return new WriteCellData<>(Boolean.TRUE); + } + return new WriteCellData<>(Boolean.FALSE); + } + +} diff --git a/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java b/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java new file mode 100644 index 00000000..c5957a15 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/biginteger/BigIntegerNumberConverter.java @@ -0,0 +1,41 @@ +package com.alibaba.excel.converters.biginteger; + +import java.math.BigInteger; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.NumberUtils; + +/** + * BigInteger and number converter + * + * @author Jiaju Zhuang + */ +public class BigIntegerNumberConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return BigInteger.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.NUMBER; + } + + @Override + public BigInteger convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + return cellData.getNumberValue().toBigInteger(); + } + + @Override + public WriteCellData convertToExcelData(BigInteger value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + return NumberUtils.formatToCellData(value, contentProperty); + } +} diff --git a/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java b/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java new file mode 100644 index 00000000..f57f0bdc --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateNumberConverter.java @@ -0,0 +1,55 @@ +package com.alibaba.excel.converters.localdatetime; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; + +import org.apache.poi.ss.usermodel.DateUtil; + +/** + * LocalDateTime and number converter + * + * @author Jiaju Zhuang + */ +public class LocalDateNumberConverter implements Converter { + + @Override + public Class supportJavaTypeKey() { + return LocalDateTime.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.NUMBER; + } + + @Override + public LocalDateTime convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) { + return DateUtil.getLocalDateTime(cellData.getNumberValue().doubleValue(), + globalConfiguration.getUse1904windowing()); + } else { + return DateUtil.getLocalDateTime(cellData.getNumberValue().doubleValue(), + contentProperty.getDateTimeFormatProperty().getUse1904windowing()); + } + } + + @Override + public WriteCellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) { + return new WriteCellData<>( + BigDecimal.valueOf(DateUtil.getExcelDate(value, globalConfiguration.getUse1904windowing()))); + } else { + return new WriteCellData<>(BigDecimal.valueOf( + DateUtil.getExcelDate(value, contentProperty.getDateTimeFormatProperty().getUse1904windowing()))); + } + } +} diff --git a/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java b/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java new file mode 100644 index 00000000..072a7864 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeDateConverter.java @@ -0,0 +1,34 @@ +package com.alibaba.excel.converters.localdatetime; + +import java.time.LocalDateTime; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.DateUtils; +import com.alibaba.excel.util.WorkBookUtil; + +/** + * Date and date converter + * + * @author Jiaju Zhuang + */ +public class LocalDateTimeDateConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return LocalDateTime.class; + } + + @Override + public WriteCellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) throws Exception { + WriteCellData cellData = new WriteCellData<>(value); + String format = null; + if (contentProperty != null && contentProperty.getDateTimeFormatProperty() != null) { + format = contentProperty.getDateTimeFormatProperty().getFormat(); + } + WorkBookUtil.fillDataFormat(cellData, format, DateUtils.defaultDateFormat); + return cellData; + } +} diff --git a/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java b/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java new file mode 100644 index 00000000..56aee318 --- /dev/null +++ b/src/main/java/com/alibaba/excel/converters/localdatetime/LocalDateTimeStringConverter.java @@ -0,0 +1,52 @@ +package com.alibaba.excel.converters.localdatetime; + +import java.text.ParseException; +import java.time.LocalDateTime; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.DateUtils; + +/** + * LocalDateTime and string converter + * + * @author Jiaju Zhuang + */ +public class LocalDateTimeStringConverter implements Converter { + @Override + public Class supportJavaTypeKey() { + return LocalDateTime.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public LocalDateTime convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) throws ParseException { + if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) { + return DateUtils.parseLocalDateTime(cellData.getStringValue(), null, globalConfiguration.getLocale()); + } else { + return DateUtils.parseLocalDateTime(cellData.getStringValue(), + contentProperty.getDateTimeFormatProperty().getFormat(), globalConfiguration.getLocale()); + } + } + + @Override + public WriteCellData convertToExcelData(LocalDateTime value, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + if (contentProperty == null || contentProperty.getDateTimeFormatProperty() == null) { + return new WriteCellData<>(DateUtils.format(value, null, globalConfiguration.getLocale())); + } else { + return new WriteCellData<>( + DateUtils.format(value, contentProperty.getDateTimeFormatProperty().getFormat(), + globalConfiguration.getLocale())); + } + } +} diff --git a/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java b/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java index 4c54b6fa..ed522b81 100644 --- a/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java +++ b/src/main/java/com/alibaba/excel/metadata/data/WriteCellData.java @@ -1,6 +1,8 @@ package com.alibaba.excel.metadata.data; import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Date; import java.util.List; @@ -22,7 +24,8 @@ public class WriteCellData extends CellData { /** * Support only when writing.{@link CellDataTypeEnum#DATE} */ - private Date dateValue; + private LocalDateTime dateValue; + /** * rich text.{@link CellDataTypeEnum#RICH_TEXT_STRING} */ @@ -84,6 +87,15 @@ public class WriteCellData extends CellData { } public WriteCellData(Date dateValue) { + super(); + if (dateValue == null) { + throw new IllegalArgumentException("DateValue can not be null"); + } + setType(CellDataTypeEnum.DATE); + this.dateValue = LocalDateTime.ofInstant(dateValue.toInstant(), ZoneId.systemDefault()); + } + + public WriteCellData(LocalDateTime dateValue) { super(); if (dateValue == null) { throw new IllegalArgumentException("DateValue can not be null"); diff --git a/src/main/java/com/alibaba/excel/util/DateUtils.java b/src/main/java/com/alibaba/excel/util/DateUtils.java index 68eb01c0..4a297cf7 100644 --- a/src/main/java/com/alibaba/excel/util/DateUtils.java +++ b/src/main/java/com/alibaba/excel/util/DateUtils.java @@ -3,8 +3,11 @@ package com.alibaba.excel.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import java.util.regex.Pattern; @@ -69,6 +72,25 @@ public class DateUtils { return getCacheDateFormat(dateFormat).parse(dateString); } + /** + * convert string to date + * + * @param dateString + * @param dateFormat + * @param local + * @return + */ + public static LocalDateTime parseLocalDateTime(String dateString, String dateFormat, Locale local) { + if (StringUtils.isEmpty(dateFormat)) { + dateFormat = switchDateFormat(dateString); + } + if (local == null) { + return LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(dateFormat)); + } else { + return LocalDateTime.parse(dateString, DateTimeFormatter.ofPattern(dateFormat, local)); + } + } + /** * convert string to date * @@ -86,7 +108,7 @@ public class DateUtils { * @param dateString * @return */ - private static String switchDateFormat(String dateString) { + public static String switchDateFormat(String dateString) { int length = dateString.length(); switch (length) { case 19: @@ -141,6 +163,27 @@ public class DateUtils { return getCacheDateFormat(dateFormat).format(date); } + /** + * Format date + * + * @param date + * @param dateFormat + * @return + */ + public static String format(LocalDateTime date, String dateFormat, Locale local) { + if (date == null) { + return null; + } + if (StringUtils.isEmpty(dateFormat)) { + dateFormat = defaultDateFormat; + } + if (local == null) { + return date.format(DateTimeFormatter.ofPattern(dateFormat)); + } else { + return date.format(DateTimeFormatter.ofPattern(dateFormat, local)); + } + } + private static DateFormat getCacheDateFormat(String dateFormat) { Map dateFormatMap = DATE_FORMAT_THREAD_LOCAL.get(); if (dateFormatMap == null) { diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java b/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java index 411700f0..0a71d25a 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterDataListener.java @@ -1,6 +1,7 @@ package com.alibaba.easyexcel.test.core.converter; import java.math.BigDecimal; +import java.math.BigInteger; import java.text.ParseException; import java.util.ArrayList; import java.util.List; @@ -36,8 +37,10 @@ public class ConverterDataListener extends AnalysisEventListener list = new ArrayList(); ConverterWriteData converterWriteData = new ConverterWriteData(); converterWriteData.setDate(DateUtils.parseDate("2020-01-01 01:01:01")); + converterWriteData.setLocalDateTime(DateUtils.parseLocalDateTime("2020-01-01 01:01:01", null, null)); converterWriteData.setBooleanData(Boolean.TRUE); converterWriteData.setBigDecimal(BigDecimal.ONE); + converterWriteData.setBigInteger(BigInteger.ONE); converterWriteData.setLongData(1L); converterWriteData.setIntegerData(1); converterWriteData.setShortData((short)1); diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java b/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java index bf7af176..8fa78f7e 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterReadData.java @@ -1,6 +1,8 @@ package com.alibaba.easyexcel.test.core.converter; import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.LocalDateTime; import java.util.Date; import com.alibaba.excel.annotation.ExcelProperty; @@ -15,10 +17,14 @@ import lombok.Data; public class ConverterReadData { @ExcelProperty("日期") private Date date; + @ExcelProperty("本地日期") + private LocalDateTime localDateTime; @ExcelProperty("布尔") private Boolean booleanData; @ExcelProperty("大数") private BigDecimal bigDecimal; + @ExcelProperty("大整数") + private BigInteger bigInteger; @ExcelProperty("长整型") private long longData; @ExcelProperty("整型") diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java b/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java index 009fae2e..68c34423 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/converter/ConverterWriteData.java @@ -1,6 +1,8 @@ package com.alibaba.easyexcel.test.core.converter; import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.LocalDateTime; import java.util.Date; import com.alibaba.excel.annotation.ExcelProperty; @@ -15,10 +17,14 @@ import lombok.Data; public class ConverterWriteData { @ExcelProperty("日期") private Date date; + @ExcelProperty("本地日期") + private LocalDateTime localDateTime; @ExcelProperty("布尔") private Boolean booleanData; @ExcelProperty("大数") private BigDecimal bigDecimal; + @ExcelProperty("大整数") + private BigInteger bigInteger; @ExcelProperty("长整型") private long longData; @ExcelProperty("整型") diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java b/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java index 4f758a02..cccee710 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterData.java @@ -1,6 +1,8 @@ package com.alibaba.easyexcel.test.core.converter; import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.LocalDateTime; import java.util.Date; import lombok.Data; @@ -13,6 +15,9 @@ public class ReadAllConverterData { private BigDecimal bigDecimalBoolean; private BigDecimal bigDecimalNumber; private BigDecimal bigDecimalString; + private BigInteger bigIntegerBoolean; + private BigInteger bigIntegerNumber; + private BigInteger bigIntegerString; private Boolean booleanBoolean; private Boolean booleanNumber; private Boolean booleanString; @@ -21,6 +26,8 @@ public class ReadAllConverterData { private Byte byteString; private Date dateNumber; private Date dateString; + private LocalDateTime localDateTimeNumber; + private LocalDateTime localDateTimeString; private Double doubleBoolean; private Double doubleNumber; private Double doubleString; diff --git a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java b/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java index 4a11f8b8..8516cd5b 100644 --- a/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java +++ b/src/test/java/com/alibaba/easyexcel/test/core/converter/ReadAllConverterDataListener.java @@ -1,6 +1,7 @@ package com.alibaba.easyexcel.test.core.converter; import java.math.BigDecimal; +import java.math.BigInteger; import java.text.ParseException; import java.util.ArrayList; import java.util.List; @@ -35,6 +36,9 @@ public class ReadAllConverterDataListener extends AnalysisEventListener)_0e-AP6WTMPNaiQlv;pP(hT~z=9jC<_ul{I!kw9O?z!ijd+xb)?#{&v zrgzrvv8pA!(2Z!34|08?%fXA_86y=;2ob{r!XM;vIgKO)9{&#iMHYAuy1FUqP#f;< z5V6knAW9(WLo|Tc0-_;ABZw^_8bbsZAf^yoL2M1t3}PFI<`COLw18*{(F&q9#C8yE zAlgE-gD8b)577Z)dx(w@ogg|xbb;s!u>-`85Yfk&_+Mn+|9Dj+NizJULtTWCNpMdk zUx2ln9?Xdj+vc%9kV^1MNEvk{pU^k@TJ~Z~-nnhpL|Oo5>(IDQL3%0~PsUJsjOUU! z>A4jVi;xv#=%!>sdh5P4Wf&O(C7%i>pP zOeT|w@E1$jz7Nzw0%a4#q?57mJgE^*t{@-fV%u%1d~DBG6g*LPR0Z`%9%vhW`^R?2 zZT|=hwSUB8`^Wp=;lINI`Vtc&(j~@4;wtR&sXqU$v9tKx>jR(k1dqxB2Pso{_5bx9 z^PHCNvE!g-26+GH!v`pH3muA?3KPWKnX~%kn*m8C+wvvE z&1GM;7vMHPL|b8cAVi#_gh0eONDM@rqvSxudCDS)I4>!Nh<%)e3qAM1c}c|BxYXpd zB(tH(y*yuqO1|r%b2_nwVQXry@u>BKV9rD?L3cWL6C0$@t3-{gH$0(cK1)7mS4gI>(Bpj1T z|4kv3(jiuab|`~_b%jn!1UN0IO)<L`FT!i$-x$7| zfIdiXrUBnk5U&mG1Ir~+Dc4OH`Ds3Uya?J@DVmr^k1b!_K1nbW5~de}PpZ?qYoOQG zfWHZP2Mg*WBAqqh^#$<+=+*T>{t^xJrh@c@bP>Ss2Ybo0RQcO#w}ZJAv`mMM4(;9B zxA%(f5H!-20Y-MP)wYLzt({8xh)7xdC{-c{SeU^Qipl5crOF3jWaR?IaNtw%xG6{j zV0Gm~NHnU_QOanh07tq~h>;zF6bJ_o2hcm(H6$9Oc*5cgmS@qf+(uPAjlJ^kO3&nL>_qRXn4~>|nJD z>r`c`!dx5@DRerpj8$N0!7L9-tgW^aFp=_TR5>XKEy!-{kC}=Lf`^eFlxDWtHe?U3 zo!K;s0hhp*?8SvOLjWu}`2n)kZcp~%P{yU;aiPcp$bPE!r9jBkqBJO)1{L~5vk0t9 z1VW;vSoFH%$2)4^O%KK;d$lNg+5XU zkF#kCztq%pd5h&Oh_*RpH!~KWkZ{!Qs2$M`pzye3LecZ|#96oy9(PhG{1p-d_JqNS zwvR6KffQa%&k{jAj3hLkwVNBI53ZOfKA=CXC#}C82TzxaZZEi+5YkiK-?~x!)$s-z z@E>WwH`j0dC_cD4r1UH{H8pQx4)tP1;R%c!RKJ8vcnpeu3D-lyc$_DLSEtbAYV_$! z{0xa1nSl<~;JSsAcjYE}kpV9m;aJ!P{pU{}+u4A|E< zD+6|Njb^aqwFeK#Ac8kal<#-vC1Mw)rMa=-s#S}~63|=dX{l72Daq$C34l~RiV3!i z;NT3oN{d4#m>@4-A!nHADR5a?S#oB7Ln46F=iq<^6$}J$nG$}n-GP=ZHb1d5H<51> z?9TtvCgtI(HsLdIWtm{ni;1oVo18w++C;q!zKyAg`)Eov0Z{Gd=&JMaRaKMUS$2SI zv^Sxe_<}>F>eN+o03z0`d~Sh|sN|MSviaOHd7cvt8FXpiWW7XQE{~SdeKq4Hd-v{T zt;Bc<;uz0iyo8HmyaaI|g$kJxel_9CQdJ{@36u&jM#S!wab5KR#0657O%gkM6(;H# zV0q246R0Quiwy1A49L9+61><9Sg+X1coO)AaHRM$qo$e!v^pYjU{V@_&&26p!31__ zno=c=YvQcJL_=}p!HqM4iEC3d!I4pE6MpCD52@VFF<7-G7`K1<@+IryjN1nX2eU5D zxIGugxIN-P3KbZ)=i=0RY)_z7D)nb3&jA}#>R;Dm^DWg$MJar_r{c4WQX4mJ{5M*P z@6xzNP<9YFRa8?72S}W|D1Cs>1a{;&Opu2F6Z*}tW+t$Qs9=IkTCL6)2a#usSo35` zhVnXGH^{23GTy6bf}Y23=G>;wbhzprX-5_9;KjOd<(+!Y9q;&d@>5|_EYrY5{-l^w zL_QNUmI;`tveQJ>v)Z*GRr=4R;8c!ninOW0L0AR-^)1;_oQ!~-uOD1u1aR&D^VDAXyj0z~jSQ%_r#aPwikTnC@2@)NleE+7M>(AZ zyhz>O>_CnXB`Zg}Jp8-z`@(YC3d<4lxAuZ^xc*ii{_wkl!g4Hx$PuDc`kRmMvVGTRIpFQ(k1r_uHydF&LjL9`D2MBBKE5{! zmI}+U6_z99Z?1xJxc=tjd*a$kVL5ifa)kWNT~H3!-+X-ctT`<#M=C5w$ltsK<#7GY z$9HkXO<_6q!g7TCt+SvUuD|*C{(1BpAvxN_AzMejSkexcJy-|~n0W+5EfE{R;LmbIkL7bTWjWGb+60cyN{;B8e2%SHjz8445sOKn?RMO+-M;z|kjiS<$K!AZ^kiTLRfURON~#;23kh{;+go z9Fq~{;q+4>PY+H7fzFvx>N;D2&Y4kMopII7=!{Ei1rL2VsRQ2DYeG4M*A6ZdRwD3q0Ip>(u?rOVf%(O3|q^2pW$Dk+aj4^%~} z5zsk< zDGQ=>8e(*zAx0M(LS4L2mwUNq^Ic-*%G?tdOK?_BS&F)d#C{-8na=efEUcpTji4KV z)}4^ocL>de*K))ypye>BTppk&!^0RR{-6u`DPxylo-P)ki!z<*cd)Q*y`cXf0=J%M z|MAV%0?)8jWu>D93iTKqF+ewRX#wpQ+N5)~E>Jr1D0Ss}ETyU+`Jo?)7kTtwED2D} zBx(nKgelyXgIh&R-4(-r65De8kyKEGYCfR!M@+_3j80aBto*|*9r6Ms^o{Y zz~|?|^5af~2`BFS>l-4E|V>0l(i$=TL+LE)h=Qr$hhfPhv#4TRsO`LKSHTdeX%2Q)pH^6lT&_rDEACGlAALppZcWEMdAV?^9M$8c-0@08I#%$Xcc(<$y>G zGYBS?C4V|ag`5Eu=JN+Mxia%imZ6B~FfjYn#h!+k2;+rmQTHQc|3 z`y{YHYiJ0s;Ql?_i=g$yNz5VArNXN@`&b}xH!R?!V8XzDTH0pNz!7avez|3Q6y_wP z9q<8*k`XB1M)q%5&<(3ET6}^*`=q64ucB-RuV*eT(;oNSuC|b$a3H zbu-F-TH$DZ=K9`EL*F)pR}Kl?EH$6tUhUhkD(GJ75j(w-gM>wy4R?U zw*v-L?--Ul)5@Yt>_+3lSBHKmbq$!C-6yvwa^v)eDT(2GyDnUmYPV=Z<)4A#bAB1l z+3&MkR!kmr)8a{Pe&D?`J+3{_I<#*2wZniBNM+~^C5QcI7AM}t=7 z*412%no#=l!o3S;_>V5{e@t!`^Ly~))|bn(Mr46S25lP6wtzPT{&xR>GF=W~wCzLYtr^0d_ssYEccDX+Y)1DNtG<@v+F>5z>x;Oa9qRq0cS8OkqeD~(+dnk%} zLC1elU_KiPI3FUOHAqjAO_X)wTq9y9#U{#9(L)T&BMgp9O+soj*G^ef9T0ceHEhh@ zb2|_JL3$Khbw9nPa&^tM2lr+NoWE^WwX&a4lzXwB(R^8j=e&b2X1H&%-h88XyOZt{ zYEQR$_{&s_GyA`8eY?+3X@fG`S1p>eqvU7l)e^TV`{(XIkN)0qT-Ur_pFY0a(BW>_ z6E|lAaiFmB8A}bN8{p;GPIy0pt%0L9T?B7byDsW>vbA5ktX_Asc0bD;U+Fw5(&O8r z&QY;XhWS-rwEZ?O?NQZ~Zq@w{mqygwb96irGQE3f>5J^_J}b3b-CMmjF3E7LTpV39 zWqDfK+NZ;2W)B@YJu&Ou`}gnv9Dn;{zbOu1{gJz9>1mH$(|)*X-|Fp*p7+)~_}Svs zdA}}>Z5H+_tS{VO+9Che#@`!mAD(w@NNZlAm{;OwPpgXB`ltP=TXv<(&YGtghpLKK ziDGW+MeJ}7D=Hbi{>J$v^N>G2UzM>ba@UoSGiH7`TU=g|ad=enKlTn^ryFlKKJE1< zvXTRP>h2i*boWWx>(8dIzZ^CBg>HQPwzSu`<~$r%angF=Pf4W#bFa31DqD5NKJNU1 zzO_c#0Uft^`I`0YVLPhmWZ~&?gSLmg_HWyjBuS6YKh-;;wa=+;+G%>ddUW5DkbOfrE_%g6GOa9_kLqWm5 zloqGEe_p$7SMZyAd50f2xJ3Uj?RC^gqs{A&e%Wy6&4twkTK2OOS{-@)u0DBy-O;J9 z>dz(H7L)~O+nU#ES()bU%-7m~uKmRdi&M*r4Nv|u%rG?k+ctsPH=H&c?wFo^?H`59 zYHytIyA>fix!!Q<7pXP*C3f?3*EtpM%E{Nd`LMX;dsn}*HWk}qYL7X#Ji8*VkLkg@ z`Y$b?w_Ip*EyG2BNQJwrP0f_hyYs$3p0Yh9WX!rntL{zDS(-E@FY@%xnk#KbzT6Xf z&~;qgXX6%&Y(AdZdBpy(_Ak!u4^K=fiCg(}<>rd06<1fr-wq26jTz?fF5Bz$g5~u+ zYd0^rPkL=nda-Tz99ifen||zc_fX`_O0D>IZo4B54dY1j`BVlc4XVd=N4+K z;*pKVgwoSX_xw=glRC8M)`%ZrKidD?cHZ>`)0Gj zTl@ZNl6Orj>Mb2yIkTt!@|4k?k8j-XXFDxRHeluC%$9qW^%zr9(JNzWm~rCiuZtJt zcl1iUvEb5t=ak3IJz~Q72Qe>4`dO6k(ErwG z)|Zm)r3Ra_Dy+^273Sw3IQ;vdhvxU@>`Tu#te>}`TjjJ1Z#R!CUV8FuvBPJ^)`ox9 zOhWZbV8@?vnX+<62yo-I{LQNoLyRw^jp#iWa(iI=kdu>V9tg)#XoYUw&Ts z@>I%@uTHy)cJ=!?e2jTn$&y_;MsMSmRL8$5Us)0E9iYE8Bs5ZP@| z&sWDUiLCbKUO#!~OPj50F3juuUA?#|TaGn;ozlnMt8zu< z%kKu-&+WK0=gM>aq;}y?vy*1JjV}CZ&8%(Xev4j|`Tq99;*GJDR{a-`Tdv!C;Pr2Y zxJs&L?u}pf++s{s`t!YxQGI{vIi&l@6~p(;jbFWc=FXYhrX@EFl&qb!wa;g|hR>4T zegAx{u94Qy_sxE**b@Kd*7&qL&!5eh;4?dNl8wJnM1p+eiPElxPq$_qiCXpaNLbjb z6Wc4c%A!Q&1|z!rM!XF$t6e%`$ByA?R-LZ-)|Tb{W_3K~mWfkJe$Feq>+;PnEWKm5 z2V4=|o^xaVowswGbz`*#WuEu9?cKI_P+-ofGc9k#RBqTl_VU#}BRp!hU-<5F#T#4i z0|j-CAG&Sa^V`F6*`xb+qpX5TcE^nmI&ksIo$B=+40_zFlg71+>sHt%IHA6FV#+J$ z8UBS{P7z+mHg%l2cJ8y4U9#^VY*$hFd$8c3Y;H{#ISwpG|Z(O5iBGgF78JZO{ zlL&(!z07hNW=)YKCtp5flJETUyo)=oXyx4ZGx86198~wzXs5fxb8hSpE5;sP{_UC8 zaXz=aleSt(KK^Cd=S9aRepk0JB+|TpZgo)n?wDB%lLMZ%NzCu(8sY31>FViSnA*~% z?~>w+^M}02-Wj<5n_>4I*8ijXPlqq|ZkU|8rhcVp#!1H`V@#%35zB&sMe=>`1Fdos zJK33!`Y@<_TJ;jDosA&qH2j2;lJa)nn4X!qg zxWvGII(T>p*3vp;6qJ4o{z`zXgys55&Uyh7$O6DE;NXxBiRmBgo2dL?zlGQglc@mZ zA-{ycssgqTjBu9()-+<+lrW~AP2q|k1dxz-Tk0z##taOOrtlppJZ{(%GK<1wQ!5n! zAvnQyI($AsG!s&e!77IS%+qX&I)}PC19buw9tPvDkC|szmdoSd4xHx*_;sq56w8Sr zp1x66#9>@Z9N-6N@$ig)s23r=RJa_>+(o2V;tY{W6ufl7{WB^I1s(<@lUm`y3PK-$ zsX!>$5O7s3jltn**a$yv#Ys289{~Z3I$(ZN{7@Aq-3dQh1^JnDXDomsorv)#6u7^Q z0aA!Wj4Nb(wxEkIGNy0{aB=Uc+NM9WMFjG5`oSGHIvs0}=$RcXi^AX64< z3s5T-vH%Fz+cc#mKFasUWV_|s5(fbd5XG~@`79Sb>;P$C6LM+|#2a7QorQVd57;18|v zA{cXFD+z(U1%?hif}ulyP}1qB(4jvtbm$FAItkD@u>8;)7&`O?C0z>zKP~Wf>~Fdg z$3JXF)FwO#q4hF?^!7kcr?*r~H&&$6C7rDb9eM&ohkl@>vj;lpL!fQh0|oj4wqpYAl(*;q)5~Okt`8%g7CgIX^#%$h(vI) zFALR@6FoQy0Eec$32xcZb>c*Nuyu9~+Vwi<63mF1xSO~YIe=XNXiWFhwF!je!Po@b ziJWjZ0WAT&3TlZG;mLRfc6<8Ip_udrV4|cgN#taM!3p13YV~YvWTSgaiX&W(_WFBN zgO82~j%r|c-l)S^jS#9HDKG@C@rnfXdK5#CM2`+YLf0c9|Au;;+vo3k{7;L)t%sZm#@)Mn+?K{x|aRMHf!F*FuERn)*f_E)H;!h!b-R zn(nqRHX|)A3h4LN%10mNqc1T8LS&BfTO|H|!?lJzPpQ0^ABQ7aCLvOIM%M_2h*@B~ zr(k@>iF?1n0|urh$4`z+51l-ALi{lJXdk0Ca>uIm@$&QW@b>of_Vn@$4D|m9P@01X zzE-LQYZbI1|J$`VIk!-L^^W@dpVY_8%U7x>0J24Arcyj96L-)!v6s8 Cd{} z#3Yu8v0wqCC@NwU#1f-MF(%meopWdJ?y~Jy|M$P|<-H8w+P?m>Ilx`LDqoW z3Nrd!3o;+FHe?;hts%F8tP5EWvOZ+!0>lt=BpLpuf-l0zWVlZuGr;=qpG=|0u!?h` znt+d2Lduyd`IO%1b>O|pX$eDXIQ9URV`qaj3|gN;CXg|V91|$=1Fmfem&3M?_xGua z64nG!$}kcInokGKLrEN5w7+eXt z4S57f0XaEwWGsj|4#W}s=TitHLmUTXCnP!mcw+|7Y0<7Kd6GcF0CE^jpg`}Ug1?~(ynzb5D*k~g+6_>_$4CiY zLxucqD)4BBHVhwm`*2~VQS=wm`>4S4Rmkt70i2;we-wbt-~3Dry)c?^jpLKsvdRaEqYS=d~$Vkc-zRco}&S|b>`v9;=|>RV=+ zj3X|@i*QC0fmlEnc#`Uicz@Eew59IKDD1#Gc1$f=H;8$*))+=Q!XML^s%8+cssSuh z#d-#~=o8g?P<55b+Ojd#bhP0>5~xJ4MB++3mFXqVPEk8$6zZDl3}eBBa7GaO7GCNI zUK&B1AsLJS7;gO><`v1##4)fkGwlkO7Qwt&mV}}3PUex*Imrt zRVg1_<+P+XW$1Bb!{DL+$o4BOSQjai2UkwY>BaaWLqpTnrl2pigJQc@OuM+!QpN{Y zXUg!nQd5S zyCQ#26>?HOiu7(O^y5}aZ&F2OR08K>g7gnJRn@whGk`VFOXd}A^j z2bd&4KtlBg|j6CA3NLV26ucx7!;8UCI&k!OOzhB9Gvs5mc?m(`(&Xi9J@bil}@QcT?V zV#W0GRwgD8NRqe(`QC&(XS6q=n7F!UZg5c{5^l3eM3U!*`)^WinIu!5Te@7&X%7`N zB|T@~zI~DkY|oL!u{}o?$MzgqoTTT7Dkc2H>d3nZcM7FO#F>vxZ2xCrysI!GZZ%4W zByQ5MNks)4D3{s^WRw?E-mn5m1?2u7E!avbpkHN&qzXgWF?`XQ$X&c|22Z#dOL0nC zmA7UGAm_oN@ZVx$&oH4O$;(@rBq$Y|RH%bHysRXmKxItcLmfwk2`h;f+a%mso5-Np z&LJNhoq$Ff90LObCBA06xGawC;<7lli_7BJF8=JSfRFV-Ktkdpb zpg$^(P<5mBJyh((NXHuc)Dy+|4tAO)601lgjXqWYR^3i7-LgH1{5o_{cD+4F5gbB)``+L}=n+%i6@Q-Bji3}5Z zAo>yN_{%V<4FAY(-(7}@m$xz|tYmms;hi2bOz7DzTj>M56ClH+GW;XsZlDYkFK=Z` zSjq4%R!9Eb3zy^4w>u?$LcT)KhgJyw&kb*Q^V~_?*SZRzhH9#7ebTTy=sZ3C+E^69Pl*$RDQdfgE zrNu1qIlqrw!8dEE7ROS=A-|7gC2E(+Vw$@Bt1Rf1P+XSJ7@dU^gtGENtQX2({9o=j6R-uU0yo>9B+7!g-Je;bH2?&@EA+3b!>>VM}QhZRl^HEAmm$m8TE7VhJVH zC$@O1+_>m$u2U@KFK8(e*GJTfNXuEF?4){lD$&D0q6fYyP}Ms~tDyDdRX3DWVXb8g zXC-PKfi25BLZH?WQfVBd(%@*6m!_>m8hpV(1#F3LdOTo8XQy|3>%2gls>%q6>Np};64DLCod(sNNyl>lq zZ>8n5nk^h7fYnupB3~tXdV!wmYEafDa16&MoR+Z=P38z0Noe9|*oyda5tHo``fxY_ zO1)dTHC~lcW}uX`99g1;-O+5lCi=%Jn2l!+X2TLnszo}%4h|2IHCUT=Q7<)iEBVoAr&emVi`l|g3u>iS#=3)Asae)0 zFoP+$3&W4RyBrkU#fBjh;-|<0LytU*jtVT;aAQlls<)l8Namu}c2d^e)Z0!OYge_l zV_BQP=K~71!;vGexVwVl>}autLwL2GRW=YitCdd5x;wH~{eq&5wFj_PSA!knJrotk zAS|!Ar-I_Rnxu1AfO^H1#dL4Aic47ss#jbY>n>^)r>x`orX*fwRxo9B!Am|rOE+Jp z1aSlV@ig$jkdOuaZwKL>O}O(vHAy&0*jY6V9-&eiDWx&s_zbrRGxAN-0a^?hcjRR$ zndgYO$#IFoDV?TIny6bDp>ted5Y&*qaoX})zxYGWVPp24D?RiV=~-kET(O~gecjc& zjr07@-!iUQ+fO&ztw>9Ev9PMs!tb8WcH3sT{d({AC*3ACRG8d*Fx~9T{;!N~^*Nn7 zD7{0?^6Xt@zX-0Bxz^Y|ar!s$7x5FN~I_hw{zU82TQnA0*Ikjpz zXkP%w4rn|Du{}}X$I-WvEq&T&^tzp~=lApp)s7=0-M=pE5*_z&s88($>#uWC@7GKV zsO^8~a710Bz5R)xS-~NPpJrzES*y{uas9^lq&DM3+|hN@R;Q+Jd^~h+=8z$?5;NYs zef##+gj*;3O|$#*uSLsOR=Dq;`QvTdwy$T0Hg354i`nz@KHcq2mi8)WD%gLxWA4qZ ze>UGbwD4+FZ@aA6bhoQ1=UT7odnG@Ai~jN9>+WkWikn;+Hs9p%;@ENaPdOL9x>h}9 z>%N1=aTc?jPZ=&h5@0=e{f7I2@18#^?sfD=IyriC=Bdr+G6$7xv3|Pd*9m$jqLcP) zKC<)E(>oq{%>B!A!i@6CC-gP%EPZBhJn~rRx#9wwq_~mWE=`&` z^TENX$C8q3pBf+YNc`+^O<_CV)K{A2m%EqNJx)7VQ?!l~drK=~ms?n2*{IFe&nKA% z{q^~}v~7{QFOQf#_ubi|%Br+OBa^?`H++-kSepr{FFqBP9oYM*Uib9vhp8_2x`2&3$bTj>2c6fLjhxW7{S$MLb zV*H?zuou4VdXOZ+@x`ZlM;LjX3eZT^>eVxNZ$jo(ey7T7wxiGMjvLkcRhHw2Dut&wTr+so}`B1FAv1`jz!Sb)5q|;oTfSEPxO{rT}^Y+j;eBVwyK*J za(m$q$5TpDg2rrGzOHfB{FO=5aw02A>n^t&@oaC%ch2MEKO4V-WA(}0E;0MVIy^nM zKRhv|EPn0dwcD$r*IZdU_EuO(NbFF%H<=z4OIA09Hf&#Vhx95*dRja@TNv`!wx2rR zJ{UQ78}FyCzb#$3QaGWs^@Z>1pSzm)vL9q z-Tp367#|+KYVL~Pqkda>Dr3k2^X!9@x*c|{b5G{^?%j8%_LInxb`9^c9cCI0xNXIa z_B;o4%*mnOdTvJo8lfku;;H=_h+jU;s_TP}aduCy8!Qkq-q1vlcMs+#9 zb-$1G%nadxwO^#`?OoM#Oj%X0wCQ2`i4|WJEy;E9NW8w};$p{?$OPARk()Nut@S7# zzp;PiuJNJXVHX?ni%TLVp1&LWY=ne2KiH99v63m?U#_%F&^{AhgZYr>ne zEISJgyZ_O4pnu^~w@!{uITwS^O}Mi9q4l%RtDl`piTbj_nX|j!FX3ZM%gge1&)0n& zpI1BfW#!tca8Ez&ohh&59tUjOGgzywZH;68MqOR+RbP@EA17DQ6syXaLv>b0ZO-en zw>mTSMa354f3Vb{(X(mD#oBDcN&c@3^CJTWg+4!ikz=uM(Y2HHbF6l5_<3R9@0&bK zf{&K}S#;pQnkhM{g;P)V^PKl>V}XNh|8u+gUv$fJzhS&(gytVZ4fLnFuKLA!+RP#0 zXV>Stob-6Ne#fR}qwlkZn~&3fk1Q z8NPSH*!6qnmd-7nncO^(zj5-;KA&l}`90~)4^PHv>hgZMWBfug8OINqT2^S;)-+x7PE zI{(xez3Z{nTS~@Vy3!}cy{_cv?=MxowDvrZ|H%Gbz}CHg+^ZDczjHg>|3p^a$C-FWL8L6J6aUvf*ML02)naHK{ z+}11G?jM9QUk?3+45jIWl-bLE9)H}U&4MS{N9J8jA5?wZ%ptAw*5y4rZ%!u-&KXH| zmUWg7>jqS4>Kx+F-}0n+M~`=Dd{WN+E#z>k@p z^5y1Pb!DRu54^a!dzGi<*4_s^R<+e%SUccwWNFCQi)Rd~`-atZ8DpQZE%)=$S8WQ` znb-S9Xx-MBg6ws9ZPTSjKL*yI~rW{Z@vLyEA6v_Rfuik1XFV+7YTb<1Y&@?7GaGf5%7HH_(32qsO|XZv0LQ;(lB+?$GM5<sf-SkY_X~F;G!K%*- zk4^gi(bAwu)BcNU{m1T!&03o5_t+#cx1V!_qkW`vC(nW@dQN@wiY_dUdYM_;b@Q^J zckDKQ6MXv6h2G6yq;F_i%b9)B{>T`ESvABwe_)~L+qYdU7A1DJF&+7CP;hE(b}Q#i zrz-0^tlb%|aW>}Q!4tPyzU~N0?5kgZuI=IY4?k{+>6tuvs&Mku(NQx}gsCI(U1wMB zx&FsJ48odwznOQ}y>HRJAil$ctcs--n`W1vUSn^1=Gwk(LtZzBS4V|x7nn|Tt8M(@ z{`3*0&5aw<%<}$-dN5>EQuf&N#_h$=U*GF^sK&)}Aa9;i$#YKLsH>~n-Mwev(ec4I zQ4iL2yJ4O;aao5gH?-_`>ZpA|go_Uz6pr+ePZmw3O^pP}uqUGOsb z;edhtI9y{m(_~+0vK2+P+~aBKzV<}VM!ByNp%L!c-S7M;3Nc`4IYFv4YpVxE~7dwCx6s~9N{+@@0CA+x3#*sm4iWNpwO5Js03e%VWw zz>k)e$gRSb@`sb9GPvbHX9#~$aJW5&OoSg=42GXm&0wA)n4evYV}5w$MFzren$qBB zR#Rmt!U2~^k^tuk%j8%Np6h2rH|~f>lSGp<7|Mk3hvkUBizjO>@LmjlB%X7%zC! zE3E`lQ$XAX1tf%1g*n3{f>JM+84pb09ZhiwQ#*Mqm0vL4y`Q6l@KlolV#~9Uz+Kz(~-= z?P;jVg&#NRGtY)_#UBjw$(tQb)e&O`299R%E)3q4xn?n#OrT+t10H@7JddRppZU5czRDE19(Pz zP{c`B_U4(u@?5nAf|UvI`kz=hn|$uwE{Xj2|x5CONV}x((%Roc+mei;KN{I|Cd!v zL&Du4+MW)ScaZQwU$T7AlTtpqVm?$Z^dw71y~xUM(1H&A$kL$~rTmOq(4iMuI`pBG z&a?#``jDkV4@&9GThO5gSvvHel&(F{*#oQzR_1{3aCBlh`)PG+63QW#<#1_V&Z9)= zR&ffVcZSFui7b%_ezORkW{Fr%Mx+Be+8&AE(!M-|Cn8#K7RbZEj1iXlL;w>v>yxW6 z=8R#u8k6&!0B&1y0EVYFNK7DJ(S#Di=oSEk+&M%bSc5@DJCWaxB+3LV2*3CNB`;K6 z?4}Wja;CBS|6AN<<1%Xl_)#_5odJX3Dra}Zqunw6WA}e!zWh(yox13s>w8!L`!hrk z=A{8*5A%Y6uLbxrfB^+3e*C{IILYJGjuSe<81OKF;6#nnGvfY9e?JT0Yd!pH4gErH z4Z581`D=Yg?ztBSJ`IJ5F#|eCx%gY}|LHr*!v@@Xc!c)X-KTd6Uap*o=_KV6SiT;G z8Gi66t;f8f0Xf(^TTdQl<&?j(^z5CjXNF@A?OXr9?9SSk-rvNbe1yQAnF#5& z9E1AE%RA6nhlxNf86f-m?DfxH4oEU6&gBzVr*CUL0Ji}$+6v2=y%<6=gWwrsRd2`` zqhcXroSFz3W7BlV7~}SU^KkK?0mS%nt_3+}j8k+e>_X^|m|X-Q34)wy@#*liUNs!% zxh$6XpG8QI@h$>3hT>sSolH_8C%^^}{^z9WfD_h$^ zQCHw98})$Yzf8CcgqPy~w)COx|F<WEU3;&$-+G?y&lO-`aRBfDL;wIl31DGH8wh{`0J7i#0Bisvw627m zt+T1Evw?<(y{VHvo4buQMLsMvLoNUs^89~~|KJ_?0Mb|J9Q|q~4FMIe$uq*@8Tnx>NYr60P zUfpF1P~yKv_nzEea2oOD#?@1cN=F4z+9c$IQ(@SYy;di!4eJ zYovT&oul>)y2*|pVhF8hi3{FP1s-VLiTpGc{C;Edn4nPG07p2{_(X-z_92{l@(zJ4 zCxu)tiQfT0@RX=#--|nbbC5rBTIRHgB`AFk#mn8@+AlM`_HvN4W15^!O~pEQ3U$n1sUR}-ZBmWyWXv!)PO`_$fP77t_&<&5s2000jU zFo5TOVJ`NoE>ma-b5|h5M1e5Zz|qv&iJk4|^}me$52op#{(41%k^&4TF!VU^f$~GA zz#yu>$3gw^C!_vn|Ytlg(EB0^Ml!FAN&biWHbi?g33R^8W0cYAfi_7)SBRdEaSx2kA__RcRjRfa^|TuU*UT%T0oVAB?1qorQW?XL(d*ph>>OK7si{fRhNQz}ZCxMm!8LRgN;zTs zeMyt{-sb4w!g%-6mVG$?lCxIGcwB3O7i)aE?gp|8f2Yj%a|8iw2xYWk0RSQZB9yx| z`yZ@vvvah1ZD(io)7|}>K~NB%2YL2C`{+oTubn*O5@V(6i z!_b-*UFpEk!|&V06Mh<$qysEZPTAg-ONqJ;ksl3cx8f>|_0V-RaG{#~`it^CL%Zj; z2yX)$be@jq`;#G|4;+r&qY)FX({j1Uu#~;TG8Es*=A$>Q0VTDd+f*ctH*@t*YIP*; zu`qx2NVjc$D2EzQOeAdt_J&$+Xb7bPe`X5IA4V%A?^9`7(DbM*Fv)X zJJyH3GLAgE^{wdY zumXY9pTSi4!p1J+8P2_L(JgsgxB4Qid7%8eBBZwXwsLdb#aNJ4<|-b?+*7p9nfu!q zIoX9b>22t=zCwb&5nz_YHhFaian#13gAYSD1$5I zNq|@zk;6nbm{@mssEs;uY;Pi)K_!QHl2HlTxpv6&sZf>cb^+z7zUIU^*N0#0Gmjm~+qW0Q&skgzoVY$3CpPPX6UyZEynOPyC$oMm&scYb zV;WPu7MJmMYXggzK$h@s61E^c6hhx`6mu}{nL+ZSfhIV|09#l#`w*4_@qW3d- z;^}+x5X@-hdj4yI_~X^LG1yfvt)lcVNS!0aWzVN(>1WXdl4vSFU~qTEFKx8nzj$)s z<4w(`1?m-e})~BmVJL*)IdSvg>lM3%aX?IJvj+@J6^N_o_cD51-%Voch0Vyv0N!`mql{V!dg7H;kX9x76a$;kOy$}MO5@M4mB^M$`5;{4rOyC$Jh1VPf0 zD&n81$uDX-o15C0vj4hr{M(+TOXLRZ5zN|`EKG|D`8^DLua)tEuPX`yPWOsBXvZ{FA(_Zuf9$==D}&|Vza zEk9gtbltT=>E7j|ZrqE>4)zwL$WHI*0HlqnKgJHv}SS=4vzJVqOECsW&rpPxI!On1t zGAjEYoP+&CVTB$}-=!D`-E1DgT%pa<3of7%6v^*}#6<{=1@IB0HHolT1(S^8VVjfJ zO9KvWe&i|~l>j(da0Sg_Y0t1(Dh>2{t*+^c@eWuItQr@}E0w$0S0>5Xh_k8ol+uy~ zKsO;{j6N`imSl6b&ANx*lCq&zIbfA4S)|fIwHLb`XQY*O3}yKFq#{os#uL;C&VtLE`R3{zAu-4)+;RE+WEmsu@|b-2 zc6r+IsqGp!ldbppIlZ5^1ODCp*HJADk+Tg`%!hq9jO>RWrR0c&+=)8_+p&ILH&+7% zu?D_plQ1j57Oh}63vrq@Y4k}p6;WPe0xidB?01V((VQ->s|4m=vdu3J0M*f)XKU&G zJj+T@1APb`f^CQI+wh~}^U21w*88DsoyODk+|lf%&X``d2*^{5IB_zqyK*jHp4zT` zbg=PC68n@1TV#BzsYt@WJiLr{cY?!QG%a z8&RBT3BMCXr+bE5X3tAL zWbGeO%JqCYOFnDzyOL>!YRTg9$i-KZMSqD8DT2B(k>^xjx@#ou)>YdiD44fmOWbg8 z^h40^&u~3e*>ZgJvq7&*rt4oVIxi3R4tj|aE~*<#SIN(KDe(EVF;%|5>84F;B;kK~IE{0-Ebi#kGT>a@fdnvs@Zk13Xn)?|`A8)*&X%J#IU<(}xZ zAc@zFW4EpzMSOP3!>PMZxSkvaPesz%tG!{yUyjk9mv5Z3uCg?xPG^jau~Y|v!_LaU z>mSo6=P7o=dPaCs?;8&|jt!-67LHu;a$2P7h1Kzg2`=T1s4Fi!Vn+t$5?`hT#}CPP zx(W`;z}dPeU9h%f^~*`Qg5VD5mc5ACmEgD1Qk<8`pGdPDDOhpl^Ew#M2-SVrw{jShw1)u&jvw1oqhmTd|23kEy3#i;LwlKxiMwpG=j_u;<06e`wZq;E7ou(m zO#^keDxae?kfplqaXxmM%IiHX0v5!Fss}0uJW~b@;ylT zGHEdTsTrF9J^soUpX~9^ts$hk_yYQ|rIZ%2#U-|}bU|+&-g+2mdZ!I|HG`)zP8JON zlNzc~j(Qp?6$vi}U}(Bss^;77>HpDZU7}IAl0d@2UPyHf?GK;j>h#lF^=ppC z%y8f=QJ-QYU#1DBCpF0jGGxh8qaj+rM^t9;RfdqqZ^Wnp1zcIK5nU_H`c^owa=wC^kmW+TV;lhpw+pQv?t(_r;>QV%yQTr zMLfRg!oE0jZ$@_q($#_h;=O4lt`-rYJra6pv@Df*^ZM5QyWyt1e}4>GR-+aS%jmpVgbwVll&Y_TN`W+ua%ST*S^+7&Qe z=`k7Srq8q(niSEj%~meO_yQaqN3KH-w|F-(UDc^tG1EBAqypDo)d(MlQWTQAx-Zd0 zBbhNXmISxuE!2F`)JIoe0LiP1!%K9<_=u7OmiW<2D_vs{lB|Wzv@eZ0zICKd z)-XH#^u}vPxi{84XtjG1-TFIaz{=uP)Mr%h?)vw$`X^4$HD#n4dCBMTlupLZ&tuui z*W?e;BuCLULWjqdb!%=({k6Hnu+FW+2)sTu544*>MZmERhh~i4#Ucs6HJA*vfhF;?LOHY(=XXZ|^}{kx`d~K|k2)6kx!(rLaohzV zx@`x0U7f|>LsId-hkm5OYB{7o3(k;V3I3qb&#cPH+|<B`6l?%E;PTjXjvj zAm+f!#bf>*XOQXWbfzk;ob{yRR_+B0dY@Nu%g67svIn%N>NsjW^_bDnhp|8u+{>5U z%%+FR+_Y?9Mq6GbQp5sFNt3#S`$;iIRVwYu##+JhnqwdCwZH>bVb1YWMkO{^s zI>@oeeQbuWT?L+%wtm8!;a1TaU2PwozaP{ekSq%&LtpCP4{?CjbM9NphW zJ@{72aq$}{!*`m9I74Y6-fJSKnzCQZX};vrRH}5yHEsxS3Lriwvv2)OMSx*3&URzP zi)iMMa;q5eTIT5#kxb$h>cdjnQanu!swB zqXG>FxKnV2u(7<*`fx&UPUgdJ!0JJXBnzg?@** zN#^l_hfKyE#WhFjEvtcrkAB}Fe0Y0o|Q`XM^{RM1V> z=A;W_U+orBlKB@rlaiH`p~Zk9)%hFJ1(-Y1Qco1sev~8L1MaO+vBFV;;1N9$=Cb=h zT3lp(dr*1%^U6b{-z--891sX4x3ROf+)Q5IUgEZu3t1jiY73(hdMzOkoZ2>2$KVj zEq)lR2AA<((y%m8g~qlUx#tLbaM;C|#f2x@+>~(j2$s$?vW8yC{A$m9XZENQYN>DM*vd^xqdS zI_3Pa_)Gg$PxL*xz*o%j{qY=jUW#n*z@t3#SBayg_742O?iRjLMZwfXvmT24vV}sT zm9YSDrAx^&TlEMpr^CzjX|5DaKY0f(C(HF~e!_u)W_FCAHP_mC1~scJzs7+K>kn?j z-o72ao!wxzGk=enC&ad;n>kf>|CbC`qu_epCZrGz4}midWZ{qsqm#Ljqp69yv!jKr z*{{g50wkug$bmBi@q?sPD`2?>B}Cda|KJAVutONh%Di|Yfv7ACy#W0|8a9nj#mH>B zZWb0HB^p2?199ivbF zM{PTI?Uf)N6Z^H9G6S=u7V}v9hP6)bHG4KxT!q#sOL574f;0K(U||DO%slydBZnQ7 zbAsd7WCQ)x--sxwDvTGoS5_x67`T{N@_MDJUn~T}lVjEKFS(miPpk!OBdXkAfu7#X zUrO)`#@%5fpiF@M3NtGd>lR^6i%hdFmQM0lQw@#o72&U*5q)*bC}6+k@S}tACPh1) z*_vo@DZbhSu=cU9URk-G>b`280edw0!D;E7K+)oR7#@y3*$eb9*foz^X-Rq~vl=m- zhI-<{-A~SI%Tv%Hv`xCHjYsf2|DfVlGT%eSBOh)s!8YqvqA6NAso{h$*FD|T)z`(6 zIcB{N+9gLe*R9lcF)7#1i6S;xv%;NZ9)+M4po91~uO^EO=HjAcBc1(3P;+5Wfoiqt zvqUx&3D&YwB<8>oSL*`~re#fi6KaVADa!-3rs18wROuEz0J*u-$_Al%6!r#rfJHgA z?p+<_xnR!&3s(61HMHAIeZq<}%5&g80AqawGU1_xs&b2AfHsF_4FG34c!!a3(ovKDq z{d`%1WZqU3FufCJet!bR^6JC!@pRTxVqGY{uSg?rS{$pC5o;@;rG$rd>GIV*UC1_1&<{%dXr2Dd zP-m8`b}O)50%1V5&g2D?&5q7h*X2|&R|D^T#2rb_wDY|f-Ei8JCcf?0;jb^xYVHWr zFh@M6YaYrurh*ARf4hL5D7k7%$PdfL%`w^_Hku)uB}A|3Mz$CsT_m`MY>Kug~*TH{OFn^hq|FaQN$1Bh&48+j*K~Bgh2$YGP z@pDHzdna~d7bj;so1b8UG?xF{7K6Oy%*j#9U=AGkRiC_LU|nnkqw|YV-gSjbzh+|_E=cR$wVL~I6CwX%c zB803=Eyx(n=Z9!su7k+hJSBD^lD|UVYUyJS7uup?+JhxyijxvfcWM60PMHj+h;1VvYyxcp#Ayl23#-qxvkQz^jk5gVwfZLzFwTBP&kQ zD#yDt_Tk~mlSFOLyZKxj1xX(@BvsilUaY3p*+@Nn@w|P8mr8;wk6Rd?p`Yw|=6<4< zW!h_)2ol3VOehppY#tQGso5GHJ|q4bwSfknew&5&FJFxJnl@bOBGQ<7_|h540Oc7} zG9+>du<%*$?92&mhQi$TefoNII&FxKD=3AFx*VQLy~Q=<9c&ZD+&{2112gkCF>dJv zbgIN$JkxUgQU>B7W4pp`<02CqeizUNKT~OEp(kFcqtjr>Sd6-4_G(qpgd9yAK{I@o z#tfR%(2O{}>jF(}8bhS(?&f;)a_(5ZPWZ!(qc!Q=QDgQcJX=h(eoqg$mve0)9^uDx zR;7G=|83*dY@;4hdrcmI(vUa8^sDqcT_V|`cYBxp-hP;!Zfn@fPxsv|5Xta;1vSbS zXc(?z(D5A!O01S$zUjZ0vgw5%k(qGH^I~x8TgiQAmgt>*HWvFvUbxfi?pM0-c*;iH zjh-nN^76(ZClGQ%qAz13Yhwv>BMaM~z*dX_BlmIuB_SggzzbV-FJOGJ6s%b19zw9Q z4fJraNzl#;F$U`^_$@TS;=>hi6h576JdSla5o|&PBsu_Z_%0ua+0SyDlOy4J$K@T* zmd~2oDQgN~4Tx6sYzdMUnizAMSFHzYB%3LUZL7^Nc*vI^G==lK&wo5u4yE$1;-O;X zTP6ZlWdhdx7|ndMuEp8>B-vEj*dc5EJ59HQ4Ps;=G*yC-81v6GHMVm!{Vz`;d-kux zJK;~WZax`>Qq3VvFd%(?oP*~bD8svW*3$`+?RQ@Fw&iCq?0vUe!%pbK+qz4V%aQ<#hc;Rnk$PXL8I zlm74p^NJzH09oGGuLoAyFqQWTu<36x|f zY#&@y>Ev?JI^!kEWllvZ63P)$R`cIGbdvk^a5-f0_2@3UCmh0|4ldPZWeJHcUUi{XYbKqD=-icl)sDVSzFUPTbQTE4oiSDVgy|J9;4J$?nVX2Cu8vUMyOUbMJ01v z=u*Ho&SZa6Tl|FL4*sq!!Z%9K5X^z5$;K(xj>DajEVX<;loe%+BlUc|Gn%<-9cgTWFG|LFib4FHj*>NmvWU^D$Xbt_~{b?>he5+ z`PKjvmNYI89Y1nLLZm2&GFWra-VQ5x7t=JhiBDwId#E=khWwkZ&ToC0xVT+U;(1BtxvW~@HsGTiQ2z`Z94)^L@o521uX%WmP;P- zTkXu16~ecf+DxeT_A~vSb(O=}Y4$!;j(!&W>%o2WYh7}X&dMXoSvua79;=Zr*C^8V zF+n13+%+af@E$G5Cmu?U(n(g3Nlxz-H?e;YbQzrXs=`yCC7uF}`u9NVTiF7hBOMUK zFWJq26L{?Vn7z47K4)N=eaHu(gzOAirz2Zwc%K?bHh)N?&Eqmtx+;Bfw36KIrMKYV zkh99zBAd~&@9jQUgrcf-DX)%;Dup0s|JM#7d}<%yG8wUJOH+(bHc;Sf@tQ%XHfG z69DtaW+G6hC8+W8+nB`3qrn8hsHuz?E#&WpxfqJ?&jk|9qfHLBnv#kuns*c5W3pWg z^&uv0ySzG9Vhw%3$Rr}jP|Cfjrg0(%5&r6lX1OF^Jz#@iYend>_=Y|s;{*Ha!JviS z{rl|&H*YUR9}Hz#3IuEDiC5Z&r5XF1Wwl-mcsWJV#w(P~o_mDSsmo+f!(4Yekk@Hr)yqbpHuAipP|MLXg2;VJN5Pf0-kEddU8_Er`@HhZ+R zl|M0t@TK$(5sVvzNm>a%rLqy5R-JfZExR`}85q>q7nb{D0Mq@f)3vRR%t)*GZG~u+ z*meRdrW87u56dDPKnBzO&4E0U4{|H&y>Ud@D$Se4FCW#Tm_6o;dF2|Qh>x-k72$PVLaF{|YThXUiN2vX<*@zaGz1>IXzPo2qFBw`Rr-^hj zNK}S+SZeWl<(q=F1vq7_ct54YhUc(IuLp`}SiuE8G6i~JmrYlt5I{h1{zdkO3gdGEB2)%#7uYbCoC+R0 za#9`VqtU1}YD5hJ6U$~p?t;IHu1iDb@WJZG>hg=(-@t2KayJdU2AttG5|br+<8tC7 zdV{CA**MeN-&PV$_Nb$3%OzeHS$vEZt_dDCX1g38{RK1pMcA)v=b@sy8E^!B%}Xuue;xijp=((R4b^=d|td zB59bkSdKjkqWRzN5}`+Y97kDPMW%>VLa)1-ydZlxH7zC3X?T@qmdJ#9&}G#U9h0#g z?7RlSDc-U9WOy=f{KLDLao>6s}5~fR>hp0 zgF?KK-H-;$9T5Alm=c5Y8l6$MpCCOXAPQ;B@Gvxi(tiXStmgdSjX`z3n6XHofiM~f zV8XgFn7jk7T}2{)xAUCZQ^`-krh(hBviak3S%b^6Yw8Q0g)ORyJvfD}tWh-+A4vWL z5?~GAe2_KT`oOeY$#yQ-R%zC>lZy3M;|PN3>V`+xFfFlO*8b4hUMP$Kfn&A`7mSb)*6T>i7aYBp` zSULz4%QkeHk)xhMIL2iPNcs9kuuzV<^^zN%?Ao1mij~&yW1+GZev7E(w2@#);=?QN@+ES|V5zF36RN(tSbGjQK!OwL}ja{uV^dxm|P zc83$9d7w)lw*rru)M<;)l-TKe=v@Hm?(GNhO2=p!Jn>2$iq<)P*99@xOQzi*f;=L8 z@nand#BPEzz1rh$ijCCc?)hs7I7%e%9b}Gar}x)|*ZUS6ZJZCnkGC+Tw!waGvo3XW zCOEI-dtaJKpM-v|1d@#$boO2ow>%)q+`}?@>Oh-#UEdwgJU%k}DwT&t#jCG4G`i9$ zk>+ywz8LMt-Lgx;Q~~oqzYulAR?~E#oyOrRF~xNKK#e|DV_^utlLpIzM2FuLmBd(` z%=ebmg;I#t?iG-84gCh0Wp50VQ6^ioLS3KeYdCylarB!A5`1M^28V`L_Y=h5F?rMd zdtTEM9-BO2!+*d9rXRQvH)y%QfFgVed4mjbiTbs`WRFilZkAzQ*e7dOUs{qhgrQ%r zUq1d~Us671qf5&m-z6CO5-F(nFn9a_)LqV4vTeY2q~psh)k4A@@N%hFbOcO%K`a7G z;sL^EMa60bgY-sl2Q*mN7m@rpWHACI`>6ACbT&9XH=QdfbwL|?r%SXnmqDHLhixMN zn1Qoo>kXamjs|5`^J+o_)s&Znb$LZ^F9revzR$LV&Ny?5REA}shb%POZI&-*?lPBr z$EnIM6CpJ;*`}X)e;*~QnCbJtOiOyNXN`?|kki;Y5tsB`1bs=U{@6XBQNa}u6TO6)c| z49nEyW^#BY^sM)nkgl#{^ehgv(sgp}o#wiiP8qCY1N@Uv-(FA4>723Zn66mgA(ZS> zSL^^B9h5k6LqpRKR!c9^YkW+MH*{Pahm$j9^ODB$_b`pz@;JiC_ctU2G!uB5H_L?c z$X&LU!4V@lcRN-}-=0DWDeow2w$<5@JMHvK3da@UHb}-Ng>H}*KY;yz=bQQe^8LR( z-~Yadc>WRcR7BVt11tc4{0K>h>r04+0s%?F|5=*-CH6!3M`duRwqk|P`oc?e-K*-z z!)$^=OMxyug+)zoUxjsUj4(aSZhP8^cTT3cMS5X_jI4*xjbEVU#M@gu6#{J|Gh5#n z!Q>H4XTj-%on7{!ijTLlvYV0D-TnRjjoC`Cq!UTt_mJp#AYG+v+xkniTX&(2tglNr z7bC1ZWSEhnNvBD5Ez~i~`QI*AnuBMQ#7KN~J!ogF2jLSWz9c5*A$O~0Y{Q1=Sq=&N zW446qnvk7VSi0BK)#?aLkXmM_aA zJW1X$L+Vj8uF7pK5&2wvz~J+p(afd8vIiMzGx7|jTcJ~Eur!It%H)0>O&F%)OV~VF@;n1;ZIxPcKcLiFyoK`rcUORVw z#2Ab3yG@2;p+e=9rn}F>K-$o-W3!f3L5*q-lmU^M-IWNSzM=YH74h@>zTK6&TkfQq z!wHnZX{p`Sa=@19a4){xXX6(3pf5;=fQ zwt3tiz`EWaoUXMN23>k`w0J$9EMF!j)>^{@`EAxpE8kvkgf;J6QtGt1Ua4_vW1Y5p zUanq`W+sBa^fN?jy}CQKk|k<)zBnDUB24UHhakjS1II%RsfYou8zdbY#_3B)L+IUA zK@gBi$K-&RC(mo9vG<-SNJ?0n?_ph*2JOv7aCWg>h^Z$E4ap%-tMrcnU))NoZ=_=F zz#J~sUF#%68b}TkNBtOf>WO=d6iG1SNC~SnOiM+u;3Tjf+}LehX3h6LCpu%p%|G7Q zDNF%au`q?Lc~&j(k;+tG-82@IfXjzPqfVIgWUx-k$huxX^)R()SS|TWs=VWQQmpLzb4UzSdEf;JA3)n83t;3DR1B;xEDodGBYAe53OKFg z_1IjV2CPCMzKAgd%`u|L>G|*h)@l9YTY$clRDw_JkYB|tE`>7ewTA$5S9IBR0x&hkcH!32v16LL%goBLFx%^c{j)L*!Gte}A&2$S+XQsx zEx`EdwiG5?<&@zRl25# z5i3sk2*G}^)@JF>uVW>2^#aJII(Q&eCkVc;9~O0V7DhG#Mx=$u&@dRyhmVI+SSuL5 z!dA%1T1aImHO-b8DmN8k79L+qEG?5ZANi_#rpbykR1TYt=<5kn)&f`PHHK9T^|t=D<088g4NqK^ZpAKWO&l!#?4e&BR%swNfCE3baykN$NdTM}1tSKjN)^ z+?>JnQ0lN0BRgz~^{w6^Z()@pG}_B)io|S0MCOD*kT6!tSC6&?L#`@t@k+UI;?)!0 zx>vwF5bmZ5@(spQDt-K{ga*eN%iMZ9|VbWy{%(z7b&oIGZQ z*sJP}-AdAyt~!iWAf45B+Ew}ev}Ob%?NkNhLd9&OH2F&V&@m@=rOv36LMAJPBa_LS zZ*kh6P1>=SfXR!zYxvkjBa3|YcQj(v=EsP$?jd*d3kNtKjq%T!@(*p79rd09-BF$!*PPE;Fy3?AwG zLJeT|s$LAZMOA0X;*^k2itA?Nh*9)1?1CP8px3RBe@?*CdT0iovj7Y5K$S`Do%dcX zKnW|)5Gm2HP+o^tl7n`CurGGfvD%Q1!^5v6UgEWVhjXCOA7 zpIjchbf|yyQ$c`s*oCD`=tq#DF9K^rB!l@kN4{VECj*$xIj7N(u?29FIVw_-#2g4B zlvfA7f01VoJ?N-i^}}dycd&&Z#YBesOqIfFyOP$7?0XbavL>M{MSP)E7*)oxQ?)^= zm`DO0k(?mC#4>Eyx?ECPU|2*^19;mucY5=^8qseDijZ;|hcXl|ExTR(+YEnu@yDS+ z!v-bD<_7nBhPUE(R=zih^Tze+1=*#uhQ&}}(Tim1 ze!>aK;ccS`H&J68%Ly50i7$|!!Gnm-X+n4JP5Uf+)5wI)nDL5)&!s|2UdJU3eU#JC z=0&;{ypvl7u1#aW`ckddB?V3G3Vt5uA|LskbH{;vHzDu*fsotQ4jrvhpOttc1yRGt zrV6`NL<{5wxkF-GS7Y!7Xd;UmGgqD@lf;AeQL}e@ganP0SUbS^eo6)(&-us+2yH@X_9n7=N;Y#^TNAL!_D!Nnlj)1BaTD zxB?@kYOsaOC4gaLzMALml7k9{H#gQT1J}O2T8G{dJ1uH(i6BjHoTofW*(>ZMFfDewV8+Rk+rs>ge%?A4*^n%bAY+JN78E2rTf->pr z+z;gTa^WH7>RP@v-1(7jSH(2oHp#9W29c8amD8Qpa8|y*Z+sT!QO@oEmh1U%ru=ZBhFyxGz4vFlrnG|Kqe&)An zr0&9S8Y!44Ofiq@27xrn!O6?2szjhRRH?8PQKnI(?p^(i?WdU#KD4(_e84$QSD#`a z?X~*!nuS23m=-EEFG@zjiCk5VkCHNc_eI2TIZGg8Y$R7AWEiAa+0i9|wWemxFkEQ{ ztbf2ZR{VwKT8@NE_iQj03{B>u@!mTZ(ixu^bpUlg1~I|%JLY+*<(-6K{64Yr8nK$S z3Uk|9v5J&fR>$*n^IqoWlb!3VL8~rFpx?}Lgedr7WAj}x*f^PpM?|`V(2niY`xa2W zttoJ?t(Or&{)EEjgBwPp1+vQt#e=t`zyQ)c2tAH=##apYmvN`HnI1aVdL(`{a0#7J zB0~el12cJuCU@6HlU|FdcMtY=7vtAJA{no5#SrPpuoMH%^T9G1`_dy8Jq0p4JTF$f z(!{bn!z4QNPm>!c(2Ox8$xpJ2)C7UZN3HG;x_5&*Xsh4EpW;%M6K4mu@w$LfJ>AheNk$ zsyO7wM7Xny5U+DRiYg%unl42cl?@0_nM`-EF{vZoWO?9Z5&fq8!3zxUSyD?B!fMPP%X|xJxE-tQm6Fcw%D+CEA6V zqNj9~l1Bt~AI4&SLT*NVYCLir5N`j`4M38RSaEZrZMH*-f7)iU1bR`IdbO88l8 z=DUbY2PBhHowLmHl&^y7`4HrlXkPdjVG~nDr{A61+g^Hwv~rEoovohGQujq=7G9ov z;J)BSE#hduJ^wJ8Q9!~Ip!-IYI5vdVKb{y~tV&H6h7~?q`WpGIaVHyyWcr6{Kep~T z1P~0CxVf2eL+7^6GQlw^3L0uH`wXj1QEtPH4+H-wX42rU``N- zd6;0Xat)vy{*=bV=*aU3qp}C2v%(38U_giKp4`}dLFr0S zyD?$rF+$XXgIg3I#52I(j%09RTFM?iF)xSrOWQ@V2sAPyfKDFC)iow^SknV@&*3Ck z0B^tfp2cmOtFimRBDw96&65FSop9w_q#ZEI8vW^t7yg?bfhLPv4p(k}Bbn7o7Pz#A zySUc$g2rYe6MQ;AVZGjtqepky@qy)3#K_1|1%M`H;+lGj`J&lyCQ^B$%PJKyU3)d? zfq4F)vzGBeclF{RtliS^%h2ZKa8`_2HoOyLb#3)2`)+;1kUQ}fDbq}c`Po~?9IS%& z=7xK(-^<17T5F^aPi;?oNDz?cQS4K{!_HXG7GR)gZ);*{^rLDFh#!{d=KDE#HLQ$N zk&hwMg5mYy>?}Co&ui}>?y3aPhsG6z454AyG-Z<=yhJT0}NHcN}-iyP& zsXbsmwc1i2%2>)4d|Y##C0wM`;5+8j=#IFbR4=gpMb!`Gh}~w6tNM;V;5mB6|sJJg}Vz@Wd{>puV zF_Txm+t2VVxqSZ(F}YuPZ@Q6<1A=3ofp?{&;P&H@J5Auj`4IO7wF~sD*u=gp>;U%# zzY8=@9)z{AOAs&BvD~Qs41H=b!VNDs5h7IF3zKM$7VP7~ICmP$CRX8sncQGnOn9Df zv1%2z!L2m4*g*!#Qm<0u5S>U-zY#CY!S;f4@ZS@u`0mva-%}zvpN6`~zvf!+t*p#` zv@v5OC4UajA72_+F{kqu&2n4WqL?H)lvKoOU+(~K&zF2-Q5sP-)xaU|efVa+9uAk(Kb!y#eTX~!ec2eB z$n~>L`OXecl(Oxk%>Vb8gxZw03kmH+t3hjt}7DqwkarA=~HW_0Vm+A z_2w7-xQZol<8GG>^$7`5^IK|RbGVe(Sh$9>quP8&slnA-lh?GTvyi#)U}{T}Qrl;A z0nB|plg<33s<-()T~<9Ds1;M!0eJiTOV{lR8*||J`}}Wq7ad;JDcLAnyb+f*de4>q zwe_)G=d~B;bFlw?Gx4ce2%=*PF#mJV=*HpL^7!=G%2Pt%|B|79mMo7QmFQtW={tU6 zGHkU;J7J>E*}o<^kT&q}PLg^Yqd<>UJ8Wy^m#3X-f{seQ-b!6@H)zIRBGzUsh-~q7 zkoV=Y`s~;yf8y?}y5uWX);bODqGa6#(Y$x|{?^}bizj}bo-9VoU15wVh?_djWPDdi zjxUp&Rk)Dztv;zATdSp<<-nOpUnZfPG*9m`O|V-tlnqBf%e9qN$^OXdo8(-ITKQ{K<3nAIX@2J)4OxysSE6wr6yuPX9TU|7gtqyKoX;9pTmX>K7;pkd;+SUV$YM_f9~=h(QS3EgXLpjIiOL?rJ^UWa#rj=)!|Oo`Aau6_^NZ_X5w2&t^NZ5|wo5uee4`NFY@Qf!h8yAgU5 z{N*x;?XSlqn z?7*%7_Xm^nYG$*Z^YN}F!X_iDKsteWj}nuWZxu03?Np0nqK{oZchkT_uiMpA8zRpq z*aii|`0=j&NqhP;OHYXc0R*E3z~dHs#q^}D}6xn0k~KmAeuUF{!CuRlZdCt>NAcJ$Ns{>$k< z=}UjA|4Fy`rH=XpCco7GBH#SChknxd$9jHfK8PPk^xqVIj}jrt-=OQy8~qdGo*n&+ zlJMWv{sr;=wDV_C_sdQi!4LQUQsVt-;mI z{~Wyi@>uqFwO?bnKMnj@0R1umAo}6=?_v9IH~q{Y`njGntoJj+zwwEF-`jsOik@|U zW-a1hbbs-S{=EG^`3JwO;Bs>AeQ}F-x96zl5m~qQVLOxe9 SPcI2{khrINenI~H-~R)L7lZl$ diff --git a/src/test/resources/converter/converterCsv.csv b/src/test/resources/converter/converterCsv.csv index c61f06ca..01bcf2ef 100644 --- a/src/test/resources/converter/converterCsv.csv +++ b/src/test/resources/converter/converterCsv.csv @@ -1,2 +1,2 @@ -大数的布尔(不支持),大数的数字,大数的字符串,布尔的布尔,布尔的数字(不支持),布尔的字符串,字节的布尔(不支持),字节的数字,字节的字符串,日期的数字,日期的字符串,双精度浮点的布尔(不支持),双精度浮点的数字,双精度浮点的字符串,浮点的布尔(不支持),浮点的数字,浮点的字符串,整型的布尔(不支持),整型的数字,整型的字符串,长整型的布尔(不支持),长整型的数字,长整型的字符串,短整型的布尔(不支持),短整型的数字,短整型的字符串,字符串的布尔,字符串的数字,字符串的字符串,字符串的错误,字符串的数字公式,字符串的字符串公式,字符串的数字日期 -1,1,1,TRUE,TRUE,TRUE,1,1,1,2020-01-01 01:01:01,2020-01-01 01:01:01,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,TRUE,1,测试,#VALUE!,2,1测试,2020-01-01 01:01:01 \ No newline at end of file +大数的布尔(不支持),大数的数字,大数的字符串,大整数的布尔(不支持),大整数的数字,大整数的字符串,布尔的布尔,布尔的数字(不支持),布尔的字符串,字节的布尔(不支持),字节的数字,字节的字符串,日期的数字,日期的字符串,本地日期的数字,本地日期的字符串,双精度浮点的布尔(不支持),双精度浮点的数字,双精度浮点的字符串,浮点的布尔(不支持),浮点的数字,浮点的字符串,整型的布尔(不支持),整型的数字,整型的字符串,长整型的布尔(不支持),长整型的数字,长整型的字符串,短整型的布尔(不支持),短整型的数字,短整型的字符串,字符串的布尔,字符串的数字,字符串的字符串,字符串的错误,字符串的数字公式,字符串的字符串公式,字符串的数字日期 +1,1,1,1,1,1,TRUE,TRUE,TRUE,1,1,1,2020-01-01 01:01:01,2020-01-01 01:01:01,2020-01-01 01:01:01,2020-01-01 01:01:01,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,TRUE,1,测试,#VALUE!,2,1测试,2020-01-01 01:01:01 \ No newline at end of file