From 14ea8ef69ec145a6d89095534cce76c0baba0301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda=20Mohedano?= Date: Fri, 15 Jul 2022 09:06:36 +0200 Subject: [PATCH 01/59] 93 upgrade gradle version (#94) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Upgrade gradle version to 7.4 * Change deprecated configurations in build.gradle files * Correction of indentation Co-authored-by: Álvaro Moraleda --- build.gradle | 24 +++++----- gradle/wrapper/gradle-wrapper.properties | 2 +- jfleet-core/build.gradle | 58 ++++++++++++------------ jfleet-samples/build.gradle | 8 ++-- 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/build.gradle b/build.gradle index c5e4423..2ac3b2f 100644 --- a/build.gradle +++ b/build.gradle @@ -1,17 +1,17 @@ plugins { - id "com.github.hierynomus.license" version "0.15.0" + id "com.github.hierynomus.license" version "0.15.0" } allprojects { - apply plugin: 'license' - license { - header rootProject.file("config/HEADER") - exclude "**/*.properties" - exclude "**/*.txt" - exclude "**/ReaderInputStream.java" - } - - repositories { - jcenter() - } + apply plugin: 'license' + license { + header rootProject.file("config/HEADER") + exclude "**/*.properties" + exclude "**/*.txt" + exclude "**/ReaderInputStream.java" + } + + repositories { + mavenCentral() + } } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4d9ca16..41dfb87 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/jfleet-core/build.gradle b/jfleet-core/build.gradle index 0b6c5c8..234df91 100644 --- a/jfleet-core/build.gradle +++ b/jfleet-core/build.gradle @@ -7,36 +7,36 @@ apply plugin: 'java' apply plugin: 'jacoco' apply plugin: 'checkstyle' -compileJava { - sourceCompatibility = '1.8' - targetCompatibility = '1.8' +compileJava { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' } dependencies { - compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' - compileOnly group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' - if (project.hasProperty("mysql8")) { - compileOnly project(':jfleet-mock-mysql5') - compileOnly group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' - } else { - compileOnly group: 'mysql', name: 'mysql-connector-java', version: '5.1.49' - compileOnly project(':jfleet-mock-mysql8') - } + implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' + compileOnly group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' + if (project.hasProperty("mysql8")) { + compileOnly project(':jfleet-mock-mysql5') + compileOnly group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' + } else { + compileOnly group: 'mysql', name: 'mysql-connector-java', version: '5.1.49' + compileOnly project(':jfleet-mock-mysql8') + } compileOnly group: 'org.postgresql', name: 'postgresql', version: '42.2.7' - testCompile group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' - if (project.hasProperty("mysql8")) { - testCompile project(':jfleet-mock-mysql5') - testCompile group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' + testImplementation group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' + if (project.hasProperty("mysql8")) { + testImplementation project(':jfleet-mock-mysql5') + testImplementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.22' } else { - testCompile group: 'mysql', name: 'mysql-connector-java', version: '5.1.49' - testCompile project(':jfleet-mock-mysql8') + testImplementation group: 'mysql', name: 'mysql-connector-java', version: '5.1.49' + testImplementation project(':jfleet-mock-mysql8') } - testCompile group: 'org.postgresql', name: 'postgresql', version: '42.2.18' - testCompile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' - testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' - testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0' - testRuntime group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' + testImplementation group: 'org.postgresql', name: 'postgresql', version: '42.2.18' + testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' } test { @@ -94,7 +94,7 @@ publishing { connection 'scm:git:git://github.com/jerolba/jfleet.git' developerConnection 'scm:git:ssh://github.com:jerolba/jfleet.git' url 'https://github.com/jerolba/jfleet' - + } } } @@ -102,11 +102,11 @@ publishing { } } -if (project.hasProperty('bintrayUser')){ +if (project.hasProperty('bintrayUser')) { bintray { user = bintrayUser key = bintrayKey - publications = ['mavenJava'] + publications = ['mavenJava'] pkg { repo = 'JFleet' name = 'jfleet' @@ -115,14 +115,14 @@ if (project.hasProperty('bintrayUser')){ issueTrackerUrl = 'https://github.com/jerolba/jfleet/issues' licenses = ['Apache-2.0'] vcsUrl = 'https://github.com/jerolba/jfleet.git' - labels = ['jpa', 'jdbc', 'mysql', 'postgres','load data','copy'] + labels = ['jpa', 'jdbc', 'mysql', 'postgres', 'load data', 'copy'] version { name = '0.6.4' desc = 'Add support for MySQL 8' - released = new Date() + released = new Date() } } } -}else { +} else { println 'No bintray configuration found. Expected bintray user and API key at $HOME/.gradle/gradle.properties file.' } diff --git a/jfleet-samples/build.gradle b/jfleet-samples/build.gradle index b6cc0c7..4f1c856 100644 --- a/jfleet-samples/build.gradle +++ b/jfleet-samples/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'java' dependencies { - compile project(':jfleet-core') - compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.43' - compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' - compile group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' + implementation project(':jfleet-core') + implementation group: 'mysql', name: 'mysql-connector-java', version: '5.1.43' + implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' + implementation group: 'javax.persistence', name: 'persistence-api', version: '1.0.2' } From 2bf47cc94b98590c2ba877696df4736172c60491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 10:32:54 +0200 Subject: [PATCH 02/59] First tests and creation of the configuration --- jfleet-avro/build.gradle | 44 +++++++++++++++++++ .../org/jfleet/avro/AvroConfiguration.java | 15 +++++++ .../main/java/org/jfleet/avro/AvroWriter.java | 35 +++++++++++++++ .../java/org/jfleet/avro/AvroWriterTest.java | 32 ++++++++++++++ .../test/java/org/jfleet/avro/TestEntity.java | 19 ++++++++ settings.gradle | 1 + 6 files changed, 146 insertions(+) create mode 100644 jfleet-avro/build.gradle create mode 100644 jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java create mode 100644 jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java create mode 100644 jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java create mode 100644 jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java diff --git a/jfleet-avro/build.gradle b/jfleet-avro/build.gradle new file mode 100644 index 0000000..bbdd4c2 --- /dev/null +++ b/jfleet-avro/build.gradle @@ -0,0 +1,44 @@ +apply plugin: 'maven-publish' +apply plugin: 'java' +apply plugin: 'jacoco' +apply plugin: 'checkstyle' + +compileJava { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' +} + +dependencies { + implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30' + implementation project(':jfleet-core') + + implementation group: 'org.apache.avro', name: 'avro', version: '1.11.0' + + testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' +} + +test { + useJUnitPlatform() +} + +jacocoTestReport { + reports { + xml.enabled true + html.enabled false + } +} + +check.dependsOn jacocoTestReport + +task sourceJar(type: Jar) { + from sourceSets.main.allJava + classifier "sources" +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java new file mode 100644 index 0000000..1974f9f --- /dev/null +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java @@ -0,0 +1,15 @@ +package org.jfleet.avro; + +import org.jfleet.EntityInfo; + +public class AvroConfiguration { + private final EntityInfo entityInfo; + + public AvroConfiguration(EntityInfo entityInfo) { + this.entityInfo = entityInfo; + } + + public EntityInfo getEntityInfo() { + return entityInfo; + } +} diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java new file mode 100644 index 0000000..5095e1e --- /dev/null +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -0,0 +1,35 @@ +package org.jfleet.avro; + +import org.apache.avro.Schema; +import org.apache.avro.SchemaBuilder; +import org.jfleet.ColumnInfo; +import org.jfleet.EntityInfo; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.Collection; + +public class AvroWriter { + private AvroConfiguration avroConfiguration; + + public AvroWriter(AvroConfiguration avroConfiguration) { + this.avroConfiguration = avroConfiguration; + } + + public void writeAll(OutputStream output, Collection collection) throws IOException { + EntityInfo entityInfo = avroConfiguration.getEntityInfo(); + + SchemaBuilder.FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) + .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); + + for (ColumnInfo columnInfo : entityInfo.getColumns()) { + switch (columnInfo.getFieldType().getFieldType()) { + case STRING: + fields = fields.requiredString(columnInfo.getColumnName()); + } + } + + Schema schema = fields.endRecord(); + System.out.print(schema.toString()); + } +} diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java new file mode 100644 index 0000000..e802d5f --- /dev/null +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -0,0 +1,32 @@ +package org.jfleet.avro; + +import org.jfleet.EntityFieldType; +import org.jfleet.EntityInfo; +import org.jfleet.EntityInfoBuilder; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class AvroWriterTest { + @Test + void shouldConvertEntityInfoToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getFoo) + .addColumn("bar", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getBar) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + AvroWriter avroWriter = new AvroWriter(avroConfiguration); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + TestEntity testEntity = new TestEntity("foo", "bar"); + avroWriter.writeAll(outputStream, List.of(testEntity)); + + assertNotNull(avroWriter); + assertTrue(outputStream.size() > 0); + } +} diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java new file mode 100644 index 0000000..e83fcce --- /dev/null +++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java @@ -0,0 +1,19 @@ +package org.jfleet.avro; + +public class TestEntity { + private final String foo; + private final String bar; + + public TestEntity(String foo, String bar) { + this.foo = foo; + this.bar = bar; + } + + public String getFoo() { + return foo; + } + + public String getBar() { + return bar; + } +} diff --git a/settings.gradle b/settings.gradle index 0554813..014e42a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,5 +2,6 @@ include 'jfleet-core' include 'jfleet-samples' include 'jfleet-mock-mysql5' include 'jfleet-mock-mysql8' +include 'jfleet-avro' rootProject.name = 'jfleet' From 3b00bccb09ab2799677655705903da283e50061c Mon Sep 17 00:00:00 2001 From: David Arques Date: Fri, 15 Jul 2022 11:18:30 +0200 Subject: [PATCH 03/59] Add initial Avro writer --- .../main/java/org/jfleet/avro/AvroWriter.java | 33 +++++++++++++++---- .../java/org/jfleet/avro/AvroWriterTest.java | 17 +++++----- .../test/java/org/jfleet/avro/TestEntity.java | 16 ++++++--- 3 files changed, 47 insertions(+), 19 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index 5095e1e..78afe83 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -2,7 +2,13 @@ import org.apache.avro.Schema; import org.apache.avro.SchemaBuilder; +import org.apache.avro.file.DataFileWriter; +import org.apache.avro.generic.GenericData; +import org.apache.avro.generic.GenericDatumWriter; +import org.apache.avro.generic.GenericRecord; +import org.apache.avro.io.DatumWriter; import org.jfleet.ColumnInfo; +import org.jfleet.EntityFieldType; import org.jfleet.EntityInfo; import java.io.IOException; @@ -10,7 +16,7 @@ import java.util.Collection; public class AvroWriter { - private AvroConfiguration avroConfiguration; + private final AvroConfiguration avroConfiguration; public AvroWriter(AvroConfiguration avroConfiguration) { this.avroConfiguration = avroConfiguration; @@ -19,17 +25,32 @@ public AvroWriter(AvroConfiguration avroConfiguration) { public void writeAll(OutputStream output, Collection collection) throws IOException { EntityInfo entityInfo = avroConfiguration.getEntityInfo(); + Schema schema = buildSchema(avroConfiguration); + + DatumWriter datumWriter = new GenericDatumWriter<>(schema); + try (DataFileWriter dataFileWriter = new DataFileWriter<>(datumWriter)) { + dataFileWriter.create(schema, output); + for (T entity : collection) { + GenericRecord genericRecord = new GenericData.Record(schema); + for (ColumnInfo columnInfo : entityInfo.getColumns()) { + genericRecord.put(columnInfo.getColumnName(), columnInfo.getAccessor().apply(entity)); + } + dataFileWriter.append(genericRecord); + } + } + } + + private Schema buildSchema(AvroConfiguration avroConfiguration) { + EntityInfo entityInfo = avroConfiguration.getEntityInfo(); SchemaBuilder.FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); for (ColumnInfo columnInfo : entityInfo.getColumns()) { - switch (columnInfo.getFieldType().getFieldType()) { - case STRING: - fields = fields.requiredString(columnInfo.getColumnName()); + if (columnInfo.getFieldType().getFieldType() == EntityFieldType.FieldTypeEnum.STRING) { + fields = fields.requiredString(columnInfo.getColumnName()); } } - Schema schema = fields.endRecord(); - System.out.print(schema.toString()); + return fields.endRecord(); } } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index e802d5f..d1c79c2 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -7,26 +7,27 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.util.List; +import java.util.Arrays; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -public class AvroWriterTest { +class AvroWriterTest { @Test - void shouldConvertEntityInfoToAvro() throws IOException { + void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) .addColumn("foo", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getFoo) - .addColumn("bar", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getBar) .build(); - + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - AvroWriter avroWriter = new AvroWriter(avroConfiguration); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - TestEntity testEntity = new TestEntity("foo", "bar"); - avroWriter.writeAll(outputStream, List.of(testEntity)); + TestEntity testEntity = new TestEntity("foo", null, null); + avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); assertNotNull(avroWriter); assertTrue(outputStream.size() > 0); } + + } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java index e83fcce..3738c07 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java @@ -2,18 +2,24 @@ public class TestEntity { private final String foo; - private final String bar; + private final Double fooDouble; + private final Integer fooInt; - public TestEntity(String foo, String bar) { + public TestEntity(String foo, Double fooDouble, Integer fooInt) { this.foo = foo; - this.bar = bar; + this.fooDouble = fooDouble; + this.fooInt = fooInt; } public String getFoo() { return foo; } - public String getBar() { - return bar; + public Double getFooDouble() { + return fooDouble; + } + + public Integer getFooInt() { + return fooInt; } } From 5acb02b6cc7bcac8512660cd1df2ffb8c6527e11 Mon Sep 17 00:00:00 2001 From: David Arques Date: Fri, 15 Jul 2022 11:46:10 +0200 Subject: [PATCH 04/59] Check avro file with string type --- .../java/org/jfleet/avro/AvroWriterTest.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index d1c79c2..bac4883 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -1,16 +1,24 @@ package org.jfleet.avro; +import org.apache.avro.Schema; +import org.apache.avro.SchemaBuilder; +import org.apache.avro.file.DataFileReader; +import org.apache.avro.generic.GenericDatumReader; +import org.apache.avro.generic.GenericRecord; +import org.apache.avro.io.DatumReader; +import org.apache.avro.util.Utf8; import org.jfleet.EntityFieldType; import org.jfleet.EntityInfo; import org.jfleet.EntityInfoBuilder; import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; class AvroWriterTest { @Test @@ -27,7 +35,19 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { assertNotNull(avroWriter); assertTrue(outputStream.size() > 0); - } + try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { + fos.write(outputStream.toByteArray()); + } + + Schema schema = SchemaBuilder.record("TestEntity").namespace("org.jfleet.avro") + .fields().requiredString("foo").endRecord(); + DatumReader datumReader = new GenericDatumReader<>(schema); + try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(new Utf8("foo"), genericRecord.get("foo")); + } + } } From 1f4d7147f67c4f4e5f005b7dc21bfee8d1205c97 Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Fri, 15 Jul 2022 12:41:54 +0200 Subject: [PATCH 05/59] Allow null or string values in schema generation --- .../main/java/org/jfleet/avro/AvroWriter.java | 7 ++-- .../java/org/jfleet/avro/AvroWriterTest.java | 34 ++++++++++++++++++- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index 78afe83..b20cbca 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -33,7 +33,10 @@ public void writeAll(OutputStream output, Collection collection) throws IOExc for (T entity : collection) { GenericRecord genericRecord = new GenericData.Record(schema); for (ColumnInfo columnInfo : entityInfo.getColumns()) { - genericRecord.put(columnInfo.getColumnName(), columnInfo.getAccessor().apply(entity)); + Object accessor = columnInfo.getAccessor().apply(entity); + if (accessor != null) { + genericRecord.put(columnInfo.getColumnName(), accessor); + } } dataFileWriter.append(genericRecord); } @@ -47,7 +50,7 @@ private Schema buildSchema(AvroConfiguration avroConfiguration) { for (ColumnInfo columnInfo : entityInfo.getColumns()) { if (columnInfo.getFieldType().getFieldType() == EntityFieldType.FieldTypeEnum.STRING) { - fields = fields.requiredString(columnInfo.getColumnName()); + fields = fields.name(columnInfo.getColumnName()).type().unionOf().stringType().and().nullType().endUnion().noDefault(); } } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index bac4883..388bef6 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -41,7 +41,8 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { } Schema schema = SchemaBuilder.record("TestEntity").namespace("org.jfleet.avro") - .fields().requiredString("foo").endRecord(); + .fields().name("foo").type().unionOf().stringType().and().nullType().endUnion().noDefault() + .endRecord(); DatumReader datumReader = new GenericDatumReader<>(schema); try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { @@ -50,4 +51,35 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { assertEquals(new Utf8("foo"), genericRecord.get("foo")); } } + + @Test + void shouldConvertEntityInfoWithNullStringType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getFoo) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + TestEntity testEntity = new TestEntity(null, null, null); + avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); + + assertNotNull(avroWriter); + assertTrue(outputStream.size() > 0); + + try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { + fos.write(outputStream.toByteArray()); + } + + Schema schema = SchemaBuilder.record("TestEntity").namespace("org.jfleet.avro") + .fields().name("foo").type().unionOf().stringType().and().nullType().endUnion().noDefault() + .endRecord(); + DatumReader datumReader = new GenericDatumReader<>(schema); + + try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); + } + } } From 26698593465d563ede8dd497265581bdc99fa4ad Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Fri, 15 Jul 2022 13:43:32 +0200 Subject: [PATCH 06/59] Add support to all Avro numeric types and throw exception in unsupported types --- .../main/java/org/jfleet/avro/AvroWriter.java | 44 ++++++- .../jfleet/avro/UnsupportedTypeException.java | 7 + .../java/org/jfleet/avro/AvroWriterTest.java | 120 +++++++++++++++--- .../test/java/org/jfleet/avro/TestEntity.java | 73 +++++++++-- 4 files changed, 213 insertions(+), 31 deletions(-) create mode 100644 jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index b20cbca..b090a3b 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -8,7 +8,7 @@ import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumWriter; import org.jfleet.ColumnInfo; -import org.jfleet.EntityFieldType; +import org.jfleet.EntityFieldType.FieldTypeEnum; import org.jfleet.EntityInfo; import java.io.IOException; @@ -33,9 +33,10 @@ public void writeAll(OutputStream output, Collection collection) throws IOExc for (T entity : collection) { GenericRecord genericRecord = new GenericData.Record(schema); for (ColumnInfo columnInfo : entityInfo.getColumns()) { - Object accessor = columnInfo.getAccessor().apply(entity); - if (accessor != null) { - genericRecord.put(columnInfo.getColumnName(), accessor); + Object value = columnInfo.getAccessor().apply(entity); + if (value != null) { + value = extractValue(columnInfo, value); + genericRecord.put(columnInfo.getColumnName(), value); } } dataFileWriter.append(genericRecord); @@ -43,14 +44,45 @@ public void writeAll(OutputStream output, Collection collection) throws IOExc } } + private Object extractValue(ColumnInfo columnInfo, Object value) { + FieldTypeEnum fieldType = columnInfo.getFieldType().getFieldType(); + if (fieldType == FieldTypeEnum.BYTE) { + value = ((Byte) value).intValue(); + } else if (fieldType == FieldTypeEnum.SHORT) { + value = ((Short) value).intValue(); + } + return value; + } + private Schema buildSchema(AvroConfiguration avroConfiguration) { EntityInfo entityInfo = avroConfiguration.getEntityInfo(); SchemaBuilder.FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); for (ColumnInfo columnInfo : entityInfo.getColumns()) { - if (columnInfo.getFieldType().getFieldType() == EntityFieldType.FieldTypeEnum.STRING) { - fields = fields.name(columnInfo.getColumnName()).type().unionOf().stringType().and().nullType().endUnion().noDefault(); + switch (columnInfo.getFieldType().getFieldType()) { + case STRING: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().stringType().and().nullType().endUnion().noDefault(); + break; + case INT: + case SHORT: + case BYTE: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); + break; + case DOUBLE: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().doubleType().and().nullType().endUnion().noDefault(); + break; + case LONG: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().longType().and().nullType().endUnion().noDefault(); + break; + case FLOAT: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().floatType().and().nullType().endUnion().noDefault(); + break; + case BOOLEAN: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().booleanType().and().nullType().endUnion().noDefault(); + break; + default: + throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType())); } } diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java b/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java new file mode 100644 index 0000000..75c5204 --- /dev/null +++ b/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java @@ -0,0 +1,7 @@ +package org.jfleet.avro; + +public class UnsupportedTypeException extends RuntimeException{ + public UnsupportedTypeException(String message) { + super(message); + } +} diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 388bef6..6fb9ac1 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -1,21 +1,21 @@ package org.jfleet.avro; -import org.apache.avro.Schema; -import org.apache.avro.SchemaBuilder; import org.apache.avro.file.DataFileReader; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumReader; import org.apache.avro.util.Utf8; -import org.jfleet.EntityFieldType; +import org.jfleet.EntityFieldType.FieldTypeEnum; import org.jfleet.EntityInfo; import org.jfleet.EntityInfoBuilder; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.math.BigDecimal; import java.util.Arrays; import static org.junit.jupiter.api.Assertions.*; @@ -24,13 +24,14 @@ class AvroWriterTest { @Test void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getFoo) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) .build(); AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - TestEntity testEntity = new TestEntity("foo", null, null); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); assertNotNull(avroWriter); @@ -40,10 +41,7 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { fos.write(outputStream.toByteArray()); } - Schema schema = SchemaBuilder.record("TestEntity").namespace("org.jfleet.avro") - .fields().name("foo").type().unionOf().stringType().and().nullType().endUnion().noDefault() - .endRecord(); - DatumReader datumReader = new GenericDatumReader<>(schema); + DatumReader datumReader = new GenericDatumReader<>(); try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { assertTrue(dataFileReader.hasNext()); @@ -55,13 +53,13 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { @Test void shouldConvertEntityInfoWithNullStringType() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", EntityFieldType.FieldTypeEnum.STRING, TestEntity::getFoo) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) .build(); AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - TestEntity testEntity = new TestEntity(null, null, null); + TestEntity testEntity = new TestEntity(); avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); assertNotNull(avroWriter); @@ -71,10 +69,7 @@ void shouldConvertEntityInfoWithNullStringType() throws IOException { fos.write(outputStream.toByteArray()); } - Schema schema = SchemaBuilder.record("TestEntity").namespace("org.jfleet.avro") - .fields().name("foo").type().unionOf().stringType().and().nullType().endUnion().noDefault() - .endRecord(); - DatumReader datumReader = new GenericDatumReader<>(schema); + DatumReader datumReader = new GenericDatumReader<>(); try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { assertTrue(dataFileReader.hasNext()); @@ -82,4 +77,99 @@ void shouldConvertEntityInfoWithNullStringType() throws IOException { assertNull(genericRecord.get("foo")); } } + + @Test + void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); + + assertNotNull(avroWriter); + assertTrue(outputStream.size() > 0); + + try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { + fos.write(outputStream.toByteArray()); + } + + DatumReader datumReader = new GenericDatumReader<>(); + + try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + TestEntity testEntity = new TestEntity(); + avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); + + assertNotNull(avroWriter); + assertTrue(outputStream.size() > 0); + + try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { + fos.write(outputStream.toByteArray()); + } + + DatumReader datumReader = new GenericDatumReader<>(); + + try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("fooInt")); + assertNull(genericRecord.get("fooShort")); + assertNull(genericRecord.get("fooByte")); + assertNull(genericRecord.get("fooDouble")); + assertNull(genericRecord.get("fooLong")); + assertNull(genericRecord.get("fooFloat")); + } + } + + @Test + void shouldThrowUnsupportedTypeException() { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + TestEntity testEntity = new TestEntity(); + assertThrows(UnsupportedTypeException.class, () -> avroWriter.writeAll(outputStream, Arrays.asList(testEntity))); + } } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java index 3738c07..732c439 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java @@ -1,25 +1,78 @@ package org.jfleet.avro; public class TestEntity { - private final String foo; - private final Double fooDouble; - private final Integer fooInt; + private String fooString; + private Integer fooInt; + private Short fooShort; + private Byte fooByte; + private Double fooDouble; + private Long fooLong; + private Float fooFloat; + private Boolean fooBoolean; - public TestEntity(String foo, Double fooDouble, Integer fooInt) { - this.foo = foo; - this.fooDouble = fooDouble; + + + public String getFooString() { + return fooString; + } + + public void setFooString(String fooString) { + this.fooString = fooString; + } + + public Integer getFooInt() { + return fooInt; + } + + public void setFooInt(Integer fooInt) { this.fooInt = fooInt; } - public String getFoo() { - return foo; + public Short getFooShort() { + return fooShort; + } + + public void setFooShort(Short fooShort) { + this.fooShort = fooShort; + } + + public Byte getFooByte() { + return fooByte; + } + + public void setFooByte(Byte fooByte) { + this.fooByte = fooByte; } public Double getFooDouble() { return fooDouble; } - public Integer getFooInt() { - return fooInt; + public void setFooDouble(Double fooDouble) { + this.fooDouble = fooDouble; + } + + public Long getFooLong() { + return fooLong; + } + + public void setFooLong(Long fooLong) { + this.fooLong = fooLong; + } + + public Float getFooFloat() { + return fooFloat; + } + + public void setFooFloat(Float fooFloat) { + this.fooFloat = fooFloat; + } + + public Boolean getFooBoolean() { + return fooBoolean; + } + + public void setFooBoolean(Boolean fooBoolean) { + this.fooBoolean = fooBoolean; } } From 24ae9c9ee4daeaa5fb858e8f89d1d5b7b39670ca Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Fri, 15 Jul 2022 13:44:35 +0200 Subject: [PATCH 07/59] Add support to all Avro numeric types and throw exception in unsupported types --- .../src/main/java/org/jfleet/avro/UnsupportedTypeException.java | 2 +- jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java | 1 - jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java b/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java index 75c5204..a4eda05 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java @@ -1,6 +1,6 @@ package org.jfleet.avro; -public class UnsupportedTypeException extends RuntimeException{ +public class UnsupportedTypeException extends RuntimeException { public UnsupportedTypeException(String message) { super(message); } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 6fb9ac1..1469cfa 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -8,7 +8,6 @@ import org.jfleet.EntityFieldType.FieldTypeEnum; import org.jfleet.EntityInfo; import org.jfleet.EntityInfoBuilder; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java index 732c439..2044abb 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java @@ -11,7 +11,6 @@ public class TestEntity { private Boolean fooBoolean; - public String getFooString() { return fooString; } From f02f1fe0386c6d7421ae098eca462eb3a6c11dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 15:27:32 +0200 Subject: [PATCH 08/59] Refactoring test to improve readability --- .../java/org/jfleet/avro/AvroWriterTest.java | 101 +++++++++--------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 1469cfa..38a9140 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -21,59 +21,65 @@ class AvroWriterTest { @Test - void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { + void shouldFillOutputStream() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) .build(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - TestEntity testEntity = new TestEntity(); - testEntity.setFooString("foo"); - avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); - assertNotNull(avroWriter); + avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); assertTrue(outputStream.size() > 0); + } - try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { - fos.write(outputStream.toByteArray()); - } - - DatumReader datumReader = new GenericDatumReader<>(); + @Test + void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); - try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { assertTrue(dataFileReader.hasNext()); GenericRecord genericRecord = dataFileReader.next(); assertEquals(new Utf8("foo"), genericRecord.get("foo")); } } + @Test void shouldConvertEntityInfoWithNullStringType() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) .build(); - AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); TestEntity testEntity = new TestEntity(); - avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); - assertNotNull(avroWriter); - assertTrue(outputStream.size() > 0); - - try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { - fos.write(outputStream.toByteArray()); + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); } + } - DatumReader datumReader = new GenericDatumReader<>(); + @Test + void shouldConvertEntityInfoWithBooleanType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); - try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { assertTrue(dataFileReader.hasNext()); GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("foo")); + assertTrue((Boolean) genericRecord.get("fooBoolean")); } } @@ -88,9 +94,7 @@ void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) .build(); - AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + TestEntity testEntity = new TestEntity(); testEntity.setFooInt(1); testEntity.setFooShort((short) 2); @@ -98,18 +102,8 @@ void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { testEntity.setFooDouble(10.2); testEntity.setFooLong(100L); testEntity.setFooFloat(50.1F); - avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); - - assertNotNull(avroWriter); - assertTrue(outputStream.size() > 0); - - try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { - fos.write(outputStream.toByteArray()); - } - - DatumReader datumReader = new GenericDatumReader<>(); - try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { assertTrue(dataFileReader.hasNext()); GenericRecord genericRecord = dataFileReader.next(); assertEquals(1, genericRecord.get("fooInt")); @@ -132,22 +126,11 @@ void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) .build(); - AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - TestEntity testEntity = new TestEntity(); - avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); - - assertNotNull(avroWriter); - assertTrue(outputStream.size() > 0); - try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { - fos.write(outputStream.toByteArray()); - } - - DatumReader datumReader = new GenericDatumReader<>(); + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - try (DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader)) { assertTrue(dataFileReader.hasNext()); GenericRecord genericRecord = dataFileReader.next(); assertNull(genericRecord.get("fooInt")); @@ -171,4 +154,20 @@ void shouldThrowUnsupportedTypeException() { TestEntity testEntity = new TestEntity(); assertThrows(UnsupportedTypeException.class, () -> avroWriter.writeAll(outputStream, Arrays.asList(testEntity))); } + + private DataFileReader serializeAndRead(EntityInfo entityInfo, TestEntity testEntity) throws IOException { + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); + + try (FileOutputStream fos = new FileOutputStream("/tmp/foo.avro")) { + fos.write(outputStream.toByteArray()); + } + + DatumReader datumReader = new GenericDatumReader<>(); + DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader); + return dataFileReader; + } } From 8f06f01829483b73759ac56bef8aca01648d6152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 15:49:44 +0200 Subject: [PATCH 09/59] Support for enums types --- .../main/java/org/jfleet/avro/AvroWriter.java | 8 +++- .../java/org/jfleet/avro/AvroWriterTest.java | 48 +++++++++++++++++-- .../org/jfleet/avro/TestEntityWithEnum.java | 26 ++++++++++ 3 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index b090a3b..a7f912d 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -50,6 +50,10 @@ private Object extractValue(ColumnInfo columnInfo, Object value) { value = ((Byte) value).intValue(); } else if (fieldType == FieldTypeEnum.SHORT) { value = ((Short) value).intValue(); + } else if (fieldType == FieldTypeEnum.ENUMSTRING) { + value = ((Enum) value).name(); + } else if (fieldType == FieldTypeEnum.ENUMORDINAL) { + value = ((Enum) value).ordinal(); } return value; } @@ -62,11 +66,13 @@ private Schema buildSchema(AvroConfiguration avroConfiguration) { for (ColumnInfo columnInfo : entityInfo.getColumns()) { switch (columnInfo.getFieldType().getFieldType()) { case STRING: + case ENUMSTRING: fields = fields.name(columnInfo.getColumnName()).type().unionOf().stringType().and().nullType().endUnion().noDefault(); break; case INT: case SHORT: case BYTE: + case ENUMORDINAL: fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); break; case DOUBLE: @@ -82,7 +88,7 @@ private Schema buildSchema(AvroConfiguration avroConfiguration) { fields = fields.name(columnInfo.getColumnName()).type().unionOf().booleanType().and().nullType().endUnion().noDefault(); break; default: - throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType())); + throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); } } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 38a9140..922901e 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -17,6 +17,8 @@ import java.math.BigDecimal; import java.util.Arrays; +import static org.jfleet.avro.TestEntityWithEnum.WeekDays.FRIDAY; +import static org.jfleet.avro.TestEntityWithEnum.WeekDays.SATURDAY; import static org.junit.jupiter.api.Assertions.*; class AvroWriterTest { @@ -128,7 +130,7 @@ void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { TestEntity testEntity = new TestEntity(); - + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { assertTrue(dataFileReader.hasNext()); @@ -155,9 +157,49 @@ void shouldThrowUnsupportedTypeException() { assertThrows(UnsupportedTypeException.class, () -> avroWriter.writeAll(outputStream, Arrays.asList(testEntity))); } - private DataFileReader serializeAndRead(EntityInfo entityInfo, TestEntity testEntity) throws IOException { + @Test + void shouldConvertEnumTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + testEntityWithEnum.setFoo(FRIDAY); + testEntityWithEnum.setBar(SATURDAY); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(4, genericRecord.get("foo")); + assertEquals(new Utf8("SATURDAY"), genericRecord.get("bar")); + } + } + + @Test + void shouldConvertNullableEnumTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); + assertNull(genericRecord.get("bar")); + } + } + + private DataFileReader serializeAndRead(EntityInfo entityInfo, T testEntity) throws IOException { AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); + AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); avroWriter.writeAll(outputStream, Arrays.asList(testEntity)); diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java new file mode 100644 index 0000000..e50ce5b --- /dev/null +++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java @@ -0,0 +1,26 @@ +package org.jfleet.avro; + +public class TestEntityWithEnum { + private WeekDays foo; + private WeekDays bar; + + public WeekDays getFoo() { + return foo; + } + + public void setFoo(WeekDays foo) { + this.foo = foo; + } + + public WeekDays getBar() { + return bar; + } + + public void setBar(WeekDays bar) { + this.bar = bar; + } + + public enum WeekDays { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY + } +} From d523dc7faa4168dbf1c6b8d05ffc4e29d0bbda42 Mon Sep 17 00:00:00 2001 From: David Arques Date: Fri, 15 Jul 2022 15:56:35 +0200 Subject: [PATCH 10/59] Add null boolean test --- .../java/org/jfleet/avro/AvroWriterTest.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 922901e..7cc2058 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -85,6 +85,21 @@ void shouldConvertEntityInfoWithBooleanType() throws IOException { } } + @Test + void shouldConvertEntityInfoWithNullBoolean() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("fooBoolean")); + } + } + @Test void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) @@ -209,7 +224,6 @@ private DataFileReader serializeAndRead(EntityInfo entityInfo } DatumReader datumReader = new GenericDatumReader<>(); - DataFileReader dataFileReader = new DataFileReader<>(new File("/tmp/foo.avro"), datumReader); - return dataFileReader; + return new DataFileReader<>(new File("/tmp/foo.avro"), datumReader); } } From 6dc7991985c1c66679acfe6f945385aa9d6574f3 Mon Sep 17 00:00:00 2001 From: David Arques Date: Fri, 15 Jul 2022 16:53:48 +0200 Subject: [PATCH 11/59] Support primitive types --- .../main/java/org/jfleet/avro/AvroWriter.java | 39 +++++- .../java/org/jfleet/avro/AvroWriterTest.java | 111 ++++++++++++++++++ .../jfleet/avro/TestEntityWithPrimitives.java | 67 +++++++++++ 3 files changed, 211 insertions(+), 6 deletions(-) create mode 100644 jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index a7f912d..0beaff0 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -69,24 +69,51 @@ private Schema buildSchema(AvroConfiguration avroConfiguration) { case ENUMSTRING: fields = fields.name(columnInfo.getColumnName()).type().unionOf().stringType().and().nullType().endUnion().noDefault(); break; + case ENUMORDINAL: + fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); + break; + case INT: case SHORT: case BYTE: - case ENUMORDINAL: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); + if (columnInfo.getFieldType().isPrimitive()) { + fields = fields.name(columnInfo.getColumnName()).type().intType().noDefault(); + } else { + fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); + } break; + case DOUBLE: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().doubleType().and().nullType().endUnion().noDefault(); + if (columnInfo.getFieldType().isPrimitive()) { + fields = fields.name(columnInfo.getColumnName()).type().doubleType().noDefault(); + } else { + fields = fields.name(columnInfo.getColumnName()).type().unionOf().doubleType().and().nullType().endUnion().noDefault(); + } break; + case LONG: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().longType().and().nullType().endUnion().noDefault(); + if (columnInfo.getFieldType().isPrimitive()) { + fields = fields.name(columnInfo.getColumnName()).type().longType().noDefault(); + } else { + fields = fields.name(columnInfo.getColumnName()).type().unionOf().longType().and().nullType().endUnion().noDefault(); + } break; case FLOAT: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().floatType().and().nullType().endUnion().noDefault(); + if (columnInfo.getFieldType().isPrimitive()) { + fields = fields.name(columnInfo.getColumnName()).type().floatType().noDefault(); + } else { + fields = fields.name(columnInfo.getColumnName()).type().unionOf().floatType().and().nullType().endUnion().noDefault(); + } break; + case BOOLEAN: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().booleanType().and().nullType().endUnion().noDefault(); + if (columnInfo.getFieldType().isPrimitive()) { + fields = fields.name(columnInfo.getColumnName()).type().booleanType().noDefault(); + } else { + fields = fields.name(columnInfo.getColumnName()).type().unionOf().booleanType().and().nullType().endUnion().noDefault(); + } break; + default: throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 7cc2058..c9c09a7 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -1,5 +1,6 @@ package org.jfleet.avro; +import org.apache.avro.Schema; import org.apache.avro.file.DataFileReader; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; @@ -85,6 +86,116 @@ void shouldConvertEntityInfoWithBooleanType() throws IOException { } } + @Test + void shouldConvertEntityWithPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = dataFileReader.getSchema(); + assertFieldIsNotUnionType(schema, "fooBoolean"); + assertFieldIsNotUnionType(schema, "fooInt"); + assertFieldIsNotUnionType(schema, "fooShort"); + assertFieldIsNotUnionType(schema, "fooByte"); + assertFieldIsNotUnionType(schema, "fooDouble"); + assertFieldIsNotUnionType(schema, "fooLong"); + assertFieldIsNotUnionType(schema, "fooFloat"); + } + } + + private static void assertFieldIsNotUnionType(Schema schema, String fieldName) { + assertNotEquals(Schema.Type.UNION, schema.getField(fieldName).schema().getType()); + } + + @Test + void shouldCreateSchemaWithNullTypesForObjects() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = dataFileReader.getSchema(); + assertUnionFieldContainsNullType(schema, "fooBoolean"); + assertUnionFieldContainsNullType(schema, "fooInt"); + assertUnionFieldContainsNullType(schema, "fooShort"); + assertUnionFieldContainsNullType(schema, "fooByte"); + assertUnionFieldContainsNullType(schema, "fooDouble"); + assertUnionFieldContainsNullType(schema, "fooLong"); + assertUnionFieldContainsNullType(schema, "fooFloat"); + } + } + + private static void assertUnionFieldContainsNullType(Schema schema, String fieldName) { + Schema fieldSchema = schema.getField(fieldName).schema(); + assertEquals(Schema.Type.UNION, fieldSchema.getType()); + assertTrue(fieldSchema.getTypes().contains(Schema.create(Schema.Type.NULL))); + } + @Test void shouldConvertEntityInfoWithNullBoolean() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java new file mode 100644 index 0000000..305d065 --- /dev/null +++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java @@ -0,0 +1,67 @@ +package org.jfleet.avro; + +public class TestEntityWithPrimitives { + private int fooInt; + private short fooShort; + private byte fooByte; + private double fooDouble; + private long fooLong; + private float fooFloat; + private boolean fooBoolean; + + public int getFooInt() { + return fooInt; + } + + public void setFooInt(int fooInt) { + this.fooInt = fooInt; + } + + public short getFooShort() { + return fooShort; + } + + public void setFooShort(short fooShort) { + this.fooShort = fooShort; + } + + public byte getFooByte() { + return fooByte; + } + + public void setFooByte(byte fooByte) { + this.fooByte = fooByte; + } + + public double getFooDouble() { + return fooDouble; + } + + public void setFooDouble(double fooDouble) { + this.fooDouble = fooDouble; + } + + public long getFooLong() { + return fooLong; + } + + public void setFooLong(long fooLong) { + this.fooLong = fooLong; + } + + public float getFooFloat() { + return fooFloat; + } + + public void setFooFloat(float fooFloat) { + this.fooFloat = fooFloat; + } + + public boolean isFooBoolean() { + return fooBoolean; + } + + public void setFooBoolean(boolean fooBoolean) { + this.fooBoolean = fooBoolean; + } +} From 98e49a99c6bd18d2c4745492410ec749f2b39c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 17:08:31 +0200 Subject: [PATCH 12/59] Extract build types from writer --- .../main/java/org/jfleet/avro/AvroWriter.java | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index 0beaff0..b538e53 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -64,56 +64,34 @@ private Schema buildSchema(AvroConfiguration avroConfiguration) { .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); for (ColumnInfo columnInfo : entityInfo.getColumns()) { + SchemaBuilder.FieldTypeBuilder type = fields.name(columnInfo.getColumnName()).type(); + boolean isPrimitive = columnInfo.getFieldType().isPrimitive(); + switch (columnInfo.getFieldType().getFieldType()) { case STRING: case ENUMSTRING: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().stringType().and().nullType().endUnion().noDefault(); + fields = buildAsString(type); break; case ENUMORDINAL: - fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); + fields = buildAsInteger(type, false); break; - case INT: case SHORT: case BYTE: - if (columnInfo.getFieldType().isPrimitive()) { - fields = fields.name(columnInfo.getColumnName()).type().intType().noDefault(); - } else { - fields = fields.name(columnInfo.getColumnName()).type().unionOf().intType().and().nullType().endUnion().noDefault(); - } + fields = buildAsInteger(type, isPrimitive); break; - case DOUBLE: - if (columnInfo.getFieldType().isPrimitive()) { - fields = fields.name(columnInfo.getColumnName()).type().doubleType().noDefault(); - } else { - fields = fields.name(columnInfo.getColumnName()).type().unionOf().doubleType().and().nullType().endUnion().noDefault(); - } + fields = buildAsDouble(type, isPrimitive); break; - case LONG: - if (columnInfo.getFieldType().isPrimitive()) { - fields = fields.name(columnInfo.getColumnName()).type().longType().noDefault(); - } else { - fields = fields.name(columnInfo.getColumnName()).type().unionOf().longType().and().nullType().endUnion().noDefault(); - } + fields = buildAsLong(type, isPrimitive); break; case FLOAT: - if (columnInfo.getFieldType().isPrimitive()) { - fields = fields.name(columnInfo.getColumnName()).type().floatType().noDefault(); - } else { - fields = fields.name(columnInfo.getColumnName()).type().unionOf().floatType().and().nullType().endUnion().noDefault(); - } + fields = buildAsFloat(type, isPrimitive); break; - case BOOLEAN: - if (columnInfo.getFieldType().isPrimitive()) { - fields = fields.name(columnInfo.getColumnName()).type().booleanType().noDefault(); - } else { - fields = fields.name(columnInfo.getColumnName()).type().unionOf().booleanType().and().nullType().endUnion().noDefault(); - } + fields = buildAsBoolean(type, isPrimitive); break; - default: throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); } @@ -121,4 +99,43 @@ private Schema buildSchema(AvroConfiguration avroConfiguration) { return fields.endRecord(); } + + private SchemaBuilder.FieldAssembler buildAsString(SchemaBuilder.FieldTypeBuilder type) { + return type.unionOf().stringType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsBoolean(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.booleanType().noDefault(); + } + return type.unionOf().booleanType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsFloat(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.floatType().noDefault(); + } + return type.unionOf().floatType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsLong(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.longType().noDefault(); + } + return type.unionOf().longType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsInteger(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.intType().noDefault(); + } + return type.unionOf().intType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsDouble(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.doubleType().noDefault(); + } + return type.unionOf().doubleType().and().nullType().endUnion().noDefault(); + } } From e52dc96046c8e0f966946c71f9ca223815e56085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 17:23:43 +0200 Subject: [PATCH 13/59] Extract get field Schema --- .../main/java/org/jfleet/avro/AvroWriter.java | 75 +++++++++---------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index b538e53..1c14389 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -2,6 +2,7 @@ import org.apache.avro.Schema; import org.apache.avro.SchemaBuilder; +import org.apache.avro.SchemaBuilder.FieldAssembler; import org.apache.avro.file.DataFileWriter; import org.apache.avro.generic.GenericData; import org.apache.avro.generic.GenericDatumWriter; @@ -60,79 +61,77 @@ private Object extractValue(ColumnInfo columnInfo, Object value) { private Schema buildSchema(AvroConfiguration avroConfiguration) { EntityInfo entityInfo = avroConfiguration.getEntityInfo(); - SchemaBuilder.FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) + FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); for (ColumnInfo columnInfo : entityInfo.getColumns()) { - SchemaBuilder.FieldTypeBuilder type = fields.name(columnInfo.getColumnName()).type(); - boolean isPrimitive = columnInfo.getFieldType().isPrimitive(); - - switch (columnInfo.getFieldType().getFieldType()) { - case STRING: - case ENUMSTRING: - fields = buildAsString(type); - break; - case ENUMORDINAL: - fields = buildAsInteger(type, false); - break; - case INT: - case SHORT: - case BYTE: - fields = buildAsInteger(type, isPrimitive); - break; - case DOUBLE: - fields = buildAsDouble(type, isPrimitive); - break; - case LONG: - fields = buildAsLong(type, isPrimitive); - break; - case FLOAT: - fields = buildAsFloat(type, isPrimitive); - break; - case BOOLEAN: - fields = buildAsBoolean(type, isPrimitive); - break; - default: - throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); - } + fields = getFieldSchema(columnInfo, fields); } return fields.endRecord(); } - private SchemaBuilder.FieldAssembler buildAsString(SchemaBuilder.FieldTypeBuilder type) { + private FieldAssembler getFieldSchema(ColumnInfo columnInfo, FieldAssembler fields) { + SchemaBuilder.FieldTypeBuilder type = fields.name(columnInfo.getColumnName()).type(); + boolean isPrimitive = columnInfo.getFieldType().isPrimitive(); + + switch (columnInfo.getFieldType().getFieldType()) { + case STRING: + case ENUMSTRING: + return buildAsString(type); + case ENUMORDINAL: + return buildAsInteger(type, false); + case INT: + case SHORT: + case BYTE: + return buildAsInteger(type, isPrimitive); + case DOUBLE: + return buildAsDouble(type, isPrimitive); + case LONG: + return buildAsLong(type, isPrimitive); + case FLOAT: + return buildAsFloat(type, isPrimitive); + case BOOLEAN: + return buildAsBoolean(type, isPrimitive); + default: + throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); + } + + } + + private FieldAssembler buildAsString(SchemaBuilder.FieldTypeBuilder type) { return type.unionOf().stringType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsBoolean(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsBoolean(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.booleanType().noDefault(); } return type.unionOf().booleanType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsFloat(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsFloat(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.floatType().noDefault(); } return type.unionOf().floatType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsLong(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsLong(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.longType().noDefault(); } return type.unionOf().longType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsInteger(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsInteger(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.intType().noDefault(); } return type.unionOf().intType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsDouble(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsDouble(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.doubleType().noDefault(); } From 471ec0cf030b6bfd91685ab8d283839f47a6585b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 17:34:09 +0200 Subject: [PATCH 14/59] Create avro schemabuilder --- .../org/jfleet/avro/AvroSchemaBuilder.java | 91 +++++++++++++++++++ .../main/java/org/jfleet/avro/AvroWriter.java | 88 +----------------- .../java/org/jfleet/avro/AvroWriterTest.java | 5 +- 3 files changed, 95 insertions(+), 89 deletions(-) create mode 100644 jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java new file mode 100644 index 0000000..9d0980d --- /dev/null +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java @@ -0,0 +1,91 @@ +package org.jfleet.avro; + +import org.apache.avro.Schema; +import org.apache.avro.SchemaBuilder; +import org.jfleet.ColumnInfo; +import org.jfleet.EntityInfo; + +public class AvroSchemaBuilder { + private EntityInfo entityInfo; + + public AvroSchemaBuilder(EntityInfo entityInfo) { + this.entityInfo = entityInfo; + } + + public Schema build() { + SchemaBuilder.FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) + .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); + + for (ColumnInfo columnInfo : entityInfo.getColumns()) { + fields = getFieldSchema(columnInfo, fields); + } + return fields.endRecord(); + } + + private SchemaBuilder.FieldAssembler getFieldSchema(ColumnInfo columnInfo, SchemaBuilder.FieldAssembler fields) { + SchemaBuilder.FieldTypeBuilder beginType = fields.name(columnInfo.getColumnName()).type(); + boolean isPrimitive = columnInfo.getFieldType().isPrimitive(); + + switch (columnInfo.getFieldType().getFieldType()) { + case STRING: + case ENUMSTRING: + return buildAsString(beginType); + case ENUMORDINAL: + return buildAsInteger(beginType, false); + case INT: + case SHORT: + case BYTE: + return buildAsInteger(beginType, isPrimitive); + case DOUBLE: + return buildAsDouble(beginType, isPrimitive); + case LONG: + return buildAsLong(beginType, isPrimitive); + case FLOAT: + return buildAsFloat(beginType, isPrimitive); + case BOOLEAN: + return buildAsBoolean(beginType, isPrimitive); + default: + throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); + } + + } + + private SchemaBuilder.FieldAssembler buildAsString(SchemaBuilder.FieldTypeBuilder type) { + return type.unionOf().stringType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsBoolean(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.booleanType().noDefault(); + } + return type.unionOf().booleanType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsFloat(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.floatType().noDefault(); + } + return type.unionOf().floatType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsLong(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.longType().noDefault(); + } + return type.unionOf().longType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsInteger(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.intType().noDefault(); + } + return type.unionOf().intType().and().nullType().endUnion().noDefault(); + } + + private SchemaBuilder.FieldAssembler buildAsDouble(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + if (isPrimitive) { + return type.doubleType().noDefault(); + } + return type.unionOf().doubleType().and().nullType().endUnion().noDefault(); + } +} diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index 1c14389..25335a7 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -1,8 +1,6 @@ package org.jfleet.avro; import org.apache.avro.Schema; -import org.apache.avro.SchemaBuilder; -import org.apache.avro.SchemaBuilder.FieldAssembler; import org.apache.avro.file.DataFileWriter; import org.apache.avro.generic.GenericData; import org.apache.avro.generic.GenericDatumWriter; @@ -10,7 +8,6 @@ import org.apache.avro.io.DatumWriter; import org.jfleet.ColumnInfo; import org.jfleet.EntityFieldType.FieldTypeEnum; -import org.jfleet.EntityInfo; import java.io.IOException; import java.io.OutputStream; @@ -18,22 +15,21 @@ public class AvroWriter { private final AvroConfiguration avroConfiguration; + private final Schema schema; public AvroWriter(AvroConfiguration avroConfiguration) { this.avroConfiguration = avroConfiguration; + schema = new AvroSchemaBuilder(avroConfiguration.getEntityInfo()).build(); } public void writeAll(OutputStream output, Collection collection) throws IOException { - EntityInfo entityInfo = avroConfiguration.getEntityInfo(); - - Schema schema = buildSchema(avroConfiguration); DatumWriter datumWriter = new GenericDatumWriter<>(schema); try (DataFileWriter dataFileWriter = new DataFileWriter<>(datumWriter)) { dataFileWriter.create(schema, output); for (T entity : collection) { GenericRecord genericRecord = new GenericData.Record(schema); - for (ColumnInfo columnInfo : entityInfo.getColumns()) { + for (ColumnInfo columnInfo : avroConfiguration.getEntityInfo().getColumns()) { Object value = columnInfo.getAccessor().apply(entity); if (value != null) { value = extractValue(columnInfo, value); @@ -59,82 +55,4 @@ private Object extractValue(ColumnInfo columnInfo, Object value) { return value; } - private Schema buildSchema(AvroConfiguration avroConfiguration) { - EntityInfo entityInfo = avroConfiguration.getEntityInfo(); - FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) - .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); - - for (ColumnInfo columnInfo : entityInfo.getColumns()) { - fields = getFieldSchema(columnInfo, fields); - } - - return fields.endRecord(); - } - - private FieldAssembler getFieldSchema(ColumnInfo columnInfo, FieldAssembler fields) { - SchemaBuilder.FieldTypeBuilder type = fields.name(columnInfo.getColumnName()).type(); - boolean isPrimitive = columnInfo.getFieldType().isPrimitive(); - - switch (columnInfo.getFieldType().getFieldType()) { - case STRING: - case ENUMSTRING: - return buildAsString(type); - case ENUMORDINAL: - return buildAsInteger(type, false); - case INT: - case SHORT: - case BYTE: - return buildAsInteger(type, isPrimitive); - case DOUBLE: - return buildAsDouble(type, isPrimitive); - case LONG: - return buildAsLong(type, isPrimitive); - case FLOAT: - return buildAsFloat(type, isPrimitive); - case BOOLEAN: - return buildAsBoolean(type, isPrimitive); - default: - throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); - } - - } - - private FieldAssembler buildAsString(SchemaBuilder.FieldTypeBuilder type) { - return type.unionOf().stringType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsBoolean(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.booleanType().noDefault(); - } - return type.unionOf().booleanType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsFloat(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.floatType().noDefault(); - } - return type.unionOf().floatType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsLong(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.longType().noDefault(); - } - return type.unionOf().longType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsInteger(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.intType().noDefault(); - } - return type.unionOf().intType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsDouble(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.doubleType().noDefault(); - } - return type.unionOf().doubleType().and().nullType().endUnion().noDefault(); - } } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index c9c09a7..eeb3b71 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -277,10 +277,7 @@ void shouldThrowUnsupportedTypeException() { .build(); AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - AvroWriter avroWriter = new AvroWriter<>(avroConfiguration); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - TestEntity testEntity = new TestEntity(); - assertThrows(UnsupportedTypeException.class, () -> avroWriter.writeAll(outputStream, Arrays.asList(testEntity))); + assertThrows(UnsupportedTypeException.class, () -> new AvroWriter<>(avroConfiguration)); } @Test From 7e378a2e86378daad65703fb9335d3ec6deeb1fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 18:01:45 +0200 Subject: [PATCH 15/59] Add support for build from class name --- .../org/jfleet/avro/AvroSchemaBuilder.java | 22 ++++---- .../main/java/org/jfleet/avro/AvroWriter.java | 51 ++++++++++++++----- .../java/org/jfleet/avro/AvroWriterTest.java | 1 + 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java index 9d0980d..ca2bb5c 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java @@ -2,18 +2,20 @@ import org.apache.avro.Schema; import org.apache.avro.SchemaBuilder; +import org.apache.avro.SchemaBuilder.FieldAssembler; +import org.apache.avro.SchemaBuilder.FieldTypeBuilder; import org.jfleet.ColumnInfo; import org.jfleet.EntityInfo; public class AvroSchemaBuilder { - private EntityInfo entityInfo; + private final EntityInfo entityInfo; public AvroSchemaBuilder(EntityInfo entityInfo) { this.entityInfo = entityInfo; } public Schema build() { - SchemaBuilder.FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) + FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); for (ColumnInfo columnInfo : entityInfo.getColumns()) { @@ -22,8 +24,8 @@ public Schema build() { return fields.endRecord(); } - private SchemaBuilder.FieldAssembler getFieldSchema(ColumnInfo columnInfo, SchemaBuilder.FieldAssembler fields) { - SchemaBuilder.FieldTypeBuilder beginType = fields.name(columnInfo.getColumnName()).type(); + private FieldAssembler getFieldSchema(ColumnInfo columnInfo, FieldAssembler fields) { + FieldTypeBuilder beginType = fields.name(columnInfo.getColumnName()).type(); boolean isPrimitive = columnInfo.getFieldType().isPrimitive(); switch (columnInfo.getFieldType().getFieldType()) { @@ -50,39 +52,39 @@ private SchemaBuilder.FieldAssembler getFieldSchema(ColumnInfo columnInf } - private SchemaBuilder.FieldAssembler buildAsString(SchemaBuilder.FieldTypeBuilder type) { + private FieldAssembler buildAsString(FieldTypeBuilder type) { return type.unionOf().stringType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsBoolean(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsBoolean(FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.booleanType().noDefault(); } return type.unionOf().booleanType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsFloat(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsFloat(FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.floatType().noDefault(); } return type.unionOf().floatType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsLong(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsLong(FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.longType().noDefault(); } return type.unionOf().longType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsInteger(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsInteger(FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.intType().noDefault(); } return type.unionOf().intType().and().nullType().endUnion().noDefault(); } - private SchemaBuilder.FieldAssembler buildAsDouble(SchemaBuilder.FieldTypeBuilder type, boolean isPrimitive) { + private FieldAssembler buildAsDouble(FieldTypeBuilder type, boolean isPrimitive) { if (isPrimitive) { return type.doubleType().noDefault(); } diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index 25335a7..3173845 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -8,37 +8,60 @@ import org.apache.avro.io.DatumWriter; import org.jfleet.ColumnInfo; import org.jfleet.EntityFieldType.FieldTypeEnum; +import org.jfleet.EntityInfo; +import org.jfleet.inspection.JpaEntityInspector; import java.io.IOException; import java.io.OutputStream; import java.util.Collection; +import java.util.Iterator; +import java.util.stream.Stream; public class AvroWriter { - private final AvroConfiguration avroConfiguration; + private final AvroConfiguration avroConfiguration; private final Schema schema; + private final EntityInfo entityInfo; - public AvroWriter(AvroConfiguration avroConfiguration) { + public AvroWriter(AvroConfiguration avroConfiguration) { this.avroConfiguration = avroConfiguration; - schema = new AvroSchemaBuilder(avroConfiguration.getEntityInfo()).build(); + entityInfo = getEntityInfo(avroConfiguration); + schema = new AvroSchemaBuilder(entityInfo).build(); } - public void writeAll(OutputStream output, Collection collection) throws IOException { + public void writeAll(OutputStream output, Collection entities) throws IOException { + writeAll(output, entities.stream()); + } + + public void writeAll(OutputStream output, Stream entities) throws IOException { DatumWriter datumWriter = new GenericDatumWriter<>(schema); try (DataFileWriter dataFileWriter = new DataFileWriter<>(datumWriter)) { dataFileWriter.create(schema, output); - for (T entity : collection) { - GenericRecord genericRecord = new GenericData.Record(schema); - for (ColumnInfo columnInfo : avroConfiguration.getEntityInfo().getColumns()) { - Object value = columnInfo.getAccessor().apply(entity); - if (value != null) { - value = extractValue(columnInfo, value); - genericRecord.put(columnInfo.getColumnName(), value); - } - } - dataFileWriter.append(genericRecord); + Iterator iterator = entities.iterator(); + while (iterator.hasNext()) { + dataFileWriter.append(buildAvroRecord(iterator.next())); + } + } + } + + private static EntityInfo getEntityInfo(AvroConfiguration config) { + EntityInfo configEntityInfo = config.getEntityInfo(); + if (configEntityInfo != null) { + return configEntityInfo; + } + return new JpaEntityInspector(config.getClazz()).inspect(); + } + + private GenericRecord buildAvroRecord(T entity) { + GenericRecord genericRecord = new GenericData.Record(schema); + for (ColumnInfo columnInfo : entityInfo.getColumns()) { + Object value = columnInfo.getAccessor().apply(entity); + if (value != null) { + Object extractedValue = extractValue(columnInfo, value); + genericRecord.put(columnInfo.getColumnName(), extractedValue); } } + return genericRecord; } private Object extractValue(ColumnInfo columnInfo, Object value) { diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index eeb3b71..56bce46 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.*; class AvroWriterTest { + @Test void shouldFillOutputStream() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) From dc9cdaf4c17c86f9040f410cb04a2c8165fbef21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 15 Jul 2022 18:02:49 +0200 Subject: [PATCH 16/59] Avro configuration refactor --- .../java/org/jfleet/avro/AvroConfiguration.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java index 1974f9f..469070c 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java @@ -2,14 +2,26 @@ import org.jfleet.EntityInfo; -public class AvroConfiguration { - private final EntityInfo entityInfo; +public class AvroConfiguration { + + private EntityInfo entityInfo; + private Class clazz; public AvroConfiguration(EntityInfo entityInfo) { this.entityInfo = entityInfo; + clazz = (Class) entityInfo.getEntityClass(); + } + + @SuppressWarnings("unchecked") + public AvroConfiguration(Class clazz) { + this.clazz = clazz; } public EntityInfo getEntityInfo() { return entityInfo; } + + public Class getClazz() { + return clazz; + } } From 8e2a59cef02b4d2d653d7b756f14ba45448fb531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jer=C3=B3nimo?= Date: Thu, 13 Oct 2022 18:20:12 +0200 Subject: [PATCH 17/59] Fix checkstyle and upgrade license formateer --- build.gradle | 2 +- config/checkstyle/checkstyle.xml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 2ac3b2f..07ec45d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id "com.github.hierynomus.license" version "0.15.0" + id "com.github.hierynomus.license" version "0.16.1" } allprojects { diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index f25c4ce..f8eb95a 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -25,6 +25,12 @@ + + + + + + @@ -45,12 +51,6 @@ - - - - - - From 1eef1d0c0927b51ee9486808ddd0b0891f34b6fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jer=C3=B3nimo?= Date: Thu, 13 Oct 2022 18:20:41 +0200 Subject: [PATCH 18/59] Fix codestyle --- .../org/jfleet/avro/AvroConfiguration.java | 2 +- .../java/org/jfleet/avro/AvroWriterTest.java | 138 +++++++++--------- 2 files changed, 71 insertions(+), 69 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java index 469070c..e318d6f 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java @@ -7,12 +7,12 @@ public class AvroConfiguration { private EntityInfo entityInfo; private Class clazz; + @SuppressWarnings("unchecked") public AvroConfiguration(EntityInfo entityInfo) { this.entityInfo = entityInfo; clazz = (Class) entityInfo.getEntityClass(); } - @SuppressWarnings("unchecked") public AvroConfiguration(Class clazz) { this.clazz = clazz; } diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java index 56bce46..8ccc3d3 100644 --- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java +++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java @@ -1,5 +1,18 @@ package org.jfleet.avro; +import static org.jfleet.avro.TestEntityWithEnum.WeekDays.FRIDAY; +import static org.jfleet.avro.TestEntityWithEnum.WeekDays.SATURDAY; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Arrays; import org.apache.avro.Schema; import org.apache.avro.file.DataFileReader; import org.apache.avro.generic.GenericDatumReader; @@ -11,24 +24,13 @@ import org.jfleet.EntityInfoBuilder; import org.junit.jupiter.api.Test; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.math.BigDecimal; -import java.util.Arrays; - -import static org.jfleet.avro.TestEntityWithEnum.WeekDays.FRIDAY; -import static org.jfleet.avro.TestEntityWithEnum.WeekDays.SATURDAY; -import static org.junit.jupiter.api.Assertions.*; - class AvroWriterTest { - + @Test void shouldFillOutputStream() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); TestEntity testEntity = new TestEntity(); testEntity.setFooString("foo"); @@ -43,8 +45,8 @@ void shouldFillOutputStream() throws IOException { @Test void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); TestEntity testEntity = new TestEntity(); testEntity.setFooString("foo"); @@ -59,8 +61,8 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { @Test void shouldConvertEntityInfoWithNullStringType() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); TestEntity testEntity = new TestEntity(); @@ -74,8 +76,8 @@ void shouldConvertEntityInfoWithNullStringType() throws IOException { @Test void shouldConvertEntityInfoWithBooleanType() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .build(); + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); TestEntity testEntity = new TestEntity(); testEntity.setFooBoolean(true); @@ -90,14 +92,14 @@ void shouldConvertEntityInfoWithBooleanType() throws IOException { @Test void shouldConvertEntityWithPrimitives() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) - .build(); + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); testEntity.setFooBoolean(true); @@ -124,14 +126,14 @@ void shouldConvertEntityWithPrimitives() throws IOException { @Test void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) - .build(); + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); testEntity.setFooBoolean(true); @@ -161,14 +163,14 @@ private static void assertFieldIsNotUnionType(Schema schema, String fieldName) { @Test void shouldCreateSchemaWithNullTypesForObjects() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); TestEntity testEntity = new TestEntity(); testEntity.setFooBoolean(true); @@ -200,8 +202,8 @@ private static void assertUnionFieldContainsNullType(Schema schema, String field @Test void shouldConvertEntityInfoWithNullBoolean() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .build(); + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); TestEntity testEntity = new TestEntity(); @@ -215,13 +217,13 @@ void shouldConvertEntityInfoWithNullBoolean() throws IOException { @Test void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); TestEntity testEntity = new TestEntity(); @@ -247,13 +249,13 @@ void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { @Test void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); TestEntity testEntity = new TestEntity(); @@ -274,8 +276,8 @@ void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { @Test void shouldThrowUnsupportedTypeException() { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) - .build(); + .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) + .build(); AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); assertThrows(UnsupportedTypeException.class, () -> new AvroWriter<>(avroConfiguration)); @@ -284,9 +286,9 @@ void shouldThrowUnsupportedTypeException() { @Test void shouldConvertEnumTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) - .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) - .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) - .build(); + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); @@ -305,9 +307,9 @@ void shouldConvertEnumTypesToAvro() throws IOException { @Test void shouldConvertNullableEnumTypesToAvro() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) - .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) - .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) - .build(); + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); From a961832e5f98eb51f56274ce4ca83e239b702822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jer=C3=B3nimo?= Date: Thu, 13 Oct 2022 18:21:43 +0200 Subject: [PATCH 19/59] Simplify build schema code using builder --- .../org/jfleet/avro/AvroSchemaBuilder.java | 62 +++++-------------- 1 file changed, 17 insertions(+), 45 deletions(-) diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java index ca2bb5c..9d6766c 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java @@ -1,8 +1,11 @@ package org.jfleet.avro; +import java.util.function.Function; import org.apache.avro.Schema; import org.apache.avro.SchemaBuilder; +import org.apache.avro.SchemaBuilder.BaseFieldTypeBuilder; import org.apache.avro.SchemaBuilder.FieldAssembler; +import org.apache.avro.SchemaBuilder.FieldDefault; import org.apache.avro.SchemaBuilder.FieldTypeBuilder; import org.jfleet.ColumnInfo; import org.jfleet.EntityInfo; @@ -16,7 +19,7 @@ public AvroSchemaBuilder(EntityInfo entityInfo) { public Schema build() { FieldAssembler fields = SchemaBuilder.record(entityInfo.getEntityClass().getName()) - .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); + .namespace(entityInfo.getEntityClass().getPackage().getName()).fields(); for (ColumnInfo columnInfo : entityInfo.getColumns()) { fields = getFieldSchema(columnInfo, fields); @@ -31,63 +34,32 @@ private FieldAssembler getFieldSchema(ColumnInfo columnInfo, FieldAssemb switch (columnInfo.getFieldType().getFieldType()) { case STRING: case ENUMSTRING: - return buildAsString(beginType); + return beginType.nullable().stringType().noDefault(); case ENUMORDINAL: - return buildAsInteger(beginType, false); + return ofType(beginType, false, BaseFieldTypeBuilder::intType); case INT: case SHORT: case BYTE: - return buildAsInteger(beginType, isPrimitive); + return ofType(beginType, isPrimitive, BaseFieldTypeBuilder::intType); case DOUBLE: - return buildAsDouble(beginType, isPrimitive); + return ofType(beginType, isPrimitive, BaseFieldTypeBuilder::doubleType); case LONG: - return buildAsLong(beginType, isPrimitive); + return ofType(beginType, isPrimitive, BaseFieldTypeBuilder::longType); case FLOAT: - return buildAsFloat(beginType, isPrimitive); + return ofType(beginType, isPrimitive, BaseFieldTypeBuilder::floatType); case BOOLEAN: - return buildAsBoolean(beginType, isPrimitive); + return ofType(beginType, isPrimitive, BaseFieldTypeBuilder::booleanType); default: - throw new UnsupportedTypeException(String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); + throw new UnsupportedTypeException( + String.format("Unsupported type: %s", columnInfo.getFieldType().getFieldType())); } } - private FieldAssembler buildAsString(FieldTypeBuilder type) { - return type.unionOf().stringType().and().nullType().endUnion().noDefault(); + private FieldAssembler ofType(FieldTypeBuilder type, boolean isPrimitive, + Function, FieldDefault> typeMapper) { + BaseFieldTypeBuilder forType = isPrimitive ? type : type.nullable(); + return typeMapper.apply(forType).noDefault(); } - private FieldAssembler buildAsBoolean(FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.booleanType().noDefault(); - } - return type.unionOf().booleanType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsFloat(FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.floatType().noDefault(); - } - return type.unionOf().floatType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsLong(FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.longType().noDefault(); - } - return type.unionOf().longType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsInteger(FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.intType().noDefault(); - } - return type.unionOf().intType().and().nullType().endUnion().noDefault(); - } - - private FieldAssembler buildAsDouble(FieldTypeBuilder type, boolean isPrimitive) { - if (isPrimitive) { - return type.doubleType().noDefault(); - } - return type.unionOf().doubleType().and().nullType().endUnion().noDefault(); - } } From db50f79ad510ba0f43c17abdfbb1ff21270bfc8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 14 Oct 2022 17:05:41 +0200 Subject: [PATCH 20/59] Extract entity mapper from Avro --- .../org/jfleet/avro/AvroConfiguration.class | Bin 0 -> 1152 bytes .../org/jfleet/avro/AvroSchemaBuilder$1.class | Bin 0 -> 1199 bytes .../org/jfleet/avro/AvroSchemaBuilder.class | Bin 0 -> 6598 bytes .../main/org/jfleet/avro/AvroWriter.class | Bin 0 -> 3834 bytes .../avro/EntityGenericRecordMapper.class | Bin 0 -> 2889 bytes .../avro/UnsupportedTypeException.class | Bin 0 -> 403 bytes .../test/org/jfleet/avro/AvroWriterTest.class | Bin 0 -> 14846 bytes .../test/org/jfleet/avro/TestEntity.class | Bin 0 -> 2371 bytes .../avro/TestEntityWithEnum$WeekDays.class | Bin 0 -> 1498 bytes .../org/jfleet/avro/TestEntityWithEnum.class | Bin 0 -> 933 bytes .../avro/TestEntityWithPrimitives.class | Bin 0 -> 1802 bytes jfleet-avro/build/jacoco/test.exec | Bin 0 -> 62734 bytes jfleet-avro/build/libs/jfleet-avro-0.6.4.jar | Bin 0 -> 8160 bytes .../org.jfleet.avro.AvroWriterTest.html | 265 ++++++++++++++++++ .../reports/tests/test/css/base-style.css | 179 ++++++++++++ .../build/reports/tests/test/css/style.css | 84 ++++++ .../build/reports/tests/test/index.html | 133 +++++++++ .../build/reports/tests/test/js/report.js | 194 +++++++++++++ .../tests/test/packages/org.jfleet.avro.html | 103 +++++++ .../TEST-org.jfleet.avro.AvroWriterTest.xml | 119 ++++++++ .../build/test-results/test/binary/output.bin | 100 +++++++ .../test-results/test/binary/output.bin.idx | Bin 0 -> 36 bytes .../test-results/test/binary/results.bin | Bin 0 -> 1287 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 19895 bytes .../previous-compilation-data.bin | Bin 0 -> 19854 bytes .../META-INF/MANIFEST.MF | 23 ++ .../org.jacoco.agent/pom.properties | 5 + .../maven/org.jacoco/org.jacoco.agent/pom.xml | 106 +++++++ .../about.html | 72 +++++ .../jacocoagent.jar | Bin 0 -> 292059 bytes .../org/jacoco/agent/AgentJar.class | Bin 0 -> 2322 bytes jfleet-avro/build/tmp/jar/MANIFEST.MF | 2 + .../main/java/org/jfleet/avro/AvroWriter.java | 99 +++---- .../avro/EntityGenericRecordMapper.java | 45 +++ .../parquet/CountedPositionOutputStream.java | 66 +++++ .../parquet/OutputStreamOutputFile.java | 52 ++++ .../org/jfleet/parquet/ParquetWriter.java | 2 + .../org/jfleet/parquet/ParquetWriterTest.java | 2 + .../java/org/jfleet/parquet/TestEntity.java | 77 +++++ .../jfleet/parquet/TestEntityWithEnum.java | 26 ++ .../parquet/TestEntityWithPrimitives.java | 67 +++++ 41 files changed, 1757 insertions(+), 64 deletions(-) create mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroConfiguration.class create mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder$1.class create mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder.class create mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroWriter.class create mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/EntityGenericRecordMapper.class create mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/UnsupportedTypeException.class create mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/AvroWriterTest.class create mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntity.class create mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithEnum$WeekDays.class create mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithEnum.class create mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithPrimitives.class create mode 100644 jfleet-avro/build/jacoco/test.exec create mode 100644 jfleet-avro/build/libs/jfleet-avro-0.6.4.jar create mode 100644 jfleet-avro/build/reports/tests/test/classes/org.jfleet.avro.AvroWriterTest.html create mode 100644 jfleet-avro/build/reports/tests/test/css/base-style.css create mode 100644 jfleet-avro/build/reports/tests/test/css/style.css create mode 100644 jfleet-avro/build/reports/tests/test/index.html create mode 100644 jfleet-avro/build/reports/tests/test/js/report.js create mode 100644 jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html create mode 100644 jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml create mode 100644 jfleet-avro/build/test-results/test/binary/output.bin create mode 100644 jfleet-avro/build/test-results/test/binary/output.bin.idx create mode 100644 jfleet-avro/build/test-results/test/binary/results.bin create mode 100644 jfleet-avro/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 jfleet-avro/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/META-INF/MANIFEST.MF create mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties create mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml create mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html create mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/jacocoagent.jar create mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/org/jacoco/agent/AgentJar.class create mode 100644 jfleet-avro/build/tmp/jar/MANIFEST.MF create mode 100644 jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java create mode 100644 jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java create mode 100644 jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java create mode 100644 jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java create mode 100644 jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java create mode 100644 jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java create mode 100644 jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java create mode 100644 jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroConfiguration.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroConfiguration.class new file mode 100644 index 0000000000000000000000000000000000000000..febaf0b9401a97d9a5df629c44342742bba908a8 GIT binary patch literal 1152 zcma)4+int36kUgF8G*u35USN;y$m#w7oQwL(hyBdh(46`{XhpCGR~Ok(4_q;O{^w9 z_yK;Dah(~UQ^3Sba?YN$FKeB>_wPSHe*t)fwuS_fS)}qvBO_3n$xGRBq&w|=7|pD4 zAdu)aA@{Sfqmm2id$y_slIp4ntd7hq3IqYHxjW3`-G4clbIcBibsnw+V4mPQAH5w%*#Rg|&@UdZ`AD zCa0U=?k4zg2Sbaa26rp8>qyZ~qrr2Z$axqE=4nR7gV>; jP{<)O1fEe;^o)49%6hrRf0c_=K4-zmdI5tZ3AFwK0War9 literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder$1.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder$1.class new file mode 100644 index 0000000000000000000000000000000000000000..1dee2af411988a74321ba020d1af341692f31149 GIT binary patch literal 1199 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 literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroWriter.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroWriter.class new file mode 100644 index 0000000000000000000000000000000000000000..74e0a222f6005486f803061750c58cd5a6eab1d4 GIT binary patch literal 3834 zcmb7HX;%|h7=A7!83=<4A{ev?;sQa93t~&CRdFd6p$dYaU4}4(!H`Lli3@h$_r>me zzxh?qsZh%~?YDmD-{`MsPmlJwGg&4Jr}`x`bKm!U-t|8B=Fhvo{sy2MKlxFCN(CMj zUibvo%xRajP)v(QL&H;Zdc+d&^%-%)Iw(-t(K+Tv6{;2ZRn$NgXf~74(A-Q+*R7Ct zDQSid^JhG1Sb9>RHmY04;+A1u9f;4E0(~8W<<$Gl_>2)vCpF7326=yXxVhh7^oOY=QVYfilWjQy8V=+4`+rltI z!)Ys#wleA~;&hHF*eei}HFVb^>Qpb3sp3)1O3ypv>Bk;)%OdWV5w6r3iF-hxy%=}K zi0L7sX~+4J1?<5i60n#0rGQMu~|!^}iEsTUWdbO6gl z#)cijVFgE2^y8>N(+b^S3*^StER&nJv7l=MnRP-P#|Z_Gs~EsZf%-gDRz*OW)lx(H z6;cNoV^UfSsyKxq0Z-gsZpdQ0c!s0Uf+tm+#u^83xWg%c+oCl2qINsR zMDD?;inADFrRBWGxp~)>1GJlRPQ`?zLT@ByrgR181=iYW+P+6;ljdb@DyI7}iKkRN zjc3So+Vu2DI*~}~sgzFe^=|N-h23-wQwk!IKB-rho(lL-Adq3149mJ$Nx_Ujhl@6h zcq-v+ztG8qmesV^OtOZCSrrE6*k>|xe@t6gU}^=u;9@Gpg6W9KQReP#aHrykyeomuo) zvqnl_V+lj$&zi76og}RSSKNkWO$wA~*;wfGY9i~nt*p7T+xtdG!v|@6A1P;5t4EAz zoCK6)qFwiGC+ii;^q_e6yXY{_ymp0srcIkNxw1sc5zyrsYUr$NMyH6uncRl54zl_9 zk6nrA2}$-T1#f0I31b`>&PfEiA0&1MTBh9Ka-C%sMzm_WfO7@5mN0iY0^}}o;T0Z1 z0yPB99t#4kC5T1TT?m#9E?bqM67wmlFj<)zks@=C_12RwW59JP}Cy3Tj0zc;u95$yT}%5BsJmr*wn{28@NSi6YE+i2!W zi(F}TR$FhQ{T8h%k>YP7G32iYO^|ok76f?vX@+I5+UQ8*62IsNmvMy=TrH3-5GVr^Xicek(fJ<9*mp{Z3l6BZ{D1k%RDY zrIk0dx7n>m%HF}d#9|oa)@OIr?hCad1=n^h2B7T!nr&RTJm^&HvE;)lvm)#{{YOV64U?y literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/EntityGenericRecordMapper.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/EntityGenericRecordMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..738414720a4208dc8ee7025ab58c73ac4e9563a3 GIT binary patch literal 2889 zcma)8Yf}?v6n@?iSP2W5RM2==P?8Xgwf15{QAE(R5GaWhrMD$4VKHoIvZ2!Z#oq6i zFZ~1hwe3_a?M%m+&h$h7NdH5px98p6Kq8_HL-yVCo^#&wJm>vOB{40Qy_{Ikh z>J)fY)T2RQ`@FWK#qye&i;Ygt>sd>nq1P}Ct52XV6rO0rHZ&^msc3>K5H1vRvH97& zu3Ir}saS{&nwDWLpVv*jXk^FrY@s+aqAf1!Mfxda=kx_lVArs;(iSzoJ636XCn24; zsA$D@0iSMrN}96;ft|L6dyaF2+(;-02t@AmmUB*zxlx?cEUnWC#RorjNTh87dqSIq z5uWg2Cw3_as@RP^0&P_&*H34RIo%p4UF4Sqj)olGs-ttMtQPrL9H&&okq}UctEgqI2`yjN z1s-=&>DI?Oki-@pNAb9dKAaY4Udw1oTcGD!>e5!xFmpuNkFyE}RGh=0z>)jZpHq6w z&SIH4>Z(TTI=oAmEWs$wtGIw9;WDZrL(k7-mKPb+er91qMXv29e0UPW3Pz-HN?`Zq zsshn_y6RkWI%t*`cs;X=DUKn>(&GWFeltlp#}*dxTwU!t$J`To}6u&MsTJ z4;L}1;u0>)t7BHO&#F)Q@C=?+@SKY0@q&QgEXXu)Wq33)A&>eCuv{ zGnqsmeYH-Pjr>eM=SStPB&u(TGl&vS(N~X+I~u)XOn)tId(dax1`*hJ!>g1y-FTyIz*~u{j(BOGwzTXOPDPin#)a21dvpU*llD=71KiEmfrmkFP(ky{Xv?we2|(VJ-g z-d22xzX5pVHh;IHk(0fJlB<*)bj+}fm-!|&&A@iW45h>x1>b zV|OIz4c6bnWATQl-0TfDtl~@^Zv6LK^gFuuLV`FIgrbJx*A&G{ANsn$kGVNFt$YE`sE;Nv;6R1Pz=4wBHx zzau!o51~`&;^Yl+%!Nr&w@pvPiEE93Nt+az^GTa14?T_HV`P}y_3Tf&R7e7v;Qbr> l6pZcg`>Eu>{{)|M%Y)DGIiCTp{P+T2vE0UZ{MToK{{v{7?KA)Y literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/UnsupportedTypeException.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/UnsupportedTypeException.class new file mode 100644 index 0000000000000000000000000000000000000000..dd1c7d2ed84e3ff56d3978f6d713277ae79fc012 GIT binary patch literal 403 zcma)2!AiqG6r7DQ(O7LQ=t1z{tyXX^-YUHmJp~W8_P$NmxFy*Qn@y>o*Rd$SpBpMM`kV=+Nsj= zrYUFAPQ>2Edx&R4PpDRe`l{?fOeyY&IE+Num5AC&Ahfsk1 E51{sCH2?qr literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/test/org/jfleet/avro/AvroWriterTest.class b/jfleet-avro/build/classes/java/test/org/jfleet/avro/AvroWriterTest.class new file mode 100644 index 0000000000000000000000000000000000000000..96010ca2537befed3080e5cebe7934f7a6fcea67 GIT binary patch literal 14846 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 literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntity.class b/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..9c477373e1e021bcb683e91839b63f070744c744 GIT binary patch literal 2371 zcmZ{l-BQy)7>3`JpF&A3r4-~(L_k_Vs)C{xK`9iG3eLcA9x#+JwV4Tl8SYAFaGdeL z3-F>Gzi)R-lejs_Hk)_fefIm={`vdsH-NYJoI(N}Npza%Lbrkb3+vh{HLPa6bZ~NE zpZW&6*PN!~uN&wn6pwq+gWe=kCi-9+7Ef(m+kVNq_T18ued%vEeaF8s(0k^( zhrZ`D>jnmDZDToCW~+N9GU%s0NV?mk&2j-9P1tqY6T$%#ISd-;Vb62dBWX4u6;nbu zWMUZi4J1jpdE?u3q=1fRglyEr7{(>zmV0&5AYqVE&I#!Q6O(u-9cwNhCg{jBLiWhS zG-f1Wwc%P3LNO(Tk4?;>U?9bWuG_G!X87D{vTUHU;(j5pOwDQ9`&VC2Z12cYsP3uN zIJP{8-_>NNf9_lw7_Y@Ag*?r=?N{5087ve7@lmNE)n!PPFZ?em9#ikd;g>X%v&x3u!)LM zt1!YbQl)Vhqn0WZBP9wD$55;r`isL2y_)9{mS4EmMeju#^}v>2&h z#Yhb)M(Q>(Qag!}x`oCp48Ef1S){iTjRuWf^FLvH7qWSJ@@Jp}3-mOl0E>7+Zw8jc zqVVEdB)`$e1lo%;+Qm=tj4XKZI;r_Y-SZ1SkZfY`Ke_Cr#owr4axKT|)) zvhr%5;uh&B$gmb<1ut|U=_tq;fsDt1Z~_?QB~~>c*(k`Q7UUIP>p-$mkZA&$i2>mX zV30Q`Ye4c*kU1^L8vTuFQj?E@ED*?I3<#GXgREmi12Pf?DQQ98;k^!IBnq-jAS*E- z+ye}?c*KO-p^RA!^s`P_>k6*n|?5ORCwWI@V(i}r&DEy*<2S4aZVwt@N){OP|Rq= z!F@MWsNCn@$)xjtyuB*=xK}Q07Pl`$Z>k824%WA`PWFI`K@q2=3dL>58B#GU;<-5PmP|L85+)%qENxq3yfmGp+mIUQn;r5_T1@cPo| zzS{dH4dmC%s-@el2F1A}(GuOMM5X2|ZM7qjuQt(DQ!8->MXR?O6=U7xbB3-zW1k2yJf~lucow4gDa4)lMYx1l z39{)kjGu$?c-LR?3G%2HQS{ok&uhrC1=kiLVJ-EFwFvZoD6D|_2?LSsDuLOV$(}uD&hE?W(=&ig6jF#FY9MAJj)XwAC2yqVNVj2~)LN>p1ri&!YwIn6 zXt7isKoSE6QYHpr3KTrQVYMzDrL-k)e9t;lf!=qutvlzoZtlD7Yr9rnM~J&{+b~7`4MZ_Q(R|;4QRJu+7(<@oXYf6YTlyJ651i}^9>+u%ycKFAs^ygj z7(Hr!#!MPVIy@mC)`>1XOXGQ1^<-Zm>90bveT7W*7n1%eBu7HVeh|Wj(xb+7IQk4` SX^l~54hxi}!Yql!?a4Q{WwVz6 literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithPrimitives.class b/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithPrimitives.class new file mode 100644 index 0000000000000000000000000000000000000000..524474dd39da7b33ae76b4c4922f042f33243615 GIT binary patch literal 1802 zcma)+YflqV5Qg7v7Yb!77X<}GEQoBYP(e|-Sf!L|NuwqunDA}Er7S7kq+Lk(PhMg| zW8w#YfIrIk&hECwb({F*On2rzbDlFZr@wyx_zBGzL{e4|)|0ofzjvrfSqG znRf>#=AomYcf+b#PF6uwPwn-i5B)L3H4H#gpxgCI=H#eqnoh(;5|Sm$PgX^w2WSYtk=C`qnq7{ri*KDx`tc3lEx35;mCjvESM4CF2xlm49e z$28o;Ed~Ab=k2qDszmYC*oeVV(39 z(<%6cU_FcUG&&wtFQ)bs40s~HER>b$^JKnH)ypD`dqS^F)aB^%be>Dqb0X6`S*vOk z=IQi=EvKsIuVnPfNa0R9qvulfohyWXRjDhq34Ncc7u=(*2Cv&LGL0j*n|OF0SQpxR%4aE z*ExP=XcgL?^mi!VT-klD5(c7}=c;)E=t%L4ea8c?e{a4->=T0#bT%hKH$TLJzd1{_ z+@v=>*+i^!v^-2;n2aNChA~g&A1`QfZ=qgv>4PANAjoJa$RjL;fh2+;;{=)L0wRSM zkYzmfb9KsjiQyo~R4B+3tb~CK2SJhqndt%|ofnX&c-97q@R#)U5~E)Ot(gl2d5%?o zbC#Wtx~-XSVl)VnB1pOmh>V_qtYO{Hm0|l@Amg6{APb=&8~lIv2CM@z-NbkhWQicl zT|i{^1tg1?ey*#nnfej{SqTMsh0QidYglKSmxIfE3)Tzy1RwQ0Th= literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/jacoco/test.exec b/jfleet-avro/build/jacoco/test.exec new file mode 100644 index 0000000000000000000000000000000000000000..a7982d64150e7d2a268319abb8885e7b0bde3b02 GIT binary patch literal 62734 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Î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 AI{*Lx literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/libs/jfleet-avro-0.6.4.jar b/jfleet-avro/build/libs/jfleet-avro-0.6.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..39288da2bdcbecbf34bea8df46fd7c9efb57fd56 GIT binary patch literal 8160 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 + + + + +Test results - AvroWriterTest + + + + + +
+

AvroWriterTest

+ +
+ + + + + +
+
+ + + + + + + +
+
+
13
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
1.069s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestDurationResult
shouldConvertEntityInfoWithBooleanType()0.024spassed
shouldConvertEntityInfoWithNullBoolean()0.035spassed
shouldConvertEntityInfoWithNullNumericTypesToAvro()0.008spassed
shouldConvertEntityInfoWithNullStringType()0.003spassed
shouldConvertEntityInfoWithNumericTypesToAvro()0.013spassed
shouldConvertEntityInfoWithStringTypesToAvro()0.007spassed
shouldConvertEntityWithPrimitives()0.020spassed
shouldConvertEnumTypesToAvro()0.011spassed
shouldConvertNullableEnumTypesToAvro()0.007spassed
shouldCreateSchemaWithNullTypesForObjects()0.013spassed
shouldCreateSchemaWithoutNullTypesForPrimitives()0.921spassed
shouldFillOutputStream()0.002spassed
shouldThrowUnsupportedTypeException()0.005spassed
+
+
+

Standard output

+ +
16:53:05.669 [Test worker] DEBUG org.apache.avro.file.CodecFactory - Snappy was not available
+java.lang.NoClassDefFoundError: org/xerial/snappy/Snappy
+	at org.apache.avro.file.SnappyCodec$Option.<clinit>(SnappyCodec.java:35)
+	at org.apache.avro.file.CodecFactory.snappyCodec(CodecFactory.java:69)
+	at org.apache.avro.file.CodecFactory.<clinit>(CodecFactory.java:140)
+	at org.apache.avro.file.DataFileWriter.init(DataFileWriter.java:246)
+	at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:162)
+	at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:145)
+	at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:36)
+	at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:29)
+	at org.jfleet.avro.AvroWriterTest.serializeAndRead(AvroWriterTest.java:331)
+	at org.jfleet.avro.AvroWriterTest.shouldCreateSchemaWithoutNullTypesForPrimitives(AvroWriterTest.java:147)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
+	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
+	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
+	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
+	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at jdk.proxy2/jdk.proxy2.$Proxy5.stop(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
+	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
+	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
+	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
+	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
+	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
+Caused by: java.lang.ClassNotFoundException: org.xerial.snappy.Snappy
+	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
+	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
+	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
+	... 93 common frames omitted
+
+
+
+
+ +
+ + diff --git a/jfleet-avro/build/reports/tests/test/css/base-style.css b/jfleet-avro/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/jfleet-avro/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/jfleet-avro/build/reports/tests/test/css/style.css b/jfleet-avro/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/jfleet-avro/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/jfleet-avro/build/reports/tests/test/index.html b/jfleet-avro/build/reports/tests/test/index.html new file mode 100644 index 0000000..bf96168 --- /dev/null +++ b/jfleet-avro/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
13
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
1.069s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+org.jfleet.avro +13001.069s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+org.jfleet.avro.AvroWriterTest +13001.069s100%
+
+
+ +
+ + diff --git a/jfleet-avro/build/reports/tests/test/js/report.js b/jfleet-avro/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/jfleet-avro/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html b/jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html new file mode 100644 index 0000000..258a66a --- /dev/null +++ b/jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package org.jfleet.avro + + + + + +
+

Package org.jfleet.avro

+ +
+ + + + + +
+
+ + + + + + + +
+
+
13
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
1.069s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+AvroWriterTest +13001.069s100%
+
+
+ +
+ + diff --git a/jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml b/jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml new file mode 100644 index 0000000..a892773 --- /dev/null +++ b/jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + (SnappyCodec.java:35) + at org.apache.avro.file.CodecFactory.snappyCodec(CodecFactory.java:69) + at org.apache.avro.file.CodecFactory.(CodecFactory.java:140) + at org.apache.avro.file.DataFileWriter.init(DataFileWriter.java:246) + at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:162) + at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:145) + at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:36) + at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:29) + at org.jfleet.avro.AvroWriterTest.serializeAndRead(AvroWriterTest.java:331) + at org.jfleet.avro.AvroWriterTest.shouldCreateSchemaWithoutNullTypesForPrimitives(AvroWriterTest.java:147) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) + at jdk.proxy2/jdk.proxy2.$Proxy5.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: java.lang.ClassNotFoundException: org.xerial.snappy.Snappy + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 93 common frames omitted +]]> + + diff --git a/jfleet-avro/build/test-results/test/binary/output.bin b/jfleet-avro/build/test-results/test/binary/output.bin new file mode 100644 index 0000000..24176c9 --- /dev/null +++ b/jfleet-avro/build/test-results/test/binary/output.bin @@ -0,0 +1,100 @@ +^16:53:05.669 [Test worker] DEBUG org.apache.avro.file.CodecFactory - Snappy was not available +9java.lang.NoClassDefFoundError: org/xerial/snappy/Snappy +J at org.apache.avro.file.SnappyCodec$Option.(SnappyCodec.java:35) +H at org.apache.avro.file.CodecFactory.snappyCodec(CodecFactory.java:69) +F at org.apache.avro.file.CodecFactory.(CodecFactory.java:140) +F at org.apache.avro.file.DataFileWriter.init(DataFileWriter.java:246) +H at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:162) +H at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:145) +< at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:36) +< at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:29) +M at org.jfleet.avro.AvroWriterTest.serializeAndRead(AvroWriterTest.java:331) +l at org.jfleet.avro.AvroWriterTest.shouldCreateSchemaWithoutNullTypesForPrimitives(AvroWriterTest.java:147) +S at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) +e at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) +m at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) +? at java.base/java.lang.reflect.Method.invoke(Method.java:568) +[ at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) +Z at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) +] at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) +k at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) +f at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) +e at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) +n at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) +u at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) +m at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) +\ at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) +[ at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) +~ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +u at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) +l at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) +k at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) +N at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +j at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) +^ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) +? at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) +N at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +j at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) +^ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) +? at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) +N at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) +s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) +j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) +j at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) +^ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) +v at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) +r at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) +o at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) +n at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) +w at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) +} at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) +n at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) +V at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) +V at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) +h at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) +S at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) +e at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) +m at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) +? at java.base/java.lang.reflect.Method.invoke(Method.java:568) +Y at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) +Y at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) +i at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) +x at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) +7 at jdk.proxy2/jdk.proxy2.$Proxy5.stop(Unknown Source) +W at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193) +n at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) +Y at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) +X at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) +j at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) +] at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) +^ at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +FCaused by: java.lang.ClassNotFoundException: org.xerial.snappy.Snappy +\ at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) +_ at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) +D at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) + ... 93 common frames omitted diff --git a/jfleet-avro/build/test-results/test/binary/output.bin.idx b/jfleet-avro/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000000000000000000000000000000000000..c07501e8bf6bb17aa978e44bbc739a7db260ffa7 GIT binary patch literal 36 ScmZQ%Vq|1M0UAgDqX7VzE)e4Y literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/test-results/test/binary/results.bin b/jfleet-avro/build/test-results/test/binary/results.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d99083a94aa94c61a85086b8702eb0fb933c0ff GIT binary patch literal 1287 zcmbVLKTpCy9Q^?z$R8(T++Es*@1O({2hoHY7MD^EdU)+M*DK2G=Abi+EJS0X(HK9A zAHh%IV9y>%YpAVDllI=d_kQp9n#*LTlnrXbK0%1r^bw=AJ^#^Rm?Nekm*0e60Wz2G zpT)y!=G8T+M|yRJbdK7Fi7dT?x&Mu~JVLawgWM)%#|>}LQdHT?~k6avBW2jm{4 zAhkz`@rKPYA0OC#DpZB!KBWZdwxT8m!fwD`DZ$z_!tPn$BWP62uc&_FyLq1Mk zdKA?0K0`p*k?eI?pGAC%6hs2cK_|h$mgGEz!hMKSWT|%vYS@ts62d_4tYSiO5->M0 zAx9o}Jl^JhUo1skc>r1I>kKwtLcXFKw-CcdXh~`DP?cI^C_PH8NS&9veAFExgZo8J zgI#D`L3w^}RfGL-ussOMkp>GnImb0ro?|lm;dke~P6=P^_7f&c&j literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/tmp/compileJava/previous-compilation-data.bin b/jfleet-avro/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..c178602ee52db8fcd0c9294a7a6864ed058cd241 GIT binary patch literal 19895 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 Sh|kFklN}f|cnI1D_WuF7U8vpw literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/tmp/compileTestJava/previous-compilation-data.bin b/jfleet-avro/build/tmp/compileTestJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..b4e264b9d600fada56b0f6703f5859b7f0459712 GIT binary patch literal 19854 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 + + + 4.0.0 + + + org.jacoco + org.jacoco.build + 0.8.7 + ../org.jacoco.build + + + org.jacoco.agent + + JaCoCo :: Agent + JaCoCo Agent + + + src + + + + org.apache.maven.plugins + maven-dependency-plugin + + + prepare-package + + copy + + + + + ${project.groupId} + org.jacoco.agent.rt + all + ${project.version} + jacocoagent.jar + + + ${project.build.directory}/classes + false + false + true + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-artifacts + package + + attach-artifact + + + + + ${project.build.directory}/classes/jacocoagent.jar + jar + runtime + + + + + + + + + org.apache.felix + maven-bundle-plugin + + + process-classes + + manifest + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + diff --git a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html new file mode 100644 index 0000000..67b9558 --- /dev/null +++ b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html @@ -0,0 +1,72 @@ + + + + +About + + + +

About This Content

+ +

+ 2021/05/04 +

+ +

License

+ +

+ All Content in this distribution is made available by Mountainminds GmbH & Co. + KG, Munich. Unless otherwise indicated below, the Content is provided to you + under the terms and conditions of the Eclipse Public License Version 2.0 + ("EPL"). A copy of the EPL is available at + https://www.eclipse.org/legal/epl-2.0/. + For purposes of the EPL, "Program" will mean the Content. +

+ +

Third Party Content

+ +

+ The Content includes items that have been sourced from third parties as set + out below. +

+ +

ASM

+ +

+ ASM 9.1 is subject to the terms and + conditions of the following license: +

+ +
+ASM: a very small and fast Java bytecode manipulation framework
+Copyright (c) 2000-2011 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+ + + + diff --git a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/jacocoagent.jar b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/jacocoagent.jar new file mode 100644 index 0000000000000000000000000000000000000000..653955c388913bc1da48628861590a3e9fcba6a6 GIT binary patch literal 292059 zcmb@ubCB%avMt)SZLhYu+O}=mwr$(Cd$n!bcCWVWx4ym4dGFjC@7uBWjav~_|I}~J zipb27BQxiiB_|0Cf&u^m0RaHwRips$KVB#RAOO1^|aWqr23Mh+!^(vv>MJ3I(4cQRec;Fx~P8_G-J)GX{ zfL-pzX@g9`W~(iBG?fjluBMVPUj0dew?+xYXfCUcGwzcRTWK2&CnbZlf)X%QWRm-c z+NA7Jcd)2bDXo5tMlSfH`L_iv7ze^4Sh?hGjiH$v%E~(|jMp&k$GLO0Hb1c2#_{-Z zr=<33S2aCyi9S$_>vN){4L;}kM?Kir!25;XsLrO#VnBeW4}0WkT;3Wx3*(paYtEpd zbR5m}cPT`NIS-tJqCMC8Q6H%H^cB&JZz1I*!68EKI^s|M*u?-406^|KN_B?GN&`3D6Iw4bT_~9hEGYOg+6IWtHxEC=* z#ZxdmRYAP*vM<8yof>l<8Q!$uoYo|XS>qxzm$}3O;X;rtSY;Xkku>v8f^VFO$_Hl% zez3?2%FBoy(tYS4_lo0DL{O_?D7`L&*YLQZZ&O1TaLagscciX!dyn7He}&`6`;m|Q zpBTpb6O(@*js$<>8gc%=BITd%F^-Y`3;n@6jj#UAe10wikO{D8mMVE@6bi+(M9zRz z2O9DPNUAY`9;|3Meu9Ln8rcW&IduxL_PP~ zFhnFxUdaYjnF>`omensVVi>-hHJ`-#N)|24&DBzZX(elSbc#PUS&nG*`*Q?Zwi9jD zn!gXJxhIV*15#E)Pjq`nyYi4@$nwQrXur>4;2Hs1#4!-q(vwI3!z(Uh} zBUyudtZVBuy{+RJpSw{P1-?bNkH&nc>0A;zim=1Jm)BwAph2%^lM^9kI*Hrgg?r<+ z7?~Uu$fWJ~mRpuu33v4U%EyFaVAca~P#`J4hcqtOBP7O=MLJj%153xMduvN$TgzBX z$@#5_sPHl|@k!}pMl z`Ajhw?HD36K$R1mEGw;r-p)q(q4|{r4^*+|uHBR>hO}0?=^ux2BO%`aw;!%sr z+Gbqpv8fWtK&1O(dvJofG}~w;7#Yc@RQZ!&15e80HSI5wjWpLa6G-w-AY-2B&l!3L zJdX)J*C`k#beD18(L^ljlOV|T8Z;v2I9T`@5#v*;Q-p$&1T*${QcEUc3Dd;LjB0u6 zAK_~LfWPs>GImbO+LLfG+4DLngjN8h0sX3FkbLz5I;1| zsp6`PLY-)7zwk==3c9{=zQr=c@$}8gFy6wp#4==j1^6QuxsWEHFo^3G^3vn>WzK-{ zNM6$h0E8e8Su^W{aAOoh;|(bOGVQ$uVDhUsVGtdvPQWd03dB>WP?#jDj#^HkH)mfW za_7k|iNJ0ZH()m2MLxQL`k*j7XY{94=Ci&FlCOVILPOt#Sx)-@=qEzDB2GIUWra78mN7VkTG$YY3}Fv z*qIhr0A*? z^z%rvL{dTF0}~>W;`juztFNiXenk3rY#s3?1P{0tg`W(BJq;Rkh4{cfP~?bEKB{ey zp9+1O?fEdIthCOZ%=;%L9u^i`KJ=PoFuo6ndLi=fc7HAZoo#mY5nHY;Fpl zN$zQq7C0T};V74JE~pE_kqsjofzLk36&)@$-wuu%RMYYt+I4i{9Hr!h z6zQj@?Aj$BUaV>T3JA~LRS=oBAAX(GtDri=Eb0*d{qm}oSkXahu6*B#)1^#$9{;1`cPRH8jvJ>rEuz15Z0AekkE4d)41mWGV^sp=(i!eMP zT8{X^B$RcIU=n@&I(=L+kt#qPdwMZfvot6Zqc(O4^6p_D#*vGp zx^e{gsTaMwIhA#U?0D>D81Jhpr+wR7nPjlCPQmmyin01?co(}5njLb``-Qb54x{+> zsjN|#BlUM!2DlY=6`;#aoHf=b2vsYpS!?tV#omt|!RjSW!6)eFuSc@@j}TX!j}bFz zOct&PtcZ#@-^u3bGZ0y#gW-RG`=c?9Fzb)+5&i)D@9UfY(D#i0M0B;1wCw^Pf_G+- zJrWFL@oXas`69D8g)^kZD|tnk1d;I62w_<&Ufcn7II%06#)kj*fIl`80b!7wF90tT zLv!VCrE;X?s&w~X9kwPpD_{4|E0BIPBjelTs(+v-mwy3+RP?IT8Hag>=j_mLxzK&HWcg?LHk`} z+`U?vo^UC+3Xxw9dTqyeR^s$mKY2M|*)vSX$8P3NeC)hDR~v@G?6DbI5E(H_VTRdZ z8AxKVVA55a&ml&3jKxx@LSZ5mQ8yZ}R|nb$wtS>1%9*uH#bl}3cJTx|wAd|lGI%&S zZ1iYDscp_$BP`WP=x5?Qu3Hz+`ijvsdJR&bwoGP=&Nv4VV0UKi!CeQ?t{9BGJumE8 z_9R9=-M#~VN_rsH!x2yO6p;p_Xo*tDB#Enk#p{>5cPDT9`)@`9F4gy{oi`W8oP1hPZ=oY!PkQ>Q4#9%a6@W#0{!m427znv4HCyKNqx`|cD zLli;~8Al8Ge6nZJNhpBMcGTrs%IQVFVP?-JdH<>sbAnKu$o`}sfj^Di|AjD=b1;_HH~+6fu2@x5 z6Im5S8(e@C5&|o}qRXv?kVrl*B18c-e~7dUq+VW=lSB|l%;dxix`{L6yxH<Berzejqd+V5+y^4Ag@N-jIzNpL$&*OeoMEpHVXZWU~`7DsARm zbd~iHBa(e5vy$}|bN|)?kf!PnQQIGlplx}1+Ip?D0+0*y0xHvWk5OnGG(*#z2|OO+oUCGd z$A(`iRz-EBVvLW`K&F`!vK=%Ul;C#tsGbhY{rlQ`MJ9!(_V1F4vDVZV#?4X!Z2bM( z8%HEP2@FaU6dvRJ=+I)NqeW_CWn`dmYG+ED_+W1JA3Wv)<9Z#4{V7oUL?pZU!J*!t z%Ha7QATMf5S5a}0%~TV|8jR|es(&ep%v-Q>mXuB?9;bRT&o0v~nud*>a#_(sdP>IYK z)5>VwdTcJGvi=zs^$@a1?G#%|zY7ehf=dJq<}!bw5I z6GbesqOwAVc^~4wfYC&~aJSpZ2h4A%_n@vVIh@kaoKkM&Dc`GUb`9g#Ymi-Exz{(G z;SHn6BekEWJ)p-b1^ZLDOQ_wMsv6o*vdD8r46c@4trG#sjRZ;uVLz> z?6Q8tsB^oARpTgHi?SAhn8Tlm6P#6DD##Em>RezzSwTylM?*JLRc5k7pSWqwa-mb* zpgBD_Z?aHTEeGhIq|i!8aVorPP>x?#Q|*w{j~l&yFE+tAbCc09?ldSRi5-j`MX@`_ z2>pbljkJnH-e2V=9<`$PTIY8WL4d1GHA(^XyN(>xHo<~I9FO{zMRH^z!}^Z2g-&kj z*ZOa4H${Q2p)cim=L@(+xo_WIpq33cQJ`+BI`1w$Dz{u$wJkN~W6V8d78q^q6$Rr( z-a%0wFTYq&kocz>X=P>oU**mx$=K2aa>@JoyLL35c$4?z*FaUFFA$H0SL#MuMcX_Rd~$MXw6K0cDu= zmo{Yr07M}+LtStL$!7Mnx#HgGPttf*==~ERIC&lnA!ZU1Qd@%bxkQs(ws&Rrm@~>d zpiSuo&UoeKh0EdQe+M^<{oJ3NGogfvls_B`C5B;dv>I|7sI^s2>)Wr+VMTu z7dx`!D3?f=8;8b_mi&iylGBmC93y;Yf%|4cL+$$rd*;Z7d#5Oi=@juw%I%o(igsvT zW}kaGQ78H<@6ejKLiAj;xzXBsk)(D~BIY+rE_*w>m(CH+21X!Zc1Le%(%FOVz3-Zo zFNrpfb|bCe%EhV^C!>h^D90^o_ul-?K6e>z#EUIPcD0PM=3w{*h)xjjSfJQUZ zEaSF8;}mU^U-iwtdA!BC)|`Rq91A`dQoc&1GhJ&8a{8nxbe`93&zp`p_gSf*@3}kQ z0QAAvAb0wUb!@n7PJ$ceqXf-`t4{%HBK`-wR60HOkL%T$F4l$v&p_sU5HPkJbT}KX z0U_F&8%Z`+dAbDIWhjf)y>jKvt#Up$R_5J0o}Ee==osZLJ4*+n&{zvVrbsKQjpzL? zC^i%1PezUifk2|m*=fyJN}l~EA@PlcDhQsM^Ezi$&*pwMU?!ctk*1(;)fW<2<~VHj zAY>chsd=xdHJdSA^z=9SSfnw)w;a*RK1_YJ*>=-(SfB0+3<}}&^tNR-o zHRCWFlGzpW>3zoHT#ImQ8OEQm6`e5Nkvg;z=^=zsCNf)PDVeH*4!2{9L7A(rX(40i z+HvXDnC{aTj_){nU5lod|17RUK?A$RJpD-@`DXO$j^cA&^~$J!>xeA8iGXmpujHI- zp7QHo)QOG?7_EDa*Tcz~tOQX&_HuFUG6W?jxnjy3Vpn zqPbl)a5C9$XOP?OYLiDv6U(i)hIs!qb>6xhgY)xBq9*c$QAXIaya3v-hX8^e&|9X$(@xE#OKPWzJx) z?4o@8kgok3-Jz(0b(ZBp{{UNSt3;*>b}+8gXUGCCQx+R}O^jC02Nv6R(Hm6;#(rA6 zpJMn1BoWvVpw!)Oq-%#HY6zJvmM6!Ckq`TYJ1hail28UJ%52csI9I&`cK!f z4*sve{%_Cl1pgX=i$40DyP+S~JdZX+yTHzju+E$v7 zq6wilM5I8vxTMTkJf)6#ZOV!j^^<^iDE9M03N{M&y?*+o5GS`oZX3%KhxcN->p1I} z{g~%CtLN+M6V*?g3o)(!qP@LPxw@j*!g_jr#M6v}H!v7@ZNlFnrLtRxelhb2KewNJcRO_TQ3JHR_s^T|B3I)BKlYdC@cv+U; zce6g$G_Jo|fm^@2i`78Yal$!}clegLLt%}`alvXGJ=ru%8+A>8N zi+4+-@RJasI>Z6D7WBS$C*ADMl~wbWng2w%0O704Iz7*zDC38r|K6awwdWYck9OK0 zSn&bh*au_@41L?oxyvvemruL)7!*Z6oRsvwc*`}KtUgyOmYGEr@8R##F+mT2B$O?5 z${=5mP;6PEAf>?a4I%^`6qM%@G^Xgk(w9$86iV|4&raKoK`N(rRS?)1Bp<{)y^IVP ze{o)wKoCr%TB*AzI)eQ6c&u^rNps{5Zi{xOfH8eMGtZaAEnTw5D7KUabp@r(u^i05 zh~%dxn89^F;EdEPLEv2tDa3~qm^5ugAB2KxRKix#gg@xs3_wL;$4-ef@pMZ$U!rd! zt^ZnH@R%@|0MW+_yc3zR91`C!P`{vL|EWHt13FeFILx zZKIatC2`gla(>baEbt7Xc$ZLP!uAM3ZBKh0>=)g@$hUKVh?qm5Va6_L@lEu(V>o?~ zq@U*<@i6neV=zw%GPI3_9^E4laP6%kM}^BR|1kQ!yH8)86b0^ScUo=ap7*Aj_7!w~j!D*O$_p8C-bG)jA8 ze91LFF8cK$3$EFrV>0-01HW%|%0$7SLi7QyT&GZCpVV&9?K`zWBvAv*4V+}wt36Sa z8z!2&Ihr60UqDNvlL3?-B=*ihTHLkYV-9AKz5VDf2}s)`%y@ZH{>>EAg2NO>aC=l$ ziUi}1)cbgNxZ$m#wetE)J9ihwKc=rapK-f=|8#xe5bR23kd=Q@g4MsAG_w7>gD62; z8xwO=DO-J`|IP==D(|kyBdA})DUA)Col&r1Xy6)Rhv@x35$d$T?O^0@s8ZaAA+;wA z-N!ss)vE){B_uaUyh+Rxc;@F>txqSs*+{DW95N2GvJ!I^cq>lXh{u|(*h9aFrlz~@ zr(AnHkEcJ5d%nH!`Pd?WwsLZ%b($GIyjL7(A8|Ymd;1DS69RKM zEloqYEk)kIf_i^XEZ?il*Kb-mSiLn&f`FZYHdj4t)M|k=Tg(XPagHHUwYZMLepG@H z0by6bfE57gTcd^*(-qN0%fe(!Wuu#6>12fMP{^3^@2$;YyV9Gfjlyeadv}wRi!ttdheg5`-CV) zYC)%i?|`m>dI$_e^V;vkqZVy$AUk&82qf;Y$clkrnP!Jk3 z9olM!B@W@Fv-S)-Guzop70V2LwXtd`&+v%Cne6r#V;O`8mn>|tu#PoL5Y4f?yuD*^ z-r>5b0dE3>)1F^%jF2??k3}>bC5j8g)ixL|c{^ZFotm)oS;nxZw5Rs+TB$%K@ExU?Xn7xG&C-oJAB8mRUT9%4B zR5xBGH5S$tT(W*6^owEqS%;^ZmTWhzehj8ZqDKOG6YmA#WOnU{6flYHm8F?ft5g{v z@uCbRAH(XnQtRgKOM^ifjB%t*y;Mi$k9Q7FQdxa#7y>_4m;5DEfYDdk@BELzUmacO zMIS9t0or(i%Q0y8%^mEDGL>s!h>Z7X7Fy|0<)*_KySs5*8} zZ%gi3DhKsGEdgbbuf}x424Fy~+87|Svek)emA}+jcY=v+rL_c1W*O0QQx#)o{rYJ1 zsv+2lsyb`_5fnd9RB;E?jWdvHS3S&XOa`pG1U{P0aLbYvv&YdbbLwQA<|cpi!l9$E zl&e8kzoQiXi5A@Az;YSyh4SV_QJ-EXr?R-xuAA-2rPz-3wzh3I^g zd`I7HlXang-$c7E(Y#1_<3<*q#L?LKCeW8Pb)B>K{l1i+q2oJDp<9k!`Xtj8=XRD} zZYk^9D6Jj24^Lec#g@CEeXp3He88f&FZ=R~vb?8G+d*^!!~yd#=8*yIdxL8t!H^=mn#4K!&+L zsCVaKMa1V`$R3A3iA@%n=K6+8Qj`1p;Ca?-kJTlr(RI7el=J0R$FBo8o}Jei9iPaa z4TRsmJ*hOwf7j>dq8-rC-)81&Xxb?6yE>4}~H)Se&#nr|L zW{7jfXU_TQJebQ=OJ-@XAd{w4z2AaPh1(`Gmd2h`?{i9vj9l+0^@<&9M?s)D(}BxE zc|jO9p3{cZTX<}ISJ`_(LY%H2BR3NyvuVU1?n=$|9PWB5T zQ2^$)sewI-uJE&BX^WMY)Z}{)q=aB1rRgenix* zJ!pB%v5)A{B|ix7QP?Q*4ahh+_9xW6|d43usrrP}Z>YM+61tF6^h}M+j{E5Z zhllzd$0HKmiX8km==Z>7%k74yBsf_~AF23$REb$i)(t219dE=A9pJ?rT3-HXtn1Cn zb6s8vG%V6w$yU%?M~IU1rk`37;P)(c@HhBhEQv}9H{AD!AwyvQRpHF}@3Q3oejfK< zm2nXRVXE(T%*kpW8;i)d)OY82LzM{z&E)$ z?Z5!M?9jI3?bj(xxck?~C%`;^?U0gs#N3G4ppZzhv!IQj5sr8jXcivJW*Hf}Y4;i3 zpgV@}XgDbp@pC^0rP6(IyB|)2wq%N!q;L%|P2U&x5e$tg9w&Kw1T%6tQDB1K9v9E= zhbUD>OD5zL$gh#Pgo2;+FOoOVEwNV^n=)kvxMZm?YXeSk*VLNu=j7;ndHa3B`F=30 z7!KNwbeNRAa}csr2%lyBxG*4N8C+-k%P)*}wsmxW zj#AG4y#IcNP5ViWP>yhY$Ut0vt=S3j#Zbxx!nUEsNwN!uCDe&C_vz)) z;JSnw=`kfvPdhZ@sm1E3RI21RHLFF6R{N0<7NKrv$X6~!C~L-UKYKsd@_761NU>%j zxUtTb-WZuYy?5_?e#KnBe&cu|_2PVJ3Wi@ciZq`vaGHods0=s|$6zzitk_X=*WV_* zLYvNXIms6(xB$&EM{O0@E)YX*Swu5its4xsatI70<+m=rC=s&+Et&?;T98lZ7|m@0 z1YlV-6ojqCAlfUWST>@THKPw|5iQH_x zVyu{$5l9!g?uvjBLf33l8Zcg~zl(XNzwhU#HEeFYHe=S9Dmp(YC=D@}4_-^MBqiUD zD8><0Q#lO}>ZZ_-Gnr18r4D}z>|SF%h)j(q?OC$3tSYM1WFYFLKDN42 z@3&TQ#P}tLR1jP&1=_x2uZW8!f-)h)PH99|ps&^A=@kb`AL_zj_GJr;9APRf%ijDm zN|K%~s4cCQFrheIM~-U?ErcE|GE9&g&(=b+&EB)4X}!56q7%m6asx*&mMUYSPVJCp zj$R>rR!*KvidpL1R4Y*oquQfjY)P9K7?X-ws%EM3g3`0yfNiT`>vY^(q?0HtIdIX^ z0T+#Yr%0JlsX(LqWLrxMao8P$j-V3KFu;!(+>)7^yYvG-k2c6-&zpx7a)e4`ZcdQ6P;G&!R+FKPbdqUA!Du?Fl$;oVPKUCH-|BF(4W~gaP#$ zsTRrh^&)(UvvY8co`Q*H9pLq?2<=so}hQT@0-Umi8Rc$?;(UI=v4i-!tLhy zs}}_b_y|tYN8(b(bY`5nmUVlp7({TeCKP=298CDo8w9*L`ixyC+)VBX^^RYG@mlx1 zLFo0>gPLHDIkDqzoBBCmH_ElJLe?g|7M!ONDevO+C)9)<2%!RQIH6tfvN0>?mm(OV zMX+2kGBu@D)oAxE(VqNHmOp*%K-JP2k?qr~Jp_J|`d}BkI$@wy3ct!}KPUaj%~|(? z)kQ~>Z750tzeVxfSAVfgR2oam%!%rz@R!4_lyBL0>0tgqw^1cqb7_t^45`i) zVye!yp0s0>XTh3PM49~Sm+BCCD%TTE#Sb~Mw zuqKvRat@e};-z+<4y{`~-^$S(mA<66z8{0MSe9m!;)ce+9i+Y_yIrh+G@MCx^3`C~ zTo8J-{M;e|AC|)+AE}nlRLEqDtTLZt8dlVnSQB1r&zMw^bXA0-lC(*-Ks78VF)an4hBm3qCT3z_d{M+~y0p0KMx;*iu*un~0`567IxqYq>fq%Fh#4n4dB zy@|cA_i*G;v7K)8IvzbK*~VcNyGMWY1{6U?MmNCf`5s42{cw1p<&27y(KDfQ(2#&D zY{fR7o2Q-Ri2&`w*icxHmh7l&e1Oy%bOc8&?YU(S_5iql$&zh@Cif+bs6!c2i|KJR zC7MCKYm1VVE_!MI3iLG?fhnGF&`ov60DNWBIaQdA98c-5u+j3_Of9EKFI*}oH(tKI zT8R6tJjO<6`GKTk&GqBBB+1FpS=^k=LUNn~k>*s`Tapcn!+t5h5fzysVdiHW#>Gh{ zMSgO(r6QWtb8DXbt48-AkhHh7+>^OkzlN?wknI|_x&w&nV~2T?#)TZrz&2oRK52{C z&PVEpTw`2oGxUm(q%48hBb!h#cH!+;LISPTnNU{GQLW0dr(TSo=v+6tp;_LR08uIO z6<`$VyqP(?%MF<4M;uZYmL*DzP(5f?h~E~(zF?fY4Ngtr(Td|Y*f!#`9;D6TtERX; zGPe&?hCOu6UfuF>I)REFnM=HF(nH6XFiGRf@S~`DqWawPoX$8JQ>urAZVx)B!AuyQ z7l|lL`17ubG|#5#V$4RMteKiCKp|7qtyFn$RwD&ElT+`dR3s-x9w+2O2gFc^y9u4_ zmZ0NRG5h;`UDiaRHx!+8XzDYb?$n4`PFcC9#Wo&yR0l?&Cl#JN_$eCsy4DdC!X1#F zo-o}LqJA#-YUDdf!kmql|IYj8HTcUX!E?{#vtWX1ES~JZp#aFsrfe;b-&&R%+8%() zp1xMN=;`Cge1#%~?jC{nC+bz5_n7dU>ZisR(jprE5VH131Rh^r&5c+-;ojLa|5bkvb~`kM~f}Slx-s z#r-p3n*(m{b^=_<@d$0FL9HCpoGYcUP}3bZU40L-rnBG+51r`m56L|9cW-y4yhnl- z2kHsjse8+v%y4%%5w_!F%y#H7O2_YkZC!lmoj;2tYWJLTM?RUA5EQo~*)XG8&OB~q zB-Pn`6zHTTCQ4oQ(81;8=yu7`?UJ1L*pPAwDqn(M`T&YLCzn*yev!33bFAnXEBi*@ zx(QM+#4_NBF8M_6Fla28&D(tF>=kfXo3NXI=e5oZ;@^@fPkl{xK0_%aU-x*8jh9pM zf^U4F?bw>S(eqAm?3iw;f(SkORy42!IXn)n63n3JJw%LAAIN>ZrS9Xs(EU|6g3%ol ztp8EMGh+O!x{>_2|%zqMXnN}7KZvnXFO znpzY?DV1ezwHgr(G+_Zlnh3}VOQd3MECY<{Db!3;SJZ?&Z>Cv`)UYIA z$U%eBCN9%!j@|4#Y^KM@wb#4=%nXulRR_IWNZn6OR6ylX*w}1JBEu3wwx%ZdtR=_C zTG<&g7MsdFzc7Mv7N;*P761_`H4Q{tN`@H|u%iU&PNa32stz5&u3 z?1Ppm&g|?`c1c7ANiPw$S2_*-UpZ22vM7;lB%j-0EnTI`l;=74zsA4bgXs%c>Qw{~ zy@Qxcn4~ITRbJh~L>DX>W(CRw?t^YF(l);WjHu2>+H?--`9@c&w1?#oL1B=gnzi~D z7Odp09opPgg6Wf-`O3DAp5|-ln5=QN2vCBrCxU{_>zJ=)#!hm7H7RTsYDrcGNn+3y zpr=CKlZDvZH3czH?Xzg{lB_fyx_m*m9Ra&@D-c%Kn%3TY>CW0gcAzp_C9@mglpTT}G0q8R$TvK9Lw0+82>Yb|Lcr6 zL0T4@0U>0E5Hg6Eojkrp41yLJwZ4_!vei-^Vm{o_J_@K7Z z65CdF+ZrnKP3LT=o8^q4)fhp)ifX1PtoSr6P(@W3hX#T5JGAwg!P9<<8d2o?x7zqk zP#=wTqpvLaB3i}(Mt>nxL>WTFmk?Q2t$h#LS&+ki@x6KMP1loc(kRCdEsIVbWun@y z<0cmIPrSE*%_|AIb7*PWk>Aw)p`j`Rx}{TU{ZGK>L`pN+PiG5ksKuC`Y^rnwtZm+mUxMxh2BXOVu&o=?+TOq+{rRU68eDeKSqnx zAO@}7RD59n6%hdIt-)n~I_=hfDO}|J4i!^9N1z5A+jGA zeL*QJFoOj)MzBl{ScUSR7cqx4C|2f_qIIHA*Ow+;URv6jb$tUrskG!*tJJRSeg=Q6 zzwBls1j_(N#3wzTPWOD?KHhYc`FcBk<^|Lm2ko?QUvK^4J@_bijp!D%u|V9JCY9dsG`XXq7rHfk|y_ zlp4jJgnl3mT?naaE(P7;#Fk!F+*nU7Az(7a==FFY-^K+=TcII^7zqel&sgqGjC? zAj}$va>BXIstmMjARrsO2z`o@Y$_vLVCEp*B(mXH>`{}pQzOK`ez=|yp%1A`v0i%$ zNrGH@QnvS0{>Bgj4#Y4rbF@kc)RRSWX%VCmDZ2l2@-_qZ7Wj$p8ce7`KihbUDpeB9mNJfyFT<|%d? zQOoj7!{pRjCUdb3O>3JP(efg-Wn*{pUg)orN-Q74Y{l+cd#Us-fhAkM-=uT>w9};% zP~9)6(Zsdm-7nn6qPkrqXlV;FUKQ2~BX05=B)<}>D4ElN^)fsaCSSQ+r}84XJpf(X zc#AaxIusXs@|0cgwa}Y>5Abl@(L?j*P@pnOXX*i~h zEk^Ue;VZPbG`nhbd@RX)XjCgQD%ra!gu^MtJ3BSlr|;4jcnRm9S)Sv{kio%)K;KQ@ z7R7)0hBmc~RBRZc-e8jJTcguNNyk4X-(=sV+&r+D;-6!z67-W2JI=+@XbI%B>@F!4 zt4Gfl)wooTE#8X6m?dDbJ>mbA&Z14bfDQhLUm2nP6~XcUAEdMYQKKeb1yj1tkB=j-@?wYS&gLT z7@{?c4i7I3BqE1s-oZqg%mgK%dD&_`l@18)1PijA2`Hdd?eIR`w27_L}^@ zb564cYN;XdD06_|G7qrakwd`+x&&p*P0i_jkr32NA3~PIduu+g0`XS_$~fYHJ04>l zU%`;VEw!M}Uys$c)vZ6(C@*iVKNn{z^}yeVxs-+GlISE|Gg8T8iJv?RE0h!j+2UaC zL==R!ffoAE?hsSfb%%0pNHA$U$;{E^KzV86&q+BKAE09I_9lq7y98by0$b`t`R1ZV zm)e2(y@5+^-XUUAO(}}v3hETu{^qdN^i)h&x6Qm})M^&<5RKp@G2+=;D!=s%N~*ho zA-@TKqAhHzfnyv9&+67>k|gL6-`Q9wNGCE!N57G$^Szfy|DG3u zfd{oIzKEGag6mjHKxH_O1x8vJ2VLPPpGUKb%E6=90JrNX(2;LTZv1Q7up1{;Nv}j)_9l)(qFji&clxCUqoxpP(M*BU_!_lk>?(LlQI)WYTJFYh)tqUr=F#dK#Y%5sl- zVGvm~RN#8&dLI@f`40m6tt>71k5R=;ytIjWfamHR+P#zMh;vZX}y zlQxr2rhGwb*o{@<5_9#zbIH;LpdRKn-i&rJ4Vifs4#9}&xo?5vjB^IY>));39I95L zH7Rf|MJ@TPE$s(d6Vyi1Gb)b~g({%C-Lp(t3FsG^V-?L;DO{4YYoOupT#!V0+H(=K z&Y`#8l93#P0STg@l3%!c`VO1_x*RVCAN9qd2tLSkiZ2_DJtlHv_EdVjMU zWJ+0P>A#>9USLWmGsq7+Vdhq76h-||PKhs%KNAMu8IWQKu!&+k#WfMMRpNJ@a%&B%0L{Ueb+EwEX1Jt2c!S$brWS24q+No# z3%b1c^1|NCR_+}$bA|cjTf5%^{?OpOdQ0ijSs;hXx$O@GM=8QUY0*eAuL^j*G}Q$g z17uVeIba#!i3MTeOCcAy0^YwPKa2H={#Qa1<>e9jE1@O-xpw{c75o1|=c#Dy;9~6X zzjdCM7#tTCSN}6b##GFCaSa zK%41t5MMtsPO@kAnZit)QNs)Z7FSJ7rzhDxpE!5eO@E(1KjQ;F9Ka2PohLVf4me4x zGD&PAW{@#YAZ|LsyzjO3L6n zhv#Umm4Q0m?|{qO5%^qMagQp9v6fR10il7Jfezc@8Pkk0eD*LlOY)nhhf|nhBd4;u zEg>d^W(27aW~Nzu5ufW5IHe%0DG$(7sZl>Q>4`CDUtuA}8!@Opmyr5ko7La9LMeh% zh#cby#M!(}qnrMA@Q{BP6-Pe|qh!q6;HNMS`gviAD17(6UB2>jsrEf0x;pB}EGj>A z4AaHdyilKb1@^?uTFuNc5G!8U&)@|_rvn(l-*oy%S|j->Faa0&n-c^R0cK&g!!O9% zNL_cFrkEuMJ>}p0-5dGBaeNkmmtRU5`bWMf`zl#-1ukDT5zNzLMsQYep$48BwzrFc zr(CpRQi6*=8>W=ClCqNk%HdRt<6&FPAzg2KdZ%h#Gp|x4Hi@|mTS@X`m|(6(g9C5` zD=$+>bCg;zpH{|MTV0o@0@pKpmsGU+SipwM-ydkE0Xaze*cu1ueOp^ z(YH+7EwNnYZm8R8tSj6NwkOs?t{piF3y@>Py)D^`#c6+QTkMQBYTiouEH$vVpLjtB zdLY2or*Yi?WSl}2b+r2DxLlB4N+&Qj!p-4Glc>(dpJ?-&?!&@SgNJZLOB+GJ=qHG< z#1;Mw6J%yeKg!6oHG|m<8?aY;TV(nr1ukjqH0Lqmwkt zk@7kHR8lroVd$idrmgOpXY-6!Mo&$=w(A0vw4_Tpop>+9VB-Hd(6<>vu{kiO0b?#e z>uf!ma6}JAFY(QwHS(jOLnP&ZT%liTTq}K<=Z?QK`@tu^VCp~wp{-09ub&2sxRGou zsRxK#pOPN61^9Q;KWdT6N2Yd(KW)|PpFd;xd+7eB&Gui~%>Sj?R+d!UP{H6vhXE4a zOAfjb6A)V%X2p;<3xjk=grTSgHW$lpja3@$hX@)Jb4Yad<$KOP?cOjcNlRy3xN1L% zJ$uj^16zoLOA3BC-G1M?&%Q4Iqs_c@1;Fn|OuP9==r&KwIXx8_a}eBuciw=d*ZW$tEj8nKgn+g~p+c4(0&@WdK?H7}PRutGB9 zZDb(Y14R-hE^W)RV|7HUrHMLN}WbU9_fi2sfP?o{l*} z0~PX*^lY{ag$Kb(EH{R=HdBq~11}H4cHx7U6*;QTn~OmT3c*it1?iUkf)Cv{y9{bR z22(VJ5wlR=6`+B+kNj0DO$DSfTb&PDU2Vn}>!*TG0qP9|KRvA3hwAV6gKCli_gtQX zmQ?X|Ktlt{dxJ*Wyfp+6Rn=a5SK;pR{wE8Y(!&AwGAv-}3eXHis7lsB43-(q1lINl zxWZ=&80vA6FNME~dwqu2?~Xiuh=F-4k-(691xfUuvel*`vUDU#!`tC;!)nwUn!+3K z%w8n5j|Z&KQ^ZVRH;Ofb{iB8`?VL_==Nf&N`GCJraZ}8L-BG5(U zcjwg4LpN8rOU+(^v}?UM8%=aIP1JLa3SuNlpc_Q+ayO$cls+NGBL*K)C!rolV`GJ~ zM#w0C-_-YhGNCpF$YKyJIO50<`{T z9L{}F45q&c3_+=YDm4#IhU~SY`4R^(y4pJ znA$*Ud6L=W9D}gbmF#P#bt29rbboYY6Fc`07`UX=(>CWf>2& z9JRNX<4p=RXSN?EdoyLwU>NO?_UaYJ>t-c?WU`K?BZ2vI-MsHg0R?Bde3`DOU*1!xK^DvDnvwx3vk&Y)F-Z#@i>xMfskdcG7kcLVZFg;Ge#w9AtdPB7c9X zZ=g)= zXSW($;Q7zIn4|bxZs{+JW8f>6{;$Q>f8av>PmAO4E|lt-Ba$-m=g)+CYqk6kF$7=% zs$bu%G=cyRl_9?qH}Xp`p!8k*%CPxTQ&S~0c>zy8c|P}a*Hn|MJEKw4qfvNoh1fG~ znI-1mO(D|>zMQGYt=p&UZH}X@sh-dG8!|teH|p6V4|l`wa1J0m{#6H@Q2zBAp}NxCxgCDxHd#IAzNw>Pve^zsrt$^H zlq{3OMg?Ld4|#&g*5#r*5YB}NNwF8v5)*&#srD`6*N7st6I|TKqV)YGqGrR_5nx!c zTqFrAVLfGL)&imc82zAH`Ouiu^|=5U|2RGywD1qp;>r}?fN~V?gubxl$ZNH>@dRvFip zZZKVf!cVd}mkn?nKZX;UA%9oxO8awB3D-%%W|%~u?N`&UBNSUiFE0{?bNo^hP%+xm zKNl1f1Jn8C_5j{^Sj;C!AE_jER#=BA%_2^W{@r2M8LFyMbFnryBJ>Vyib6bd0P#NR zYE35R?s1 zK4(D6P)-cplHD2&7?$S|wtQCs9Rpe+3#sPfxD~thdp277y_IfGPNGUU2?r$36~hIF z5kxFmpOdV@$N6|dZ^`g)z>SLA)NJuk2k&K? z7ZwVa@E>kiHq>hz0r<>vc9n~m+Rljt2Cz)mZ7sihObfLgRu z*c>`(8~F0VJC_HS&@Bx&mT!>s%^)``pHltyf;WxI9M4!NMs^ajZQde^M|4Ra7LY6G1WH)7h}9a9<1$m@H(+op4hIN?PJQq(x^aV?A;bQ z3^F%rLp_8+R7gm6egKa;n4`G7Y7;!`n^1-_fD3Rfn zjsKg>a`dvQ{iG`Hr%YbS4mAPSpqQk$971g8j1{3X%jxl|;X=#hP0orj+o z)Z)@YYLIeV{*P;CAmoX(aiPdha`Zt4#%N$|`?RJO+F`U~Rz@Kd1LiA1fS0J@yruBZXD;dmN! zdeO!Dh{G<>lbk^b2v;j2P->>*)8!aRuI?2cKnw#uboA6(5)={ie%oS<`bd(?yoC;T zPEIynwia~yP0d}5G_56}W(2VCvGj9PL%>;v|z$S)maHmSJ6_Q4nd@ea@BZ3b?SKi(%Tj0Xb zGMyJ#W63$8AU6bSNl;xhd8_}BXN|M!9m*?zh4UnDgp2Ynky6I%!C z|0>cbR()2*T0!{$H5v}HkGi2;DcL#&_otz=kMidfwTh=PLIaPG#x_NVG0SBRYC9aoV<-m#j@|6d0h*QiO*>h-}s+ z1TnJNkjx-UyrrED+Agj*r{4}aO{#JjzuQ`3tIgaUl=~aAUWSy2I9n&X z=&3hLf7&C(kc^l}#H!JXC{s3*1H>CnFDA2v$8tETq{?c2_UB#gCB{NGzhe!tUBl|Q znh6dM&H1KP65&Q}ZaNBCY>kZhwgd0!8Yy%vN6bjral>z&W2GAMRoa>anf|Z33Cri2 z{E>Q^tEvD&H<+4Xu{Y^QOgB%EH4%*GP0Hs=hb7jUJl;*#8htWB0pMCqff)~gB7@j~ z8UzgeTnZr!+4q>pS6AmR{F3esaJ(#WTAt7GJ zRuzvbWf=}B1aqUAzM~$Fcs+Xy+(CM3)+&=@DAhKgkDe9~Tm3L|!?y2p(-~m3LgR*D zT_luMZnF6Pa)8Eiem%xlg1;lJnY7Y0ULyaqYK?u75K)ci>;w?`;E7zp&Zdh-K%h{S zQK64XQh;zjKCbPeW_bENXebbSVxg&1b562m-+nnVwDF_;5#xyX>AylhW@Q+DSeqaZojb zoGigoi9*{TyF?#yQr9m`UH!5wh>Ci7> z>8z#H8&VC)D}prvG|DUkBfIC`t#Y+jp9H0M83g20YCaYcX_{nmJ;oX{(VXrp^pZT% zeSOy!eori3+5k6LS&YTal1C}h#M=fi+x;y=SUX&ed)<;KGfW%@XhISLk$`4&J0v+% zqhsls`jGOU6K*0>`Kl~d!i8pSEva3Z-V!L=WGRk0mmY0NhtigA(zWjZd`hz~J=sb( zh9H?imNM&iLPdJAV?B(Thbb{1$b3+HWKSIOZHUPcx-Sd$h*!T7+TghpOmJ8`|+V5H8OuIW~M_`M{5^64;M0KL+#+W8-OfSu)cQWm+3K zT;rvQ;A2{bSURIY`V{da9G}OskV%vV_gR!X16@I$Jr5plaN$K6Zy^AA(sR?9e=^KL z5B9){;&at>q&(5$UaI-HSvET%P^V%u%&}V-Tm78q*z1S$bA#05(}xF;M2udgvFqzG zq}h`uQ|&%J7*~zd%8Wcq*&AQ+*W$Q2Y!|A5NoqmrczPxCdC&X}q*Y23`6PFM`=Dc^ zJJ=0^9fqymOMr{ry(!N>!u4fACql6+bDmIVJ0;8TQu5*LoBnt@*B$Hy3?baqQR}T$ zqodI~fH|!QeA2|o$Lr;=xGFwmSYM6}W$|gr})qj!p6uNc}>t+50{Vn=I{tS zd=k7`d`(;&ksT(^BTKgrsp|1P0DuULIM%DzH{O-#0wTb8X8C52eQKUP&H@J;vBAVX!Tv0Q1vfJO{UXYX&u)7OS&~4_{Ycs^Wku&0a ziBH^^#ku0#k#q__R=pu~Q{u(g=0dd7}ruTu?M!u&iD z4f!kHb7znDuesMxuk4r@W2NK2)|6C;1P<4dZl?{fTeJ7kCbBSwjX}3J_E%kMYANS| zJyeUf0T&$0H7DS`>o^1-{=$yDdQN_OpYYFqT+S_t)Iz78%^{G2Y#c z^*GfEWF3$T9$-C%NqJ9>@{2wS{jg?H%y`x@sMo_k>kB~LZ!(ZiO-m4L$2GRXTHq-m z+36gC&n?Ogqv(WBDa!nY059tnxB9(`9dHvuE=o6nsty8;+hCaAV-;!wdL%9Gd;U=K zl5f46o?kWD17Fb7f34=fjwu234Q!pAXw96gt(sJ%9ScR_yKbpCv722giQ_J$mG|JR z^_lBQ1@ZvuS4I$`s>Gi((2JIOWFNmbADk1k9SqXr{m||4;jw!?^i=OvY0j>w1I!e^>E{<>{RHZ%6 z&{p~JWtpc_t)+Mo5ZsHr=ib88^wqi8xH$BrJD$}jw1rD^;%c3w6Kj;U;G(FTtK^U{ z!V|i#;+6+FAi-qUE*%{)H8d^GMhQ&JjoY51xoX42>YG*!E#2na%;hl?Aq#U?8zvZK zqB5EN{?dl%4|1Jv{K|O{^r}g>6)R=jJDwB{5C&9A1S-KnOSr$BbWrSi?w!-8(TJ;uchFGQIerJiU1>cSTC!ol!4x$y;sO#U?&ET1P1QRV-PHkz-_;1 zY}bm|p?f*>3RRhWhSYlN0HYT5O?WbRwVY-8xWhsuL$+y;1grJW!jeJ^f zS5platu)%?pKO#|8o7!Z0X!5`>uSia*D9)&DMXxV(H>Q`ngz3l2Akb~Od^yDmL5^6 zs?QyvOPYs!oJP;qB4|=qC!shwZ<~~TwpU9s0{63mSK9R)16W6x8SyH1BL&YG(xn@Y z&e#%cmxmaH)i|9ld{}T>8-NLbw=-_;Ch^vEvOel)t+2 z!zcq43nBl9z${9AXbo~19)>9mCrppN_uPoao;Ts#cCy8bAbQUad7HM%jUH+|>$!^5 z=#bbovh%VzGdGU*Rsh`LO|0HV6lGF^WRQX+RF;Ibp8`}|Yc|H0YAV#*EJz5)(s040RKS(T zm+NSKi~RDZiQS6*+75ZYUNE7J`8iH`!1vVXE{`EM)+z+uKd0k{Z7l6hK z^x7V#p1_X`luHK~qZfwjsXwmH*sJq9@GvO!sgEB3ybu|X_lUwqvhW*7lMgrO9P%&f z2h*q1pSOOcGa;i%r36D62J~>KI#~|B7;X$7$b*sO`l!V$yWx0lUelzoq9b9wxaw(w zjJE+hc7^~mc5@E6-*j66;RC7PhZDWZ-{h>RCrBc(h-DED>paC0*3iRO!=fJE$> z0+PT)Jpj37Fl3EDhNj4m6G0#GnC$lUp_UHb=6`;Ynl z>sn)LYyH18`5!>-|24pW0M!0}8{@x$+6vmTi*oQhu6*Q4D0TwCDrm^bmy}B1MEcC0 z7;WnHk?=EHxwYHbEX6lEPPPd720wS0==?H{JNU-gTMoHai@FxLOuuT%()oOS-vF-x zC7}mm?k>Dz*?x|;1YbFFDLwpZ{x(csJM!3eag%4f;_?_&2wj8`HFbe;k+*sZq9@%b zv};F_k<@rrjn#UJBeYJrTL% z6hn0ZS3{P98Lg0QGjmDVbPpufm`nu(^q%y_*os>2Qq-(O-fFwUD)iw|AGDJf&K>eS z0b26`*R_bqnh?IM!3CPhsU=8b*%ex(QmG3^P&K)H?2N$BG>I|$u zywOkCZrLKqMa6;KpcCzpp^x5a__-n{H0T|%UE(+`8-?Z&0XH*k5UJgsdkuj@t^GBT zeD1)gsL?E>yHXmzmaZR_LoHBaQNF%9y-H%HupEglgLo)M_6-wZ-V@53R3WVx;m0^B z$?1=F|JATJZ3LTJZEYsqWZ1`3Zm0XtlVW#XE)6J0Nzr^F#E4%*q6|?sqW%uv@~&L8 zLo{IiO58C8G%|BGCuGv7)tKnNPHbajL`|E$pl{=%kagx&8-Sfz1MNErsZ#xBB~fP! zgW(0qo+Q$!vzKKL_>!SUS{oR=0|Z~VaEt7M%1?-rdI(z5=7!CFJrWF^q@(S>A>E`e zVhf>pn~rhGet;lfXLLfP^=GCDaiHq$QsfK?QcD?<{xa?(l{})^;}DltLJ}eZ|540n@kEcQLm4OFIhle_#GZ*r)vuX!*4NcBFp{O8XW4`J$u$ zf9%>Cw}0-i!19+zx3jgTb+fkWQqi>CU`6(M{IL^duo@EKR1bItEg}+UqFwLCv|e?r zDWKRm6+{SWY3&JEb~ucx#4%sR zbic>eS5hZN*SPSmgBXJ#h}Nl%$)L&Q80>+FGh52X8}_r5%&dg!uuLvku1&-?V(9AF zGj8}emMyFTn>U%sK%T?83anilDpI0QH3YTEPt#EtV?jiG36@q2#Ca2(lBOVJfCB6z z1X3I=p-|#*(+&Fvs6()bhdLf@I&$%$nGQ{n-mxfs&5m0HnOO&_RrJml53Dn;(S;TV ziBZQ-1KhP=>VJ7{>CCJ z9O&#%79zUq!K0d#EMB!6@{6wZ53LD-Zkf^0wJ9z+YBRzlXC($$4HYSC>CU;T?oWu+ zd_zPQg0;>k_Gk7!I95DU_~6D_j?^omd}9`V2~K9b&c+}ks?;TYNmWtRL*<-rx1>NK!(o2hmpy%r*8z6kbeZ|Ecp``{$+`4xiPnR)ef3F?|LXBRly!g_dSCS>fAIM}2k6w7)Lxxv67 z3Miv3a6yPkq5~6gVs@3n;*}FA@>D;2Gt<|mm)|@cr~lAErx(c7Hi3~G zBd|v{5~92))ZX31hT|l3(F)U8Ja1ceuF+-n{5wqur!v-{8LD7xv<-u60h^d9R6Lq~#y_mh5Sw8$8@k%ukTuNX|j3EA%#U9Zz#Jn zr2Gy;037>EesAq4%wUHD4P=C&bTu}TF8cG<(Ct2o+v2Lnj!_ENyh@fRFW5>NtD^vthPZSO z$jj}u_eek_Lp3+_rwXLL0~PkQVe4u_0B-U(;?2iv4a)_<5GjH0d`p`q^Dt-J2z=+s zuTXm>9KahI0&sF;s<&V1U+?#pFK!nl2ggLG8>NqNFB!P>-#!>J^r=UqWt>w>wDAvUC;cf66n5E!vE_0U})=L{Ff9O-Cr8n zNZ;wNS)kwl`tTxd#)i&+RF(*TO{QS{4=z=;%9$#%F}Bav&-h^HE`kEBe&q!{`4y}! zd=z*m^I$~bKFtBfogK!&hCqJf^7M>i<8ouX`m5(+nTTPE_hk<6W7&$F$Dj74-H%PiNIbv`)Fj^9I&{NUBti*lC=#eZT(x!l2EK(GPy^wwi< ztW0DB@-85nMSi;8&X_E4XI$(e@a#&grm--dE<+)gMkz&<7%cn!v@VfaaRGk#r7!Sp zgwr%1zGHCIg*b34gUv${7JCm2Op5G~mE>a3{M#Ir+^n8PNk=52%1Cl!3664%OM6T{ z+{%g*)KjHpyHHweuz;BwvLHc3#LmDTd_WpiPf8GcKlgK!lHO-!0;eCNxw8QLVHtQn zz&G<??+zacBUf|db;0>9L-mTU|r4iGfJ$*}2V z8Qd<-V4&H6KL!rng$Dpm)yB6CjOFxZE(bG5<`1vbsvqfHR6(wG^kFS?;_t{8jl9A0 zbH5bZ3k8?31=(OHYSqP@t5;uB~qqIA1Yk9&RKSA$LNE*01Gw`@Z#R!oSW)1RgRoI;Y*A7N{%cx zn?aK+tqHP36=-3g&L4SBsDeH3z-C>ddGCfuwjS+e)S3-`YsprUUt5U zEZZwh9ke5rf&wvRvy>$5CFY zkj?`b?LMOSl}i^qWA9DNI{;H*bTTk`8GtZy$>jF_98>RUIpxAfhBhcYVTOlu$&^K# z{jM4^A#*%t^ONDw)|N5Ne2^ROyiqJWXl|S~62-~@^HX_2j_^v|=lOu!YPz7i>;*9;UfwBLuwCSp!yb^OdricX zzCrb%!SbU+)rfUXQpwE|7j)SVl+8Zq0m{xx^`ApL4ypo0DX67&ffg=Uzw|s&RRlmQ z0V>TE4XXRF+G-_oM=Xd{7NF{WQC3+j+DRMy49WF1f`0~4hO671lGuhz+wakJZ}4ZD zxGZQD>`^~XDC^@#2b_(gW?EJ^mbTU|n@AMt=md{Z>| zH2o+nYwr-MOG-8RL_#wUku_JB&#>mc+Jv*t9PSx|!ySdF#6iy9R(e8-DHf&AaK|Hj zMt^%wgg9{ycdq|Y+6>Ad;mY?~Mv$(9W!?el;k zBmI;Sc@A#1sO@ISShgbiNjXfaMdEj!;UKt$y9%Xe?cG;OXUrD!h;~!`e+NC*NzaL=DcfSg*A91hi&VTDE@J<9@YXm_k zO6K?k{KI0XoK*W{_~Jmx{*%SS8O`@d9EicVj8_itHm)hd>Xn##!9WJSOUNxvy+ zs=<>|LVz=PFMuS9XV+%|D3ejEmL*$Z(1ZfUU;^%~bv3p%@bI#3u$XvFyif+G*?sDn zKH$YZgPgMyCt$>nqq3g}+KzHMX131Gn;v+NVtsv{QF?K`C}$JDiv}uc5F>~KHY_ z5Np$}Kp~H^<0UC2gV+PD;%AvaF`6+sT__M1R2BM2u(XX;iVCh<@e=B{QVw%?LtFU` zWe&2vg!D%7wWo*)?Ts*gLsp`EHK|yOI(jn`DRi{v_<}N<5K^U( z*RItV9Gk{GxKdxF4L*B$V2y2HN~Cjtdc9|s~A@>l<;mb22q9wcbH9pG3^HXyEC z2Ucvfr#Uy&!4_!&(`Fwwk~teIyA*-LEN<9GPL=B5ceVF`w?hY(OV4!>O}giylS`3^ z%@n8UN5-R5@G`7l^q8e{wbR%!vcF^uCIGo00O^9Djm)HOnWADY6MiHmzX{V4q6B3) zFfr$qs9CPJ+qJ)3(Q}LL203-$4z6;4;Rqz-Mh6vAMe}jp#a3o0F9yBmP#nvZirE#1 z6SdFj99nX!QM1zKiH4fL#Gn&QFb5kZ`C@MOpd!{MC8)=F`x`43Aqw-k;_2hE5ao;` z6&IVdp%4*`n;xnpT~pkj|fey^r+A;9Vse! zP5MTsNSug|n|O#aMcWgZq}}RFnsoEg?c|7)4&Q$##3`)YV74goV4k=Hr_zeT_|s>rTLBNwP$bGSnH6r zG0f@_F#oltpT!oc0^ZW(P|`N4t;xF64JsNpX)na;7Q=A);}c1V)j*l_N*-!Jl({C| zTpf0LYcPn`7EDwNPf9lSY>a8$P0E}FVa|X^V?OR`xoCs;h1~Pejxamwm@GPNIx{1% z1&}my#=`y0@$H+f9c=6Kbl{ec?hG5j4}`bRI3^(SUGUXYUBTo}RtwQoIZr5OY@1)T zAE?bfKTv%JKOr##x$FzVVVidiyWN>4ZU8W!kR5UxQ)+thni6LU{YB2-FmQlAa^+UK zqr73?LQ?u-xXcuo{EfMl0vfPwix1rf8=*brL%ml6-pz)- z;c9}ZABLi!`;z8?h{n9w1>}vJxgy5SD&n~8AsHN5cWTX_!}1MA4S0&u!e0f@!wSO`1Qh&; z!hfbN9%#8{@bF4a*l71s_gO2N@ema7izJ6g#o3`)RJ@*60-ZU$kpmwLy0XrHtjSCM+x6gsl-C zro%P}j`!2&%Z&XUfc!D9;dZDKp3gq|?@h zQ7hE#VYPowMN_KP5u=dt=twwYW+=KAw62kcT~`(oD*kR9n+0Q%}l0a z%SUu^7hmZ{KuYr)u+*FHOukIIbGIv1OSY;IE5=YQeW*1vGHtO+os~g-yf*pA%}Oe# zWDQrQhOJBIaKslQ%7j!+-pLxqlxcEp!}ou}PMYwqdilSU7UI9n+Ef4QN=w}4E0k~d z)xXcc%J>gI>kk)8#n{2|%iH?zhGTzIV@--1U&UhRA0f@ir+~%axbWKiwbknaVF(I_ z0ma0Ul+xsj@N}cKIHw8qLM4jxp}$27YNT6O$hoh5-CrgtHi0e(bw9XEwW2$@tSclee;u$Hur6kX#yqHd^%#o)vX z$w;iVaJn{jOn=As=rz-+7gmxjl`Mc9bVX%oNnz1k*V(!=vkB9(6a3@ zl_P<(idB#YIc~#ZeEXyK8?<7DeizK{io5%#TsvtD@xZZdwUBhRB#u}Ffe#@jjXJMh zS{|`vYSwSm8bfY>1}XZ^w-E#s-(pPWho%Q9_&d^pYY+FcrPBwUrdDP9@yx~QfZ&ZZ z>_M7M4psgkvzZ?w_Nnded3W*j&{QY$BB5`Y^Fsx<=@UArR#Ieka7@tqzItOyG-|E6 z{K$@|h^?$)yxe)u7#Uy#GADdhW;q1PsU@qtB}K;7E&TCLAu8nJB}=!NEJ|`d3*g&I zfn)LxAj*Z?-^XqbP0q}8Ppt)R!kUY;`XSae6FSC)MVcC^R=Pq4nU&Fs?=K3s9s{=^ z9rBs|l)m73L`4ns!enITv7Il+e3{bGgWU#BY>e&^Sjj(+!K6S^6(@a$y zfN+L}10!2NI;Qn;cRA}72n9md@4lwP49sEf5a2oo9tvWBk8awR0T3e%=_CXgsAZEb~`hz4E42+3DAZxWiOLRh>yvqjLQCo>N_R?(Y9%p2M z)LF2*Pd20V0@g|`AIH1zS@83gI*h;3l@&0;Ii%3YB{(L6g(%R2=xmTl+Xk8dI*kJw zQFDtGeu`DxBDSr1D}vLWA2&wC z4u1Q=r4cYhC$Z}fi&fL4iT-=itoexD^vDupj}}7qV3%j#DECYSiV1QBeH1xC^W*iJ z-X!Dj0{uho0i;B>TLTe9$la`vL3c-U@zzNqebn)AqnX~h{7i@eTH?i;mL7;Bmh*Mk zWao1Oa5Oc4tdJ&3TKmNZl2X?cO^ql~I|N1j&X5yR(DHdm0weWBk`WpV>i6&UGM}cF zp|*`OVj}c`lKP$g6PO0h1xh7H)%2usM0rnkOSR)HC7N?bL~d9OjH_Ij^BWZhG!?mV zhT1ZBNmS!WNCz@ql$i1b954flF5MdVlEi~5OGxz)N$w=@-h7N*huPCmnt{nbpj8r& zl%5(mXPjmNj2M;`c?GW+4!xToR@7c0N_#)HvRSMd8ZJ-4 zEb-yL)5NQg$C0U=jgJsuX(TOOcU|^6TE4Q#a&*piM_9DCsdVnvSa~)s(Xz*_nYT%q z_80qZQ%QVyB2}4HPKkA*CxO*W=5T z=ly=Q?f=RmLSA>uN_8wZi>T;;vS|NdS$yt&4x9Zd;}T}oK&tVuQ15@RC)FvGT)0un z-0M;;$2rB9;6uJtYP;iRt>Q{PLk3w^Bs5Jpq3Nk z6VhFqAGcS~ild`Psuu3N}YxnKk z!ZC{#S7AQzOQW7-2JjsaWZ{HlPzbslO%b%SB~%97yvw^{gqn76* zW1!RC=A)ouX$#8sPmdRXtOVtW(+~ySWrSbhAggOduZf87lOG5b7Ry)Duf`Z2?M2Db z)kw-ZO-WB2|9Usr+YbO3MI8lg1$~Z>3IrBsWS|G~XH@?YZ_=v%YaO8fZ56-U61Qw~itR?0F(Hv}Df zgtEMuC81+WIBjDKEighzIyuNuf00+WiNp)Mb^o!Lw+36Kfcl20)M~7(Z@2lRYhn<6 z*u{Xj^J3d6q6WBJAfOwEGC5i);pF4#&P!X`sfV6e%hZ|znqT};K-UFkjV#Lt8h$vJPt+U0b+$FWMl~J6A3N*ps zCUGy3+}DzSS|I`pLprT`;4sDm>Ppx~wu{(L;5Iiy|I9{LY2NvTEHY`+A*hCniRiRI zz~Z9~g%{}w!WR^1g-@IX5*Jn_zGE%aC)CF&V+nz36RjWL98dUVMz|*J%!hLne68Ko zPXS*qj^qwslK5&Qv>{My_B!DT6VeeLc`acQp01B$mq?(8AfJLoiyCtyMgFTunX6(tcbN*r<}w0`qCUEy;DVxrvO9Z9Plx6#LYa*M z_At6#{a~YFm_fk0Q}22pI;@rau0eE=rEW#Xvp6@_MhCBJ<@k)o_{A*ydp2RhM|cjC zux^&YjwhveRNvwgLx=*y41*}IVgl6JT?`U1Jq%nqEPgosJUYH^2t%O#B%x3#1t*DI z)E=dtSO9bbk-&(tSU_B;%Rai}@n~ZNwe2YsC|{Gt%lQ-umWBl>`)rhkOk;$0^GqkW{C!?HJ6dtOkAEh3DF7CXg{L{;q4t~pFyeT%m#B5>)b$Q zk^Wd;r}SEZBYpD6w-pE*7EXWy>$?CN4}q_Kqtn_4UwRxVP7Ua9ZDVZJT`9o6cm>p7 ze&xSDX#5XE(m%;=RR{C0Ui5$4d|#2!Kbdf7v;5GItbq^Rm$(1cuPy(rhE7 zY^$%v@CYh&S1im2`zrrcb}s{th{%B>uCKJ1e#mowJ+4c#PzR1Zp%N8sVBWxgf%PAC zvDYb77y1p3y}Abwn9$LC87}NVnx-=@oLH`Apu!&n;>FZ=R(Cyrz9~hXVFjwwwWmd% z11?J^EgBeamS93KJ%R4jep_xPaTz-$Lwq0@+NEX7AZji>w)UGoyuM4NSq#`E#-iOM7UJ${Uq*wOXot4MN>N#Y=pDmhT`QcV zAlC6T13Dax$LQc{=II*uOPB-<0M>m*XMl;3Tz{kUu%8UIIky!;k^w*WAikw9r<|xb z8F-y{M&gAxtAolII=3a_^d(ckKpoI0sP#Q718?Nu7L>J0?tW*$2vuaKImubmf<{AD zfNpIt^}aSp618#q}%^cr}+Rxy&h?^&~7*~p0tj_flSwzl==pv=asr9Dd`_Ql=;?=JDHY zQ20uB%gl>ygY=*bGyk+N(!%-0_e&}=>!Ah;S06VpRupIEMa$SN+bcmA^fZP@@$!4PHhRd%KZi)^f1~XN}~LX*i5~GVz;n_0uSsJCc9%sO<5SO zi+mr!mU5%4?PeDO8sY=uD#gm(SR~;z`jZF;x6qkcwQ6hTLSLxGN~DEJqK^71tF~^^ zL{@8IY0ZJ6GQ*t0$iJpFUNHh=Xz`$x^Q4+0t?i~HsyIA^^zaDO_)9&N-EYxwnP1S-?}Ylk5oZ60Ayapd@2`a5G|tny#= zmpfyBqIhHHdhJ@h2W-=3d^3EDSy*BT0J$MCedx%%A$ap!I2!@L@fz}h+6dG-@|1H< zF``<<#eD+tra^%oZ?5bLaIC*YqOE-_nV|sH&k&15G9JD;ab&3AJjlC=8U;-^B_FI*EuF%QWYC%-j`zwZeC< z&QQyET$5AAX^JEJhVk21${G8F)>oPuPA9H2r>iB7U#F9|D4V{KHKCt6I#qK#;*fsh zYupREdTA`v)$=97m9OZ6@q6?ZNuikJu`A@U3l+lWxW|po6q=1GD&AObwY9L09zfDi zi#aT^5;rhO#khDq*kwB>v77S}B#Gx?l{`?)ty}2e1<_NkmvA|kemplyIp`6AO5tT6i4q*l)vn7&wopeV){$= zlfI3<)t9U6_?MDLWd5@$#D#2~ZNAh5@!y|S^sSu#>-0>?T6RGW+2?X=J=rD@0z8bI z-3X|tQ@U5$C>^~tki>~vojHT?jGDrF-kSIW_A@L>I7)QD)Hmtou4XT6knWPT?TGg= z%X8W>XKNFWug43lHb@Lw*1EI?+k&OTgi1rZB_m=%3A(bJE5)Q+NBjp3t!)(*%f=i^ zw96J-REWap1`QkG?plONv(vYzUE>=$u4QD!hSTxpCC+hF&t%?)bp0@$XnljockKQknZe&3LCx$g^6bcW6vu?MaN|2ed}usS5NLW}%M$DO`oJ-z6=w<@?9(RF zA)S%1ApIzX%q*D`nt@6q)uMGL=*k@N`}$iaSO3m(7R>ZYN}XVU zm|X)~rYcNlNy}zzjR}y6c^ukkPa)zZ8xEHDaQ#zF$t14ta1v&gi^X7Z$vjv$R*MY` zD-W@4YymRB^bzbe{`!Hl$m*`&t)ad9S2;rX5DnaRe*Nl32onEoPv?_-+TNkC$@YrT zGQI1#@145G#5|ErzBx?%m^jI7drdYgi-$is9i6*-ImQT@}Rs-O)~WM^F1rbaZ>TQv;?kzidelYr=wM zQBd$6rHn8&NwP806APQU^!8kL7-w1Uu^N+ZM4HgSXDT!@k;K|FmYq{&v-ps z&j?2SSM(C>-`Z9J|989P??zSJgiJp_a>$Hb-DY2h+s{_N=zS7V7%XZ3Rp20g5`B?j zPV;qUCUGv3npg4y_PX>Aj6Nd*(f{IVZq zM97aIx2UQsY)7fCEsF`frO;!VJHU&x#^}ao{NT)5%|?rc{UwEHshSdj)c&WGN7Rr= zZf^rjrQy?QXbv#T;7apB{M~HWnT~*iqk9_sd2h^&XfI~VnRo37{S1}wM}2xZAsB#7 zHv@xj()JGlQ_A!1tC(*qJJ~L1rM=4~N|TX9!1dM50(mh?sgjqsD?ux9(AoG;-^!C9 z6l0-H-AVtXa zW8sRD1u(uyjH}MAD0Ihk$NxUdI|R4tC2c0G1=*;(ByP_<##Iq%&pj3xta}0Pk*9ZZh#`rs#5)Uz?BRlO2<}SbQrXfwK1M*f6Gg~3Xi9KB@(|v;4lglu!q-dX z!0B4WM)L< zk%~o*)z5MY8<=unfbDo>t`RkM%Btn!W5`G5pA3^T8mX)dGCQ2>b#`iVgurtBwL~~= zj5t_jLdm<3(;DG5#|F6u#Hq8sS+8WZ3l?yTO9k_cQ$O(rAbf=yk7dhXrXbp>P^}UN zINqP^7elT><1gWg=Vg_?Dih+W2libH%J}rZa#ISM1?j5Um~gqEvP*Bt#pI`X5aQ(t zV;rT#0_y=0u(xSnK_OnlLPMDQCmM|H?m@3Gb-ulWL#y?N6i=zE$c0H2n7o?&`RtJM z5R+wpm~Qd5^bvjM*w+Rp*#U+8LK80szr6|hKB1%q-`zOHa(jgXw+PqnFo(#Y>O}X@ zc%UQDTjdRtaCb%kiW0=3XurXxLt2mbLjC`_A)U$>RrBCGa~1#Xbu9BA<(8zK)wl1t zsmVV#DJ%W2l>S$_YpISZj@rda3uj9+07)4sO+2R=?Dj)P04^GF1h&|*Qo_V^>YT<-uo&L2;>1KqCmPm6UZ=5iOs7miyK+ySg3f0LLerhb|y zH1EBwM2Ue#8{T{w!^yn`n5Xqo%fJbHvqEe&40rZ1wzIl$FI0O|bE* zN{iCDSwj}IArV~~t~U9-D{R*@Zz|8`84ZwIA z+EsBw4xK&pBNoV@B=~A-e%Sx_P#u+ zx1He>Q?*kM93doO5hB$InaYLtnAN38yy})hp*zi)$xu~uWqBH+@7UGGIvlNnV-g!S zgZq!*N;?NFw!~Evd!T@T3?rDH*5h0aW{Ey&m+ogC0}kXW9x@ubeNr#1n$ooX3RsM6 zMph~=e{uqo&5k4pI+h&o!lF}b7TN2!eT#17E*&gaE8|!=e>sAqzUYkfTAwJn*H4Ye zJbPznv{~fKGz_>h-SOLqziSrd3EN_{LSq}F<-2Ky98V%b)M-W9cA`D`ZjuAdEjqmW zHpX&8cnYVHR0&JOs;j10%A%m&sP2sQe}KgZKkI@+Y1$PC0CE+ianD zJY}=Ba{eW<9Q%3?r0+_2Jv3pXHgWEz&cmE`7lo?~*xe$2e(XM4l&FwrlyBf9{|yF! zy253WFz$Li}s^3ou-oT=ArmSf!$$4G2s(Kh2hQye+X`6WfM5+1NtMZfy(1Nr)5 zc)_buLt&6BB{GwHF^dgT$fpw*yr{X?FMi*KyeuwbSGFY zN%%h9vU(!ynOjAvpu%F8K1K~zydnI9^ZBQ}*)#OJJ_h_-&Zp9UbpOlRn^>Aznwltk zI=h(K{vVzK8W;LFBWS!Npn;+W0eG--k&+;>zkm$)DG*Btg-I}KtraO9mEGgff6-W; zS%HyTCbHS0P{?L9p1s8v&al}2Uay8DWs%g+c`bQ}JFPJ{14|HWCA{ymc)Fharh$I% z&W`^2*m>dybwK?>#$>8mn?>U_8=m~dXI*&p%QOtxa-(+M>+X(ZMBeQwlMgL2Jq4-0 z-jX{WAXH$+!<5LlKUWlOTi7qjo7i^hb0+`^dx`I8z-6rMHM#wh3WcMyE2Em`HISaM zIdxGx&P$@ejd~BQboww4N}W+Eo#VdOOxu4KcIpk9Job$0Th@=x3`pM#j*sR}`CiMyWtfA+ zvA+Y{nQZbFEbx{RFt2@EXZraF#qd}l7=#1SRXWs7-8w5mp25h|s^80Oy$W9i^7&X5 zuIB?gg^k~9_+#g|2A@abdxebrITJ9;^T1v{B0`?(z{uROC|)^PdRSMfd-gim=A%v^ zaop8ey8$&1mUheKWoK`059lTCtmf8oa`oGN0Gw_N*1cQ5j5p$4K8mi=c>!?pqSBFO z?t(rkHyHUunq>XDkQE1+7wAag_y`!h9rI{VqKw^eEg1fzJ>5nXx+ZwZT*V%0X(;!! z04RQkI2q`;c_w5=b4;j^$#K2grjATQ`RPEdi?-~yb#PxJ==9r+EgEG#vy&G&8aC@C zCo^CCD5=fDxpf?5CZ%mPggKZM#$l8Zfu#9p`wGFDlsyGH)hi=knIU8x43C$*k+(xE zo|P`Yct>rv%ypaBAy1$pTuwh`s;mrs0Vp%=X}45Yk!sNFF`e^zc)H1GT+(K;79xjg zxi*v?RV1Bg*gR=S7F$pl2*<7Pe?5FQ=NHnk7NoE$Bdcv$)Y7r#NMi!$#xKx(>ad|4VmvHd z_pRReyH?jcyCepZc++sivP=sn!4B|CdG?JeYCK~4w+>Hi1s2%^t;;mZV;qwgL2fLIn%$yMi=uy`*p>7oPMAwY+zG4ORZYlHd znWsm+y3CK7zEohN-?F~A2rTcetYMdWPK<6vMHH#qVvOT#hO}=6Yc$IeS@`{-B|LtXXa-l>Lp*C4r*cf-pW zmpp_=%7(h$u+6>LR4MG~y}3k;hBMW(E{V<)Z zBtvMV*W^M=G3o~qv!q5bR6MeJf|QFrs_I{(Jjx?<@5ZH4joeQSJs=D4yrH1)dtZ~> zZBv?&9co{U<)k{f_~CVHuCsDOZ|8uZ;Sdc>A)OS(ZNgL2e!O|4)zQ(>^-QuI4`(0Z z>eQtDxd)d^Zd0#+YUwQ`Z>A}zIyY#e)zW~Tvt`Ik|0jqfqLC>@Ru*Tu)u!MM*=qRV zFxZal(0h8-p~TVB?<1&rPT14(PHdhBk9rtfzp1obXN}>Ou&wRKCpReElFo*;k8@tA zI>R>9%cuI^>jUl@Q=jV8RKTa&Elvk#k8f{_dAP#x&T%g^Hb~zF2P!0e!O+SP4Bf$~ z?K22o3sP$zlIgFnk-48vpS)9=T_WegB(I)fKBxq9>-&U6;qU^yoHB=r4_Ey=&zDo0 zR%5nVN4`G$qBJ9xzd4X2eAH%9T1Dkr5H*G)=HLaLKG+vC5maTAf_^w*nS2fc&ZKX&WRx=GAMMpP-+r{ zLcTkVo$&0ED-2XCE3_m|t@nKH$}iN@Z`9js0#&M@;#j?4n{iRlA885A3f(ZzE^?Jo zNi#_7k&b9C%zQym)1~{jHw~P7ubjg}JL3YipUxGnKEBGRp?3?r(R~=XH2le^I_R_Q zr1F%L6wYa1c_x7RTUL+aKs=f>JQ$bmup}5k{n3>nV$GpcudVqMSHt?Ttv(Ui?hpvC ziIrLo)tD(3Sc{d@A}op<;)(e# z#pu`}ap^o@hPjNy4YJqx$QCfQ+pRg)PPQe*=0Jj2*UCJr@=x(B+WDMU>eO4a6M$c0 z>So#0isThsyLTe%OLIP+L+_3DyIj1jGOFk4UUI)O|;`S{1D@?O%{Ke5EPCy4Fjx6u_pkYmUi=2ZJD|Eii((O`=XAP{4}Mmp&a_e`IwB>J)*ISvlJhRd(q*8 zi@MES5}?R?bjTti(GG;d5cTD#kafh#i>(B~3^_7v9P0(fT5S6>;Cb{@!sVwTqm}^b z%94qf7eqG&sw{uJ43%Cv(D7%$$6mo){6UB^8hI_;cqQPdh+6DuZ*MOk&#!ZItujH* z!xCy$B=j|3+!4BF>_LSZqFGNXa;aDL5yF)1%aF6c>NAf4J9ea?&f%*U>GI}}GL`0n z5*BA(sh(D!1(kUx13FGb94-_B&O_#k61@o^agJ3txnY=S+8wQc%g=xkJ?3wSIB^}( zn+P6%{B$8e8PM|Ew=g0e0n~9;EH?=u1G}3dZ{=^T>DOG}-s)_xY&;Sza$C9$dDSGj zD??S-4QQ981QS?1jWKdew9_vyM>HEN}GYr{K4@ zI02UJLlL160|wilcz1HO{2gJ&;=L1DQ>BRYP(pX4#}Md_NK5?DzQVe(ZT!Gd;IMR@ z=OW0*o71DN4madH@>7#uP>|H(19K8zjwk?7I_KQ0i9)4ttySP)qP?)JC=x676&ho3 zaur8hoTP^5X4AdcpFwHnFViMmWq-gQmz(E+{wnt5Yz9B;DDAonEXxI!gxNhT{J@5s z)q{SM$PZ%7@&iEeco+2Ol>d;>y)gP|Ti_RtrSa?jm;wO~#9K;I{(=JTG9CyouQdmL zLE`6nS2j0}Oe$>d*1^WD$+6C`ElgV49GC(6B}Xb6S<_PjCjo0zLkb(hiP6g<^X7*tfH{-2 zsxcSGL^rmoi3VBg6-#S&52_!!@+ON|SO(spZch0u*88z+NH-`fQ*&8|e)x9_s9F0F z=^2Z#z`>T*q{KXF`B;98c)7Zb85wL*N<@)52xXKK%2>JbcLKV*OFWGcKxau6gfY{M zT8=Ef-dy+14?-VwL*|@eO24jmfB6kj(y8GxSs`hNqpJUSRc%j%Sm9QPfP0&0N0uuB zez@QPA@!ojr_Klfuii**fJB=;RCt{DsW`MwS7F6mpe5+DOR|qlP(+H)M`P}~T9mgG zUpQbzUQz0$GzS!>?jBrJX|8e|!Umx`xE?nCr(|bW>`hjOGpfh?6eN5kv7W7P@?1=+ zcaoqGL3I}7VWT&RtvR*1na)k(Cw^fV$Cfy{N7K();nD!Kg-AQwKA;QHGwQnqk_T_U zSKU`iji^SUzccGj=;%^mA-Pzou>id9|ILzms!TcHIdY3&2HjuhFW^7g^Mzy+$9$YM zWq}ykV|oR&=#|7bRrC%8oV0^4%giZj|6AoZBC{l~C-};zaq-w|6<_Y^qgx{;W!24= zpY0w^{k^DHCdls~l_{#^1_T^9u(--03JQ-*okEJ|JsLB>(b!fM3J=RrNi?e0?;J01 zjHBQ(n?WnZT9mta{WJ~ej7$>)wjN@Jk0MFMRTwQ)-w-!2GNp+k_R?`EJ!7^9n$EOy zAj4Uas+40GjtZ#h*W|TIt7iOGINI>HJ2<(VwW{4HwezSEs}9U1?UFEnV#Qir#CcOf z4loBA`wtO=g`dp^RAjfMhlYV>#3}e`M^B1H%?`E?;x8eiIKxZM@!fr0x3U7ulR8wQ zHm%nina>2hnImCqWMHS@clYO?csACLY(R9UbUY6Xr3@TuDqx`Oak>WG;x%fs?q~W) zDrOq^UeXP>J7;fvceDNi?ga|>I4`ZWLS4y9Ur~O$VT&u3G^6D#!d3Qph}RVaa~GTH z{Kuj?*^0mqDDAyRpQyfsodzP<2&tc>`(0Wz+qcKs&MZiT{2W2jO*##FDID#nK$&VP z2u`V;Uc-$VKP6kuv5c$18YL2wh)Z}YqxEM|@&gA+k8c~Cj*l>?S|;2CD|NIV82Kv% z9%_N+De^LZIaB#AcE*BeYA&I|$VT8h5%-pB!iDvpP#plN& z+X_pYXGxf~Kazxtx?)yYQS7j6Zg=}Mx4 zg0DKMAlbunepU^2O)fJ|8VRCG=-t31 z#NTB|Z;SLOydBTm1}O67OU9%IK`r-(wDb?dOdgpMVVV=Qg}JKK%5DFBX4O@5wWTe~ zfvu%~PJ(a1L7XfHByxfzvnleoV=l*p4{Vw@HUt9Uz}3>(&}h`#f^~v9^lRu%cyVm& z9f~C=R^-N0G1b2u21?E`%N^)D#}6V?SVsoj%29<>uT!GEj14C>l6-MnAjH~3-i zB1G5HXuqLbo5c4cNw3Bbnm|N`<|f31-X9A3-67T>VmxmU+A-VCXHSBK{qo~3QCjZQ zT$yV(Utwyyk99a1gv;U`vA^yt@>S1BHSBzpF*U0f%YFw|2pr?@6dAG?lT&%b}(Cy5ePQ};f;mk_;n;Gfuo^zX_ zz&g{Ew>epuA3K_e>;J0-q)bs$_O7X^&1Ua-&E`{>FhP!{e2eq>AU%_-=*FZVrWI&Y zq%jG5RNT+#Qmv8{+CcYAL)}>SKm($#+O_hcR_|D2#dvF1gWafUzD_UZuWRgI?8+6c zd zu4V>)>l-9$fK4)^774zeyobv8+3;T*5; zZ@FHp5>QkXOm~&FROVHht>BJnPh5-_#eG|v{>Db2zNQ%Cy|#+e&p+hZ`g9Rauc-Ek z1$1TKyR`Q?r*D(biI?`}@>!)Tc4ckL{t5U{pVjnYkZZL-%gTGZ87_Dh zoJe@T^4-h`mHpG=^T4E#y7$Fqr;ND^_&`5yiJf>b6hoN%>+ymoHZ!}I_c+b@s!`L? z_ksH&oCRlR;dgy54VJ79f|&SwiTTCHtcI(=9~7_+w8D<} zL)G*)`FYaHksH*CzM=iru$%?=Q}g4hA$0!xtJ3Q#Q4r>m=}U(9-(K> zMD4PGe`x`opc7^GAoW?I_HjaSj3GOGE(hM{Q@W^ifaVoI37^XK@D{|1@%p&`u}w6mM|TH%MW` zpfUf+`?+{wa4oaJb1y}b#(5w0&^p9pC~N)~{NAS<)|F2_JJ$K|npO(U5<^w81CEpE zK9jCwJ4Jb>9QK@A7_VoqH|imn%yB(owN+zZ>d^dz4Be+u;*<~a${EtOF@$Yh2#4rF zQ`n+N_>{d`^R(V5k6q|Az#6gLG~ino`BERe9S)uqW@1aHt!Ne_d2o%G;}_{Xzc#nH z9%!XWqCIvWQB|M*ZJwCJ>9$3-tTTDe=6F=6S!H}dr&a@`&-oeGsBdH|+*G-hIm5;A z%_u!FZ4N-nd9A!X;`%h3W`MiqY`)E_*cpP~m^|HFO6AtggWqkNZ0>+u-t1FsgD!}6 z`8`gWd`=ppMVjSRi2GNv0X1f_30 zaJHQ<$d?W4TpJTuW!xwuax)~mU#F{W73u9>Tv z3%xCS9`Lb~uL~T{d>=VhWLLBgbeN$_IH&3IKpr{VD@-vMV(Kw*j``gi2EISnAeBHq zYN7WG4%5$Kb_mogs_;sNjp+6P88Ki+$EAW@>>nKUy*{^6tYQ*8fvb;YR+`@u--&De0gWhY?&sypQrWwoefSB?Jh}Ot{L^Xh%JmpL|67`?NcQh~0s{Y0PeAg&&6KkgCgebvU~yZD0)+CA`4#Dd z!w}=L1?V85pnf2$qXsrzT1l2yf_$*S`v4KB#)q$9*=65)3_rfT|Ap&i0}m!4fY!yj zs9GsDpx_Fp&vI}m?%vqi*jeY~nO%lhCgP&X(a6#FM~4={R5@NdU2hfA-&VH~&690? z4ZAQIW|KPGS`FuHPRSS!V|K%he$K5GIQ18|KUN8}8U&3{?jO6^{}Zoo#%bT^D6R3; zWeWJ-?>IsE02wu9oCNW;4|!#%_UQL23(U?3K2c&ir7Hx3huD7BQziF%P)Vo)%G8aM ziRP3-L}LQF^qh{-B}2x`QFz|8=?u)p*f-iB^!?`$yqy>ZA58WtEO9Juf& zeLj9&{y-dqPDLruZB0O_K!wM=8DCeo>c+p)90xfiT3oAG6`IGCfmb6MdNrV?q# zHb}t@wv8Ba)>|8}@LJu83I~$1{WayPKA1`*H+7K_-^g0!56IUQk+iEVIe+UDJ0{gc zr`H;YLfxCJS7|@La9bTY*+=RAWgd6*2QD@)Vpv8Ie-_ecg$Gz1XZx8hUPOzjzSR4$7vepLWg*!7Ku_pp*(_ zAx7(<{RK(tRKY9~q`m^sXr;>=hY8!iw}UfqKvB^|e4_0(Ia(D$v96+N(j2KzM>%2- z`eP0_rdu5gXhxE8Mv`B%GLo7b8EGeFuD^2bbG~?boUcEwb7uYktwyt>xnNZ4xX4VP z0zyht7G$}t))WUCT_+ar2DDpjcN$GkVl9dd&J-(b)`wg1V=#tCSeY{bGQ7I<=rAc) z0r`ZC#aVOto>P;eZ(_p_ux<2U6DLyksDfbEA7vVUh`^*aMa_SYa`-gb6B3CqN4QX@ z@KFx_3VhApd+3cf`MTNdI}{+^B8Z~!V4y0=-OJwlT#a`z;&3~RDBz9Q{;{`^2gW-P z;li_=bBZno=bBBAVWZpks$jLg(rAliX6JsPgPzrs+R|fl*wB8|2LNlz3bkC-h1SVi zHukF&2tt^sb5bLwZsF0W%AKYk6lbL|(_H5Svnu^-vKc2{HykDg)vZQ@?#f(Y;7ZB2 zl3KpC<;P-Nm8MzJYn-O}VY5S}m|`RQT8AGORgajAWhU8T0~V8a2-4I=qofcI#8BwW0PAC)PY-{^4C$1Fsv- z)Y*1|&xn+*ShZM@(}X9Jc|#Ha;(9uaA`^dBYhKbkPrjHrm`LnC8dn7Qst|+^hJz1X z$Q&?7adcJ^|FY>$okGLZgOJD`_`FSxsG6cjeS#IzQi#D?Zc0N%v8q;Nv|U?5!yY%n zymaXSS@*`FDxG_DsYuZU`i_{5-pgNLF!tbD(nsy;y9^-mWDwY^ebTD z7#~lK)DlbOi2H;rFf&%G=9z9QB?LgEKhcH3f`S+;jh_@!yEqC;wq*Sf zkhQavj!dH*wTw>zBr~O-q>;t~OedUd$`3*+89A^I>jQleLf#-a$mxEYB7h4!$5YPn z$2A1rIitlXF9lD8=M6CIiaI_AB9xP=HHpIsoeP|Qc|_E9!yJG$m{=G4%1opd5js-5 z4iPVD;}gtP{jepined@9X?$mz0t8nBQm4$aY2@%|C2%;E8z#`7x?S>YOdmkR^hU^2 z#E&ZS&}m*yq+wGJMSn1yfiYVUoV8;$<~#_|wo5aRAD59u)2|XAzbIL`>V}Oajz)6QFHphI)d^Z!?eE=!ZNbxisWHsWsEg@q!(0|~aiE}@G~{-3_-lm8 zT^AJ~)!RYE@WX##X{yPa+F&KSd1JLE*L}biSH%I1$W95mTj+q^^{*;a^O$3gU{}bt zBrd+n6XRx?g^nD{RO1h=`}yp+X06!>wM#?Ir-X*MnGZSAtHv#%#mF$~C=xw_03Q?= zlBu+z3prfp&c|EM@RHL%Xm=lnDuv*!-Peb8iSr|l`N*0v&%~S`9aq}V8pC@}icerH z;G9kc?ZxGSPp$31vUuf-Ua1{@z9j|AOM6gWflVt+YrF7X>)f3&Iina;;-&AUnF7Eh zKPGdZ(8YE}l5^Q-Wf(z!b1y>CMuK)Fkk3`P$r`Yn!j*#xb2!0xVqgWKQn;auQ?EKE zF6nkL2k7QY-yDrDiW4Vdsy8@!c>z~ks~%NsD|gU)Lv|H9BW70*ld;^cO^BV50N{<$ zoI6v}tqrfW(vLuy-)Wh-$1l;+dYEx{Fm71rk(tzg^>O32{c(Ei4pV;q>G2w#kYfPL z9zRl&nWTTej6k_>o;l1=dqZRME=T9D@RY+5*Ta!nxGr2N4otw^`j>dzTN@9w@jx1) zrD?G51m2EUiQNi$vpQd{FHk7QUnqjIH1C9eK9sNvZKvRp&=(pF?d8Wcbt#ABp~J5F zEq#TGJ=hQK&mSp`P!9G7K5*az)smeq_jb$YS=XK+-8zS#$ckQT5k{IverP%MG@Q?w zVn>mhr91=tJpvUVW;E*YjxD~SsrK8p{y7B?biaKzn3NO`i(jIq!ya&A3*Y$v!3L4; zb#{;bW&#p?Te1JoTweMA2vq#PCpe`4YaiM-LF9jH8Fv1mW%#`IbFDD#1w|dy=Wqon ziY5S#MTF`L=2#PU95aHYYMM;APH~}=?|eDVkpIL1ATwdZ&3q~jJKJO6#Xs+_A7=Yq zxzD&yyUV{GoTUB%lA>g`@$wViVW*q9b7?TV7kC2M+6%aHUf4?4*2qlP)tjfAX>sL0 z3|MIV%PLrb4;nk7{bGfQ8{Fsor>W{EQ)l^QMp*In@6J5?o7y&|GtJLC>f{XG96iB6 z!&>iwMncBQ&zwr&5W$avsb8zkI?yv-s|dp6weVWa{uXa@4M$ueWK7qN$jaaSr12=Y zpuD^KlJ+v;1-L8p0kyo0=gJ+{~F^(r%ft>0(d!0vixuqAy{gb!z$8;6^Z zML0&ZDg!XS6Mj-8UxgxVi4QFjd{}5`KTw#yy{~T6y=+k>@y8cpIg94<~LhRj<^APyl4J|FtMcp zrfc{G?en9*#uQ^5c~Y4E!u%s8`daEMQoaeYL*FE+|2ZXO|D%+U{1^NDpXl(vY1D0F zWu-s_5kvHcB*h9~`m!h_*i!hz+to-k!H`FZaV$5CP7T{>T)YC!o%eq5B(0Jps6ykb z64dA^?(pa6164Z+dCX}z+E!|rDoaY>qICQs1z+gg-rUyJL@VW2R+fafhUSDY1^)yo|gWD=kl#PxC*+s_&5ZjlsGaVFj#?E!G`so;n+00*yATe znsd#1{pD%ja9P5u+s@J3w0pO6k9W`K%fSqgPFM>XtcDvKXBAG0A=%$bO_#*xj7c=z z1^V-sj+!3Bi>9uP7BaXAwnVqG(_?6}yJe{kb$3^^$iQREkF@N`iy<2)7pHX=9W=kk zWtk4KNd-g~opnV1@V@tzAeZhi*^JZ=_3`=!}NlJxKR2Gin z0|z53DM1$xB#reZ=OJ445VylfPWKXE|4MJ2pimfM$Xvy~YgS{WIb1;)Y}Vjhw%#z9 zkdAy+7WdG(a-u-jeD?w5;rWJGYjhPCN(&~bX4w(q!gw9N9B0yTA~+0VV^EAdWnoOX z{$Vm`;A=%D!xie*%0vM`K4)=;o=Fv}8@=t;0kjV%yww_+^U6s3g<~bQ8lOBKr3ZQQ zx=KmP4Oh0aQ(?3Jk{Y@IdYlFf8-O^nTNS&!u7J4OKp4+0G?ZHEJc2Nw0_{?hTLVq9 z{4njg6w9Ppead|5&hN)P*F*I{Q)~A8BHTcxVS>^Lm1O@r+$!;7ubQ3PMqw?B4F>mQ z7#}qoh4E@#3Suc|L##d6+l)MHCH6GunnLZ959BX2YLZbRw5d&T>314Nt7KLiMfDSE zx}~n-aY@k6%F!{uOB4Y+(qBh%>Baea2Jx|ztILI!8kK0E*+!N}^FjG>swH%89v+@c zsjB&oWt?aQ(iK_J!b5bGZc$xS`!l~$eYFJB`l2sh5~!^8r3P#<;|yTKST4~@ebaJ- zm-_=F2Veoq{~%0*x{EnLTpNYinPaVnxb7o^(bX_#ReBKJXD4L4rzDSo0RyOA3?F{> zdWr-EP&u~a>UyE8PBkO9TV7PRZA_;?!y32PUNk_984J5Q_0%t3$PsZGwToAk4cV3% zOw?#s&RbHl^NepsctfHlPrW3<$WEJ|5$xtJM=+vR_dC=*53vj9H=&41W!hx78!dnL7IO z8ql1LL1G~66YcFAg1xC#cZcY8b5zUb-KWz}O=_?)NX8}1q$dcwUTPSE@v*l7@Zt_4 zAn^wh4eJ6V{OJm|x6cs{u!@z=TkCs#!N`p^YW_-#st-*V4?2SX_0b#n6OS?PPX$W? zYlpG3CxcnTG%aWy$(Ir8EP5|c#%Q^2{A#j|`qmG4cyF~k8Ejd>lGG;KV0=2cBd0HF z17fJ~tHfBL?tU30lW6W#sEZLmTH)Z+KUpD~R#|l$md~U5gwi6HBl1GNIGAfrw1}H2 zxFBWoB~0z>LK6;lz|sawJ%FAWldFELgBwC&X}6#w z_HJ1)%W0fdOFz;?v{y$4Oi)$#+w*8kzQBPV5afS+l$ZUw#I5{+{4m*wXxGy6>PQJ3A%>f4tcyDPqW8I+btX{>z$ReB3}Ky(t$;?h!R=z+7>Hze#0iM?M&1F#-=Op$1Xm zh>%dHt0&MiWH&ZW=(#>%(iDyph%wF5^I^k2<`6m)Sv?Rko=U-u!)cFy64|?wqg6-$aFn5>D^X886^i0n1H17c56C3-H++3$>AHj`AP#eU z#OE!kmfv_@E^(Q8HLwBom7lV}KcSVuQ_pv3>K5+0zlHRQJM@Y7=!Svkr~eA1QLGEQ z1oZJuCPfgZJox^VCplv;76bikpgWHic)J%DH}JhjIwdnc?@=j=FWGB(*oOj~_*B<+ z67w92i33yNxZNj0&X;NS*NB5(F2LVp>kX>wIlbd46}uHg^m> ztn8t`Sy@_${|>+?|3{DB|C7RpRL0)k+STEIJ&LDPwdKF95qTHrZ8WJ z8Wsrn`Tao{14Tp8Hpb4p#fGO>+v5-Vm+;itLniPHHM9|ihr`4vC?2A(9JZ(+S9o?` z>sJr3Qq3`FNpk%6xZjkTyYx9!`Y^Q~qe+BYVB;57noY|i2?v_2Org@pYgKTNsn4;_ zeaT^oln-@-`Y(hKa2^K=jvB z0rqN1ZgN)Z_O6t1!d<2>DgP0F&5vbyY%mPv}wD-6(k}9_BePC9d|t}HDot-M6h{b z-mP!!hHPQ~lz(BHK@h>Lmy{Y%!-I{`uk4z# zeYhpNJtoa8KeoK4AKP;I^QO^mE($V6QJ_jQ0Me>+wo-HCiHqCI622fJhTtN-w{=_?*z^t`BNfQze~u6X%APxm z$#OX26?mkA5+>YTa&%;tPwu*-CwhlOAQ*$FBK5C%1be{j_emK`S&lQao?P399Rle8uBcx*s@Nn zk=&PP;2IRd-Tn6!?fwjaDeZX|;YJ+mkBzp-KoBX9&7Z6W=V{)j?W-C69e*H=K5Ai6 zuk|Hz%Y2Cj9Av60HRtOe7|$#tN)upT?lF3d|EBG5Y|gnYo{ zOSVaovsrZGA*ELXx}f#Lr(JW)0? z-@!Pd6~@i1ct=zLQ%hUb)OvdpG}R;_b2O$IR(UFUMz3uB*I1+0dnK4GgSxIou>;N; zshwdqk*|rGE_|1p{a@IiHnjsgd~UJFBDi_Z?3Nq)7>HJc~lR2u}jyt^EX+;ur)?GVfv^yGpL zxIjfdM-UBW@jH^Q8WZUmkJE9cP^QzX7Nx(;DEbiQP~Q7KyNpl7HSL@|KnQ~|oQHP2 zxV?oj!df6nmm=CQ-AS2Kb_P!7No9o!P>}Ey+2-;H>i((fCzZWSe5CSZCjU~ot-E<~ z#)&$$LyB@{o0u(WCjX1sF?OHe18N@xr|=8+fKuTrLov%neXlVH)-^TG%Dh%W^Ri~0 zCSGr!{U3#MwlWN);dkLY`fqJY|L@%7|20n$G;(%vGBkGiZv((0Wovnq?}1bcDta>w z0#&I&d{~^VVs#uQ0iq08j4URn^%Ha*PqnEyQy{v~x=nYmELZ z12ea?`7|eU;>Yd%g*%XYFIHro-Ays%KH+gbQS#pUjRIC#a`^UU$Jg%TmNM>i1%e2wlRXk0W7z z`D|Xyo1{A<|JFEfBsbTunE{F76^l}q)9#3puGyYilM*ufdl!p(ut*M1F~3fS$aIuf z3B$xok%Y;8a?Kj`pPG~L6jW&?)Ek}Be5MsJ895Gyt5@V}xPL22A)~s=`2s)c6EN-m z9?>eeAf>)0ETixVz5G0y(Rd5Q`Gc~ZN1yZh(FchG#r5kYbn`;_kl*OVq|h+=QjK`# z1?(T8$QOGNjQ$;p*#9;ZRsJIg^goN-NCE%Vj!@RN{=RKL$s;7&?J`!qEUVT_6%#$y zSd_{|d?YN15yj@B1B!;}bxc^4Ri}MbAb;)Zp9MuHeKGc={EFl#GmzDtK&J zQ0hxFUG~JpK)M6tk1!PHIgvmN*SZqR;D=??;g4$kmN@xkw))Kf97Mvm2b<-|mMNUl z7f;RRg^P?nU}f5~B$?Lvvm$1o=D$9-zC+CbB)SyZXdHwZ3?Yt-BjD+ak{> zqTR*2{za!qezeC!547A7F3omrgl4VMmk@8(O6LtB=r_#DHB{58$SwB5{+KZ2EwAe< z@PmLZjJqn`u~3odVpe+`aI8p{LG%}Qk#;&={~wWP_%3Av`5lRV|NllJ(|<+cHyT$K zMEq<C}v4GpqtHUNFXLe+*ev@l-w#FZ12!R5G)pnDvApEvoCidV(!O#QjV;W=JER=w z%s_^2xR~`*Z#Dx)n=nS-krwOKvT2v*Ouhonbz(I5B0#k;wcJ~G{$LNobkbt3$CVhK zG7?_5_dlpS4^cN-&L?JP8)1&VqirmaYB^HJLarxDs20hEhDO&l?#Tcv7GmXlEx=%* ze_i0dikC*WZu`T+%Evl2kG}lG2zm8ApsOv04AEB1-gZS-%{^nCU%dWKjLmDnI7guh8Cco%3gHE%hXfp za(t5pO?4!9kzcWp!^SY%nXN;(K=f%y9pONr2IKQ~yQ{uIhLE}q=JGw_y zw=5`V_5qu3qMBSDg!!2XN7((LO@Akm3rf~m-ln&U&)`yv#g!##+XZvIw@sW39NQ*U z#ub>>4YIC>>42Q7uC-xI(m<|k@-U*ONTmy2>|a^qv`^-IHS8fwY$iW}sa!imt3VTF ze}*M<=r)1&4pK4+j5^NW@hxc_o^o0;mk|HRJYT1T)F8(t(qHbwpVr=MS zB5UYkZ1FEk$0Ai-WfXNxKln9Sp;aqvST=NP#Q>lBQE`D*PVeoS6VL4@8^5oM6%e2m z1@tt>&3rvJXt}<*n0!m`_KUNWtMqDH6}B+(5%93;xC^imR@W9Y@8#IC8m;83z&*Pe zEWJFF_8*V|4r?A(r)UH8=P=r)4ZC2wC>&2I7e616Aywey(GkOsa2#1@%1^5`S)Lxe zWfuy6eubK9Zzl<`WPh>0C7fuvIRfg4ccUoOSU{1W1qH(dHiktI3Em;37r1{m0H516 z8F>PKRMl7I@GRUA5fcT^Q8|3tUQA&}NS-V1SEjkm(Xif3T5-h1nW)GJM9i@L@WU0t zXg{-5sVMHEo5h`KsbQl1JOm(30 z;MBoF4@x|{aD;M#XBiM5GK=G{qH|#L?13fEGPvf?OxQt2e@XYPm1&_V6FPIHq9^7G zju=3Kv=;Zp32M~N{_1k|-Eb|y5@{F?as6V-c2 z7nbJ7Htv&A0wh%R?M#c;Mvoo^e1-4Uu# zJ68|KEBzW8GnD~luu#H&e!07;<~AHD4Q96O^)&{~BmMEI3&QK9C~=5Ab-OQHIz~f9 zO`o1s#AuwUBK}(P&BH(U#s}PC&(yJRSj0`)rACGpCS{}O?Nd`;pfzCR?A4{kDy*&7 z6BMT5O~g3|pWT;u7+~+X2du=yz6TKb$n1goeG+*mhbm)!JFmeY4^wJF9I26pqKeK) zu+;DG_(?_hZ4p^YC{Iaq%hJ1Sz+t8^Kh*_6%W(oq4h5+Nrvkxm^#UFqzD7SL8%9J1 z_(O??F5+y0iUIRQGb+0rnfT4 zc>b#DoWlZ7hywS?-=x@=`|13kf{;)IOC{9gT88!*iu7cybZjHw`4Z6f~`)t>a7 z88zJ(LcYcmlbmEye3{pmLw^c}Q< z__HFI`fnt_qU(RpDQ5p$_35ASm;WWH6VetM;{NubhHY z@KKR7p^E^aOOi8Tk$`hB>s5dL{&&H6B=t`o0~E~f8#STH=NGp7{QS?n#^3W@{8xhK z-|}5#`CGr*znA#i>79SCDdNAc^VuF~^?959L&5yBG2)-)nvB@zg%*Xgfj%w%lc%Aa zmBp5>iyibbiZYB%P(;JkR_^RxjsF@Di%KW?Gqj895x$wGAKH{Tv2hc$@wTB+aiUh5 zrnz=#)%Cn-<87Q(tK;p}1xWjgv3Kg3*`Zps5wf|41xkDgd%1;b`Id6^t?uQ!^vBv3 zsLPZ?C|gN|h|;m#{e3t^^GxrJfn&kxcN}20`rYzb2{rD61oeT)m9Hc~RUKG&&UZk| ziN;Ciemop$+$UC7cSaL7C}=>qg<|CkUO%_0wAv~)$&Zh{F0e@ zil!@se5w%`LgzPJZOz-@K|mdd$07qF;E#%&>U0z^DeASn&hBegz`Tr=`t84!?1wdX z=2Mv|cT}8Pv{@z$viS2EEs+g^am6p(L<5fJS!X7rH5>r_r7Cn*zM2Y7+#ucP+zS@z zM1wDlrb+A6MvvmVd;rtJVTZ1X;uQWWRm7)$6J%%|hN{5J?_KN_3q**m#qxNvtWFXA z;@c<*5tHf0zX*RiyGn1-#smScW8gcKBjkLaloI-O$`Ay6UZr;LV^Un6%*)PJ=p3TF zx86-1PG0cLok%(8jyvPZ3vQsEbciXlb1X7npsbm!Tf)`&Luy~f*U6BCVXZdcRb zRr=?U@FjkCk|f%#CZ@^u;ljf%C~(Pa)56bu5TYaxfauIEBj27%?iGsrpbnT6Z2+qz zV?{q2h|EM==c-Z?V-WEx zG5aA=@45#6Fm_F&hW+se^dIlF^gV2NXeO^u!Q@C zGVswuMIl|=x+n{RpqA6xYca<#halaBM#~Rl?lS57W2D}q<}}jYc)3>_#sl1y_G(%T z#$~EE(c?>pw^sl2DBwhlL$rI8{^MZpBW1|r>HY|;6H#5ek$6?YJp{cQmTiLpQ_7KZ z&4y#fzVU5$d3(Bh4t>F%ukm;0G3U8;8{zXe3nxbs3wGbE0&iOVhDW9a$}G_9;)CSY zieEa3&n*U;iuC*@@p{hC0ZFn4h98z~BYStic$3@GKMkbY4CieFUeZ25+DBolF}hz0 zSou=#*V!Cb!Ur;Ahs^`TrJt+}253Oj2{E8W0t!pb&t3Ahmc((w#4&JFMK=kE3>d~> z*Z1!u$xtLjpP_jdi5x9js5bH-++kB`$3f`H{Rz=4Bxk$3(Gq zjHq}C6L!}?Z?R>==1`RVD4%dB_wU`fux0?!4B3WKxLV~HN-+olm)xfmU=ujWh2jCKQ73Ad_xOLT8E2;PYliC{KBQ~s)V z$FsY8Pt9J1g&CD^@P{SyCdePEjW+G_X~>5vrC_%X=h2;T(zbEaPI=h0w*phXYe1qc zHN0NmGvIz`a+Koi(c`tgY%;gwp+(L z(sPAq%IwawiEYf0)s#)+N7bmIg7!k{LA`s=-ATYqR_A2u!Y+e!oyJMTxM+`w1})kT z$8CiPhScV%YF~Rt`ul~i8UEY%nQ-`TaeXjyDAc%G`S%u5_-28hO ztYa0iwphMnvO-|*ak2nZ_794#2F!)4nTW@*bsf~(U7%*J8+{_W{Pd+e{vk^Ly3Gvz zL-xw}%VXs4F|z-D8>MyhOzCK7tP}zA=bkK>%J1fuUBhQ zr`qOpIZ2jS93+~DBk+r)PWnip-r87cr`$~T%F-E*;}7m@o1m=Dhgl8GJMp zz!V7$7&{WG*&dwgE)+n+Ym}?3>jB-TLnsZwiZK1I=lw;mS-=c8dX)}sV~hn#DSVN> zyq+>8W4pSBQh%Fj+mh5D2plwx6Jzt) z|JU`2!v8Y@3;bvG`ahoTKcDzNF<5r(GnEnHJ>PSMDle~=M1ky`_v5g*x3EjQFe-P* zgqnsR0Fqv#zj>^hFF>VEYKz=yplm&sKMZEGj`sCElDze$S+vf z^jQ)nz|6D6`%u0^9X)F{OpWM$Jus8EN{?h7UhwI{lc+FclkNk7Kf~(@jko54kRc9t zp0ye(Oh8S{Uegm!WTH$}LA1ArZ6kn}(~uQR)>(Qpq}+{mA$SOunY!b`CzkojM(_0K>6 z5pydu0!5vF<;X~ni1zS&D*H-ip{iO}GRRcwM#%ldTx1pyqLs}uz`rJGf3Oh_4H6)} zl7k3XZGk?@Y^T)%b7#_99jx~3rP>}GJe;6+vK>Pai*h?*Vioc@zy9hiDv*=vFPfx< zv1Dp+oM*asXyY-Cs=+F_jvnkaEh^u7JtS3c-dzULW5J5d^vB~n!>(H1nn=wO7KDoX zhB|T^nbmswLZ0x00&0mQYgk$o+o0QO8Ef;mgiWY^bdc-!eR^eY7o=r71yoQ~egdg@ zqLECqlplgLssdl(fAqT;0qRYQT)SxIjued!rUJwRIwqE%sAn^{t}> zZ0Xa*4~gM@msuCD54dVSwbziCDd-_21_vW_Gl( zC2qKo?^KVEG!Rn&8#4s#{bO$8wWjOd_7mDp{u0{$UX%F0kF$U8uK)7H|Ae@@&;0a1 zC}v4GFh2p`yZ%1Y88kQoFJ=T21^zG~Bp(v#5HV#P<3U}x*1O+jly8ud1!b58JE1%B zCm?ER#b*hc`SfW=3F{s_9|9`}sT#bYhqd@=qv@Onr!QO=w(BcHFrI5opqW@PKrLmn zR{HW0YS!f0Fz7?#1aZNML!nWhZM)v~=uC5rW)`8nWwB9fVTTx!d1H3DeaVroQ&m@f z$h@80#n=n@;GC=&OWZ6bz4V%mAj$7-!4x*L-uKyFm8=dXdEnlM7*juHU1bO=Ez36@ zl8D-zAD%1IjWgHyoY<&8@bl1 z@$j#W#_s{OpBA7@%x`Qk2@ROSkr*#|X6CfinPysKhEKh5N1hPcgr~W9chl0RF$Dm( zTAwsVMb|{@;KNJg)4R|~8rFj5OdYf0=jhPJBlP&kF|3&pjg2aL0~u!v^_Xy+^l$(J zufx29hC~228lOKxjOH*e$3@I?!P6*X&Q*TzfZ`&(UF3d~{k= z-P80ZyX=<3lvq+~H@WQcwMQ$ilxDN@4KTPji}50+*Ubk3jOlY2grY{zBBell1qd$= z-QE{m-|+d*%D2gB+u}HMf5tv7-(7w2{>Eg*Qw*9v_pPQFvhn$79=WOvrEgI(P^Abr zh73&=_BIR3kDBntf;@*9L+Bz}OMQ_t(1dk%x4%SeA~F7YK@$39k_coO8;}q^S-J6k zAKf{fbl#Q*OX?w6pD&A~CY8{ct*z$aXj!c{b;bt;nm9CYR&$!h-arQ+z!*790vD{M z;pC(ZmpBZ*)f2ueLYOqDSM|*Sg2al`!3sS*ib66CatonTq==!5=>dZDon!63r}9tO zy*Nvxf#Im+STZU0nGz~v9Xv(MaZ)fL$kiT+ z0f~`~teT}IF&tQ|0RC6)?yz)+{i{FV`>+ zhRggUl56ghEpuqb<8HU{G00Marwt{? zH^eYT0nl4U{kBvD*s&%TE~7i?l?R_zT6@)%dl_434)&sRU6fcZMDOkg^Rw4SW>+Sn z^~v$ORmz_mFQON8{5_upViks~cG(ma804AMTSA=M5aSxIRv8UWFvD+fs3&|Ut%8i) zSqA2G(Yvbf4M!08j1Qa##*v1>j5%)!d4Vt%Al$qMp=`3AJ>+ps>M4#N3nb|d47N9K zWmV}Cv75v0vWC?bQHq=W`zLB>AW43tZaPH+OGaH9gEUPm_Wa&MU@eg)*b|?QyRFwh zs+U#8DyBeCbn5|JASB;BwI}R&S5r78=~8jP*?=sxl2p!lzfXFfw}xYGk=D*@Dv~Yc z?|K1oedWUCvUg*;HinSUnb=hbmtj0t&pcCfuo$-TW9~-53qF~vCGC3LLB6{bo#M4`cJE(M=Vk6jHV~Ayf+ESSu%`U z+4pC8B*@zxgMo380)CSot(;2^pDj=lvxMI!@?=__yds%`2DczioYDP=j_qfbNqieu z3>)+z9;1qp{Z}+{YSo2f`;wHJU0%A@1g^^xvGM67Y4?erW5;G5u%6@AD#r5$W-mVm zX$utR*ZZU|d~zCe>irFVitC(eFJdQkH&T3ewNEVZr6`;g52jM=yM?5`QDPd~sD$W< z*}!H^S3g0ytLn;)%38t`ul#Lx(;zG-ig{o02tjP29oHgKH{`N}vzJc3Z=pz8vucs# zD3gu0KeWh-OZE14z-sjxys-*>{&`y)OA;E>RC2`{Ur#mGz@3ilqSXERvcybwcsfV0 z*6E1R<7Lfu{GsvTe#g_p12_{jficx))!2QW26JXA z%vk47{SMNGY!; zUWS_#PRs};W=mVCLmzc10K5iIz6}!oL^E-rT)BQOWKB9pS%4LF2py|2Ve?~EZ zE#gCD>XlZjW{SUomB#GKCrQqA#mt^IroU=M{Y;ocT{25DC22D0%FP>g=_ODxg)$Xg zt~U)*_V;dTZOFt+3f&^C6*HzbU5s^1Yo#@J(%r143DInVrET^3?2nVALr>q5gp3gE zU%-%*EN-2J@ccQ#CUWU>sXIA^)764nW`Jx~ZF`kj%( z>5V-rP3UT_cm3oM>&z93Pbcmmy?FH-nA22UhGajn;JebUZ2)P!>oSb^bofx2pPqtPRZ4T;QThBeug)HBT#$m#k0?Z*>-~)4V%;Q@+ly zS}K4yq86ls^s+nt;kDxt501Ahk}lb?_`{jak9ASzn%zv}BU-=bo?S(jaqz~jktN~h zIV*k){Pnz@I6kvQWBltqD7+L5)$Rzqz21DSxsyPGgWV`;b3Tjl9&r85X34%KFG|>T zbdCaH1xq{n9%X*Jb64R58lxttM0%oI^J}vgtfALfk*kq-9R+SW1SM{iOHh8WtC1$} zhJmKkKYe;-X<;`~!Ikoc~y(9%Z@3o(O0>wr`wqEA#>2}$g7bu!L zYR8W$>(%Ij8PiiwUx*o{MG7PKjiH5#Q%bP4`FrdM@)+~CkmWJKnFGlMB1IcCA&skl zNWIJJ@`;`@)rnX{J-b4Dcn|bPi1*-y?=T5kDFvVB1bs{86sn-{KW2%ro}2jA|G(mpr~NhZx~!WA3rCxgZ5ACFC3VjT z*6Ebk&t(oGWuM7Se<1tl2m_DS=R9k}|HCowzr3yx{Hp=&Uy*f8^R&e&L3FT)dDUac z!y$a&{lbD%$C^;+FWsQFM;3x2M}+2q&vLII9*XdKp`X{(K2Lp)wci7v65<5LF5@?; zuIaYdtF;@R9-Ln*{os5_+rm9MDUC(a9R1J_H8WQ%a5xg!D-=axkP;TKj^l6ndyi8! zE!|fZMykVl2lW^jYl+%(npAR zVC8{8D^8c2ar78f7H+Z>T(D=0*U^9_Ff z;tAhyP!>PnHA|k3RTo7S+-D9Q`A0y=U{+_O*t!0wl?--f&9~#lC~FE;C<<*W-Zzra zG6-3JK|3%h$}C1mMt;_s^2u41n%+b3wB~OvB$E( zBNhduql}hLY8v)d=*a`%^v%in9~ z`!|IBcLCv_bh4t_9|_IxKSYF4aZZ7?p^q)X}(^omumi!q+GBkrd9Bny#)&PY#b=SfOwy8}i$w zAs{iVCvMg3xkIjmjH^% z3v1D5pm+6+$@CI!g~>C?`3WOjvzp%e@Oy_KF`;yG$o2W6z0t=A_6vrUQk%k@cS#H7 zTxTrDC;otyLdsB&YMZ%AsE1}Aob*QQzONYaG+uo6D*)5P(~y|v9JaFhK#(7d!MEHg z#cXWZ+OR?(&xF6l*>o$?s#F*7ScoQHzWVBrX4F z2z|eYDwcRVP-^i@Y&4l{svMw;VThP(CAn!N1R=#p&WZgi!c&$~D~F1936p63WG2^# zrX1`P*RlPl<#}+zoa|7QR@)k*SfA(7jKx#bGCjhbCP)Jy`dLA)%RM)jF4To$^3K+&w zO_XWZ6#Yd>IBv&6tSCMz5o}rw#o84U-+>b0iHzq6jeR?d9j($6GC$16p28(34qcGb zvsMFbHls1g2*MeHH&EOzLWH;U?;8FF%pPuVU(e!f_DYgqkL8Ga9i@ z62>ldZS<|xOQifl>@1hi7J_@}E z$Ku1AaXj7irg8KlNN$>qlf%6Oni{F=A(HLZU~FALJiJrrO>L_e2i5d7oM@x?h=_8d z4{|GLM-Stx@JUN;_zjv?FEiLA8NWol?0QT*NgT%!7GcO@OQTe<`qo!H?_}n|t)Ia3 zg*4ZC`}h5NiDftgQkUjodkD>(@n`0x`}%FUMmmrtVftlZ`WnTMjL}MjLxk8v`0@lF zpe+|DwGn#;A_W|_udxRZN3jL#nKyV2H@53D={i{<;#?!$3CcF%dtAC*#C?mHg1u{|G>aoK3({9s! zHJ0cyKT6Uhe^_R};ylGSn_#+fOpxX5lA3CId{aPgG>bM<_2avY#%kGJksrGOmg=JK z?QeBiuqtrMpGX4iGyxQUIgO!4CuVR!Z3L4Dk-VK6^L+sQQDtIOFSJm7R+(jxf2H^R zy=cLIL-Zesou7#i^3GNU{04TPF@u)>Qb6R@lSvV{I=sd3G=;EW7iB-amb2#$YUDoGG-Yo9KE|=XUv5Tl z$l5^6G#4}7%yQ?YxRshyf;O8Z8>#r!oWa(^8LrX zOkHEr*l#ROs@;0JUy4hVu$5-sHO?7ndnl|esy7hnleyv@7n=dc)oCkK zrR+w(614Hn94z3=s?JMKTqM($mgzY53%_Pun%N}7@~+)az{Bf0mgfcdRV+lw2Xhfd zVM=zFDc7%Fj(kYZu|nt2WbZQMZ&Ba@)*5*h<3OipE|bWf;D{8^Gn7GrV6HzVxU6Y@ z(rM3)Mw`$)rtWZX?WY$GnIhV5Scgn=Zo;y(6Enn9Ig?O#RONcWKmyjYc|Ou_mm%O; z5>TExdHIc&jYP47F`e?y5XWr7SYjOgQAq)SA)v9g>or)=880vX4|DnB%7A z!z-z$eB^A!=uG1X%d6ufm&Kv7Al+;$`4KLyrO?CS9_n?%8Y`e5;4@5mXj2D{m@p3d z{I^-l1%*)eYrdxL)PVAH!-0|<+$JT*jZ`)lg^X$Q|svy%lr_%D$ zof@eFs$PpXpK_;KE{qIUw2P0VgLjwAb-Xfq)X3k&=lI?f(c)|Xd+{wuI1m2ilvxCk zbMlN=#OS2$*!?9bg?`bR9v#)SJJ$_O!D5AexHsTEfj6+D#my{g-M|UArM1WjNhABG z{*6b{x&S@;DG{e%!>H>DPQJ1#{&Vv0PSm3oYKc}gXRnufS-v;DFBqxeWay{pD)N_e7p(u87;5|ndHA>5ftCL^3rX8p>KgpAvC(n<>@?7^Gca@({A}B` zv~m77b18=|1pEFS95@7s4hB>=aM2nIPCNdAuUe!sG$_akSO-HG!%!Jom$XW3tX!Cd zplFyjA=L&a)oqv%)a|R1d>nRUMkIEO=!7T-84m zkj#?im>YG_>&I)lZS0SZ^YTB2L< zT4FW>Oh?kbpzs;_TH11c<~VXSG~+@sf5GM(@K14>bqPoY%{OS?foiwXCk;XaW_Xkt z*>qfx2-Kmydp--Jokf+6B+(HI=;)bAkn2v9;7s2MufcH=99%>ck8vJhWcE)_eN{wp zUZ^b_SlxpUz{MDdm+OYp&!W_ex?Yn=ze~Wtq!_6Af`;OwvgJ~((oTw^+8s435+vel zY@qkc&x(%^KN*E+q(QxH=BbQQO?JMPh9UYGwOwa~5EpYBphKaq8H6{4W3ep(U1p?b z#FUo1T-6UvOKf;5&P7btsR_PKxjHTFzao&*2G)Dlx;%8r*VKrZ?>6)WLK1XcW`3=R zfTaNUn^QuT;-3HW!#Ks&3)cFA6%01bXk3}We0}fID>P0iZg#PE{dgMcR{09*fSlN@ zW0qP`+XRhP{c@wZfy4Mr3B8%$#Qw`LA$i~2c&pOGGsA6mhE9`@p1kOpAE`~!O)DD5 zM#<4`oik&p4j6u%ABh1vhhsXu9$GfUv&hqwQs6mnH5SdR8n1q;UoMca@c|66!g|;a zzJerIyVppZ>CSajKwuC(aA*z${arGdf496k0X>via&q-8+0Py;XT;F0?;jQLP)DZP zg7()jSaWtvSi8&jGVnSgs*-ahVDP<$#a4{EU7)XE3Sxzm;t5@cs^jnZhaCgO^if-C znsw^gy&d}SkDk4RGqiCnOFE4a;XR-YVtvPO6H70ULqimAno!T961OPE2!I5 zv<9lWOdU;RyLeh-&ZEV8jlFqA?_#`^<_CFX%&fm0N64BRiUy?coBO@DSl^&06Q&xP zZ(!}Ijivo7j>?wd3SFPAAyWmrw(+7DW*WlZH%NdgseB+J%_?5LjLCRDkk`T}&Agmx zlujL3)aJMCf5CnSJOkm41Rkzhmi-88NZq!pnga>)Ij8S0No6mm zUa1qiC}dE2ClY&Fg|Ib*MMs5<>+l$7oxSX4wjWx+9zA_G9$u>I7}wp7<-hQzBOzin zv&C8=fh!%ElW$^Oy%5Z)bk6KiZQv@pfj$9OQ6GMx& zBqLUAbD#UOc*3>tFcto!HB$eQqLcpLpxHkHIscSj%s)%1f6cA+DVocnDO5Xlu~`yTo17v7@uKy+3a{;Fz#I=XCsdK6v2%5~>%tRc@eU3konPQj{z*$xo?S zOSNcDHYe-P87exe3SLS|HCa-n5ewK^ZUW)6PNic;XAJ8Q_3{sCFjU@f*_t;u6|$|j z6LO>kEObpe5{;F8+mqI5R6l6HsW0OwYOLQjnIncWCC@sFU6|-4r?D&IcuSU@A^Eg$ zN~K4rNybNBD~;xJlVrAkVCsoT3K?6|Wauk$9)3zj45&xBHs@tEtbzis_9M}Z`6-kQ z`I7)O`@H>}rqs{SDIY+f!O!_QVho6!$?3}O8rIzII8!J6+8^SI--qAMw_j zavCa_Z_L4NL|@y0tU0?lnGe7(QAOX3(Plzs(SziWQ@*qw9t9l1>7R<~G9e;F=Tj;IMKWjO z6ARFsIWn?NuYvMcIy5WWY@Jt(j2yt=qh;Wb;aVQ6Eqe+R3i~)=8sw~xmTV$rn0vIfNk{OY+Cad_ za`m%1Z?U;r4;TeSbnB?LT1Plovfj7}fU8NV3>{<9W|Ti#@eH|!30@kbJA8g#thkc( zay~b%Hgc!FZ{Xx5%FI+L(x$ps=sXEk*NG#O33M3-7iW4$(pSKiu}sHy@hws18C zq9FD50uR9t0yCW*h=!=lwSr{r?sh722lj-g*7TS4+GHhihwacN!j>BN;1A{G4y zxs~Cv_G4dJ#s5{#Dd845F8Vb_wlkN%1HCslBQcg#Gd26iHkJxFfKu*OVOT69qw(TKJs*riHQE;m z!?ULV)5$?}7gYWg;5C2H1UebLxIO8z|0Hk>y7n+aZ1}B@iyH}tD(E(YBng8*rs@nn z?#f?EzMn6nkist*;)MKH?605JdVk_#KXg`K@+U50|7BkBe>jZwXE`ZnY-pilXK!Qh zhdZakzhJRUaY+_k2!RvY=c~xNe&|>93u`|!5#W_8AZu|R8w9aUoKU^i&0kQumAPFx zKLbu*uneXAU%j+mw<)xvi{;aAAf1OyJ@CelP;tRwi$oQ$7-no=?$2x|INjAcKHhFB zzNB|D1JU+~2Nul5M$vVfsE(-U%s`y5iqYGe{61X_j!Dxfkn)!cD2gk^*rlXTot{}P#2q*si-}mx)EsyzZe~whJA?H&VYa#(!U** z%VWCwL%Q--d~tSqS^Y8lGu^WVgd=#}TbUsm151n_#O>-@QDkJ+*0`C05U;1LYmtYc zbsJrjAAJ*PaTc4MI)R8&Xl9@R_v;$aUDJkdY$mM%Sl+bCI^Vl)vw$+mmyI^9K@r0mFJgXGa+lkyc z%3U@Vpm&a{()Qam!l^;O%ABZ#aeimjFps-janh^>a;>`P$+@zSXSd4iS)T`nl^*sF z#ijhi+|8{OUY!G2hoq(Q1rZugEIt{VfMGx%sdY-Qd3=W#T>g0 z-(m&7^Wh0g$9GkjF`NtY5!f#t*jhd%xCvGwj=v!;-Z@jL$zH%K+5r(8am+Z27s@MI zCIjgKf*u`}r}XW%)a=tMH6jkdZ#?ZHtfYRNpCHd1j3s5{&Ky(GRQKKREor0zk@(i2 z8LUc5K;3U8_gpnrXXdBzOEj}hbZwX_^}#Z=r8Fc!M5T{`_V`KIp+EV7HzCjhXl6EY zhPQRFlXy#?RJ0DyWu?Ds>4&}dI9ceMDWkA3V>Bth$e5~Y ztC24BxwhmrO~b|@NT4C9#?7O+^ zw{=4RDL#9Sp;N2xoJAzGr8+fNuTb@#r}*C>*6cPtNA@^{W3Z=PA4eZ4_GQdiGx*+EG;?HEv3SD5<=tigVO30Rw zs_%fRWgzZs=dThQdJ|Cs7^?i*UjZjr>U9rdS10EDZ-`YZqE#zaz56^gAvg#6rU|BW)%}Xlf>R@cK*gsH4M5Vg%n)()s|Kw?hybBOBvs|xFKHb0mK%NoUr zDqtT-fXoQe%>3X6tPKOZ`WsjxJMq60y)bapj%S|*}^0VmK11T`Q{3X@Z3yGFc6A{N$7ombsi#~3N#VGn5L zJ|5`#q>9^A)P}KWlMjJ@qgT)Cj93|5VPO|jvFq-pxN=v~U%sLX(L{nseHq>-8Nybx zs!DczB8)@8o1&)Li31QUrx9RnLvQR0w6zQ9(O?uUlC zV!N-hDD$F|WkGLgJhK?(nP65p9?p3^h(2#vDuEc?x?jR(yn1oMn5iWA&y61}ILO+6 z{9|C592>-U^^>i{|I32=KhzTcJXj0Wy>8&N)$5nO0trs{b)Irg4ZsZtpxBz9_s&!Q;eu zAw65pAAb&lhNq!y|M*|eecaX30**KB9BCxN_M+**edC7fAoU>iVIBMJ;AP>fStl~$ z{o<4NEI7WN;b|H(z1rh5%vKJS-O|Of2m$aU-=Km~`!by! z0hL6D6hJni?KzKSdv-Rm()K%RfJ|8+<@+0i*nws3xgV_w2?a*{5C+YSTT$dW*-FxF z`%?Zg0`E#`s)Cskilv*YVpwjez2Nfu#w1s z0ltdAvRd2{Z{T}6p8^CC>*FC6ap}m4e|({3%I|x6v5+C?DU>O!y^X;N(j_e>mkBX| z&0bM^?B%B<{M!2>81hHttnOKdOo zpteM$%pGs7;q&z{XQCLprSK=1w}fiauP7=S92SdT45Rbq=WlkidLb|+g!B0<1l4Vu zsOxALm-GmeJ)&cBRfJ@Mlm52t)CUtHY;*siH7(;%ANF(KaE2k}*2Z6gaCQ=E{dXeww>QYfo>Xf|||XsvDvue=l%-3vv|;3vb2NZ_1gj{$W*!UchO!LSBV zlG~SGEogxgH~xFy(0jYIowXKewU?pF4C9lv^=2QwJOsGoV=q5&g^^p4S zt=QxFDOu!Ih;U2lg@Ay_@w*kB)rslx6p)(6p7E-lQ>6FYDj|q`{R}^^mMO~b_tm5Z z*F>z*={*VS(<&OrJ|y>BUyBOgAQWzBX}a7E8WpbrBtN$KfP90C+fnxro;RSgMP#`` zd!`Y?NhoZ`W0t-q<-g@c%h{p}WA_PN$^;+#o|f||N|yJN-cPr`n?*s3Js`2wWa*o6 z$l2~M{xJXjwT^0GTC{+4<$fq?tKk@#5R}SY?O9+ zyY`${7a61oQ&WpzK_}Vsl=oiJ9g^LqXWHF7_$lQ|@Tzw*HIYx>vX z1OBVX+Y|<@eZOuAA`*Sk^@h|#4~z_0lnjEHHjj7Xf(-6q?wE!`H~;Pr@U@TfodFsu z`&X8m2{4dQHxFn_75agc3Ai>nPZg^3YMcG_s4PwT3Um^fcq(>1eb>-d!in>d!LP0a z8MKZnD)7*?=$qX51;f<9b)v_J%AF_3kGEe2-maO_6L}fZ-M~Z2FQ)?OTdAh`!oYMX z@q%_JGSE_wltUlBsO|_ch6NL$KNc!wEi-Nm8D=nfB8D7m3XTS%-u&dOO@Dx1wkxBz zk3V|I4i7+x&sk@5TI^FJ{GMRyJF7S^p*t4Vm}1=MzgR!ot+9t%(Ve#3XjC1x>A`(& z)8L#|!`F&kq2?0|Ss1f++_v^e#TwiT%%=5gW{b4c5_$)xqWRt4Z2o4|TooVz6GL)XR*dTi9(G<^vr!|FN^f z>dh&O(t3%ni~7sq!m@)Z)FmZ%J*MRxDzR8`^En7@CYdv6FY9_sK+Y=z9Y9F=r>o_elZnoaOE z^svFOZR`RGx7!usskVvZd*{fcg^fr#_b+6RfVM{v?s5(lhtS+)LXxsu!VWUNlGFHUOMDxDcIk^xtX!hQuS6O?VjP0PtrO3v2vgGEs zv%BCEWSO|q2;yVrY42}49*kG}88I7ImGj4<9DMACOTOv)EaPw=2@L%#<_cB;XY)F~ zf%U)eccww;dFg?*sFQHbRo!>w06~8dUyZNcroy7mVscjlPob=Y{Sw9VZ z-o3QR(%eP^R}SPcuXx}LDf77@HH$=mRAlPNU3l4N9O})@A3P#w*7gh^q^cp6gneLM z%FQ@Px&r#>=@0r^ta$)NxHj=9)U&HvmakbQWdnTD>?_hFi zCx3TZbHD6bQ8V%OlCkj)Yz4&)raq!_beNhxN@y#?X|4|`Qv%Ca1JW~moOE;_Q?L@A zaTG*k8!wZzhoe=Qy@tw}alsfSehi39q1BDgqYgu$Xw%M3;D7~cXLXl}_PNz zNC1h&0s^PN9@;S;p|-i1l2|JWw>!;_fqs~Tg&JnBl^zZaBL#7qEZQo1S?aaHBo1Xi z0Ea)r`AtcX7`UD|FYuT9dS+L%hMn&3nbkd+?^m&2hsc-fw2(Dz{~vAd7-Z>|b&Xb~ zZQHh;mA36l+qP|6m9}l$wrxA}%Rb%j8~6U`bK~od8?pEP`^28{tTopfW6Uv7ChjtF z%G|h9nQmV)7K{y`Z%5St2sK0l8e*tZ?u3~(6`0~6ffZzu1|h-m5ucEYM{8cf~C zz|sTiNh%q^XeYHP<@gQj2jCcfJCH@XQr^At+e80@g^`h*5}toK90dz`8tFF0YNh(} zHx~`GI(#CCB|y}RkZ+V(9e)ooqr5Eub9k%aDI>a(8l8eRcOnMep)nLCZQe>dpwf)e zd$Xd7)+~dnEIF@|sqduOjlsF`^hv?{@P;wqnBJ_*?r%$wFI}* zkxSU30ii%KA8Sv6i5rl#GVm22E_U%~5~5v~dW(gHFLgSs8oLg(ngG^^wq~#4V4L(5 z0BjjCYlE#BDCh)gx84Jo9!S})|vjvLfJReL+iC+Qc)*!)v!Y*o;XPt0T$a} zF7U!E`m0J_3oWH5$wonPPutV?a0EML-t1qjqg7XPKaSA0b+Z<~sGYpB*Vn)do-V zZMDdwD_K-;BgT#GJV(y{S-MSP)D;IQEtYE(O5$Ww6#yzG`Ai5w{S{my|yl6!}jKAyF}*WbqG&Ktl=N_lfklaKAm%Y+q(9S zaWeXUJO(LOb0TRA<2n3JwT`SbWC{kjG(7hnH3Y?>M4hcqtju#*5PsGN;+TAK;@TMn zZze`M!3LTam4`PY8ey9kowY5ACE7oH<#cJ19Lfi6K>=IZ6FNo(dJp~($siW&?VLPB zh-&dFjVU3v-)8FJsKGQw_KoRi;m7-BcMXWt|2*AG(LFn8CD+`MzAlq&=&$Uv28 zWQZ$`p1`6im)2jUSByC+w+`KnRW7s5C<<9j9=|+5z1!W!o;{%?UMnG&-f-S%U)=-A z@aa1bd&`n&XO*h_tZOGIuN@6tg4=5?Wphhz0fqeB46}%i6MIC#31i*36jt)e5C#c5 zLlFwSh9*LhJ(f>)Pj!B(fHT5xu^kD(2f3dmq+_Oe2hi@?@bs0Rp&yD53+HDJK=aPg z%^o{-{fa$!PLS?Y)%VVN?}n^F0atbi$*9@|8!U-Alk9~qyd+Ve^XF?EB4785Vlq-Y z<2tknj=Tu%m90@EpixFpry{LSTCB~G-qr3+ehwSB%mcWxU6^oe+_Y=OO;AEI6n%Ty zqO`A}eW%2+?0cye2YGn#&r=&ZM#uYQ$YMS7A4sy00M)j(+t}g^`)}I#Sz+(lL!>hKk!90 zuT6!(jMp-Ej`yR`dFSm^HLSny!QGCoJx|4xCs2x+4PLoSy?l8+JGtC{i>})GvEE10 z=X;UR0Ksa}x9Fm#nsw-sX6o8o*?Y}@{Cl_oTjEP2<44~yG0~xcN04;hsFri|5|9Ab zQ#xWxs&Z;AEIDXLf437Ffi=-|qgE3a$29tDvo6?DL#A;rLVyJ))Qh>n4qTiXV%q1v zDw^ZeKgjMq4R1e$*lo`_hK^vU#Cf4C&R6e{R2n*m{MkSyIQaNT$or9gO6TD+I%M^7s3pP0 z$fEU8|1yn(P)H-%Q%K9-Q%NI2!h5q6&k;JJ7K%X|85fC|6`#h)XU_QWJHbWWBZhPLTW`Giw^Ek>JFou#6}0^m zBKm8A{cFzqpC`GFe|hx_G~rTF)_W*c`)sW$|9(LN59o(uLX$-l#l7y4Os>(Y-B{S5 zzWwcSD>H0;{S$GZAJp52chtq$i5%I5u0N&F`EtGEX`J2I*!%PK6R;cU5M7zO%jnW> ztd1*wDF8Fg%VgDx%p;kT*7)#{vslnl*}htZqO zG)fp)0AN(b^KKaKUJ1JWRhg9K1NRJk(-CSw4Si8oLDeTGfK^Mz{3MGdm}GQ>0r>%+ zC>m@GC_wUj&KX}TKy-&usK+Q3X57SBfQEtb!D=^-08kjT6qj;y*c1+058pworvTTVCe=S_Pr@k3>0;+_s z71pr_{WvZyi=g4CAb*`R{t<*es$4Q@azXChS75hGNsMHdz0gfHpbe~$!zQ^$csxjU zSga?gf8QRhOtR1)b2T5^{rl>mhA;vPPh;5B#oI?xjnKqtx%X1oZ-QyfS4{TfNQbAmHZs2k5S7RH}Ua1%WxqJuHSX+P8VWV!7Pg7xLEgk^xS*v4fQs1&r1J{4srM@Nn-^zwhX@od9d0*LI>eb366M=NoEISAo1-^~`JF_5p zK*%yAb96D|)kY*#E_XfIJN~@gpju@C1zN2hk0LGW#t1Y?+kRA@!yIoJE6LVZ9~btw zM><`fFuxIygP8lMBsewckpy-Pm70j>l9)D>r7~3-aYzbDaKjCF^4BPGR zi|6;<!YDdJIVx6{^lJoRW{tk_Lh5tI5{{}7&g8Qr2{Di2bE7j8G4+m@_?@0jB`T&Cr z+$(N(;00`SENY1Z-KrSxgEc@U^eB9Q3eh$7{uqbSNA0}sWUW?XnJiH1as&_cGI=6U zPE7;}iKr$8_L8QcLdXm|J7%XX(A=41C5EAyfPC?=GHaKIyag^VYcWBkgZNxAQ=ySm zZ2$-TpiN9#Fq31Z=9?&Ux2fz!OsH)JK(JhSt(LTK2y=-Wa=wrrHVQXt(0ImEu0iRB z(57pDp1P96wS!_Ei>z?d4%B6Ccc6!D+2A6ugUiO>3Uu_4mPt}L22tYH4KBeX11q%3 z^3Xg4Rff}Hetv7n$z;=-m*Ddttb77Gu5lz6JS|~a;V)l9d~zJj(UbF`;2mDkTq$_r zY$?5MmnY0}XAllex-2g&qh#)xeHi=^P#e@s`EvM+2^Nq&&xqnwq2kXj4L2>$^nDJX zz;#~yKEnsBT`na44M!{%f^~e|?AU(!Jbn``p$91wm=Ka8iVph>{uTL5enl0yu**l%0* zxLSZAr&C4_q~H%K==d(^&s<8YTqV)nasoWU%fVJwlrR2(LAE~|p+ zgN$6H_5RJU=n~Qsyh4qkkM2dEzZe$R5aHO+%k~Z+aytaN;C;Q=J|R1=2~I+vc8fSV zBc9yb9W4gV$U3!_T*Fdx#ij(y zVlFx0J-q+2Ig5JG+OhgpD-iwvA%XvYoEW}2B}2RaRd7|Pm^&jbA#dn&3&$A(67(ur z6pNZxBV)pwU|9f$_OOsWlr`FROY27$@Zk_fC(JCP&BnyUk<^RL6-LXZ0qLQd$fwnt z(%lPnIahr8d0n2KW}CEKW%7ABQLjzR&aRhn9%a={vA<=wKP-8F?eO>v-IVx6wI@nR zo1A!XWY5>Onvzm;nx-^brK(#Qd?CtQZY(+ArA}(NnI^{nu_Sh{cu&b<2yY!Q{EomJ zWImYxZR$ z&SzO5rz5dXOO=w((>2miR$EbZS!%Yf@LGg+g9AdsB07a8D8+=*M^sY%S`I0m}3 z`5_0Kp8QtvC#+^xCuP=72zX{y$oB+2eR|GGVnY^`aVG#*AHHv9lg_EKDY0wf5P;Mb{MAdHps;Lx*_IF({t)$7a5+XzL6<2?)9Q z5Cu?0OSAZU&RT{)9?3J|ru-=x$~M3Au=FJ%T`?$F^ButhO3fAgJfuueb__29ivr(s zjNtQ2x>eHS0A%u%s_#Pl9wSwvT^?nSAza6lXN30xOLm*dG9q7zavir-!7kV;@yKc* zw{^Mv1puy>gbo>CwXr9Rv8b_fmRc1bFyn4?Fu23)?)}L;BBE`-ar*?xrViHoKpj4+`hSUAn3*KR73DgD2 zMX{1e5A`wVq}BTcrP8->%dyPWlq`*=c1bso*6Tf{4>Aljg}Ndt{zv+Il#i7*?M$d- zt2h##zVTy52s34n`~{}FMk7pD<$xmlSrcNB3MBm}h)()KsMo?A(;cxY=~pjAz~W^7#fZ&k05B)oYfE z%+WVD`d#I!&ChlRZr&AX5OL@B0+Qw!Z|c5NR;+nf)>b!IW@naG7dCNuGv{i5dN{98 z@AQaK(_&i(*`Qlfw-~X(DYaAYawB!as>zy9Dn?uI3L*3A*`J=D@D%<&BUmH9969w< z;q8&}f2Q9w95Xv(x6QBPj>u-0P)W`4&Dx~fwD;=59dy2K6&-IV0L{mgu%(GtRx}vp zqOW5&UT+oO4@^ntnxW|@OWC`;M@vP==c5P>U1Fzaal|Ox!qJ(9Br+zh(E#^f@6Va=m@g^@`f1Tn*ko&@(|58rtoH)uuSj6w;l$4dZ>3n8dQnwArmX7i? z=@ZMU=qgn7&543D1AM$zlW8G(W*;FFv|s!z=Lt(rUwU_( zKnu#IW@C$~>ANZ3lfn>yEEOo+&oJKEQgi;@21h z> z@X26bXcqx-5xv0L-%gLqPNFqT!>YG~k5mx5H(3}LTTB#0U<|4mCP;rNPXqyo7)Kxn zkQwt5flw&`k0V2q(ghz;oL`u7^_k5-A3 zw`RCiDJ)<*?A8Kh*fb{nR^C~o8K=;UBc~?i*4dLxK(mgkoH2fuXqHu@Ugm++dAKmU zI=(P$+$5TBLW^laRhk!nwSdQ7zpzFP>Hv)KZgCU&U=V)Xw_m%ibd@J20dAvo=8g3w<*pW|h?s<8pD%u_u z$kUgINrt*NW!-BUjN3wxy#pvRfIJdfybT!26@3Qji%oRkQ6;zj}ApEFoTwo7Ev%5H+vxT*P&uyo1f3Iwnnv1--~_@zEv>9yv3 zs?Bx8G`3tRgx{s`^RK~r`Eyh=9pK)W8o%bkP6wafceU~R_yInGYKWB89eulGA8mboeg=n-4C~#`)`ph= z3N&>AH>x#Z#n>Xv2$5hG zQK;dVDrX!S-b<4gYd}&Le_$$&9;PN)aRke>Af{74=pQ*Jg`+1EfG|JN_Zb7~t{Fs} z#HTi1UO)koSB;;|N?YBxU>EfVhrfa#8@sn4LXFQ=U<8WPQ!?A;Et`LhqD=W`KuFmE zMbHk%QoG1gi&30ho6@4i098h@6*-GaVIZGbq?j6W`QlZ;4K#|uWmIiA$ z!6s7VT_j?}?iB@H*r?)Znp{kf5iNs5A~H;RJ~@ngz;rpGf`2x?0us66GzCRoO3sL# zxMr);I?GXkY1CckFJ%W~ST&nFjXIcy0sS0DB|VsUl|Py-gvoM*0urppHAVH^8?Ojf z2b9FZh*Frsq`!~+w8}FQ+zQkw##Bkt*)PXA;|U5274IHj?+b zu`-P|woHjFw`QH!%dX%dXy`tx+IK$Mjk{Y|V#Vf7{+OG>8aUnPeXc(e}t5r#4^e zscp_W~&=DHkR>$n7b<}Y8Vg2niLk?|mU21GiO1LzaCKMX_93*o|ngERg(M9cnBxuWya zysyss7&h!fm|K7^CD5a+%DbL(9m4h`-DkaMjfw2n-E08pXO{xwGG0_o=WD(MdJoWdlJY( zp)FmKJlc{sr1k9GmQa8i?93)F#H-9kkcZYl(R1qqRCga;hR1W6ung=R?e61f&0dbe-Iw9}s50kMkF>iQuGNW$gRt55pZk0wiU zR!(Z)eUeON&<*U^bM}kpvd<<-hz9iT5!c}W#hy<7k=46|i6;*4;GBDS+wPDRU_Ic= zLczdCSnZ$Y6me*oC7aC7M?@z+S)0~dXz3-1SK*Axb>fPy6V`UnKB3_^=W-Y&-07X10n>HZo5GBdDpb{)$3P;{^(r&MycL{&R$<_(fJisRu z`oO^JuYUm0=n@UH2;Vf1+~3kXI{(eKEcTBL;a1EwRm;V0w7zj3_aVIBrMe&v6jX zUJ$V5Mu&cgkU@`)KxFZ?`4nEN+k<0!=3o&ag1=>7T3cM8UtHQ+^s+6lXmVEly(aps z6juSDZLZ&3)Iq(@x;W!l;w_p(hp;qvV#Td%(^uMLLX;G7OI@^@BLx;B{qw0lee#Z%FD``B5^dzs zg$g~s@Z=yV-p)h)_h?g+OVJ~5OffcG^@|xOS8+EC>-q9Y4@&~-pC4^pWPT!1rCiHl zdhBj}{s;-9a*?2h*P}B$Ki!QOl2FiIP|5Go#&gs)=7=mz)+MEC#|_FIYwncclYCOs%%w2qWM%b| zssc?${O5xBCn}J50=5M7n4)_e>_6F|4-Jo9=x?C zU@F5V&D-B#A9k_SljhXwTGp;Fr43x-69n_+>@pYtk**!bK)f86i3uppnbs`jAL0vE z>*$6aE9kHUDK`385pFZ34#>^%v@NlYqqJN1_jqAqVziCx0;>v$L7+yHg&Yian98)I~mtd;bPkdG{?Pj)>X2 zBqdXXy{i1i0m`H6jN zXT?jB;li6)n)OC2l7`U!*aCNLtY-Psj`X4qM@Iougn?5i9Fy>E$m@Y~EMRL25~v0p zmGL7g-n=50x3JgX;JMz$8R5;=7PY@d_Oeow4|t=W|pek;!s$!xZF>viB+{b$1M zQd~^=hygd7T;;-iV}0l~`9UKB)Zq?a>m5ewIqT#VaPEPgW_zSmectZUgx$G5<9j~F z83ukq-1L#+e3(P7NFIx<=?mm7W@2sq3BaBuO6RxoEqs}LQJSMy4C5AA*5p6q(9RJ< zR{mi;YVxhLk7%;qUat{Y?)2fr2N4)7Vpi<_q=H0W-q~ z!Uo4>rl+1p3EqbfB4K1>3((P)ydlR{;_BN!?=1hW;Rk!Pi*AOl{*)y#fTV+GS>`+m8pPf$@#MP zWb-pTwB72On#NLcOmujcS3ymC5qb=E5RaOiQv6T8$w2@9JHiy=Qs4A>(iuDfl$1c~ zO-nAhD@}51YAh)!TFN;eV0X2*0U0L~MbRvwJ)*!Kd5}%35sN;0sWR4Y6E0;(SHYTu z9~kJ53-dv7Vz7AJBnub{S;J9QSq>Hg=wgO(P>ywsKLbV>UHK=YifWfgS#MZ#4Wt?X zOg3obl^zFM1Kc=Q95dNX_!wd(Av^Wy=u&7)49>-WTrEzPCUMnNYW|Q5%IR~807CQd zZd;+>>>CI?#CHIzeck$}mCHTFLq zU_TY~@3%57RG)XjuM@=&w#jvKi|wVeAcQ)4I%MhV0bZc1$d_hUVlo$Bk|3X8xRm)0 zk(w-?#W(`CpO+n7FLz@VDA-uW%T{5rUlf0A)|EO=(n=Liop$xz5wv(hIzJ2{z$&#p zkPk&olpmC*%4$tM8bi^2j$LOdQBvY9ruTf879x+euCS^@4zh~8d#=H?MvdIdMiNjK&*`@!o`9AI>yOqW1weIo+g|L^;iZCD=G>x3!vOUe z41#mC_(yxVq|oeS(1(h`*2{X-%VT`HngHzdXT>V{{uPvwf65>!lksG(y*6&VrSB9S zDUg*yUYncGb(kL0p-?(`0YtXuZxh1!6D|IPMgSK$S1Jp?e8?AyVGRwxU#Phd)5NXV zqm)pnPigcJeUDL<(;k+^!j7eb#J0c}mLvkl{9GX%>)<;`ZvB%EmrQMd6nc*%7ljjx z>#gk=TH4cRwe0gPrO})D+BpT}6=oiP2+~N)#*>>}%I~?<3T=K%1jz>~i3-uYEUVJ@^!{0R&m`nuUTxHjg;AWE|qdlR~VVMsV?32ZWm7Kcd1f zb99O%c>SEP95TB^?(tDQQ;rE~Uh?*JGhKp1?ucz)O$_T7hjg|-a4lj%?`dbD0d5hx zRq7#?0&M{3)iDJvu>e(eYNpip;;O39F<}e3JDT^Kn#!gcpcp*@O4i#r~Lb3V5eHIBK#~rq%UX{P6*D!Ns!8P|2qJCMMiJJCEM^DtoHs zzx9TsJvCYF?Hsrf0BgaDNf)3ShhPNJ5C6Nyg{?jca|;g%wrS?jyuPb<*n#ch1ANm| z#`%!AP#f>g$e82v7n--c<)Uq_oEYrnv%yD2vQITnu{|MQ~QxN5!?^p5DZ z`+4{qLDSOBiNd`|{sJ>rh-fsBN*uwNY}T$xzALi1NhlNVYW2&6l9xW$Ey94KhqnC{ zm|^6m*mN+G`Y|Kp=qa2rj$2&^ni0?X@1MzI`eeBlZCoG|BMni8Lvrz0$UQhwT>3XUJ|vC7xGNB0!F}FDM?Q2e{`yPSqeiO&W7k8}i~Ex8cs}b@P<`r3n}3 z@HXmn2Yfb)YQuMVYAY7L{$kaVWc6~2zOO+pf6J=L|5w+bf2ScxjFJ)uiqkC+$_=U2GQFyJ!o(Bmc9}&(QzboRT^R{U!OMh8Us3}JU9etqYm}N0Kc5aD z$Y$}9C^gi{a#xF-3}FEu` zxM_h}_92Z<`d$Y;udV2Yl5A^co-{~`*V{Y~TR~xI?>H*X!o!zL_u@U-7fMI5x+xuC zk~UcxurshRaGhJs2Eq{n#}AJ$i~!~dwDtCvkr`U2ok03`Rr@hm;{4!SxTZn-Bv>%bbwsQBSUlV%Hx;YvDkLb>g**%=pI5N5Im zN)SYCjzsXYP{R}tey}fJxgL6sxo5q+oSixUh_2x~Hbrz5fIt4_P7pWhHt1GUJ4+Vp z;r43rHWPoushtzarEx%1H@G$@eu>E)V;uoc3c3hJnHLWdQq6^gxI@e@q-{-?;A@#9 zd^|~YATyUrxSn;nqe~-`;tgN6+(|IcqVWODWZNTzO_OUCy%%xqlYxE3%lZr3s; z#19;IZFjdND9Cc_RKUHc%R8xeXoCAfoqfH1MZ{Zbkx{s+ivB1+5>}&Z%?rvf5f752 zRlYyLo(HaLtgMu!9<#4cI1Qi64o`yOAHa$4v=>IVo|xy$#MSxeUB4(MnDjAot>I|| zV@N=VgQ@E-jPn?O_?4446!x*m$zjk~U{$`q$;SGU>(IHn;4Av7M7r?DJ!gm{=4w|^ z4;uy-$|{pqC=!>4{M|8{F`CdeV~t~AfHs3ob??ce#wF6Xn_sQlHkNP)A&KJJi*L+f ztJ=;bYytP^x(VW4SxsT*?wp|#=}k)05V~l%at}mfZBx&G|n5S>~F zWu5#H+&Oi8$EE8Ri`QQ}8l76*%GURqgZ*10+y5}i*2u!z`Txoz>pyf)`0F{6x_X8d z!rxEiv(mM2b^9Opga(x}XCz~6FQcjvBVAMR-UXDJ0$l;sN_@DSAc@gN(;SjW0QC$D zl98B=R5r$RII<2h%Yh`fD$A0jKbFNJ+(Y{G^<)n&oZ39axTU!BS6O>scsy5c(j@5y ztL2T)55*wCx=&@+5_IzsSB;<%j}M+0dTml;_m5^^tQA)hdhjTuaQxx|Yy7%<%>sRTQ>n{U z?kzi>uAHp=SrV-QB&mOl4;i%z&l*T=Ns|`;;6T@BeQ02fF$rqk)#IBQ#;f`!I;ut~ zwc|1rs|zSNbpVW?Ey^C+e2Ec~;_>>m1#E0!TvkPSS(9ra4~URQO}bN6QOi{!* z;hzrK$N-qzRt4powqz-cyB1o?B{WjlCpT!0pNDaSuyrAWVe#R^IIg+3t6hATZ=1}E7KBFC+Rn1o#@bw zcjHk^T@o(@AS}T}%rH_43SuoQ23n~8a(+wYIljS~!-(_TxZx#_Z2-Aodklp)a_ML# zOt&&$$PGur>Fxn~%!}WfQX-_aP^GGUuC{{ShZZ5S)=S9L=H-Qh4mW_op+XTB+Av#Q zOsL2T2s&V##;!DH`|}0E5rwuL%v^p>{>aHP6m8gSPPL}7haw_kIm8IUvbYUTZ+SR{ zp_IuDj>Si-F@!Tw^Ny~s{k$KM)ZR8P6-V$W=?xLbR*JL(ieFHE+|;IeoU9%q;~!K| zdVl}fKEr5L`>J^FFSSzI$J+_lfm9>E1gJ#n{WB{5nabhjGV-C{pF}Z$MW0OGgB>44$jV@{1B^zs56o82 zG2H@=+NrRQiD!Y;7js*UMAhH>;fqh(*w01g@~Dl9z42#a#run$9~ABko@daI#G`?U zc?ek!bc$n3TF2PFokp$@4*G)EGT4Xph$;vHQAl6lv!|?d83y5u+_wQc{a&ycXWTls z30ekpPU=~#jyO=z4pUKL*UG4jsr<=%ZzFwPbT*b-Qv036W34`xsE;(9kfn$c?mBgT z%reM{C6b*&Q~5GFLJ$d+0?ZJ7o~+Nq%vg62gMu~8HZ{vU(D6k#qmP=IF=KiN{kep& zD-8m6w`~NnTQ%5aN7!c%Smh{c_jE^cH94cb+^8*be2nxob>ckzOrvZ+=1t>Z{~$z# z2&>!`&W!&KV4m(B<`~cVHDGK?qv18qD&P`+BrNEvEu!;ei@6bil3#;8k+MI>d@mcV zv>XCeaRQk>tZ=;=LcJ_blJ*?kZR`-hlJ-k-$vV9^%Hf&9sgO`*CTp=$Z%Q-z4eh{a zunth7I=$v187Cg%r@Jk0KhM?P@%4;-d)Sj%dex3E3J#-BcmbSN!WCT!cI>aUgc?{P zGp9Q?t^g6(C#p5t&A%!O?h0WED@xZGZN3$)CetcNRNJPY(PeJI;L}zgD)6UU zT6cbivAULaFvLu3Qp13$8i3xQW>qKLSu_!-$G1b5(7^bk;WVJ!|2)@H%;I{tb;7`0 zEB#LCudq+wBP(6^ICb6CJ+u;Ryc{S~-IrzH%tgF{^Jl67$v6T_pX#}do+dT)l1oUJ zpuGB^e?;`>nqTqi_s4(=f3t;8%W?D`P-1q;=22{#wS8jG6Nm7#gDtFyZIWi2Ea|=g&MmG0C6)GB zi@|n^u?3ZEpOyShBH_g_$QfRz-<(*>jtB0#eJcfnM}`x5m(VMDKGFV9&+-GpW*No-Pz%tVH(G4-~ z=CIkGzKinrv(f2svE`m^<_$oyf1(P@kb0U*lw-^0SNu=+n~*Ws@W zof_=#Ti{=?y0gp^nt%W#3MN%?@($UwfP`EmGB`n+Ko$%zaYzDjPRSs;6oXn4M9q7p z4`iOQss?pRrwX3M29JlXXOoXfvHZZpTzOo(NgnsdgSD;Aqy6YEZ+DPw3@4yN3(}&C z;~>lBv@FK(%ERU~B?qaZ;-f1q+)jErHkMNKMtvNUhKlx&0+y>|VEdNhvWk2$i&!&PO%v^=v6(f?~4T}l!MplCinP5I#G!eDYT=B zTGdY7fH590P<&IHisEm?olF-ik+gosBB1ex+3h-p#6QH^PinVHb4GQNegHO8Oy8Kz zt8r!*br_JTCL^}s3l^_CLnGzS1^Eooh7u&h>x)lCIo#2DT* zJV05aa6b}zL3c=p+b?zP-ZwG6k$SI*R#JKj$V>t3z63?66u-f-6dFMM)%T!9w_(ZIrk6;)f>X#pMRi7YtCRWu{4ScV0GwC+@IYb0b6Ub%)IH8U^xo4e4(=Ult zinQ>=-olgh8P>ZnkC*+*<0#@OX2UmK;x@%MIL$^op^XZ*1c9+q&O7DJeaP*dGV#-$ zgNGxH-mgaGm;O@jawlHPXNqZxu{jJG?Mvz#QWw(ACp62Oetki&{82!KmX~JjZMWDR znwc6eT1R_M&l+W)TU+@z4$sn!s&dz_6J@dc`5Iy}N8@8!qYwFv3 zAPo^Nv!f=V>FGxa3yW8eSoa=n)r;p3OMguFGm;GL#!OWZUV-kl_(Xqp&P2h7s~(E{ zm-eLxeo3s)=WdJd+n~aIRn4P0o*!XvmbaH*Ppi`RDcSR6h?7N({4$5_CscA$jFozC#evB>&z8 z_TI#y&>;5uAO*4798qj!F5=kyt1U2K^H`ceCZ=jGj(F)J`hJs4@g6Uk^%tC@_CAtv zR@w)}Q|SW5ceKF*5ckrxX$AY)IB7-ONbf^O;za2aI#6|h zeL#z2O!eDuoYq|ZcyJ8eYSRV5WF`1+@D&66<^Akw>OKhMM!v`?waO%MwbNho%FVNgz}NOyMCbCxo~x7aNxZ{NJJhr zpUzJ26J2#@SG=8GfYqUnz4pk?9r`3VI@+3Q9ZsC_{SiqtwJL3n=>p6QWtBa`~-Utzssh|qU;^S!asrqb65BSRtHF} zGhAO31%|tla9M;JR(yt?Zwu#m7B8qB9bBrwN^O7Vz62INc#^j@e8#o5!*;V)GD9Ag zt#)AJFJg(+Jib!aJTf{_OE(4)B#VZS)y>cnsD5&usWAREqI#s>1g%d#hRIOR5sffR zvO(^%g~|qcC*#`5mH*Tnmv^?Le7Q-vcJPjxz#B=yHnSE}l^D4{!l06>x>+_Y~N2{5{W}MELk#(UxmX+bOT)Cd1FmWb4$p~ek zw}JcZ@oL@k`WK0HO4<{XeaG+h$^CiLiWq8b)<19n6RZmwW`#K@#*Bz_tPSnRLaI44 zZzjPWw6d%`wio9up?jpjf-LU|-T)0rW|L+p*_tTD*_5bMAAWB{$`nU;>Lms#02TIW zj(sU3DAwq%3*W4=G_4sxEV@A2@me8$#R(%o7`450`ixRItk^YK8O zVbWckAl{qDk103NgKKFqTEp5gS;0!~a#Y8&kY6q~Ch~lgtGgjNT6|D9X#B^DvRC7a zl(HFW(S9JtjeLB0jBCX?;BxG1`8nuk`{g=(0MvGkiP|+*$Hcxf4JO_!t$hp-X$?rR z-2Mx%_9k&}lj&*Lk#-MbU;fl&%Rv{mZbresr1*FWgB?0`8*QwQlH<$yXd_<`ZJ^f- z5rSKkdw7EHh*M>WaYaDMhm^+;oNB9{3AE?yQ)ksucO@Mwd38xW$LHH$HhU-+M1*_5 zX65(gI0Ts|ynMBk`fN=3DD6x|k7Ui?l3P^DlCcbJ&FTw`jq}INcIp^>`ELz|j6Hvu zhe##~1*q3{zQ)+c;p;Fjt4s5pormqu(Vj{^3(T8Xud6I>dh%&_MRAaM&ah!l+aG^QdL!zyu}jTH0YG?+-02G*V{=M6$h#d9t09kiHE zwC6~pGJy{Q>ZB-2X>GQ_?j1$erY=dJ07rJ?H$qe^IOL+7w=|Ep!JWF)xG&$iEm2fj z+F0h9uP|DSMd@lhLar)LE{BG=1UfsrkeW0V;rt;)))q|0YCVWa5U9d>mCqHjkPa2H zi0$j<#d@UnDk}$Ag`l4?Hin)*!hVg%JhHjze%l*Q&P3vRf=Qf9VseeAxlQ zeSZvBqPKh@r)^8li6!nwN_^EWFpo_%YR5J4k%ey%H8todh>auHOStOaK{I2j{-We3 z_-22C3kOY$Cti6;%N5o9F@OYL`D%lRW91+0p2J|p@PBxF2OwLzEnE1U;wjs#|&k8w5_m`LcFR#ZQszBb!TBnV0x%Ct!qae(bG=F;U zoNOJ6;c-0+q7>7_k?iqr1(_!$!_iyHoxv1}vJu3{aVi}Uo3H%rF7jc{uqEXfHrVJ9 z@AFeZ6Qq<{chP2hRvocJUfx0z-UyR-l@!~Tx0L}bd)qa67#q5zPv{(1>@yPGa(w(> z8MqE%Fs&2*R*4%cL7RtsGA-E0nz8HeQ2a^QyYkdR-kOp$d238M4zL{vbTfgD`rpmT zQBfsx24=P_c-Ms;orix}1OxJ-Qki^LV(tDVQ|JHDT9nUF&*ndS96OXXWY&cdKaH;_ zt@xJ_d#S*nES;qOBxwLZNMTgkj#ivIQJ4_vx5q`C=o75TYEwMO+@stVz=&!1&5OEL z%;P9Mj4x}!;v(Udsjt{`X5M97X)bwxdPHpAtqs*vvsvsabL0NTr$Q8I;v=yWPZwA4Ciu705L%ALd@K`0QsRbR_76{ zxCi;FRB{{}q^+^f>DoD-KM_j(toZowJqt_^r;`2ZVm z%}_LLvU56*Bm+-x4kPH1C;jR?Fu%YLwegY-g44 z28P%-i9W=aNiAJ}Gk$p(v*?{6kAQcYtjX?ou^eGKfHZrHfSsbRtqKX|RzLi~TGWAN z0AQRyhCIgSPJ~>K)}Go-Ff#*`v(dm8+$jY$a{97PGFUmEm9|s)y+^^sTX!WACNzx_ zd5i>S9-D>uQAZF;L1}h*yU)S`rfw7&Hvt;bCSW|deq@`b zK($(Dt5VXJ3#ZlqL>w;b-SiJuSKr{PW1vX+kJqn6+iM3TzgrEU2O2Jx%+R)U8m@R4 zc{``IAsMvceUW0$nJ7Xn!B6cJ=C0jm(LjX;7>-SLn%@GK^~}gDWMs=_@xyQAuAjse zX@#4%%tjY75rZ^qnm*2?=GAZJ-Yzyg@y}O0;~k}}dFlvXL713nbY*gUK$0yP7cLoI0bXpZyxXsc zTt|OQH0YCdkwkrf@RF`Q=_x?5Ln`cqS*;VEnO6#8@scb)n1XqZdW&L8PW)%-4sL`@ zG&|==3#wcgcB3PRkv9#qa;sfNsTVOY2`QLCLTh589uDFH83CBVRP68_up4Q3eQH6| zJRdJ%c+cq2AaKu=m>iJR02+sfj)8W!@PRs8rV?oLczo&?GGFQ8P`UI6*sGXwYW5r} z*k$8gV5A`$sq%P_CVOxJFxpjm7wJw=RP>5nt=Q-LETv9Iakh{GSywa)6w)p4kFC-8 zkp*MM%MllVimT~X+i)81zJ838Z7@L?tQT=+2}ut|;GqL9|5C=J&%cuCms`6Sf$w}q z{9mg6{x1m+f2~gcF8ZsWXJzVO`k&>{iFhp;1U|%|trL{`MR^EPq~d4aczIRW2$Kat zsrl5>5TcHoUdbi_wAu`!HbD5xhf$sFE?PRgn_dZ;cez1^IS?QziN_85AW4oxg&*QL!J42K%7VoY*_TGmajXln%s*{DP@EDX3C*n`SLmO?}btB1c zk6*SQXiRj_Llyp-^!#8r|wrwex&lDIk< z%aHz7Lu3JMdC*d@7pXFstVSw9xm%pOUACT~x7+X7n*EEM0NE^sbo~avZX2=q5%p!Ws|f%}-*BE+%S?Nkg4f zqtrIH^&4NPxg6VX@G~v{6jo*>q)-JnPRRMA%Ct#9u?=3SUJFne6RN=^frUzs?ipo~ zQ7h$DXyF@MFmn6zP$qW0U=^v{RGvwHkAP1QafmZBxGEtyn&JYXCLfgcoIgGb$a07k zCJxJy&8-_mZ4laCF9JBd&p$qy`RHQ*W}|yEUJo2+CO@`nXgryD!e-xTpZ0Qdx90rg z!(}+yzQc77jYVsY>ABqopbr9a3@qTt=51#C+u7WgK_KYFO+Uh%vt|Qjuz14Ld({3Y zfJc5GqJDt^7SJHsMA1MSNM>V~(Yd_ajjA0r70qb@+x{I*XBTp*mw_{gw6Bn8tjVty z3eq}mC7pAqx`n}75;XH*JgY32L1XN+VrpoeMoE*FfXcSRo?U%raJsYqA~SZCENvp% z`kTbHb+0(3_Xk9Vs*6P61XiD0wBv{>^pMuzEmn`*YCdOYfKl=5Y4UhEoXXOqR~aiU zTfz*ZuZ=z9k;hkjZFe~b&o2WKE`vA$J3UP)Tj67qH0Ys1h`XSW0bm?9Wad?cWMoqWYMc zm}?x!&wrVQDF?vTIp(+c1)6X+zTH zXP;B|sIAwnA=6O2rW&g=@y}if@&YpOGV3tuT2xaJHZ8e-L#!-l#jP={*X=t8mi)## z1uX^NZzJVCOl~|=I8?&1Tdi+9PSIbl1%6bZ7dhTpo8P3iR`XGAbtVcH#=OvNmYByV zjb~QpP&k=779~>WF>o)fqJR^tC(I3526yt5r++eujD;ND08Xun#T3(Hf%nN}uMs)9 z?ALb4QImU{t|&hybZ?!>Ed~@6LUM!+7KMmIkr_x;dQFTCoCl9A?A%=@59c>akyIBR z0td0P`v_IIicuSo&3SjsOblbBo~;2 z+r-Ch8p-BBE!>dvOYZaZW0%l@LE8Q>T&88SN&O_zLnfbgHVDW!{>956=2K7KK;vD< zhz}&z2k2-u_7|q5)b%a%@on4}`7fu&|HskcKYZe4C%)aaQPb~#H&rf}A#u9gZ1ZuU zYQP~0MdxNO;*)lWJF!?P=;N;_W{t&d_kdpK^jB%z>`I{zk0*)Ir+8%PT;cpsS2aFX zPrAtwwa{-F&c9iAtqf0^{N>rz*3>n}&AA=oc&l;%v)XwbiR|jNXF+*4r^q?8=tco# z(EM7p*KiM*CQbQ9uCmz*YZR2wC1VLQP^a6RuKf)AQ^2M?{FVgrAY#G`i)mc27+3#$ z`W{7dQ@B`!dvUTLM?=>#GPJ%&m2f7}mlCftN62~WExCCWDc3dl5#so_=4!omlxjxum{LbOkintR9#~esSHUMel}m~)r;7( zAJ#-Hm6eDX&$L>KA+E8jp5Y~L)$8f9HW91Hz?2bf;*|R_)4uaA!+xscZNU5Uk@7pM%5N{OwWWm50Sy<3=02>Dc1OiXgMKmgN1J^yDaJ zQw3f}^0*0bCxn39bOT|ay6yO!%_u2)q|gdGusO0^tC3(^Hkqn&blj#H@P}u^kIRy^ zvh0~*&XTm&3bBh0C36|Eff6>O`46ALrM)Caa_(xz0l&<8CT8Q50l`^>$LH+Mgh;N< zJhqec`h_B>lb2k-15dva!4bOK5U+}E$D^aEbB$KZ5_{`{vo=$P`YBqdB8{Gg##G_r zpr0!qrO;45ex8;k1#PS}8YKb)c8o%>{o+V?0T{5niUWWqupPmO<;i=WWEIH-UwVub z#pd=x8u+SVj^v7z2mly}KpE+B~Gp!g<;)i_Gi4t%n9 zvtz@6t`uCQ+Z*8Hib>{3RY^O;=7%==-8E45$yTH;HmXlKV~*fKTx`GKMl)xN66M z<%O{&HGZeem`5%f0OnZ zKvN8qwi-u_{FTu`*dU8v(uR!Z7{d6pSDgKV>Phts3N=T5)d<&ebC4hUQ?C(_1S#K4 zxwvl|8Y<ITO`0_-TO&lxE62#ImHiLB0Kvr0DCd)3A+ zQ_xdGJk$gg9^Vvc%Q5hU+7M}0IS7kr;68CyMBD&aWi3)1I^xYX2R(0DXOv@5Y{Iy< z4As#<273YSl-ml)tvvRmxpG<#A+Z=17=L1Q6}9L7TIiu@TQ4VouR#vc&D7+9b7-`f zOzCn59=H=d`PTrjCgRWL{NCNVjt~&kcWOtQFq@ zx)3{9RDFja72eI0RCO#fiWd0B=7ogH{V0*VyVG(3q-~<)5>(y;8$-jQrk$Xy!7P_t z&2M~4p7Y$1KSR`v5I0JiHfrCX%{e5jW$P@p_558o3=wFbRdj5^vU>>*Wg7&=u|Xv( zWXIK{QE^~-R~MOr-E_)&fZLIex-C6Wdl0#ImrQ$j+|fb8^%U&I8(HPu_u-n`r)VGY z3Tp5+5?!gNeU;V6vSuv=!aGKWeUxhFUiAp7^5PmOeqEcw>j zJAgADf!F}P*(hl?@kl$Ue3(OCoKngl z9*rER>qT7IVp|b}(xNPgwsQAAp8?-`5GbROcI_}?i=%WhduY~H6I|&^v=R3Dm`CrJ zY369)*O91$X!Pu&%9(pAgLf_fN235usFd2DoT^{}|!L`#S-k~c3LS@t?Nh-EH> z?}_x@^l>Kf_H)D3D(ZCn^UVmjEIE1xelduZ)uv9z-}od?B&M1z3{IGKHe z3j&?CEGQT0{qGn^r3^gaOW&N(X~ut=#JaZ#GNGV8+gkKM7->-KV92-(3S9+A`uH^W zyU|wGBI$x^a7UNP+`%E~`Asq0cC2aNtv0nkwk~a6uZnR4dVC&4d{M2omTW72%meh( z>=0@Xk`=DhJ*%N<`E&2`Wl?X6a;7Jx@bR}YAzvl;P#|1>Ml?D1`^Dxj5!Z~Tr3^+P z*WR;xx&cx>bEUW`tcJI&dZbl6*ED5mgq#<_%Te5Xq+4|2PpW&{2N-Sd(J4cM30j3D zI%2xXYG?J^d0U}(Y5h864;zEJTuKAFkyf(}dDGo}&OoVU#XBNQZU#~%aR*2wrEZUE zt&WEk$wf9iYfX_+*`qH?-SuLh*cGl$t7BPv0!s7Ga$Z<+49v|j`B+6+vfsCE`NPw;Nm$89zi6UVyMHI+$~C6DBFg_Ci<5uiD-0x>{{v-dlqkUs^>YEdS(P_zi4RM}4FR)l$ObF)!WC{>^QAs7 zSh3%^}vi~(t;-AN~pr>yhTnCp8kAVjhYmyda|=A_yXKo$I>KOWRHA8^ns{uXuEs^ zrF7*@BIZ*;?S9%mdTbS0R3mp}{dC>1_K#?ZtwwbDk3tHEq7>3+z1^9mF7soMlD|=peZ2YU{Op0WT(fcwv(>bb0csH47S91@OH7R9p3R%>?3Ig76+ z9r;Vk_b@=UnLH=DM6xTSX>YK+q#E5lvmza`_LGP)DFS~K{_4t*y*{qeKIw+r>|1oIamt1 z1d1r(lW{^A!y>XVz{W&wQu_U`0(F zq&m*4+rbOtdeY=0W_qF@?rq7^7@MY0QA?<Rjg3KX>Nfl%0 zn(?4{gTyfm40qFOR3Gj)iIq`>J&j zM?kQyZRk&K?@NyBHAc{Ekv-7DCZGFc^GQ6CODuT6To|`Y#&1V*SEd$d3<-~o5{`R) z=*?C*5f^IZ>=^ARXGEUBgFuYh0>W(;UqUIeZtdbeiScZr%F%5|Yr)|UYj}$dZhE(= z=<3ur8oP4b_Lm!Inm^E-vD}$pP9r-qLDP~hCH8^JXMG%RHAIjwRQnEviolhtg*NzZ zJ~Wx${!(U^zQCB>{>~uTzVrS6IfJDAx1OQDxBCJ9g*1Nu@W=Nf`q%b9U!VW`duzMj zG-i4R)&|xzdcVJ2scGySX#PVZU59~*g_fR;mBzr@&glD7dj~t3??yrgJIDXizq&yU z!b9V?<5!ky?YTLdQ#xzNtyhDiA%~s*lGu6dpl!NhG%jL>1{(EuEb_S{E|;Z zgB03^OM(jMo|0-KyfB*LBdruE78TGkD%O-7X}Dtn=OAu1)S}bZRojvZ429Mn|Lxeq z!V~L}_vDNBQMyda{W%Hsk7deWAQr-kn&}%+Ml`7)d;?>AtlHTeReVeJ5Ycy|iY05y zm0C{?($sp%$ii7=((=p{TLr2cKA?sn0uuZj7eYGZRqy*|G^saPV%6v_t2lN127?Y4c>&$k+wK#*EQ4}gy-~?EaIFu; zZBy3r@$!8`6-F!$z1JFe3dD4!bj%2mK_EL--G0p$2lu`hEsUsh_;y2RZq%GAfepZo z3rlVb+-?)jSn)s+AZ?BZRD{>1bh@S1%!d<@H=Urx`!R5)3r&JEQ z>@8;wtI!d4xN(g*{;VdtKbqi8$x~`_%c1TR>65f0Rac?;-quBBz(^Wi%aU~a3Ijsp z1@QU4tP|tQnMsTz8v+(s)^_|V?8D=A$<9P|D!ub6RrSjiRE7fGSQ8-wpPtg?7P5sd3|x zJXHpBb6pu3*h_Oy!~_))#)jJMf#nS0*0E!Z1MB-Pxaf@kAP#u0Z9uihvI!s5dv<5pfhm~O7SlPA!_v&{5OZId zmhzdEwq+nLF_~#`v}I=U#LPKk7nQ7$ZwWjHp5oDB52|kWB3$BpS+*w}jKIj8Qa!_b z<=PW`6`?$w3FC4Lq+ZHkuM=B$jnN zV7*I>Cu_P6BsaNxVuK=xfM0Kxnq@3sqjPu65utcAx6}J-z<9X*o{Cf6$XHqGp2AaK zHQY}P+C>iwp#^iRmS<;ohX5Zf643}!)3;mFY8~IP?q2^GRBacw>_5O~8d#{95UfxR z3Iw3wzjB&;x=eQiAG9RYB_d%r%OLH?_${yDJ=gmNU(@XY zGPwIE4pe)9M3IVcjT&gVMZjd$p-opQ+~fwu24CGh`}s;dSi3_n#)`yT%=7F@ zoHjnmn8mS2m3}eJ4aE|8z1Qh45qS)BVz1^oVF*WgKPwtQa-ByZiz&=Rdd|V z9QQ1vDWt5IRey10$`gP2j2|gF+j;n@9LKZeBEQ@SxIc<;rpZy94#~_jIbnYaG^lA- z1bxnF-!dHhJiIAjtJjJ*D6uF&XoBgIjnDJ<4*A;M;6RrtJZF8q;W;h(6MRjPP?o}> zF!cVc<9>|RbJ}^t6g^ZhtEg`QqC_|zCq130O=c`v`HpSSSAY7_BF%{@Ra#r`_Be`< zs6D5A7D3EFey+rff=SC!wY=Mos~)`|PX?k!r8Mq8kn3cmZ@W+`(SUa+m-qS*0>;2+ z%#y^8Ul)}Ak>OR60E~#|c%JX1JdDrIm{GsiW0e6%)J>niu3D&7Up@V| zNLr!cQ9B#0gf3^SAAnV+vsisNMy@6?!vzluo^3F^tSv zjy+Wz_Lu?yFi|KKgD;d;!?5aZE?!QlueyW@9%PkK)?3U zW;q7H-haP>tw#B1M(zXB4oqwQ{KeITnDMOD9&e8U+k3TR#F!5U<-&%4EoTN5i7)P& zTdB~W6OLu%5`T0Aia}!g{`sk^a7PG_(gG5%5NQCt`JxHh&qgn;1{OgzoWcDmrO!V# z=`1%nbY&iYI>8@G4}H7Q7b91}bz#yK@z(whIX(9KbtFk zcscs%i1JFwmY359EY;q{=qffxrkqFM^AYKc@^C&GE3n-nigOFG`BA%e)fN_qmi$z`hCqlbRUUPB(g*6g%U-Z<308eX9KC-RpF9|^KK5L%;#{w?NI9zDFvfAd zoydAE06bz1P}p8^O+9`}T$9ay&T&G+F!Xr@0eQz$zhg?*`FCRJOn)x(m6>5OlTM~P za@j9JO{uYP{=T@D9iyO=vdr}3_3VFGG!j>Gp_bY6yImAYz{EzkO6}irb{SjstPgbZ zaB9wbhx6c;%^cuyP%Lgo)P;Y(^FH`eS@MhQUlsZy+ zli~O(L9E8#hEg=Xxo|7M+qP5&=zO|$+G1;WK;Qb!{m}&7m&vf+;uA9vhoz(_@3<35 znVISOQsb7=D^vH}LXd!?q^8LoylVPxr)rSW@2#UKcD8hsxt7nJRq>SJ{E~!w=0h{5 z5p{#<8F=$d9yhs^Y}FZA@eG3S+%)Y!RD-i+Z07<%a-+2#ay7FivuoA3`?O289*nbX z;F8+;iHF@2buILsoRpX)J1Vo%`xRctb98L&-mMDhri?~4l^lGO)WLSh>d6U z=vn3co$2h5!3sG~62&`=()qe+7#!3)%wH#hZ0&BvtavOePWd%sR+WXS?ALEc9Rpg5 zGxR#Ui(m-4=}mAlfd-e`Q^O2R5g3Y3xkAQc_K~nkgN~E8da%W+&8OFlvcj9o$BE zyut1Y*H7J&6zmsiuD9cm%3mYMEk`$ZoUYoRvV*vI)xMeI?w2h^p>BdJ{d>!P1GQ*p z`3q9_hzEXJSAXAq9^mp%r8wgoc^~0&S#WYsJFxyF&ZW(l8hCDV(lM`Pgsfp8(R*M- zY)lqAH3v82S0R-+&MdSZn=!?@zFI0<<2IQ^h8q9;8jhw0-~2mL`KW7>&h)LU+K&IP zlHh;0iQ~T~sf7P1aTml{ntxm74Sl8Mi=kH$TY4@otL72QwHI6OKk#-($|}*g}#MZOQy;;KGUQAFR~`cTMYI zP1r&&NKMdlL_hDcl6TU9)GnYlaa!qbZ&Mh5BPZvS;md?}=&6U%y0%cdaRr7TLRYS+KBHv|Sn1JZ8KL-jYFgl?uCMxB#^lfY z%xR)wHE`ICz(vt8x(y;wYsZ4yS1f<01j7;Z5J$H`YN`QJxRnjlr)kZVU z(TVeiRKlHe`9N6sDCd|l0sWDnIPbmi761$WCZQU%RUoOk;%yK?gC3T2MnrlBXAC^> zI4v$Ao5}x9mo%;+!tmVL?5QhP)?Jpf_dSXA6#Bw66hM2A`hqAlpH;J42)FSYER?jj z0ah`XWYWa3YZ^uv_}!KFyz{Fd>x*_PUDsG-oYG2^No^F{{toYuS4p; zV3B_XxKz62|BbKlpBvrx(f|FGZLBS+T`Vm+6xSlxm|;DiRH}vL>Uo9SSbnCWsso2b zWU#6gfjBAbQ)QRb^iv6e6CObLeYywdo;RFpKIRnT08Q`j|v}JmC;gQmY)G_kEFCs*P<+qaTsH-LAdQo~8rWVOd>e_p{^&6MU<4S6c zWq00}YVeTo;$tSd+JddLe=qAu7#qYmm)b+3-4 z5NQUkx8u~YFL{>#Y3cyY+z)0oT!u+kwwU~j$Q;yghB5(hUm1MbM0*x)C0;%r=*ly^ z&-0hOn@$wkngugrE(cSiE;x84>O48$6(8;u=*5A!A6DGR?jtWdwIk+_ zcd13-W2_W|0_9K3MM6AziKv5^vw?CXUgZWqZ~?oh3RFU{(ntUG&nhc)FQ^Ec?gwNd7DJLzlCCU#!wqPIK4gDu_o@FZbX`B$<4tO!J?|2jA%4b_LwU zhfH(0N7xL&$m`3|%n{s1t4DGUxT%qytoH!l*y<0mGd;fc`axs!tcKcxKqe`!F$PF+ zoMzhIe2XX{kf!CI)E-fSNfC;!qmj@AZ5VeJf;!VY@{KHeIlzGlReC+1DRQHedk?61 zYK>D)*At2XHPcgsHcVBx?nBn&5qNua(vr9hx~vmDU=(N5L0n|?kuV@JYJiz@wA&^9#GePh?^)L$3+n;QE)i*ZBvrXb8S zbRlxV^7gQM44zS;z!KN_f*?eF>_cSN*}AcXnq{aUtxmWXbCNR?DQvLIei?5?Wv~^V zQ=DM>M!nW_`pC>OP?uIB$jm-wD~@&iKCpaP{mh|1Cu--hb!9d{$Q04tfrz)>i*i4J?S)vPV!t9r_{>OLNjP zsUs88>XsLbon|ihRZj?DN`+cppj!OMpB^`X-e~2tXFS(Kfz{<3$-+Jv5aq)VOHZHY zto@vWnf2S5q(n>))!lycyN_t=>>W+v^Lk8`uI&)3HO{O9Z`g=g?@v;l2Inh-!$1 zOJp@mr`^HGOV5;!Chfsv#8y-1HSx?sO=`@!gD{}`IdVP0RfE0ZJ!3S|^jWMQm>4wt zXjvMU8Y9t%6rz8>lGpa)YYzgTPiU;>-5el9l1-v#eK;P5AbCSRhgS)<4{r7zM_uZc z6#+YnLKGKih!l3{7mOHokSppg9-qJL58o4Q>Cr~Z#eA(>vkG>$y4PV^jBv?aDc?P= zHmR+;^i{jD+A?CI#{j=LQ8}k8jtS+w9k))kjNEyth;1rx4QBL01*GJO@&^gTT0oH) zGrj>+$+~MaUxfJTB=k(9Z{Ccs2g^GtZ46pFefbisUP#Rh7T; z4ZRP5gPdH6Y%YCZp^Y_#d@%|{BX);d$+Dp~4Yf?0Ub%(w0rGx2ESN3;Cu&1`?SQq_ zh9fy0c>XLfV}_bC1EPxnzU^Q}DQ<@+bWdi<-$mxuwLT7^$N|hG=|Wy+tyX~%dWAKY zeErkPIBKXgfaO&}XCbSlyiQ)=Wieql{-E5U@AhOk03Eu6KD!y4Iq-HYyW*gcskd2g z!C;#Tbj&u#+Jhxn2J{3oaX*#kr0Jd8>JkV zgEj~Nrws)vPgy9eKlKZ~=!MS;CbhC)O?9y$ggLa;sXSt=m3d{by%Nispvb(c>87!= zV`i}AXu2tDZ~qZn+Ef9H{bE}a^yrE9i3E+4cq?;fBmEOG$(})`X8F!G^-I55Y+fU| zk9~AGdw-+AI_){W{S)#DaI1*Fs1e;EXimyEF&{jNfGOs>cu-6&@UQIOR4k*c&0CRA% zHYg&=j;lj%dVwuxx}MRuTykF7`yb6!Z6JN{@2L0}^3|Y&{FZ@5(3g)#XC&~SDT`e| zy=E>%@W}J97F_p#ky6X0^;CMkBP#DdMb!Tuhj{*X;X=jE^gsK{7E~cz;uli9roN`e zdC)-M0T58(qtl`#>45-%et{qIJ1nD8g9-XsGKdk6EE@(%6PL(p_UA4%YDhRQ45~X; z#4aw7w-GirI5xC}$yzLwuI)CQEhbu;cgVS~C_i!?eI4<`w~kzMzFA~(j<9{Tv>$y` z9&x;Ef^NA%cGG*{RuiM2QFf3oBU^?gf^dApd8U-w=#l*bHKNsT1Y;_d>gtWgj;7U3 zMfLRXA%p%mHjJ}~5cZosu*Ji=Z;v+Ctk?%$THOrrjw4DvpV{5{n;TpeGna$9=FXzo z?N;kUjQNihNXfHH7^N_e0jo`*ZEyS?0J&=2NRpXk)pqaGN^N^N7dg!GB)8?FI#WTH zvM?;9=Mz0P<<1HsBG#mn3IG6eL+ZHEZ4}6-Fd}bm6mz2GSUe#yud)2X{3=6pJD4be z1Ut{{zHbl=3Yzx9;%qQ@p^az506-RjzPT4x`@MU9P_9<2x`upxk}T=Nu^nnw&9q{V z;6RDLyXU$wON%)WPr{vB=uqP7Y?CqQL97o8N1kgP4=UC*CHL=Y>7`E1AVUD} zIgAW3C|YLRU(H_X=GWEZVMBq*L*&7gz61^$ON19TnnnCTg zam}wGLtO2G53ZSD0~9eZYU{qQp*vsc4-d6{@}RYQ@SisYvGdo+=0^}4laJ)Kp!?TI zr)(}FO7p^*9>!iefst#eMv?m(AuJa7qPtOr{PJ)BK$c9wSD0;Ro)3g-mhAqMmYVZ5 zNTq6=1KCV#DdBTpZ+Vr3lGnXUr%z&OsBoraSm+`}r?6=3n;ydfX+ebV*ibHsM!EOP zyq_6OZ%vHVF-TKy8@yGhOq1e@B|)Zi-DFT2#c5kSNLyX`*LC_N?4IpFfc^#~ckMGR zH~yV)81D%X3x-Jnes9d<^nz8rL|}ujVNoF%LWEPW9~@u?z@_pX0g-$ihMwjDKMFTF zEmcEVD+MYz8e5>XemsluGVgPGbS{4dkD*Cz1W%r*%#&X)iR9}Adh2>J>4Wm8kXB`DkdwlRbj&H1!OG7`lD0Zb+hr_1UcqV>yk%O{*@PzAbap_%n0ZH&wl-%8X;N+ z+sLbIP;JDkMWZ7~flMhrTR}A9*FTkuOtS$nz=!@!LSA|bSEGn|F z+M;X_V4pkeT}f?qh#=!RG>$f_QOzt|4tP>CZo@)Mky8*-7}RWE#&c+7<>KwQg!r0` zIaXNzW{tfTTWJukYc;htSGB0`tYA|KW>nR$Wv0`ekTz2xmyui|6e)KNRy(|-Pptlw3*uN$W?0d61Jw^f0X5Hu0x1@2_~i`;VnZp6N1xhtGU>No(VVHgbafJVLv(~q0wANeiwVlbE5$E7DOpGtHp*J z284}s5mtuJz`>?bq#br!vau8=oGQWoTq-jKk;^t0yrYwv^p$0SCHJQbUk3(#Gk;8D z#gw6}Iuq78Qd~h}NHmFK%HM%EsNvUGtbRY@$9C==A9AuD|13=Gt)j@Ap)H+1eJ zueaWId;iGvFAqSqn&Uz1iRX7L|5o-@>5Sh?fdo0PotcZWx|qDqqEe?&^fVA( zp6VyZo`4nZFSzk8tRUt;lq(HQFnT#t<`}*BRTreS z?aW)S;4l>TUx!;lp<*;C10w}dM-P4eWjlRV^jrQ3<;6?8=Z<%=(C_oVe$+-Y6=aEhGi zhO9z48pQkC=TD+APppYa7-V8x!l&hc&~z?` z``L~DE=y3^F)m9VuI)r8E)&Gs{0sy(Sy=NxwlK+@Fya13;t)+cn4AN8yBoT@8??~v zNXXg`E!TeiZ8QCCwwNvwl(jsp%j1;$dgmEyujY2fQlwl;QSFcT2BE8b4pdL6qQl{BDbab=+P0;`Q6 za*c4qdNva0qSZd|$nspm>d(T6;Z=CBeWVU2ZF;t1)lE|`^<1#{N5_=PMPV&M$DF0E z1K8T!c?au4yScxX-~!tihG)6 zFMRTpZ)@oBTg;jTT#JX);uUX4cI3vjaJ1tcih<}fo)l){nH+LdHKa-pXXw!Y`ga|x z6A?f&&KsLk?Ahxz3?@gfBg}T(G?@@~u1j=NdW3<_&;#b$L{0D?3)w<(&TtvqbJihf z1|f|2BKWU>wCp%nY=lSHA!&PyWR$SVV7A9!oj?8U6lal}zB85-FNmm7!3r4SO3uel zOKrw;Ptd5DU4Spiv6Q7TEy=@Mef6)dLW=`4ysQSrIm_$eWa=a4<)o&7Rb_Zqr9TDu74_@GCM+uM4%_Y% z=ypI`-5Q4)ajAD`yhahT8{C#_@ef9|_IkW>werqTBBc`RNTzHDic$)xI}Mqd1IWl& zyo~siN-`OeeU( o!o`nM$CRB5V6&p6YP}%wEHac3Z)XBdA5Md6NCSN1*5RI0ey5 zDWk#4y_-VF5HU}CBzW6;dv^b-v!u)q$i3fEwK}9vovF9U5%bLb71RBe)nPQV_8_!k z>(XZ%Kck-MshmlWuR&BPF9+#uVe-x?npM}s&^Lc2g$OijLgq?&AaU(_6~v55n#L|h zY#%B6qW6#`W}|zz-ssQ^C^+lA^PBdEKpWX|sMPNyowKn%f_oXQd@@xg23j*wWoVV3 zck+`TFEKhgg~*_9z86;1eQ=w)-f3`)*(LMk-%P~BA2+mf;$`OdVdpImozxGJK7vW2 z$mkV5a}&Igg?=$2hyFfppX!}*Dsh3P7`Q8jrI`lH6iIlNQ`geYC?6|JkodL0Vamqe zU~3L%_jr z>+Gto?my67y?Wh!U+ewuQtms@@Uxeyp=V^9o*J%a`@$7BWbM*G2iF1Sz4O3z+`s`Y zm+Rz(Qxym+8mU%mKTX*Th;tF7p9s|dQePEvFXtfy!DGYqaWOX<*B0iX*=E{A=;-Xl zi4N1c*|J?UD^_bJNKOmC)sn>_gdLTKjX|r~C%75J#jAE64BxD$%ws2t`uDc#wspA;g^JOH1X8D%Vt%3PzDOkJ@;HVDt{cc4-R|1=zRhy&9o6~y z`629sSb?N{sop%xn9k&w`F7WNCoKNdhB*%rvLU1hg$@ZI%L#s>g{b-)UVLh*V5C{L`V8d zI`QaB?b7F9v8jY=diprJbu=sV{MSpNknoV3HgbR11oE|X9IELFtguaN?oh7@`v;iBi4vk#`0E~H9`|hVs|?(q1@@_l2c<} zNdO50uz!ri%xRi@+x5$C+znwOZGvS}9}c9$xESrjDi0i1bE#xPy|keN)ykYFC~<%V zitdM9Q93DRjl!+>8$x{tP8giPL~+y;Ah{o`E1$)+-XXUM`ST)`B&!m}OK-4A+51Wz zcWw*8B73-fAswg7^8kTTO3{=)b;w-n(65^+&h^3{aq886TBRUUvR1stcBJ>X#R`d2 z>!jAXl?AA$=I9Ae-Amlfgwt`p<*Mma0w_G1U}bhpv47dkJMp{nK`PT~M`k4tV}-_t z2&S}w?H&wOiksg6T>}x^fRofdGz<3S&!prY8d#EkK{CrbyslAxlYD1M1+EK9H#^3- zTQlHDFv2`~Bfja8k4QF6g*-T&$REq3lu>?$3mM0$yE%HjEkyb0o#KgPdh$qyYj6L? zdEy+Q9^`6BqZy^zhXbHc4KU0-h^ldhMc_YEt76OdHb)VYv05NfOi4NWLUet~ zL}#&hj^M#X0u>QQ*NeaOUK_$Uvi}QQ(a@>E7j7%FBi5u#uNF8;AE1=IJygn=vwyvV zge%7POG1j%`^@pd1&z%NjPf3j{J_HG;hcTcyf>v~4p>UxqhUF@n#u_m#eq3;4Cpf_ z7b&p1gMWR@bD(Y{xyVB6!HuZBilSFtmpr20$v5V6eT0rYIlaX50FvPq)$<8)KD16A zY12U38##X99EP3{JFaBvu#&Z7%0zOWthe*@!8Ij#Mf?v9k0Ef-Vknt*_h11V zZLz2+OE?`MIJ~370iFrl;xBg7EKLHEX}FX!qFWFG9q^UvIR*a-^@RD1pQC47WLk9< z3th}3fZc2z+t1x~s>JDEN=j@2APO)6A!?Sar#YzL-&f)t<+kfq8jxb))0uQZp6Hrg%0hIA8?kF6||~b3024%c?$K`6I*1l9S-`+mN}> zyj=J1vJlF4I%$oB(t21j>8oaHGyXbGYy(KB4yS%?I_j^fsnVpuvy!#Bf}_4+o$cz* z)67tMHA#0|-=+FB4)DgVl6~mkq(4+Lo)yt{PoxPWjsd>n@Zg9dzQxK3&ks(j_z($a z#YS3W?qY?U z19P|CjF#BWB&+DS&Z~xGhbR@@>1936Txla%UIziHyb9iRk$G@)i6+{q0dax)Nw1l| ztIq$7!ZVK<4zRmS_@E+sE2K$zi?q_Rhx)*LED)B=bc(~<^VzOjUv6Vu)nQDvVVheZ zR%3FkVO&p=`8F8Ex-7hCa{%omOs9J?n(>lo&tz4g*2s0?xWB@ zN?yvyB(ABg+hgr zVqxXn@v8uS!KCC8sMycbWE1`z_t5Q67A{2FlR{g{k{)x^U#Ie!raos@S z&~YMksGR+cQs(M7;&y)MVxFT*1&;Zvv7%dA@F}fr8_mvBrkj;mrn9Q-PStZRdtePr zX`5tbZZb*?2GFQzf6nt78tt66mZoP-_x&>OwWC$5jhrC0f`EuNnab7E&}zZ`JI+E) z*8$)@>2$+T`jBeMU0ERgMIQAWYMlPyHOf-$5WH7r$T}fU6D#}x3-my+Rq~FPpbyE* z{=&&K_rfb8X?A;L(E7nw>{n{jJF*A=1QPB1qxqiM-^OMA*X?m5--lckO|RAiCd?;~ z&kDeh;0~(K)WTfkQ{3Iwix@CXK{phq-TO(Eip(3szQ=r~Ek1-e|GhL8jp>dp0ebY$ zTA*Q_I`R#!HEE0QjWZ8ziC+B{`sBmC-W5JOh;9ujI(XLK7ZtDSuvgRBBP**T zidl1n+fymfd)Nl2bw%29ruKpSaXMGUbsHzI#JUj_08q)}VeM!9>;h)I^uYKYA-L%Cw+-YblliYNNtX{E4k0#k0`?YQ)Q|-czA@q@% zli6d~TkCZcVW@qrUAMq_tA4zNH}xq(`kD9qNX2}@UcYi|t&E)ylek17d5M9E5Kqnl z^wDwOjUh;t+Zj>`)X6rqZ!lNha=A*RNDbj?boOzdVt1)ZJ|A9PNX3grysPH(8)C9EMXq+^)-ui;@T?pDQ1?-mk_Dm#9%l~%k1ul=0KjNH)y^=%cdH*kB;w$SzX%-|95CO`6r{TH& zCmLSZ)5TQH)cF75l5^B;9aPk@e*>O(d%C8CQ|Es{ZP+T|NUyWfW(AWG9D{<4he9<6 z8}ujJxTVc7XX$R+)aR>~&RAG~5em3eA4)VRo8ey1YxOtaxrof`!jvV)VY{I?H|Ro%`sX``FFO`uQ4#2U08sCcfl`DW%KAwVLd_lKuSe7c+0BU(qKZ&$Vd>+XLMjX z{?SVbyapZ|Da=tua>!(EhJM2tmJRniJ(fI92vhqOyCkAr=?~63ptqsDXUp+Ye2GU#`&MDX#bOV8n88T&w6@@R6(eH>UJ)YPtF>Kjqfv#`b%@#7A3fvL%*5p717 z*H1E8IBz)XXs1w5%bzW#kgM`c^|ER2v_|{9_o%U14^7jwMVmcdfIc=YT^wozhLNp> zm=JU1QktD?>pkJoPh%!s^la$hyf9hgWck7S*)+%htV4L#gv86GuTjlHbco#bGW+E8 z_0L!3R+alI;>q51!X$HUT3W$=h8twE^tl27SD)(QR5it1A5mS**G03@ThfSYZ(a0i zZ&bEDZ?zs)o-vvWrHX} zpfn>>F`}PRBA?^Dv^Bp1sakO!JEYp;3VMjCW$OsKY2Ji=$0OAA2^(WnjQAZF*(aCa zUr;oyzKNzl6sSshv}OO`(Xh+7;w+Iim(y~gk(05gSlRt%Md4CM)5^j;o3;o^YG`VB zO?825Y$!;;BwJnuTScR-hN))0%1MUDF!BaeUe)SV=Q&-trqH#7*59+gQl8# zzSzN5ZWve|Y_Fx+c@r*?Txqo2wh0ASz3(^|Tf;N3Ub(bA!_M9*7vH$MUU^P|{B1jC zzPcu|ulU;{f&u)jvWm~!()({6Q2NZr-au!M;;MH94p3j6RsYg+H`6t)*{DXomg_bVxlvV_ zX){(m5l=)mT5Fp8eTeXR)U)Ucz5e=lde7<~(4PRy*X^+b_Nl*o>tzcVsv*m6EM(kW zNYrIH{_c}KwPw7t!HsQ~YI|c?%en6d=?nLt4)<`nVY_0`ZL6>O!r!(x=0{Dn>2)Pl zAxA>J{&M`u8GMJVI?h{u>!U35V>$T|!u$ckMPUnv#l*+JiG{|)J`k7ka8UEO2V2WS z`R$`qt&)9h+&wlv%s)((r1-QHq<-%)aBvT@L7>XZKhsvKs%dT`-t~Gz?Jo4&ON)24 zxFc3~?YiH<4T*D&Hipl`cgS)mHi<`a`yq#}NPPIm4?whjc-byfXHd;1SRrp0@|=T<|DPwrHZ(>3$63SHlT z=}(8?HAr_Gp`M54iM1#T&WNuC`mcJi?YMM{0fc)X zh&P+K_2@6+Xp%xaieZdmQLtNN?fdled?fCBss?yWF}S&?YY!opBlLx!HBC4Hbl=yg zb)sM_q|4#_@NlAUB4kuYJ;cZzX~DBs@bz)0L=a}q8$}SOrT{;s8qYWB_eQNpNugx1 zkpwboE^dRrtg#4Md~#Rn!b?~i{Jq)5g!21!pR!4*3=d?4BNTnG1fzysHGa|F$FM@D zW&A3Z7euFB*KE~x%G`>GeX$XD!J93^F9n>@sz%W+vBou=kugRf$d1*2Vo+WG5Km4r zsc6SGx@y~URql6k+Bxty<`J=KD&}+wvn??wvI5}2sH{mmu(i%rIp-%2U&|B00PujCUYQ$v&gn_Icu18IOh@(k%?W;V6sgY**V$yjV@!< zBKP$x^Id(7eFVpf#tH)ghxsW#U?}WworTV>pN*WD@zJz~m}<2UxG-UTwUMdVPiEvM z*;g5z7DkngQUDPfm8L*$pud`z#>7*IaaqhSdH-ZaT5RXbKu){QbWK#Q5EMo*)4}OO zsv{XLDdK%Rzt^Y3ilfAEeA)pbj5L6z26KxGbs35AIAsR6uiD1oVq?ZpR2eO>{(p+Z-O!}k7gR707>Tt%2rMN@riT}5$=waW6oegmD2#s~{FH*dJNxuT%c z4Z5*)yZA_LO^vp$)Uv~D{AbIV`O$s)4N znFE2j)4i<6+obK<*5U~?b%oWf*(G&I==Y3x2r8UY{_)^?Je+@br9niA%q32I&~jI? zd3D}HgbmA#(orc<4d=vBPe0aALFC$D=TVXH1nzmTJ{jG0T z-yA<_SvfK}E?n5%Vx%LSvDi1`fkv(aF0j0E4xSWY$xE*$<26|N_!55PQ7wz3=m%iY zkP}y&aC{4eMyscoJ$1X3j9fOLqFb&kBOU>H_lae5#wRNWX8m0^pC&GE#M3CxG-#3l zk%MRjVTOe9N^qrqecg-nrAXrf75lXXmtA61>kMz@{iT%YE8NAA&ak=2w)NS zbMb*roGYrcFe&MLi8I9G`!s>EFevLos^wu3VOp3PF_3y2*^uIrrCs(Ce8YQYq_j=< z@~-ii8~0OeNZ*A5#MnXdIYntSTrjzi>PA1TD`e8AkIF8`dk0qd zJqRo+tIKS}QGeY+t+~#unRHdfP}K*c7^?&=LCka$x4{}Iehf!AOO1cf)YV3Deu1+W zZL%aVx7I{}V?~({FYl5)@(^IQ4chvY@7S3$=qeIe*Ef0JHv|v$8{uli;5NLwR0>J4 z<@L$X;OL~tp2eMbZRFZQ`zqxaoXG0-a7T0~DNdZh{n^?5s5mlH=TPHVVT-0bNOIWE zo6Q0uN57#^@XIf`2}_BmbPQIw$ugv|e}Syup-JLI!SeDiM7mp1C)8P`&mixI)c%|Q z74TfT&SXKyUp+)()T`2d2(T}=uC&(Do$In32VPkV9@}?>f8#eC6w$fm1(DBiK-``Z z`57LFAh8v86){#Oj^eYD^}w(@jd{ZTqgDVvMGnVu0Pa29OKDJ72s2g=&9H%UZ)!IL zQ+=2k1*tcXfX?G3CMIVL8DsrxjO2Zq<$!H{B;ellDm-y>QzOV?8Efz;i_>as?EyO4 z*6I=*u{)$tHinHIPit-cIKUkV=yfT1{Xwj}lJ^e3b^A$U=;04JtDLktZKX?wZ@-+K z$_ct04UR%RBC@{uA#1rF{?S($r@Btmxf&7oEGPjD=l9QG=K z2UV4IR_bVGB@N#lIu5a$b95A)R)fhWlU##Vtvugd%aVr$p>vJegZKFzozK|TUvCgy zJWpvWbvNR>KI8^&@^y*hym}6^QR+(^g>8MTe|?KI%6}@=?rJxqYHY*GR8-a?0e23F zgXXAZ>MHmlNAQ;CDPY`{)`$nO&~*xl1CH{ypg1)j?4b5JiC_C{9Y%`P5PuH>WYG(e z(6zG-c6wSkNs|7sy!K=L8J;(QWpaGRN2)I$4)cnBp&EQt!KMCSpU*3BDda(dkn#s} zJ)|JYmMnzwZbvy^i3nNX3PUq;M5y3geFLfwlPLstIL!0N-|yAOCk&fI&S67HW6BZr zD03SCptran50heB+!j4$aK4MdQF}rLLc#qg+s=DNY>o2Y2hAB_O+~Z^7t@piWE zw_iB3PdmP}^s7V8@%kHTr7@c-d4`R08K+%Y4Za-n47t3-ky!KOs}||3XdalgN+d4z zrq^s1)RvvU!2Q+x)Tqmt?f5lfMK|S0CF@@{eFjUWN+=ilR7cy-InFY@-pI6bFGBDi+X1ryTrDaC9u>B zcjp2iGmdGy3eAn3*A1@4v#rfJ=VH<$@U_?oDtdlQPziDL1?i7@>7BG4Kbig-1vEE> zR3z>(@i7pkIpL=rxHQPsy=&A+)z(*7>y~G)gcIwVMt#1B>f-!SQ&azn9q&`#=5~TV zYsmc}Jk9*;=FMq5Jc3)6vh5gRS7(teez3bP1WEOI<7||m5)+};&$$H6CFMJ7teK;n znM#;%sUPz+!0;6KDo+D4o!CBU6S;6y=WO=?r=d>E^;+?rkJyK7Q zUD*AsT!?Yg)P>J{B`D#el+>}vwc>VGQl7F!N`r%X(QQY!J?l7X37OLOE_nSYpkIVw z+A4QyYr>N^jflee%D}8VF~sc|{IoAH^g1W`t=w7HD?@0cnrLRvg19{@ZF}B~1v28- zvANE2lh}Pn%X_Tpo{^Nqqj~DG>M8rc>lskA5JlO0E^Eku%-Qh*+}V^Ae8PzBXq?n;n{E~2tDd|QF~TqMHzdGW13`;skef|b zfn}on6>DCh5O-@W4CMIP`a#53x;Ww+iYF$;MtKyC+A^!>I6jEyHRg7yI;%m2M$R!A z?E`$k4c=M@xBMGkfIpo+F@A->9T{5zrk^Yp5HWJVDJWiK&PCQ&zpSFqmceJn=OE-! z-3JSnExz-s9W=sdPj?Wt)!6Dvo!dL-L?BL2pIu^87@xhKl$2DSC;3R}k`zse#qh!Y zwT6F}59ter_PI(SvwRIF?6?oZNHKnchHT3hb8upoR7t2c6d8A#eUIx6w-UqOi{;|q zYqmS)pZ8{O*1eqYi%1M4(M7dK@2~-leXXC16Y)ovOv{B8-FQp$P5che)G_DHuvB6f z$OCug=}p~B8_mQDZ3L>80?mm1bEjpb78o<9Ez<{$F)p@Z2=wIFq4=!qUhd{Dj>G|* zKQhoA{(P1U^al3y29{ZIiGn@sVbqqHH<*DGbM~SRe!d_JIyrgudO1*S(*|N=-{g!B zb#UUidp8dvSs+U^4JSKcg0#Rd5wGkhFEKmtDA_~M0vn34J-@z-P#iMEdEOiRk~wP% zkFw=)Wi)n$q)3||9*zeZ{M;P648`*IzHN2O|G}GyV6xKkjgR2hZ*7s1@P(rkDVCVZ z@2DL!Sw}>{0xEZZmgLaeUL9R{^YBsUYa7&+f2qaQSXAn8mzLH(P=at=jk&aFe$Oqr zpYkt?SVE6wN^SF2RaKW~=q@PC%t<8Q6Cmb9gYMbsHnbkG-p7Ml8qwNN=ZtRIa0?`@ z)z+{4wF_WDh9p;C8!e4oVF}Y1T|=y@+&q6yAUo#Fnq9aUcycg*YaYs+`@Zh~!F2HD zudMTQ;jcReN$zNd-npSd{|jJ?6%}-s!q?h$o3;SSE1o@N)g`S~)tb=er^-~HDQ4nv za{R>}DY=jd!YbFf3{cu>J(wq&XxETa4v~s$Tv~A%t(@LXvv+S@`0HswS964Y$zy`X z=4@h7@5$koDtgC$0h2W)-76k|fUTuTHg#!TNmF%Q>=S?Ohj~Zj2&X%<^|Kxp#J=7h_aI~Te`f!v7@dg~IS|q9P8-dozqYIn$hh zc&VIY%iuoGsfxYYWwP51YJr=4=i&vCb|<^GPg!AG&33WjgOTxs>y8I=R)Xhe&^^NXpY zauK6u>4I4&LQa1K(@ZeHMitkkWX}$17LsXWADZ>TFR-0X3l#khz$$+rsnnQ z%!eo7+pqHkp{Bg1GNR&%pjJLuO=U-s=`6p5Zbi}0&eK+43iqCe(+RUDYwZxF*Wt(BTR9jL(_DB#tfV6rlZ(>rR%=$e{guK6|ZTtUhY#Y6tB zg6@Rs3GAofBgvB(2=)iN-2=im1!Qwj-`;rh4>mXUh2MQLkZ(lqw6|?p)kLWZZjjvH z%9yCSjgLCvu;{uGkPfyX_b6L50&OC86W=Iq>W9vE=>waonC>)a+~z(uvi@Of;6F+M zFz}x)%r7vL!|bip>i~%*K!u}QPZQ5CC}BJG@~2GS!fiU|9`Xs|SqH9`wp>*2PPXd{ z`ncxzPV#A0UB#w2P31E%lWHZl%xvi-XROic#vD0FW(~O=>gMq@H3p&IPDy+xeCwM_ zG?j1kT`np%Yy#0;i(IY7DjehhphxG*>)EBU`^^69m~Ecga_1`7%SE*0>Ay_8pjB^0g?(?B5-mz19&>S4>^d*9Y;7%d^$8 zHt&%+#xLtl65X511HRJmK}OlE+}5ZO>hRkEwEa{Kl7~vjJ}9;-M;_Z$5iL<}MMT@_ zHdf>qs5nV@8KiE&cAXr<3b!f|a4|Uu>Kv}(a%BL0;?AX*k6|8w=1R`(6$Q$jE$0Z%(3Yhwuv30i(; zBNC+uE(he?ypi7MI>0oX19I4of{INOV`}w$fEKcX?KvK|es5CHbSGGVW%Rdl^xt_+ z_tm8q(QUR^QkKBK7-nFXLwlN%_)X*Bu$i|g-q5L;X%eBb9m0-YuN@|-UQf?fxAm1TX(0a^ zkip+@qd$$q_~`~Q-1*CA^ON4gZGRgIN&O6rks(4uU4}ND-ko^c-&|M2?~`0O%w=Sd*9+Lk3k%3p5L64Oni3)6X&ek4=nAqJm4gaFUJ zZ6`AvjSR4~p~8;G=A-2K$;X~Db8J7J(#qpFOCnm!oRiY186GL+T3%HZp}JgYgU~t? zd^k~Zq*y%hF>L(YVUs(GVE*W+kv5afwre7>9!#QpY0S%BF)=BHP=^iJ=>1@OR0$;y z$ef2Y=JAEM>f#mwIP3lG)m54D5KKHQxlk#Xf4FuG7vlN{rQbgQ&E%{tTd zt~;)JTVNmMXsnnOJcf~Za|Q2NG5?XQ8!nHYx!=DW)=izAPKu`Xi*IfrEDlONo1+$#A^;8!W0oYM7I}*8lw{)b^m{1nAp@ef3;f7*OyCQ!`r{^

Pum+I0MHE44{qnHf@)g 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�d4Zz#fPl)=eq>O&S;!eMh(f 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 z z$)d4xakj|a;cXb+eDdjx_@{2NKymb`-XY47eZT}Bn3iV|y@+(jJpMsMaT1}6=yS_G zvayna;#Q$ovNO-QjQM*>3`8N| zQCKd1x{~?a1G)~4mW{?g*=o-yO$@7rLV^}EmI~63shS#vC&Xk)$`pzb``jKo^*mQX z1!=Fr5P4X0BU@RC?RPx^{;wbkLrEI6F~LIZs}ob2nYOyY5G{pivur&Ii}?Ab8aR!4 znQJvgN)wg}*jOfx%2MJTKiHJEec4A8edZPjjH_?p?-Ln`e}5}MvZs|y8jUuPc~W!J zmR|yIR(H!Ps3=yo)A&QhuDxSG-J*1Uy&n_?CiDgKIQBaZdpp$p7s^l>*nI&rH!&kQ z*kt9`3b7kdptfz6CCnE(+|l_=-My!dsDEw&VXYww8?p*&$Oz_ZpA>3!CW3(C7ZK9a zio+sQ!$^XBBFK9lEZ1xUi)fh@VuDtwviQ3C)oh;)`!fnc3}i7HU}KhgQgYzkh0<0p3PHy# zV6H`Gz8p=Dajp1!?G>(1dCuY%V9XK5P_|Ig@SV}Z8tdjxw-ut+?mv2q zHCW~DX~eZuUIfOG7ghM@NLx*gios?)<>Nk2%9(Z{sXSdiGkduLQ?lf~i}+4hy7=C) z2I%DNBLMW?-rp^I&wy0|o^+*I^PA=0mc;&%Yhbny>Fh_sFILKLCnWa(mhS^qqnj)PA(k{ouOY8a1i2PgXAxAgV`{6B zT*{*qFpAvDkvG3kq$M%TX~O_bQ~=dHf=q=LCyESY^^ z-f+zuHQ=Pap>)X^`Gg+6VGFitp zD&JRn0MVO;YO$x4#xAzFSykq`X%Oa_i*kZ-p8pU(SjRb;%M(3@!G^fyl0Kw4i=HKl zUMlU@esrZZD1(~SW{(0rWWMFwLqL+EL)Pz(tCdZ6ATHwJ4zRNYCRE2zU6$4B#HBDm z+#KrIHQp*S%bXv&7XJIR3)h0`)?o9;ft+$h_-|+AfECe1v<-@VIJGs#pjjlS`(+z; zcZkNQ1v~qs(g6=h^F9JryHBXR-r(r|clXeCKWkSIReQVQ>5VVm!>glOab_(ZLw$XC zuUv&6^AV~#|CIILMSNk>sFaQgAqodo6t(3jqZN%!E#mC{?P()**{*w>?ZBbRf^Mg_`)bts zshR?sr`=--;;bOuy04(dQ28;qyd>Tz&`ZR{2C@18-Vl{b2Wx$~yg=M3EFmfrnJ|5R zJR~w<`@S&Y-|&fyWEl%iGYrT0zp0_4zlw&4QyC{MTJ3Ro2P6_Z1zpFEue@a$G)Y7| zgY6g1(Jo9(6L%d*lGCG=z>SaNCI{CnM2`3b({S!tqHsy0cth7NF$^v_K+iy-02s>+ z$d7w3MC)r3)<&gy4XHuV(?u4zsC8nHMy54R%j>=d#K?_y7|YKGnM8G@5C@DI<0wO; zchyl_QQ+}BQPeYdc*8zP(lRp<3+B_W{nlJ2mN}383m7LsLMcYqU{0pzwsp!JQ}tk# zgNi(Uc0zctCSH+~xgx29TxR$&hG^07(l~*gBL+3Of#Kb-Z!w>oZI3vYLk@=Uad{W=khNt01B=t!`0z zWSF75IKpn`rl9zPPYI$u7P)7_cn%4A5@0V-f$!Wz)N8}O`?&#`?uvg`V{Z07z`}Bw z-!GWV>Yi12T(Cl4?QvQcLo7!fC{7KB9HS4$3{cu9;dVbHCi9pNCr&SsxWu%h9n+;XLnjV3_fy6NW!ctNu6Tnq`FQ`39*r@V zQ6}`*;?(t`c}rlDeDZ z&BhN+K}C+OW6Ep~x6F*hfsJq-`1A`=cq$mf)B}QO6_R4X#H8Pd20_m@1#Oi9tb&rA z$b>7TO}8CZt%=+bI0ccI)Zuv6nAu@oifu^IPsp_Ibiva?5iZoUVaR^-k zq8>=IU_sTUeU}NK@1{Jp5`(xa1j_RB4-J-v{-4IR z|7N*Bc8+HBmIg+4Mt1ZDX8&MI^p4K-7PkLVrELwY^_W@N8JIXZ=nb4~=w(ct&Fzep z?d+rt9L-Eb+>K1^oh|Ha|EJ|BR??C~RzUccrI(*jt@}$+K;(WF>>3{_5NQY`AqmCv zH@e3hZo^2UVQb;i7WVGvbtI4s4N2zn*Ei;mzr#$+FU94dA?xR?^tCtBp7zVxogH5w z_W;xobU^u;*k)YFqKC|C&b51oh1WoR`;)D$frF{5hs24k&JNmke$};<#<8qS7Z028 zAan5+^az8?5WoG_zN-xVnuy*^;ZM*;vz)u4 zta`=!fG|vF&a9L4p8W&{*maTzwaE}b?kx`ovI%t3MvImM zTD=%90gG2sfhzAK#cR*hFAsN$I~IN6E*715t=&+q8OG5R;357E7LnPeUjiH-pMCc) z;#f_NS!l73F^oOrnK6WHGE#GXNCmP$3Q_ssO*iT!v_TjN6`UmGDpsG|^X=udd;zLh zD`(n7SI7g#zf_rb7$1*e*b~_07;}o*JyK&VNTuiE3tv#+XKpzXZ3wf|Z3#2So8u;< zgf-`SU&m9=l$`|>u|N+MhHz9V=9zg)O9k|fH_jM@Nc&PzbdIGW?8j13j_T+s0f_H> zk>hYC*|tac)7~QQ4<7q?J8fs=^XqWgBvInO{TsJ-w*+pz2{=|@eQ_al`xb!ed;y@x z{<{S?s9*n`y}ntlv6K1_D})XDpN<00|NbcaUu>af4G(YSCDiZhN$HRvf0D%Dpnj}h z(@=vkz=lE)OjrbD7{6&=nLH%G$m~Wm{uESyC|0Uip@V7}Rkx{$n8;fUcQ04BSlZY$ zw^#~Z{cG4QKR(uSI;SQNNeQLr__NwK+h4qQ-u^8$apw zlt0EUsjF0CBgf}L!-5*q%hDk%NOI~VL4!v$#(@|c;QZL%#ae&w9pb~i>$d|9F8&hy z%#WKd4?Qo)4!0!&%waPS-RZA7??J;PUJlSo{T8|c%NF;bi}}NdJ6Uc@gBTuE=up_5 zMM8}qYH`?r7mi`dJs35Szpe(GuBeLM>A(`R7eb9u5~mKXqdttT${ZCLdK3#Ik}T9Z zx2`$0Yh}iS0xu>O#!ihcX2>>}CB&EhUWXZZVajtnpdA3`jOkzPQhyz?9fk<&Ncj{8 zD?d^Vlobowo)#KxduZqlhkN2++s5c0OJPXnT$;-@IE2S%2`J?H(w`F^XYdVMt-wf= z?-b|@Q_xO^SmauO867@85)I9P7{*LV zmzs>1yB^Rq#3fHMEesUv88AxY21`gXvN%tKQ~kRX zicFT>*a+zL2fy&N-d)9}L?CVt=BQPz8w>>0W5CY-jVQ>^oEUD>tuA4n^EE$Av`E@H{%H6fLw;vE$1S z=gOTE93w{~XcA7Kw8!&niNqV_j^d!vi zn9yPo3Rd>HWbL?hd~NpZdC+3d5z8AlM;W+{D5zN2w90)+QzB{-k+u-euDhfqT?@BO zgMQy&&&_)5j3I~10q%?~$&xps9e*}qD&~MPpm+MZAaPg8ExY-U$#vSf9kPj&?6uw<~HZJjXip*7+b7K*JHU`<90y0 zcK(?)qlahMRI5wQo;v>}+PXXw_4T>A0`GOw6{XgOT|4oiT9oLH)ZQWNDyo!FyeXBs z>q6OYr-&4Wol~=tN4LI&8>%`7UpN#i12K=^<{7+d1Sy`v-jV_f24=yq}adF#p3># z-QH6QutSa)%f+AXmCeJ&^69MTwua~F94hexnAN25#Ya^S^_nXarRK|H>=E0hKpMSG ztOov05ZTGBc*z^ONMDRK(Ur5{PjTlp`BL9~lD;0LsU6*jwX8LhvUpEfpN$l`FZ8PWPs47g~Q$+ zI9K(jp6X>fV9n&k)3v2asiM8eL~!Hd$~j?0pE=ZYg#j#kd_A8))DQ2rgCM;WTDKD$ z!6%>R7ZXbNj`diT64d$nii3XkzzvXi{%|O8g+Na#`sY&s?a8+?-1z|^S0p-KiKD_*L>vwEPW zcV$FrCysQ^?dyo2OKu074^RfMcc-9E9Tfqst4=k1(PR)!MUbkW!Sg{H_Ep^jJDULe-+Z$hS!>m!0>Qt0p$MtYY|)+5YP+v~RiF4eql zw2zo8v5yGS%D`|KqRA*$Yy4wfr1xs~X5sM1W5M9%oVMZ43o5a7;htmX&!iZ6hw#vR zqlQL}5@H%T?a2hhrX_noEP zu3oS6q4M8r5qC|m!!T{|& z0lFa(aFBADeI#!200B>kA~)r@urPy>AErD3X%$N4n#1x2c~O%+E7vS3h!aJWhDkt# zpl8jaM!REsGBs=k#@OfH@L#-pmWTKXd!8c8u5zYirM|L9j)obn-6}d)N33mN9^sXk zz*#bf=4^l~NtB>@L$wEzSNBcsOA@`(|^X!`cgrOPNw6BUyFJ(nF(!)k)QQz>N-2k~CH@IASSGao#?Se~N zlsYelWJwj;PWXqlFZDjx1NW36tY`goa*Fj@G3D3=0Q{)D5;8P*riO`<`BF2-N*=6#RGV9YEg2 zAir-mh<9P3CfF%ocd%Gr?FQh5Z+D`y!Ra?z*BRjuM!b}R`7rXK945P<=CyP+dQ_eq zFBB_O7kNUsUGsu^uGeE4GQ=FzkY0{sd*@4Dh~(B}C<;_wY}9&r80?WK10=M@%*FaD zalGH+4p>f%5~jLymjlgCeE>yOEZ!?C2l6r^5r1lYR+ofTlFzK|AC=X4Ic71Uf|eP&{?gk3;Te3+Zz$? zP0;}E?B81~0eR)RwLttzD??I7mruToMJo$PWAmQkN4nC>@ACQCKI+}ulZ%Sc-hhgz zPXHZ|4(R&Q&|U_j>^p0*8=^01Lt3n_O}4YJ4sC6$LedT#stI|xBQ#=1v~YX2aQj1@ zum^}8m7#O!{f}U@;&{OvQt^~VR`!sVt3eKdLCz4#m4$z=;&t<_RCR}@<6enPiULbp`H75O-v zJYm98gGNRR#Rtu}cZx9|(R)(fC2@fqodzyJaL{ioRa{|Tr1Kkfhj#WM5(_f`>kzD;j`3Knyha2F8& zLr)ltMDmD4AV3h50HheilaPua&J6l1xnQ+Z9fF7;Pq6-P!ruaYQ0NvN8Y?ZAm70rn zdz;&AX6BooR0KDP&zqkQKEJMZr_vlwr}wGo*<9~K1R$8XeM}gtN{Y+Y#Z!0M7W=u~Z%U!i#|M>^$ISCuO~n-c(gKJJ8hseW%rzHR1rr4o z%;zNx;h>mhw{pAoTF!%F6%`c}+M1gCm$7Fx4SgnY3tv5GYcMRhzP#x+3#HQ82?@O< zR$4Pf(Pd#U8X+N=Ux8@?ON&j7=q4vc(U}btv{s)5Qx*pRrgF&r{Fh#f2J?X_3nfO0 z%#0kFY0kiB|6@#zwKHZXz-Xv4u_+PAl0|wtAuAV1PVz_}G5Od`T56BEx2Gu_+T9x_ zjHXHrjfS>r)`6DxrI@m54kKSf;8(~2Lr)ivpUF{>p`HOLh+28=P_9D8jb6V%DNjJE zMCMZMs+#61JvO6;W?1+7;Rp2tRm6mYo61F8pO9NL^yK%(3MsS? z>fd}!U&X;HQuZFv6PV5vC9G4=Dk$?_fg|yyYK&nv>TL~O2Dz>>YDT@1e>Rl$+TBwL zq^ZT}MTR~Q18uOCxrcepRSpo^nJc9#BP2hE+$}eo0DuN6JrxBF%D_Fdn0kHo@%pe1 z-Dt9L3Z3momUzS5vf@Ecm>J8FO@Cbu3u6l)Q0n{7BNje7_6dA<#Gz7obX^T)_4CS# z8VCe?nqQj;#QFNJQ01=6fIPuKrYY$c6#^-Op@WIK%mML1$Sksce}rAchaZIFPL$+t za{2vCP3eU`XHMMn5$@IM@_8(F$CD3e@1GO}YSm!J0*hwm{k%;d{zJyr~ zk*a%_HVOjMJl$>0=Xh~C3P-5lM}WZ|}L+qP}@YumPM+qP}% zwQbwBUfa|2uVywAF%cCNQMNUTr@B;prH`hex9mE**uJd32@uoE8_UM=Xuzw1Bn{^fskemM%qFE zw#8}$IaZebV%IxegX4-;9AM^xz zLIV5BTwf2I#J~_GiQKja74+fMJ`Z(<{8@%coOKsS zeJpCHCk++V)|FT9hO@O7X6GCQV>h1Inud92lP^@ax5BU{>C6H^wg{J{n3X_Kjj$}f zG-b$1RuGxV+J9!iv4)lkBud8X>C-Hpny*Sl+24WXdq@zDu|x?hWjUFa(HPsAe+kH>ZX_;ddDpZRFy#%AzSmyK3e9r#h@PbK(G-) zd0v;Ep!yRJD@Zs`ggpoQkso^`$SX&e4@p&guZYcvfw~*rAM};d6zEhed4_Mm(EPj4 z4iv}SS`_N%sS_Q0111YiZVnsRW8{bqtVT4&oH92oI{gx)fe!!-J}!&5e4zT|V*Yv8|3r}`z;6cNz5Ld*yIzKS;13oyYVg*?8C4|u&fwv#@LRzg#F0+k;x2WD3pyA#khdl z7RET!e3GtG+15`0)}0Zp$O0}h9~{}3ICq`>&VM=`Pdh+k8pfE^k?f)zJH=d$sl-xW zZ~j+xO7^ft%<8e(r8os$mZFN{ejleNmF{o~GO)z}4~TRCR$~BNU*R#b%McA3e|~x+ z0faNG1)jnMkkYfmI3z>D2lFhp-h2fyMiK2W)WR{HBUxqWIBH(_=@^pEuDO%aPg@Cm zB>=$LR0ra&c1%-{Vo~~GyPCVhFZ)U06*0e}r^E!c=?gVQXr`bb(#NY|=PbY89c(+$ z$P5Mj1KMX8knwmZmL|22K(t*#Cw0<+s%r|b-uzEmV=*);7!i&!lMEU&{2-u%Xt&>KQxuPimJRJI ze#!y`DGn-w2KWOdG12%?qcbYT2sz$=L_Uj^jd^>TY@F!Px@;_?ti7OWN>=m@2gihp zN+?Qpu$%h61_4VRVGo9lIa=0i9fl}MY9cD?Upxo}N%4?z`Wh(el9dWsA>rZIunOP5 zbP(OEg$pFa@_xpsW9CZ8+yqz^{f%;EKubZ#-@002JC-W2X!@%5`Vjm`Cq|HU&CwRk zZBFfD&3G@Ai@hOjDuU4YA^kAQ8f!XDS*e+*lBz??)6)pWPM!QW@FYT)a!azQS{rO@ z+cLs11?sx|8iu46kn-$!&TI0MQFUS>TzPWY9C)i*C^cV0KPBaZ+PmZp5Ww_<3Izc4 zUvq#-*Sd!_=ml{r66fFQ&PeYe0hpQTnKT#l_5$)pBJJu@)iE|w^&EcLnwcU)Tcsdy z*bPTLQGs-X(=m%pRuc?FqJi+pBQXYyxvOcobOPka&*3-6N&{J07cx>1Ib{hB@n{Xf z6Eg+mgVSg+Yu}|Xo&H*q0#DR8Q)zEh3l*k%_L=EggVj($!Y;T5>cZCIj!{}d>mmSv zqN~4(jY|X2C~JVlQrE;T6+?4(sfOlw1?4snkw@h~;?i2-MJMW`aEZ1i*pQN}w(Ysj zbH`U~B#e4V^ORiK5b-UE+BK0>lBKFBum31Obdl6W0F16tX6fj)PVjphm(&!K$r0PG zrdHObni}?HGcnH0f(beS8DMNbc7cmQyPAToi?=(FQ%(*V8>t$NCrC@iJTiyRpjbr2 ziyE@^NgQnyC_I5SDNN>$E)pF(yv$ffSK)_X6TH#bIk4=TJ|vWEj9-eXg)`Q9lGsH2 zf8&g<4ZH^J>%kN1<|eRCscETcg#CbD!wi$GSvDXE)nL9KJ%GkvkV7fzTpH<$07kX)1h_+0Xk$xp3!1HR6*%!pL z`!}QQE68UO%zpU-vC2EOR8)HMZ47=tYq8%Z`V7M@^asynkYr!C;dJYYal*!!zI`2R zs({TGu>f*juH0hl%A_J&7t*|K%6mA!Mo7I>f#4f{?jdj8q40Foez3|r#P&Hfyu67W zk#_PNU}k!!a4~RleN!Sb);v`%1!XQl7E@&314=PW{{hDq{aMvr!NgRnu-`yIy=(n+f#HWJe@+NJWA_R;0F7pTy2tQ`K<+Km`m9iq=n)9Y zGb@n&4-BmNb2$YeDPUR(Z55qeyWO;|qFB_ktlo)UM15PDs*sC=ih^e94^KlBQsRnv zTO7R*QC0FN#zCv3zi|-`G#^ICf*fGBqp%<1s8MeRq3DSmA-)7rjXLK{7_~~{@r)_` zQ}0fX^1s{rkm#QF*i$GBN!8sZ_! z4e~I@Lru9=B_=ksICI?Dwy2{ZZtE`BHarb`2YZ-YM-5tpX^x|Uq)dIMR+5@76}-zf zm*N1J2QouQMNXydaZU|!>EOi2B+HjV`61lE+(D3gU>ZC>CSWTq@TtFhLPJr(6;B~! zdREA&E@I3ebU-LI{PYtZ1U@K@(wzz)XGDfiB-;?WHZS+|WN^-2SRes}hLEh>x|jw# zq!3sXEG0UD)MC0LIzCtLtc`=Kt7e{vhDMm797JK~c1lf@H?+%xE6<;dByWtM?#)(^ z*(_;+l{h-?G)Y0MR6Zw{*-gPz%r!R449Y1@Ueu9TAxlG9BSn{nhKoIq?6Q5odF$D??C)Ro8y9(IKVX5Ek0uQ z^Z^v)m=ooD@ClJ?%Ny|k&tO9ID{#eX-SJ1Jm^%1Mf|&qXoBGR6`o|QaA3(ykC;c>m zN_6?mQ5}=kc$hc<+TlWlMmMDel2)308|%ip*7Cqc-TxbuZ8|Mi>tdw0oe}BmYox!8rVMrP(na`JI2JLW*|m&6S?)rNG6ZTVcd38nIJ1Gxg4QOy1zqe z4K(hju|R6;5+8pv>Bafu^2ArqvNxi=+4U$tIeH=m#rI3WE==F6aPm+~PC=cW%!qsA zc?!j}>&0U0(bVdj8;SM;z;5tE2ar@T{~^gWoXt%J)C2*aCZ`a$KzY!)_R%Q0TaX&= z2T=PX{ySq9**N&;4Xb-K(2QPt%cUxmvZ_?lxfo6*4!WoXesD?U zzFex{2WIl~g$)ebLe?9xE2HfLZMffT1QlgBlyXRMU|X4GC&W2y^=ec6?p<;?F`-s@ zC%YHlnpg{)^D8ZbSd{Lj#bvYE;o%ld4^EHT%%ZWgoQEngyR$j7ue^;mp5b0Xt8{8csSlG~ck0*81 zMJSFX2H$CrI(0qRAgz4Wkx#?mDxu(?_ZM(*tO79+R7WzI#wgRnG+RkERkD%5eQ6Y5 z@VOWQdtY)x$R^>B9JAHdr@}V|Vm~3`npJ{0QQiK((ZN^2ZxCA^9sc?^rFJopK0wJ( z%V2Z7C7@yP=0_NQAAhZ-`T7~(y_E#5De!!)r^mvt3fd>gJI?${fkwH9(LCBGjUq)5X zP!#PC^v}i6PYd!3oA&B*TOLjidS~g=!+yh>AcX}mR=Lvi-h5+C0@ArriyG&72(~WrKl%DOXrl^cpwM;jF zVtJF$l2}_kng=Nk)wqPx5B4o|&fzANnqn_3jL$7#C#Y5Th+E-ud@1XJbuvpyf1wVX zl}HX0=g2wYzZWGH0r%OT0o3%t%3MnB$_QI|!^3;n1>NSxzd(4$!Fa?CytESD>YhPd zV@0nf+$b6FCGz1T&tg=UnN@p^2$J7lRqu3#yUDSy4>e^`-NNw>dC8xV=5{YL>$Y4L zT_7)c6?)1m-i}{%*LmKS?R*RZ+{-A;2H2;j+r?+HtMv1$KVcVcz^cp|RC;qnBg`gT z_#}Jc*KEWn%(AfFsxRASd*auf$f_M9>leDqDbB(?WmjL6m7A4%%BjrK0MeI9mmF~7 znuedsJWZ)yJ1#k;y2B0aTBid?^M~BrIxw7d3B9rq{=52O;NK_6W_II0TIoLs9^x94 z4}TD@n)q?i4#!V(8G1O4OrIDAY4MK&CnD2DgNkOPt?FWUNA5kz4(6lEN z!!9&*Y4!ja5z7i|?F$F-Uh3Zn4)&>kp0DR>mymAhX6v>IQ}@kT!doFlulrCY;@+~Jsynh6r+!J6H3G9>509=>Xi?LFuN z=D~+}11A4-(g)RpxO^jON6p)OHEd5h?dRQs_i_hZx+k>{NAG9$rsSE7+9%Zo8uh^Z zOi3Fg{~OpF?Sv+PksasU1M4;rDl9SX7LId(-#Q5Q{sECr{B1zghHTX_hIngEB(7Z) zwUv|3EOJ9v4ytq%UP?1{9oTgYN6gC1sA)CScSEax-X68l4TmLDd9)0~(`J3<&$NhH zoQE~kCwODEGaYs%yoiS*eN2(QNxgz z7hbFc|6z2`PTp>DZQlP$RR21RFisz!?n?=?p9TrgIVOp776w(!n2;21Y!85^Dj=KC zC#;Q-83exH(81CcIxg6XkGFd$BZL1NdJ3g^UnQ)HeOmnt>8=R-7t1XSAR?{?&@NCN zicB8g-|Td`f6*&D@ziAep`Vj$e&!xq;FMj6V;4ZzyY-M=7~L28@q|5$hG|E`_-{Tq znIk>H?jliKe-u=zmP3LF;ka%$*hW-^QDWl#{Xf80ogmse z6z(17bephz4{+kEE8v`lBM^ALvAZlGIi_wHJIEUu^shCOn82ml5Ba;$U)$fNoDKef9oE(tU+6&qf{Q3;op_&@)vGutws+vevh*+<&M*hm zfprdE?Q>rtoCHMM9)OSU5ran+9AD7_W}igzNYOs&#O${Jv#hM;D_JV1H4kiqi=m8& z9B?;`VU=)wDJbkVEcVktVlPgB-~0JAu3z65LhNpkA%GvS=`D#NkDqWQg<#)#r3HXb z=~5FQkC?7wY#wS{^!+!ZmYSv?tMW49>cIt81hK$J34Aw+;inXh=h0WFI}f6;jaU-i z7iRrJ)O=7c@c9$x&{@3~Mh>V!3b%NNgBiUS=I+>lO5(@Ex@1?f z*4z-#$V&}(TKbs%&G@SzTB8KSKa>q)VAEuZO*xPs>YGIj>b8uOs1F3pr&O?wc^+XJ z^Qvdoy2xdNL^wo*smZWtbUUM5L!M8bXjzt)6{)L{+i*Gddvd?f=kap4##JfKzD`*! zy8_*hKh5_Sn*~lmV)J6=RWA;axh+?4l@(?_Jd~S+p9Ip`*u#l0P2XV+W)li$XW@*g zg#ePQRt0GjMnz5ko<5Zqt!zWXF_P-N<4b0?XTk7eJH)Rjqrl(r74R^rs_w*>WV+mh z=n%^y{gs}qG3a#1Px_dMk<2YV)+qoVR+mr^5zPgxqGb>+p;+E3(eTLb{iLmHnIGvJ zIs*Fr?DjO<)t@Ke&r@z6D?_~N&M}*Cd4PbniVW1*bXZ|5*c92K3bAG}>N2Rc#Ku$k zxo8p1V@$9M1lDEWt=Q+Q8(^7`f5~bVSO%GB+u*C#r95L~JCOTS z+;4PC!%i;^ELWoo_LElf-LXxj`}9uaQUVjJ4Kkjl9#6nDWw9pn$?W^LXr3WiIA})5 zV=IUF{?q&*=syskhocCC{9(r5pwXv#{W9OIQ~N)`CZ8bHM?ZnfpXBYqKQOBgdUJtq zsCWnD`v%DcVJu+u7C1X|EU!p;yOv;|l^HaO%Ji3>&O3i@Ye^Up@EzRy}Y!LG5U{5BS3;rr& z&s4P_ej?eR^lD;H+s%#KWwkVXy4v9EmX<4%r}pD7GQBZxD1Qg04(lzJ-qSaq ze}Yf_6q*!0WE6#1nOQMzXwwR2k&7&KpFL^USu-KqG@G+Q%N0U-qw*%(4Ai~@`XFa` zK{l>gTaNw#Y2qYu1K=f5nEVbzQaW-ER!W^cnQ*1hOA^hH6rv|kY7ud5MM+H0qQ2&v znl^fn95%28Og$%ZgG>xVsqq0A|kV3M6|!fMF@@S<{m!0W2;AcZYs=gmM44> z(t@aI);6!A9Z7f~P?!uu)C81Sf-=Z#1#xUHVNjzERjdJ_YIYP4lMj|?RmSW}iOsAq zo&=G?pf)A7tjOC}loZOrZd}5UA7V3f*JilzcRF2yGE)1iTyY%t(|tTzdF(dI%G;UZ zjbJ#X-~b3Sgb2nU2~DR=;aUTQ-ibrh{E(m2igeHdouB7Q7`>u8=xhT!HNVm?bWKDt zM;B_cLHegw=Z4}r#Im8;=#(ppSB*B+ad|=8WD}&IX*P{91(51Dz-4dz{e*{cq(q zaGll5VAlrTtKi_W+zj`4-5zMAV8Eie15Ee>9Gm6r?0O>LoJO3~HyuRL)WeBoz5#7;|kVzs}4 z7`~_)Kk^J(+_4zGuuv_l1tMO^R4r||;D&_mpk(0KJ=K-q4ar8b?AtUAhZ9X!?c^P(nZ zWSzfi&|qfAwVCL%w;6_Q(_vkSp$qNVcSg5g5xC6#f^;{;wp&KW zyU&h#lt0V|c*;%K>#@fJjJFDmZsr)xu#2&STBuqBI59WR0P>o$?9(Jix2J3sy1apV z!uAQmver!KHy*P>GbHNa?Sg6*Yk6^OCSc>li0zviq=+k2qfUwmz?uLVlRxO2 z@|)brH$yj#2Dn_oH)~tTb$;=~EE~BZ;~{R6bkY9eLT~mBWHQzb;LyI}R0e5(QgKAS zH%$xuwm^~H02^#2#l}+#L_!?3^0#dL|0&FYDda{|+=AOYeIwMA3E=w>6#5{*EGrQT z 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 literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/org/jacoco/agent/AgentJar.class b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/org/jacoco/agent/AgentJar.class new file mode 100644 index 0000000000000000000000000000000000000000..40ffbe2307a2211ef0b3a5d3ce86dd6542549c26 GIT binary patch literal 2322 zcmai0ZFkdT7{1bWP1|Md*0J%TVnorcj8*|b*igqPFxIWJE0Z};)Am`HktH)pWxgE$ ziXZtZdd`@l@=ee2tAE4apk7bXw+S3S2jAeOzkfORGj};Zw6f(G#!YV#Y;WpN!_@hCrl3$yaPX}AnN*c5(6cuvc$6K8m0GR)8xe&JT7M1yF{wG^cP zD<19hoAp?WFt!yO?)aNdVcyfvOa&to-M|5i>}R~z+Sm|;iL76tb?pmZcoktZ z6e#m-O+$FTX}9x8o3b7T?bMoaTK+-FcsD{hP<4w>dd7yBvmB2t9`EH5NaVn#Wikqt zea$I%3t`2{x^xa_J=%@Z^JhQ?)4X>fD;7E_Wvz{kh+2x|^I!?g^n6*bn9?HzXhAT&NUhuPzqz)!S8?yLvspc%hBmYjcXWhT=Pc7J3zfp)8@L{rFPAbWdMcY}{dtke? zP8-6Zr|VotU&uuY1?QfD71HP#sr8mgYY0pDqHGs;O%~W|b}u-m%UIl)fr<4iliZp^ zomBcqN%ei#^vMjBX7lrs?;{<mwvhWB>BksY`yTN}P@m+!qelcf&n)qP)AY|{2n8Hr zx*hZ+M({e`pgt*=<~itz|3$w<|7oJn5dGZ)=sBDU(5IL|Bq;s{@3Q!8HknQBV{jq2 z2Q9acp{H_QKmsLpVF|-n?xH5xr#$Nb-sBY{))=F6@7wr)QWmGCxX)h~W$`gGYi#rI z;)sr)6HBK~?_p%^d@S-U(o?6SW3fGCAN=#zseO!2@p^#aO9P#kqXSPK5;Tq}Tp-{D zTnz4EThA~t;0}Y`rG>#C?K%_LV46+ZZ!x)hI0uU!Te!^UtJn@oILChhV`R%&YNO;t z25;khFrp%DWmz%I;vKe)+{Al~d5JmnN=?ZRReMnDyi3Yta=#&&`w@o}JV31UkYdTE zAqEPQ9cNJBKB0Fh|B9L~k;d0SLgTbaQ+t_{lYSWneV_LP)94U37x>GWjmLh$;k9Ts ay0VWWKOipIt3c-&54^wOd4+Eg%>4_bItDKQ literal 0 HcmV?d00001 diff --git a/jfleet-avro/build/tmp/jar/MANIFEST.MF b/jfleet-avro/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/jfleet-avro/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java index 3173845..3f25a58 100644 --- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java +++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java @@ -1,81 +1,52 @@ package org.jfleet.avro; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Collection; +import java.util.Iterator; +import java.util.stream.Stream; import org.apache.avro.Schema; import org.apache.avro.file.DataFileWriter; -import org.apache.avro.generic.GenericData; import org.apache.avro.generic.GenericDatumWriter; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumWriter; -import org.jfleet.ColumnInfo; -import org.jfleet.EntityFieldType.FieldTypeEnum; import org.jfleet.EntityInfo; import org.jfleet.inspection.JpaEntityInspector; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Collection; -import java.util.Iterator; -import java.util.stream.Stream; - public class AvroWriter { - private final AvroConfiguration avroConfiguration; - private final Schema schema; - private final EntityInfo entityInfo; - - public AvroWriter(AvroConfiguration avroConfiguration) { - this.avroConfiguration = avroConfiguration; - entityInfo = getEntityInfo(avroConfiguration); - schema = new AvroSchemaBuilder(entityInfo).build(); - } - - public void writeAll(OutputStream output, Collection entities) throws IOException { - writeAll(output, entities.stream()); - } - - public void writeAll(OutputStream output, Stream entities) throws IOException { - - DatumWriter datumWriter = new GenericDatumWriter<>(schema); - try (DataFileWriter dataFileWriter = new DataFileWriter<>(datumWriter)) { - dataFileWriter.create(schema, output); - Iterator iterator = entities.iterator(); - while (iterator.hasNext()) { - dataFileWriter.append(buildAvroRecord(iterator.next())); - } - } - } - - private static EntityInfo getEntityInfo(AvroConfiguration config) { - EntityInfo configEntityInfo = config.getEntityInfo(); - if (configEntityInfo != null) { - return configEntityInfo; - } - return new JpaEntityInspector(config.getClazz()).inspect(); - } - private GenericRecord buildAvroRecord(T entity) { - GenericRecord genericRecord = new GenericData.Record(schema); - for (ColumnInfo columnInfo : entityInfo.getColumns()) { - Object value = columnInfo.getAccessor().apply(entity); - if (value != null) { - Object extractedValue = extractValue(columnInfo, value); - genericRecord.put(columnInfo.getColumnName(), extractedValue); - } - } - return genericRecord; + private final Schema schema; + private final EntityInfo entityInfo; + private final EntityGenericRecordMapper mapper; + + public AvroWriter(AvroConfiguration avroConfiguration) { + entityInfo = getEntityInfo(avroConfiguration); + schema = new AvroSchemaBuilder(entityInfo).build(); + mapper = new EntityGenericRecordMapper(schema, entityInfo); + } + + public void writeAll(OutputStream output, Collection entities) throws IOException { + writeAll(output, entities.stream()); + } + + public void writeAll(OutputStream output, Stream entities) throws IOException { + + DatumWriter datumWriter = new GenericDatumWriter<>(schema); + try (DataFileWriter dataFileWriter = new DataFileWriter<>(datumWriter)) { + dataFileWriter.create(schema, output); + Iterator iterator = entities.iterator(); + while (iterator.hasNext()) { + dataFileWriter.append(mapper.buildAvroRecord(iterator.next())); + } } + } - private Object extractValue(ColumnInfo columnInfo, Object value) { - FieldTypeEnum fieldType = columnInfo.getFieldType().getFieldType(); - if (fieldType == FieldTypeEnum.BYTE) { - value = ((Byte) value).intValue(); - } else if (fieldType == FieldTypeEnum.SHORT) { - value = ((Short) value).intValue(); - } else if (fieldType == FieldTypeEnum.ENUMSTRING) { - value = ((Enum) value).name(); - } else if (fieldType == FieldTypeEnum.ENUMORDINAL) { - value = ((Enum) value).ordinal(); - } - return value; + private static EntityInfo getEntityInfo(AvroConfiguration config) { + EntityInfo configEntityInfo = config.getEntityInfo(); + if (configEntityInfo != null) { + return configEntityInfo; } + return new JpaEntityInspector(config.getClazz()).inspect(); + } } diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java b/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java new file mode 100644 index 0000000..3ca1273 --- /dev/null +++ b/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java @@ -0,0 +1,45 @@ +package org.jfleet.avro; + +import org.apache.avro.Schema; +import org.apache.avro.generic.GenericData; +import org.apache.avro.generic.GenericRecord; +import org.jfleet.ColumnInfo; +import org.jfleet.EntityFieldType.FieldTypeEnum; +import org.jfleet.EntityInfo; + +public class EntityGenericRecordMapper { + + private final Schema schema; + private final EntityInfo entityInfo; + + public EntityGenericRecordMapper(Schema schema, EntityInfo entityInfo) { + this.schema = schema; + this.entityInfo = entityInfo; + } + + public GenericRecord buildAvroRecord(T entity) { + GenericRecord genericRecord = new GenericData.Record(schema); + for (ColumnInfo columnInfo : entityInfo.getColumns()) { + Object value = columnInfo.getAccessor().apply(entity); + if (value != null) { + Object extractedValue = extractValue(columnInfo, value); + genericRecord.put(columnInfo.getColumnName(), extractedValue); + } + } + return genericRecord; + } + + private Object extractValue(ColumnInfo columnInfo, Object value) { + FieldTypeEnum fieldType = columnInfo.getFieldType().getFieldType(); + if (fieldType == FieldTypeEnum.BYTE) { + value = ((Byte) value).intValue(); + } else if (fieldType == FieldTypeEnum.SHORT) { + value = ((Short) value).intValue(); + } else if (fieldType == FieldTypeEnum.ENUMSTRING) { + value = ((Enum) value).name(); + } else if (fieldType == FieldTypeEnum.ENUMORDINAL) { + value = ((Enum) value).ordinal(); + } + return value; + } +} diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java new file mode 100644 index 0000000..1d1539e --- /dev/null +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java @@ -0,0 +1,66 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jerolba.parquet.record; + +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.parquet.io.PositionOutputStream; + +class CountedPositionOutputStream extends PositionOutputStream { + + private final BufferedOutputStream bos; + private int pos = 0; + + CountedPositionOutputStream(OutputStream os) { + this.bos = new BufferedOutputStream(os); + } + + @Override + public long getPos() throws IOException { + return pos; + } + + @Override + public void flush() throws IOException { + bos.flush(); + }; + + @Override + public void close() throws IOException { + bos.close(); + }; + + @Override + public void write(int b) throws IOException { + bos.write(b); + pos++; + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + bos.write(b, off, len); + pos += len; + } + + @Override + public void write(byte[] b) throws IOException { + bos.write(b); + pos += b.length; + } + +} \ No newline at end of file diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java new file mode 100644 index 0000000..d6723c9 --- /dev/null +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java @@ -0,0 +1,52 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jerolba.parquet.record; + +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.parquet.io.OutputFile; +import org.apache.parquet.io.PositionOutputStream; + +public class OutputStreamOutputFile implements OutputFile { + + private final OutputStream outputStream; + + public OutputStreamOutputFile(OutputStream outputStream) { + this.outputStream = outputStream; + } + + @Override + public PositionOutputStream create(long blockSizeHint) throws IOException { + return new CountedPositionOutputStream(outputStream); + } + + @Override + public PositionOutputStream createOrOverwrite(long blockSizeHint) throws IOException { + return new CountedPositionOutputStream(outputStream); + } + + @Override + public boolean supportsBlockSize() { + return false; + } + + @Override + public long defaultBlockSize() { + return 0; + } + +} diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java new file mode 100644 index 0000000..95b0822 --- /dev/null +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java @@ -0,0 +1,2 @@ +package org.jfleet.parquet;public class ParquetWriter { +} diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java new file mode 100644 index 0000000..ef98bee --- /dev/null +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java @@ -0,0 +1,2 @@ +package org.jfleet.parquet;public class ParquetWriterTest { +} diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java new file mode 100644 index 0000000..2044abb --- /dev/null +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java @@ -0,0 +1,77 @@ +package org.jfleet.avro; + +public class TestEntity { + private String fooString; + private Integer fooInt; + private Short fooShort; + private Byte fooByte; + private Double fooDouble; + private Long fooLong; + private Float fooFloat; + private Boolean fooBoolean; + + + public String getFooString() { + return fooString; + } + + public void setFooString(String fooString) { + this.fooString = fooString; + } + + public Integer getFooInt() { + return fooInt; + } + + public void setFooInt(Integer fooInt) { + this.fooInt = fooInt; + } + + public Short getFooShort() { + return fooShort; + } + + public void setFooShort(Short fooShort) { + this.fooShort = fooShort; + } + + public Byte getFooByte() { + return fooByte; + } + + public void setFooByte(Byte fooByte) { + this.fooByte = fooByte; + } + + public Double getFooDouble() { + return fooDouble; + } + + public void setFooDouble(Double fooDouble) { + this.fooDouble = fooDouble; + } + + public Long getFooLong() { + return fooLong; + } + + public void setFooLong(Long fooLong) { + this.fooLong = fooLong; + } + + public Float getFooFloat() { + return fooFloat; + } + + public void setFooFloat(Float fooFloat) { + this.fooFloat = fooFloat; + } + + public Boolean getFooBoolean() { + return fooBoolean; + } + + public void setFooBoolean(Boolean fooBoolean) { + this.fooBoolean = fooBoolean; + } +} diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java new file mode 100644 index 0000000..e50ce5b --- /dev/null +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java @@ -0,0 +1,26 @@ +package org.jfleet.avro; + +public class TestEntityWithEnum { + private WeekDays foo; + private WeekDays bar; + + public WeekDays getFoo() { + return foo; + } + + public void setFoo(WeekDays foo) { + this.foo = foo; + } + + public WeekDays getBar() { + return bar; + } + + public void setBar(WeekDays bar) { + this.bar = bar; + } + + public enum WeekDays { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY + } +} diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java new file mode 100644 index 0000000..305d065 --- /dev/null +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java @@ -0,0 +1,67 @@ +package org.jfleet.avro; + +public class TestEntityWithPrimitives { + private int fooInt; + private short fooShort; + private byte fooByte; + private double fooDouble; + private long fooLong; + private float fooFloat; + private boolean fooBoolean; + + public int getFooInt() { + return fooInt; + } + + public void setFooInt(int fooInt) { + this.fooInt = fooInt; + } + + public short getFooShort() { + return fooShort; + } + + public void setFooShort(short fooShort) { + this.fooShort = fooShort; + } + + public byte getFooByte() { + return fooByte; + } + + public void setFooByte(byte fooByte) { + this.fooByte = fooByte; + } + + public double getFooDouble() { + return fooDouble; + } + + public void setFooDouble(double fooDouble) { + this.fooDouble = fooDouble; + } + + public long getFooLong() { + return fooLong; + } + + public void setFooLong(long fooLong) { + this.fooLong = fooLong; + } + + public float getFooFloat() { + return fooFloat; + } + + public void setFooFloat(float fooFloat) { + this.fooFloat = fooFloat; + } + + public boolean isFooBoolean() { + return fooBoolean; + } + + public void setFooBoolean(boolean fooBoolean) { + this.fooBoolean = fooBoolean; + } +} From 8c2656d799e4985a01650742065f17d9979484ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Moraleda?= Date: Fri, 14 Oct 2022 17:06:32 +0200 Subject: [PATCH 21/59] Add support for parquet files --- jfleet-parquet/build.gradle | 86 +++++ .../parquet/CountedPositionOutputStream.class | Bin 0 -> 1329 bytes .../parquet/OutputStreamOutputFile.class | Bin 0 -> 1020 bytes .../ParquetConfiguration$Builder.class | Bin 0 -> 9759 bytes .../jfleet/parquet/ParquetConfiguration.class | Bin 0 -> 1873 bytes .../org/jfleet/parquet/ParquetWriter.class | Bin 0 -> 2998 bytes .../jfleet/parquet/ParquetWriterTest.class | Bin 0 -> 6066 bytes .../test/org/jfleet/parquet/TestEntity.class | Bin 0 -> 2377 bytes .../parquet/TestEntityWithEnum$WeekDays.class | Bin 0 -> 1519 bytes .../jfleet/parquet/TestEntityWithEnum.class | Bin 0 -> 951 bytes .../parquet/TestEntityWithPrimitives.class | Bin 0 -> 1808 bytes .../org.jfleet.parquet.ParquetWriterTest.html | 108 ++++++ .../reports/tests/test/css/base-style.css | 179 +++++++++ .../build/reports/tests/test/css/style.css | 84 +++++ .../build/reports/tests/test/index.html | 133 +++++++ .../build/reports/tests/test/js/report.js | 194 ++++++++++ .../test/packages/org.jfleet.parquet.html | 103 +++++ ...T-org.jfleet.parquet.ParquetWriterTest.xml | 10 + .../build/test-results/test/binary/output.bin | Bin 0 -> 222 bytes .../test-results/test/binary/output.bin.idx | Bin 0 -> 36 bytes .../test-results/test/binary/results.bin | Bin 0 -> 130 bytes .../compileJava/previous-compilation-data.bin | Bin 0 -> 51289 bytes .../previous-compilation-data.bin | Bin 0 -> 39749 bytes .../parquet/CountedPositionOutputStream.java | 88 +++-- .../parquet/OutputStreamOutputFile.java | 64 ++-- .../jfleet/parquet/ParquetConfiguration.java | 205 ++++++++++ .../org/jfleet/parquet/ParquetWriter.java | 40 +- .../org/jfleet/parquet/ParquetWriterTest.java | 357 +++++++++++++++++- .../java/org/jfleet/parquet/TestEntity.java | 149 ++++---- .../jfleet/parquet/TestEntityWithEnum.java | 37 +- .../parquet/TestEntityWithPrimitives.java | 129 +++---- settings.gradle | 1 + 32 files changed, 1729 insertions(+), 238 deletions(-) create mode 100644 jfleet-parquet/build.gradle create mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/CountedPositionOutputStream.class create mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/OutputStreamOutputFile.class create mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetConfiguration$Builder.class create mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetConfiguration.class create mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetWriter.class create mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/ParquetWriterTest.class create mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntity.class create mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum$WeekDays.class create mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum.class create mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithPrimitives.class create mode 100644 jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html create mode 100644 jfleet-parquet/build/reports/tests/test/css/base-style.css create mode 100644 jfleet-parquet/build/reports/tests/test/css/style.css create mode 100644 jfleet-parquet/build/reports/tests/test/index.html create mode 100644 jfleet-parquet/build/reports/tests/test/js/report.js create mode 100644 jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html create mode 100644 jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml create mode 100644 jfleet-parquet/build/test-results/test/binary/output.bin create mode 100644 jfleet-parquet/build/test-results/test/binary/output.bin.idx create mode 100644 jfleet-parquet/build/test-results/test/binary/results.bin create mode 100644 jfleet-parquet/build/tmp/compileJava/previous-compilation-data.bin create mode 100644 jfleet-parquet/build/tmp/compileTestJava/previous-compilation-data.bin create mode 100644 jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java diff --git a/jfleet-parquet/build.gradle b/jfleet-parquet/build.gradle new file mode 100644 index 0000000..09e164a --- /dev/null +++ b/jfleet-parquet/build.gradle @@ -0,0 +1,86 @@ +plugins { + id 'java' + id 'java-library' +} + +compileJava { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' +} + +group 'org.jfleet' +version '0.6.4' + +repositories { + mavenCentral() +} + +dependencies { + api project(':jfleet-core') + implementation project(':jfleet-avro') + + api 'org.apache.parquet:parquet-common:1.12.3' + api 'org.apache.parquet:parquet-column:1.12.3' + api 'org.apache.parquet:parquet-hadoop:1.12.3' + implementation 'org.apache.parquet:parquet-avro:1.12.3' + compileOnly 'org.apache.hadoop:hadoop-client:3.3.2' + implementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.3.2') { + exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client' + exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-common' + exclude group: 'org.apache.hadoop', module: 'hadoop-hdfs-client' + exclude group: 'com.google.inject.extensions', module: 'guice-servlet' + exclude group: 'io.netty', module: 'netty' + exclude group: 'com.google.protobuf', module: 'protobuf-java' + exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api' + exclude group: 'org.slf4j', module: 'slf4j-log4j12' + exclude group: 'org.apache.avro', module: 'avro' + } + + api('org.apache.hadoop:hadoop-common:3.3.2') { + exclude group: 'org.apache.curator', module: 'curator-recipes' + exclude group: 'org.apache.kerby', module: 'kerb-core' + exclude group: 'org.apache.avro', module: 'avro' + exclude group: 'org.apache.curator', module: 'curator-client' + exclude group: 'org.apache.httpcomponents', module: 'httpclient' + exclude group: 'org.apache.hadoop', module: 'hadoop-auth' + exclude group: 'org.apache.hadoop', module: 'hadoop-annotations' + exclude group: 'org.apache.hadoop.thirdparty', module: 'hadoop-shaded-protobuf_3_7' + exclude group: 'org.apache.commons', module: 'commons-configuration2' + exclude group: 'org.apache.commons', module: 'commons-text' + exclude group: 'org.apache.commons', module: 'commons-math3' + exclude group: 'org.apache.commons', module: 'commons-lang3' + exclude group: 'org.apache.zookeeper', module: 'zookeeper' + exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' + exclude group: 'org.eclipse.jetty', module: 'jetty-server' + exclude group: 'org.eclipse.jetty', module: 'jetty-servlet' + exclude group: 'org.eclipse.jetty', module: 'jetty-webapp' + exclude group: 'org.eclipse.jetty', module: 'jetty-util' + exclude group: 'javax.servlet', module: 'javax.servlet-api' + exclude group: 'javax.servlet.jsp', module: 'jsp-api' + exclude group: 'com.sun.jersey', module: 'jersey-json' + exclude group: 'com.sun.jersey', module: 'jersey-core' + exclude group: 'com.sun.jersey', module: 'jersey-servlet' + exclude group: 'com.sun.jersey', module: 'jersey-server' + exclude group: 'com.google.guava', module: 'guava' + exclude group: 'com.google.code.findbugs', module: 'jsr305' + exclude group: 'com.google.protobuf', module: 'protobuf-java' + exclude group: 'commons-beanutils', module: 'commons-beanutils' + exclude group: 'commons-codec', module: 'commons-codec' + exclude group: 'commons-io', module: 'commons-io' + exclude group: 'commons-net', module: 'commons-net' + exclude group: 'commons-cli', module: 'commons-cli' + exclude group: 'commons-logging', module: 'commons-logging' + exclude group: 'commons-pool', module: 'commons-pool' + exclude group: 'com.jcraft', module: 'jsch' + exclude group: 'org.slf4j', module: 'slf4j-log4j12' + exclude group: 'dnsjava', module: 'dnsjava' + exclude group: 'log4j', module: 'log4j' + } + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/CountedPositionOutputStream.class b/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/CountedPositionOutputStream.class new file mode 100644 index 0000000000000000000000000000000000000000..233f62bdcf120ef9b00c839ca624ef41469314e3 GIT binary patch literal 1329 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 literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetWriter.class b/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetWriter.class new file mode 100644 index 0000000000000000000000000000000000000000..61097cf669e419e298b00a579e06e02cc58f83cf GIT binary patch literal 2998 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 PJSi?B-K}DmXh-lFDnq26 literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntity.class b/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..620b2a467524ef65fc10ce9da6789eaaff616153 GIT binary patch literal 2377 zcmaKtYg5xe6o%iFOQEDfDMe5!pr9?cqJpAaL@pJyfHN?B4;V_A+Gt3f;a}+tjx&Dn z2l%5L&)H3BvTpp6L$>d}dG=hE-+zAo0x0ol5xvzoYY7dW|V6}de6it#-wA#<->#>c}2+X zn|Oc;Nm#DAmO?0&gz%w>M<^IbF`?_$Y^xqUcd)o@pncQ*Kw!NUr*7{zKAza#krkl2 zr&jIQ@*I8-7Tf)E=hDDv<-c_yTeE8Wsm0w$>$2wO=B8>OU?tbTvQN7SDb(ncz>VHY7_ zlORXU-iYQX=#HBlHC2%u1)>mK`1{#Z$TO*Cb3F4Hr#Vm1eZx<>H|Vbf550&q z(<0KyibyjlA`P5~G*Kebz);M<;ERf$MS3eyG$?jV{ebaJ$foGYKLc%;rl%oq|r(ft+v{l&awKjK=3@ z>L+*_c(qP(jkF3fqy<^Pq7Edjf{YMIJ_dvfz#z}?TmzC(LB_NoOL(CJ$*3R`1Tq-| z!X3aMFR`ov$*CX(EyxP}Gt-nNr-IB7$ZQM24qqN+0lYju%`o=R6!~PvKIrw*ARp3iwoo6FW|3;egFUf literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum$WeekDays.class b/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum$WeekDays.class new file mode 100644 index 0000000000000000000000000000000000000000..ecd86588b7ef1646a18d23ad993485b95851ccf0 GIT binary patch literal 1519 zcmb7EZBr6a6n?I}?6R#%_==g8Z-JIbYF3bef=Ut2xPZgdmz7pr!=+$x#!vmF!kKhx zYW&=fYC8A2CXIavc7`+O>~o&;a__T0e|`M{;2B;@=wg_y)hm(x-Kt^Ok@tH2Lz8UY zXxM4XHtnNr)80#4&4Y<;!+4j{j~YHOxK()IW$?b*%%zeghPiBKBr(n+tMG9aDPKry zM8jj(RH!`W+fJu)f1=k_^zf*h-zaQdKyRoBh$hyyGER1%ihhC9lKH}x6C6}AByd`R zH_NLGtGI~~sytClW~n$s^mV5bC>X_U2_q`*;4XuwT&-CKLtiMI-PaHGNL9Bgk3rrW4L|^;H#xR4)to&*xY4U47FviR`o_B))vt0x@lEn?G-qI;18>q z#tfZF+_X%4nPH%v%E`=xi!wY4tspGJCqtFdBO@TAU&as*FRFNiCB7NaQiEYW6z+I8 z)Wt=*d$snK*3y$TEhE=F*fHvPeWyy1)IZt_cX|j6fo!d;SBrYxUBdSG-(xR=3iY$QK;%w6EnDgQC@%^|G;M@@WUJDr%PB z0xFv$t!>mAwuB9a$^X(3gPO4{qb@FpLDR?=>P$rG5XVW~aw5nz3Xmn02}{Znmb4@+ z$wyeyjIbmVz(35jK@1+sdyFOGdqUnAS^iU62!6q>GmL&BkKrl(d&RpU!cQUQ;1|#( zqDp{GpJMC`jN`lh!pAA1o}=h%v@G7!9VQg77=?=-K$@NzIYH>Nc->y^GF`%R-Z~Nj zlk_Y65<87#;HD_i`K9k*C07eBt>kV&(n_8d9a72LLbq0uTJUQnxrJV>JlbSy>u&9iLI0|t2zuxT^rND4 zHbW`{W8mCozB%8yyuH7?0@%Pz3K2vN#7uM`F3?kzx6*Q?Td|HyRaMpk@pap^^`<~H zmoFxfK+-_UL?=vvInS?H)eA={ZCy+MrcU})1$xibw!S;F_2r&huMzaZ^8}U)Z9Sho zQ|fA0-UVx%t;<9=r;3)OFA&@D&XquS!FJVAy;f5GsVq4Z$rQY@bc)iq*>416`qB;r z=G)7=MzvOy-e;;SxqN$|CRsuU4fJa6zucp%2Wwmc}g@eBvyTsEH z=scp9A1dxfU|>>U>3@9|Fb`Z;`8$pb0!0l=d`$q;G=T_hN`wwgJhW&Wq&pyZWk~jr zXOR{hU3i9g2%q(m`3`z6z0s7ESp1=UIB)@|nVcgSY1Wjyen8n$!N9fNcc`Z#DvAf z7k&Ugl<}P2Zo}HX@XbBzIsbd^@1Aq+e*OOO6TnlvN+W?}3W|yjbP5cd8s|o~YS@+R zo5NG{$P?(?vTV!C2_&_}{cd!jJB7509;gCKj$6r|9#>7%%YHE2k9D$pX3g8NJorr$)9Kc zsEX^jA<#|!f>S@Na-_hKaTOD|DR-0{yF&h5_D`vp#w~e-UUdvULg&D&iaFdCNb?bn zQ#B2nLI(oMw)39S_LnT%d|f{~G~GSJKWM1r92wPp!?pN3a4O!3MHgEx{YM=(=>iqg z(}P-2Rg2`QwLOYfT-+Dvk)oh7BrB6o$^xIFm06gULRl%&<;f*=(xqs5mZ?(KEF1|7 z$d7lN~&~kz}T$5q8<2W zmz}zMWa<`ocQS66R(MV^L!C^}9H(fdd8A(n9x30_1o@UG#))F%k@`fz1lpVXA~)Z~a1Dmb3e_})yt;?svgdcz>2ks$YQKMJHb3^Gn26EPrM zcm`R;T9B(<&Pxo2L8c->9^hdV$Y2;`mO$oWK)CY^vW`bBkOckWzFuPFYp6Bzksy!p zB-osz&L{oWEHp3@2FVb}QVa->9)oOPGsu;t_BBDqK8HY7B0;w3Us?`W8)UkHu`tLg zfvm-V@a!{44$p#IS6egrB?Ph_3Gy5-S|H6~ooiq+46;EWn=v5#_!uOQ?Ff*W@Qmal cK?>OU2ZUbDOc*3jAloq@{Q4P0_pko)50XvmY5)KL literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html b/jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html new file mode 100644 index 0000000..da42cb4 --- /dev/null +++ b/jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html @@ -0,0 +1,108 @@ + + + + + +Test results - ParquetWriterTest + + + + + +

+ + diff --git a/jfleet-parquet/build/reports/tests/test/css/base-style.css b/jfleet-parquet/build/reports/tests/test/css/base-style.css new file mode 100644 index 0000000..4afa73e --- /dev/null +++ b/jfleet-parquet/build/reports/tests/test/css/base-style.css @@ -0,0 +1,179 @@ + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + font-size: 12pt; +} + +body, a, a:visited { + color: #303030; +} + +#content { + padding-left: 50px; + padding-right: 50px; + padding-top: 30px; + padding-bottom: 30px; +} + +#content h1 { + font-size: 160%; + margin-bottom: 10px; +} + +#footer { + margin-top: 100px; + font-size: 80%; + white-space: nowrap; +} + +#footer, #footer a { + color: #a0a0a0; +} + +#line-wrapping-toggle { + vertical-align: middle; +} + +#label-for-line-wrapping-toggle { + vertical-align: middle; +} + +ul { + margin-left: 0; +} + +h1, h2, h3 { + white-space: nowrap; +} + +h2 { + font-size: 120%; +} + +ul.tabLinks { + padding-left: 0; + padding-top: 10px; + padding-bottom: 10px; + overflow: auto; + min-width: 800px; + width: auto !important; + width: 800px; +} + +ul.tabLinks li { + float: left; + height: 100%; + list-style: none; + padding-left: 10px; + padding-right: 10px; + padding-top: 5px; + padding-bottom: 5px; + margin-bottom: 0; + -moz-border-radius: 7px; + border-radius: 7px; + margin-right: 25px; + border: solid 1px #d4d4d4; + background-color: #f0f0f0; +} + +ul.tabLinks li:hover { + background-color: #fafafa; +} + +ul.tabLinks li.selected { + background-color: #c5f0f5; + border-color: #c5f0f5; +} + +ul.tabLinks a { + font-size: 120%; + display: block; + outline: none; + text-decoration: none; + margin: 0; + padding: 0; +} + +ul.tabLinks li h2 { + margin: 0; + padding: 0; +} + +div.tab { +} + +div.selected { + display: block; +} + +div.deselected { + display: none; +} + +div.tab table { + min-width: 350px; + width: auto !important; + width: 350px; + border-collapse: collapse; +} + +div.tab th, div.tab table { + border-bottom: solid #d0d0d0 1px; +} + +div.tab th { + text-align: left; + white-space: nowrap; + padding-left: 6em; +} + +div.tab th:first-child { + padding-left: 0; +} + +div.tab td { + white-space: nowrap; + padding-left: 6em; + padding-top: 5px; + padding-bottom: 5px; +} + +div.tab td:first-child { + padding-left: 0; +} + +div.tab td.numeric, div.tab th.numeric { + text-align: right; +} + +span.code { + display: inline-block; + margin-top: 0em; + margin-bottom: 1em; +} + +span.code pre { + font-size: 11pt; + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + padding-right: 10px; + margin: 0; + background-color: #f7f7f7; + border: solid 1px #d0d0d0; + min-width: 700px; + width: auto !important; + width: 700px; +} + +span.wrapped pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-all; +} + +label.hidden { + display: none; +} \ No newline at end of file diff --git a/jfleet-parquet/build/reports/tests/test/css/style.css b/jfleet-parquet/build/reports/tests/test/css/style.css new file mode 100644 index 0000000..3dc4913 --- /dev/null +++ b/jfleet-parquet/build/reports/tests/test/css/style.css @@ -0,0 +1,84 @@ + +#summary { + margin-top: 30px; + margin-bottom: 40px; +} + +#summary table { + border-collapse: collapse; +} + +#summary td { + vertical-align: top; +} + +.breadcrumbs, .breadcrumbs a { + color: #606060; +} + +.infoBox { + width: 110px; + padding-top: 15px; + padding-bottom: 15px; + text-align: center; +} + +.infoBox p { + margin: 0; +} + +.counter, .percent { + font-size: 120%; + font-weight: bold; + margin-bottom: 8px; +} + +#duration { + width: 125px; +} + +#successRate, .summaryGroup { + border: solid 2px #d0d0d0; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#successRate { + width: 140px; + margin-left: 35px; +} + +#successRate .percent { + font-size: 180%; +} + +.success, .success a { + color: #008000; +} + +div.success, #successRate.success { + background-color: #bbd9bb; + border-color: #008000; +} + +.failures, .failures a { + color: #b60808; +} + +.skipped, .skipped a { + color: #c09853; +} + +div.failures, #successRate.failures { + background-color: #ecdada; + border-color: #b60808; +} + +ul.linkList { + padding-left: 0; +} + +ul.linkList li { + list-style: none; + margin-bottom: 5px; +} diff --git a/jfleet-parquet/build/reports/tests/test/index.html b/jfleet-parquet/build/reports/tests/test/index.html new file mode 100644 index 0000000..613c1e2 --- /dev/null +++ b/jfleet-parquet/build/reports/tests/test/index.html @@ -0,0 +1,133 @@ + + + + + +Test results - Test Summary + + + + + +
+

Test Summary

+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.568s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Packages

+ + + + + + + + + + + + + + + + + + + + + +
PackageTestsFailuresIgnoredDurationSuccess rate
+org.jfleet.parquet +1000.568s100%
+
+
+

Classes

+ + + + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+org.jfleet.parquet.ParquetWriterTest +1000.568s100%
+
+
+ +
+ + diff --git a/jfleet-parquet/build/reports/tests/test/js/report.js b/jfleet-parquet/build/reports/tests/test/js/report.js new file mode 100644 index 0000000..83bab4a --- /dev/null +++ b/jfleet-parquet/build/reports/tests/test/js/report.js @@ -0,0 +1,194 @@ +(function (window, document) { + "use strict"; + + var tabs = {}; + + function changeElementClass(element, classValue) { + if (element.getAttribute("className")) { + element.setAttribute("className", classValue); + } else { + element.setAttribute("class", classValue); + } + } + + function getClassAttribute(element) { + if (element.getAttribute("className")) { + return element.getAttribute("className"); + } else { + return element.getAttribute("class"); + } + } + + function addClass(element, classValue) { + changeElementClass(element, getClassAttribute(element) + " " + classValue); + } + + function removeClass(element, classValue) { + changeElementClass(element, getClassAttribute(element).replace(classValue, "")); + } + + function initTabs() { + var container = document.getElementById("tabs"); + + tabs.tabs = findTabs(container); + tabs.titles = findTitles(tabs.tabs); + tabs.headers = findHeaders(container); + tabs.select = select; + tabs.deselectAll = deselectAll; + tabs.select(0); + + return true; + } + + function getCheckBox() { + return document.getElementById("line-wrapping-toggle"); + } + + function getLabelForCheckBox() { + return document.getElementById("label-for-line-wrapping-toggle"); + } + + function findCodeBlocks() { + var spans = document.getElementById("tabs").getElementsByTagName("span"); + var codeBlocks = []; + for (var i = 0; i < spans.length; ++i) { + if (spans[i].className.indexOf("code") >= 0) { + codeBlocks.push(spans[i]); + } + } + return codeBlocks; + } + + function forAllCodeBlocks(operation) { + var codeBlocks = findCodeBlocks(); + + for (var i = 0; i < codeBlocks.length; ++i) { + operation(codeBlocks[i], "wrapped"); + } + } + + function toggleLineWrapping() { + var checkBox = getCheckBox(); + + if (checkBox.checked) { + forAllCodeBlocks(addClass); + } else { + forAllCodeBlocks(removeClass); + } + } + + function initControls() { + if (findCodeBlocks().length > 0) { + var checkBox = getCheckBox(); + var label = getLabelForCheckBox(); + + checkBox.onclick = toggleLineWrapping; + checkBox.checked = false; + + removeClass(label, "hidden"); + } + } + + function switchTab() { + var id = this.id.substr(1); + + for (var i = 0; i < tabs.tabs.length; i++) { + if (tabs.tabs[i].id === id) { + tabs.select(i); + break; + } + } + + return false; + } + + function select(i) { + this.deselectAll(); + + changeElementClass(this.tabs[i], "tab selected"); + changeElementClass(this.headers[i], "selected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var h2 = document.createElement("H2"); + + h2.appendChild(document.createTextNode(this.titles[i])); + this.headers[i].appendChild(h2); + } + + function deselectAll() { + for (var i = 0; i < this.tabs.length; i++) { + changeElementClass(this.tabs[i], "tab deselected"); + changeElementClass(this.headers[i], "deselected"); + + while (this.headers[i].firstChild) { + this.headers[i].removeChild(this.headers[i].firstChild); + } + + var a = document.createElement("A"); + + a.setAttribute("id", "ltab" + i); + a.setAttribute("href", "#tab" + i); + a.onclick = switchTab; + a.appendChild(document.createTextNode(this.titles[i])); + + this.headers[i].appendChild(a); + } + } + + function findTabs(container) { + return findChildElements(container, "DIV", "tab"); + } + + function findHeaders(container) { + var owner = findChildElements(container, "UL", "tabLinks"); + return findChildElements(owner[0], "LI", null); + } + + function findTitles(tabs) { + var titles = []; + + for (var i = 0; i < tabs.length; i++) { + var tab = tabs[i]; + var header = findChildElements(tab, "H2", null)[0]; + + header.parentNode.removeChild(header); + + if (header.innerText) { + titles.push(header.innerText); + } else { + titles.push(header.textContent); + } + } + + return titles; + } + + function findChildElements(container, name, targetClass) { + var elements = []; + var children = container.childNodes; + + for (var i = 0; i < children.length; i++) { + var child = children.item(i); + + if (child.nodeType === 1 && child.nodeName === name) { + if (targetClass && child.className.indexOf(targetClass) < 0) { + continue; + } + + elements.push(child); + } + } + + return elements; + } + + // Entry point. + + window.onload = function() { + initTabs(); + initControls(); + }; +} (window, window.document)); \ No newline at end of file diff --git a/jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html b/jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html new file mode 100644 index 0000000..440df50 --- /dev/null +++ b/jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html @@ -0,0 +1,103 @@ + + + + + +Test results - Package org.jfleet.parquet + + + + + +
+

Package org.jfleet.parquet

+ +
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.568s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Classes

+ + + + + + + + + + + + + + + + + + + +
ClassTestsFailuresIgnoredDurationSuccess rate
+ParquetWriterTest +1000.568s100%
+
+
+ +
+ + diff --git a/jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml b/jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml new file mode 100644 index 0000000..f66ecbf --- /dev/null +++ b/jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/jfleet-parquet/build/test-results/test/binary/output.bin b/jfleet-parquet/build/test-results/test/binary/output.bin new file mode 100644 index 0000000000000000000000000000000000000000..c8a8dac9508128df4e2160036fef28b45eaa84cf GIT binary patch literal 222 zcmZY4K@Ng25Cu?S$tfnd(S>EhiiL^BurNeTdV+=yP*Xaj9m4f(6LucpzyJRs&u+47 z>t_S4G8Q#3fhDD(w<-iE$&Vt~q5cXpFIGraZ2FGI5&hjbjlLAcA+| z)pdU?2~} N>UoN|Mvh;CD1I@QN+bXP literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/test-results/test/binary/output.bin.idx b/jfleet-parquet/build/test-results/test/binary/output.bin.idx new file mode 100644 index 0000000000000000000000000000000000000000..27381793c20dd16afd1e09d17265c00fb0b133a1 GIT binary patch literal 36 RcmZQ%Vr2Y}1{hF5I{=5@5Pbju literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/test-results/test/binary/results.bin b/jfleet-parquet/build/test-results/test/binary/results.bin new file mode 100644 index 0000000000000000000000000000000000000000..7dd8e14fefcd153574a2dee92f161918c4275bdc GIT binary patch literal 130 zcmZQ(WLlbEl&+VRmXn%VqF0buR9Fh610ZyGQD#YMQAlcW$s`OB1_s9F>nuq+jEpmj mGxAGwQrt3ga{Nn63Q9|YONvqxb2T(^N-*qTfoM-jVE_PImoHWT literal 0 HcmV?d00001 diff --git a/jfleet-parquet/build/tmp/compileJava/previous-compilation-data.bin b/jfleet-parquet/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..dd67cbabe6c6a8256e7224a6ecf39ba3abd74d1a GIT binary patch literal 51289 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
^
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	IeM!yY
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

literal 0
HcmV?d00001

diff --git a/jfleet-parquet/build/tmp/compileTestJava/previous-compilation-data.bin b/jfleet-parquet/build/tmp/compileTestJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e6e396e2d7a326710e6c38a28459c5309cfef965
GIT binary patch
literal 39749
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

literal 0
HcmV?d00001

diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java
index 1d1539e..67a196d 100644
--- a/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java
+++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java
@@ -1,66 +1,62 @@
 /**
  * Copyright 2022 Jerónimo López Bezanilla
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * 

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may + * obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. */ -package com.jerolba.parquet.record; +package org.jfleet.parquet; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; - import org.apache.parquet.io.PositionOutputStream; class CountedPositionOutputStream extends PositionOutputStream { - private final BufferedOutputStream bos; - private int pos = 0; - - CountedPositionOutputStream(OutputStream os) { - this.bos = new BufferedOutputStream(os); - } + private final BufferedOutputStream bos; + private int pos = 0; - @Override - public long getPos() throws IOException { - return pos; - } + CountedPositionOutputStream(OutputStream os) { + bos = new BufferedOutputStream(os); + } - @Override - public void flush() throws IOException { - bos.flush(); - }; + @Override + public long getPos() throws IOException { + return pos; + } - @Override - public void close() throws IOException { - bos.close(); - }; - - @Override - public void write(int b) throws IOException { - bos.write(b); - pos++; - } + @Override + public void flush() throws IOException { + bos.flush(); + } @Override - public void write(byte[] b, int off, int len) throws IOException { - bos.write(b, off, len); - pos += len; - } + public void close() throws IOException { + bos.close(); + } @Override - public void write(byte[] b) throws IOException { - bos.write(b); - pos += b.length; - } + public void write(int b) throws IOException { + bos.write(b); + pos++; + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + bos.write(b, off, len); + pos += len; + } + + @Override + public void write(byte[] b) throws IOException { + bos.write(b); + pos += b.length; + } } \ No newline at end of file diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java index d6723c9..f1582e1 100644 --- a/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java @@ -1,52 +1,48 @@ /** * Copyright 2022 Jerónimo López Bezanilla - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may + * obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. */ -package com.jerolba.parquet.record; +package org.jfleet.parquet; import java.io.IOException; import java.io.OutputStream; - import org.apache.parquet.io.OutputFile; import org.apache.parquet.io.PositionOutputStream; public class OutputStreamOutputFile implements OutputFile { - private final OutputStream outputStream; + private final OutputStream outputStream; - public OutputStreamOutputFile(OutputStream outputStream) { - this.outputStream = outputStream; - } + public OutputStreamOutputFile(OutputStream outputStream) { + this.outputStream = outputStream; + } - @Override - public PositionOutputStream create(long blockSizeHint) throws IOException { - return new CountedPositionOutputStream(outputStream); - } + @Override + public PositionOutputStream create(long blockSizeHint) throws IOException { + return new CountedPositionOutputStream(outputStream); + } - @Override - public PositionOutputStream createOrOverwrite(long blockSizeHint) throws IOException { - return new CountedPositionOutputStream(outputStream); - } + @Override + public PositionOutputStream createOrOverwrite(long blockSizeHint) throws IOException { + return new CountedPositionOutputStream(outputStream); + } - @Override - public boolean supportsBlockSize() { - return false; - } + @Override + public boolean supportsBlockSize() { + return false; + } - @Override - public long defaultBlockSize() { - return 0; - } + @Override + public long defaultBlockSize() { + return 0; + } } diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java new file mode 100644 index 0000000..cc98618 --- /dev/null +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java @@ -0,0 +1,205 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may + * obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions + * and limitations under the License. + */ +package org.jfleet.parquet; + +import java.io.OutputStream; +import org.apache.avro.generic.GenericRecord; +import org.apache.hadoop.conf.Configuration; +import org.apache.parquet.avro.AvroParquetWriter; +import org.apache.parquet.column.ParquetProperties.WriterVersion; +import org.apache.parquet.crypto.FileEncryptionProperties; +import org.apache.parquet.hadoop.ParquetFileWriter.Mode; +import org.apache.parquet.hadoop.metadata.CompressionCodecName; +import org.apache.parquet.io.OutputFile; +import org.jfleet.EntityInfo; + +public class ParquetConfiguration { + + private final AvroParquetWriter.Builder builder; + private final Class recordClass; + private final EntityInfo entityInfo; + + ParquetConfiguration(AvroParquetWriter.Builder builder, Class recordClass, EntityInfo entityInfo) { + this.builder = builder; + this.recordClass = recordClass; + this.entityInfo = entityInfo; + } + + Class getRecordClass() { + return recordClass; + } + + AvroParquetWriter.Builder getWriterBuilder() { + return builder; + } + + public EntityInfo getEntityInfo() { + return entityInfo; + } + + public static class Builder { + + private final AvroParquetWriter.Builder builder; + private final Class recordClass; + private final EntityInfo entityInfo; + + public Builder(OutputFile path, Class recordClass) { + this.recordClass = recordClass; + entityInfo = null; + builder = AvroParquetWriter.builder(path); + builder.withWriteMode(Mode.OVERWRITE) + .withValidation(true); + } + + public Builder(OutputFile path, EntityInfo entityInfo) { + recordClass = (Class) entityInfo.getEntityClass(); + this.entityInfo = entityInfo; + builder = AvroParquetWriter.builder(path); + builder.withWriteMode(Mode.OVERWRITE) + .withValidation(true); + } + + public Builder(OutputStream outputStream, Class recordClass) { + this(new OutputStreamOutputFile(outputStream), recordClass); + } + + public Builder(OutputStream outputStream, EntityInfo entityInfo) { + this(new OutputStreamOutputFile(outputStream), entityInfo); + } + + public Builder withConf(Configuration conf) { + builder.withConf(conf); + return this; + } + + public Builder withWriteMode(Mode mode) { + builder.withWriteMode(mode); + return this; + } + + public Builder withCompressionCodec(CompressionCodecName codecName) { + builder.withCompressionCodec(codecName); + return this; + } + + public Builder withEncryption(FileEncryptionProperties encryptionProperties) { + builder.withEncryption(encryptionProperties); + return this; + } + + public Builder withRowGroupSize(long rowGroupSize) { + builder.withRowGroupSize(rowGroupSize); + return this; + } + + public Builder withMaxPaddingSize(int maxPaddingSize) { + builder.withMaxPaddingSize(maxPaddingSize); + return this; + } + + public Builder enableValidation() { + builder.enableValidation(); + return this; + } + + public Builder withValidation(boolean enableValidation) { + builder.withValidation(enableValidation); + return this; + } + + public Builder withPageSize(int pageSize) { + builder.withPageSize(pageSize); + return this; + } + + public Builder withPageRowCountLimit(int rowCount) { + builder.withPageRowCountLimit(rowCount); + return this; + } + + public Builder withDictionaryPageSize(int dictionaryPageSize) { + builder.withDictionaryPageSize(dictionaryPageSize); + return this; + } + + public Builder enableDictionaryEncoding() { + builder.enableDictionaryEncoding(); + return this; + } + + public Builder withDictionaryEncoding(boolean enableDictionary) { + builder.withDictionaryEncoding(enableDictionary); + return this; + } + + public Builder withByteStreamSplitEncoding(boolean enableByteStreamSplit) { + builder.withByteStreamSplitEncoding(enableByteStreamSplit); + return this; + } + + public Builder withDictionaryEncoding(String columnPath, boolean enableDictionary) { + builder.withDictionaryEncoding(columnPath, enableDictionary); + return this; + } + + public Builder withWriterVersion(WriterVersion version) { + builder.withWriterVersion(version); + return this; + } + + public Builder enablePageWriteChecksum() { + builder.withPageWriteChecksumEnabled(true); + return this; + } + + public Builder withPageWriteChecksumEnabled(boolean enablePageWriteChecksum) { + builder.withPageWriteChecksumEnabled(enablePageWriteChecksum); + return this; + } + + public Builder withBloomFilterNDV(String columnPath, long ndv) { + builder.withBloomFilterNDV(columnPath, ndv); + return this; + } + + public Builder withBloomFilterEnabled(boolean enabled) { + builder.withBloomFilterEnabled(enabled); + return this; + } + + public Builder withBloomFilterEnabled(String columnPath, boolean enabled) { + builder.withBloomFilterEnabled(columnPath, enabled); + return this; + } + + public Builder withMinRowCountForPageSizeCheck(int min) { + builder.withMinRowCountForPageSizeCheck(min); + return this; + } + + public Builder withMaxRowCountForPageSizeCheck(int max) { + builder.withMaxRowCountForPageSizeCheck(max); + return this; + } + + public Builder config(String property, String value) { + builder.config(property, value); + return this; + } + + public ParquetConfiguration build() { + return new ParquetConfiguration<>(builder, recordClass, entityInfo); + } + } + +} diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java index 95b0822..6db17d7 100644 --- a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java @@ -1,2 +1,40 @@ -package org.jfleet.parquet;public class ParquetWriter { +package org.jfleet.parquet; + +import java.io.IOException; +import java.util.Collection; +import java.util.Iterator; +import java.util.stream.Stream; +import org.apache.avro.Schema; +import org.apache.avro.generic.GenericRecord; +import org.jfleet.avro.AvroSchemaBuilder; +import org.jfleet.avro.EntityGenericRecordMapper; + +public class ParquetWriter { + + private ParquetConfiguration config; + private EntityGenericRecordMapper mapper; + private Schema schema; + + public ParquetWriter(ParquetConfiguration config) { + this.config = config; + schema = new AvroSchemaBuilder(this.config.getEntityInfo()).build(); + mapper = new EntityGenericRecordMapper(schema, this.config.getEntityInfo()); + } + + public void writeAll(Collection collection) throws IOException { + writeAll(collection.stream()); + } + + public void writeAll(Stream stream) throws IOException { + try (org.apache.parquet.hadoop.ParquetWriter writer = config + .getWriterBuilder() + .withSchema(schema) + .build()) { + + Iterator it = stream.iterator(); + while (it.hasNext()) { + writer.write(mapper.buildAvroRecord(it.next())); + } + } + } } diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java index ef98bee..3f4a517 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java @@ -1,2 +1,357 @@ -package org.jfleet.parquet;public class ParquetWriterTest { +package org.jfleet.parquet; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Arrays; +import org.apache.avro.file.DataFileReader; +import org.apache.avro.generic.GenericDatumReader; +import org.apache.avro.generic.GenericRecord; +import org.apache.avro.io.DatumReader; +import org.jfleet.EntityFieldType.FieldTypeEnum; +import org.jfleet.EntityInfo; +import org.jfleet.EntityInfoBuilder; +import org.junit.jupiter.api.Test; + +public class ParquetWriterTest { + + @Test + public void shouldWrite() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + parquetWriter.writeAll(Arrays.asList(testEntity)); + + } + + + @Test + void shouldFillOutputStream() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + parquetWriter.writeAll(Arrays.asList(testEntity)); + + assertTrue(outputStream.size() > 0); + } + + + @Test + void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(new Utf8("foo"), genericRecord.get("foo")); + } + } + + /* + + @Test + void shouldConvertEntityInfoWithNullStringType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); + } + } + + @Test + void shouldConvertEntityInfoWithBooleanType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + } + } + + @Test + void shouldConvertEntityWithPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = dataFileReader.getSchema(); + assertFieldIsNotUnionType(schema, "fooBoolean"); + assertFieldIsNotUnionType(schema, "fooInt"); + assertFieldIsNotUnionType(schema, "fooShort"); + assertFieldIsNotUnionType(schema, "fooByte"); + assertFieldIsNotUnionType(schema, "fooDouble"); + assertFieldIsNotUnionType(schema, "fooLong"); + assertFieldIsNotUnionType(schema, "fooFloat"); + } + } + + private static void assertFieldIsNotUnionType(Schema schema, String fieldName) { + assertNotEquals(Schema.Type.UNION, schema.getField(fieldName).schema().getType()); + } + + @Test + void shouldCreateSchemaWithNullTypesForObjects() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = dataFileReader.getSchema(); + assertUnionFieldContainsNullType(schema, "fooBoolean"); + assertUnionFieldContainsNullType(schema, "fooInt"); + assertUnionFieldContainsNullType(schema, "fooShort"); + assertUnionFieldContainsNullType(schema, "fooByte"); + assertUnionFieldContainsNullType(schema, "fooDouble"); + assertUnionFieldContainsNullType(schema, "fooLong"); + assertUnionFieldContainsNullType(schema, "fooFloat"); + } + } + + private static void assertUnionFieldContainsNullType(Schema schema, String fieldName) { + Schema fieldSchema = schema.getField(fieldName).schema(); + assertEquals(Schema.Type.UNION, fieldSchema.getType()); + assertTrue(fieldSchema.getTypes().contains(Schema.create(Schema.Type.NULL))); + } + + @Test + void shouldConvertEntityInfoWithNullBoolean() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("fooBoolean")); + } + } + + @Test + void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("fooInt")); + assertNull(genericRecord.get("fooShort")); + assertNull(genericRecord.get("fooByte")); + assertNull(genericRecord.get("fooDouble")); + assertNull(genericRecord.get("fooLong")); + assertNull(genericRecord.get("fooFloat")); + } + } + + @Test + void shouldThrowUnsupportedTypeException() { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + assertThrows(UnsupportedTypeException.class, () -> new AvroWriter<>(avroConfiguration)); + } + + @Test + void shouldConvertEnumTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + testEntityWithEnum.setFoo(FRIDAY); + testEntityWithEnum.setBar(SATURDAY); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(4, genericRecord.get("foo")); + assertEquals(new Utf8("SATURDAY"), genericRecord.get("bar")); + } + } + + @Test + void shouldConvertNullableEnumTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); + assertNull(genericRecord.get("bar")); + } + } + */ + private DataFileReader serializeAndRead(EntityInfo entityInfo, T testEntity) throws IOException { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + parquetWriter.writeAll(Arrays.asList(testEntity)); + + try (FileOutputStream fos = new FileOutputStream("/tmp/foo.parquet")) { + fos.write(outputStream.toByteArray()); + } + + DatumReader datumReader = new GenericDatumReader<>(); + return new DataFileReader<>(new File("/tmp/foo.parquet"), datumReader); + } + } diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java index 2044abb..051e189 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java @@ -1,77 +1,78 @@ -package org.jfleet.avro; +package org.jfleet.parquet; public class TestEntity { - private String fooString; - private Integer fooInt; - private Short fooShort; - private Byte fooByte; - private Double fooDouble; - private Long fooLong; - private Float fooFloat; - private Boolean fooBoolean; - - - public String getFooString() { - return fooString; - } - - public void setFooString(String fooString) { - this.fooString = fooString; - } - - public Integer getFooInt() { - return fooInt; - } - - public void setFooInt(Integer fooInt) { - this.fooInt = fooInt; - } - - public Short getFooShort() { - return fooShort; - } - - public void setFooShort(Short fooShort) { - this.fooShort = fooShort; - } - - public Byte getFooByte() { - return fooByte; - } - - public void setFooByte(Byte fooByte) { - this.fooByte = fooByte; - } - - public Double getFooDouble() { - return fooDouble; - } - - public void setFooDouble(Double fooDouble) { - this.fooDouble = fooDouble; - } - - public Long getFooLong() { - return fooLong; - } - - public void setFooLong(Long fooLong) { - this.fooLong = fooLong; - } - - public Float getFooFloat() { - return fooFloat; - } - - public void setFooFloat(Float fooFloat) { - this.fooFloat = fooFloat; - } - - public Boolean getFooBoolean() { - return fooBoolean; - } - - public void setFooBoolean(Boolean fooBoolean) { - this.fooBoolean = fooBoolean; - } + + private String fooString; + private Integer fooInt; + private Short fooShort; + private Byte fooByte; + private Double fooDouble; + private Long fooLong; + private Float fooFloat; + private Boolean fooBoolean; + + + public String getFooString() { + return fooString; + } + + public void setFooString(String fooString) { + this.fooString = fooString; + } + + public Integer getFooInt() { + return fooInt; + } + + public void setFooInt(Integer fooInt) { + this.fooInt = fooInt; + } + + public Short getFooShort() { + return fooShort; + } + + public void setFooShort(Short fooShort) { + this.fooShort = fooShort; + } + + public Byte getFooByte() { + return fooByte; + } + + public void setFooByte(Byte fooByte) { + this.fooByte = fooByte; + } + + public Double getFooDouble() { + return fooDouble; + } + + public void setFooDouble(Double fooDouble) { + this.fooDouble = fooDouble; + } + + public Long getFooLong() { + return fooLong; + } + + public void setFooLong(Long fooLong) { + this.fooLong = fooLong; + } + + public Float getFooFloat() { + return fooFloat; + } + + public void setFooFloat(Float fooFloat) { + this.fooFloat = fooFloat; + } + + public Boolean getFooBoolean() { + return fooBoolean; + } + + public void setFooBoolean(Boolean fooBoolean) { + this.fooBoolean = fooBoolean; + } } diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java index e50ce5b..e3226f7 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java @@ -1,26 +1,27 @@ -package org.jfleet.avro; +package org.jfleet.parquet; public class TestEntityWithEnum { - private WeekDays foo; - private WeekDays bar; - public WeekDays getFoo() { - return foo; - } + private WeekDays foo; + private WeekDays bar; - public void setFoo(WeekDays foo) { - this.foo = foo; - } + public WeekDays getFoo() { + return foo; + } - public WeekDays getBar() { - return bar; - } + public void setFoo(WeekDays foo) { + this.foo = foo; + } - public void setBar(WeekDays bar) { - this.bar = bar; - } + public WeekDays getBar() { + return bar; + } - public enum WeekDays { - MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY - } + public void setBar(WeekDays bar) { + this.bar = bar; + } + + public enum WeekDays { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY + } } diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java index 305d065..cf2ed49 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java @@ -1,67 +1,68 @@ -package org.jfleet.avro; +package org.jfleet.parquet; public class TestEntityWithPrimitives { - private int fooInt; - private short fooShort; - private byte fooByte; - private double fooDouble; - private long fooLong; - private float fooFloat; - private boolean fooBoolean; - - public int getFooInt() { - return fooInt; - } - - public void setFooInt(int fooInt) { - this.fooInt = fooInt; - } - - public short getFooShort() { - return fooShort; - } - - public void setFooShort(short fooShort) { - this.fooShort = fooShort; - } - - public byte getFooByte() { - return fooByte; - } - - public void setFooByte(byte fooByte) { - this.fooByte = fooByte; - } - - public double getFooDouble() { - return fooDouble; - } - - public void setFooDouble(double fooDouble) { - this.fooDouble = fooDouble; - } - - public long getFooLong() { - return fooLong; - } - - public void setFooLong(long fooLong) { - this.fooLong = fooLong; - } - - public float getFooFloat() { - return fooFloat; - } - - public void setFooFloat(float fooFloat) { - this.fooFloat = fooFloat; - } - - public boolean isFooBoolean() { - return fooBoolean; - } - - public void setFooBoolean(boolean fooBoolean) { - this.fooBoolean = fooBoolean; - } + + private int fooInt; + private short fooShort; + private byte fooByte; + private double fooDouble; + private long fooLong; + private float fooFloat; + private boolean fooBoolean; + + public int getFooInt() { + return fooInt; + } + + public void setFooInt(int fooInt) { + this.fooInt = fooInt; + } + + public short getFooShort() { + return fooShort; + } + + public void setFooShort(short fooShort) { + this.fooShort = fooShort; + } + + public byte getFooByte() { + return fooByte; + } + + public void setFooByte(byte fooByte) { + this.fooByte = fooByte; + } + + public double getFooDouble() { + return fooDouble; + } + + public void setFooDouble(double fooDouble) { + this.fooDouble = fooDouble; + } + + public long getFooLong() { + return fooLong; + } + + public void setFooLong(long fooLong) { + this.fooLong = fooLong; + } + + public float getFooFloat() { + return fooFloat; + } + + public void setFooFloat(float fooFloat) { + this.fooFloat = fooFloat; + } + + public boolean isFooBoolean() { + return fooBoolean; + } + + public void setFooBoolean(boolean fooBoolean) { + this.fooBoolean = fooBoolean; + } } diff --git a/settings.gradle b/settings.gradle index 014e42a..deba243 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,5 +3,6 @@ include 'jfleet-samples' include 'jfleet-mock-mysql5' include 'jfleet-mock-mysql8' include 'jfleet-avro' +include 'jfleet-parquet' rootProject.name = 'jfleet' From c8c451693a4e8eedd69b12f56ef6c70bb321e945 Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Fri, 14 Oct 2022 17:53:17 +0200 Subject: [PATCH 22/59] Remove excluded dependencies to read parquet files --- jfleet-parquet/build.gradle | 95 ++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/jfleet-parquet/build.gradle b/jfleet-parquet/build.gradle index 09e164a..01cabe6 100644 --- a/jfleet-parquet/build.gradle +++ b/jfleet-parquet/build.gradle @@ -25,60 +25,57 @@ dependencies { implementation 'org.apache.parquet:parquet-avro:1.12.3' compileOnly 'org.apache.hadoop:hadoop-client:3.3.2' implementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.3.2') { - exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client' - exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-common' - exclude group: 'org.apache.hadoop', module: 'hadoop-hdfs-client' - exclude group: 'com.google.inject.extensions', module: 'guice-servlet' - exclude group: 'io.netty', module: 'netty' - exclude group: 'com.google.protobuf', module: 'protobuf-java' - exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api' - exclude group: 'org.slf4j', module: 'slf4j-log4j12' - exclude group: 'org.apache.avro', module: 'avro' +// exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client' +// exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-common' +// exclude group: 'org.apache.hadoop', module: 'hadoop-hdfs-client' +// exclude group: 'com.google.inject.extensions', module: 'guice-servlet' +// exclude group: 'io.netty', module: 'netty' +// exclude group: 'com.google.protobuf', module: 'protobuf-java' +// exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api' +// exclude group: 'org.slf4j', module: 'slf4j-log4j12' +// exclude group: 'org.apache.avro', module: 'avro' } api('org.apache.hadoop:hadoop-common:3.3.2') { - exclude group: 'org.apache.curator', module: 'curator-recipes' - exclude group: 'org.apache.kerby', module: 'kerb-core' - exclude group: 'org.apache.avro', module: 'avro' - exclude group: 'org.apache.curator', module: 'curator-client' - exclude group: 'org.apache.httpcomponents', module: 'httpclient' - exclude group: 'org.apache.hadoop', module: 'hadoop-auth' - exclude group: 'org.apache.hadoop', module: 'hadoop-annotations' - exclude group: 'org.apache.hadoop.thirdparty', module: 'hadoop-shaded-protobuf_3_7' - exclude group: 'org.apache.commons', module: 'commons-configuration2' - exclude group: 'org.apache.commons', module: 'commons-text' - exclude group: 'org.apache.commons', module: 'commons-math3' - exclude group: 'org.apache.commons', module: 'commons-lang3' - exclude group: 'org.apache.zookeeper', module: 'zookeeper' - exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' - exclude group: 'org.eclipse.jetty', module: 'jetty-server' - exclude group: 'org.eclipse.jetty', module: 'jetty-servlet' - exclude group: 'org.eclipse.jetty', module: 'jetty-webapp' - exclude group: 'org.eclipse.jetty', module: 'jetty-util' - exclude group: 'javax.servlet', module: 'javax.servlet-api' - exclude group: 'javax.servlet.jsp', module: 'jsp-api' - exclude group: 'com.sun.jersey', module: 'jersey-json' - exclude group: 'com.sun.jersey', module: 'jersey-core' - exclude group: 'com.sun.jersey', module: 'jersey-servlet' - exclude group: 'com.sun.jersey', module: 'jersey-server' - exclude group: 'com.google.guava', module: 'guava' - exclude group: 'com.google.code.findbugs', module: 'jsr305' - exclude group: 'com.google.protobuf', module: 'protobuf-java' - exclude group: 'commons-beanutils', module: 'commons-beanutils' - exclude group: 'commons-codec', module: 'commons-codec' - exclude group: 'commons-io', module: 'commons-io' - exclude group: 'commons-net', module: 'commons-net' - exclude group: 'commons-cli', module: 'commons-cli' - exclude group: 'commons-logging', module: 'commons-logging' - exclude group: 'commons-pool', module: 'commons-pool' - exclude group: 'com.jcraft', module: 'jsch' - exclude group: 'org.slf4j', module: 'slf4j-log4j12' - exclude group: 'dnsjava', module: 'dnsjava' - exclude group: 'log4j', module: 'log4j' +// exclude group: 'org.apache.curator', module: 'curator-recipes' +// exclude group: 'org.apache.kerby', module: 'kerb-core' +// exclude group: 'org.apache.avro', module: 'avro' +// exclude group: 'org.apache.curator', module: 'curator-client' +// exclude group: 'org.apache.httpcomponents', module: 'httpclient' +// exclude group: 'org.apache.hadoop', module: 'hadoop-annotations' +// exclude group: 'org.apache.hadoop.thirdparty', module: 'hadoop-shaded-protobuf_3_7' +// exclude group: 'org.apache.commons', module: 'commons-text' +// exclude group: 'org.apache.commons', module: 'commons-math3' +// exclude group: 'org.apache.zookeeper', module: 'zookeeper' +// exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' +// exclude group: 'org.eclipse.jetty', module: 'jetty-server' +// exclude group: 'org.eclipse.jetty', module: 'jetty-servlet' +// exclude group: 'org.eclipse.jetty', module: 'jetty-webapp' +// exclude group: 'org.eclipse.jetty', module: 'jetty-util' +// exclude group: 'javax.servlet', module: 'javax.servlet-api' +// exclude group: 'javax.servlet.jsp', module: 'jsp-api' +// exclude group: 'com.sun.jersey', module: 'jersey-json' +// exclude group: 'com.sun.jersey', module: 'jersey-core' +// exclude group: 'com.sun.jersey', module: 'jersey-servlet' +// exclude group: 'com.sun.jersey', module: 'jersey-server' +// exclude group: 'com.google.guava', module: 'guava' +// exclude group: 'com.google.code.findbugs', module: 'jsr305' +// exclude group: 'com.google.protobuf', module: 'protobuf-java' +// exclude group: 'commons-beanutils', module: 'commons-beanutils' +// exclude group: 'commons-codec', module: 'commons-codec' +// exclude group: 'commons-io', module: 'commons-io' +// exclude group: 'commons-net', module: 'commons-net' +// exclude group: 'commons-cli', module: 'commons-cli' +// exclude group: 'commons-pool', module: 'commons-pool' +// exclude group: 'com.jcraft', module: 'jsch' +// exclude group: 'org.slf4j', module: 'slf4j-log4j12' +// exclude group: 'dnsjava', module: 'dnsjava' +// exclude group: 'log4j', module: 'log4j' } - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0' } test { From 190bd2f4855e4a3575adc40795adc159a3f4fc07 Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Fri, 14 Oct 2022 17:57:02 +0200 Subject: [PATCH 23/59] Update serializeAndRead to generate a Parquet file --- .../org/jfleet/parquet/ParquetWriterTest.java | 650 +++++++++--------- 1 file changed, 330 insertions(+), 320 deletions(-) diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java index 3f4a517..0e65d2d 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java @@ -1,357 +1,367 @@ package org.jfleet.parquet; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Arrays; -import org.apache.avro.file.DataFileReader; import org.apache.avro.generic.GenericDatumReader; import org.apache.avro.generic.GenericRecord; import org.apache.avro.io.DatumReader; +import org.apache.avro.util.Utf8; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.Path; +import org.apache.parquet.avro.AvroParquetReader; +import org.apache.parquet.hadoop.ParquetReader; +import org.apache.parquet.hadoop.metadata.CompressionCodecName; +import org.apache.parquet.hadoop.util.HadoopInputFile; +import org.apache.parquet.io.InputFile; import org.jfleet.EntityFieldType.FieldTypeEnum; import org.jfleet.EntityInfo; import org.jfleet.EntityInfoBuilder; import org.junit.jupiter.api.Test; +import java.io.ByteArrayOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + public class ParquetWriterTest { - @Test - public void shouldWrite() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); - ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); - parquetWriter.writeAll(Arrays.asList(testEntity)); - - } - - - @Test - void shouldFillOutputStream() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); - TestEntity testEntity = new TestEntity(); - testEntity.setFooString("foo"); - - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); - ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); - parquetWriter.writeAll(Arrays.asList(testEntity)); - - assertTrue(outputStream.size() > 0); - } - - - @Test - void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); - TestEntity testEntity = new TestEntity(); - testEntity.setFooString("foo"); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertEquals(new Utf8("foo"), genericRecord.get("foo")); + @Test + public void shouldWrite() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + parquetWriter.writeAll(Arrays.asList(testEntity)); + + } + + + @Test + void shouldFillOutputStream() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + parquetWriter.writeAll(Arrays.asList(testEntity)); + + assertTrue(outputStream.size() > 0); + } + + + @Test + void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + TestEntity testEntity = new TestEntity(); + testEntity.setFooString("foo"); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + long currentRowIndex = parquetReader.getCurrentRowIndex(); + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertEquals(new Utf8("foo"), genericRecord.get("foo")); + } } - } - /* + /* - @Test - void shouldConvertEntityInfoWithNullStringType() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); + @Test + void shouldConvertEntityInfoWithNullStringType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); - TestEntity testEntity = new TestEntity(); + TestEntity testEntity = new TestEntity(); - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("foo")); + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); + } } - } - @Test - void shouldConvertEntityInfoWithBooleanType() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .build(); + @Test + void shouldConvertEntityInfoWithBooleanType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); - TestEntity testEntity = new TestEntity(); - testEntity.setFooBoolean(true); + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertTrue((Boolean) genericRecord.get("fooBoolean")); + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + } } - } - - @Test - void shouldConvertEntityWithPrimitives() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) - .build(); - - TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); - testEntity.setFooBoolean(true); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertTrue((Boolean) genericRecord.get("fooBoolean")); - assertEquals(1, genericRecord.get("fooInt")); - assertEquals(2, genericRecord.get("fooShort")); - assertEquals(3, genericRecord.get("fooByte")); - assertEquals(10.2, genericRecord.get("fooDouble")); - assertEquals(100L, genericRecord.get("fooLong")); - assertEquals(50.1F, genericRecord.get("fooFloat")); + + @Test + void shouldConvertEntityWithPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = dataFileReader.getSchema(); + assertFieldIsNotUnionType(schema, "fooBoolean"); + assertFieldIsNotUnionType(schema, "fooInt"); + assertFieldIsNotUnionType(schema, "fooShort"); + assertFieldIsNotUnionType(schema, "fooByte"); + assertFieldIsNotUnionType(schema, "fooDouble"); + assertFieldIsNotUnionType(schema, "fooLong"); + assertFieldIsNotUnionType(schema, "fooFloat"); + } + } + + private static void assertFieldIsNotUnionType(Schema schema, String fieldName) { + assertNotEquals(Schema.Type.UNION, schema.getField(fieldName).schema().getType()); } - } - - @Test - void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) - .build(); - - TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); - testEntity.setFooBoolean(true); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - Schema schema = dataFileReader.getSchema(); - assertFieldIsNotUnionType(schema, "fooBoolean"); - assertFieldIsNotUnionType(schema, "fooInt"); - assertFieldIsNotUnionType(schema, "fooShort"); - assertFieldIsNotUnionType(schema, "fooByte"); - assertFieldIsNotUnionType(schema, "fooDouble"); - assertFieldIsNotUnionType(schema, "fooLong"); - assertFieldIsNotUnionType(schema, "fooFloat"); + + @Test + void shouldCreateSchemaWithNullTypesForObjects() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = dataFileReader.getSchema(); + assertUnionFieldContainsNullType(schema, "fooBoolean"); + assertUnionFieldContainsNullType(schema, "fooInt"); + assertUnionFieldContainsNullType(schema, "fooShort"); + assertUnionFieldContainsNullType(schema, "fooByte"); + assertUnionFieldContainsNullType(schema, "fooDouble"); + assertUnionFieldContainsNullType(schema, "fooLong"); + assertUnionFieldContainsNullType(schema, "fooFloat"); + } + } + + private static void assertUnionFieldContainsNullType(Schema schema, String fieldName) { + Schema fieldSchema = schema.getField(fieldName).schema(); + assertEquals(Schema.Type.UNION, fieldSchema.getType()); + assertTrue(fieldSchema.getTypes().contains(Schema.create(Schema.Type.NULL))); } - } - - private static void assertFieldIsNotUnionType(Schema schema, String fieldName) { - assertNotEquals(Schema.Type.UNION, schema.getField(fieldName).schema().getType()); - } - - @Test - void shouldCreateSchemaWithNullTypesForObjects() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - testEntity.setFooBoolean(true); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - Schema schema = dataFileReader.getSchema(); - assertUnionFieldContainsNullType(schema, "fooBoolean"); - assertUnionFieldContainsNullType(schema, "fooInt"); - assertUnionFieldContainsNullType(schema, "fooShort"); - assertUnionFieldContainsNullType(schema, "fooByte"); - assertUnionFieldContainsNullType(schema, "fooDouble"); - assertUnionFieldContainsNullType(schema, "fooLong"); - assertUnionFieldContainsNullType(schema, "fooFloat"); + + @Test + void shouldConvertEntityInfoWithNullBoolean() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("fooBoolean")); + } } - } - - private static void assertUnionFieldContainsNullType(Schema schema, String fieldName) { - Schema fieldSchema = schema.getField(fieldName).schema(); - assertEquals(Schema.Type.UNION, fieldSchema.getType()); - assertTrue(fieldSchema.getTypes().contains(Schema.create(Schema.Type.NULL))); - } - - @Test - void shouldConvertEntityInfoWithNullBoolean() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .build(); - - TestEntity testEntity = new TestEntity(); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("fooBoolean")); + + @Test + void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } } - } - - @Test - void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertEquals(1, genericRecord.get("fooInt")); - assertEquals(2, genericRecord.get("fooShort")); - assertEquals(3, genericRecord.get("fooByte")); - assertEquals(10.2, genericRecord.get("fooDouble")); - assertEquals(100L, genericRecord.get("fooLong")); - assertEquals(50.1F, genericRecord.get("fooFloat")); + + @Test + void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("fooInt")); + assertNull(genericRecord.get("fooShort")); + assertNull(genericRecord.get("fooByte")); + assertNull(genericRecord.get("fooDouble")); + assertNull(genericRecord.get("fooLong")); + assertNull(genericRecord.get("fooFloat")); + } } - } - - @Test - void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("fooInt")); - assertNull(genericRecord.get("fooShort")); - assertNull(genericRecord.get("fooByte")); - assertNull(genericRecord.get("fooDouble")); - assertNull(genericRecord.get("fooLong")); - assertNull(genericRecord.get("fooFloat")); + + @Test + void shouldThrowUnsupportedTypeException() { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) + .build(); + + AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); + assertThrows(UnsupportedTypeException.class, () -> new AvroWriter<>(avroConfiguration)); } - } - - @Test - void shouldThrowUnsupportedTypeException() { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) - .build(); - - AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - assertThrows(UnsupportedTypeException.class, () -> new AvroWriter<>(avroConfiguration)); - } - - @Test - void shouldConvertEnumTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) - .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) - .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) - .build(); - - TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); - testEntityWithEnum.setFoo(FRIDAY); - testEntityWithEnum.setBar(SATURDAY); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { - - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertEquals(4, genericRecord.get("foo")); - assertEquals(new Utf8("SATURDAY"), genericRecord.get("bar")); + + @Test + void shouldConvertEnumTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + testEntityWithEnum.setFoo(FRIDAY); + testEntityWithEnum.setBar(SATURDAY); + + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertEquals(4, genericRecord.get("foo")); + assertEquals(new Utf8("SATURDAY"), genericRecord.get("bar")); + } } - } - @Test - void shouldConvertNullableEnumTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) - .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) - .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) - .build(); + @Test + void shouldConvertNullableEnumTypesToAvro() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); - TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("foo")); - assertNull(genericRecord.get("bar")); + assertTrue(dataFileReader.hasNext()); + GenericRecord genericRecord = dataFileReader.next(); + assertNull(genericRecord.get("foo")); + assertNull(genericRecord.get("bar")); + } } - } - */ - private DataFileReader serializeAndRead(EntityInfo entityInfo, T testEntity) throws IOException { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); - ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); - parquetWriter.writeAll(Arrays.asList(testEntity)); - - try (FileOutputStream fos = new FileOutputStream("/tmp/foo.parquet")) { - fos.write(outputStream.toByteArray()); + */ + private ParquetReader serializeAndRead(EntityInfo entityInfo, T testEntity) throws IOException { + try (FileOutputStream outputStream = new FileOutputStream("/tmp/foo.parquet")) { + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo) + .withCompressionCodec(CompressionCodecName.SNAPPY) + .withRowGroupSize((long) org.apache.parquet.hadoop.ParquetWriter.DEFAULT_BLOCK_SIZE) + .withPageSize(org.apache.parquet.hadoop.ParquetWriter.DEFAULT_PAGE_SIZE) + .withValidation(true) + .withDictionaryEncoding(true) + .build(); + ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + parquetWriter.writeAll(Arrays.asList(testEntity)); + } + InputFile file = HadoopInputFile.fromPath(new Path("/tmp/foo.parquet"), new Configuration()); + return AvroParquetReader.builder(file).build(); } - DatumReader datumReader = new GenericDatumReader<>(); - return new DataFileReader<>(new File("/tmp/foo.parquet"), datumReader); - } - } From f67fcfec40ae61618c7fac8635da2bc34d51bd09 Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Sun, 16 Oct 2022 12:16:08 +0200 Subject: [PATCH 24/59] Exclude not required dependencies --- jfleet-parquet/build.gradle | 86 ++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/jfleet-parquet/build.gradle b/jfleet-parquet/build.gradle index 01cabe6..ec005ea 100644 --- a/jfleet-parquet/build.gradle +++ b/jfleet-parquet/build.gradle @@ -25,52 +25,52 @@ dependencies { implementation 'org.apache.parquet:parquet-avro:1.12.3' compileOnly 'org.apache.hadoop:hadoop-client:3.3.2' implementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.3.2') { -// exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client' -// exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-common' -// exclude group: 'org.apache.hadoop', module: 'hadoop-hdfs-client' -// exclude group: 'com.google.inject.extensions', module: 'guice-servlet' -// exclude group: 'io.netty', module: 'netty' -// exclude group: 'com.google.protobuf', module: 'protobuf-java' -// exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api' -// exclude group: 'org.slf4j', module: 'slf4j-log4j12' -// exclude group: 'org.apache.avro', module: 'avro' + exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client' + exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-common' + exclude group: 'org.apache.hadoop', module: 'hadoop-hdfs-client' + exclude group: 'com.google.inject.extensions', module: 'guice-servlet' + exclude group: 'io.netty', module: 'netty' + exclude group: 'com.google.protobuf', module: 'protobuf-java' + exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api' + exclude group: 'org.slf4j', module: 'slf4j-log4j12' + exclude group: 'org.apache.avro', module: 'avro' } api('org.apache.hadoop:hadoop-common:3.3.2') { -// exclude group: 'org.apache.curator', module: 'curator-recipes' -// exclude group: 'org.apache.kerby', module: 'kerb-core' -// exclude group: 'org.apache.avro', module: 'avro' -// exclude group: 'org.apache.curator', module: 'curator-client' -// exclude group: 'org.apache.httpcomponents', module: 'httpclient' -// exclude group: 'org.apache.hadoop', module: 'hadoop-annotations' -// exclude group: 'org.apache.hadoop.thirdparty', module: 'hadoop-shaded-protobuf_3_7' -// exclude group: 'org.apache.commons', module: 'commons-text' -// exclude group: 'org.apache.commons', module: 'commons-math3' -// exclude group: 'org.apache.zookeeper', module: 'zookeeper' -// exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' -// exclude group: 'org.eclipse.jetty', module: 'jetty-server' -// exclude group: 'org.eclipse.jetty', module: 'jetty-servlet' -// exclude group: 'org.eclipse.jetty', module: 'jetty-webapp' -// exclude group: 'org.eclipse.jetty', module: 'jetty-util' -// exclude group: 'javax.servlet', module: 'javax.servlet-api' -// exclude group: 'javax.servlet.jsp', module: 'jsp-api' -// exclude group: 'com.sun.jersey', module: 'jersey-json' -// exclude group: 'com.sun.jersey', module: 'jersey-core' -// exclude group: 'com.sun.jersey', module: 'jersey-servlet' -// exclude group: 'com.sun.jersey', module: 'jersey-server' -// exclude group: 'com.google.guava', module: 'guava' -// exclude group: 'com.google.code.findbugs', module: 'jsr305' -// exclude group: 'com.google.protobuf', module: 'protobuf-java' -// exclude group: 'commons-beanutils', module: 'commons-beanutils' -// exclude group: 'commons-codec', module: 'commons-codec' -// exclude group: 'commons-io', module: 'commons-io' -// exclude group: 'commons-net', module: 'commons-net' -// exclude group: 'commons-cli', module: 'commons-cli' -// exclude group: 'commons-pool', module: 'commons-pool' -// exclude group: 'com.jcraft', module: 'jsch' -// exclude group: 'org.slf4j', module: 'slf4j-log4j12' -// exclude group: 'dnsjava', module: 'dnsjava' -// exclude group: 'log4j', module: 'log4j' + exclude group: 'org.apache.curator', module: 'curator-recipes' + exclude group: 'org.apache.kerby', module: 'kerb-core' + exclude group: 'org.apache.avro', module: 'avro' + exclude group: 'org.apache.curator', module: 'curator-client' + exclude group: 'org.apache.httpcomponents', module: 'httpclient' + exclude group: 'org.apache.hadoop', module: 'hadoop-annotations' + exclude group: 'org.apache.hadoop.thirdparty', module: 'hadoop-shaded-protobuf_3_7' + exclude group: 'org.apache.commons', module: 'commons-text' + exclude group: 'org.apache.commons', module: 'commons-math3' + exclude group: 'org.apache.zookeeper', module: 'zookeeper' + exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind' + exclude group: 'org.eclipse.jetty', module: 'jetty-server' + exclude group: 'org.eclipse.jetty', module: 'jetty-servlet' + exclude group: 'org.eclipse.jetty', module: 'jetty-webapp' + exclude group: 'org.eclipse.jetty', module: 'jetty-util' + exclude group: 'javax.servlet', module: 'javax.servlet-api' + exclude group: 'javax.servlet.jsp', module: 'jsp-api' + exclude group: 'com.sun.jersey', module: 'jersey-json' + exclude group: 'com.sun.jersey', module: 'jersey-core' + exclude group: 'com.sun.jersey', module: 'jersey-servlet' + exclude group: 'com.sun.jersey', module: 'jersey-server' + exclude group: 'com.google.guava', module: 'guava' + exclude group: 'com.google.code.findbugs', module: 'jsr305' + exclude group: 'com.google.protobuf', module: 'protobuf-java' + exclude group: 'commons-beanutils', module: 'commons-beanutils' + exclude group: 'commons-codec', module: 'commons-codec' + exclude group: 'commons-io', module: 'commons-io' + exclude group: 'commons-net', module: 'commons-net' + exclude group: 'commons-cli', module: 'commons-cli' + exclude group: 'commons-pool', module: 'commons-pool' + exclude group: 'com.jcraft', module: 'jsch' + exclude group: 'org.slf4j', module: 'slf4j-log4j12' + exclude group: 'dnsjava', module: 'dnsjava' + exclude group: 'log4j', module: 'log4j' } testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3' From b21f18960983cf3b46a626e5e4ed02ec7f31455c Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Sun, 16 Oct 2022 12:27:18 +0200 Subject: [PATCH 25/59] Set data model to parquet reader to fix the test Fix the tests by setting the GenericDataModel to AvroParquetReader. If the DataModel is not set, AvroParquetReader will try to map the content of the Parquet File to the class from it was created, TestEntity in this case --- .../test/java/org/jfleet/parquet/ParquetWriterTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java index 0e65d2d..bd5c296 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java @@ -1,8 +1,7 @@ package org.jfleet.parquet; -import org.apache.avro.generic.GenericDatumReader; +import org.apache.avro.generic.GenericData; import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.DatumReader; import org.apache.avro.util.Utf8; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; @@ -361,7 +360,9 @@ private ParquetReader serializeAndRead(EntityInfo entityInfo, parquetWriter.writeAll(Arrays.asList(testEntity)); } InputFile file = HadoopInputFile.fromPath(new Path("/tmp/foo.parquet"), new Configuration()); - return AvroParquetReader.builder(file).build(); + return AvroParquetReader.builder(file) + .withDataModel(GenericData.get()) + .build(); } } From 0abf137dc4acc99b3833fc2f6ad1d9890d97a3b8 Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Sun, 16 Oct 2022 12:43:58 +0200 Subject: [PATCH 26/59] Enable all tests and refactor test class --- .../org/jfleet/parquet/ParquetWriterTest.java | 550 +++++++++--------- 1 file changed, 275 insertions(+), 275 deletions(-) diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java index bd5c296..6d944fc 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java @@ -1,5 +1,6 @@ package org.jfleet.parquet; +import org.apache.avro.Schema; import org.apache.avro.generic.GenericData; import org.apache.avro.generic.GenericRecord; import org.apache.avro.util.Utf8; @@ -13,16 +14,20 @@ import org.jfleet.EntityFieldType.FieldTypeEnum; import org.jfleet.EntityInfo; import org.jfleet.EntityInfoBuilder; +import org.jfleet.avro.UnsupportedTypeException; import org.junit.jupiter.api.Test; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.math.BigDecimal; import java.util.Arrays; +import static org.jfleet.parquet.TestEntityWithEnum.WeekDays.FRIDAY; +import static org.jfleet.parquet.TestEntityWithEnum.WeekDays.SATURDAY; import static org.junit.jupiter.api.Assertions.*; -public class ParquetWriterTest { +class ParquetWriterTest { @Test public void shouldWrite() throws IOException { @@ -44,13 +49,12 @@ public void shouldWrite() throws IOException { testEntity.setFooFloat(50.1F); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); - ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter<>(parquetConfiguration); parquetWriter.writeAll(Arrays.asList(testEntity)); } - @Test void shouldFillOutputStream() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) @@ -60,16 +64,15 @@ void shouldFillOutputStream() throws IOException { testEntity.setFooString("foo"); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); - ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo).build(); + ParquetWriter parquetWriter = new ParquetWriter<>(parquetConfiguration); parquetWriter.writeAll(Arrays.asList(testEntity)); assertTrue(outputStream.size() > 0); } - @Test - void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { + void shouldConvertEntityInfoWithStringTypesToParquet() throws IOException { EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) .build(); @@ -77,286 +80,283 @@ void shouldConvertEntityInfoWithStringTypesToAvro() throws IOException { testEntity.setFooString("foo"); try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { - long currentRowIndex = parquetReader.getCurrentRowIndex(); GenericRecord genericRecord = parquetReader.read(); assertNotNull(genericRecord); assertEquals(new Utf8("foo"), genericRecord.get("foo")); } } - /* - - @Test - void shouldConvertEntityInfoWithNullStringType() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) - .build(); - - TestEntity testEntity = new TestEntity(); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("foo")); - } - } - - @Test - void shouldConvertEntityInfoWithBooleanType() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .build(); - - TestEntity testEntity = new TestEntity(); - testEntity.setFooBoolean(true); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertTrue((Boolean) genericRecord.get("fooBoolean")); - } - } - - @Test - void shouldConvertEntityWithPrimitives() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) - .build(); - - TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); - testEntity.setFooBoolean(true); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertTrue((Boolean) genericRecord.get("fooBoolean")); - assertEquals(1, genericRecord.get("fooInt")); - assertEquals(2, genericRecord.get("fooShort")); - assertEquals(3, genericRecord.get("fooByte")); - assertEquals(10.2, genericRecord.get("fooDouble")); - assertEquals(100L, genericRecord.get("fooLong")); - assertEquals(50.1F, genericRecord.get("fooFloat")); - } - } - - @Test - void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) - .build(); - - TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); - testEntity.setFooBoolean(true); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - Schema schema = dataFileReader.getSchema(); - assertFieldIsNotUnionType(schema, "fooBoolean"); - assertFieldIsNotUnionType(schema, "fooInt"); - assertFieldIsNotUnionType(schema, "fooShort"); - assertFieldIsNotUnionType(schema, "fooByte"); - assertFieldIsNotUnionType(schema, "fooDouble"); - assertFieldIsNotUnionType(schema, "fooLong"); - assertFieldIsNotUnionType(schema, "fooFloat"); - } - } - - private static void assertFieldIsNotUnionType(Schema schema, String fieldName) { - assertNotEquals(Schema.Type.UNION, schema.getField(fieldName).schema().getType()); - } - - @Test - void shouldCreateSchemaWithNullTypesForObjects() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - testEntity.setFooBoolean(true); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - Schema schema = dataFileReader.getSchema(); - assertUnionFieldContainsNullType(schema, "fooBoolean"); - assertUnionFieldContainsNullType(schema, "fooInt"); - assertUnionFieldContainsNullType(schema, "fooShort"); - assertUnionFieldContainsNullType(schema, "fooByte"); - assertUnionFieldContainsNullType(schema, "fooDouble"); - assertUnionFieldContainsNullType(schema, "fooLong"); - assertUnionFieldContainsNullType(schema, "fooFloat"); - } - } - - private static void assertUnionFieldContainsNullType(Schema schema, String fieldName) { - Schema fieldSchema = schema.getField(fieldName).schema(); - assertEquals(Schema.Type.UNION, fieldSchema.getType()); - assertTrue(fieldSchema.getTypes().contains(Schema.create(Schema.Type.NULL))); - } - - @Test - void shouldConvertEntityInfoWithNullBoolean() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) - .build(); - - TestEntity testEntity = new TestEntity(); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("fooBoolean")); - } - } - - @Test - void shouldConvertEntityInfoWithNumericTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - testEntity.setFooInt(1); - testEntity.setFooShort((short) 2); - testEntity.setFooByte((byte) 3); - testEntity.setFooDouble(10.2); - testEntity.setFooLong(100L); - testEntity.setFooFloat(50.1F); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertEquals(1, genericRecord.get("fooInt")); - assertEquals(2, genericRecord.get("fooShort")); - assertEquals(3, genericRecord.get("fooByte")); - assertEquals(10.2, genericRecord.get("fooDouble")); - assertEquals(100L, genericRecord.get("fooLong")); - assertEquals(50.1F, genericRecord.get("fooFloat")); - } - } - - @Test - void shouldConvertEntityInfoWithNullNumericTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) - .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) - .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) - .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) - .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) - .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) - .build(); - - TestEntity testEntity = new TestEntity(); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntity)) { - - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("fooInt")); - assertNull(genericRecord.get("fooShort")); - assertNull(genericRecord.get("fooByte")); - assertNull(genericRecord.get("fooDouble")); - assertNull(genericRecord.get("fooLong")); - assertNull(genericRecord.get("fooFloat")); - } - } - - @Test - void shouldThrowUnsupportedTypeException() { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) - .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) - .build(); - - AvroConfiguration avroConfiguration = new AvroConfiguration(entityInfo); - assertThrows(UnsupportedTypeException.class, () -> new AvroWriter<>(avroConfiguration)); - } - - @Test - void shouldConvertEnumTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) - .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) - .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) - .build(); - - TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); - testEntityWithEnum.setFoo(FRIDAY); - testEntityWithEnum.setBar(SATURDAY); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { - - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertEquals(4, genericRecord.get("foo")); - assertEquals(new Utf8("SATURDAY"), genericRecord.get("bar")); - } - } - - @Test - void shouldConvertNullableEnumTypesToAvro() throws IOException { - EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) - .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) - .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) - .build(); - - TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); - - try (DataFileReader dataFileReader = serializeAndRead(entityInfo, testEntityWithEnum)) { - - assertTrue(dataFileReader.hasNext()); - GenericRecord genericRecord = dataFileReader.next(); - assertNull(genericRecord.get("foo")); - assertNull(genericRecord.get("bar")); - } - } - */ + @Test + void shouldConvertEntityInfoWithNullStringType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.STRING, TestEntity::getFooString) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertNull(genericRecord.get("foo")); + } + } + + @Test + void shouldConvertEntityInfoWithBooleanType() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + } + } + + @Test + void shouldConvertEntityWithPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertTrue((Boolean) genericRecord.get("fooBoolean")); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldCreateSchemaWithoutNullTypesForPrimitives() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithPrimitives.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, true, TestEntityWithPrimitives::isFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, true, TestEntityWithPrimitives::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, true, TestEntityWithPrimitives::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, true, TestEntityWithPrimitives::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, true, TestEntityWithPrimitives::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, true, TestEntityWithPrimitives::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, true, TestEntityWithPrimitives::getFooFloat) + .build(); + + TestEntityWithPrimitives testEntity = new TestEntityWithPrimitives(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = parquetReader.read().getSchema(); + assertFieldIsNotUnionType(schema, "fooBoolean"); + assertFieldIsNotUnionType(schema, "fooInt"); + assertFieldIsNotUnionType(schema, "fooShort"); + assertFieldIsNotUnionType(schema, "fooByte"); + assertFieldIsNotUnionType(schema, "fooDouble"); + assertFieldIsNotUnionType(schema, "fooLong"); + assertFieldIsNotUnionType(schema, "fooFloat"); + } + } + + private void assertFieldIsNotUnionType(Schema schema, String fieldName) { + assertNotEquals(Schema.Type.UNION, schema.getField(fieldName).schema().getType()); + } + + @Test + void shouldCreateSchemaWithNullTypesForObjects() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooBoolean(true); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + Schema schema = parquetReader.read().getSchema(); + assertUnionFieldContainsNullType(schema, "fooBoolean"); + assertUnionFieldContainsNullType(schema, "fooInt"); + assertUnionFieldContainsNullType(schema, "fooShort"); + assertUnionFieldContainsNullType(schema, "fooByte"); + assertUnionFieldContainsNullType(schema, "fooDouble"); + assertUnionFieldContainsNullType(schema, "fooLong"); + assertUnionFieldContainsNullType(schema, "fooFloat"); + } + } + + private void assertUnionFieldContainsNullType(Schema schema, String fieldName) { + Schema fieldSchema = schema.getField(fieldName).schema(); + assertEquals(Schema.Type.UNION, fieldSchema.getType()); + assertTrue(fieldSchema.getTypes().contains(Schema.create(Schema.Type.NULL))); + } + + @Test + void shouldConvertEntityInfoWithNullBoolean() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooBoolean", FieldTypeEnum.BOOLEAN, TestEntity::getFooBoolean) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertNull(genericRecord.get("fooBoolean")); + } + } + + @Test + void shouldConvertEntityInfoWithNumericTypesToParquet() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + testEntity.setFooInt(1); + testEntity.setFooShort((short) 2); + testEntity.setFooByte((byte) 3); + testEntity.setFooDouble(10.2); + testEntity.setFooLong(100L); + testEntity.setFooFloat(50.1F); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertEquals(1, genericRecord.get("fooInt")); + assertEquals(2, genericRecord.get("fooShort")); + assertEquals(3, genericRecord.get("fooByte")); + assertEquals(10.2, genericRecord.get("fooDouble")); + assertEquals(100L, genericRecord.get("fooLong")); + assertEquals(50.1F, genericRecord.get("fooFloat")); + } + } + + @Test + void shouldConvertEntityInfoWithNullNumericTypesToParquet() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("fooInt", FieldTypeEnum.INT, TestEntity::getFooInt) + .addColumn("fooShort", FieldTypeEnum.SHORT, TestEntity::getFooShort) + .addColumn("fooByte", FieldTypeEnum.BYTE, TestEntity::getFooByte) + .addColumn("fooDouble", FieldTypeEnum.DOUBLE, TestEntity::getFooDouble) + .addColumn("fooLong", FieldTypeEnum.LONG, TestEntity::getFooLong) + .addColumn("fooFloat", FieldTypeEnum.FLOAT, TestEntity::getFooFloat) + .build(); + + TestEntity testEntity = new TestEntity(); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntity)) { + + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertNull(genericRecord.get("fooInt")); + assertNull(genericRecord.get("fooShort")); + assertNull(genericRecord.get("fooByte")); + assertNull(genericRecord.get("fooDouble")); + assertNull(genericRecord.get("fooLong")); + assertNull(genericRecord.get("fooFloat")); + } + } + + @Test + void shouldThrowUnsupportedTypeException() { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntity.class) + .addColumn("foo", FieldTypeEnum.BIGDECIMAL, a -> BigDecimal.ZERO) + .build(); + + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(new ByteArrayOutputStream(), entityInfo).build(); + assertThrows(UnsupportedTypeException.class, () -> new ParquetWriter<>(parquetConfiguration)); + } + + @Test + void shouldConvertEnumTypesToParquet() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + testEntityWithEnum.setFoo(FRIDAY); + testEntityWithEnum.setBar(SATURDAY); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertEquals(4, genericRecord.get("foo")); + assertEquals(new Utf8("SATURDAY"), genericRecord.get("bar")); + } + } + + @Test + void shouldConvertNullableEnumTypesToParquet() throws IOException { + EntityInfo entityInfo = new EntityInfoBuilder<>(TestEntityWithEnum.class) + .addColumn("foo", FieldTypeEnum.ENUMORDINAL, TestEntityWithEnum::getFoo) + .addColumn("bar", FieldTypeEnum.ENUMSTRING, TestEntityWithEnum::getBar) + .build(); + + TestEntityWithEnum testEntityWithEnum = new TestEntityWithEnum(); + + try (ParquetReader parquetReader = serializeAndRead(entityInfo, testEntityWithEnum)) { + + GenericRecord genericRecord = parquetReader.read(); + assertNotNull(genericRecord); + assertNull(genericRecord.get("foo")); + assertNull(genericRecord.get("bar")); + } + } + private ParquetReader serializeAndRead(EntityInfo entityInfo, T testEntity) throws IOException { try (FileOutputStream outputStream = new FileOutputStream("/tmp/foo.parquet")) { - ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo) + ParquetConfiguration parquetConfiguration = new ParquetConfiguration.Builder(outputStream, entityInfo) .withCompressionCodec(CompressionCodecName.SNAPPY) - .withRowGroupSize((long) org.apache.parquet.hadoop.ParquetWriter.DEFAULT_BLOCK_SIZE) + .withRowGroupSize(org.apache.parquet.hadoop.ParquetWriter.DEFAULT_BLOCK_SIZE) .withPageSize(org.apache.parquet.hadoop.ParquetWriter.DEFAULT_PAGE_SIZE) .withValidation(true) .withDictionaryEncoding(true) .build(); - ParquetWriter parquetWriter = new ParquetWriter(parquetConfiguration); + ParquetWriter parquetWriter = new ParquetWriter<>(parquetConfiguration); parquetWriter.writeAll(Arrays.asList(testEntity)); } InputFile file = HadoopInputFile.fromPath(new Path("/tmp/foo.parquet"), new Configuration()); From 42701024683c6df4d9f6823568bb9e5f1c5e284d Mon Sep 17 00:00:00 2001 From: Koldo Urrosolo Date: Sun, 16 Oct 2022 12:44:32 +0200 Subject: [PATCH 27/59] Remove build directories added by error in a previous commit --- .../org/jfleet/avro/AvroConfiguration.class | Bin 1152 -> 0 bytes .../org/jfleet/avro/AvroSchemaBuilder$1.class | Bin 1199 -> 0 bytes .../org/jfleet/avro/AvroSchemaBuilder.class | Bin 6598 -> 0 bytes .../main/org/jfleet/avro/AvroWriter.class | Bin 3834 -> 0 bytes .../avro/EntityGenericRecordMapper.class | Bin 2889 -> 0 bytes .../avro/UnsupportedTypeException.class | Bin 403 -> 0 bytes .../test/org/jfleet/avro/AvroWriterTest.class | Bin 14846 -> 0 bytes .../test/org/jfleet/avro/TestEntity.class | Bin 2371 -> 0 bytes .../avro/TestEntityWithEnum$WeekDays.class | Bin 1498 -> 0 bytes .../org/jfleet/avro/TestEntityWithEnum.class | Bin 933 -> 0 bytes .../avro/TestEntityWithPrimitives.class | Bin 1802 -> 0 bytes jfleet-avro/build/jacoco/test.exec | Bin 62734 -> 0 bytes jfleet-avro/build/libs/jfleet-avro-0.6.4.jar | Bin 8160 -> 0 bytes .../org.jfleet.avro.AvroWriterTest.html | 265 ------------------ .../reports/tests/test/css/base-style.css | 179 ------------ .../build/reports/tests/test/css/style.css | 84 ------ .../build/reports/tests/test/index.html | 133 --------- .../build/reports/tests/test/js/report.js | 194 ------------- .../tests/test/packages/org.jfleet.avro.html | 103 ------- .../TEST-org.jfleet.avro.AvroWriterTest.xml | 119 -------- .../build/test-results/test/binary/output.bin | 100 ------- .../test-results/test/binary/output.bin.idx | Bin 36 -> 0 bytes .../test-results/test/binary/results.bin | Bin 1287 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 19895 -> 0 bytes .../previous-compilation-data.bin | Bin 19854 -> 0 bytes .../META-INF/MANIFEST.MF | 23 -- .../org.jacoco.agent/pom.properties | 5 - .../maven/org.jacoco/org.jacoco.agent/pom.xml | 106 ------- .../about.html | 72 ----- .../jacocoagent.jar | Bin 292059 -> 0 bytes .../org/jacoco/agent/AgentJar.class | Bin 2322 -> 0 bytes jfleet-avro/build/tmp/jar/MANIFEST.MF | 2 - .../parquet/CountedPositionOutputStream.class | Bin 1329 -> 0 bytes .../parquet/OutputStreamOutputFile.class | Bin 1020 -> 0 bytes .../ParquetConfiguration$Builder.class | Bin 9759 -> 0 bytes .../jfleet/parquet/ParquetConfiguration.class | Bin 1873 -> 0 bytes .../org/jfleet/parquet/ParquetWriter.class | Bin 2998 -> 0 bytes .../jfleet/parquet/ParquetWriterTest.class | Bin 6066 -> 0 bytes .../test/org/jfleet/parquet/TestEntity.class | Bin 2377 -> 0 bytes .../parquet/TestEntityWithEnum$WeekDays.class | Bin 1519 -> 0 bytes .../jfleet/parquet/TestEntityWithEnum.class | Bin 951 -> 0 bytes .../parquet/TestEntityWithPrimitives.class | Bin 1808 -> 0 bytes .../org.jfleet.parquet.ParquetWriterTest.html | 108 ------- .../reports/tests/test/css/base-style.css | 179 ------------ .../build/reports/tests/test/css/style.css | 84 ------ .../build/reports/tests/test/index.html | 133 --------- .../build/reports/tests/test/js/report.js | 194 ------------- .../test/packages/org.jfleet.parquet.html | 103 ------- ...T-org.jfleet.parquet.ParquetWriterTest.xml | 10 - .../build/test-results/test/binary/output.bin | Bin 222 -> 0 bytes .../test-results/test/binary/output.bin.idx | Bin 36 -> 0 bytes .../test-results/test/binary/results.bin | Bin 130 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 51289 -> 0 bytes .../previous-compilation-data.bin | Bin 39749 -> 0 bytes 54 files changed, 2196 deletions(-) delete mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroConfiguration.class delete mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder$1.class delete mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder.class delete mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroWriter.class delete mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/EntityGenericRecordMapper.class delete mode 100644 jfleet-avro/build/classes/java/main/org/jfleet/avro/UnsupportedTypeException.class delete mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/AvroWriterTest.class delete mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntity.class delete mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithEnum$WeekDays.class delete mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithEnum.class delete mode 100644 jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithPrimitives.class delete mode 100644 jfleet-avro/build/jacoco/test.exec delete mode 100644 jfleet-avro/build/libs/jfleet-avro-0.6.4.jar delete mode 100644 jfleet-avro/build/reports/tests/test/classes/org.jfleet.avro.AvroWriterTest.html delete mode 100644 jfleet-avro/build/reports/tests/test/css/base-style.css delete mode 100644 jfleet-avro/build/reports/tests/test/css/style.css delete mode 100644 jfleet-avro/build/reports/tests/test/index.html delete mode 100644 jfleet-avro/build/reports/tests/test/js/report.js delete mode 100644 jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html delete mode 100644 jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml delete mode 100644 jfleet-avro/build/test-results/test/binary/output.bin delete mode 100644 jfleet-avro/build/test-results/test/binary/output.bin.idx delete mode 100644 jfleet-avro/build/test-results/test/binary/results.bin delete mode 100644 jfleet-avro/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 jfleet-avro/build/tmp/compileTestJava/previous-compilation-data.bin delete mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/META-INF/MANIFEST.MF delete mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/META-INF/maven/org.jacoco/org.jacoco.agent/pom.properties delete mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/META-INF/maven/org.jacoco/org.jacoco.agent/pom.xml delete mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html delete mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/jacocoagent.jar delete mode 100644 jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/org/jacoco/agent/AgentJar.class delete mode 100644 jfleet-avro/build/tmp/jar/MANIFEST.MF delete mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/CountedPositionOutputStream.class delete mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/OutputStreamOutputFile.class delete mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetConfiguration$Builder.class delete mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetConfiguration.class delete mode 100644 jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetWriter.class delete mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/ParquetWriterTest.class delete mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntity.class delete mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum$WeekDays.class delete mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum.class delete mode 100644 jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithPrimitives.class delete mode 100644 jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html delete mode 100644 jfleet-parquet/build/reports/tests/test/css/base-style.css delete mode 100644 jfleet-parquet/build/reports/tests/test/css/style.css delete mode 100644 jfleet-parquet/build/reports/tests/test/index.html delete mode 100644 jfleet-parquet/build/reports/tests/test/js/report.js delete mode 100644 jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html delete mode 100644 jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml delete mode 100644 jfleet-parquet/build/test-results/test/binary/output.bin delete mode 100644 jfleet-parquet/build/test-results/test/binary/output.bin.idx delete mode 100644 jfleet-parquet/build/test-results/test/binary/results.bin delete mode 100644 jfleet-parquet/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 jfleet-parquet/build/tmp/compileTestJava/previous-compilation-data.bin diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroConfiguration.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroConfiguration.class deleted file mode 100644 index febaf0b9401a97d9a5df629c44342742bba908a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcma)4+int36kUgF8G*u35USN;y$m#w7oQwL(hyBdh(46`{XhpCGR~Ok(4_q;O{^w9 z_yK;Dah(~UQ^3Sba?YN$FKeB>_wPSHe*t)fwuS_fS)}qvBO_3n$xGRBq&w|=7|pD4 zAdu)aA@{Sfqmm2id$y_slIp4ntd7hq3IqYHxjW3`-G4clbIcBibsnw+V4mPQAH5w%*#Rg|&@UdZ`AD zCa0U=?k4zg2Sbaa26rp8>qyZ~qrr2Z$axqE=4nR7gV>; jP{<)O1fEe;^o)49%6hrRf0c_=K4-zmdI5tZ3AFwK0War9 diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder$1.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroSchemaBuilder$1.class deleted file mode 100644 index 1dee2af411988a74321ba020d1af341692f31149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1199 zcma)5YfsZq7=8{L>o$r^#kr0*9j2J`4^S83w zPaMvJtl|cCu)l0`r(D|K<>}ui#jWiy#P&?5#;XkDnb8gPq<(V=#F3DYl+gm2VW`2; z-1EI`jyA)p@EtQ>vz;>c(~}HSY2%q4Se2r=n@!R=^OSw;bEGgF9i%>y&rVD|3c6)pog7+u7uP$=q~EX;(eVbkPW97VUZZbld7k z>K_ojAJT53&2`#GG*+kQiAr_aPc&YqLqt;z*297~n2!qHV1GsMMBP6tcrxT4kwgL= z=td`cFoa>k5o&LSa27c%5h{29gRq3hun5c8MU^nXbG#sYiC1_{_y%wBjxd7j)P5|y zghAY(a}%wbw5HMVP$G-sF&oWRCyv`F-mNgk9Oen5xJ~4}YrQ?Y}W;zoL69H;l*oZh<=?A$*yTFr_rl26Ww&YAt~z4zaH|F!@1 z$dhLt0E3)*7Z^uM;S1Zt1T=C8`vJ zR8&J1m~SPAI``ao@G)z}8L&Z#7EKoacT|gm~ zUTs7dn3jXyXD1DFi1-bdtzeFdMqDD$D0$Hm8l`e&94B8zQjc26n81c+A1fZM7DwKK z*iBbCxSp;Y&gZF^j|Eg4ncS{L_i01qb9xS+-Za6Rq@argrjE(zErzfd%?esnw4zO* zt*8*WYzS1D)J}>bbL&k{Ln^6U2R$|>*!Y%%@T4$Dy5GM z#PuWvuE8=D%dx`MPnQ)>kC>!XKdPU!ZNxhxM#>IXV-;2_c!r8+;xbx}qoM4wK&4^p zNzJxsp)+!@d%Ss42xF~+%T=tyv$)3?g;5Zi(y*55)eq85=pDNy#s(D|(IpTxo#|W) zbA2kTU{kJ*yMjm;3DLoxtzrv$Tx)kU;98tOy4mkOV@To2sd3U;--?KWZ7O=DU`r-* zWV9vSjJZ~>U^{i4A3KC@T&1E@Y8Cx>uGFdHwdZIqrS$P6 zD9KB3y@DH5+=!RbNQ!fij|2l-%1J}6VRV+{!%Z~Z`knf$VA_n@hGlkc_B!0U60cElD_+YGZwL8V_bIqTp4OcLvx^*&z@>f?d3Md_r@JN=6+Lqa;V5ol zT*^sLuItL27H;Wh-0ZSqbgbHlVd}ln zf5-~cLI-56DfcgA9s~+Sonj$R8S2ZU3>uS5rA%nK?9(_r5w=W<(%J&h;dSJFN}tV2 zkOA2vT{WN&8K&!DOA8?8WG@LinuY|#ZhiRlc%>DEZ<#Pw_;t4GIZ7Dpfw3g>Yyy zB{*~vm*>0%skE+hjIXx@tx0kwM9*Y%LO~AK70(uh@c!RA{a;#epOsEVS%}D@WyS@! z?+%#_n430QmYuSbT4I}S4_mQRZ3R9X!sqaL1&^pWherh#IEll#`5WebYoFd3(MASh z8Zop%Ey{}$Yk=wz|L9SFHt~?$4Yp`zEUu@TB9^r;od{o;w|p}>h|zE$X9<9OZ@HK&fQbwN7 zZNd|>jM06_?l&a6-&FA}e4EiMW~F5Yr3wW~7mnQyw2#<#C9&_R_&$EXS~zZ*LoTWI zf@yWsks^fk5&DrN^kWr2!B1IK4#q9bQ)5R-N}DCHkJQg4smE3P0>7m74OmuO*G3ax zNn*5m2|h}Wx2_)3)RWFDkG!y9;tO5}?j^S$BfiSkojJkYeVnO5;5?Qo z*s37>1m;j;K8Nv_`V!ZYUO8dTEg?J4$zVqYJA2uEeg*@pgZE;{?T=)T=#VS3SK&ddb`-tRRY}$;&N(WVVxMyq9U#Srk)a@Eq?@6zr?{h3zH3er>I4<+ zLY*d*Jcc?{p2toF2Slh^m47(H*#Pe6$6LO8Ah?UIJdnmYN1(JF<3|Oq3AWD)p2m9u zG@+vz92>J4`Tqvsa-Q)zAM1@-)*JaGM^BIh9X2I&BOairWyGn)LlneiU0Ro1y9TE{ z_y@S#DAdOZC52EBsO(ahL|ooKL4Z$kI)G2%(`=>YKEt^$;4ysF>wP`j`%bp^!))(o z?EQ+EH&H)}Y3#qI(f@|+?}Am1@&BIVT^#>`?E$ubWIIfF)K&7CD~dm@pG9sO@MpU8 t&20a|_9)xG68~@b2mVF)Cpi8O=g+f!3RTobg9xxKV_VL)f-V0K^Iyw-&&dD) diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroWriter.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/AvroWriter.class deleted file mode 100644 index 74e0a222f6005486f803061750c58cd5a6eab1d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3834 zcmb7HX;%|h7=A7!83=<4A{ev?;sQa93t~&CRdFd6p$dYaU4}4(!H`Lli3@h$_r>me zzxh?qsZh%~?YDmD-{`MsPmlJwGg&4Jr}`x`bKm!U-t|8B=Fhvo{sy2MKlxFCN(CMj zUibvo%xRajP)v(QL&H;Zdc+d&^%-%)Iw(-t(K+Tv6{;2ZRn$NgXf~74(A-Q+*R7Ct zDQSid^JhG1Sb9>RHmY04;+A1u9f;4E0(~8W<<$Gl_>2)vCpF7326=yXxVhh7^oOY=QVYfilWjQy8V=+4`+rltI z!)Ys#wleA~;&hHF*eei}HFVb^>Qpb3sp3)1O3ypv>Bk;)%OdWV5w6r3iF-hxy%=}K zi0L7sX~+4J1?<5i60n#0rGQMu~|!^}iEsTUWdbO6gl z#)cijVFgE2^y8>N(+b^S3*^StER&nJv7l=MnRP-P#|Z_Gs~EsZf%-gDRz*OW)lx(H z6;cNoV^UfSsyKxq0Z-gsZpdQ0c!s0Uf+tm+#u^83xWg%c+oCl2qINsR zMDD?;inADFrRBWGxp~)>1GJlRPQ`?zLT@ByrgR181=iYW+P+6;ljdb@DyI7}iKkRN zjc3So+Vu2DI*~}~sgzFe^=|N-h23-wQwk!IKB-rho(lL-Adq3149mJ$Nx_Ujhl@6h zcq-v+ztG8qmesV^OtOZCSrrE6*k>|xe@t6gU}^=u;9@Gpg6W9KQReP#aHrykyeomuo) zvqnl_V+lj$&zi76og}RSSKNkWO$wA~*;wfGY9i~nt*p7T+xtdG!v|@6A1P;5t4EAz zoCK6)qFwiGC+ii;^q_e6yXY{_ymp0srcIkNxw1sc5zyrsYUr$NMyH6uncRl54zl_9 zk6nrA2}$-T1#f0I31b`>&PfEiA0&1MTBh9Ka-C%sMzm_WfO7@5mN0iY0^}}o;T0Z1 z0yPB99t#4kC5T1TT?m#9E?bqM67wmlFj<)zks@=C_12RwW59JP}Cy3Tj0zc;u95$yT}%5BsJmr*wn{28@NSi6YE+i2!W zi(F}TR$FhQ{T8h%k>YP7G32iYO^|ok76f?vX@+I5+UQ8*62IsNmvMy=TrH3-5GVr^Xicek(fJ<9*mp{Z3l6BZ{D1k%RDY zrIk0dx7n>m%HF}d#9|oa)@OIr?hCad1=n^h2B7T!nr&RTJm^&HvE;)lvm)#{{YOV64U?y diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/EntityGenericRecordMapper.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/EntityGenericRecordMapper.class deleted file mode 100644 index 738414720a4208dc8ee7025ab58c73ac4e9563a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2889 zcma)8Yf}?v6n@?iSP2W5RM2==P?8Xgwf15{QAE(R5GaWhrMD$4VKHoIvZ2!Z#oq6i zFZ~1hwe3_a?M%m+&h$h7NdH5px98p6Kq8_HL-yVCo^#&wJm>vOB{40Qy_{Ikh z>J)fY)T2RQ`@FWK#qye&i;Ygt>sd>nq1P}Ct52XV6rO0rHZ&^msc3>K5H1vRvH97& zu3Ir}saS{&nwDWLpVv*jXk^FrY@s+aqAf1!Mfxda=kx_lVArs;(iSzoJ636XCn24; zsA$D@0iSMrN}96;ft|L6dyaF2+(;-02t@AmmUB*zxlx?cEUnWC#RorjNTh87dqSIq z5uWg2Cw3_as@RP^0&P_&*H34RIo%p4UF4Sqj)olGs-ttMtQPrL9H&&okq}UctEgqI2`yjN z1s-=&>DI?Oki-@pNAb9dKAaY4Udw1oTcGD!>e5!xFmpuNkFyE}RGh=0z>)jZpHq6w z&SIH4>Z(TTI=oAmEWs$wtGIw9;WDZrL(k7-mKPb+er91qMXv29e0UPW3Pz-HN?`Zq zsshn_y6RkWI%t*`cs;X=DUKn>(&GWFeltlp#}*dxTwU!t$J`To}6u&MsTJ z4;L}1;u0>)t7BHO&#F)Q@C=?+@SKY0@q&QgEXXu)Wq33)A&>eCuv{ zGnqsmeYH-Pjr>eM=SStPB&u(TGl&vS(N~X+I~u)XOn)tId(dax1`*hJ!>g1y-FTyIz*~u{j(BOGwzTXOPDPin#)a21dvpU*llD=71KiEmfrmkFP(ky{Xv?we2|(VJ-g z-d22xzX5pVHh;IHk(0fJlB<*)bj+}fm-!|&&A@iW45h>x1>b zV|OIz4c6bnWATQl-0TfDtl~@^Zv6LK^gFuuLV`FIgrbJx*A&G{ANsn$kGVNFt$YE`sE;Nv;6R1Pz=4wBHx zzau!o51~`&;^Yl+%!Nr&w@pvPiEE93Nt+az^GTa14?T_HV`P}y_3Tf&R7e7v;Qbr> l6pZcg`>Eu>{{)|M%Y)DGIiCTp{P+T2vE0UZ{MToK{{v{7?KA)Y diff --git a/jfleet-avro/build/classes/java/main/org/jfleet/avro/UnsupportedTypeException.class b/jfleet-avro/build/classes/java/main/org/jfleet/avro/UnsupportedTypeException.class deleted file mode 100644 index dd1c7d2ed84e3ff56d3978f6d713277ae79fc012..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcma)2!AiqG6r7DQ(O7LQ=t1z{tyXX^-YUHmJp~W8_P$NmxFy*Qn@y>o*Rd$SpBpMM`kV=+Nsj= zrYUFAPQ>2Edx&R4PpDRe`l{?fOeyY&IE+Num5AC&Ahfsk1 E51{sCH2?qr diff --git a/jfleet-avro/build/classes/java/test/org/jfleet/avro/AvroWriterTest.class b/jfleet-avro/build/classes/java/test/org/jfleet/avro/AvroWriterTest.class deleted file mode 100644 index 96010ca2537befed3080e5cebe7934f7a6fcea67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14846 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 diff --git a/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntity.class b/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntity.class deleted file mode 100644 index 9c477373e1e021bcb683e91839b63f070744c744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2371 zcmZ{l-BQy)7>3`JpF&A3r4-~(L_k_Vs)C{xK`9iG3eLcA9x#+JwV4Tl8SYAFaGdeL z3-F>Gzi)R-lejs_Hk)_fefIm={`vdsH-NYJoI(N}Npza%Lbrkb3+vh{HLPa6bZ~NE zpZW&6*PN!~uN&wn6pwq+gWe=kCi-9+7Ef(m+kVNq_T18ued%vEeaF8s(0k^( zhrZ`D>jnmDZDToCW~+N9GU%s0NV?mk&2j-9P1tqY6T$%#ISd-;Vb62dBWX4u6;nbu zWMUZi4J1jpdE?u3q=1fRglyEr7{(>zmV0&5AYqVE&I#!Q6O(u-9cwNhCg{jBLiWhS zG-f1Wwc%P3LNO(Tk4?;>U?9bWuG_G!X87D{vTUHU;(j5pOwDQ9`&VC2Z12cYsP3uN zIJP{8-_>NNf9_lw7_Y@Ag*?r=?N{5087ve7@lmNE)n!PPFZ?em9#ikd;g>X%v&x3u!)LM zt1!YbQl)Vhqn0WZBP9wD$55;r`isL2y_)9{mS4EmMeju#^}v>2&h z#Yhb)M(Q>(Qag!}x`oCp48Ef1S){iTjRuWf^FLvH7qWSJ@@Jp}3-mOl0E>7+Zw8jc zqVVEdB)`$e1lo%;+Qm=tj4XKZI;r_Y-SZ1SkZfY`Ke_Cr#owr4axKT|)) zvhr%5;uh&B$gmb<1ut|U=_tq;fsDt1Z~_?QB~~>c*(k`Q7UUIP>p-$mkZA&$i2>mX zV30Q`Ye4c*kU1^L8vTuFQj?E@ED*?I3<#GXgREmi12Pf?DQQ98;k^!IBnq-jAS*E- z+ye}?c*KO-p^RA!^s`P_>k6*n|?5ORCwWI@V(i}r&DEy*<2S4aZVwt@N){OP|Rq= z!F@MWsNCn@$)xjtyuB*=xK}Q07Pl`$Z>k824%WA`PWFI`K@q2=3dL>58B#GU;<-5PmP|L85+)%qENxq3yfmGp+mIUQn;r5_T1@cPo| zzS{dH4dmC%s-@el2F1A}(GuOMM5X2|ZM7qjuQt(DQ!8->MXR?O6=U7xbB3-zW1k2yJf~lucow4gDa4)lMYx1l z39{)kjGu$?c-LR?3G%2HQS{ok&uhrC1=kiLVJ-EFwFvZoD6D|_2?LSsDuLOV$(}uD&hE?W(=&ig6jF#FY9MAJj)XwAC2yqVNVj2~)LN>p1ri&!YwIn6 zXt7isKoSE6QYHpr3KTrQVYMzDrL-k)e9t;lf!=qutvlzoZtlD7Yr9rnM~J&{+b~7`4MZ_Q(R|;4QRJu+7(<@oXYf6YTlyJ651i}^9>+u%ycKFAs^ygj z7(Hr!#!MPVIy@mC)`>1XOXGQ1^<-Zm>90bveT7W*7n1%eBu7HVeh|Wj(xb+7IQk4` SX^l~54hxi}!Yql!?a4Q{WwVz6 diff --git a/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithPrimitives.class b/jfleet-avro/build/classes/java/test/org/jfleet/avro/TestEntityWithPrimitives.class deleted file mode 100644 index 524474dd39da7b33ae76b4c4922f042f33243615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcma)+YflqV5Qg7v7Yb!77X<}GEQoBYP(e|-Sf!L|NuwqunDA}Er7S7kq+Lk(PhMg| zW8w#YfIrIk&hECwb({F*On2rzbDlFZr@wyx_zBGzL{e4|)|0ofzjvrfSqG znRf>#=AomYcf+b#PF6uwPwn-i5B)L3H4H#gpxgCI=H#eqnoh(;5|Sm$PgX^w2WSYtk=C`qnq7{ri*KDx`tc3lEx35;mCjvESM4CF2xlm49e z$28o;Ed~Ab=k2qDszmYC*oeVV(39 z(<%6cU_FcUG&&wtFQ)bs40s~HER>b$^JKnH)ypD`dqS^F)aB^%be>Dqb0X6`S*vOk z=IQi=EvKsIuVnPfNa0R9qvulfohyWXRjDhq34Ncc7u=(*2Cv&LGL0j*n|OF0SQpxR%4aE z*ExP=XcgL?^mi!VT-klD5(c7}=c;)E=t%L4ea8c?e{a4->=T0#bT%hKH$TLJzd1{_ z+@v=>*+i^!v^-2;n2aNChA~g&A1`QfZ=qgv>4PANAjoJa$RjL;fh2+;;{=)L0wRSM zkYzmfb9KsjiQyo~R4B+3tb~CK2SJhqndt%|ofnX&c-97q@R#)U5~E)Ot(gl2d5%?o zbC#Wtx~-XSVl)VnB1pOmh>V_qtYO{Hm0|l@Amg6{APb=&8~lIv2CM@z-NbkhWQicl zT|i{^1tg1?ey*#nnfej{SqTMsh0QidYglKSmxIfE3)Tzy1RwQ0Th= diff --git a/jfleet-avro/build/jacoco/test.exec b/jfleet-avro/build/jacoco/test.exec deleted file mode 100644 index a7982d64150e7d2a268319abb8885e7b0bde3b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62734 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Î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 AI{*Lx diff --git a/jfleet-avro/build/libs/jfleet-avro-0.6.4.jar b/jfleet-avro/build/libs/jfleet-avro-0.6.4.jar deleted file mode 100644 index 39288da2bdcbecbf34bea8df46fd7c9efb57fd56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8160 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 - - - - -Test results - AvroWriterTest - - - - - -

-

AvroWriterTest

- -
- - - - - -
-
- - - - - - - -
-
-
13
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
1.069s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestDurationResult
shouldConvertEntityInfoWithBooleanType()0.024spassed
shouldConvertEntityInfoWithNullBoolean()0.035spassed
shouldConvertEntityInfoWithNullNumericTypesToAvro()0.008spassed
shouldConvertEntityInfoWithNullStringType()0.003spassed
shouldConvertEntityInfoWithNumericTypesToAvro()0.013spassed
shouldConvertEntityInfoWithStringTypesToAvro()0.007spassed
shouldConvertEntityWithPrimitives()0.020spassed
shouldConvertEnumTypesToAvro()0.011spassed
shouldConvertNullableEnumTypesToAvro()0.007spassed
shouldCreateSchemaWithNullTypesForObjects()0.013spassed
shouldCreateSchemaWithoutNullTypesForPrimitives()0.921spassed
shouldFillOutputStream()0.002spassed
shouldThrowUnsupportedTypeException()0.005spassed
-
-
-

Standard output

- -
16:53:05.669 [Test worker] DEBUG org.apache.avro.file.CodecFactory - Snappy was not available
-java.lang.NoClassDefFoundError: org/xerial/snappy/Snappy
-	at org.apache.avro.file.SnappyCodec$Option.<clinit>(SnappyCodec.java:35)
-	at org.apache.avro.file.CodecFactory.snappyCodec(CodecFactory.java:69)
-	at org.apache.avro.file.CodecFactory.<clinit>(CodecFactory.java:140)
-	at org.apache.avro.file.DataFileWriter.init(DataFileWriter.java:246)
-	at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:162)
-	at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:145)
-	at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:36)
-	at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:29)
-	at org.jfleet.avro.AvroWriterTest.serializeAndRead(AvroWriterTest.java:331)
-	at org.jfleet.avro.AvroWriterTest.shouldCreateSchemaWithoutNullTypesForPrimitives(AvroWriterTest.java:147)
-	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
-	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
-	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
-	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
-	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
-	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
-	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
-	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
-	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
-	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
-	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
-	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
-	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
-	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
-	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
-	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
-	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
-	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206)
-	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
-	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
-	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
-	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
-	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
-	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
-	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
-	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
-	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
-	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
-	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
-	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
-	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
-	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
-	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
-	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
-	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
-	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
-	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
-	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
-	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
-	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
-	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
-	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
-	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
-	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
-	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
-	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
-	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
-	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
-	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
-	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
-	at jdk.proxy2/jdk.proxy2.$Proxy5.stop(Unknown Source)
-	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
-	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
-	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
-	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
-	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
-	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
-	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
-	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
-	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
-Caused by: java.lang.ClassNotFoundException: org.xerial.snappy.Snappy
-	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
-	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
-	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
-	... 93 common frames omitted
-
-
-
-
- -
- - diff --git a/jfleet-avro/build/reports/tests/test/css/base-style.css b/jfleet-avro/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e..0000000 --- a/jfleet-avro/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/jfleet-avro/build/reports/tests/test/css/style.css b/jfleet-avro/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913..0000000 --- a/jfleet-avro/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/jfleet-avro/build/reports/tests/test/index.html b/jfleet-avro/build/reports/tests/test/index.html deleted file mode 100644 index bf96168..0000000 --- a/jfleet-avro/build/reports/tests/test/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
13
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
1.069s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-org.jfleet.avro -13001.069s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-org.jfleet.avro.AvroWriterTest -13001.069s100%
-
-
- -
- - diff --git a/jfleet-avro/build/reports/tests/test/js/report.js b/jfleet-avro/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a..0000000 --- a/jfleet-avro/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html b/jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html deleted file mode 100644 index 258a66a..0000000 --- a/jfleet-avro/build/reports/tests/test/packages/org.jfleet.avro.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package org.jfleet.avro - - - - - -
-

Package org.jfleet.avro

- -
- - - - - -
-
- - - - - - - -
-
-
13
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
1.069s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-AvroWriterTest -13001.069s100%
-
-
- -
- - diff --git a/jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml b/jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml deleted file mode 100644 index a892773..0000000 --- a/jfleet-avro/build/test-results/test/TEST-org.jfleet.avro.AvroWriterTest.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - (SnappyCodec.java:35) - at org.apache.avro.file.CodecFactory.snappyCodec(CodecFactory.java:69) - at org.apache.avro.file.CodecFactory.(CodecFactory.java:140) - at org.apache.avro.file.DataFileWriter.init(DataFileWriter.java:246) - at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:162) - at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:145) - at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:36) - at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:29) - at org.jfleet.avro.AvroWriterTest.serializeAndRead(AvroWriterTest.java:331) - at org.jfleet.avro.AvroWriterTest.shouldCreateSchemaWithoutNullTypesForPrimitives(AvroWriterTest.java:147) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) - at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) - at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) - at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) - at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) - at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) - at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) - at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) - at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) - at jdk.proxy2/jdk.proxy2.$Proxy5.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: java.lang.ClassNotFoundException: org.xerial.snappy.Snappy - at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) - at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) - at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) - ... 93 common frames omitted -]]> - - diff --git a/jfleet-avro/build/test-results/test/binary/output.bin b/jfleet-avro/build/test-results/test/binary/output.bin deleted file mode 100644 index 24176c9..0000000 --- a/jfleet-avro/build/test-results/test/binary/output.bin +++ /dev/null @@ -1,100 +0,0 @@ -^16:53:05.669 [Test worker] DEBUG org.apache.avro.file.CodecFactory - Snappy was not available -9java.lang.NoClassDefFoundError: org/xerial/snappy/Snappy -J at org.apache.avro.file.SnappyCodec$Option.(SnappyCodec.java:35) -H at org.apache.avro.file.CodecFactory.snappyCodec(CodecFactory.java:69) -F at org.apache.avro.file.CodecFactory.(CodecFactory.java:140) -F at org.apache.avro.file.DataFileWriter.init(DataFileWriter.java:246) -H at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:162) -H at org.apache.avro.file.DataFileWriter.create(DataFileWriter.java:145) -< at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:36) -< at org.jfleet.avro.AvroWriter.writeAll(AvroWriter.java:29) -M at org.jfleet.avro.AvroWriterTest.serializeAndRead(AvroWriterTest.java:331) -l at org.jfleet.avro.AvroWriterTest.shouldCreateSchemaWithoutNullTypesForPrimitives(AvroWriterTest.java:147) -S at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) -e at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) -m at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) -? at java.base/java.lang.reflect.Method.invoke(Method.java:568) -[ at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688) -Z at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) -] at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) -k at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) -f at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) - at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) -e at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) - at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) -n at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) -u at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) -m at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) -\ at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) -[ at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) -~ at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -u at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206) -l at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131) -k at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) -N at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -j at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) -^ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) -? at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) -N at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -j at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) -^ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) -? at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129) -N at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) -s at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127) -j at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) -j at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126) -^ at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32) -v at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) -r at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51) -o at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108) -n at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) -w at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) -} at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) -n at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) -V at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96) -V at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) -h at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) -S at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) -e at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) -m at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) -? at java.base/java.lang.reflect.Method.invoke(Method.java:568) -Y at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) -Y at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) -i at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) -x at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) -7 at jdk.proxy2/jdk.proxy2.$Proxy5.stop(Unknown Source) -W at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193) -n at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) -Y at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) -X at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) -j at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) -] at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) -^ at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -FCaused by: java.lang.ClassNotFoundException: org.xerial.snappy.Snappy -\ at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) -_ at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) -D at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) - ... 93 common frames omitted diff --git a/jfleet-avro/build/test-results/test/binary/output.bin.idx b/jfleet-avro/build/test-results/test/binary/output.bin.idx deleted file mode 100644 index c07501e8bf6bb17aa978e44bbc739a7db260ffa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36 ScmZQ%Vq|1M0UAgDqX7VzE)e4Y diff --git a/jfleet-avro/build/test-results/test/binary/results.bin b/jfleet-avro/build/test-results/test/binary/results.bin deleted file mode 100644 index 2d99083a94aa94c61a85086b8702eb0fb933c0ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1287 zcmbVLKTpCy9Q^?z$R8(T++Es*@1O({2hoHY7MD^EdU)+M*DK2G=Abi+EJS0X(HK9A zAHh%IV9y>%YpAVDllI=d_kQp9n#*LTlnrXbK0%1r^bw=AJ^#^Rm?Nekm*0e60Wz2G zpT)y!=G8T+M|yRJbdK7Fi7dT?x&Mu~JVLawgWM)%#|>}LQdHT?~k6avBW2jm{4 zAhkz`@rKPYA0OC#DpZB!KBWZdwxT8m!fwD`DZ$z_!tPn$BWP62uc&_FyLq1Mk zdKA?0K0`p*k?eI?pGAC%6hs2cK_|h$mgGEz!hMKSWT|%vYS@ts62d_4tYSiO5->M0 zAx9o}Jl^JhUo1skc>r1I>kKwtLcXFKw-CcdXh~`DP?cI^C_PH8NS&9veAFExgZo8J zgI#D`L3w^}RfGL-ussOMkp>GnImb0ro?|lm;dke~P6=P^_7f&c&j diff --git a/jfleet-avro/build/tmp/compileJava/previous-compilation-data.bin b/jfleet-avro/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index c178602ee52db8fcd0c9294a7a6864ed058cd241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19895 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 Sh|kFklN}f|cnI1D_WuF7U8vpw diff --git a/jfleet-avro/build/tmp/compileTestJava/previous-compilation-data.bin b/jfleet-avro/build/tmp/compileTestJava/previous-compilation-data.bin deleted file mode 100644 index b4e264b9d600fada56b0f6703f5859b7f0459712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19854 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 - - - 4.0.0 - - - org.jacoco - org.jacoco.build - 0.8.7 - ../org.jacoco.build - - - org.jacoco.agent - - JaCoCo :: Agent - JaCoCo Agent - - - src - - - - org.apache.maven.plugins - maven-dependency-plugin - - - prepare-package - - copy - - - - - ${project.groupId} - org.jacoco.agent.rt - all - ${project.version} - jacocoagent.jar - - - ${project.build.directory}/classes - false - false - true - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-artifacts - package - - attach-artifact - - - - - ${project.build.directory}/classes/jacocoagent.jar - jar - runtime - - - - - - - - - org.apache.felix - maven-bundle-plugin - - - process-classes - - manifest - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - ${project.build.outputDirectory}/META-INF/MANIFEST.MF - - - - - - diff --git a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html deleted file mode 100644 index 67b9558..0000000 --- a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/about.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - -About - - - -

About This Content

- -

- 2021/05/04 -

- -

License

- -

- All Content in this distribution is made available by Mountainminds GmbH & Co. - KG, Munich. Unless otherwise indicated below, the Content is provided to you - under the terms and conditions of the Eclipse Public License Version 2.0 - ("EPL"). A copy of the EPL is available at - https://www.eclipse.org/legal/epl-2.0/. - For purposes of the EPL, "Program" will mean the Content. -

- -

Third Party Content

- -

- The Content includes items that have been sourced from third parties as set - out below. -

- -

ASM

- -

- ASM 9.1 is subject to the terms and - conditions of the following license: -

- -
-ASM: a very small and fast Java bytecode manipulation framework
-Copyright (c) 2000-2011 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-
- - - - diff --git a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/jacocoagent.jar b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/jacocoagent.jar deleted file mode 100644 index 653955c388913bc1da48628861590a3e9fcba6a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292059 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%0DG$(7sZl>Q>4`CDUtuA}8!@Opmyr5ko7La9LMeh% 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

Pum+I0MHE44{qnHf@)g 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�d4Zz#fPl)=eq>O&S;!eMh(f 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 z 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 z zuD2X*;NVgFi-=bbGd_y9b%XNiA(mq4a*q$!tc;1ZDmRY%>kn=5@UV4?H3iIEX{NK| zRYGXXSP8tO=W7ULBH=WjNP-S#&PBL5Z}dcNmPI0yMdyUC>=MUi9wnYEwj}`&GQC-| z*Pjp16u}nHCl)>U#exvtDJ6SXZB>Y&JrSOT9dQAUyD$x%Ddi{SMi_G;kDRT?mz?&| z_@Et~Kj_Es;n&Wg56XJtEuHzURih8+`amvSPVUv~!i+vS?dx;{^{k`~LVoeQO6mm& z`H)%_<;@;ELTkABuu9L-8&?=0UM`YpOO%szFk^FMllc0~&zeM9=@%YTna z80c|N>{*FpdQZa{(1u~SX5*rb$df-)d1;G6u@@;PiT#3V2~rp%wr)OpwO>| z#&WMb=963>-WI(SX`fJ*UG6S*J;_!Yj3Co_W_yI|*zu(-(@IT1-cRAW*ClDx<)g)A|~xd5FiL2p)~DAD0PG1)U{ zIf2Qp(2pWgn^DTG@SX%_FH0}NjlKXg3;3Z8?}Ww8Ca$4exQ*h2KgHuVZAK&did3pgltT42hGU zHNuhwNAc`fR`{N-o+>2E?ZpU{euj6TBp)BswFF{7)F)jCjyMYHW zZuj9cfI4hOppGO2o1(ty9Z@aWFmjv^ScUVmdiFJ~D_#+IE%(ST)D{$RAD8fMdJGpZ z?Fl{vQ$QnpF1h!(3CZ5-f)lP5;Ef^Al`8`S)Yml$iDNOPWo0vYgSZy?>Y z!mx^Gm#WSzZ(1@nGyeEO5i;@l6KVD5INRJO9nl6yQP8BW1D7j8{eppe1MZqcs2HCl zf4C*@i@E(m7bGkpvI-CAe&i2^F-%ayh`qXgw13Gf4ZGN&#|VbFF1^2fzmf4owY_Rr zpij~7Yx++^ChC=zby>ug+m%=1>J_-Fkinjk%crsf7MLr0Ou*0xh6JC;=^W#ks?dRVvNJXP}NZo5X9&Vip0i(m;~UQnDx2EbYS3^CPXVIgHA?xGy~s=1^`Mk z!fGbReZxU;))B+CfZ47Xp!Qky1AS)T4M8hm&hmuvaM$=B8Eb}tc`-v8HvYDN=xecHI~3ya;9X6AZ(Fe zotY5pMs@1aWer!w95E*3FDyE3&YD)$fP?DL4kKJ=0kgRy#|#VYKqJ^`Vc9FC z+yrIZWi9737B-zunpt=pHOJ9Tpr5|kAhA^-gLoa5`hl)dq6W?*;NrX*xlMGdvoLTuWkdoSb zY!&G|%WdfdntNnqC?rBCl%cUcV{p7 zc~D>u_d(c4>BK}$LTH~XRDyPOfqJ^Vt<5=n)F8HSX+cKAv z42|9jysR6Lxs1R$&_U@qgpC&K&RkX%z-HJgP9OnvxqM8-0_t7|_P7;w#+m#3TqKeh zM%;J}v;0*dspZEg>l+X+9w%H`BG_3n@V5xwVv=-FO&a(pUoM8AB3Mt~!|2Ug@<~OM zx(_40IvsC07=Wy>@Vus<5e^nclbhgZ`qdfErD1TNM%ebC47xJt>ZcjZjambrOR>2! zY6{XYWA8i&mZSamO_d?CiE%i@!>dwcjyfSjhR%syP<1`Q)nbyzj*wn62b>;(~TVxjZWE!;qF*ppf96XlNw2s`|h*#^L`} zbMXP&2uy54s*%AnC%)WcYRrQTI$}!QuK^Kc0$+H*@#;;dnB8#$iYinF2jAG^1U#Bs z;pYk8Z4?IW5nwYb^VQ|jlf;Vf15LidEa{Diq0gjpo3 zjwd+SD>yliZW zo<$Pj=%%F-r+-HY1YC1wC+)ScI4lp5(#5r#W461rYb~CQK+G>=ZNvd@#a*mcEvf(o zfOo(q4FSrj#xL}gSXGlb=3&CpF@qUSsh=6R1{yap!?1P@s5fEDFm?^fG=Za}cjs?K zhgmkkS2HB(*JQx3XZRG1$b`_I=(jK80Ci0j-1&3j;IWAJ`8tvCn8t>lPP4dA;y~l4 zAMO!50eM@<1=~$Y-bH2f4@{5KOk@vqrfXEEamG9`n$>@w$gs^#nO2;vTL*Kdm1I1q zr*`;HGom*Ro6=D;`BZOdPtmbIthtot*)Tz`<-Bg$&>4J8n_NLQrFR>r*7IkST)8x5 z`xvX%*G*YI7j*=Fng0HMGuj`eXodH64tf-i#}I@LAy1D$>EOp9ev&%4qbX|oB;}~C z9`UX?(0?&6^G`OPj%T5@ng3!M0=GQr^EA;4ZfOyw8@Y@eT7oRe+L`geE`@GN^3|Ok zt#c9jk^dZ*_po1K2z(d*WF@ak-K!V!%(FS{R(TwWYDCQ`^`nAA12=)VeXLxl5!N~? ziwP`=L24d;8*HbNSS)wgE3`EG{C0*quiKymR>(UJcIj%aCl6ed*m7>C{6qxt95*LJ zCOanw*i5qatQz&%PU(nJQt_VxYPO=pVD%0Xi}c*!Prj5=J#jeXY2pxxExA7DWB?e^ zaA2o&BnT4a5vT&84IPLWzWLU8vT$-tY0D5`MZud;t{%D#IV2>LN@4}L)m%+c@_oY3 zS3DRoU+tLBcCa@G+Tg59f{DKnh0{-S>wiJs)6)jbA1u|)b>lwWiD{VG1u8tC{~5z( zo7o1ko?P2kbb!{fwGF_Y0dHH_itBCx#^ne5j%cSRRk9X2UGw&S>%cQ42IBjH|{01e>u4l41y_!J2 zYYaWrThH@A+dAc)m6Co-pw}~5%ergCo_^aDa{_+F_8{Ck{E5A3@U3&F%PS(pkxl#> z&Bw%{b(ayEx+l|b#`RAbrB~w5j_7VcRhMvj z7U`ey^Sb3q4?Mxg`2LnZm?TBZ8ltA=BJYpp@7bY*)?^2Z4HJG=fil!EGp(BaoT^sjW0wJdLKq8NXk7a{<|_&{hj4Sj z794BQ(=n5>C6^F6vGHUkIdBTjMW~j|;)56I?G6>gGDTr{)OccBEX?jUI zzBXgiBALChEyFs7Ias2c)yg1-48dB$bFY|S4lDK|LlRpx3ihe2T*1EJpl4~{V<=1f!zr+mNN0NnLrn0;~;<1Z3zx!-|AC>sLD@ zv2zX5w4i7d!qCg_Czo$U6lE{6%SM0A888v;sg|R+LDqGHZp>sjT`rdFUP+9fA>Za# zISzq(Azsn9YcSBn+xX9|fSdFD3KCx-UQ=>)ED2|xW)3bRYjWSfxt%*9Ns8d`0nfP4ky^PkNW50!Ci#XsUVI_^b*V)k39V zR+Z^8*ywHrO5Lj3V0r1?I?x$k)27;FRl|A(W`({{ zGXtlk)_7W7wHCFqe5G=U<+{}w+ij*Z%hznHkFUkvXjct;<#mZ>tI_t4ZAEOSzjB|q zdRp#kpZu(h4~PqpGH~-;I;s!U>mAv`3G^`J;aTYSwlx74d0B*|Tp#utBeYSi|8fso zJh>;-Dy@yria5H;iByg>^y34|HJZQQqO(;#Motw&OeD+MXQxv~sNuVC#teN)x0R`h z6742PerZd-5MkQ@kkMY%L|n;L1WZFJVunYjBlB+b2Iap^@I3})OwQMDWjO@fojf$^ zAVjdaDIe@T6@N`bn3Y2t+vdMJ(^g(CO9&*VkcAr|lzD&c zCWznp16I{4h)%yPt=f{162Rjk>dE8YAr zQ)s4t0}G>OJL`<~k~0UTdK>JkyEGxo(&`@&q7TL@Bx!VY&)DS!b!S~$#~s8^CHQhC z#Fkdx;lK|daE)JK&lgz6nO3@y54ckezJ7rV(C13rAM-B|m6h50iFZ)C7T*x9>RtUJ z7bx4o7jEmDU`IL;Gl@_~RY5!7IH>q*dxW;2+mn~b?%n=dWc8W59KKuz5FwJ+a5e0Ggyl@?Jicm~NgrY~MY7XH^hdie~xpdLDF6}M##r14rRv zJViM4MejUC6A`_8mvTP=E^CrkI5{X=PY02o@53zfQ$~kmbZ)xwyn>m0TI&m_(1-DV zXH58iK~AKoI3uG_sKxp3U!UWH3zxo~c$FtZ?mU%5X*e~&pX*!NijkD!LuRCklsg3! zg5~3DSdpzfaTBDG_({U?E%8Faf7Es^A%?~FIT!q(RowxW zuKyt1&t^`?DSZFt_7Zmb(+F#2|A?mav!7|qbL^IL$cAS~z$J&T-MNV_wrCY6M;!R6 zFeBAf>jWZ?1dDj6;_u;4AYnncVExS&_%&(94N>41svsi|^B2&3@9dDwIPmc(LpvM3 zJ_CM-m_JuoKckx5ztmbkS6DvV=C2EaL+eSWpGocZ1EA^GDSgFMm(Khi4OyHZ@Iqb! z=@qXZ&T;G18GI=gc=86u=E@eq;>BORi~O;{s~@0?U8eb?Plg*3>e`s1P`nuB^*oSrNJYSei3woob7h~7%jM0-T zpVyG?5Zor{Rk+TWZev=*>XqShtA7}40@`}1# zF_vZ}rD({iRWL+=vamO@SfGFk#WTFJ2sm{iwz7K=>dqXLp%;AxL)a}auYd~2R2`KB z01T4UEx&}na*%CZAG_hYso@`%1;hk}*`DGNM=!fX_;X9&iqNI(#M!Yo?Id>rqlkbe z(t+vf#Ub-b($WIvIIu*N4-7z(2}su{%!=R>L{>+mJ2TV|D*btt)b&wQBFd znN;l*JGas)dYaTRdd$+X@T{?_?%8D3^_xqn)#Y_B)%H<9C&v?{ze} z;O}SziY4I(7lXF3Zou>Ip6ds@oL;rK9-mq10g=8WxOV+I^$)22sTM6VnI%yCQNE;L z@gV=gr4@U1eR!(TtgheW)y!Uz)HqREHakW<__+71sd}x&$%~zhv92wZ&8oUwJi&TpzBk*S9mxyR<#{|otfK=? zVvy3DugXeXNe))hz?R~9#1fPwAywdLETbjW^|TR}-B79pJ}#tOO|Uegh$tb6O_WP^ zE-i*8)uB8WlXR2v{IighsGIy)N|Kw%mrU{}Q9=@lbUgX-IQ_9m+iwCkUmNNeOwkdI zG>Ag7#JK*Hq*R!KTiG~F!Ik3)Q*c~DN=$(%Gm$a5Sb-@u(IGjyj3g%!GFhhB7>N`! zS*Fw&iZmlxri3Ia(IR)3A?M}|brF+@U+Jhxlux|4NrX$Q*a@P(2{hUXGUb6HLw+1c z=$12?rq~!UCRe(~r|`*e;v~YF&*Y0pOJH3nK}TqvC_zVR-GoR>W*sSkw!}JPELG`Q zJE11ux@1gsK6yErrtFAEO7+i^l$5H1BOfXHA4fvcDoPFE9AbUiGUpuc4vD|oGL1P6})mNdUcQN5ZJ@{Fyw^+MBc2N~o)!`P zq)Wg@JpO*8pCc3bC{8^kOXQ)E&W1mRQ*cr(n2C-%Z8V3e14>e(@#GWEmpvifyOU|B zFr4K-kwt)w{QL)8uhM@%48;ooFdy-MS+4(om?=AB7i*LMg_+7pw)yXzjL{$V0$7?! z;nrrAG}TCXLQtWKl0Wqj$(AfAP$6g*6_cj2X|}G1H)O8ftMm83XRj+~R=8%_34Lpr zKBv(9$%mX>lR<ysV5KOLupeqUdkw*Yj4=ok)LLZ(WKxZC6Apo7oMwRwy- zyY@EIp6+iG%LV%l^U)`$%uaGW)|k|#X790C{s?DVOH`U83s*v>zDA34UmyoS6TLX# z>*55pDKdZwsNty8Kt&zsNx0}7oCX`EemeP-Dc4$v=@KS-C@XD5!htk|p=<|laWZj4 zvLT~6NSX1`MWEqD8EGK&tk5AiKDMfn;^wguY70;YLqV&m+%+yQDJ zGdCZ!Z?zWarIV#8>=YT>NHc_zm^!W9jul7kJqfo3$xkeYDxQt1RG6;1`UELe;?Xa- zT#@C6Omz8a{dJJeN{zXfuVCCglyg_y`~0AtieYu}c2GW7S!f*F6xjqGUr5R@5HLTd z6H^?mr&g`Er169nUkL^Lx&I=YY!eD;`5KhjmBExI_x%6LV)3 z^M=1Cd~zC&_AkP#GJyV=a4x;9HmLz&r&G2YF`Lfo@vh`<-womz({_021+Qn13zgY# zXfO`qitdKdCM8&U-(__(C9CCu>E?lB-cwbyED(mp(Hgk&uS&= zB>No;S3+8Lbul8l$dpNk;BT6`LT8KInAt9Ao@O3O+Pv@{-$Q26YSc`=P`M`dLEoPe z2h7fgS2VerpWs5~EG!OS5Y<5BKaOY}CUVeRSJqZgK2bqcs!~!F38})VGaO!-U12Dp zGNYQHnvz!OuA`z`d+^CzUNviP>wPK{DUU; zVsv$!N3}(;tN}w5Mq_J``<-f!{ZbzeZtQTyYoP4aP$%Bd#0rLo({F^>O(eeixia%u zhw+76^H-3v%2Bu)`}qH0#MaZ_R|{UZYPgtnGOXY6p7Fx?4WCp>JYA14rJYICe3sYV{+K zLN9SgP5exjeeRH|acAJ(GwR7x5BV5-;p5rw5;FJURL!zO_nO;KIpTW|F+~${Dfi!$ z_)(X0oE@2PBToE>)oVH47jc0f(at!1 zC26Zfq1dw=0b!UL5u_le*)8(VFa7}>!bJ0|km(mUF97*})h6!$7Xt4;wdsH2AWBrN z?3LY6f4-XP5a^7NJLd$#YfvQEf{U|^B|Vf0K(S#^BqfC!XxY2k_6JUO>b=-QHdYEP zXqQz#>X$}2CcrCS;bV?1;2?xXZ{-M_ink=4n_dgr=c z5INQ5*Q4Vg7ENmf2^M&!(h1v6#D0B@fnb@6ZM{$DHG!s~%gMxefNt9~0u7r7ujBaq zvuqb7@D&WzJ)3I}_V=%oq5up-yKiTgeq0&|Rtwt|igfL5#%d}`4zfwxS@Qc=BRa&A zscJ^bGAgSR%IgrbD@u3RdXfjcKxi(Z1bqA1j6SO)_ou&;^&s zydh!i5Yf^e7j%m{NeR1V`QidB8k&_wj=&30W`;nOK(PwB%xVGbHCn2E1DoHy)7eL_iipIQ0a%y zO?_4u>h4)1zT|C7G?)E*xjh~d1JBzr#0#UX`WD`tiE_8}wXC3aX`0kPHckcqMcO+C zXBI^Z+Og5GZQHhO+crA3Z9AQ$W7}58PTttb8+6doV99F5h(`iC=yZY!ib4OvsaLeJNHkqJ zvAR4f{lpSXWMxL~U2o^*AwKgdPX3Xan%M~Za^0TP(#83qH~mxv+Z|&Zgr6;uq8; zjT|2_B>Pv-6lB|9+EHs>Fn(q%(nS%EJ=D3IJ;-^Bb@@ZBRpweXQ1<#l*)3I_A*@yk zMYf4CnG7RvYL3=bXH~@rXt3yEycw#$&ff=09=C7AvaIHtIrtoSMx7G=9_9|rCK%Q1 z&@UW!1{rsug7Z!w6u_l$9I_OaY04Fq(Ia+>Pis?+p|-&*r@rPoRH#_gvq^TMSUQLA z==&h`G#DtrLC|bmp?M>J3;3?zUblzrM%jq*=K`~2z^vM=9Qs_@{0Nuc%JSK`|sNRdIOmez}(#-r2<5uDi}VdTrzSY2td0@_W4WXc6b?JMUx|r|HVY z+ne-gk#HARC#NSlK)cR~m#JK~Q!v|GKV2`Yd3)yl*wQjR_jT{s@`PzE_1HHv^9_C4 zKj&C**tO82(@JO6jsBT_`h$7;W8zDtu819L@~7oa0o=5rv^y0e)$8~~Lt^UD=?RIC z%CTTPDp=|%+hZz>R5sa9A40*+BHa!Xqw#Wk_LTT?)2cI`-{;b!tht96nHAnER=i`M zy`(6LGGS^OVGOkMR8c^F6v0GCzZAMtA48y$2?SG^S8=X?cP967Ee>L1BJPzc@1*03 zvf${m2gY?!Q?zYYhcB=M&d$aR`%2JI>bgS@5-g{b-u$stT6~@imq*lsS>3RM{$#q@ zlrxg$7TGLdH*PMy*TyfY#)Q06|0W5Zn}N(Lo6T&F(9QC=Q{zy(%5RUtUyH)-xFl85 zf})|UNszvFsl-zQqv+%et3$JYBLB{U^@@)E&hCBX)r0i{@93=EySPsvmY|NNC^OGL zY`5u`*8^#d>WCK)^1WLeY5vEEPZw!WO(;=Tyd#MXb>^@%-#*nj;|&^|~DDvoT$ zGFjZip_K4g$C6+XsalH1v3*5{(>TrJNoo+ux+XWC8m9diG|!tN_^Sop;;f8TQo*eq zk*SCUTE~ly0@H);&A|N%x8Fg928GNEjYd7+qw>C3vft70N0fMC3tg<<^Nd1_8ZP@s zpzr8*_l*vhUJwOi_gr23hq>;4`auU8mkHgU7Xon&(OBMf=!cBNQ3EmPfLse9{jset zk=DaPEB5tEYBfozi)`CJLbMIXp_f-tW+;-!J`w-JY4BViW1N8o0VzcJubhVe7KuyA z+04n@!tFmxMmuDC1))n|j@4irdzy#{i*!El&%r=(qClqaW*6jVWZ$@SS%EBd&>wbn z%pBa%TMhHVk^_$un(yIj+#uc@x-bJ_cHUUMv0 zuL&@!$@mN|I7v6y`PliGH4s?Q?e!_z-PWtog0?mAPk-8Q)7w0mx4XgBU%C2yb7Q1J zAWvJn5|(aY*Ol|uWh*c{cb~p;qrYcJ&=1fUCm&5!7#UpkX8wJ)%N?je{FHf(P8ahmC zjs*|d(KH>I-0+fYR(`hpBEQ-(D6ad6ZtUJPJ-S-hbY-d6E<_#Miux@Xt~X!Ib4;Uo zMIf-TK&)$a%}u8L&6m)o=QHZwPqn#KHcd}Ydd_4+)|FB2#+6X+#zj!>256nJy$6=D zy(5~jy~U!-kwND@++@KhbG0E>&pjqxP8+T&H7BbAcVb5`6{CqWEL@DD8~-4dU{ ztU?w_WiStXr^5TgEy0=*ebCsyNuvimS9p zhudc7qq#9cS}eRVS)7Q!)>;X_fl*%HM+;+GhD}Hw(7Uo zt4(XCCtUkt2sJL;(u|0K7PK>aBp#%N1|)tVGt5`5%PMq|1wHx|4k zLVNcT#S_TX;~1$y-KhhU2^mgxFzagbc~50xOpkyt|86eK7)CRg#Bv2M9oaxM0AoU{ z+m=P_T09X(N&rWOPEafzK7<&4?5ns?<|&#CE5VB{Nt}{V{|gE_E4D#6mTU+u=p3dI zJw-As>)2c>Oq+O8J&d9V&jbft%NdS5)A(5Uo}FHT+u#7mTHUJti~jgdh=p8{4>mDK zyHH+21UkABfox9zBl`w5RPVR2o@5U68@q06a78E=+S&24Yf(4N9)m}cp~!1+o$7ba za^<`5vvNS+$lf+i8qt~I6!POYgzhmrt*~vX?2TIJPtEtkF@@|dbd062$-iRz{Zr@L z5cK;?e7r?@tLO18{Wym9MLdT7XCJUfzvhY5Utd4}_pqn5;B;K4P>HS&eE_oMK&&H4 zYV$;;CrWB_&5orvL#-@vY=0z{#-*yBsdz-#NY-Wg1o@KH_g6ff&OEEwy=%ty1(a?5 zEU6EqoZ|XK3L2+~<$KsHeP<&BJ&y?;1D}uyo}6Mw3I&%Z#`9RSABSAs6>f%KpP}4n z<$cdwUFj`B4qm4q2;n~7*&*`nHa5s!XS5-=S%L6B%T>-ms`iGtI~jMnOT~n}6T5`H zn^Wg^q)kmW4EXDR@jEz>@0hnSU;)iuQlS0UKgEOCZZHy^$NU2Zuy2k(sR7UTAhs9o z{E?5L*cFEc1#6MSv6Ni@m=nO~2VVCX8+*`iD-s7#j_|Eqs(y?TmLtL?rp1_(E}ON8 zNW5@6D5D695Cw)QEka@JtF4QXZYHEeCOX3L#}5E?6oLu3!G}@{UT_-tcMHRxUkeZO zLgo>nLz{C#<_|}YSd<#`xi8J6xWkRG0|a|#IPU{)7*FzSDT<`){1yq-Rg=BjNBe#X^UtJGP+9Fx zEFl1^uWG`UD+muV5i}8F8-kF^o8Oyh5N!YrQVHy~_6)0H{_U*YS>vC>I~%U2Gi#mN z3i{nhAK=53UjsNUOoY`V^nwfU@Q0n@B%t-Lhn96=^#7=69f_2i#E_D1S=SEkN}VdU|&bi z1NDNN3#r8>B03ypnS-4Ry~gHaVT2I`)sJh$(?c!*pmxxE!+KW%EC6Vbg%E-|KpKD= zq}D(s>fkgmbZ|XL} z)sfZVjgWcJLcE&i9_`-K@rzz!&D-!sU#6IqZcQLBa5RJo)CjlcxkJd8woWhfvJK#C@jIc$)I*=3<}gQ_U~TN8gOSs5ZG7xHV!dMr8?Qar z^w87IzQ8GZ_MtY!34D+71qqlRatpS{@InaeZM^*y9DEKX`teTuLNbUPN`&%G{lYSs z7+Uz_o&1GnaBEO${OOLM(f>VrUGUT1o+yy9Em4SQYusz>=?=^E?WOKpZThXIX-n+K z|5krnYeDqG1tZg8@12DmV z!oAdl^h14i0i1&RXdFWn*i(4Tz(qM$(P7byS{{3q;7Wk?{@XD7fYD3Inw z3t$BQiTKhU5(xb%47?o-{PF&cxrg||dB++Ig#1zf?hStZcvk}ULww=A6AcoDJd6K6 z4=lAFBpZMoBpWP+NQ9z-9FDfxA7RhS!c>(1zlghfKtaG{NM+D7Mh}tp3nSuQdHC(( zi(xC!0C%qjvrq2u=gOkjKK>eX%o}ttGNvEQi}GM(a3y>JsGvR&1waN#1X)1SfwTR6 zL4TXFgMeQSXb;36bQ^qtn1?1}@CNlR2AB7q{Kx~VgvGHSn2BNCN|CoTe2bpM~?UfH+74ge#h2CxMA92D-f z$gR{0RKPv0!t9edS-QCfCXzG8{ zCs64l>T%=f@?+>%iN!)NVu9Qd`j^k%Zg_wHCyY|X0K+l-n-!Bu@LxIl691jkK~)Pg zCs%VZCkJOI$8V<0{}IBd{a>hW#&3K&`Vf?=hfVnlU70ZTAFvS9qN*z zVbk@U4SU|d664TD?tV+>X76a5IC#9*^8OElLQ{8n-CJRxW67qhZqHXcZhg0WLN_0m zx0Umt`a=%E6617MUb7`??oF0Dn*pm2%^BBn^PF@>iUtMQS$Vm$IV-(aIrO}SHX9pm z1i9~=wbjRbh6tj>jdr_i%@|9JR`pJ|Qzb-V;se}*rg{00q!o6sQ5eBWUGqVAl5fGnDb98G@Q8a=5)CPO5SJ;MV+*|j0&jQnoOe?=-WmH?C zIr7Aa(%&--YCG!=Uz^y)%keKpF4MZtyA~N?usqc7X+8pWI?BjF93ic86iQTa5|^(#N~aJh-G%@RU&xA7Y5j8X2()=f5( zW@l;M=2n2yt?l}SlFJZq!lKdT23C!^3ZKD^2_#fvAb_qVuaTH{)e!xsLK%!rw^^qg zagZRadcO5CmJZGF>724OGRP$#X!ZFue@T0vx5lA*jW(V09z(@?gqGzCn+zr(BIlRV zVQ{E8U#3)aFOh}YqNHr>UkK-(&Cqk68C*J&R@Y+?b4Y2#<)B@vXT3p#V(v89bZqP3 zr00uQVOwD69Ajy*^hh6o%+=~qd4h4wQA1ja1ru~buKV_i9Tb@F=bx-la8}_Fx{G;! zV|%z0NAk4rARWG4qM^3shW^gTIVlV2c&0&Y??Fus6&q=+6vZk!-<|D$7E$oqZ1T_B zr8e_pFmD~UZ*>B!n2?^-*dL>+Lj|$G)`W+7V|#(&&RYMxwMg8StpPqn{q6A=q9Y)l z&CihYxI1hu*3v|ltwrt`EtYs0bf37=AdKG!ydP^-VeO3(OcSQpV!_oFPu<0yZ6^a* zp+)qk!}LwGbVULWe3nFO2*hd66*39M*tz02qG+KJZ(Q}U1fo( za(P_OKao4&xTy;9GJZjMB{HV4)3Rg)QAuMI_ntSh!l{5r7GBOD4uIiO`90JnFLszc zx{7n+rpdG+DH9G=^}$4qLbVuy5_-$TMK9dvq+Vgct8|$4ZjBVg--5g&Z)E$Q;`~BH zSw-ThTq5~h#kLCIM5L!fo6k@axI(zvLJ05hpkK02q2N1b4xWc>$2*_M|8cCKse#b- z1`YxO{$Iu-#Q%S+HvfB2Vnu69O+y3!6B8fVc{`{CfSB9^CdE%%LQPC!OE`>2jj7qh zV{g1=;QCkAh)me*^-F=55m>& zvB+;)-R1q8fB)@s?Uq;I?kD~LW)FSCRtuD=)pA%iv)M(Ew+T@;m0`I`+ACJs*+{dm-uwq{d%~NPKjqH~Cvaw#|Y*AJKy$ah*pv-eNM> zgd7(c(9&e6#|LXu&EkSL+g9C7Nq`dnsE*O{qS21QKnYW>GZst(J1Po6fgDVYl&u!N zE(OG=)#5(EcK3@Ewb()-xIor4Qieb`Xo`@;l zHj;r!>c532-TA?i<9ulxj5-jcs|N~lzRcJlmJJBRyLT-Yei@UZRf zP|z!+m-M*Zieva`K$(u_))ayAk*x6fRA3;+WM4@69Ye80FrymKxEc?%1i&2?VtBAO%1QRM;YgC z6Rp)wT~$LxFnK{QB5*$0j&Jc{qx~DSMs}F zY7{hy`z|znR2}6|PPq??3?@q4at8e16|NZMg(3c5hh9*8r4 z47wxbWH9WEpEhV$f+#b?2!w#m^ zysTAE<|w#;YRNk3XtXNDu*7*hn3l6u;kQOMtFs*518b!j8)D@`9m21FQY(=^sVAmv zwVks$Bj}^yu!eZ;?E6crxo6x!raN0X)u6h3+NoY88ZW}K^{y&4C4em7a#Pm&?QdDc zEI+uIpA=S+cpsEDU2?lyCB5eqz7Lz1tf5Z6YqA#O)0ArcQSuaPVSl;y*y)(Y>aH;3 zN#pNY8l6uT%~f%!#%jtg7lcd6#$rm{OZDo^a7txuGy_am!BQgLle)Y9katkpp)-me z2!kgR3U)z?e~rmo>+n}QC%gbJ2Eej8@lch6Xk3Q51Djo^q654g$&-^rKJ-0Kz;s{r zeJ*uv)hkR*$$Jfvl-V=&h0`m;tfSmRExq4xUSI~fPT2vyO@m4_J7+`M3$4MHU>_}X ztg~(Rf~cI|Wzh;1{neNnZdWu#!X*ZtolZ->7u!L9WBY8iSO*MwZ=z!NX=$j9I6q zP|s^Py^YhiM(VE0)U$HPt?2Dp8WbvKE+3vBv4)T4s2T250#DT&y@r#*zSl&&-6DFQ zI^BQ9t@xL_@Gq-Ridbgzl7Is0GX&<;9GUAowlB|PC_UkxIlhz1j*}VUu1VJ}1=Vda z&aG1PuhG!dSW39%scKMpDBFtpTG%l_4q zHKZ4g5JvjUW9+zs6YEa)OBL5ll29NZOz8iWm(20s*|*eu988`57qdM*ZOe5_9X;ZU zpb%ARw$la)QZzUTM)j}oW*K6648xYJ`Sf}d$?;Gr_Yk$2TpT^t6b2BR9~5hwITShq zo-oJ?Fe8A#G|)i4HRb54cGdX&@2UT3^Gi@#==1FZ8N~5G0BZ8D?qb!3dv2Y18~u1D zzflvx-aUTvPDii*^H}W;!Q_=^*+uGHKQqC%AeFN2JbU~5hQ9LskVv9Z6x z=2_Ec<<%saagvg$H7gM$r#M--rO|2#nPeQ5-zSD8M3rPzCO zaBP|pYPK<#|B4;^P2u&h@xMbO$^kR9866|%@n8lDNEt_0`H!7R(mTm+R@6Ao+v)OjJB+SPSmY_b z(`F<=^m-{%;SO`(L5$lR$Rt1>$l)uYD7o>A@lW63-|>&bk7V)~lJ^bWq56LdB!PI9ABT`8#(BH9p2f-bi<6?KVL~jS0L^>`! zyHbk!ijOKkuu}c;{Rk2QGe7IYO9M)pKeFfUuy_lNY`y|Z1wQhh&XINB3b{+-M7d9S zk&43!SH;%o9;*Kqd@XScK2r<0QU_51zyA~PF7`A78?kovZ^L2tt;Bfiv*Aw@=X@};hLhh) zB$G+~cXiO2rli;jSo_i6Dp|7{G=1L<;o5NH?1WN{&(Mh`VjM%blcj!JoC#BRH9~o84`{)D-Q!Uo= zH45X+dkK*Qe98uy%K=&)4k+BN0y{Gt{4wq~F$)tFJsTN9NL^2OY?oRm;n&*`}gvRfo{Jmy?_6COarh3NGpvutvo- zmc|V&S{f(g>!p?v9G4x#i_Y-ksX#)1z&=iZ+;omL0Wm{s#)n5(NgJx6$oFDfo7P>MI5$$3k7cuNFP5xJy9 z5v?*41nk_TUq5}($QJoM-vis3`3JLyHPyGEIKx$NHUwqxh7?66UQ}knZ3P? z8%^5rS|PX{!W?kEz_y^E+*5Z^AuY#_9$m1zyj=9_@<}jkK}u-2taSk>s%nc?&stMm zMYDwZ1e;7h-iA_cM5@lV>{9c)PEwRcHxP!vKcU{I96 zm1G_s7r#^t&Rb1*K$t*Pt*1$oleh>+>A9j;Yk`PFu1gHzUj@$`n&$f68yny?LAT$qY^ zN9(?|5Bs*X=_C^q^%@BbmGAiiwyI}-S*aLKjWKyc;ji{|n6L;Z z(L(Xtdi(e$Rz({}q~y!QStH)6o}MDDlbT`ltSR%#WFb_%W>GtNtvsBBWywqTEXO91 zx~=wXY@;7GRrT>fJ*uG70C`FmOi`h&OZ;iY=w`FGa9HCH+9HFo)A_8c_4e=Hnp2B>fX_}X2<)@J%3n9;)?qd-n-1r&p z{`pad$dR|GzqKj-$?Bot;cbzonvTbKKQ!u$F#2>+k#0xj0e@un6SqcvnWUcBaCI2! z0_3> zg@G{K+h3+6sib5WsUu&fI}{-wQ-`awDk9FC>Y-*ZKLH+zNKpRX;#t+@nUJYtp9?)} z^8Sb7P4IoU7)pgV)0HWB2Xe6zH6te)s)@j;4m|hBcg2Q9bS*=$YGO1KHd}|hH0~(# zbtaUM5rv|y&<>o(Dn|!OqZnPL>Nkk%lp>ki2MTp@?9{!`?IjG7is`f^SX7TQGuyu^ zY;=k@;;}lfGHkNEFE1Z^WJhi8OA zoPYt4DX|gqAI7x3P{e^@T-ZVH(M?7Q)VPcL3=t}jK+ar$yR;MH9ZfC{RkA#6nUl48 zc&ZUNxz@ZtyH>A(!h>;UrtQWjC5Euys4tzDEd8F0+P5RZT1uVX{UrPPH=E*vN`%$o z`g57U{XdcnT<_`R_^|aPePbW&Q%1vF^0!XrNy)&ANz14tWDQN}eH(R?YOSpTHg`@Z zsz}X<>dR97PFBRrIXN%2LybbV-!Xc*iIg2y{2Y(#0yKX%lY*jOw}C`Wwz#d#%YS5f z_L)z^h-m1=B)x*9A;p#E#@`<`EkkXr zCxE4!5Tp&1b;70@RJAl$*DA5hTVkP3MJR|;_FFE)aq7AwZ&u8oPsdN7P#b5(w>mj; z<%n^sOh5y;1W1-!6ZvvdY^(0*_osxkCsbxB{i5XP(tzfVPEeD7s(2!Y&hZGxQ!4+V zfQCA?(wO&}o4__9RAo1J0h9iRJGHVfp?M}eYi5q+O_A#@ONZbz+h5(JVzqsul>u2} zsT+QMwUVs72}4S&!{b(G5zn{*Zr-?0me4mYCt6>Mvr01m|Z`=d~dC`?Bvi z$-^gM$*ZWJ^~oxP8?pf?4l(0lEB3dD9VakqKA^W1Jt=EtH)F;RM6HS!Y~ zoXS0(R;M0FVQ-klvye)&Co~bJp&5*$@|@DL5nH)uk`1+#X$Uj%zwp0P=uJ?hRbTVe z3vMef%~0rkENnan24jV-?vB+J!Z2e2Fz7?$$sZ^a#u1n-YL9ChRUt%19HT|x&hiZ5 zeqr5Zq`0MV$+9y(O?LS*)VUJWk6wDuu3Z9Y{KjhWJbEOD?0RIzja*nR#`N5KrtBRS zTzWTb#jriq*!+*lANh|9tursyfG(D90?)LnF;Z7O29e%^n|4cBxVrOM9 zkgX;e6XW~k1%(m!0uuWoBKvB4D>oi#E)$6?_v9P;RfI&e&qGLo#g$xelt^NcH%Jr5 zPc%G^bN^AGolT09XTthIjvO#$J~>is<{Ku~O%23(2d_WbDBUy3;OC#`?-^*_gzrgg zP0)B|6#$vsuAy}6flXBYTzcZ~a(=_@o7?_GDGpS1Q_FayvOHDjY~15ZRj&YYGMx|* zFbz+4{w=uANv7ZpFvk6i|n=zeOL{zA~5n=h- z3nwewKb?8Qf{9I3RPS{iZ+)Sdzt;jogxv~V((t@B@_=BLW=t`!O53bK4POTjGM2dg zG_ZBr(g714T$mEWoqF!+3v?H1)ab^1y0Fz$Q=nto*rLX}7}$IoIxoJ!7!lGyr<=`q zjZqu36P&#EZ}~()PF;Zev%d!fZ={F7pmC-WZHVM4S_%qFJ@0^-Clm>X;fek^v|7M4 z#3F@F0XdGxVQS;!)f|0`LG{G->w0pz!rGu?!?&i-LNK}^cZ-6y#zK}Fmo=78$7Be^ z=NAL(a(0($MXtMr;C%9%aYFK2nk&o9_b zKhJ2D7Dq*~%tmAkT}r6M{*djjV7OGgNMFo(GjOx+Qb%*i9>%Mb!3#Q;K+gV746|y# zXDR##M{Z`R=JCtKHG&RC`1?+S)rP}HCuMCCVW@ zTLPhCT=fZ@qb*#rpzOUelSd5{J>4O7w(BR#>PgLZA;k9A%q_IUaP+||hvJn%b4_rz z#Wy=~ssWhVpzWgY_9T1`q3y=dejx2?D{jz!&|X8x&RAUlNBLkr<;b7R1UIAn>*3)0 z0W*<1+F(DO*;~hj5ypqWwULkyh^#OC>Q`w1cU5Ht-5cvAF3qI=|?GWB?$*#xOBlpVNgV14I;QT3gTIvZfX- zIXecsxXaDys+>%%&s4Z>Sxz7*7tW84wL!PFi6QOXQD5lj>fkJ|@*%eq2}(2edcbch zAPc06SiN^PQ=YM!g~^RYT|aISwC46Zu-VA+O3l%`?do=NiR)%#^x zZSNc1{Di%Yu^hkrw<@xIK=^M5vH<6!XlbJF{z1`hzzadnTJJjWg%Xzr4?*DY=7A5; zPT>6Ii`+)kSIrhwSNa1E=!JUpT$UH8?Dt7kbrC2{@I}h@$rTs*H9&t+h#YAGOB$vu zOvYI%K+!zN4YB?m8^*z<0 zAuZ*WHY8uoVITlr?j9;nSs>lzx<+L)O_93(69#i3S?pPS#w702p`FNzp}mWFgys58 zsS0rjWVGYH#1MM>pfcqsb)nEz$E0F9_+r!>--&7D0{79*~jM$S^ip{6L#PvABCe8MnS{DHwgQK7KN3Er{!3(SFoBiV8( zNC994>Y-Rmi}>!d2uC-;;CWj}uBdOrj^2%_iR=N8R6%G;P)v$x-@e;0eM&YeY>_<+ zCSduW>LMhPoW8M-DxpyuROYY2E95j=WQv4BE43^-4gH>pU4^K=pdUj4bXn}Z{OfTEL-jnf3Dn%+|gJl04z>;>;&7dV`3cNsS=0w z*2SGQe=s9-dN95k ze5-p~vMy1gF40|%@|nlaBxRUZ*BDNqyMWrCrmFK|8Va)oNA+aNMF2FMr)~$Ru{%|ii?^47(lxPw;5AA3l2Ol7_sUbis`d80qG$)u zCzZ1J>B}$Kr2hoS#k?D3*I>^}vM$eqTa-GVzt4HhS|-JC1tB|y1*8dlc%vbVn>SV8 zn*YcVDZaS{B5vGSr>s9OyACp=w&T428^l3(U6S?;$dWRNB5-4#DQn218D99Ckyc;H z{DCO*iuHKp!y^hDH|8{+z2Uq1Mb6y66z~rPO&EJyE_zuwWTXQtVI0~X#UyKVh=OkhgI>2!pdDI&DPF6sgob=ZW3{;1A$MFW30nFU|L z!1=-QPj-K<8Fz#c%@#uGS$va@1Pi_p$^5B9>FIKTbg-LN0h7j#V#0olfo14Fo9)M0 z=BP1+!qNQ71t-prlg0XwfLPOxFeBYIocptKi~Dl6b1%$~>a%wKh|?=m_by~SOfO?I zO3u-Sa^{E{(~dUqdH<2c#Sdli6#tx_cbth4p`=V9IbC0*m^&YCSfik5h%?IrIc6fG z2wgBw6uFit=4%{wIs_PsD9zgUptEeO&*l0Pqu$JfsQ4!^>I zy+|NU0E7_=_B)bL@a>)23s&$D(Vg3of;iSEq#6+ID%8jn^Ap1jNH;TDf2aKp6$#jL z#tw)Dy}0br~qzQo`7=LL75^3ZVyUCWTKJ@fCr9Y9rY|(uGQ&1lpjsF#3+Hc z1!*n244rYG#lrnPN&L~&bR@egC6i+brqz>GV@7Mk%A6FF{d#8mz=;G@@f;Zt77A8D;GFu)izVzIa|dlfLM zC>3VKxCmF2FrKjE)96&=Y;5=yQ~cj$cIt7NLphF&^QfyFsxZ`g{i;J&&?o4ym zRBCcc_EhQ>?8d)zQ(C2_%1O-T@kZ{fnFE1I`hbluv%8RnIvJbaB}Ygdu6)i~q{X^; zB<&It3Ss1z?-J>x>>?=lP}^cp2RGy`ISwsXb!5A7b#OQfj_*CeY_MmJ2Ohk}Rr(rd0zoj>0|EWxSUWp8ci&%)D6$`iCen(Qn2wd8R*2 zs%{GAANuKUhj!eyiQ=pyIy!Nb2Ew%)b&aQdnbG?YiBQt2a&HD^(T_d+=HH_$10{4| zaN*v7i4qDC>jCY0L8IAMm_Tt7sq%(a#Jn9+zaz|}6bynqm{(>JY@#_}l|#s!l#Xs{ zm4WhtepiJX0exrUt&nYkfyt#sc~?@EMX5<6eHY9ZCr#g9ij8@dQZ&!%mO9V_cw8T=&R+E<{ zQ8>a(m3?pyi3m3nw74IaPr^tE<7TpPy zz7Yyh!jC9M3KNYCLc_<6bLlXy9(G{srnL*#ppEUIF1k*$tW=9J-*5%94oSB)fScew~ zM&QbAry75NP(Sis?^)V1CT*SQ*>U)B)aT!s#{t)AV}h56xaEDdKGqxyt=75`@WR!3 za}CIhC{+9*Wt#g8dprW1kKH^T3;H|YJO(uT`zu!~>)p{5{>6T%kfKO*qZ1nS&TdI&@~a70N^mnEM9svC|WMg7TBC;lrMn4Det=pq|vaPkt; z@<&`8CcfzxsVHhJgpI~UC%ouWX6D&oHxuj+GL(rkNs!&?d(@5h%fZ4k zy+hZ{`zq%<(*tClN-JqQLkjrKRTufB4wk(wSf;A!!M0oH|E!}WCZ~s=N8>a#QQsJ9 z^HZz!7AOBCs45XI@DqDZ5v}kWX8?F?!{H<_BwcqPj`6e&x{rIh)(|kSxj=WWDq1^l z+t875>ZWX1m%qnr+V5Gf=;Pf5n%kcS-p6I4T>fS?WoT89a8PB%&7(U6ho7X#1k6ip zG!Hsc{EM35Pmm&6aRGtiA#8TxT0d}X7~L_pL$+)<-VS9rC8U3KN5$GmQCbxIq|4Sa zr+kR9N(5khX{L`NPf}Y@ls^7Lq5hCkMSW-aUGfN5o7Qa4oyiu}i;qpn1nqiwEDZHb z{d=*T(0i0tS||=yUNzz*+lRH7(Af`+alG=+_#IC6%xM~ae~{{UCiCtcM&8NGCKTw< zD(X-M=@6|&C&0djkbAfqdM@;Vf&Yx9(V(a45sQdLgD^rKcN?6a8WAA+xh=eEG9zy@d3@}T$uqF;U`E~l>**wD6gbO_#*B5mZsSdH;B*9H+r{}tbr!1 z5jB)&jB&6GXEd~OlQJ7bkGvsOlGXb=k{rS@$-1f)cm?@f5Xwgi^SUSFbm^>fVb+ySO-v-UWz*~%P&O;cXFaz+KdnD zJ7ClQxi@Ll1etC*gh@mUKGsEHw;gTJ#Y4hc_={Q#!D&vYNh*5wVNi1OI$a5+f+X&YM<_hP?B|7tbQDsGC6b=x)E;kF{Xz$nAN6 z=2(1f$YQgl^?lol zhMKk4CZxr%y@Nja%1_knMlJw7lHr6mn#V(_ET_Xb?1BU98|&NOn(i`eg>Os;V@Czu zHnvsWcGOoF5H@0jy}3b_u|~X@EuwAKu#{W@>UiJSU}GIR>2M(hlIjWCOq?G(Gr1Vf zQAET+!-F8b2x$gX*aO?>wbZC2Zh~F0^CVex-}St08U9ycHA%|YXK1e5g_|ds^|NC2r-h}PtW@4k*)4x!k0gmv z*V5+@Z_t&3W96UyV_6~OYV?aGx!A=A*V31kYQ0rzi;lFsE@@O!$;y3Z-rBPn1b2<6v)-!>aUE-l&Xx%Ci5PYox!IYWE9!e)1(RM8c(G)+$+8w;Xh=@HX zNI_!?VPa11>@O6!dH*6yQ%C@!*!qTy`8kJmDWtSys=nFz&J2$=_~OiT;POd^TDH5b##)d(wKs?IH|5@}Rh)|r`_o5TkQbC;P&XD43Tf{w)k z4sCh)?dKHWp1=+k8Li69Wyd-R$}KG_E)qkds?*Av7M05dS_aY0*O{4?L@a`Rk}J*C z(#g;WuaHO0O)IP`t*fp}H`V3Vl{VG3=C(H0h+s@oIZf2bXi?9$N9>#~Dyq%PtJdZB z2L|B}WuBXynie1um@|^;MklREhV*yh!$tb#Xpl3?5%qB7-X1#SB;9-zBLSvq5%qMc z3^`)<4!&$02;~^(mytwmD?^7E4aD?pOlcTfxbhO4=c1Gw z4))9&ASY5Z@gA44L|l2KZBnqAjMsKPSA3;fMf{EfJHdZ<^J zcn3kE4VxgkHBc8B4w09bL`I%CW5T{Z^L_jc8Ee;0C{Th~u(%Ulpu9E{4oM-Vw_9lu zcskSVL|i964fgXkPnT!{6|1<2`z?t$MdG*^0W(_cG6{k`gs&!zjc9tGlt3SVTRGrZh5F-)=~zLPr+u!{Jg6I^2Z=cdjfdqqNJ`gm44`Hs_%fO}^pNN7 z$oc8R(}}@pziQVxj{3~kADkr9A5W24d|{Hhw=Jr(nXMKU4D^B^6FyyKr=JE&TO6WT zB5v;UQBmWfl{@;L@MtLM9(wZWguyN9(oodSgz{-+C0(uSQQo~nh7n(Zlal6yQSg$r zrxoe_{IKx>q+KI@DCxzG_<~2Sfttr6USDM5fB%FhE}&(_hEX(l~rtWT4&dKu+fK?*Mpv$jpD>Y44B5$L92$xi}b*EN?C) zMb5e+Jwy<|A@-HTKC=5U>4fEfKfg@l15}fj#c_bpwl4o>bvGerho=H<>FgIvsHYmc z25y&MOlk%2b zlz3;-#BW4R+_Jn9SG06kPVjCaviioe2a&919K(s{{^@A$s-FF#{bwcSqE+o7R1(tq zjGCi^b-w}S+oTBUe1&U>PgsmZ`j#RtROoz>o_-kV9}N2@(oK8}M*cHKx>hERM)ieP zqf^FLCJda{QD@73KGer5)d{*gT)hYY|Hk4-n)bJAyhX5DYtr`Y3b(P0XdoEOeZD?V<+g7q&QKq4Ii^( z+Cq#UT3%KUe;o1>@A6v_<1pS=<}OV$(Ui}Pw~UyPuQ5HRFqR}jeHYGGx?Vm2%#q=c z=9fo7&+cfKtJo*-NG;bfCD7#Qrs5){+>oL|o-9(Pg(v&WlxU(lCG%P|#*xpW40vP7 zE@&I16kyu1<1nBbU$axl`J@)oCKuKohCG-O0lZ|GnbMp`X}2LlxD2-*=lzn5Jc!XtQr7dyVu`4ufnNYVU># z1aGPKq0IVC5*Rg8yzUJ63;PfiiM`IKj(*8ZnCX@J6sdvSC6t}rG|lX?Ad~SH^~9nC zKaB@jxu4@^J5*JC0Ya0_b=RWiVC0r2Amou5N*G>uA$IkvyEqCbIxT0l4daJWz=|d+ z1_Y|NSySzdJKiKNLCk(l7|hej4J!gIkZx_8s4e|Y9F-f-ZBZcP`4>3hWMGskyStCM zkP9)hYyiw&HTLk%q5A`qhfejmk3BDW=*;iNjul3bFTx@`kF%-_sMB@}37) zS=MkN6&vB-^+|XV&cc_VMF`b~llB4QVui>2zZ6SP7!tY`cM&ckNQv%CtdeIh9I%uK#J53`gZxh1hk9}CB^v=Fjjhc7 zB0ffjg1bsQbeJKZ)C9{pG<&klnI@ z6(P20`!SK+!~$5!?@YjV3i>ohWe;Cw659^n_sF-LAzWiCXKNG=U_9XLGD^RwoS&(v z@35SoxxNoTHa>+nULBX_PR*lf^?)GPAyk^0-N2vU5H#+Ln+}by22|@%b%k+zLcHJp zBD|#t0)gK1I6W-wN2L>HovY|9S2;PxmSd(Y3e3BapMx?IF*|<}f|}Cu1jQQJr7+^Q zu=ncP_v|)oT7aI0Qq9OzcIWiJ|E}GA`b>@ut8GiRi(RSmmT|~odBj1z5HcS+-#mpw z5RWJtc<1JS%G739Q`KosOCoTUX-)^zu9Z|Z1*q7es~O8=_Yy~H4DT>{=-Z%s&&^5i z*N#XUlYD>Dd)`rZHhDRXbOU77abC?czyC&d~zJux{-?KPI(eJRNVqo2?@pC(?Xwdaty zRLa@+>fCG~QN>|U@nZMR}^1~I;2JxnsSrC8yf;Sfuqmh^N(#hg+L#P7TI<|pC?Ao0Kt2wn z@rpxT9ZcuYF*Ya0);zz^Z5-Gk_u6h)?H)2t&=m3XF3mq;r>L$!Vpp{l-Uk8;f{=tz z%^h&v6nSnmH1);J=xV0GiM+Op#7@KKpqIT8!p}vG+?Ke)OUHG||`$YXr@&N`6e&AE{CR>!`G@)oVBJNTHw0~(qw33hSbAEK+j z+(R6MF=3>xmM~cioCek@G$?^^B$KSWpLki+_y^~jc+s|?j5F1mRQ0J6>MP7suKRH-^~`_ zaPLFB%GvfxF`0TK-LvqL32{tK<$L7IRh8Mc!>}zW(IZ=d`7eqCJB`P0l&ylT=CtfY ztbz`vH-yVLtV-BDRcr@y2@EcjZa!KM5rP0}E+`ZD8M`Bb2MaD#>@3e!EWjGmz7c4x}u41B%C?6`PyEfo5Qa4 zie9*$LzHI-rgMZoQ9*9Vp+mBEkh!75vv#d+(6M2w*2CJfT<_e)MZn)q@oH5_uW8Qq zAeiN*S4So~T80s2inm+23<;UYe~bi8l5sMrd3-EP!s`dfl23(1-tm7f_V#mC*50y% zqsjKR^ff17>F2~VxEH!aZs=FwQ`%~D$m=R4BdT;hV)4nSofNtT&C=jdW!X`ojjWEG zP%fo#+>E><6&Pt-|uLJ@n_EUX+l zSOc+`V_qZD6b@OMonavdFCwcaE62On^Jgm;^5f_YF&qDM5I?4v|Lu4EK?zg~V0@N# z#Z3-v(wNW@U9T-LW?5u-ZkjUDFrhTI<*QyvTNco~l2SL;ESu8DKMzSnVc7lV>uCD2 zFv`AWqYZId$v*c?(`EQ3NU_FMRJ@?kQA;>RNhzlkYj7u4)UnE4h_b-$3fi>KZwWlT z8Zxm)VkN)XfqPH;c2JU2@-2o$X2{vvcxrkP@Tr0HSVAxnhveJDHjQS zU7zpG;?xZty)pOen8CxI2{I$11Vm_%D&Hr9e3JQU=sOW7n#=K7&W~jcIcp;?K9v!;BBDM ztY6ZK*d?7ifD#?t;esK((Fnusw3aMTO|5MbiC2?RF$#e@x~TEHX|1woV)aVGVWpQ}TB~IqtL}Q$F!{ZGAL=>OlGidvtHy6_;&) zt^W`wa8mi?z$xeQWSo&{{$;L5wzC^B^+oW=g7*OVlOCc;)qU7!fa;zx$%1#3xlyAc&!k18y9ly%VDM(K@L*osMb@sg ztkq+jvr2~n^;SQWq7x9mr9qUrnbigbwE%Bdt-tXIb9&TnY@bv%|}7e)rl7_VtIETwM zopqKF5-Qp4k*f;^AKVR`tUx{%?fF3`+g@77pBhSM4)d)89;X|<@d*XZgYw~tCF%0I zY>rc|+E%o?2WZ-ZwB@`LZpF1wwD<4oxu<>RPB16fZs9B0@YPBDr(6LBJS^itaY3|f ztx{li(=GC~0cLV?Xr>V8DbqCYbpmv(cQkcv$x(O!5kj%5WNSL;Z8Hb6t zPC31a%<3^;d&VPolw{G5Qn9?eoEsKo6#KgZH-n86bW$bTV+dhVC7=-QfERZNu?H6A zll}#M3K`pz+jD3hf!!%19WkxL{H|X39_NTT9RF`B4#c7kK zc0ZfCtZHZW4s=MuwO|0KeT^SXuwKTdZ>W zPGAllhr}G7v3?)m?#Zglwp~M%V=(j|J8Ih~ zMgvDB0^gB8E<>10QsSCpXQ~*1LcKyzLGrQ~W;pG?xzTgNTSBpbbrvEL)8{-C2;khB zhrhrH6Y3Ng5a`?d7_hFU?!Q^_KbaB4t{$*J^m{@BbHQaJ`V$l{uY&PTMtz=?Po!8u z)4#GS6*VAmIwmH=V&_~7+*#YP8mLg^GU(3$E3ro%0&U5y2A+ym zow`SdAkLt;`_fx(o+O8*8qLCt%!*)AR|kwr%^kuaqo=EemNmXq$AOE`$Azj;y2oD}7X+=1u(H#(ktJ<0NHMu{Edtx(Q3szHbc;_?5fximt`CmflQLZQ z9xZe`C}?226ga)I<5N%U^++8XMjb1m#(Il1Wu&CNL{xMs5Ef`dcA(&zr^p7`lQ<=z z%BUXwRQ*rZOGi0zkFbY$tCkp9_=!OFCkEJAJ3VQR%ws9x7waVy7{sWYZb_q0N}8`U zQ`g}WmGnrDoli8#VeRl-Q0FeWk+q=kg=29M&jY)B zue&8A-e5?v*Xh!`Iq`ZAXb*ivhCFG#=c$`_(4yF&>ZNh)ioh|CDR_eK?iR}F$7nxc zSQ$r7t=~^*ci(bCHpe>Roa%c;yaV78nIy5qoRG)=p~MQOOJGOvx584Kc&Fo>V&6+C zMc2o`yqKL8CSy<~AgLIAm?)GG*mDn3G0{6*)#S5FA^nRT7-{!cI*U2wR?9_aOFw}C ze0>*cz8y`zliYy5WlsiDzC&t=phi2j_P&T+DK|v1gY2(oZ61jRPvC}2FL&s*_e;sd z1FXGF4VQVU!&>vC{K?%*Za+kC_T=l6^ga@F^T6I1X3QcUWFVt0TCx5n=-FxMJ{5rh zOV=d1-s?AH3J)e#uClRAEvNhm8WVS^$-lhzd#H$#x-WmJ62dE??lO)}~* z)oXY*sai9rdUK9hJ0pFdSf_G5d^3Xk8L$` z#e=7@rP4Vn8tf_Eo^=ydkp}* zKT()|Jbl0SfNqL!K6jn1T=U($9**TnR|NTp0^E<{Ar88#q7{N@^W+zCLQI zG$eAp_hUEgN1iOlVboz6cJj;`I`;E4=&twOGH;)$DA((WNjrGB;bGJiRr{{v?043$ z68Cv{+S~ID^M_`@8*nfr9lWZ-oX{G0DXK&hU=hN|S(4G2xs{F0>3pE?OpI?^4U(vJ zg;}_>I6Wh0CBq-?uByUyiBD#k(f@6sBBdoGKgX|j=$`8te-0<+FJk!c(Lhua8=_Lc zqJn|~7+gCJA^;$^Sz3f_68oHZlw(<)T86AdeK;_)2iO}WJgVUR`Wo=_9l}}p*p}-( zyjj$kLQ?o3TF57*f`dx9ydkGQ%O+aNkrI9}450QFRygHiznS?+HgHCQqJ&pW@rH08 zc68`GIkM7`9vOxFr81z7u*8sQa-9+bJdvGR2CO8bI6DsIaR?aOu^It-RB*9dkj4P; zh2a7gwu~P1pnaCI$>4Zfz`F>Muz)NF`M&!4C)^c0AoRW-f%s@5@J!er_LPAtb(AVU zeq#q0jR^W(a==mc+uSW9z*5Q+r@3bgf5T&RoTrW$mX{y&fYU1de#pzsoy3j6 zBXmC1W*K*Jh>JrjW@~g(k$vzu`XbEB%+TNhW%oMmFKTOImr3N8lN%%|JzO$lW0#Wx zb(CmVyuz9Vd^puWg~Sh+8R`ehxBZX9j60izdt(}{ZH}-UqEL>~)7Vr3-lqHW{xl0F z8k(&QAw9h7!z9}p_8~x<=Q`8Xbr!{{FWG`q>!$bNax-GPCy*WP_5mg&y&;(>69;`N zM>^AMiQq0~YhG)w*j=L6Rq49iSMzK?594v#I2r&?cM4kdBE!W_zp+LW7yXQRl0^;E z4OA3Y<=t+e_uTf4K-1*RsiW1+Rj1WNor_>mFBAWM&IC16QU+B0^<(BW?dw8LOyembHnA_5zT{IPifg-T1}|6=}whtt{WR_%f?BY3LwIoW1b#&JX@gU@+JQIHKcI+^(kUrwePl2_K}#-2ny$gIq}-QM zXDm0X`B;N@ifd2g52G?KSkM$_s8_Vlr_(){Xha%0Vq^`C$^m)1_QRV2daVv>mRkPEL8`%Ve!H3-R*K zh0OYX^-AwfvZ;pl&h(7ZEv!C5YxxX)?T-Aj`A7=Fz4P)JYJ3BCIYSlg#~jhi@{!p; zgNR%Jr0t)~VvnK(`{~Hx+YZ=W?0!cJ(A`)fVR?ltY=`iHGe~ddLnC1m3=lyX*ED)^ zK%s?;<2N^ZoLCQegj z6Dbc6R~mGaq!W)xZ=Pie^5%~nx5niop0MBN+jiOCjxz`*r2~D;V)f%;N-4axY`Z$& z`KgLRf_t#Piy^MltHnLI)I9gtt>na+?RFSS^D}FPuT|#X>O17|OREZV+ZKUx42s0J zQ5YI@2vKloMM961ZA`>OUUVyjI4~*BHliR{D&b9h$GY>8-VoWJodu|m@@!c zV8QG20M3gCoIvfRq_R1R#IA$V(5HW|p36G|U^#s$t-1{Z3GTgQ>zSaf9Fat>DYMf) zZqaD}_gbvdb~0J(<7H-jJ8<1Dt5=tc;)Lpim3#eqJCMo7HWKwCkb5P7BV8@KcQatP z_T}>r+X-hAcubIie}{1K$eTfs2M_W{&>_%EC}nI^h%h&i>pj3KLG*~{-QwRmKhE7N zHnw#?_X_GQoz3Cye=JwR)TNHFe#5X*;Qpt-5dHsVxngK*ZEb7gNDK6zja9!-{`n0l z`OoA3{+ko|y>9DZN^7BSXlrOot8e<7HB0N@L~Cy2Wb9z0Z>7t~%u2_=&PJ>6XifY7 zzkvVug1d*Y1HX~J-S2Jx?Ly%IcS{m(P~QG+*no-y1`HC%!!k%C3S#7Ig92tk14OWa zLrcI%cbKAM1P`4cE~uiRIPgaeH9&GkP7V?TxqV(!c2d?_^;8vJb#_g5e(ol%?fA?c zpQ3x?d%gGO_WfSoUS4)y#nt(^-%I>M2j@zdbqcA3O69EjLE#N@V<9V8h6hJ+#}dTl z|JQYUpkFW)8jZ=o&7V_ESMI#B_LUhJGQ!;8m_jzMZQ{Drm;_H?A6+s13Vivk!o(wR zCocBIAxOp^_>Zxw^i8a}U~m+j&Phr{bLQ8>e6kKjOit zH8%x1dYDL$o_?{#<23?em^FofXx=iN7<{|6s~-^$rocrd2yiFFV#72FK`WXc>?n&v z+k=7v;N+Ct-l#VnE8!1Z06X~1yD!fMKz3dvHkuQ$WH@RW__kQya?acvhie@08hxqm z(mDeB0zi74F(|2%=-E7rx`yg$xyx!ii9ilGB?b3S-0G^H01M!(eCbPrpzK+6Ua&>i zLW@s1DL8QlB_(%&Vs*dvEq|S=dq6TkZSGCPTn*314cMS>%@UkQe2Gu|*yB|me-F?? zo*@EwubIFxc=OQ0RY&#sJO?|2;K{UG&*X)DZr}!ypGJMud zc^wTMj_#(mDyN&Egy2P5vg$lbk!)oNqzZ9cm^83c(thB!Kl$EPLG=0v>QS8)69C3? zSx~40MnPYUCZa;9h$V4gV_}g%%hAtG8xZWo;9p(4U5u)gc!E{Bz>8OO$Y&NL+4B34 zK}F%I9D0AJkQf`yN}9Yrf*whw9Q&}G=i8B@NK&N9b8h_JAsp$~t=5ws9@KNB? z&lO8J^y)ooiGGp(bov^r03a@i<{+z#8LIGxdl`Bhi|q*j<~`&ps$xD#Oo{5tq{LXZ zJelcbLMQ7@bu1_kzyV`YU_gS|x2wI>8H}P|T;R_XQU@3Z9p93iu7b&>6rSOF1ZmlbPi_syb(tsjs`3HZbe=%l14-EF|aW zme+RZRgQfWZ9;Ef$3^cG9I>2xew2Bsa0em^5}Vo7hg__r^Vo-s?QHuLYeWODwF5PT ztFkVk7E)~?MiS?-GDP$cky}u!8~dwv*+3j*&DQYysuhzfb857YMAbElvoYXoa*)+u z91l`yQfiuD#>CX%yR0mPqA~)t9McHl-r`AKQGTRrYN9nMM8c{Ya8`MhM@bOjSAN+7 z3!P)PT$EhN(fAyBkm7jtAvYo00zR*B(z#GNM&l^bkyS}J)m^YJU>&cB+PS-kc$na{ z+2=4}#V~Kt8V_*bJ>$|hYde@!kIYK4;7M;7sH^biM62

ph7rjL`L*rF!*&JB%oXX?Ewdg`mBkS@PALUtno?LI00qDCwZhb9u@>z zq4=@~0mLx)%7aVco_>uJRp0IkFXfLUUnxZzhcGFgDrIlt@2A9W?C3f{szNNOXKQ;V z>)}8?u(c7+wed!V5+aB?qzXSG8|+;C5t48M2=f1cy3(O+`!r$PpkBg1aS(9|j#&1r zhDA{FwYD$ID-||qC5pZo`@xXEz;_U-x^ZFfE0*MfM1Qmf96^qgDfqmm_(3a3eg*0w zeqVUN=XdP8^e{^(9@M!?z>feEvSz#|X(eeQge%>BO8m9n@I7^p3}jzal1EqqY^0*u z==OQp`JcZ%$eglqUEk6D87)xfez!=c|4K6ODxlNPYb=Rgmok?c10g_$p_P$)M)-*J z6T11+SyJ1EHBEnQA@3I4#FXVLPbw7ot0ZGUy+vBReg#t5rbYu^r+&EmMCQQ-5Jj{v z?*jdDeb=fac`x`-T$hDqP+^70Gx_~?XBkUsx2mhy4lK@gL=Jf|A$yxpqq7YZl3w7F z@*8nMF7^2AT2CUWu_P^pVE9W{eJ}>tgGp&dWCV5L=0(daTSFYVoJIy#_EiB*;n~&& zJTV&7iM`N_a9P%3wM#w9+mU8Af~8~6O2o)n#dFd{C*+q*Mau}73YSb@QRgwGKV(NX zVCp002DF?nD9^blNyrrnM&+&i5Ig?f#s>qAXiR_olEZ;J3|4UAFm?I6 z6of}5=2rfQpQv|y0(6Qfl5R)pgcF4=C(Zre0D0@VHw<~t{Wm*jw)Jj;vp(^OA=)U~ zwt^4Pd1>j#IeF*`D(u{{3f@f^_(^*RW;HftFR@1^rBE^%X~gP%wJNw)OD(LVBx2p- z@D0{1e+PEw1nrct34IB^;E=PKSc(G=-NaFUN8^Vwm3Xi_^mR>OQM2Zq*sZ2WVP3$`();EFmev#f>fvD1n5F-9+FA?>0pi1Mx z2xfxEpTpm2wDYWn{VWHjQz2GNB8Vr?KDncHn-tgRrkuwN8zxJHX)tu^W}TcLqIH`D zm!y?jxtmM_{3XxM4N+YPi~Vd;{C^A7v+ihi)tUa4Sq5njYf!?}e!c zM2&uPutn;czGxxLTA?v1r`faM%pn1bZ7clT45vNjr5MDARinN~E4OL}3FAV6BbY9o z^u-jm5ribc(wtW1xSn_i&EJLgOg`kU6l%)wY#$vR8I;_ZK|cPIhznn{U!A(RT0gS& zPI+|dwPGlPZD46vy-z(Uo%V2EQ(Br4KIbUGxy?$D_OcdYw=>R}_}@YRKXK+5d>?zx zZu+`;PlYK?#A}5k?(`GvIhu!^oWIXq2r|t%=5z5m=}irYMT-;IPcFpsbZ6^>$t&!v zjJ$%AbDH>r%YfVqYc^s$z}%-z0=a{pAOKt9z2*ts$4*NSXHv?Ju5G}s@Fr0NK&O1V zf55{JA#Gl0;*(lCg{%M`w(^Uv8qz(%lX3q!hB9Fm^t{h0-C=n8 zrt2P?qRXXfx*sTdDstMSaiboTlEqLmnyqW?yW$?&Ed2BE*9AimF$$c?WDabuEoDT; z`Jn4AoO1ay;I31(yK}kIqZ~purTq0GC=uj9`%W2i#3+~^S|5shQno#yUUj7BFmPRRC> z@UGzWZTB5#8>~*?=RUXFpB_KZeM&blAHUG~pl-8JQF(^CPJ1M- znBu#jrg(Fs7HJ`K_VpO;Ggd2VVEKQ6B=L$E`^d}Ytj6kD*eP0 zHgwrL!N@ia4cBuwa9S*+*3y(!yjKn;C#8~;J9t44Tu#aj`C-C+bl^;h%cMny@Yowzlm@Q_>35n5=jf|+ZO9AvSbQ+ zBJ@bUzu`5iA${J`s%$#-^lVo02&icV8@B`qFNs=FXD>YSv~`AnS?wCiSBJdYx@27$ z@bX-?hz#xeK9OX3@P2rL0Drr%WQleK&xk;uLNv#-m^fVNwrY?hSbGFVhyb?5xe9_> z5Sc?<{m*&_(IOmGgf>Omu>&x63KYV)k(J`NWr*c5=ptPq|Upr z7qZEO6FPZ{UPZ~M90qtq?1k^&fvypiRO5zVul!dmv?dkh{g{L`x8W)h#H$A zb?u%YUC8+CIh-^Pa2CCErEQAS3c`?B%;7knMg4s$xJ!y&Ajr2sS@go#LYg7D70i4Mpv=gra5HVcD$0VD#yHQT;KsKSwDRnY(EvUY3{OdBb6 zztREJa#9+d!v1^#mB?_xy_c5_6k#(9@)941yD+g?dQudMtAG4 z^qiy5`R5;j@Pv>vQ-UmCS5dHG}YVK#{+tL%bn{`|Maiwg+ku z=7sxgDSfMK06oLu3ig#`Zf|1bymEex{T^sUKw1b*B6-Y1i5b}vDBrrk;dSl=1s8~S zyD1g2LQ3BMaUM@`4%~iGXhZ^%BoJheRwv^H)d*!IbZO{n#nj8zcyp|15RED|$HTqG|>3WS{7 zO$C#x-ro>vr`6Ove0h=^F}JjV&IY@&?{yZ0D){%=VcT9_i71+eb&zLK@T2-}itsMU z*(*Ak`lHQ3Q@Jdk3JW*YL0KyzGFc6T!=uk%GLLda4(K>~0?wP@^fkUzAp|b>hN`wJ zdIgLo_P4q=OkVs(am@#FJ1b&XManwF6l~re(}^G`6Yi-j;q4PVw+4kKE=&`AUYNQn zMyHMEl^l%{#bu}lp*{*uv9-T!i;ymPVtqcH++_kSom`yrsKCY{o{^DQz1wu+)kvPP z*7UfFt1gRN+ra?u%;7=9lJagQc*HOHW*x;XX zIxzw$e@IMyJeGJ-8d6&=0OK|U3Oi(wQ^`CC+F*??C=7dMtq4m!pc>*@Ezs5jkB6yA zeOMiU*u7*WRUMGoLlOy;-T>F~=r3T_!P6zakZD7pr&6@MiNZs8VeC{LGNfhJ1T#yj z%PSfL>XR|0i>RVGrM0~%>4FB(0n9PB)&%_>G5eDevcfAI_R3DF%mK1aL*DUmj{ERg z4(I6OX7vItWSvY|(d+n__%XsH<{gn456Gh)ovIrC|8gY(Z-6|NiM6(?~SBDsHVw+aKbbg-pu}2Qdyr zDB?sSU`WuXjH~zmL54rr%o*;Jk_08M(OTe#&;F-nViU0B&MW>6aOMXqBF;tZpb-%z zdeDS~RSrRMZ#>O$h$pO@Nrw2~28n{2p)h|g(vi+!&bf9j-#}R7m2l4_D9fs0@8xA@ zQT%yZ%5aF6j0Q?JixrUn=2kQdKP;A3IUv?W6*V*|FhNW)fvO-PA1s0|LnM}R>edtW zKyq9IS>}rn{Zkayt@D>+0i_IMf>;x_)Ph|J+pJ!8QAKrODZuz1f=d9^4T9rfaSkXK z-_)H(q6h^31oFrgI7zMoi5$_ltU;|jVridV<}iu^P$-;kiG0zW5e=yhC+1E+HF`&q zXed=y(RG(-*5u$Y&G|rNQZ6L-W+;1qhIflQ_e;qkuJj_*jl4^uv{z)r9m(My8ZE>( zEMeddjC7D%2Dk}X$jI~{mKH_!(Y$$&OEZZ=1?TxWa#@)(Kto{H_0O*PF<0!H|D>)TBpaw%c`L?$JKnnyeAUoCsg2p1f6F9xf|+w#hz zIArg90B+d8Xlw~t8-4%Qwr920FYBc2X{flqvlc{bfe^3MpyjTi11Ymwp<(C322x&& zX5Ek>zD>O6iNv&1YWE3{Oopo<@P<}1I=hd;1+#f4DFNjhoc+eyhT0nvdUtzA_k*Z$ zkLiZc8$9?%>xR->cyi$B2I=ePde^&8_(d-Z3Yw?5mB@o8u0#X`7=2TWheXwjeUYJwfLqYFVQw$jgrga}GmkP@+)*x` znsRU@AQB~dT~8tVC!Mkq8I@Jgqy(&9$ww|o+T|R<)KPv$bIYZWpNLZLx=-)Azn^2S zS|JZnGWdrI8seNi!a2Yo1x8WbG;O+LV7N;2=uyl!qD`}$ym4Op@8qZbnUJ+EvC8-+ zZP=ENe=rdO!MqG#)*E!gX|-%G*7d6?u;Ytb3QjChTS z4(P=$=sVu088af(yqqolICF#qkxWao%`(je<4sT2j-cD~|tP-9f>+4uTweo0KYt0r; zL$h*jEVa>yVqQAP+qWqV1QOaAacGL9xOu$Lv1B0qQxU;^PYw)7x60w@U}z$wQ?cy# znBTf9M8~M75m7|nXAt^x45VG+^^&NR=`M?`<{skgcf>K(X@Wmoi<7gk ziBczPfD)!l*fqswY%fXG+)}<~yh>7l-uLNs9mh?qpyjQ?=z{QUN||chx;1eubb^y!xiSamPOqNw{D;u2 z&3tJAO*YUA|*Dh4i1*jU7sBBudA^SKDH0`PYIv z2KB;~RA%#ct9F*S>bZzD32Ow+;%NiR=69>?mbB{Ct}6%XF&4AQb>t0=7WvK??egvZ znpKy2>J1y0!j{nOBJQ!9WgPui^UpP&Ydp*O9KFwG(=~u=VHY{iWb6eUQ(3dowZx6j ztGX9c7opDp?&9xk?rQJBoaG+VS##3$$Br4Dxx{tbXQh{do#5^w)B4nBs~660+RyHs zQJrPb`qiiXt1_OD?wZs()~Cny%nzfN6rKK^mD4)I4}q7M8-3p;%k|C=h8I$Ac28N| zVV=3w2H5B5E5dJ#m-?Py?}FWdpQ_#QpMu?Kp5@oN*{9I;Qx8ba8eBcyi_mr5=hHRS zkI5_B5BZnoAJCa+*R~ShG3Rf@9i4w!u5-O7ilalSuP)yVZ{1GOerL_J~bjNqQ!D&%6 zWv`_D<3ea&Ttli;!)Rr%uKJKvG|YEkLqu9;mPhfC=r4go6rT0Az*J1mHzh;X-m$h+ zRW#U#^ASR?kowqJ2AGHS5q+Lfw~Sdvox{gy);GXIG+ncew#}()yzS+K=q+-6M9{fl)F54eAx8kuJNq?)Xc_r3C1B>M%9Pq6P2Ek zuJl?)+tbTw6QB0>P+fhVA=Zr8d&+5*p7CD*%o^u#HS7T$`fQ}Ppuj!zjWT-$^{<8; zyixw!WOfa8NIZ&-HSjBxQ=Q#tnXAg&XPnKn5A3N%TjHGJzEk$fwn$w5D{)rV@*`NO z38`XzjU956>i)?bN3$VyRGkScLaD_I#zwwL>s-v{aH;b*oqgU4x9Hcnb3qy`>OWw0 z-SBDGJD6wfs65W&P_&^=Zwr$(CZQHhO+pe^2+pe^o z+4-N_9k=`8o`@6C5&L01?WeWo81wrEpn5}fArKpN8dQ4;4n6e-6hfj5zPiz3-S>JO z0NB$;dbp8_JV zyVU%Tpd!}~<+NhSKOOuFo-FYb)%};1cSY!f`4wxL2Jh&398`fP}jKJmY^(6 z)e2}9J>*9a<3oe7EU^Wr%^+IE>v0_8tZoblS2AKjv?}8@)bl&fZ{cF8n;jmRGJ|Bp z^AH$E52RNw{4q7rmM5VGf~}#R(j2r{&MEQqI9=S}`Qo-aj5FM&hx`-F5jt59U-3;C zAr*Uun+w$W+n@$ZJ#6>B`bmt}50;4O-NfH)gmh1? zFI`w_HTQ6N+fAlwN>@T3GeRAHhGO#OVNcElSFPRIZ;Gk0&B|fW*w6b1s$$Ep;Zr4VV02NakES!|wEo z#?k4%!ofI}4w`g)VgU1rY%kY7Qz34@kQ-Rdoa|1=EFv)re|8>!vngjJxOX%U6?u|q z@86-$hm$L(%pg#pB3U@wcA>5bJ*1Wp5&_WXJpBfRF}g<9R@r>AVXLRy{mB5~eR8`>7x4sZ zIP^uS#$HPVkW1?y0i4qw(7e(nBVFxncNn9_5`;0w8YEDEL9$f}wudc(y|xJZVR%X52~d-L`rjAsci3k$!8ac7KupLzXVn z=!hutjMWqn0=f>{dw*3vCHfFs^He6Fxlgc7Ey1BH+sfRRQmWdPv-7f68m*Ql7(N3|g zr79hP&;Z?L_09eU_y;bl=A3;he>5$-|5no?_WuPg{|g|eG(5eO9+SUw#)$4mkCNe> zdPUtZ?(it!^aAwU#OZ*E`Jl)+(zW_~jZ8Qg0p`|KB5RgVbgixHDb@|-&H}Z?ip+y5=+!O)}?HtU71EWrC=d|QFHG8GKbTl7ITpy zNuiO9S6Sy{z12G*DG-#Ns0=biE$nKtI}D_CgmxyR$j`87Bp81hMP|qo*mM_ zMu@YW`hyh$2QMquoIwa1P;Xt1vEhzLIYbo$6HBilOA?%+Fly7HWn$n-vO5`OfZCJH zEd`pQupFI)l*o0UE7LB*rs~13r53k@B$$lQ`A4FN7{osi^i?C5b{AgWL&qx-VaqPF zu5*eA)=#geI58lcSMesNOAnNq*pT_b!fmR|y?pay03pKN3ta4dGSsQx9xsh3=EqsUO)+J&gVC^eZ1AB*AY5K9ai{Jb4(^XKeC`mmoFf$yGAi-o-v@j`*tCdY){r=Lzg!q`e zwPQ%AV|geh$gY=b=M=Z-NuSe-W)1iRnL>^>UC(a(v@?_$&SqEN=g-Eyr`zgPi@KjX zfdoEi5TX<;uSNl0e6N=)myoMaiiAp9dq{=Q(&mJs;xFE&DP|N5{~g^e7~N9QL77iZ znwBVQrD<**-VK;qeo6@<5_Fn;0mE4`F%XWTP=+KOuawc(29a7>CLPeeaInYU*gJq_ z22ngu#V_UmfyUgVm@LOu4MqLHU@O|;xq9Ec7gXtlM|@z^fmiy6I5|45kM zK(419WOWyFk_AhxEaqyp%NLuC^6Vk-ls0|A{WnxABpoM%br$H31|!lohDB_K3@Dcw*rH&-oK_Q45{#`j zLUd?rqK_4fCYa{)9{kXAAS5D1^aBhun zgos0n#iAO1{m^uqevC8Qz?mk&n39LxUlyx;6?6~{Cu~Q0ZY6wv!JID~6T~+M0kZfo zk^aAJ$t}H<`&$w24e`@J}EQii_;r!UY@Q7r#iJSH;$cEyu6Bd zW98QYUh(*?oO*FdC83m}&&QZP1L<+kFQ>oP50?gW7fB9zNH(*j9PCqWi?3M;&}rkX zM53nFdebp-A@%DoO+ulKzRyN5JtW*2Vl(XT?#Iw~>0hdR6NdEwea=qk?^W0HT;aa9 z2T7I=SThn9z`CH!#7G1?tdw`24zQ(EIa~m;m2(m#L!T>?MJG@RM?}Re9n~vd$#KtC zH*gtF+$e0(bTP<&)m#4{qM&6)}Pq_r%YdZF`+#oqB(1 z;V?bQATo>~XS|8d&IRYNoupt;A7!dO&*L>EdGOg@cDZHCl$CD0wdKzF4kw97HjsYuQrF#l2{*$O?LzZS)OcUQUAayhpX^e2Ph3Pj_M!TuR+8ukCkgT-rFLOPu2yuF0VW9pjCmEVWu*qVN-1ag*Q{JY!OpCG$;g5{0G;2C!CEAgYiH+}YmJQ( ztVIeY3WgT$4CtnRw5R)*PVJ~!ooyOaRdNrbQ;fHneasUmAB>xF7>uY*ZvT)`2bjv> z+J3>JXI_R|LTj1D3P6FL zH%H>@E1g3je(wH0bC6*4b?{_aKi=3c-Ocu(8Z(Larb16%eD3db{D{_s+y9e?JOhRi%kZF^r)}!BezWb z^Hlf;S8?Nw?qC()n2?id*ybw(Es!QF8f`p2E;~!zoUtFI>{r#Cl#&A@wsL-kz-id4 zAilHGMEnK@y}g`SG)@1IQh)W%2^K(XLS^boTXN!bb1|gbo7+mPdy?fBJTSY~=pM0X z9UJF{oVqvgM1z1Vk>)NUS~O^bPPn;Q$uCzun5(8BT}xXAybmp^(outGCFoRU1!jmU z`DnrqEy-vB%OVRTbwcHVfh9`2HNWgF6mRdNqQ5*$DmcS`b(**WA4BJsxy-R(E(VZf zXlmFaEVWi68P130Psjv7%%&(9`_^x0Y+P8eJz<5rQTe^r6^iD!P59zHnm8jC4T1Vq z$h7=mniSykQA^nYTkgXZq!*%N1Jv74hmyU+?r5jmj7QunS9FR(G9Df2#JEvlJ-@GD``gC3{%d-n#_Yoi9y9M@q&49bi=+^-HPyq6Kz#sMNH*ky^odVmV;0 z^y~xXq$s^5L|s9)u(m4)-1`KOZJm3!B4XCFjXg0-x`n=|ye;IKJ$u zh7r|*N$cUk?4i4@#JNISw571GN`p7OI8-)7r>FX$#&7(NzNTV$bTl3yy(k>I3M-|X zQ)BDkG=q;YX*${ZCJX>o=O1N8LsX65M$2qg!A`UoUb3kKX0{w}&# zOmKC*{5_FhbleY~Oypf5-JaZn@48n`b@#Myn$|t0z2^yF(D8~ja57FGSzpmUxnj51 zP4}eT4E2!la_fzhEF->=4!LOE9noc&?1=_>fjNm~gzgSS@xsOb_yx}uoBe{%6M?&j z(&?vpi&!!n`3I3!vt^@y334{9mT{j;OF7afrc;X(eP?%66b9f*QM#RC{n;GL5bDLA zQTZzcxz!VN-v#!l?!YDX2;k@Su&lJkom^dhWLi1%+C&2%F6D#z}HCz{V>#N>t3r;9^slO>OwJTi2E6 zhO3eEcL=MZXGZR9igz{U379LUko5c%hSRU>3FG?L1|siepGan7J*+C(N$!cA4|D20 z@9~&BpL)e}kg2EA#nS zW>nnHzE|e}+Y7e;!*g0FFCD@Tv0hK83h1B-yb2boO#?{?)-_qe4*WV4&$x zQJm|5n64yKdakka#R8WI(4FZT{cPa9Wl=R(|wr(pUG${iz0xL!dNDechUlTRnV)JJVeh0n`6g|L4;Y|qt@t>$}ui0rn;R;;Vrr*@+w zbbF=8?T#mXd@3&&5N=-_n%b1dHt8w*Eo5~_C8cG|Ze%jRGd%g|z5%v~{fYW6034z* zOUWpf(zw=S3J0(;PRh6!lO&uf#Ca&yAW0iAzPgdRC48}Vgn|76P_PR0*zUdvc>$_h z#BlM$;L&0O!u?sSXxY2f;yht&uXVl&yQ!52bs7q?_mSKf*@VFL{5?%`+&kAX$C0zL zSY27(wBj+k*b8L!>XR9PC-bo{*K!9eBcRR{uN3MDbWZ!a#{daOJ%fNyOQ$VXoR zPN({iFhZFJRP7mq$>+iQEV)+U;Yhmt*8szqzi!WV7V5*9vBT_+EmW6SVz{S+AF7$)Fp5LPqjC| zj=cI|gGI&;gkObU?iDNwScGzHNS^!xt>nh(`q3d%?^+%E3UCBDA=r}teqlp@@G{QQ zs^$`9C0obF0F)Pvrcc8vJZ5hU5WlT*ZzXbw$i4aiVasRPs}EJZNsf{@*{pq(0;fCB z(2Rjo4^wlpgk!FjJJs&hh(C)qe|=Y|v370~$6eN{qPrSI$W;%1V^7oC`^2#Sr?KMn z7u2PXx#hx{<--Zbr+KT(e(yzMb-Fjs#PF-V0eDfc>$x1kxqXdQFNg!O$*r0yDW-k6 zl|hwm^n_cU=1Aa1a|7}vf3FoC!Eux(o_+PM zL&p+vGs8gZfy8Gg6mGLlK5oih>bYIBa$naSM`ictgY~#EuQ&1p5kBsG&4hA%pU`o& zL9kjOfq~xy2Dt!|8lmv-R%V4DG9iCU4(lz6bOts3>ZGDZh5G({QWd22P;B(69_?lE zA&^hCT3imOmM_ByuZM)E{2X4uf5s>8X<`#&Kcf=^%73?Qp!rY6Cr%E=#{ZEYNa#QQ zcYXs$CkK5)r=RtOjf}0)|F*v_scAZDE+K!l(4xok%Bl<;btXLh}Jk^{ceKB_eaS{;WbBnfNK^oX?WNWwO$KrUoTzDyNwux+n%Vxk8Q-A+P>W3kHYmPxd#F<(Lza-Y)?%$T zTZ_ObDNdEHW}9!ezi)@uY!zxAk1tbRel+uHGDvO?NM@omDPbyk#{)*eUXHPtD=>)> zZ7d9Z3^)qZ)N^mVvR07pO`JSr03?BtD)P8|VJ;OL@5@JA%e3_KG z5KS5#xl$8vhiE+~L){+Jdo;m$#O#S<;G+dE0MYofOg^J(6a(@iD}Ue^CcjZd(YLok z;~wKU?dw_AuCKMz1eoIAFsJmHk0FOSnQ)qWb zWs?myMKpB0Z>7>z${B4q5_2sx7^q(k!O!%_U9pU1e5N9tKuCcWmr|DCRI;Hbu+O z;9l&y@*lcMed(_OAvfM>NNUI#-Qd0x-Cn-GMEhv>kJUkU2LiQ7guy{trtzcmG%O4y z24hdguKAUL*E2bkcJ<0$;}$mu!AxZXZdf&Qy|?SHg>`5Ap_-5^yXs7F#Pijc%$Pc? zY5J%YR4`;}Vkey-Gg{K82W&cD&^7jUIwuJ~|?M0~3udKQbm*%A`#VBPET92aa6&pz= zusl7IB|OLJ9w!gu<-4+0+_K|BTNL;yVa$yM_cQE-3**9Rb3&2q zr`GHAC!^M{1iQv<9G~3?ad4f`5#fRz9^lM?L}~ZFkf**(tl-LT{IM7^YclwdrL-wc z_6RmO#9ccFugWx1TAK8f?*8BsOY6ooF7;?Q!F8y5@BV1L?89l*L(J|%n&lsk09>BcJ98OAwJ-oofi>2C zQQfSKhtM5n$Z!y9$tQ7ZEZDJqX7C#5axt&%y%ELOS<-B zImDGqH>5)w3Nl#apE_bpoX4J)#Kj;CWuT|T9nrBi$zUC6NsH`;=D*@x{ZH@AK8lt- z3lH-GuVC;?K7@O$w}UrGKAt!oo16sD*{hi57lW+vm^Ky#?ARJ-;s6P~!J`u3`~R%{*4Q21Q4{sa4;XC;HAV84E;{Dc?%&qiH= z{~VZYY;2wWB_{Z9ST0tzlv6rE_vzkh#8P7s`$Mi%(1yNhtSz|@4F$>%1w0ql=T~xE zhh;z3AelN;CY~t?UEijgK|*BCktj8;%ZUhZE+lO#!ExDB(%K|lx-jkZR{H(cadz)> zaxrAQF{h6;<8$J@bM2jb?M}P1m-_vBX8dcX7Yu?kv3zbc4Ov%(B_`ciXla&M9K}h zqV}=Pe3HYQ9F6eFNGZQURfo`?k{;tsw$vbeP9-=YQN?RKN2$!IN%2gLYaTOGO3_u+ z-^?^8@N>Y>g=uS@gvMnUq24J|zHZIl#uK($47H>hQFHzbOYu4%=*b zcB=VJWS9G0NXGk({C%zp5qPbvxd+7^#1hUlBAyh+*(rP^86Uq50|kbfe@h7gKaYy> z$1r|{09yGSJ6H{GLF5p2NL$I9b<^|U8qgtbAdOd#Q4s`Zgb;RMLYhP9foXiK#;Aa^ z8tv;?vnegwrJ`+yRq7KZK^suP9kkbbZjxGD(oHu$3p zA9HK1bNH3TG_K(v(dAFm3#E1(k&6LM4)0?1G?s7P76uOkX##Z~E; z`WDH`t^&ybRgVh(75m^Ax{`F>yMP&oRxg!K$tybfS~csJkS+eRbh^vk|EsG$Xp5DZ z$Ep-YeZYRJajXm(w@!iH-8I;G1p<6l`Q<%PvAk>xIdbDqvMIxh^ZwrF1mtfA*!%h2 zdu-~TtN)KDB9}1#WEb9kNXtnEAnxt-IY6mkl(FcJC$o2(rc!8156|4#1^T zpka=)MhvGNY4(`JrssnNq3_TqoUbs#F8QGEDImsB59`eLz@cHBXUH8NSi=_(jpX%t zvjg!Lm94A&(4AdOp^p^Bsp1kaFaN=b+D}~N4cqZ)ZaN#$z0Uv`WaN>4!rb*Y6WpQng(PDM;sg&}}8`jV#7R<7b!j~^IA1*6jC zMEMi-E}w{VR7D{BQXdFclDxBmGg~P~r(b?lMSMje`_dc;)1Kp&R za5`h=E9dl?Bj5(y01(;$KbHvjM(lSEKj29m(Kq7D@11@w(P3k${S~W4TKZsL`_WI# z*h+;gl_fU2)i)b(pTV~Tz-`Y$_Qc|AMJ(J0mPc5Oy{~@5 z8WVj0S^9?suH#0oV^{adli6T%XvWi^sg(6?D5)BT;?7jRS9V!)(j-W=2q_nrEwWw7 z8z`13!zx)LeNhyi+#%0M97x)mSArE<#B0jIcZ?o99Z}Nl(Sgn6p?`iy2HXCbY2D5k zjYYG4AK?pVr(O1w`Z1Y<-JJpsvGn#l8>29Ht*>68=dR%&+yvkFyq-L}RB!UzyQfnG z*Us^_qRHCp>GZXc{i&T3oh5SBYvZY49YV4) z`LRz%+Pd|~F05fNrySk%Q4AN|OzI*qWOdUhQbw_KG6pCcPYZ4Cq1FSrW-YzH|*D{HrB7p7zt{$)AWeC=1it&#!M%fTP%fc8cKRc7mbqjspYl}GeKK7{ z)k`e0vw3%AhQ?Dj-@YLK0ey+Tn4iHvpdbHlr4s!AG3bk!8(SIuzgO`oB~4jGex$FG zq~(-gKmrIQklITJbs7ii1Uw0Weqzx1FxZSU7ljn6jwu&D@1>rDKoS%LX|MYsTw^Xq z>-7L0xtqSwwb$b;#+}#c^tIR5^K;iCAp~bbRosZzf&BE(d{&s*)`DGW#?ip?+K@8|MuJp z@l887w`g4EI8*J-ztnk<&`B2pY}ZVzmv{#c8}VzHy~ErHm?Ao>lp?MX~jp zvBL2)g}@J|hli4W4Q2cfNE2x=`MvI(Cl?$sy6X|9{^ za@dqL0YS|L#Bp9nH02W~mr%poY!r~45hlvb#@&$44)31+3y?uK!0+)z3gLE~_4#gGZ!^F~}bxd#98 z@3)sC3r>UzQAu0D#&gE~3PjWs%WBhn_+54C%UXZsW^jLlM;d^g;~4DG?3LM}j>Bf5 z&HR+ZGOw%UJlK*QFmj~N$JTv`3)-UQtmThyA(EE!7lrN-1K!~8PrQcIOm)zy))}W{ zWh>H-gkvqcT>y+@QIw2hQ0J z)f6jXI*5V~hS8)2)EgNCWp0&NP_6W8Tj|AI5k0=E9|1(sG8kJ-9x?ViSUe&XHC2Ku zcYxfh#U45=W#_f!=b{)TDvVMU0vw_-O=V?=tU)d_CG7sjIEH@{d3xHfRG}}%Fgz39 zcm%(KHKfNGq{#}EV-PeJ%O3wlt2MHIt=<0w;Pm`_W&bm+=KjyWFb92WW1$x{ILrdS}YQbWx3ETeXEwb3=iNXd)}g6-4b6mV#&F(1%|^d=4h5 zoM4VE#l;s_QZxsrHxNpHC{$rBNtpn0y)Beb;kE#M7>jjf`WFh=;8Pq#n@NJGAri z!W{%_=nTP5YC%#8~YvC*^V)-%Nq@*ATj zfNo*}nm9s0D!(Vkew2u8?o||f`Hp!z;);0H8=gvU>7*!p=_v^kAnS$SJd9oK-c+1S zdWTS)mdz7Rsz{(ny%r{1rd+k5^`N(K2x^iW?rb0`LXq%hRC{h{)M}_i7Uv)urYBmz zFo6R|4@Hy}&@$za2Su8|lVYWK$?NP}e$|01n6L;+xyr^?s$v>Df3$*@T;)bOxlGC# z$Fh`VN~~1Tl6-q&F+@`>Rg}wZPDAY04~2D7V;~_ce2$KW`n!x{J-cX}VYCd& zH1V@lan#386l9|P{bV{)m9%Y~#*xxE?d|o}1$PHPKzvBq`(0SX{W}2y`C{T_MqNfG zBg=Uc+-Jfd2ea%$C7XTNca4{i^#f`W57|X#4`5Q2rN7L9DGbg!HQrUhJdC<6tnS%X#K+&=^}eMUX1GdiW^kO^Nac5nkBBI#yftH4J>#k$qfLYsga1&y`G`R4 zT-`UQ$`{>{1H%1F?c5Q6d+xrVUD5(;baj%=2wmn+5oPQy9s^sHd`{Eom_2I|Mig>Qv0)fL4m+=Nn6-qx!4r1#;+i4;ulmRwI*xR|!qHi$mkkAZI> zU0Anq=fY!GV{sWz za_#oBLStn0_Zd^RPX_G)O>aSDy~e&J|43|8dlk!Z4PIRjDirjjf~@m-_z9mMInIq+ zjoxufo+(Orj3>u*C>WfZ?7}=XdLIV0jblxk!h~#bq%;6sWw|F&uNIU@YK(O*PJhLc z7j=*9;anfTY#CW^fiMkQVApvu^MF-h?8L6RV+UGyyIDv7oQ8r)KC!a-O0w_0u1$6z zkf-9fRL&wU9=3y_R?kiG4g%7?I z1muu+=R!_lod*$j-{AkSF>svgo4%h&P+RDKhZTJPF;#Vu%3TAW9k{+@EPKE$xhfTrx$yAv@uv;tLCxX)nQSKa=*0>>%CTU&5O))Z$_T4n}SOJ~PL znJ7r}u2?m}xedc63<+((!1PvfsXgLPsSMjbRJzM@ICb{~`hEwOfgW)PFgrL2s@GYi za7d0;c~Wg0w`gQE)3koqri++9eH3FeFr0hlgX)!Z5KK3XMTf`x;U!k#X6d zJ3;kUd-MSm=0k`f>sCd2q;_gQ&^?g+q8zT7wM!y+7?RS|9Hm50_0&2e$N3X*SK$!F$$VttZd_5Gu}5^I&(-4YEzTA3}Bg6$noE zklU{LAWoYo%jrd~g1Mm#Uwv=Em(u5OdYjizsC%tBoUa@G0N;vr#@s{FW+4<*-CPIn zzF&^}TdUB7=+rsN{|q%4Zs8id8eD)$_ANJWi;@Gr)OmJn_Y>bEJKp<&v+#Y?i(#(j z3B5!;A}25!kRfe^NPRdX{(%z=t>`CO*NG;ZGxEM#>e+0m`^E2ZFO9=oDi$hx%c=FW z%mk`cKy?gbq3K{6r+h>3_*dcd3qVay*af2j4&np@xR(K1XokEs;7A$0#<24yUhc7v z_|Tc+8f{n?TLJH&^~tYk(ZUm13wleGgOWex2N+F9H2LO*S0wr9fgV2p+B1p| zFEaW4Fr&sFsrLWOjHLhbxBX`WC}r;G^pBJ2Uk~Cx;eh&1w*NaIuv%Hu7Eu)G%j9CP zzOjvzrU?KFcm!1sh#Vgr|4;xS>kkZE-lj(T8q^qpDe7en{H5jl>KC9+MMXa?R}%t2 zd9p+<-(SaXp<0W0jmLZoPZQSzG&@cHx+8AJM#dAbllN(K-}@C*T>v&e;}G--9hF-1 z_F~P77Ah+?9ZT(D*TZ!-d0dKHSP~|CgWo^yh%%&VB+jg5dkNhz%7B$AAy=WS> z=B!N3W$6=tKlYjPJK%%R_O~s@m?QoslKw@@SpK|7%|rv$fsz4+M*1|Df`Tsjb2e@q zQvY$^hNJ7GrMb|x0AeYQr7u^ru^*zJjJ0FfMXgee831|}vG?#m55;2|<=lJN;WJ1F z?V6-d^jIL{aOMc1F^d5r3MNQKd}4hXfgi;txJti`xa}a*hhi0tAEAowVr!Pdm^wK1 zn!xGn+)t4%IlU;Yt>p?m@ncvEu@0j&3nJLM)(fM8WUXbV84#lAQnx|A7^DF=YYiab z9mG+H6_CPgIiNUw)Gb95VMV0~kU~&=bu7LUc@zAl~<-1Do|UFfUG%=prAXTmm1ZuETWPHof6>Csf8-^ z5%f@6Jj>`7KxX$bzdvFOM3e^vtgTR~Rd{U)yRVr{@1f&q_9j@ASaU3Aq272LUPd9;21F zRfD>0reHk$&EYV_dk3?0OXO~1HilV3mZX9j>@A{61>wFv-@MO0#d64{rsPmUelb>X z%ob2V(4v=Yr7eXi?9W57Pxl*z8~++}R8~;qwgW^?2TZ2QB|$!HY=0X^fP3SV6$L*z`r3~v+p>I-=4 z{mQ_0FOZJ%`;)Cv)}{!gVQglMH&kW@pda`NyWqmpsUEj3`cn*bTz0fB*FNksK>vx7 zWX&)OPgAc)-~Ur4=*yp&BQt+92I1~g&YVdqRTuXNIbroo_cbr|%vjwPDRR#l3xa`5 zDn*=y!8P73OzcmT-Kh+SLYLRr*Mk7r*KjZPXT3*gF=DEVV*~lwVLXvZSQxqwUa7md zHbY|Z1-HvGUBYM8zAq;MQxVDm7ByFtj815ECl04Ou=w`wQ1p9u;GgUV?!Wr_MB1u; zyM(mVdLaTaT!VE?3~$y=#zl{XsdH4O;<;`Z&g0(CbR<9EB)N+S>~+@{LeeqIH$Vco z8s)Mb0BkFm;;QH8YLGNSKh>%f&!~uh;wBxE_}x!;T{Cv0^z$gokoABjBNozCWx>#y zh_EUQ^$a)Q8Ma46zbOe-`W3ooZUqg81~6ceS8o(M{uR^YO8*`f_Vik`)Q@4}y)0`( zgpry(_zWNS30xG*hs8>`QqgP2^L7paR=p@;P|^;tL|R{F_Y-AQbLMbhb~F?0l}m z?@Xe1LG3r-c0ozJ)#NMm95S%DQ4i?jeWvll8%Ir#*c&a)_<8}dugEiqdU*&{RcWPp z0v>khM`>9`iG5sduRKpAIZvp1PA!5_&3v1q8>FpgfL8ghPr6?m$EjZ59_;VGoAQ7X zTESI+l|;GGNi9}6_bACAv@3?)F9uwVM|N2Z!eDSQdw*5Ax$Jmv`{3+YW~2{Mc}jAu|pdK}V? zq%MM-XWK-V53@0)K3%u9et~(tkS=aB=?9bhm*Iv)+zs~Js zW;4WKKxBSO8^s9Va2WQ__!zLmh8IK_aALAIXB*1hKU03XGcAbXWH3bXICCPNg%r;O z!u0-}IK61G!9k9M0=~b=V#YhsnU-X-^ncP9cA47HaJ(y?8L=g()Oa8QiPRC2k!4<$ z!@2Okc61>d_~#i>Og8@o>dX0tK8z^GwC2hdLn#Q$m&!$6Rh)yx1Uy4Qf)+_6$L`R3 z_lk!^8SYnH#)`KyO4H$po!YqwcrxS4xPn_G+%TyH)a58s=P3Q$$qk-z zVx;QT%hqGd)MaZYYQV%3_m=~ge!8eI+znraqaGreW;4VAc>rTLS;mPZaSyhfE#sIv z1rov1kOLH%b^06~m4)o5af6Vw@R&4U zf7FaYd?DS6W>M}5dK&>)>Q6Jp-g04d8+HttJ#Zg8+O}m;C?Zh48O3-2Ohty-hzcom zgNTHPgYI-W+ualeM^%peguyI0OGeBvVB2TV&KC3egyy{TRt1lV{Z&7VQ@Pg$H5<>n zYb#OAQ=5eCWBQfU#$T8IaM(K1lS38P5)p|KhM6j1O$p}^&*N;Xdzt09US|^XtjM1< zh;)awT=G;-HNx;!KGzn5{o$=OQcX9#-4rEBGn?Xg*-j1ZBqkArlc;I6D9quELWu}Y zd!ZvJP4VDnfQsu5gW=!NnbCYxb$srYMDC4l7LF6|cZA=z;dgay41Je$poroL-FQIB zY|5?&bO&A1~`bdYUq=0%Gli?)NSv8+>5tvV^@`2&Ea%Sn)>OC?w!UCKw! zft?atn?s>7%toPk|+7~eAc}lR11WQ!y}f^JqPpwD~w(c zc1STWGsr&`Ai23m&i*-C!9=w+lVD}T2r*HDnWMU1;8&z2)Y}{f`^9cMP?6^}QktEf z!$XgZG&Wh?ZaYztsfNLAY}2)nY#y7s0`;0hUt|%v!xe<8b#LrEEI;DC1N6{uhK$8R zPw!^G{%QE)drKCagJ}N(L3_*uOEJ*)U9gCJWEzK86QswQ|>w(s`37-cUo` zl4fh1E}z#~WKFSsHWLl%GSdFQpE>yjrf0;(T}!4HYTJM3B(l>lqs$SnA>4YGrGHCUyTme|XN>#ZS{hRh$lQ&!&P zgTPL2_@}v(fXdb#l%g+B7yZVm`KkzG#*G_&N)B;0*q)?h{Y4!V^!&}~i+k3JtDVwS zIGp-^O_%O*?c3}2T`o{ZAI0r988~Lln^<+{x^lgz8*PeWNi>jXc9aMbuQICbNNQAk z+Ux-2zU#zK{LZ-0x;NEkF~F}yeQ}D%;1ZvetyiI)yEIHcfk_-=8L zRar0Ft894U6#3dNb2I~Np}gHx@z=7#2~MFn(C;ODW_V6Bk0xlfl!jXU@jZ>JH&W?= znBj$C$v1dXhCyG~7_vhGjn@yBR|rx^5YtEM(Kmqmg?!)}9cJ%jv%{xv-V^)N4M@-p zk^VzsVUAzU(@fgD;LdVz-W(XrsiC4HFar%NWT`w=h$)WA=Cnw`jN7Q<8KhfY!__TD zj`h8KLJqsY9>Ex=Heg2b01c&*eY?eN2|E6-du&;R0+JEEXBg58b#0F!&=>dZ7r?{~ z>C-YV<8~|B1ar!nuDXQp#8?vyB!8%~O{m>!)GhLGnZ*&EvYjvdQzVDVV;pqr_`nGV zc7047|BC07la*4yTh%Dz_0;Z&Jr$-`<+k{?iOy$W`m3zczV5~Dw+ZPdtmiuCYS_6M zX-9|9EFlX{)Wz@c0g97oVEfdP>^_Y+7{x(ijQQ})SshlOOJ|*AH5}*~;(G^{^`3P~G*_wZ*K&#kH^R*Lm=rS#XT(Wz^bLTwB= zGOOPW0X^@O^-3!G!BrxB8802j_?J5KSA>_A;+}p@tS56mcOgxg&;YTST@}=l9X8ND z&B8BEFObfzH-D4lp$AG|R^;FB$aNzPM7Bi61IdzIs8Xu!CRi3FNma&S+>A&IcZNV#cRm>O6phgr1a3$8V$M2?xym502?quw*tMq%C^if_^t?5fU>itDFpW}Db8uoCUu zl_UxAOrr%^S!)Fp4QuVoXwrZvWFuglT@pCSgmH`6#K>XtRRn;Y)7qR!I~{`jV(`gE z>a}I`VzY{fO3B325*{=!$#uiX}WiZwdqrCx$}^3w%n|MA;d((;-$^%(wT=!QOm2~;b?lg2>F8bkH14<~lpd0!IgpFK z^GBxgH;Se(#Il-QQvMk-Z3=yxV`Bf)&uU>j`$?xFlMR>p_5d$5R9jyz8JT;M&+B1T zk*SenmZh#|y?KJa6R4fTAI}wu;0|+i$5n9z65tuXtJCk`o^Bv3cOlL+@jORRi*Tq6 zDa7u&9|qGH=8Kd$DTChR2SVRVSp7FCa5;8;j<14l5QX@I+PIBERTWyCgy;D4^N93n^*>oY} z4J3`@MN*wq_7CCpn<9p&!P}lo2`(4rJVuI{*$@$><7l(KQY_^6zxI_XK|XUY;Jf)uU3Crum#$11bnO(~Pbu++1)!5j_Qb%Vdps zVs=pV)75Ksa8?L$$LlthAqPDU@Rola^;!QZi;=VE^*A&A^IyA4Sbch~$G{lp-hXzL z+wlLrt89(Uwc>Gms4}|sSxNARQ`tKA_w}HjIM5eW7uusG6_OY`8L7?`(LEJ zbx_^k_AHp-a&S9XaCdhI?(XjH?hx$Y?(P=c-QC^YA-Dzzfyej$W@@Hx&D^T{Ue&43 z|EFrNy?U?iUi}uw0>l_`Hc2K*s5r?a2MnTy8HB?*?VPbB;ZP{+kT>r%P#GDxf;7ZO zyWIK4``dVrpjvF_5&=h>Ju|g*huu4N+`i(kf|_S+b$H@1G?APQtjcD zPP@GHj3#2J*8f8G$jG^sGQnfBbpSwRm#^Qr?zvYKI*bsC4zxBp)u$OO z-rrKt{*2%?)DzbCY4%?($RHIEN(smwFGd~-Ax261dowIw1;4c#l?;%9 zs0mn;7&TvKXPTRK%vfX#-t=55@~Br(d2KxiD=DfB5s>d7I@D9xaV1fQGL%$xb+2v0 z&N601TFO%n3AZ#s$Ql6*h-hzs?;w$;+U<&y(;JQFNzpS!;SEXxDuRBMb~$$TmZsQX z{Io*4OmX4!4&sm=;%_PV9fkZy8p*j!-XwV?xKtCIf%d}}|5vY>>Vf@i`pQ+v(LgiF@@rZ~-*QL|^`n>|nq+8>F0cT|S z^tkMN<#QX?Ir!Z})VG5`HutEtZLM77BdVk7L6xKSpH7R@G+INdI)!OQJ$X+*HDBZ< zcs~LJ`ee_6&ex;4QD>WBiubx!Inel~KPX|D!zl5l-Iyvj2IRr?dZnM2p~mp8ph{aQ!1Z$zC83=K*;n7WP9u{Q8k}m)YLA@M@6uMxCWcVm9f_`)h8>QJ zg5pC+q&+81x3NT!3rE*#70gckx)}PD>{MGL-sl!`9u@%uTE7h5g=wRyIX^YB(yqnK zXO$t!7O^A|i12h_O$D&Jm~twLu_0=MY*HGWu+oJr=w;hpDw6|+@Gtj|N-vIEJF_(9 zgeIp`kOA{8>R#lF8-)6F0edpp*{_;ZN>cMEG%!u|iUq>)D%`@Cht)Jv5r)*RE+MMR zmFiCtAj_G-TO;Gv{y2@5OmIl;R!}o%^**<-x$046Qo#N=yvdpnT_Dx5_Tn|5=$N<0R|n(hWtv4VLyE)0|FI^bwP(dqjzglY*SViVX9O|p<&#yxwOEKI zFgs=3T6d=bT;o1RAOw>sc{Y)V25}vd{t_BA=vyP?7h_@Dr^+vv%V);r$Kcr z(%SFbon99(@s}2fud4`W`<5k zMxL%=ev+9+mezScyIX&KCx454h;6}Z`f4zB=Cl#IdCnHeu5jhs`mkjOLwj_$yh|Re z`&mowXn-fNpNL89TsQ#LBak%5D1z5mm6_WelTjkl5Q+?z4cjFKLKMI)PpfqYsZ$Ay zQ=pm~>(c16D!XAMBTXKn>bj!D`18$)j#YZhHSqnbcVxtB0ZwySFx|uDE{Lxd+`A@@ zox}i=&m(|8VsSFu>Y@7C4`47mirp`JcZSC`Um#D`Q*dVLn=u2db7y>?JKb3LYenGg zl*$(lE0f^w)k1FDCVQHrc!r$8RQ7`P&%92bH^>eh{L2>+nE!;PzW>*yDCKJF@Nayh zsJRLr$6g~2}*PUSW#t)-nP(n%RI~coTVLDN%mE?{TH*FB*Uf0yY+axR#3&6=fYmb2;0P7 z$;s(cW?M+{*;=xxECUAXReDLYCO!Is+}N5M(j*~J_-EIj^ETAqE^h~_&p-YGrz#*ymVFxseXCW=b zitRGJ6aGzTolJY>#oSbkc#b;A2Ku(2RQ_bij?=-3;7L)w&uvEu9FYYLO)J3|1?FFC zP@Z6zrrDQns8SbnxI3u#*=`nkR;IXZIqFn9Pq<1^e>0HD7vn8*2r+{KOk}6zf;MY) zL%G{=r^3ot#y9Jm=(^Hu3RC?5R>J)8hBxa#TYm=Q?oNBf^2};v+O8U8P+x?Ki-0H* z`NLKRAtaPx2u#|t&OimZUncw|*^^e68Nxe;9DsyUW#)|wNA5`cFdzm(X{`(KJfv^> zf@4oGwM>L$on4-DWzr5{ugqRnUTF%|V2k^6%u7|`2R~JI7T(v3*Vmt<@C|I%+9Y;c z64=`QXs*!MBy~*`@hv)`w(M}ZDs{K_c>`Ga+@b#^kbESPobmH)6jE2qk28&K4FAak z#Rwx2zRVf`D+zHE?-SBlaYHrl`+zt&B9CH6NHhPM6~{sP%VMb_2B$1vX}DEuz>Czi zR{-dv4-F@=Py(S?F~Wunf*Jm$`D*&Zf%qNP@byvMp(60ltqA1YvX48=E~MD0Qjlir zG;I`cKS2^K(S>|hU-?@<%^gO!`UwhZE|V{4%>y!$fV2u~D^+$hp4$mRTE+Txpt_Wp zc7n8+R5<%C+QjZAI+Ur&^OwKO2#LdrJfQ32TY zb*pWDq$mWK5scn^kpWCmxV%}r%y@!ns!b{B=akc@SA@vQ$cKsiv!XZ_ni?@a&%y4* z6^D5@m-jTs&gA>^%NhKSKN<#U_isPjCg^7FWb`nqS$!?ntI@kBvej7{oEJhuJQG)* zWX|9XQ#?dD&$pYy0+?vsTRe)D68T$9=BnBdVi<+nCDV6~ptJI?fAF~WG3s)&bd+eA zgwd~6)1_kfiDtFkdAM7^Kxai-`h~wFITdQ81 zzi*m?2g)W)RREB@jl=i2h3~#2G)|)188L?Awhl4Yu4Ifc?tI1-K}_80Q2zxfD)E^w z7hk4X`}o&I_UEq84gRePaxOnHJNMkX>$zc?JthVLT&W)^2Sf~J_w1H@6xT3Pimv~D zEsh&75vWfyk~s6Sw+?Z6-+qI}FalnzdRy`8FJ_c7)=Py`Pq+(djwDU{iTw zx{q(REOCAj-w@k zyEo;-ZWeNhw%m4DwOxoG3O`4T=CivPH9n_Wr9X%lXV#Rf5iOukSqeglhA20uHeE^! z-{D+Nyq0h9)Uf>V``4;A+!rCpfzN8`|Bvd(|NdblWAg71FzH_qaO7hF(`rHq^D~{o zz6%B(7*Zk;2oy#z0Q{?9vXjUrXxFmYZ&iC@kTNJqGoFtl3C2ClR+F@R^FH-1CSKE7 zd>?fXmrQRpcae?Q#fqHjE zr776t_dTKTY#^0xtujr{5F1RYC=H+(cMyaaRgqg~SbjbKO+Kta+0@?@0|}0hb-ylo zHD>)XRG_)u+JP2ls0^mLV~*iln62pe zcgG`0=6VN|L`~`mGSFO?9T{jy@THuynm~ejEV7l0?h~Lv?bM*ZR(f6+#XYrrn=1C( z82uc|X@OJFfBfZoFfnu4v!6fAv~qO~*^?z0xIe*q1MlBxErh+E7s2iam4BJ*`isQf z%ec&<{a{$5Bm>P$#jfq`ieh))&hUVN+PYbDJGy}~iE zn8Gl?Q(1h*7{G2&={UdiipGgwA%{yKv7YXZUuW3xI2xuQzNZnq2OvLKG-pz%R(T8C z{7R254c)pK`H&V<8==U1CN%CE=hPZl0kxMw^<%k8F~@KGJ#bK(&NobZ2>fsdH^#WT ziC(m$(4z1M>QFXf$2L_0oAsz&9GiJ%e(pcuYTk}N!tV2E7yie0j?jM%u4F!!^~$;0 z8ksu%dpG#h))&)NMh+?624Z#A)1`{q(P3sHN99WrF~yO;8kI~G(Q3Mlxk>G__>Vx# zwgUfeaeWmXGJ(ZoUurtb$>hstH<(WUdwV~@@nt5?Tm!K`qiZ6&7uH4(t-Dd!vZEV4 z|8pUsGkjb6T5;#pxpy-lq;{g3fgQ(N6~zu>gZS&P!UdvXu~sUPyUAG1AK56%fg8`w zGhM%4>{s49=2}$YN_tO9?38icyCc;-s!=dupS4F_O%o5pWG~Q|N?5AuxQYyr5#hmb zRs=8nt4JK{TzPtV7THYlLM|hHl{a^5ZG_*1Zb-{lqkdQ zOr#CcLjFT=URFksI3UQ|yn^x2J2}m+@&NMJQ+Mo0s>r6ZI6Dh z&eaR|?<|cstP{?QeK>v6clQFfA2LxS)(SInWij0al~hp5{#~|R(e2MS0<)R)Zy~}9 zBn?tb7#19Tm^EI9lF8tq-WcE7t+t$EvfSqj=ivZ0?QFRdViL`D*sMb0olbm$(J1-Q zh^)+y!|_9l@Z!z{nnjq=4UJyXJO!*srX;1U8TfqU)_1^id2aWZ;iTa)A`tHp9Z~p6 z8pVtT3(|lD__~s7TC)n7>I=7+mTQTHTHUF_oiHwUwXP_FIr{(|CkVH7O-h%{A0`KBEggjJ<|%J$x4|c-*7@a0JUgndHp*a#%FTp zva}O!3M{T!Ltirsf0@QeZ0fX&SWdR1kDHjqxy5C}NBBpu*VR$OEH~+|Afz?ElfxWm zzu)fsPb~s|UNCv!kRX{cn$>$=_3>mIJ>+V8@9xXi?i(Gw&Sls7-y$dF{F$j(Halqj z(TNm$&#f%ISfvfDbFXk?=fhxYT0GxucE$n<|U@3AxL zm0D=Jl^Yx6*5p~DE|?KaDmqDWF+|g;`6T87`=^w-N2Vfi0k?d0$$E!&ebWkqfj3F1 z?7OWo0;4w-$!q>zk|ShSGsWgspf@C57M?5SJ?|K835t@yurGkv%E^yE-^gWHabWVo zi4JGDOxGwrw62whTyyF9=&M<30m9imf?tKz5jvS3R^+}28-NIbo{H0+(*^o>z>MEc z{fs)=in(I;6#>Y42B(#X&!!n<_zX;o_jhq8x0z1W7W0+q_~FB5C!*8x6mIez;ikpTp{$5@c;npi9FCiTlVrxSEQ!4y|9JRn{Y=A5bfc|YGiEmEzwN3ukNHom@ zZ3}98uQOaYY&=4T(GfT!Wtok`G(NH2LrwJ>?}$G@v?<*a;r z57yhZJ>sX$j$?zOY-hA1cq(I`LwkhV4z48q7u?h%zv69kR`IAb8;#X5K4JYTG|>&! z5JKgPjyRfdyAiM2OK|ni~?dze4H#Ly`};`fOMQGO4bHK&%-rIAu5}yg)J>B$;hT zEHk4>P9-VX~xU`WOni^)yo$ZEIy9P?gY=+3(~pAm8P`^JbFvpu%3f-@y5B-wz> zc-^#e$ z60KY7r<5pA5PW1rKZ5OUsc2~np>qu(TKaCe9GjzJZy>LBr8kRzb3A)R_OW~Eku|fn zzff)yNv8OlMlNB<7>m`l2fE*WGqvee_aImaTf&TZ{VGW`-YSu9@`7DWqqEoZsab`F zxfcCZX$tY>3(`7-tFhw=I%PJ)pZw-inFrsFr|kbor=c+hsmJT z`wC*jVMe_ZicL$0n&S)gU;V0%0G1*K&Ke5=P}oRjAdxCJJdZ-agO#Y4ItE=T(Od#s zY=zr*zqyqC0HalE-2|GNFc7`8WoU?cvCMo$L@dB2l;}yrONr0$IiYK`uqIP*4S?60 zNTW=#rnA-$Bu@w@;#V@|Jw16{DBy`Haz&#Tw=!`gl9A^M*%(-~#vF7EgMeLxjf7jo zB@URcEQGS$ZlCeoJg;-}j=%Tp5RT#zX%+V2N#hTZH6v$jDAnLA%wi5lVhV5l+qC~B>XWgzw{~?o*ZbBSGh5}(Pn<#~d zZ(x0h>3`bS+EWyMK~G@mzhPA$T`T;~7Lfo)lD+AJCjXt|J;Q%;;e6GWy7TesNbp?% z5RjRY9a&Y5O=CQ?m}SPzv=M$*Qn*%P#f#JFbvfQU>L4>^KZvKjU_>>c#b7h-o6nQJ zRFuw9T2*-*ge;*F%F>wtW$?2NPBF^FdvA832n$G1%Um zjAbDyIjGS$7p);R!=uxtLxe*!jj%L1lrT7L>BigVivS8H89qb_(b{q{9C1;0M+MV| zvL2SCSYSH`VM@p`VrwZlz?r|@6o?9f`^c6FXZC(~ZAFrZKstfQSbA%Q!;_d*w9&Gn)O`Qo~_g(E$FQH8}-0J&6WJrt;qyW z*>h4xmz#=Fi>CpsJL`DT-qs2%#~{oA!HT@lHX+snqb+AXOO>W0@5FVae#<4>FBw1} z1mLT&w}$hYTZm#LZj{&n3)t=HOkF6?Lt<*Xj`)5aZ}r>odtQ7uZJAg=+I8Vbte_6Y zskd#ZE~ZZ_xkHuMs}C?A3(%ijiyV}{ax%GOnC2Mu!W3~1Cfsy;Ie?JxtRY8TA!1M* zL5s=v^H(0G>R}(=h^zpAFP&M1hTuVoCD+eFZ8N<-h(N#P5B#tB_pzUUX0tr{juQf8 zUBwwdzQ(h)FzKv&5m>D0zqALlXbzY-jBmxFrgMGmG30#TIFycM$rC%(C9MPx!36GUBOcwjTKZHBF7I#rqY`^f zP#@HAdu(V5deLq8g;DOEo_pla3k?__Rk~2|JBNJ{YLDO<)9*e5l+~eYDrYFShyDs> zVCK~GqYeC}Co)S^tGxN!+M5&{XC>^qs~XD}o~~oj!F zCzXNOb62MzP>Td8bw(a3*vG_y^l)qD8g9h(#(7bPUAhlZJha{b_JN2u(M#`OUKr07PH2PX49r~~EouLMbs*Q6d;HDdU1P*&- z1z-YyN_oRa-{V?nc6~w95~(_8Ug7WDZxMaEfGOU`uoM3eNynCo8+cGDpYZnSyMk{o zZkazQa_)zE_2>S*sySWK;~cN@M{x$MX(ycUt9`dtcPxT$N(&>iKVnZWNvBDMQU^#s zsM5$4S+b^tj_eVC?-?L!r@51K$Q#KeW^_m}ceCph_$4q!CuVhASp+gkrx*GD`LS+m zR5}^}hNev41RFKC93_28d!ogLFtB-%jy$yCW1@NNl8U081kyA})v6Gq=uA zq`yPseVR-gw0LaxKr~^Fg0De*Yq@fHMSL2-qiB*h=Ky_fm{QMOiC-jJZHhF0%`bj_ zRrXHs&jndw0NStk!~mTC(Y5v8KlEiyT`cVX-9)b@_-S4N`Wn})tkS}MO-NX6Eh(<* zlGK2M1e25nN3AOUt_mq?wJt=F8J=#@V0{@QsIxa7ds>zHO{*Nyiso@y+FxaeqoE>N zk}Gaj7^&ml>^SrH_V3HdRsWCsKe=D{hv`7Ylvkb`o3U@B2Ye{h3~D)mJg71IJ4hA>EE;gh_qHsQllp+%(8e0u5-O9vO(TjXoG;YZFShStEJ+0; z`C-^{m8acUH?=2KKQ%yIqEIx4Jb@Xq@y`I!@@C*FcTg9pa5*<%MSIJ?#yc_o31?v6 z5UZwT1&ynN0h7FXr#?mIRo`;yDKg)KZtpKY*hgh2J?3mffpX ziS<*y`VYy~GnwW|==GSjN2x)gOf>3Tz1!Dl(4?&k5LGl*YOjJnxO@*otMiX&Xyjigo2jnV-=ia>-BW<0qAGOgA5j5BhEYJ zY2(cJSqIKDo8i726s@&!*NBC;XwBd1S%v1H9Bw`YuZ)f~cXM|~!Pv)w~{ftms1N2S|7^bD9dddnEL3zijkNaCfW~zml~5un!6nxGA0d@NE7HI&7^#-GG!-+v@=zW>*-{(nmPA3RUW^gm{X>_lDbPec#e zv78?)vgX&q?J0=HVUz5$MX$?1rd$#tT#l5Y?~ETa+mu_K?!745^}iESfYW;hf0Gt^ zydc$L)JvkDoJ>!5&$*vo+af64=?1qb9J>+9oXx%Y4!wSoudvLqoH`Cy=<)DAwqULu zn`{4vm;bH`rQe_KBLCa(7!A*6Zel z4{G|5Xpmq*pQ(*SMHqMzwKa`5EyJ78SjR7JJW{iIRPxzf7-fFInd)mBGd~H1mCK9? z#k&Jwds7~~Vq#ps)%x2gu`%nG7hRH-(8ru{gnr}InKpza1Gx;)q1R@NFfUsW)s4?~ zIe@$}D@)p7&)O?z;`R@i2E2@K5jb|3l3t9a)Uk@c*%f3AkZs;M;B%nX;0CWGS*AM8 zLo>xmUC76Z^>-c>N|2)C-&l-B%N*Z}*3=|1cA&%>3%1a9D+v}Em-napgEj*I7%j@e z`)>g`8Q(9)B=W?Lv`X}UBuhy?Qfd{beMbSfQ~g@t6+Mu$zNZ43#GOkKELz-yLsWN{KU#$EgJs>t@=^zo4~|(Vh6q*Dqf#K9Ab}zXOv0|KOPY z&mkM)f%Q;XS~}TGA0tg1Nx%?7MUIG*K{Z;H)i9v|GYlvGDi}HjK`vv~KM4_}s!bOr zjb%#%MonB+w+u-m*_%{Ft)aeIC9UgN)fCaJRq=MR`R8~lA)gucub%+(b+!4Wl?gK`0lUr$iFel-KmePN2m(?GxDRVDGfeAZL< zHmQ@=KpNjB)o!g+3}nLx$!j%Stak9Lycv5)G@%;CO2fw(HpJk&>UrkYNjOOuNyO3x z3>ZQKvcR=-3kRa28MD>mZ=vp@maencPt|34ZCdKR;c=)AH8Xg_Yralm12(FCF~3Ahnnnt7;bgBr{}B+7&TXS z1aj1zK4+((!Zz+xhic-Tl4G0Pg*_q@KE6$j)0+-WxY93wE+jmlp1!s-7Mc}8v_Giq zM;G1)fP~~_f|AuCbequ0u#`vfPM+F>(2!*yL*QlOz`oDb<<&dnLz(x&;KBeU_ZXMq zD;YC_yZSM*_8lEMrzk0-ZqT_j^7}M67od#uvPjW#Djz&_Xz;$xE6uXep*vME#@r^a z8GMEcAMZ+W2-3+baPRpj7=p8)`Q4pSjT=-k4nZj!20{r0_EC`rosklV7vdVq37Vd? z`ZJSAb0cBUi7bN2_|TC)VE6pQu@PY&KVC?ATgb`>hpARLM>A4|D5 z=@hAknNVvF3|9w+gpE?=JjFRR$*ujDlF~Jm?G}t(QZF3$gdmQ0#=0e`pI`QVlOHB4#2zhK6-i z;i(SM(1apFe*CBUK(fseF6*dLUiGpt(~!B7nm9x#T6^l7WSNr192r`_SA;GFLK?@6 zGlcqZIPVt5ljas3LX`u)&=J+XSozBed+Rs9Lc!+wDFmDc)hb*`X~FfbUR7~yhOz-c z;2h+k4%E=8iPP_Mli*Gmf^g*{O*m>Smed#Ob^8T_JS$s@KpbPt-_bE?@s0Fhsejtd z0XPq#UuC4=g(QW*n)^>a!ZYC;7Q2X2p6{~$q5sHQR@MAtF#Zr9HV zjV#{}OAI}Tb_`%9XZn*Qkrey>NrIf2HygK243Lnv2DV~+&tgJ&>hr5MMyz#qTQy*K zgEf>Yur!}{;_l|m60ANis;Ny=A0W}$qOHF@0B!c`lLDLup_D$gYh#(u_>;gwx9xi{0F~s z$gRAr!PlP~0s%d@bteR{>K=v>=(qZew-Dz*A4w6K!mPupswcLWY?JKrtM6n3Kb;*I zv|Ec*ot-E5NT9j{_spUvxSe)jIrb&YyTdC!cOG`+9;W9l?Pk&5h`5On>?+K`& z)Bk=6#QTnu`~&?fj4AAbj3pbC8l^R)P>z$EvT$L-#;6D!F1BvRzBrLjf<3DuX;{>f zl6N?2{Hd-OjAjT3Q>MToRxS88+<^dGJjE%^NSI}vGvywlA3K~GRVuAv=^Z6p+Q^Wy zcDi~go9N1u;Wn;%Kv_!K+-|`pEg*gH5+}5D45Pk8szqHqD^D|+of_b4n>Iki7b5nT zzF9q324l5twz7K^-=$i`$1=lT7Ay1vlq;&^ijv$Wak(P7>vNScyYgs}57@CXx zPbXbc`<^75Qu4GTo&W`z*!n$-?#f?+OP4AfT%O;z(9D6wwueNs)C&;$C$e&f->Ch# zstvi+6qsTTkjY(;QZOhKvWWMOf3Y=|=hZ3=G&m$6Q0$xh)UvS4*=ZWSw1%_bOum_a zZbZ+5;kZG{zE{qc_3NQgamiiMJ$^`a?JMKJfN>|iK>4_TbUfb)-|`_a9^!(5ZoiWK zK*BxPLDEmtjaEjG8!7Fl@__|?se%v=<@pYOvN zQ9k*x+}qJ*-GM8?Q*(1$3ybXJTaHCCnUzlVjtb}sUj7DzyjMuSRY{)Jgtp@_UPFLF zEx-0hohIS@`a?hRDk(YWHn^O&wh#2}!AgO&hNMn02z9AIVP(XbxG>!nZpS3lPRgvK ztNLdN=m^gQt#cm6UbVe#6g1^S$?9!E>|)C?GKV*7P}V8hC(TN!P&I*^aP-C+b3cIE zphTl5r?I)soeL5O>O}7ZTOsrL6upc^sINPK_n?Y%{Eg4D%?bOncvpR%oA>fetZ)o? z&l+xTsTAEvNRqGhS~n6 zqYK*kbAZ6UNvZz=y@}Pqx*41ZTri`D!w!Sd~xx?2TATC>a&?J@gGHsUh zH555ggSRY1u^=zrxGifyZ3if1?Bd5_XsbBt$ZlFa^Zex5v+LY|P{TYO^EcrLvAWJ1 zz+J2|WvZOsA|nzl~Y2y4GlE*(Z3$PnG`$&$PODZAt{XiCxFuKcn!IOa_7I7g(}FT83v!1pZP?RiO!9+A+B_WRb-PayC(${-7` zD>5TL4(t70!75P6Uzl_|n7=2YWEJY$W{n^{HV2BYMi9A%F*wURc3=AF#!tDI`yT4q z)*~ZFKEoh0ALjV;GP%{t=SGk~2s18!khoG_x`5&f>{}AHXU@+dJEnp#pZIVe$)Kq$ z=;{%5)>SYL$8*(JLzkXleWrE}8&~ZOEHI&TvPc9-on;5EC56wEXu1A zjQp|v!Kr1C%FE(|Inv)XG_S94R`WUAi}I1DrOE;%1-X)cE7SbkM0$`O{|rAk6Tki~ zli#MjJwA7N4E;L%X1PdE7K;>t{ec2VIVctH#TELS|N08{R};u&U+SkQ(v$W|rs&%T zlD`zn-~u1FfGSrPJ$SpYmM7RoEWEH)h^N2$v4{xNUqD3rEzsKm2`-uHv<)ZeK-0G+ zhG&mOzT2YZB#;G}NUHh?>hPcN7{6Z2G@LXKn0Q0Wki{)%8Hxcdnfy(nm(SClO>^Hs#n&QUUkYh)g=!9VUbbPV$w5kzbPJ)*P;8afbs z?Te)-rM8W@Q1h|E1gW--wAtD($@&I~g6ZXOuOPFslpk#oJDqB2<_wl0kWYBdG+D+o zb&dT(-g5JHoIMyRN5$!T^>nk5gHDFBPCT4ieN-El3L9{)j>T*;ICuK6mzg4)+C`w2 zF^L@_VeeF#V?L!jMIbyuFZy#_*dGaIPUUzLMo#rq@|HAJB5n5UzP1F_1{?hjIPVD{Nm$3T85CaAAa1nuX(I#J-z_f-IAa za)Vql7@Yv%e3MSyPJbTy_Vq7Df;NE@3VZLyCwrwMu=)`7D3ybE$ zlpGqyJe~S0>y?{RXHpyl!j1!_Ga@$_0-vI5pO}LxndOQS{`t%U#{t$1iA5O!0xO-G z37{+mSEZTKrB3Q>(iE#1+mH<{!t`7oqsHi$q=;8EzETvvAmYYsyV-cemUEY)^L;_N zRXDW2EYj`gnvz3BMNZD|W|SmfH(i1CXO7c$t@b+>k$e;NSUB2y^f_b60t3#Ir1`%v zfnr^8v&RsiFp$(*g$!5o3OY zaKdGA;;8Lv3_L<1>m$wPh7{pgp-@1bJl;TO-+NKH6KT_equsRB+Yp;&l+FvK{$b_& z`D6fZL6ZPAi;2nQp8(F8Gss6oobkkn{Pe?Zm9FsY8wo7BWKCWVBk+u$ldRu&)*&}E zPk6@zZEiY)icHDOrFT1Hvom4fJ2YKAMEzEfCVHx>z|b_xs{s%1CRAv@MN-`~`R#NN zp3WE1#c!Y`lwmC^1wFV>SH&SAua#2Bt_$I!>xGp1=n0RvM!0IZ&>$o5mAGyPkzwSkH~+(MF-i(S z`ex2jx>S(*1LyBlG$IdKVh=tNdd*w;XQ1=7EG7<OIGoIT##_?N(M8GS6m*Bz z)-Ih@No<_As>s_trT)$MuZJc1QmqMrwDrR?1f#Nl-k(hi6VYu)tm+ell=Vg9S7PZ< zRurDCN+^3U@5;x&MWqUH>0!nj(*T@kc5}JgFrfbR6N{<(;UC|mMd|)K9zfoAbi?L@ zrth+|j7~M@izV)&o^V>tA8;xZ&bk1@n0~{Dr(RGPKBDRJkUM*uBkppelQI~2oT20G zh)dpLY=t-2Lx|iHRU1hQ?wFF_K)YBAy#e_&sFz&;B&x$gdE@N$msPyr_@o0rcfN#m zG0|1W8bcj9Pey=0irwAH-uh-KndStqpFq%uaa{ziG9a#ITK=JVk##9?kx}wYiiADDssk) zN|DUPIZsJo9L$|zEsBQ*y~Ibl=q*pUs34jQGFH_YV2S4b#U|9t&y|bPxcBTN9a9`V zzs7#r7kze=l5+47R#unLIy^p}uiD`Nm3pe)v>$~jp-#f`h~fpJ0q2Q_c_vKu?;yn2 zmTc}Qr(Ojodq$2LMobIyHYC3aqUJ?LAw9+gOmbM&yog=0?UZ#LpEs$)^_2}aglB_s zw>e^nrDK~bW~fBziTlbWLgH%_vr=TMY9Zs!zB$3Kz`A-BYhY<-;s=uQ%5ZxDK>N8Q z^L7D(=3nV&UA2BJ&BwO6#@H!BG9PD-L3!=BwZ<*blg-89-kOR7r%@718>!Mu=!Dl>N`#vmAm|Yc^uV0%J=vA<`AU8eN!pr9 z0wFMAV39)ftO?pR#}3RbhUd>5=NX#KgXz=%f%U6$OKvqWc{kPBgxoz@PI@^xD|s=d z+KC2!JKZ=r(0v&09sj52Hc1}=S^G|^3%$Zke;^03djLus{9*Z|N!gH1*$}a|D|2Km zv)ZoI?#IVQ^dt8W!!ImSG@e;uqg2G|Kmcqy`flHIPSS2$?3&+P$CpW?$ zLXOlK0h36eQ;SX3;KdJG6+tJg=2HA+#jdonK3x~`ZVDHb+kRt2;z~EGyb>E7#i%dv ze3K8&P;AWqPI@dPtkFxH&`Vy4va5`6Q+`JdZCddiNmt-+pOKD*V}v7%e`>jX<(#sW z-yFS;KQf0+K#nMWYkmp7q~p2g%@?~>Y+*}+f_es%a6c4Srky-ieffq!ftZCk9Z4L+ zYykaw3l_&DlPu*r$9h(-={6$v(92W7+aBr7FIRFKu6Ikv$#Rv4P*SEZ^Fx+#;xmFq zaq$BQV}aG=nrUHuHl1P&N6@%QfD}y#N%X(BT5nv6q|g4}XD!=vpXywrh%yXhNM(h? z2oc|*ZzHB=6F2X_=m|okXh+;T(?(3HM;gm$0f?AGQPUx3#nJn}7(#bYf|PJ@$w1hG z^+*rJcNFrd`bNn57RUm_gnoecgrBtJ-GG{6Oqw_K{D$yyz~Rc?Gc4rjdGnrIw*VJ} z?{girf8-%?Ieu&WqQ`+>H@Jc_?tzT0l5*z0%o2WJ@!M*U_Oo^WttUqx-qlG+prb16 zknZ|S?CM|EW*J$!$ZRc&m=-*HRmmrE$lu?tj+*w=ptyuDGf|)qW!Tsn78V6Lo3SIL z5PR!%JvJWrtYZSTose1Bg*C^%POgTyr(`-$Lf=-?&8Fr! z{5JFZ_M>Ct=69EJ%TQcb+(8yPcJ&o4GoY;e`vtn?SliNV(k&nf)5=M;v}99avvgo7NG@Q524DSO4o&IfY$cG8YAHyTQy=1g3(ID zwRC88Tr4UFyd3G-BfQ?yH9}S*pf)KxTUDQL;A~^2}#0yQcK1I)1<=xL{;IB=(*LwhDP83EcHGMM>dr(YZB^hN04>wK+rQq z0c9+uzs7b6Qt9A33_mr^cDBlgBz594iVhrIiPzDVXvyt(&lo<%;gNmnl6%)x^lm=) z)hxGQ-5Gd&?+BtGA_6aeDX^^tHB!kDb`(NM#Os)HY*BHgx@a-`1EF+$||%h!#3l1)P;7DyZJUwxZ3CzIl7-_wXd zj}mbg&Jj6iU*03!1IU0CyUXneV~-wsi+BrcR_X{kMv9=gWx7S@r^)G4A4K7$&KZ&) za()i+_|}8U5MgqgFp9|#Nwi3hDL&|M+s>)nNi>aWAA!A3S0~X)xB2i8UT9S1kz4Q> zYLxvfu}R2}=^i03!qfCSVrH;#-}$!aIneDJnt$m@>c0NI_HC0S+D_W*f^+S2Y`KJw zISxfPhw9ut9$E%HD{SI~345C?W=y0&=`^jySNk1^II~cPPv?CASCsQp7^Ez7ANbG#gNe;8?AKR$)7#zJ4 zZ!z|}x7?Kd*Dqzksk2lEoO|qrxR__&zO~;kG1i8+YlOY2GD4sHtS)?)R{x~bwJ?(+ zDB>qT9VIcnuDYr)|Ew#GcC7)PcNYrhoASVY}RQlh2*GF=ulRCDc| z)+F~2LAF9cjO2aK<3)9zKlrKnp{a;xFpN4N!6fJAT?~pZJFcYG7R0)K^5@51`U=d@Zk_}1h`mImPH=ySA zbALy$bV0a%=ci24yaa>##vmSA-)%Z;!oAyh`r_sG{xfReAk9$YDJY?90DtG!Ru46& z9^6z~KD_tfs$;A?y)L{>GgEz{87{bX#kx8n((~4j3FdkGr~2dF=QF++h^Zy4MXRFP zi|-nNVgzgj`n!Z)JAoV&Rq#R28Qtsjzoni)a7F6lmYKBb*sIjSBb^ULS_Tp&)85r3 zEu&nbp&^u&l>Mj8vjGwm>$AptINVL>Bos|_u#Tpe)Z8L~!VF(RnsFpxdzY4{W=e>9 za<{l9F0K#3JmU;`>mjKjQ5YkXV#Zv&r2F?AVy2XUlE# zx3A;Tf|ALDu4E zEuo^SxI}@Lu8T;K-Ac^%Cc&lKHM_9>3i(-tG^|D@Hf~?Q0Ymdz=JOj=dY#rvWVtybIBDrg?34gwO!>KF%@^3{aV`E)4 z3`d^oF2v&PFky%mdVk<%vW3DfmSfhf?E;hsztE}(A5{n%3EcTaSdH@vDnx4{$t*Wn zu$C!!ho`Id(4H#3Z=G7f@c{#6Lt@}Kp*l_LTXbsgQW6T!NWhaUkR2d^H9O!a&W6(f zb82SIyj!Dw%&D10B&~{SoF$*4!!;%1B>zeVwK-h@=DVE@^6G@oXp50?&d2P!;D_V8 zzh}EID4ZD!d2`{ZO80o@MD32B+kS5Q+LNS_#zW-D+zivXiSw`GFH-4?0dflGpZ6h8GtZ2iyJ-ceK?Z-!Z!z{aSUl=Ruj9NxYCr|wM}bq(F-=53!Spn%ozj1_#%%4H9V z+(*j@XOs~dMY+Kj<67giq2NHNDuIqnE|@v|hyr`NLOHE=vN_3v00;AG zHzNH6SOQY3T403n^sd18fGdZ3W{X>I#GG+carf=inmQIZAl_&9?)G7&y5%AQOCNB~XgT~^wy5JqeSD8I1zpA1p(4hT_d3RRYQsM?Z1+L+9Tf|g zYT=n-qZCY%k<~sqxk%zAIdiv`CFrWw^J>|xNNW?}s5+fM(bUvXfhSkp2<#09dT3`A zujjvfcPi#MI`a-w#SCu~@8i@`p{?j+J19gM=^I_tZyp~F|4EWk-`1tGBcLSN5baj+ z`B@w}U%ST;XS1O3tjFbS?pA?-!Ye1$&rxW}heApXGXn)h7F zfs4;CR@U@tG0=&Y?Hsd+=j^>bU8Z^p@8k4ar^Bxsct4CCBX87tO<;H#m?T}Py z^!5EJ+(&sEc4nW|-RhmBXs#ghiCyUp*Grx`O6#~g*ZWm@$b9{d94$BywMQ-U#hzy> zB`h`fQ$7XniQU-i+PGf2AoqG_@t|s(VEZE(BV1H^NEYM;paYg>K^gTEMD6UyeqpB1Xs$V{6BRA}FFkTHagl!u7cA!*u9qhSl_Jr}Zs!=XXG^yc@j?I`Wk z_pZ7%cKS({UY3E{cdAJe4#Ql7T)jOSvC;-!j#<)Qji=eBi$98%Sy`*xOvt%$;B&H+ z>qrZ5=|)->zmJB?;J>Sisw_@Ud1)MC%b(a0T2!>N_mo=)I@6h{E30C$s=2&cp)}I6 zgVjt;3W?HY(h{O;9ErMF_#kFlfmHZ5BTGQ4$gLvjdk;CH!`P&K<2dW$V^U<@`vjei zS{*U!8WFTHv5UP*gMYP1k6*N&z?iPG(!7irj=51f40d1ir% zJp4;fqLq<+N)S8qGy3xZ9dgerEidgCCeeMbYVVgbm07}0kYn5~7F!;ox_>Y4o_QDF z$g%H_PdB;PK38kx6W^vJL03U~Q>vk#thkrhH~OvE%o{_~kteNLEONquuO^hGEEEDi zBO2A5vy(apIoQZJLiphxx>iG8%{Afbx9kmTrzZ9B<>=#|>65UQ%L#k7-O)i!q9!O3 zEzaYsBkN{&ykKn1H0SP%+^U997Ed(aUp4NAE=j7bvSGN$mO)U=)$)RLIzap?Yd~2* zOxPP!Jeve+#v>M_XB9h1o+DhF#uWzMZ#_0KurNBKEv6**Fz6mZ!ejTS-0{Jyd7juI$mxK&7xCVNO?{Do+iSB=f=UeoHQmu7`vly22>0pSv&!bH=IL}g z+D+d}E?lFb{*>WmTo$XSXHd>%{&?X6vg*Sx=2M08BX~Piy?R^JlI}2g?nlsNdzZf0E+|=h2!*VjXl`7|f!f}!M!a=q#^7n5B#(k;fFs<%Y zy3t+4(f!Edl~0b-{X^7y!VsUlqARSAgfbPu7}!pZ1doz|`-eLVM@cU7^4v1Ko!R!? zTy^lpk)N~{eF{?~_A%ivvZqFwPu%+ya?#^UQ|r5#P~Jfr@h;_}FuRZVRl3h6NP7)E zDay+OE6SuNzTD~0{nT&ScFt4or#{0@{~deT2YlqqHJcbt`bK;|vh9tHh7}q4HzJ-e zUX{|pJ}dU?)Q|CG%Fj61cV37QR#YoZj0)Qw>tIq#?Y`ef_4}v6Pkvt|hjiIBqO$kx zJ4NHt%)eKx=yY|L<-iUq8lCj(i2mBwyOe19j|HVq%!HA=)4lU?e!}8KchT*`&LlqL zC-tT5ijTK^9_lSK%p4RA7j0EP_aJ`p+}9!R_GbLV4hOVCo^qV%_CeOL z)>vVArT4&-vnE&eT+1S&PaJ-oX(n)YE9z@M#>5$(SPXFiCQhCl+b&fZcW2AXWz7@H zdC^NJ`2zaKNM7?_9!NLX7d&8G7JM^ZSKp8HS!OoA0&kG9U1>B8xO!4&Uswz-G*MsFIBKKgo%H?{6$`u!-?hmjvh$wOdspUuO>ZJE^SQ&1k? zB%WIF+;9rIM{(<^PTMo}+ozb~n6GD-1SC09a5f9YIbOVGk^A$4oB~@@xaZFAnz2ns zZW-Py+($rhaR1kzZ{JncC4^Eu70}rEQuH+|%|3Fv=a+PHz6Q>orihLmX9Lc&>wtB8 zok_Ayg2aKB87lsgj(X9xg|oiz#x2YetQ(BBJSRV_mSESAdt9~e#PvsQWc?(?J$*Fg z?6JpVGbuhz%nNBeJD}xIogBK8UxLxsFf-u5k$q`7FAT+nKdXt4i^CY}ScDi@=DnRG zOFSiLnPZ70yGL@LPY57Hqkjlfx5Bvuv=57YrxOyEn!J>1El1U1>lD&{`a(L9*OWz< zYszF^t#n;^>ygiP($>?wYIo)n<`x^BZnTYGF*a@(AsaJnv7$6=@+2fbZHJ#B9L1D% zjVXhFh_+yh^kIJwo~I`)??|S+x9Llgs@#s6z!&KeWD;aw-TT-r2Q_D1A3um$7+Qn-FHu$H z=KVBT?9tp+vBIg3^VbjJG2}Pp50V(Zk9b}2(d^-VNd$2_T9St#yzEX~obl+6SFa9O z$Q0PJ`xpN#-HW#9<^8suhS;WIChljZc|88Tx5S(+0)46}62tY$ur!YG!wQmj%$wg@ zyx8AVIdLP2B9aeOJ&oI)*z|*0JAR);ta`kLxgX35Phl@dU>)^ifs4bw`u3eovzGUx z23|Q8Fdhr5(lI5xzW2xZ-9|gm#w3~{oVSh2A5-UT&84OoG`OP2(Nm(NDdd#BXx0_&KYo>Z=FsmPq<&it73%u{+H*nl%(Xm3-qz^?T^R+5Gsh&o4AJV2{)EvUxt| z(ADO@MB!6hD0%N)#Od-jCD+!XtdgL$&I-Wf>ov*33rKSL3fc#hmB=qO?$ zbbHkPHtiE@!Is8!>2`15hf=|p#w21AB`+iw$GpcRf~&IWGF(`^!`aIy+|m^e3zsOcLH3+zQ|E2X4 z$E&1~9?n{d;gYW?3YnY*8E@O9$C|J|31++6ct$ZQHB!IlX-o2umPek1B2Qa)8S9N9 zXTy^{wNiOQ(z|pt?pn5k%8@~>q~%BIukKC}tIe1d-u0=?>dk=6{Hxr!Ur?2!-h&9>LVIFjnp-#-mw#j$lJNf?BF_qA}5y5*}4#l0@B5=eUo+s_X%@DI4w^~R>DVpI%E2})~K3`7dZmi(~e!< zK4nCZ!|r#NK=0Z_9)7OX3(aHlE~>&@`;2ZHnVA-s6f>MK`}lk;#PZ{%mlZAFiVyub zD&9ervPkTF)!U=csi65XJ$F~{XsXocY)@HF;pDu`BT3G5yVLu0)P=T_YcxEw6=sUC zQR84$$s(LkG*#VW`*pa4)mfA8qXgmPb6fTly_iZX@!P>%qy~p~Yd7N?YSj>2;-FI# z=8IBD<2c;c5I|)5f=RokL(X?6vh^9QsZzS4)_(ei#9iUqWJOZb3t18on!8wQpM0Vw zX^^GxAJQKS(~;J>#4V$k=95BLcFVVF!8V1EkhN;tnYY*5wh-M&h@Z{Yo1|c&Lx?n%X_e4=!Y}I);LV?c$lbG?y!ho8nDUf`V^oSZ@=QBc*i+ zEhh4#ZF)f6YJNbQX&|4_@kCP{@!n?Iq*~gcZ_}{1hI?q#!^w+kr3!Ar5f*9f4SwpC zcK0HDUNq#pbrpPxJ$0e&Rq4@ErwA6OVJ-by81-uoH3d6byiyE3?t9W105GFZ;>j`IPM}>W~UdDGb_(4Dfw`0 z0Nz=5xnB9{1DQmF?P68>F=n=r7Ta^0q(0nzaKU6O%Hg1UbzQ#f9vbIL7lOQFuY?cv z?Rk=5HNfrk#{OoglNQY`?d*2Rs&Pr(OzLLlnPcgR(HCf0(-d6%deuqExis(Yt|pJ+ zxb2|Tqb`{PlaQVE$6O>YVpu~U(k#hFgl_ZgH^<zfTTz zXidJalxodap{oLi@Fb_ZWnc_l$?3+LO>x{ImpM}4Cf-tU4$3lnbb~ARRc5wb=5`99 zWRgy!KM7CN?v&heX8QGKYw!enj7H6*hhTQl^tRV!-=*g6w$yA7;_onI)R`C~DF~*i zCiIuzd%*Rx5a~c#eVy-X<-`5`(JhJw&a=GD#!97)S5Ai4Gq;{O!}W}>l#+2Xi;B%m5j_23eU!k* z_a%WAJvYm|9bjqN$TM?-=lQgJUknZud1QZZTNxuKz??9G=s|?cnr^+`sRTJ zTYjqP4EyET4pvtiguYRB6j8aH>vy=LxuNy;y@3$wvak;FKb5Pk%m8vg4$M;vv_M!`0J=ZYJR~wcQ=f7!TR^h~|aE zv96{(;W49%jyyO1YBkDRPAA;w_8*tgO&T1bx}4$A>oNy6jon;mDnnoYMhXy8;e|o@tYp zRyj&J`ATfAZENGb_roYYdFd^ajE?oX-UKn%<)rZ^8+T69xnx9MFa6C%Q1_N?@!Waq=oa|k{6NmcSWu00g!i_zT1Dt$#A zZ_P+1TR4Vy$ekrCKA17HUB?2BqGEp(ry#94>NYtgoDprAA7Pnxk8<)*@Ze?mh+Eg*aEQ$j~3o{!+EK zXkNYNi%z-AUtmY(6S%3NdmxzAJw76j@`WWp`sT!!N^rBm%WYKqE#5hQE8`%p)A{5)XUZ1?Jbxa}rvlyhDP5zN zl6RkNAjDLMzb&51*-Q~6pQYCWW8BwPU&&-E#8{c;%cX~?5m4OyVAP)?%duZ1cHg!B z{6=e)OY+hkCBAp})tdwu9B=seiZZyKTq!I3b%}#Ylj*mqqWAKj=E@|r-l@p!%e}!c zZf9|2F{c!B@LkvrS6xKt?}mK6+4*khXhd=qA$YUrA61|_uM(#&GP!I zlw+gawHq_7j%xMAFTFAhKAhw&Z6&$;=#-$bx1y1k=KU)#W*<-Xzq+=~$y8*KA;qIN zFYGwXv!i-&&d2XuTK@TTJ%{$7_N^Z7OHRHO38Ql9Q-0NSNyc)PGis7s;wKL{`yCl~fuCvvM*L7b$(-S{0K; zThs8g{R63G_Q{Y6)kEj}dw9e$%Bcb$X6L?ncI&W6SGrJg#<7~x3{V~Z;R)BM?kSZ+ zA^Wl^DWvQ(hGXzrQahSbJ9W zqhTTXDvkF9-8sM4BZAre(K3D4ro2c*US*Hu6fgz17N5{bEwg=c!d4x=jddTBD0Nt38{=!{;9Q}6>3-fQ!>H?@;;O}=r zdN5n32R(yje|$9$l*IXuOo1LSQ^pSIX$HL2Tx%?MhLy-dVCJyN`WTRcGIeY5C?ZJh!;F8(@c8jYS zac0*Q?o)sXDPa7V;?IBD9H=p{p`ok(w;|O)+1ta>ze@~A+v=(SMgXWgBMO;k8`h2DppbS5dkqxKc0CXw7gRoG z3qKA%5)hCet_^~$mfN+tw&ma`dpEGhLf~d60SM6Uy&DADpyfCK>D>f?ZAhk2?rtvb zf7{9czUg#hpbgbPVih1g7vtEofsKoT69O1N?Ioo3)DN%w{>2%L%P9N)F5h#`XNu!bNaH!jOhSBH=dc8_1(F(ux?cSg=&e{Xqi1 zEP!3cWrkMqac$aeemzvG1~`bZzR+nq2uQ^dP9Kgw1xI6_w$aEbNlidsHIQ-Ww2jN- z28gi>*rpBHqY-r;NFy__mQYS!1Ia@FK-$`zG|{HJKn&!u4ty}BO8&G6aCbW{aLY?S zHqz7=Dto+v*{%j|5flp_R1w|~mI4Y)70e!PfQBJm?NDgv^(`y{HMegIvSihfyJ3GU$0z*AThqWGG!&AIQQ2yy682b@G>CP1c$HTj|P7mvO zikOFgGXV(hiso&#!Yy}(oq{8=5&}|2Ncto(j2C<@_KR@|_ zXaVr@Al|11#?wI9F5kTp|*Y}``**{mx0#sTc)kh(ykw{!vwL}sGRo@M; zaBZV3bgEqE1W>0)AaEuSP-ST4aghC3;;v%+V99#i^&59Pf8JBLnVL# zm4^)Dh$qg&fY81+*|TgdP6Ysm0<1-95WHR=obiC)x?+lr5UvQo@3nEiWhu_&06ao~ z3zaOAbGYN`!(B1&A61cdD6FU`6AvB|;KLjM(j^O_cF%d7QCEPjO{0Fp*D*sdm)^iZ zgVK2A0?ud<)*7P`V3)o&Du%4z%K~t3S2TDKE~qdN1n_c2xc+5vL?6{N6#xVhz(lPT z-Q(dkYz{zG0p*T~I&l5^Hi9|1ucM`6^ka81k&%3WF9*S%3E32Jzp?*+UP3p%^0b}-jBncB5k+T=y(+(Lqf#{eP+dQjwq%^+){Y!P+{xUIgIs~g;T zDGY!W|D*fJmUOVN==#u@bKZpa=mpV+fiwu=5*o_?P^Q-y#dO>2fwUz|^A9N8w1YCs^0It5>>ugaDal z1I{^gRS7TL%pep{z!^u{VlML0Ursz(o7GkK3U0;$eX0ebtqmbQx^y$RD<_w0d7A~~ zZ5`WWMSo^@GX@lJ9_-^*wCwWDfUEx2<|W#(u4}_Uj@mSV+GBQ2iB@;^EoXZ3b{H`@ywb?|$t8r0SEC!oW;70Cx>)IfB>=ozs4xcDU=8oHZs4ZsUeksbLFhwxj^`EC9u1YyD}Ct(yT| z-)M5J6Jqv3M~!>~BZvT64IRPsv;Xl3e%1M1?HLDdA-Tg1=zj)84$64si_MI{7~y1V z14G+tV$M^nPxB?!r1Mm9Bq zC9GfgYZHw@0f#tRBH}dQW6(CK?K$wp~V6;j81qO|>hA&mo0Oktj2DkT8 z2I~_F?X@nN|)VglK0V7ILU83ikdyKO?7mx*24>@F*nGhq5!J`5%ah?kA{LJyEE zPQU}`nk+)|59s;`dnC-w9Sz60&fpEv+N3LvFOoL_kBy08wH*!H@ekmdzi)a01_c}K zNe@($-UHez0O!phoPWjk5AeUT4d70;I)6#R+I)B}9w9LV1ilYw8h9DDqN(rwhk4#sz%GnK;Q$;8%N5cG0!6a_FbGwQ*|CG!z?Bg=C_|i% zb=q~n5l@e=Ye2 z6=E!wK+%oCiUVElT>k+@17;0(QU-W(nAakw*VA=xFWX)e;BYG0YRT3HGPjA9eu=~- z4cAA)TwEPc>+C-z5`WIjgX#SYz@aXNsMY3ym)5zZ>2<{#e|-Oz&OH^(?ql$Q@;o2B zt=TNus>{aJ_Wubsr?ih4<^teh@KFSxKdss3AHbKGzV>=XD9gy_0PGhU7*l8{YQ%Q) zh)W`dd4;()=-ebaQUT1a8gS#FGhFSsdC(OzEN2UIS$7dLLv;E00p+y>YY5bG`J*7!;lC!#JW0V_()L(%0O3%h?F#}Rn-#9V312VtDGrOb-w#wv7myFdzY6k` z|A+YN1U{cl3Bq>)gBG`AwF|B4xq19$)-UTe)|pQqN$|mVu7<#*K_ej}=l?hGSWS!8 zN0#;hz+9o52g3n*M_0>8eOzb*&hg0Z|UTOAXfv2sWj z0lwcuj@2n0?>Eu=|G(eU_g^f-kP`!p1=Jo!#NtlPO1$+#Cm3G+=HGq@{|FNB{~Qom z&O`$W^E;XB&rklpa+@#-U}kXlXl^j?TtNB-A^n=;)bAR}UoSy$|Mi*6vbLaG6!<{> zks)y2tM|bFd-v0dxI3k@1!m%(x2hMi%f!7Sb(o3J%@MA(1Gz zrBfJKwQxEzlQ;s%@O`e;iOs^-Hid@m7283-CTkNwS~OT|piy4Id|bfX+|USXcQ-hf zK71Xo>6`Fmb`pqAuz^h>R05_8H-ohH%I$Qz&vF<{(`kSLjdgu3!vRI!%MEUXC8V|( zJ20>Z1i5-jRv*lft;GRmX<@{cJL2`)c#aRK`v{mKC5YrbVI|nOKri7Kpimkxv^_|Y zgH(=KZ9>^gX?FF1d1|Fw{Tj}h9al)Ka-KClQ(Fwua-~7mf;fb>f_=CGVH5F6sYl;( zfqnMgx;ibpRS6dy6o`7lkZy`zNSHIiW^M5+PvkgV0e0H@%&UcbSZxzn>twmiOXmpf z2U1Z6sDiH3q~Nf}hRxhk0NHaLbq(0XLNfwG0hygR6I?Ld(P$7a#p2*Q_7?et z0-#br5cF;ATX3Fl!^9}r+OLxZCJFHHj8UB zswdZ^KOP7!3)rE8*;vsyGjKpy-XLtyK=VvAN(6)b*?AxW&?TEc8)rbw)VBRmU4PZBXZoUSvOaO?vD1>btdN=~; zz}y_x1_?CL7~Tm4E{=M&X;?UhBZwZ{4i20Vn{~*+PymErsX=$ZewH{O*?|06;41zV zD;G+(Lbn08@DtelK$nU)o9X^{Y#eJm>DDv%vo`_r1_1Mnev!8P#qGTblGOC|RFRmY z<>+6iT$qRj@QD#vY75LKs5CbMd~4p-Co_!v{ug6dTWl~?{+>*J2<5TSIG}o2q>2#r0*%5`~IDh3K)s}Q)7Cyfl?c1`Ed~-Mgl&{Ll8rfaHZx?6k>fm z(`3A^DZsu*08gMp_A_CTr-Ntv$29qbh91pHUz06VO?7HjDUps^OfLIw0(Bd)M& zpgsq7G?qDe;%b2Q7$`b$^jEZw7F^Mmwn^(xUOQ4c7zv;<{+c}eHk_es{~yKU_LDS- z24MF9UGgia0uj4*oWa0?r{(T!z4Drx)du>r()cYn*ud-tiVl4#+y4S*JWQSu$W}#Q zZbI3JwLUNb=X3$YG6K#jL5QvD{wMJDC-bINz|c)V?-5|JRUnX=y|_c7PPn_Qb>+)y zF5lUgvI^)1bXIGJa7Fzus}0MtYi&JwbPj~3J^)Nv2$cySAiLqs;*t}wjECXq zdT(}CUPUGiLHqe`^Jr_^?3FhgIu>LkxZ*U zl~;otT|p!s9xEBHaO+-7v>J3}v3{sJUZ=zvbnQDxRzt3=&aMohGnf`<$aU@nSdF=| z-nA?QlLDMb!A&_Zdra&L)yiVc&?6Z9jJTq0tfKa6dRG>~gucJ(XTo^||CNYdjbgZ> k!XVVeA=`~B%3tL*b<~N$5&_(L@UKt@6n)?VCLHho03xTe$^ZZW diff --git a/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/org/jacoco/agent/AgentJar.class b/jfleet-avro/build/tmp/expandedArchives/org.jacoco.agent-0.8.7.jar_3a83c50b4a016f281c4e9f3500d16b55/org/jacoco/agent/AgentJar.class deleted file mode 100644 index 40ffbe2307a2211ef0b3a5d3ce86dd6542549c26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2322 zcmai0ZFkdT7{1bWP1|Md*0J%TVnorcj8*|b*igqPFxIWJE0Z};)Am`HktH)pWxgE$ ziXZtZdd`@l@=ee2tAE4apk7bXw+S3S2jAeOzkfORGj};Zw6f(G#!YV#Y;WpN!_@hCrl3$yaPX}AnN*c5(6cuvc$6K8m0GR)8xe&JT7M1yF{wG^cP zD<19hoAp?WFt!yO?)aNdVcyfvOa&to-M|5i>}R~z+Sm|;iL76tb?pmZcoktZ z6e#m-O+$FTX}9x8o3b7T?bMoaTK+-FcsD{hP<4w>dd7yBvmB2t9`EH5NaVn#Wikqt zea$I%3t`2{x^xa_J=%@Z^JhQ?)4X>fD;7E_Wvz{kh+2x|^I!?g^n6*bn9?HzXhAT&NUhuPzqz)!S8?yLvspc%hBmYjcXWhT=Pc7J3zfp)8@L{rFPAbWdMcY}{dtke? zP8-6Zr|VotU&uuY1?QfD71HP#sr8mgYY0pDqHGs;O%~W|b}u-m%UIl)fr<4iliZp^ zomBcqN%ei#^vMjBX7lrs?;{<mwvhWB>BksY`yTN}P@m+!qelcf&n)qP)AY|{2n8Hr zx*hZ+M({e`pgt*=<~itz|3$w<|7oJn5dGZ)=sBDU(5IL|Bq;s{@3Q!8HknQBV{jq2 z2Q9acp{H_QKmsLpVF|-n?xH5xr#$Nb-sBY{))=F6@7wr)QWmGCxX)h~W$`gGYi#rI z;)sr)6HBK~?_p%^d@S-U(o?6SW3fGCAN=#zseO!2@p^#aO9P#kqXSPK5;Tq}Tp-{D zTnz4EThA~t;0}Y`rG>#C?K%_LV46+ZZ!x)hI0uU!Te!^UtJn@oILChhV`R%&YNO;t z25;khFrp%DWmz%I;vKe)+{Al~d5JmnN=?ZRReMnDyi3Yta=#&&`w@o}JV31UkYdTE zAqEPQ9cNJBKB0Fh|B9L~k;d0SLgTbaQ+t_{lYSWneV_LP)94U37x>GWjmLh$;k9Ts ay0VWWKOipIt3c-&54^wOd4+Eg%>4_bItDKQ diff --git a/jfleet-avro/build/tmp/jar/MANIFEST.MF b/jfleet-avro/build/tmp/jar/MANIFEST.MF deleted file mode 100644 index 58630c0..0000000 --- a/jfleet-avro/build/tmp/jar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/CountedPositionOutputStream.class b/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/CountedPositionOutputStream.class deleted file mode 100644 index 233f62bdcf120ef9b00c839ca624ef41469314e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1329 zcmb7^-A)rh7>3_zOSjYow13EdRnT^;v?`*p!~=*XHI0y9nh;LhmMJVL-MZaXZ@|m( zz(h)-2^Zi+8Qqf9=m--_HT8;aMCZgf&ETj3Fvu*v?_m?3j%s zS?rk3dr!JW%P#KNUCXuX_O|DCJa^Z1qFrl5P$ipAv>zST@4Qfk{2bdY!6P@ znmV!jo4jN z0INJx8YR93-%;Zmw9jAo6@p?$ee06X(fb|&r^wR?EhRo2lYq0%o#MpEN%WApj86Tw zfMw>kGDM4wpmD@T(`Npp`dWl@btE1AOlLJwJAXknDl8sd1u?yvhoM*reKC{3Zq zem&Ftd(!>r)AZLFctPzaPlX(^W^h5CiJB7~@@po$1mP$YQUINNrE>ov~0AifDC zkU*6{;sf|7#H>wC3Vr}f-rd=mIdkUheE;#~8-P2w>B2(Af$d=iRfhR7KjePMqdmVj z9E(6RRPV}2>U#{8R(nvxDbyUe9!|q!Xscw;AMb`jXg}u3tCaR$s^e7mbt3pde%_X$ zVDQwGgQ3~YN=bDhVbj4Z!$t}0mP#WnMo-m5YN?{>DlY1nHw`ox7F*@G?SX>@h82U% zV;<~_f^b10=V@=L5z(FN%1As(4~8On#)qbXGhG$%aKIC3>|d9*-j@@G^==8}X^y{@ z*d$2<5=RrH-`Z(snSWC%Ym`#!!%zh;`|_=LBqMqqw!`2)d=rS+s4{VIg<;`X*~h)Y z!_df!_LAPANM0w>)Nf4EI97?CJUB+pp7{k0!bt4$G}I>@rdVI4Ng#5qmdab)Fa)ql zvtogC%YK>{nz$J{(>u|6maJ{^TeQ2KBe2f;XE-0pvT%;pSyX7f02_;_;Ub!3HS=hk zr+f3cW(o<5o}D7B4D&wanN061>d!l$;2dG@1KBxhm12SADKxJ@^RR?VfLU|OSg;a#R>_R~VHbo!=3?vYekd%kWWOqm=?Cva+-9XSj zY^xSqs-+tW`0<>1?d;CXZf5Hb+0D$o_k6$SdC$H3 z=6|oe3}6HP6U8jlMNltcHs%OiKOs-av6P${i|rqsP!c(TIh|@o&21H^YiS*BL<1Tl zh)S3XNg$@_W3h=7DMiV}va)_EPv8CKcbAqqp^oKsIj3rwRXg%(DyirKb9E)5>B+8? zJUJ;azqg2IyoxhGlZ5MVy+BmS(k zC&m?rkvyeqvF-F>Q5(_K9CL|`+N?%e4C!U-R4ukYpUdWRyVR5tZ}pqvFWOeu(B?*F zwp3t!P3xCoc?35}xEU)1*7_(nE+;iDYg?U}n(D3U(~^onBcO{1{YR zPu6Y5EfKs^!YaH=V4V+v$|ew)cUsMj8=Oo=im$CJ)9|%@=@Lt8E6@z$Yb3OwRiKF( z49h7sX#}IdhL*#%NNh((1n-t`D`EnRe8Z8z#*~~Ho>q+C(9-IO@(9*hp<0$aX1opN zbVW`VV=s!eSkD={L11Z%Da{E^b8@_OI7+Frk!QVEV56^*oi#>4dsvwwHnWH=0-ZAv z;cEngOEWqp+zzT64Qzfc2LgvmWLgeP&`_+TT=?f&Rex`jupK)D7Mg(RtgcK>QuXPg zOh^c%O2F-MWl2pdIhn#kCL*Ql_Q~mh+^@=Kr-W|ovf{5hlhCKLTnq)qe3=;IT8w>D zoZPQ#Sw+vO%4Cg3dB21n?4ioeMj6mf@7A?^c2GS_wP8cco?6nN8NCwvuuotC%j}cS z^vlVlni;dD_S7b|U%~+l5K|>1kERrN!mg(r@+m!4JuoEUAQP3CXumwBFh#CuBNFc5 zfkpNJS*Aj`v(RE-I&ais9;M31>NERxtZMHDkxr zE={+?#!!V7_^^aKi*w~OmFC_p;U0X1Ix()4Dg^+wE5*La3IOk$@F^3)eFAG-HQg?f zemz|j_u`|xSA0z1m~W_5?hN8C#%Awlq`0*qx;ng8a%tnBI+l@hd7aAEQNL198LQL1 z#F#p!WE5RZ#CDtC14dUG-x{YxE$7uaG-M3a^FAVQU9Xx^_T|%~iax}3ih{6LOUS8V zSy%bldRd_w2?CtzA;t0eU}|wtQ{l-oUPm2 z?(;%ml8TMAK`RMv69qQA9c-tprDo+0Q{Yr38&zIha~QmxMl_t27Aj8vTkILA1@$vn zwMICom9Mt0W-~dBayXqOy`3>nrOO(0(Zf8#%d&ac z&3HH(o2(W-#3~!mIj)CTONxubtf$o&hgfREHe{^>107+>lg9CYHv6RKEZ`hjiYEX% zS(t}{vUc9TIStQ|)QcvJPQ2gf6&ASmSF0fu*z40KhKI7v@qaiDgm3~W7@4w9B5~g; zF|&h+z@%?sHLW+pb4&>0wz-y={^!QOJ4w>h zDjfprsCtAuaD>yLA!}Z6Obg7Ol2du^?|s778{Rb+^V!C&uR#0E3liCS?aXJ}rflgP z+T!AE-lxa6dS6j44{CWmp>PXCH++80JL+2LbxTMhOB4S;4M({^csOk+# zvBjd!jBjHj_=|OkUv~9f+M1b1d%K^F;BVF`aR!Sb_y<*CA7(SlzX<;2uUOD>x^FJI zh@hi(1O3DS)Y0z*bPo@KkJHmEJV4L%8;0|Ij-KgP2O7JH-q9s0&G`g9eUX14q3_nV z%MfiHmk?aavdI|&zljU&rPVuW;9|8 znh?igbkbG&?Q}7{6%WzqN>ez_<6(Lt7<>|+A_Dv$)0>4))BlUedt7);4qg*Ji_aO- zn>;q+S*DG6tZ1Xh3rJW3Z{5K_4;LSCs(=jay@zfgmq`-qQFWeX~w;Ib7Nc zh>x^gphq)IOmz=XhzuBDrnBcd>dwU%C<=uU2&PeajFmLq{{)S#!jl0|E4@&|1T_)> z^(CyR0QF@W+m5dUK)ufkb%daf20%T9rz=2xmBza9wE(CtFVt~@k^`W=j%O-BJxgOf z_=W>jXGEvrs}%+8_ChHHbs_-joA_1*sOM;`56?SLuCQ2Ez+NxZ1VNn)fciGRQvvF` zGUtJqlPapK=EQdhA194u*`j3a*DWwtN4MDff86j_m07{ zinjbA&6>c=etAVZ$G8{t2~zOM00m#cwF-IlBN}_v35&f1$tA)leALRMyiiXO)YAr3 zaU&{?i_*m98j%TfmJh%)1n_KtF0WQ~)+zkhaaKKT@wT&87NB{Rd5)a*d{t+?M)f?{ zS+A3V`9K9Hy`UFJ!HWS3{-mmc`QT`r@?u>g1q)RbWYk~fV;d{uaPZZ53uE%PGj* z$_ZTG6R^s4x3({pz*fCxkT3Qlp9Dj|I8TWwcDX2hA|>Apk&2Y z`&%{VFTKDG&bGY+Utl719I<_V@gpyg*m0|#6V#Oyc;7v} zLbFL2NmY7MxfT1R+24kY^BZ)PZsl7jmBJr;nP!wmGXIm8R~95klgn8c*0D} z6ALQ>t6k^G!Xx%>$7UQ)QC%#o3E0}OgQ?aSPnhL+>ft<%A*JUc1a9)ygEa4)Sr_*S z-Z_`}FV3$Qlhm2w=`(jN8P9!($St13$}OE^Ft>b;(XW)paEoi27QhTOXOX~t3}KFF z^SDiE&e&rbcX%UG#6zDn1I=zc^c}-po@a=uCDXXa-RP&u)96o7-$XD&$t-;to}1Lr zI=#7X82rM6A=VcP7eXRBcpaJ{qFr4|v?~KU$J0C>w1Kr+VHdlAeMsjE$Z*wJZDu># f3Tt-+8;kg6nP6SeMJ#bo@w5yZt1QD~mY(|`=UU!T diff --git a/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetWriter.class b/jfleet-parquet/build/classes/java/main/org/jfleet/parquet/ParquetWriter.class deleted file mode 100644 index 61097cf669e419e298b00a579e06e02cc58f83cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2998 zcma)8T~`xF7=8vL3t_1?A{s>mKOumrR;@LZ7AaaRpf!kSOYM>@$>NfYn~i9{Kd<@= z`U|}FoEneqIqh99`a}93+H+d_%iUg3r{JTs%vtZ$Z@O{p#LF5II(DH);CSf3CR-x#0^J4En=W~l_h6>9>IfuaabKLx#Q7+4<4B)Ud`G~+N-{cmcTe>1`JEr3}hG^TmLKGMY zi$7m|rVA;IXc*Noh7$rkicnS0veQ$JZIe;VuyosVO=DePKf}}%@mJGXwaMsr;1wMw zaY~?LL-J|TwgvizwmczIu@k3toWWU=nR)hU7%)cQOf)NXo+zItNw5fcj|9hP$T_^O z;k=Fv#syBwWCTHdF$975hUFFg{0q!&nU@G>UJP4VHzC>gCNtIAzoL$y{u%zb6Cy2k#x-j>x8<5cQnlCxQurN5>2SOh=5i!D)Z)jb`&;} zTk^!5j(J=Wh?UfGPaQkde(2l)-qUdnS%Dp@v}Brm!V6>qDuho&LZ}j3@T(*psTLw% z$D)QCI+k!VXdj!B+A3_Ua79Id-K~_9fYueY+ zwi(AVKGI=eg+0m0=d;yv*)=N_lkH<~7`$;JGrTA;8fipzk_60+v^pgon{x6dgEwoH z%=zm2is>#$<;>EolQZl^!?ompuo&}-Rz=`YxZ*dd@JlK~GDHC$lYHyea9Je~_RjNVYqhve8mT5iPtY_rz@U966GZ>Cn#QbK+hQ=4p`?%pko%rt(`()Osx;gWrr5GBJ z+GpGeSwaH(Oo^A?lx?t3nAC5A%W+d2l$)|uL?GCOf}V~+UM_8X18w7%ZyC}pI{CZM-~B=c8!<8%Yh^BRPEhrZEdZ+?A_Y?K5T0bI4W9c3sNSTbfDF~V^pF%s?>8Z#rdKzU0n5wlwbN<;Mn8Y%>8 zt<*?(Y&dS3c6d+1j@c7kiD9cf6N^X9lm@@RYL7(HNL`zuWWSlV9ce!_=n`;|z_L(x z0kR`*q|?py0~J_I++oY=O4yZHihzb{9m}v>Amo|ZnXNNs#-sfcNwY3L+LOqP)84KF z{Q_IMPgkQkKuT8XScRZKnUPG!Cj`z4)jI}e>{vWJoJmCNn3V{3x`Srv%b7ZAv09+g zh(Bh9C8$%2sebLa8!-&}#S1S&{g->8*R^sUpeUUFB~x38zS zKLCN171$`CQK)^wHYLTIb%dmhuYIt8Pk>25k*#!zBD<~3P+SRZ)6pn}%6Io%*4|CA zQYm(}GgG&f7?CsW&~dJssk`UE-T-`3(V=0tjy>oUSXxLV=8ZXGrfAp^Bc3sPh6PrHy4*;r z>~5Ls#VmLOENg1-U)VXcck7IbL?2#`M*zV>cQM{AS(@#`w$OJlum&;mu zg}~P08d?auS;H#@)}GqZ%TqDiO!;vWUM)>~jX*=lTc8V0F3ox!Zr1R69dE!JbJ?c) zsv<7U#$u$qV`(lr8$*XYj5|wFvl}s`A;lQ5n{bPcH{&hrFV{)q+TwB9HXL0g$c7x} zI!0>M!g3qe1@<)AsNSaI?W&vg_4jtkR#h&$P$h2H@h;qvPi&`o%S!NAdgbi<{omuE4CoqOd)l3^Q1b z(gHuGai6sB4oUd~IzElhuuN^Wf~owGwACMKmx7#oX1v!lxK;Aw5!oHSDX`&WrC|~hrl=vAaileT zi#h3K%#X)#pC6CnyONjh37lOBg4A;wgx3~!5D&gG`TGKOo~$^jgq_@wTQ{=XVMUpn zi@Re9^FU^N$V~N1sssYvR>X)87^#?ic3=AJ(HPTu(*pgWFnP0VxT97k9#!vH4Q75{ z$=!-~4o^~3%+7BrxmELu<@_k@I*FlMp581Ka%|4qys5Cvou;VZ1d4VgIi!R0baPIz z$o=j(E3ke(D_vbjhD!cD*GJ5x>I@qGm`hPcud65jg?+9!Lzc$Pfmk|5;@c7l%T|jB zd9QU~=CmBi2LV<%Y%@#Z-nyf?eYO!fyx&NwFlzWa8=ogV3hZn6hrnjfr-gW6vuAUQ z8F4nqwnS7Ww7|ilE>oDf+0$q9o&Pingl@65)AyQuTxAt_{i8@=?(Ez;%1S*c$Q!(Y zIzmVGJ7)+e+~yST*i_df2-NxJnMdJ|hv0o9Vi4%Q~D%dXw4RGCRsJTy#R!N~qPkSR;6-t#Y8;qf>Pem~(cb#yY97 zUKblg9jnvPa85#jA_a96qWmT)zgZU{QO^a!kIh_cwwE@QsDA7iD2_Zfl}VV9mm!+|xUSfOUAB*9!8_ z#~TRVHu3)t_!Q=^;BVQMDTsSGD8Uc;Uw#Jfe163Lx+8!e<0pI)_$j}ZN@bB!69Es+ zLK_TJPN6Dr#w3=^UI=*3Mvq^H4X5O*5!>9=1%PVTRyJZ2Kh6nZbF^!}*iA za0bolA&ZvoSyT>AVb}f!-!$5?*xOJxjZ3pQ*ib%={wxL?mf^Y6xH^j{N2Aji%ff01 zq^DtLF)@pyRDRKcSsWYOwsi_G$>PQ)-z;t#4Em<DsE}Ms7;b-_cS&d)>Pv95iUuyjlzaqzX6Ytmf4MTP>PfWkX z@5uM>sVzhJ2mFa68K*z<7x+s)Dofm`#0pWlbrNr#!8_)X8n`u!cRp*Dwq^0|+oAdH zgs*fO@0X;Ns9F5{)4FnT}txl^2u3D4+dtY@TsQqV0o}C zi~FSTDkjqq8Xi1B)QWjO^P`fec!~h|ToXD%7Y_kPz&HCaU-@AeM=sJ32EzTALqj%#XI@N8$YFT#j~fwi-IOR5Xc}T|wU9 PJSi?B-K}DmXh-lFDnq26 diff --git a/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntity.class b/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntity.class deleted file mode 100644 index 620b2a467524ef65fc10ce9da6789eaaff616153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2377 zcmaKtYg5xe6o%iFOQEDfDMe5!pr9?cqJpAaL@pJyfHN?B4;V_A+Gt3f;a}+tjx&Dn z2l%5L&)H3BvTpp6L$>d}dG=hE-+zAo0x0ol5xvzoYY7dW|V6}de6it#-wA#<->#>c}2+X zn|Oc;Nm#DAmO?0&gz%w>M<^IbF`?_$Y^xqUcd)o@pncQ*Kw!NUr*7{zKAza#krkl2 zr&jIQ@*I8-7Tf)E=hDDv<-c_yTeE8Wsm0w$>$2wO=B8>OU?tbTvQN7SDb(ncz>VHY7_ zlORXU-iYQX=#HBlHC2%u1)>mK`1{#Z$TO*Cb3F4Hr#Vm1eZx<>H|Vbf550&q z(<0KyibyjlA`P5~G*Kebz);M<;ERf$MS3eyG$?jV{ebaJ$foGYKLc%;rl%oq|r(ft+v{l&awKjK=3@ z>L+*_c(qP(jkF3fqy<^Pq7Edjf{YMIJ_dvfz#z}?TmzC(LB_NoOL(CJ$*3R`1Tq-| z!X3aMFR`ov$*CX(EyxP}Gt-nNr-IB7$ZQM24qqN+0lYju%`o=R6!~PvKIrw*ARp3iwoo6FW|3;egFUf diff --git a/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum$WeekDays.class b/jfleet-parquet/build/classes/java/test/org/jfleet/parquet/TestEntityWithEnum$WeekDays.class deleted file mode 100644 index ecd86588b7ef1646a18d23ad993485b95851ccf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1519 zcmb7EZBr6a6n?I}?6R#%_==g8Z-JIbYF3bef=Ut2xPZgdmz7pr!=+$x#!vmF!kKhx zYW&=fYC8A2CXIavc7`+O>~o&;a__T0e|`M{;2B;@=wg_y)hm(x-Kt^Ok@tH2Lz8UY zXxM4XHtnNr)80#4&4Y<;!+4j{j~YHOxK()IW$?b*%%zeghPiBKBr(n+tMG9aDPKry zM8jj(RH!`W+fJu)f1=k_^zf*h-zaQdKyRoBh$hyyGER1%ihhC9lKH}x6C6}AByd`R zH_NLGtGI~~sytClW~n$s^mV5bC>X_U2_q`*;4XuwT&-CKLtiMI-PaHGNL9Bgk3rrW4L|^;H#xR4)to&*xY4U47FviR`o_B))vt0x@lEn?G-qI;18>q z#tfZF+_X%4nPH%v%E`=xi!wY4tspGJCqtFdBO@TAU&as*FRFNiCB7NaQiEYW6z+I8 z)Wt=*d$snK*3y$TEhE=F*fHvPeWyy1)IZt_cX|j6fo!d;SBrYxUBdSG-(xR=3iY$QK;%w6EnDgQC@%^|G;M@@WUJDr%PB z0xFv$t!>mAwuB9a$^X(3gPO4{qb@FpLDR?=>P$rG5XVW~aw5nz3Xmn02}{Znmb4@+ z$wyeyjIbmVz(35jK@1+sdyFOGdqUnAS^iU62!6q>GmL&BkKrl(d&RpU!cQUQ;1|#( zqDp{GpJMC`jN`lh!pAA1o}=h%v@G7!9VQg77=?=-K$@NzIYH>Nc->y^GF`%R-Z~Nj zlk_Y65<87#;HD_i`K9k*C07eBt>kV&(n_8d9a72LLbq0uTJUQnxrJV>JlbSy>u&9iLI0|t2zuxT^rND4 zHbW`{W8mCozB%8yyuH7?0@%Pz3K2vN#7uM`F3?kzx6*Q?Td|HyRaMpk@pap^^`<~H zmoFxfK+-_UL?=vvInS?H)eA={ZCy+MrcU})1$xibw!S;F_2r&huMzaZ^8}U)Z9Sho zQ|fA0-UVx%t;<9=r;3)OFA&@D&XquS!FJVAy;f5GsVq4Z$rQY@bc)iq*>416`qB;r z=G)7=MzvOy-e;;SxqN$|CRsuU4fJa6zucp%2Wwmc}g@eBvyTsEH z=scp9A1dxfU|>>U>3@9|Fb`Z;`8$pb0!0l=d`$q;G=T_hN`wwgJhW&Wq&pyZWk~jr zXOR{hU3i9g2%q(m`3`z6z0s7ESp1=UIB)@|nVcgSY1Wjyen8n$!N9fNcc`Z#DvAf z7k&Ugl<}P2Zo}HX@XbBzIsbd^@1Aq+e*OOO6TnlvN+W?}3W|yjbP5cd8s|o~YS@+R zo5NG{$P?(?vTV!C2_&_}{cd!jJB7509;gCKj$6r|9#>7%%YHE2k9D$pX3g8NJorr$)9Kc zsEX^jA<#|!f>S@Na-_hKaTOD|DR-0{yF&h5_D`vp#w~e-UUdvULg&D&iaFdCNb?bn zQ#B2nLI(oMw)39S_LnT%d|f{~G~GSJKWM1r92wPp!?pN3a4O!3MHgEx{YM=(=>iqg z(}P-2Rg2`QwLOYfT-+Dvk)oh7BrB6o$^xIFm06gULRl%&<;f*=(xqs5mZ?(KEF1|7 z$d7lN~&~kz}T$5q8<2W zmz}zMWa<`ocQS66R(MV^L!C^}9H(fdd8A(n9x30_1o@UG#))F%k@`fz1lpVXA~)Z~a1Dmb3e_})yt;?svgdcz>2ks$YQKMJHb3^Gn26EPrM zcm`R;T9B(<&Pxo2L8c->9^hdV$Y2;`mO$oWK)CY^vW`bBkOckWzFuPFYp6Bzksy!p zB-osz&L{oWEHp3@2FVb}QVa->9)oOPGsu;t_BBDqK8HY7B0;w3Us?`W8)UkHu`tLg zfvm-V@a!{44$p#IS6egrB?Ph_3Gy5-S|H6~ooiq+46;EWn=v5#_!uOQ?Ff*W@Qmal cK?>OU2ZUbDOc*3jAloq@{Q4P0_pko)50XvmY5)KL diff --git a/jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html b/jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html deleted file mode 100644 index da42cb4..0000000 --- a/jfleet-parquet/build/reports/tests/test/classes/org.jfleet.parquet.ParquetWriterTest.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - -Test results - ParquetWriterTest - - - - - -

- - diff --git a/jfleet-parquet/build/reports/tests/test/css/base-style.css b/jfleet-parquet/build/reports/tests/test/css/base-style.css deleted file mode 100644 index 4afa73e..0000000 --- a/jfleet-parquet/build/reports/tests/test/css/base-style.css +++ /dev/null @@ -1,179 +0,0 @@ - -body { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 12pt; -} - -body, a, a:visited { - color: #303030; -} - -#content { - padding-left: 50px; - padding-right: 50px; - padding-top: 30px; - padding-bottom: 30px; -} - -#content h1 { - font-size: 160%; - margin-bottom: 10px; -} - -#footer { - margin-top: 100px; - font-size: 80%; - white-space: nowrap; -} - -#footer, #footer a { - color: #a0a0a0; -} - -#line-wrapping-toggle { - vertical-align: middle; -} - -#label-for-line-wrapping-toggle { - vertical-align: middle; -} - -ul { - margin-left: 0; -} - -h1, h2, h3 { - white-space: nowrap; -} - -h2 { - font-size: 120%; -} - -ul.tabLinks { - padding-left: 0; - padding-top: 10px; - padding-bottom: 10px; - overflow: auto; - min-width: 800px; - width: auto !important; - width: 800px; -} - -ul.tabLinks li { - float: left; - height: 100%; - list-style: none; - padding-left: 10px; - padding-right: 10px; - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 0; - -moz-border-radius: 7px; - border-radius: 7px; - margin-right: 25px; - border: solid 1px #d4d4d4; - background-color: #f0f0f0; -} - -ul.tabLinks li:hover { - background-color: #fafafa; -} - -ul.tabLinks li.selected { - background-color: #c5f0f5; - border-color: #c5f0f5; -} - -ul.tabLinks a { - font-size: 120%; - display: block; - outline: none; - text-decoration: none; - margin: 0; - padding: 0; -} - -ul.tabLinks li h2 { - margin: 0; - padding: 0; -} - -div.tab { -} - -div.selected { - display: block; -} - -div.deselected { - display: none; -} - -div.tab table { - min-width: 350px; - width: auto !important; - width: 350px; - border-collapse: collapse; -} - -div.tab th, div.tab table { - border-bottom: solid #d0d0d0 1px; -} - -div.tab th { - text-align: left; - white-space: nowrap; - padding-left: 6em; -} - -div.tab th:first-child { - padding-left: 0; -} - -div.tab td { - white-space: nowrap; - padding-left: 6em; - padding-top: 5px; - padding-bottom: 5px; -} - -div.tab td:first-child { - padding-left: 0; -} - -div.tab td.numeric, div.tab th.numeric { - text-align: right; -} - -span.code { - display: inline-block; - margin-top: 0em; - margin-bottom: 1em; -} - -span.code pre { - font-size: 11pt; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - margin: 0; - background-color: #f7f7f7; - border: solid 1px #d0d0d0; - min-width: 700px; - width: auto !important; - width: 700px; -} - -span.wrapped pre { - word-wrap: break-word; - white-space: pre-wrap; - word-break: break-all; -} - -label.hidden { - display: none; -} \ No newline at end of file diff --git a/jfleet-parquet/build/reports/tests/test/css/style.css b/jfleet-parquet/build/reports/tests/test/css/style.css deleted file mode 100644 index 3dc4913..0000000 --- a/jfleet-parquet/build/reports/tests/test/css/style.css +++ /dev/null @@ -1,84 +0,0 @@ - -#summary { - margin-top: 30px; - margin-bottom: 40px; -} - -#summary table { - border-collapse: collapse; -} - -#summary td { - vertical-align: top; -} - -.breadcrumbs, .breadcrumbs a { - color: #606060; -} - -.infoBox { - width: 110px; - padding-top: 15px; - padding-bottom: 15px; - text-align: center; -} - -.infoBox p { - margin: 0; -} - -.counter, .percent { - font-size: 120%; - font-weight: bold; - margin-bottom: 8px; -} - -#duration { - width: 125px; -} - -#successRate, .summaryGroup { - border: solid 2px #d0d0d0; - -moz-border-radius: 10px; - border-radius: 10px; -} - -#successRate { - width: 140px; - margin-left: 35px; -} - -#successRate .percent { - font-size: 180%; -} - -.success, .success a { - color: #008000; -} - -div.success, #successRate.success { - background-color: #bbd9bb; - border-color: #008000; -} - -.failures, .failures a { - color: #b60808; -} - -.skipped, .skipped a { - color: #c09853; -} - -div.failures, #successRate.failures { - background-color: #ecdada; - border-color: #b60808; -} - -ul.linkList { - padding-left: 0; -} - -ul.linkList li { - list-style: none; - margin-bottom: 5px; -} diff --git a/jfleet-parquet/build/reports/tests/test/index.html b/jfleet-parquet/build/reports/tests/test/index.html deleted file mode 100644 index 613c1e2..0000000 --- a/jfleet-parquet/build/reports/tests/test/index.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - -Test results - Test Summary - - - - - -
-

Test Summary

-
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.568s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Packages

- - - - - - - - - - - - - - - - - - - - - -
PackageTestsFailuresIgnoredDurationSuccess rate
-org.jfleet.parquet -1000.568s100%
-
-
-

Classes

- - - - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-org.jfleet.parquet.ParquetWriterTest -1000.568s100%
-
-
- -
- - diff --git a/jfleet-parquet/build/reports/tests/test/js/report.js b/jfleet-parquet/build/reports/tests/test/js/report.js deleted file mode 100644 index 83bab4a..0000000 --- a/jfleet-parquet/build/reports/tests/test/js/report.js +++ /dev/null @@ -1,194 +0,0 @@ -(function (window, document) { - "use strict"; - - var tabs = {}; - - function changeElementClass(element, classValue) { - if (element.getAttribute("className")) { - element.setAttribute("className", classValue); - } else { - element.setAttribute("class", classValue); - } - } - - function getClassAttribute(element) { - if (element.getAttribute("className")) { - return element.getAttribute("className"); - } else { - return element.getAttribute("class"); - } - } - - function addClass(element, classValue) { - changeElementClass(element, getClassAttribute(element) + " " + classValue); - } - - function removeClass(element, classValue) { - changeElementClass(element, getClassAttribute(element).replace(classValue, "")); - } - - function initTabs() { - var container = document.getElementById("tabs"); - - tabs.tabs = findTabs(container); - tabs.titles = findTitles(tabs.tabs); - tabs.headers = findHeaders(container); - tabs.select = select; - tabs.deselectAll = deselectAll; - tabs.select(0); - - return true; - } - - function getCheckBox() { - return document.getElementById("line-wrapping-toggle"); - } - - function getLabelForCheckBox() { - return document.getElementById("label-for-line-wrapping-toggle"); - } - - function findCodeBlocks() { - var spans = document.getElementById("tabs").getElementsByTagName("span"); - var codeBlocks = []; - for (var i = 0; i < spans.length; ++i) { - if (spans[i].className.indexOf("code") >= 0) { - codeBlocks.push(spans[i]); - } - } - return codeBlocks; - } - - function forAllCodeBlocks(operation) { - var codeBlocks = findCodeBlocks(); - - for (var i = 0; i < codeBlocks.length; ++i) { - operation(codeBlocks[i], "wrapped"); - } - } - - function toggleLineWrapping() { - var checkBox = getCheckBox(); - - if (checkBox.checked) { - forAllCodeBlocks(addClass); - } else { - forAllCodeBlocks(removeClass); - } - } - - function initControls() { - if (findCodeBlocks().length > 0) { - var checkBox = getCheckBox(); - var label = getLabelForCheckBox(); - - checkBox.onclick = toggleLineWrapping; - checkBox.checked = false; - - removeClass(label, "hidden"); - } - } - - function switchTab() { - var id = this.id.substr(1); - - for (var i = 0; i < tabs.tabs.length; i++) { - if (tabs.tabs[i].id === id) { - tabs.select(i); - break; - } - } - - return false; - } - - function select(i) { - this.deselectAll(); - - changeElementClass(this.tabs[i], "tab selected"); - changeElementClass(this.headers[i], "selected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var h2 = document.createElement("H2"); - - h2.appendChild(document.createTextNode(this.titles[i])); - this.headers[i].appendChild(h2); - } - - function deselectAll() { - for (var i = 0; i < this.tabs.length; i++) { - changeElementClass(this.tabs[i], "tab deselected"); - changeElementClass(this.headers[i], "deselected"); - - while (this.headers[i].firstChild) { - this.headers[i].removeChild(this.headers[i].firstChild); - } - - var a = document.createElement("A"); - - a.setAttribute("id", "ltab" + i); - a.setAttribute("href", "#tab" + i); - a.onclick = switchTab; - a.appendChild(document.createTextNode(this.titles[i])); - - this.headers[i].appendChild(a); - } - } - - function findTabs(container) { - return findChildElements(container, "DIV", "tab"); - } - - function findHeaders(container) { - var owner = findChildElements(container, "UL", "tabLinks"); - return findChildElements(owner[0], "LI", null); - } - - function findTitles(tabs) { - var titles = []; - - for (var i = 0; i < tabs.length; i++) { - var tab = tabs[i]; - var header = findChildElements(tab, "H2", null)[0]; - - header.parentNode.removeChild(header); - - if (header.innerText) { - titles.push(header.innerText); - } else { - titles.push(header.textContent); - } - } - - return titles; - } - - function findChildElements(container, name, targetClass) { - var elements = []; - var children = container.childNodes; - - for (var i = 0; i < children.length; i++) { - var child = children.item(i); - - if (child.nodeType === 1 && child.nodeName === name) { - if (targetClass && child.className.indexOf(targetClass) < 0) { - continue; - } - - elements.push(child); - } - } - - return elements; - } - - // Entry point. - - window.onload = function() { - initTabs(); - initControls(); - }; -} (window, window.document)); \ No newline at end of file diff --git a/jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html b/jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html deleted file mode 100644 index 440df50..0000000 --- a/jfleet-parquet/build/reports/tests/test/packages/org.jfleet.parquet.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - -Test results - Package org.jfleet.parquet - - - - - -
-

Package org.jfleet.parquet

- -
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.568s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Classes

- - - - - - - - - - - - - - - - - - - -
ClassTestsFailuresIgnoredDurationSuccess rate
-ParquetWriterTest -1000.568s100%
-
-
- -
- - diff --git a/jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml b/jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml deleted file mode 100644 index f66ecbf..0000000 --- a/jfleet-parquet/build/test-results/test/TEST-org.jfleet.parquet.ParquetWriterTest.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/jfleet-parquet/build/test-results/test/binary/output.bin b/jfleet-parquet/build/test-results/test/binary/output.bin deleted file mode 100644 index c8a8dac9508128df4e2160036fef28b45eaa84cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZY4K@Ng25Cu?S$tfnd(S>EhiiL^BurNeTdV+=yP*Xaj9m4f(6LucpzyJRs&u+47 z>t_S4G8Q#3fhDD(w<-iE$&Vt~q5cXpFIGraZ2FGI5&hjbjlLAcA+| z)pdU?2~} N>UoN|Mvh;CD1I@QN+bXP diff --git a/jfleet-parquet/build/test-results/test/binary/output.bin.idx b/jfleet-parquet/build/test-results/test/binary/output.bin.idx deleted file mode 100644 index 27381793c20dd16afd1e09d17265c00fb0b133a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36 RcmZQ%Vr2Y}1{hF5I{=5@5Pbju diff --git a/jfleet-parquet/build/test-results/test/binary/results.bin b/jfleet-parquet/build/test-results/test/binary/results.bin deleted file mode 100644 index 7dd8e14fefcd153574a2dee92f161918c4275bdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZQ(WLlbEl&+VRmXn%VqF0buR9Fh610ZyGQD#YMQAlcW$s`OB1_s9F>nuq+jEpmj mGxAGwQrt3ga{Nn63Q9|YONvqxb2T(^N-*qTfoM-jVE_PImoHWT diff --git a/jfleet-parquet/build/tmp/compileJava/previous-compilation-data.bin b/jfleet-parquet/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index dd67cbabe6c6a8256e7224a6ecf39ba3abd74d1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51289 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
^
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	IeM!yY
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

diff --git a/jfleet-parquet/build/tmp/compileTestJava/previous-compilation-data.bin b/jfleet-parquet/build/tmp/compileTestJava/previous-compilation-data.bin
deleted file mode 100644
index e6e396e2d7a326710e6c38a28459c5309cfef965..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 39749
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


From 7f107c5c1032385401a43a5cfdbf3a1d79e42e59 Mon Sep 17 00:00:00 2001
From: Koldo Urrosolo 
Date: Sun, 16 Oct 2022 12:53:14 +0200
Subject: [PATCH 28/59] Refactor gradle dependencies style to match the one
 used in the other modules

---
 jfleet-parquet/build.gradle | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/jfleet-parquet/build.gradle b/jfleet-parquet/build.gradle
index ec005ea..328533a 100644
--- a/jfleet-parquet/build.gradle
+++ b/jfleet-parquet/build.gradle
@@ -19,10 +19,11 @@ dependencies {
     api project(':jfleet-core')
     implementation project(':jfleet-avro')
 
-    api 'org.apache.parquet:parquet-common:1.12.3'
-    api 'org.apache.parquet:parquet-column:1.12.3'
-    api 'org.apache.parquet:parquet-hadoop:1.12.3'
-    implementation 'org.apache.parquet:parquet-avro:1.12.3'
+    api group: 'org.apache.parquet', name: 'parquet-common', version: '1.12.3'
+    api group: 'org.apache.parquet', name: 'parquet-column', version: '1.12.3'
+    api group: 'org.apache.parquet', name: 'parquet-hadoop', version: '1.12.3'
+    implementation group: 'org.apache.parquet', name: 'parquet-avro', version: '1.12.3'
+
     compileOnly 'org.apache.hadoop:hadoop-client:3.3.2'
     implementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.3.2') {
         exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client'

From 548738198fd8b36f4859fcc60a38920f7a6a1814 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jeronimo=20L=C3=B3pez?= 
Date: Wed, 26 Oct 2022 16:23:56 +0200
Subject: [PATCH 29/59] Review dependency management config and gradle plugins
 (#97)

---
 .circleci/config.yml                     |  32 +--
 gradle/wrapper/gradle-wrapper.jar        | Bin 59203 -> 59821 bytes
 gradle/wrapper/gradle-wrapper.properties |   2 +-
 gradlew                                  | 257 ++++++++++++++---------
 jfleet-avro/build.gradle                 |  20 +-
 jfleet-core/build.gradle                 |  46 +---
 jfleet-parquet/build.gradle              |  26 ++-
 jfleet-samples/build.gradle              |   2 +-
 8 files changed, 193 insertions(+), 192 deletions(-)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9ef5f44..de997cc 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -24,21 +24,7 @@ jobs:
     steps:
       - checkout
 
-      # Download and cache dependencies
-      - restore_cache:
-          keys:
-          - v1-dependencies-{{ checksum "build.gradle" }}
-          # fallback to using the latest cache if no exact match is found
-          - v1-dependencies-
-
-      - run: ./gradlew dependencies
-
-      - save_cache:
-          paths:
-            - ~/.m2
-          key: v1-dependencies-{{ checksum "build.gradle" }}
-        
-      - run: ./gradlew test --console=plain
+      - run: ./gradlew test --console=plain -i
       
       # Jacoco and codecov
       - run: ./gradlew jacocoTestReport
@@ -70,21 +56,7 @@ jobs:
     steps:
       - checkout
 
-      # Download and cache dependencies
-      - restore_cache:
-          keys:
-          - v1-dependencies-{{ checksum "build.gradle" }}
-          # fallback to using the latest cache if no exact match is found
-          - v1-dependencies-
-
-      - run: ./gradlew dependencies
-
-      - save_cache:
-          paths:
-            - ~/.m2
-          key: v1-dependencies-{{ checksum "build.gradle" }}
-        
-      - run: ./gradlew test -Pmysql8 --console=plain
+      - run: ./gradlew test -Pmysql8 --console=plain -i
       
 workflows:
   version: 2.0
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..41d9927a4d4fb3f96a785543079b8df6723c946b 100644
GIT binary patch
delta 20926
zcmY(p19zBh*tDC*wr$(CZQHhW$3|n@W@Fn%V>fmhHTa(WuDw3|hwGe~>zEmy1FKsG
zYYc=z@M+Z>Uk4n-
zf>LPE!P?mA5#!>@QlN|1%u#eAY%z9sYzTix2)?dl^qr+FV;S+1iF%X=EN6X@efcip
zx4L{6MHen@KT&~3ddxw!vGK3
zDR6IzmfS(C#hBd@wn!OgvMoF}phsEk&F5-Dcwt7G2xG&Dm&xutI)E-Va!-qKz~+w0
z-=AFd+H(~(Q$3%N5nez;ZIxbBM31j>5Nyo-YkiExY1M<@u<0e*nz!!R
z;{N$-qP&QO{9nWv^INxb>J`g-yYMA$eDo8qb{Bw9^fZ9m+S(Rz2Zph#(1yUfaZB?I
z#eOI?a)(CpDeqla5F^C|B-C7T7CC2S%N!%mR&iZ=7m$e>8JAYv-&Am?exYu9F)s@^
z9C)0W-|mW~Vu~>&H5kvxytGG67Zv0pEg}b-m(ggB8~^+aXZ&XbbIGOp!bkEM{Np3q
z@-SX2K#W$Hez?IRlyxVVm5t}P-
zltiFvZ&=0@Q}LqUpz=6(h07TA`ZYSz8rFm{Z{-~Qw!}yL8*=dtF@T_H90~mu8Kw1t
z)le9013)H|!YcV=K?2_d9ifA*Q*M@vBRhpdibeK-gIY}{cl&GETL*)(oq?%BoP{H$
zn4O~f$L0bBm?qk}Rxw_2yYt*IM#^$v;IJSd(9j_NsR~GbNZnQu7zjwxm0I8$)sVjq#M(yl^fk=Y`b_$ZVpEG;yCH|Z~I1>MTYdpi8P>+NQC
zE_BSsn_WD^EqD%(G{YUlEBLDQx{o%zvDKPVnupGJe#6t<@AjO#$J70?_*f7K>5NMO
zCdGnVcF-Cu*i*B@rqUDnlJ*oFjO4O5fDMd!aWYNYr?1Q%bXxmhTs+GlOuiIos<7s9?Rq}Re!?8dR-lV6wuAMP@lIdDi#5Rjy`J^G=>=w^
zv-=qd_E^Jjec?ZYvRRjl)ZU`Tp|r;fQ0+e;vL#MSm0`uzNi*svh0g|21$yHVsskBt}fvlw5cR}CPTD)g#ZN9hWkzJiL`q#
zI0YW?x=^LciAbCH`Blg1^v-&f2K#)4q@^MJV*02DZqX0X-h=qdoEF$}M~SpY3pzsk
zjSrpF@05PZM}QhiFzr&-AQw3u5F}%7#F0rPla{VYb0~aE6$(UFm010IA@ar_IZzG_
zmSKga>0=esGyeC;)gc^j&8@M-tPu*a1l=rx;Tmi~=p^ccq;fJgp;+R4&O}&r_s$&9
z^bPU<-gBa}(hLnM2uLMmN+AjrFscLNt+$#cIIg?f@`S%7dnhgg4cg3YC<6`i+c=5<
zitavH+cN}B)VnF)fufnbw1PgBBDLI48@83c%)KbAY+(VFXHdA10mkp#-u?N!HIIgE
zrq9#*^6RCKN~bwo<}~Lv$NxUyCExF+^ECgl!0qOj(f6zy6Y3)EmkP})un2gc37z-z
zpMADl2Uab7drwFZd7rtwr)2~x^xrR;u?I)Um^>$E$nl#uiaq5T@=h_rpMy=9wp*hw
zR>EfZS|j?648RT6R_RlASXJrQJBLSNx|T%-@NbDV+~Y6KVAyLEXPp)y<~KAN9Y7H3
z4#5ey|6qDp(DP5oG^Ec4+%yoq&kzKa4jxBeKo{vzW>pvI9~W|Zwue`HMALHOduIe6{6Gf40
zRLkq<1&{5L2TP>S)b`5l8fWRB@9H;NJ~g6L7`uNCYJ7xGu0_WX!y8n*E2h?~d*n_o
z)z>t38Qk&FyCXF?)d^L7v`d>XW|HN4diuv0MOM&r!&)RoHO(3d+e<4FVv
zIM&Bs#*1A9dU$XEB1POPbt`fUTx0WxVE6s~u2vq?k(r4?$1xH5+uPlhot8Sk^|j|+
z<;Ds;`#is=0ADlpL^-E`>NyK^HV
zP%0cOvzyynZW>O0)U7pjV9f+WW()Oo72Vyvbx3?y7jT}yua~En>kC*bNI$B*D~i5EwtR-PR+E)dDo{=}GMv@e~Jo=F#|ab_Ui3^ZPl
zj*_7V>L+e+;<6-J%cYu#^H`HFBM|ri(7NtrF)>n@v@7e;v8E^M29ngLY!|gePuwOG
zH*%$9l(}SYGEttK>CHo%CWvCpwjjgD$JHD0se~WB%CNYsoB~d+yy!&Rc9{W5DrEVb
zZd0N2!7hwb&I9?aS<*SoJw=J8UF4|K5VV#+Xw!!bMHv##=j0jsKab-5a&%4%MY0v~98iJ4
z?9Uk;!%6D*%aJ|&F3JYXfQwRDzgSW1)S76ku1d|-3>O8xmwvAA7v|M?Ll*{=i?
zE;5}7yed-bGu@ZphkjV-lUM-@21k*vbhtwF*$oft>|eZq*pbw04y;i1y-J|`(fC_i
zZM!(?)nquXW1|jB@TV^=GRiqmmSU!4hsfD;*pQO#2ScFjQN`PqymvOi@+(fD=+Q0o
zR>40M7~Fea4o%(Vq{_JCsjE3+$cW_o#h|gh6DtWf{Ag}nPtw3TywPd`Yh6aED)@D8iZ(Puv5=hi;?ev&|m|%CuVP&vGeS0h=NykRI=q**z
z60h@d-2M?JyAOdc!8kg^9b(Y-B8@eecwnFb#5-k!2!)+u(bhkE{&&!vQ8#(JX?oh{
zzr*y3>wpKlprHoa58Qsle}7*bD*MHcxL#*L`>vKYBw)eRgp~m#c6{u3&Z~rxA%sg0
zH7*x3#}>yIR81IYW`e^Hp-&&rFF@mkD_rJEj=OC)RC9~n#e;34
zB8ucD9wIh6e_MT%XxqoAnBp>-7#J;V4uUKF1F9xN$N?m?DQo=jTXR0tNbg=X1LV}H!7!x&-6z@D#<}1l}M|wUee!@W4|eZ
zE-ri-P+EYIjgckuXi|^{T(G=<|0AU}Br-NL2O@LyVX)sgW+vn%8R_(#qh9G~!wT$a
z|M-?u@I8YuP1|w0#g02jiy+lkdeWC$ssO?dePpkPKNP*Mal{SO^alvrKVtC8(4Tp!
z^HN%W6Es(Je!}?y`44yS()^H{GX8Y$Re~TmzzVf=s4A$#6f$!lz#&Od2M*d76UN$IZSD83`o#6EFYrYGq
z{S)+_qW9B<5~~hu2a1KJ4;(jyF;r3>ZZUwS1mbs5lw&(KhH()Es}?izw`cI+?7x)-??%CsoK9;>6{
zzD`I6_vk=3VvfF?&3lZ1Viq^ZH+hPn_4;fiYt!uKd1|(1((AufUDb0`UD=E!O50*b
z+jL#1#(%21l14=h#ZU}qc26Gu8W%vJlk_7$DMjjU{XOsu4lkrXgroX+Jb;2=cmnOy
zZ}2+e3eiM8vhW^t((WV}dfHrPZM4^KxfvZnZ&BZUnQ3P3csN1g>KdGqnC#6XbsaSz
z*PkQs)Fs>C$cuog9;bo_?3afb`wO>5utUCcq8Q=3zchtyFid@+Y8R@bt`y)_i9u~s
za?+Y_TV;S-IJ!x8+SZl3bwREuYknK$o^u8R#cQEdI8HHJvhm?HNX__AH*T%dzL!_@
zpHpP(_PfPZA2ebp#O%Rj(BgpBx%x;%TwFVa?qwB?QEFLm2sCh3nF8(yxJu``PUoAf
z{nHJW)+YnmOUaQor!cx{MX@&(%`UnE``zAgYq`}Aa|{Bt4SzM$CY^LNHt==%bbaT=
zN=>HRUh|=>gG+JjruW0Dbr-68sLoZnp0xS{hNBr(W`OhSL*=>=nV
z%U^=k{5w&f0}8CB8z6$9kiCcUC|VKDx^VTkY*?OLr)R$Pa
z6MvHJfG9W~OSq#INO3)~@{Vx0({U|0^q_8N8vhYAHp4*O#9pKM&7(jC{RY>qFE<}t
zfu22LjW2-ov>`XY3>WoHV*NtuYr#E^!yA75XT%X}VR}IdMS98?^vRc
zHqgt)Dl^B}DyimTyvhuOf_%c7^Uw+{P+Z}BNa+RpFFtUIU%>#@x4X##o0nWfAdIuC
z|I@({>IAWLfv+r7;#r8OA}}kE{O$7mWgnUDwj2H^&H{Vez@i%
zNFs=^7Y}f8X8zYI=ybGM90@A;UT
z6C>>adZvv`Y~6kJ&C~KscaL!#&fOs5>4taDk%iFRlz;y&T#T5L=Mv{pG9n^dKd@pi
zT*hobD$qPd~1Ek_On}pk<}}&>&s@i^<)ORpblTmmY6x
zj3X*t)A;3|ng^*KBA1lkK7iN@or3~C$H0A2C%rjjxIO^-ICww)MD=qaXyBjPQ*Pmm
z6zZ#+w=+0rn{|8f?gzvtg>SDkI}n~fFp-p7mnhwR7!fVEsdUy*RMP0okS1^J7a7I^
zdInUGLO#ob2+ZNbfXj>~7m%E4OJk;~aknUFj%U^;G>T{7kF^ZnbS=9xKAef-iB!5e
zU?||ouINGYLiQK{^pPZ&h)?{gt8fF$vC>r)L2((6jmznLN;xB3p)lz`(x$+${-w)l+WLX>e+#z{KXU3b(zFfTXJ`+)hr%Lc
z>75w!kfN^GcUXS6XcgW-G
zV%Oqm(gF#-Xi|9=?IC0m7;=ANVN~&bkl5B_#2d%aT|x@QL-&eg$ryqPEGidR#oUxe
z&=Ey1-`mym-jqY`H>(%-u4dwZH$nFH$3L@l-+qs~@QH%=3l<=Dqofe?>P-;yszrwz
zuHFgw`8E4Kw6f%#;PYC}86jA&_o708Avp|_<~?f9N}^j}kNn`YhPuocZI38ppXz9h
zv*BQk#*E8kgUY>bk77)(9^%Wy!C%^&Q9SgX#YC>RdrJ&ZCzU%*3=i*|7~LL&K|Xc*
zG|-z-K8)?t@ox37J4cM$!Ow@wURUn|{N3AesE>}qVsxa5Hz*B%Xr$^_W>s21lBN8R
zlu(tqexHn%^B_5f&v_$}&UIMo(_4Fx?BUVO_5O%fFjy)5K<%|PWL|nss!TdrD0Y7G
z;E}d3h^hJ&wXb%cj@I+A2Gq^#%FYI^o#_19anGx?#7^s9QoVpcoiXLLc2XJZk1`x*
zntj3u*)wKvvGQl&52G3$VF!!@>FwWnaRh9&grC|gKP9t2eck&VC64(Oo;HS)!Umcf
zZ4fvRb>4+ntoa?z$;cvBJBG6eovpf`q;nPDOg}I((RkI*noA7YBd8mIO*0)~1-acS
zJH5upSDst~BOXl?(?ffPLw=?U<>rzc6q2
z_(4(OQXpGkOvrHr!W&-KJf%HZ8&wIdobcrc=aljc3g6JHPo?`4y!kbmp9QHBJ&Eh5
z+-8#X5xK$p`P4;O6M-cV7nm+STSQ`W1=>IzmM3vjBdxYMkNx>yW$}&5^aa+bkNW(~
z_8D=R5YoWH{XQTp2ro{1?BMK}>1xG#_^XItH&DN3Dcypu1|FmFtwdhQ#+;JlFkQ3y!`Qwj8xE0mJ3SN-m9^8h3z%jI9+LNm
zG{Ds&C=l#|sisMR~!`4W58e~;umktsyI?nBU)%g+QH2S)e{3v
zk0>#g1h3#F#O(`qLjC?&o;1%^gfOO_&^>RilU3cXHu=*S;dHPC+gEbX{YvPg2#a1I
zFA1+_yz}ky#qJLf2`$`-eMk=`a(sX%vcyuRw1_Fevqj+s#uU)Jc19TOXW){0XGfsq
zt~lc>Y2DEw^p81#|MBZsrMYxvpHjPF%q^d^BQNZqm2eIL5*?A+$x$Wabj)P>_9hQr
zK&J&V+ncN@>=nrk<+<03g!U6bbv+3eDZEZECcCIczhr>H0*(&|VD*j*XS@HXIs(|I
zy&SoofwPMi)|pEO4vk#*`Z4(H4}`o$2LTRVakG>M^#C{u-0=NO1}9uaX{R;p);
zBTsTmb4(heR}K~0x;um=Z-vTYd1JX6!o(a;=Yhf$mI&tGO!GU?_ppfBn#}PsKOuy;
zt+Sepg#f>076B9R3?>D7qr8+zgYg8s&o)YS7PV?RE%9(lT8T7L(CkV`wW{ZLD1EdR
zXAP7V4i>2y3&|Ltn99Wwe;Iw^$52w+dLQbtx$xTf6yD~-#pd7?2zFc!rI#_K5g+Vs
zO5D+8AVRW1|G=O1EnbmUSx=Ma}A}!vHnKiXFGgl7I
zR=-Q_%9F*Z*Z|#Ajbi5tqD`TM)=I_%!lr&c2X5v;
zm5hm4rdvWYPMF#VoTW0S3t<_GFbeD~Z-D{)5>EH5_1(9A*hiq88G9G24Np{!<8^pl
z131z!r1DKYwN+&CK&Os4LJQ_TP7}|k-G;sC{G$;>AP_5HFbh>WC}tkGd|@moaS~sb
z9j)t~HZ|VLJev!?&OoTh1t!bpR=zLZd}^4F(R{Ub5}?u&msH8IFD`2@{h-NAT
ztxBm$<+|0is|`&>pVOyjTUTsPjm&YA^UFM$;mkuV7^h(>dTbuNz-gOVe!x60BpY7e
z5whoQ_c=0GO++o+*!Xbtva1)8hQtiXoEz9V4E`cX6fjK6xo*adj0Ztni
zQ;SK4&p|sG6}&TN+{u+m
z5>syBaPtGB{S3A|kNKyD%6&+AhNczIj6Vanq2CIqf{-|%&9J~d-8jK4a=k2OIp$u>
zXX&{2ayS~o3if*1-L6Q=lKMmXfl-8#%=@6>rRk;-63C{4l0U5bAo(+Us!s>RogF&4
z6)F~`0<00mcQGulo-Wk80tv}|D%1*nxJIyFU>tpia@5y!u&Ev|Z=kwfuxx771>{=N
zu4Uvz*isl?kl8VIF(4}sa4ZO$0&MjY*C$THU~bIy#8P_ia;
zH!2nx@xYVHKjY1iS6*BWa6yrJS+8Eg{8v{
zdRV!#Ce3Sd82*H3(;c6R`kLP%mUJv?gg^k4vi}WR28vfyN8-akUR^YR4(xA3SjCa@0>)7$=qcSHH+g>oFJjdLNv38uK$2%<0e>v}vKQV%
z4`*eelNE|cO`3$VnEWS)?z%Kn<3o?Y8opNMpj@SP7OR~~ZhJe9TTpfRkdQ2h?R5)H
zSxq}*=pCK2)cMij#l+GZKj&RD?l7HBeG%PS(d1DelPWq`FCe3_tf8{V4_;5|zLYMk
z`h>I%MjyIj))r3!_y-~73ZZ6A<~Zs}x-Q#V>M)H>y3hu=RZO^8!LNPJ?6`XIreVz{iv
z8>Rx^_Nh6T@)k0+oXNkP%oA;TDn8Y-pO%S5YD3zo81A9A98fF;BKcu0Ym?$yHYl&P
zDkoxGb(U(n3UAz=s=g2!@rP|6XW}g*X%(X|{KE%bkHG&|9j3r;;HH$Cp{0a#jzf?u
zXX$CAsBkd?T0Z{hS_I#HS1i-!LF}mu5S!(gTeBjV)!1
zR%;tNpnnTDbrXHp>HZ2f#mF}4h%S!(6SnJhTGXtQ61XIKR+ISrwDe5bnN3E0d^_&-
zx&6G^dwKD5n*Tfh&KOL7^`4HG;%QyC5#c};p#7><%Rq~GIi6Aam9J$aDy
zrt3``%xTvLm`=wY)^09rrtC5=#7EsC5`xbdpCr=
zgx`Gu$b!g2P-3q?<0$;s68&eA)_Im4^naax(LVOnJHUaV(oYcmPAb>SmMMR#ImA
z)QPrY^>dV^-|?e@LTtrWoyv0K3OCC$+S<}Z;hJF#$7qvk-loYcF@N%-M!q{QS8<-W
zT!>wam=}8*l92<<_1K}aJ?ZY7Kmsm+w^3BCj|o$d?5sNUX?~r0ZUa*R&NvUXJbN}5
zY{D?sb^7-VM$LnjvucYqrEmbGIzfA^jbk~wO$AxU0LSl`kj`wJok{v_o1FzG*fIx)
zt@b~{8TkiZ#|5T9^A2PT!+v-cma|x6kdiPzbQZSFxF&?NmF{-}{Uoh=**-hq2}4g4
zezq3pIKrVf2tG&cjci5Jps*GdGJogGCs?yjB2W8@k5q8l%d{U0+ZV<}_X^ubdte9K
zm*58bUwV`MFY>qFMTIz-sSbIe`(y2)L9>^sZ>ih`d<4Z!fd#p*HxCiXz9xkbv8^lJ
zslf=T-MM{;4*Gnk4mR9XhKvJub`bq0pZyXc%**vS*~3?1LNOf{L=+;4M_#Cb4f{y1
zB_ULIR1m2mJ@P
zu=yjU154*;9#-;FO15gEJetQtiii&n8!>6E8K#o^Q#vAK&Yu+N)`Gx!=bD5=cL#pu
zxxAA*H!cU`^qkb>uS#NBIi~tlWxN)SRTn$0!cO}NhAlFyCn}?`oa2wMKUb<7b`6N+
zx?WW>b*-=!PGIQ{s(3m$G|Qe=_9w=QaU|mpZQ%9ssdoR$KD$+w+E0W3WXlE6RaOY_
zVI}A3K`x~yxwINovxx)2DrPJU3RtVOUDc>=eIYSBnPOIRRR;g*td*MH%;fH|&pNZy
zn|}H!!>q-RX1|1Tg7|vZ0?Vy%tP#eC8Io^y4jtpa2(_IabJ?*ZO_gzoqN*`kkOw|4
zJf+GZp)QWpsWTQ9D@uD>sCycI_IZv+()VCR^-m6|UYBE5@YcW^zL#!v7~C4E^C@HI
z#sEQICG%962}QYr-gLP`Znq7=TabN+bU_ZHHnrei9}k(4nBZXZe6G#dW-|0>(0h!yt?&oJMdJ@<;9A6!j8=uSWl
z?1maA?8r(dd?|^~DVNua;V+lh%i&-b@QdL=7w}6Zu`Zy1n(mGtH*^GP>D3?C&N`92
z5X~Uy-)Q!k$e>Iskz+a?7(pVoWl9xQmvUb(xOrzeQ2zt!?axbRq
z_vQ|J_)EOzO2T2=P2`?)0{ZNM6Fyw3MsIkMY+J?rA=K=K2~zndIX{7-)fdqRqR72<
zS-WrWbPs@mXn3NQlD>eoXq4#rR6H6+KZ~rcF9urE(uD)XLgkXcaQJZei_JS7$)um^
zdULmD6is{aFkeuwkOCPochCdW%=)C^5<-AUjA0O!0!0-SF*zrngGb_EAN;~M@!N})
zisz?90473h;@5d2i{Xhn-}bZE5xBS7}0f_?fGYq*#
zrCLC$;CD=56T-jIANc4pBQnb*CSn*bCc?R5^89fkF8TSZiDuILFa{rJ!-t^BjO9=y
zDdiUA0bC@n;HxWy)r>-uj>HUg(8;BGi*juc*sDBOQX^((C2GMcE=a3ubt8WA+wq^r
zX-G=Zwml$F(o;U{UCChF()zHAepZpxsI>3{F%pSS2UD?eBlUd=
zhHv;mhXv$@MiAet%X=-oft}VZu($t-AOB~GSi8SJ9smjgf&=*E-j0>=ng+0yLU-sj;$Q{I-IHgZ)(
z3d?M6o~HqGex8;u^Ls@7AoRu?!uUQomZ<2K7T(m$JOmItb9mCmBIBf?Dt})S=s0mX
z2AOp?Pj5R<*lRNq=rqrV7`?XBsW`)d+eg|uX(&250DQ)Z*pPfD+y
z!~8}hbzLmO#gjfJ|A=2#Iv({ach#E4L+|_d!(s`yF>ICpCog_o!zR_^M0_3I!uW2Mn_H3`2v;#+HK;tCRa5;QE@8k>?EPTsG@If-hoAwz9Cb_W%wD9dB
z_YVfyh0TS+Wh!c)rSyxMJerg-&61N1(e!KlMjjXz7YHqdxWf<_G#WI>WJ<@w^aP5C
z^B)9R9TAtT{HEBq-hOHuSe_|>$>BHlFBuE@CA_pkET)iFcj1=SRxz^>S63+BqErTv
z5**_XasQl?ev$85bu5~(6N0uFId-m4jgDIE2>WItlKFS!{CrYyN7ClOpN$GSsbeg(
zLdgX@5$Od2l23AYDdnifmkZh`FwgiUSK*?HkgW3ikcF10b1U+kctu2jz+2-CZ~TKH
z?Kj4z)7d7K^&(jp^7TX4;t2;vh|{uAg!BUr9?>8{HSS&QPb{*nrjq>pjBak0?KFJU
zz2OxcmaOvt{B18U6VTo=j_<+^DV{)_+`YO*capOLuS$JPy|OaxGxB&9l9(
z?bk2AU)Fu!olcglGLXSvf`IpJj^Dh%3;nm-O(&O9|JT5S9+;wNb#I$T_y^AXc=kbq$;gh~ae-#Sg16yBG7r}~@1sXK`|lFF
zLUDz6XaUnwhfX=yg}Xre#6G2vQ~DRc!0U9NDdd!vgpy)brfSx<{=7
z!@p_FY1xLNZFqmHtW!MOU}!wGj3DqPHHk5vA-?-_`{>jV2l~7@
z)CpVpvcz`9GGt)nm`fff%nL&9T?>Oy@)Em^f2ZP>cl+2UFVY>xl75w1PFxS5R*|Rw
z=hRE)+tDW5y)UNW`H_RyX!>^Y=+Zl}(!IA}kM0wJbm1R+pGt*clPyy}fXcQ(CEjU~h6L{LLq+G8mbGAci=6)=-7Mi($5_GLqhMbBajXSX
zW?=tQ`}HY+|P%M7u`Szoia
z*7G;{mqMLhJA2(m+bUbUh|$6KzbH*1_6E_g3N
z7@z84#6(=J$~!Ryg7xldr>MmmH0Mn&BVRUWmUBiHYs#@MnT)n)XQCsG@Xp?OvJocl
zRf#0-;Dwz2`Ln%o&r!M#@ExVw=-G+Ei@B|j=Bh>^II#jl7o)i6bK
zk+6E^SDUnH36V7TEl7AFJ$37F&%BHt8L-k^)8=3UDkH)vW7nY5V((+eI>atOU)?a9
zz4FQk&y`4Isp~6C$CTL!%V*d8xT(xfwo*A4vFR^WsT4SzJ`lYMP)(!a?jf`rH?!eH
z__TlvwtLfOB|4CVbDunP9&)t}jsn{<
z*tjO^J|-5BkSJhK#NC?r=Wg7;qnf95rjW08eVmkeySC{E+d>9n_I^ir%~(utm*UZU
zLUk6b5rw8`Zg;JBv1x@meo~zTe#Ib+WknwQFf6T4v^MK5U{e*8Y5w;`C$DX_%<{to
zDn*$i6HjTQ+7E((IIqi%zDja$oU*PcztV>4=(qnpjkiK0WKeSB)mWhMJSLc9+hLM2
zDG5ptHvT+9Oc!`;3)>N5Wob=~^tA4>OCmU{q)`j
zoW~(%kbs$0J^umZHis_`qoQO3w8&A5+n7!pRFCEgkbq>KTL>RlrZHg}&sw5rY>r4(
zhT|+rX&}8_`sOf&n?X*aF9zB?MBf*`Xg)G!?$e&UKsM8~ALG78pGz%G+q-sb`K$WM
zyjadV(C~D
ze5Zdnfg&_~=T^PJJp#;%%W}}+kkMEyw!g>xxyw{<-&VdJf0@$Db+fZoXwqZQJLSS!
z(RsWk)je$_r^6Pj*{o6x-pYI!gg6@1{*1FXU<}n9%6ng98~FFp2Tt423of?|uJ)U|
zXQVaD?ck7+@codNZK^i(AG82$elEPoODrxKe`^oJ{kwd
zf!B_~#5<8tqLcBTq;6P>xWMXu!~GGY(4Z3T2f7f$>^j01mMaW_%fq1+_PLcIO9AXfCLI^RXPCM)G%xc6CPx{~SEmYQjOMXHlf!DCP
zgQZEwmJB&ubf6DI0d<>)v?B6~jv40f}3LRQy
za^~uqx#ZzsmE-J$@@NJ>wtSd{A}(Pee8GIL?4KH|-s~`j>sG4e;SFkg)t3!AqRn0N
zR#5ArJ3w`~Es4(r8#nlLVq7)WS}$;t1*o=xdqrODP8C;n&5w|Ybg#EAY7a^PJWh16
zAp!T;n44fCXDq~iJjiv@BCV_(NTHBrmT(cM%6yD#q0`;wG7E8Ht?Go}T`QhdCxbWM
z^q~KK-BqhlOq)u*CJq2#1x;0;imd(m**bDG4ZLTIn+JC{szC)@ZmKX
z+Ap{dsGN|z|3!iGOALihjYnny_{8^^v3{;g9H0FmGYI(|V#xlQ@j({~Fc|d*gPlV}
z!}OA&D~vWVdlPz0PuljeoGI>^_2l&?VaKq)#8^zje=(RM=m%Qe-M&GD8lex&PZ`9r
zLb&4Z&gBjQ`$DiKLNbp_*k!E0ss{ngSnrX1R0}{RCBBXaAy8-HPrnPWQFU*G@P+ri
zvkyq$(C22FsZvrqL{SVI(7GyTl0hz~`7}DUvLktpAN~@V6#8CyHG=%s!!H>{O;dff
z{vZl9GD#e3!2K{1G`ahaeU^LiVbl$hF|z7kxfY>M>2%;cRZlx~@H>}IUp|yE@E7T_
z>1US;a{0k$82Jl$^-uwv@l^s=R;PzoG~9z}Pz4?Cp`UR~M0OokRyyqXZN4+k0X)T@TbtdJV<_~>rLHm+$0+2r(ZrnzHjtg3b$@Pddv1s|Cvy6)K+
zSoP@VHZpjXMRs!^MWpeJWzOjlZoB&~#CS;?;dYo6b-nk$9ZvyUehd4Zuz%BG()eJ}
zwJ`*v?)Al5I|;|Ks@p5%0gRz1zAU0mJ7ybZzX~+3Cjri76C+u{a8>U;!riO#S
zc$}=b(+8p&=rB<74^e$=a|AhwYAOz7JncWv;B-V>)D+?0oZT*){4m-ql$!GR(Pn5I
zGo=fB)aiukrfnj&oyM13t&7CXO6SMoch~FY2tA~72JC@Takx`-AveCt^sT`h*BFm?
zE*T|KcZk}{2r4RV`lC~QlYUCf78Fp+J;_x6x;C8lQ82Z#MtjZ_l~kg81WL(2r-4nl
z@yT(5993JF+z-p^qgK6OX-cNsaKfAE4--c{*W4RbePk$bR1R{7pX7;~D`a&Dm{brYw7#BjbP7P7}~)t-9OC_D7Bv80)b`k;waw$3OIVTw9C`N$Hf
zV_S)&(Om0}<%DE-=&tAY{^~Wt?J}A&A8algd_Y{+nhVN-`Bc
zrfkf1W}wb&HKI#()d(|BTGUeiI3e7ebzaYDnH<3CVI){5tRN%?srXJzn#kXj-=uK~
za`7CM^2S+F4{HN@x}WwanlIG;%kt|cokOJ}S>4T^tNB;fgzw{2`6SNs*VDBkss^Tr
zSObm|#2v%2F@&pQs$NS|GkQmk2nL$r#?{iwRi}!;g!Vv6
z0c(Ic;_>NEto|SVTPR5vwgZ$pTD=pNhEOW7%6jDjYd9HuZ?7ZrrZfCaF$(eHGLYUx
zNAmKQql{R`Vt=2B0k6Iu+sZG?_oxe}qQqh*kZZ$t?9IfZ_0|1-k^VyWs0Z0d8K?OI
z_Pl(2(xbp^eO*r>o3fLal!n&Bz-(9T>pK9Z)hY?;+O)Q|G)o-;$JSbqq3F??=6YDZ
zYB=S2xla5-&fN4bg=*(Y#>C0k8Pz#wTok*MG!??5q5%%DJ-6Cm#Q|vq$ag
z!6_zVgqzm{!4HeLHenta(AOWw1$7K8?UaeLd}qEFB`>C<2$`KIAUj~~fN)k19_4IB_!C7J))-9CDG4vU+VjCb!3Epa(DcO&
z7P|Va9G6+ccUbs%Y_N)dHp-KM0ti1?9k2XI2q3VKJdG5P7MNcJqB!Ja@P6nONcyqU
zuAGs?6I#Y6p!AA9uG_e8fAazg<4*A*{vnvQD|fI8ghx|SXN&5EaX}SY$4uc+y$l#q
zHYj36S#P8Hk(H%82D`ptvWdzYBr~aG2s;T?G52aWCFC_UhYbK9yCV2{t^NipNf@KZK%w{c)5Nd#?QQ}}5qw|J@
zQCY*FCDzbGqS>05lJTx`dRiwH3sqZ=>nkN!udV8B6o$gk!hDysCpFG_r*e(h0_wNJv
z3w(v!AaSon@-Dm|FE{}AEn(bV?20QAvRCFB2*f}2!gqCP08H0Mq&K85nn{Ki0p}X;
zOplgjDg(SqE+9Y;;xUxg;{h0C-rCtKx-DnN7hy{3Hp$c^U9+XYS-mdNIMe(kd`W?E
zI24(|N20yon=+SlSK}gjtMG4v8p&G9=2vX)&woB|-WiC&-zY%l8#Q`BkR@2_DzY7g
z0C-jeiejRrzOKSD#w&+1W7+NEOA!e9G<6rriKUQcjGF;Y1}~YCsrdh@;yS~c*tRGP
zMS2fl=pa>!bO=aC=_p7MsUlL8W`a_bP$ET&fuUGvA|0eCT_H#jf&!sP6+#VosRAOM
z$IbKJ_ni4LYp=7;p6@%~`7z&~eHNRv&@U>B^fZR(LWOki@8dYzE86^qKPi+)Fq
z!vc*s?9_5nQ&P~2o&H9bah!$;N6qJTg21?no>Wa2;idC(Pvt9L^wfakGBSgP%s&!
zQl>njcn1fc-log>DQQ->*s|J5HJII^sY#K8q~t&0K0eIf^x&HwkAiP?K1)ZR2YTS6
zZ_)|jo0nD^P_<#l99qUw4k#;3gs%_zYQ=YD&I#JS;}=;rNN1#EWO(Pb3$JhL!;ann
zA*2>7>vGP%=P*d}gZ)8`PZ-LCVUO*Q1SJmxAw&eh)g){hDTx>x%zFX_*9l*I?m1oB}B)|Y>4%jn>GZ*s~v%I)Jw8jJKpMUjqO
z6-26@wM~H_vY67L@6%>yaeGs+qiSy>+z7JPz4(*x3Jx3QkfdIDI6c-XC!rH5zV!1^j&8AElZQM
z>n3c!RIcIK1GxsL*AEkpKW#aZvZf!Vid&JXN8n)wNFQi{qw0~al*(rr$UJZU=Xt8C
z`SV|{s0qeaRW{j22nM5WUa1%s)!av$pA(rP-PXKl;*T=Ry*SM!7!s3QV^>_lC(Y=g
zTYcl^>k|^w@}H#@VJD;ENl#rnNyUXW=Y`M@OcJ|!RM>LS=V|nevZEu9?6yZ{nJ`LV
zX)XU^7t;Uv4J(G{
zO_F<(F9wOJJ6>+S@BTK+4x1ZZUyxNj;vq3>jC2i6=p7LQ?4LSstz1DHx?hU4*i}E~
z>kdh^FEQxiW}YxeUz}z$nGndMlH=>#fgE`3TyPl6Ix!QqN$r+Z)?0^J2a83vizn9x
zNqee4C2Wp$(?zv~3%3}?F0->ZWW`uc*i-X7E^0)er<$_aQwdIr1~%)RwRA$hgV_9Tk6OsZXOtY+tWi>~=X2Lgia6
zc*`s=&w5vequlxtoWpnvO35B?r?rOEf)tygh@XvQLNWro1fl*NKHj>ZvwQW)1#pN`
zg?2*?ihX0CEH__lZbmR?F@~jxiZfUr36U~OT8g5k4KEI{%u?(M(0TISRkSGVa;8F0
z9~iFG8Ju7%T$pcd7bVxB8LYTbEM=5Jr5#PafzZQ|Se&^9HBWD(mfQ-u^u!Gk{CumM
z6ny#0^-4t>Q=I!f?Zl4e!5ivvw3cyqEYFSqM9nI0nhn{1OAfJ)RMVuRlwP%u@xBVm0e|q
zSePOtWQtAP5}LouK#-$6J)h6w%CFwb9IU}nh~b}1IFIGEe~3s`T)?~!-|o9Ib@DF6
z<~>01oyGZCBB*9(j_e-}#GK!~Qp(AMXVYfW7LyQ*X!f4SpM-*qreFIku8{K`l4u%b
zOtM!=#K_3QZxg;`j6DiL22oTd?nzp3_O*OODS^@j4qq-vV7Kho+U)(f*Y(
zx>aLRtA-uuspKS++Oq`OCetR5z4(t~38fJNHpxjUcb!rnBVh{*Xt_}F@{Nu7^Tqzk
z-_He%-Q<+3xoB5-t0A*X<>m%Mu0hcxy3Q`bPU*C2K%v-C`ija2;;ZzSCNanY|7ssX
zZ)vOYa&xyHxP3)lK^+;0QkCVSA+&9acCTwlUbF_MZ5%sr3Y)``2x*EXq08suOM
z;d7ZpGMK-duQ|IE0Bs~Ydnr_S0*`%wK}*F$)uPmc9+gD$iw~sk{ZXOUCdrwpRU<#O
zusF{^LLx#e(5u^XBc+5s&rx(3R#vfgP*+J}*$t^vRPyv{V_uy9{Unt$Q
ziU!Rbr?nmP<)rAZ7p~befB}!ASs2}zp)$+r#W8{E@k(VIPmmwe&PH^YtHm>wZ*D5`
z4(r)7zUIQy&E43&&xv=5R%zyH{nfgwkwrDf6528h3i@np6<^r@p}^P|6KLHI7f|Q>
zL=wu``gC-Ug4c0gOY`=!sGuXwjGK}Z^~_f$N7|Wy9i(piOTg#lz}7uadqpYTp0Tu&
zJ3wB1f%qp|LnWkX2V3RI%F6Q}#jy*I8)C;6u+LZ8H@_X;y}e%+)-~j|SCS!twUbr6
zOj%H0O*OdB&AZLbrLR4@9w)zbmiUzCc$-lk`YS&$U
z8S0c3=}(}?9w3(B%!v;PlD55v!(zaTC{G$O{uI#E&F*%BE(Oi<3-74%chzeq^Bf9W
zWwc)UEha1PkY^5rH}6`o<$9-xxWQ8;2XHlsO4^={4NYaw3hb|a`kH&w4%l}PwZu+D
zc{!N7)isNpXstDNJf65GE2Wjg{mUm7R+VNWk)@$M7|xGUHSTr7c0($}VD$NAPF5nr
zlKS#IV@EGur)m8~b#?$(N^a9eD#L18WkLJyxx+ccF!$7CBB%<)ij{D?tC
z%SyShF!tAB6hEM{XB?>I?hR4gw=kUWD$e0#3GLOuw8$7fPeD2TxXXq~+u*7Vje9`B
zeX^O_hmiRu_Y*|kKwLpp@VDv(qg`8rjNUC>V|+4vdH#BfuUmef}fm`Fo#u7(Hn>U?K_FE
zliW#qg1oBFvxzjqhuNKu`tuB-AJ@}$+N18XFJX9h%-hF&;U^w
zocp>JhqA0O{>!}I;1os*mwP~el?$#K%$nZDW2(R@s%qS5(ynLec$J;bswJF&hwCyT
zJ(n|PkF!JPcb>#=8Gm7Y<@&x5b4Qof-^MTGg{D%wgOrC2&0GB$peoMO3}(B5i>Qi!
z|5iE8Gg$q{?VhG8IgHoRNIfmguC`w|tcxS1<~f9645hY!_Zn~Lv2K(}^Gy7lfIm;M
z;D1B-23;mFYE&JF38ZA{oh_D8<=2Y|I#*J)W4Fb_UIO&VVe&vK>@8Ch=lDQGaqzW@;$
z)*Us^O-w@FF@UL>HD)ZUPPM3rh`qLM%+fFrtiwrjxnno`r{wms`7=Ltsp-;?izTAq
zwTAcAx84bvLvJ`xujLbNx
z4Pkv*!(WgucVbiE$q0I#6xxS#&`6LrdK89cWL4UF|MDDFE~C7P`L6f5e&mR(aR?)L
zF*-=}WfJUwSyE+%1IwV(6^j~dMY=xy={AlP9?6XPcDmj-BVyeD^OYeX5%@=S
z`pgU8Vg4$50FLMW4aY~c05f4?_*sx2d@;@hx{N{rE6G!e3w$~b-5AzW6sWhMSr)AWQ=ig|ItwLhcHfu
znC)-j%9s%MAAk4%5L)X07AgbgH;6ECocs5eV8u8DIB+16>h|>D(zqD+A73GVB*HuW
z7P5kzGfd#EQ?ou%cOq5i%0r~`JecVInUWW-e3v+A_U#PV>%j`rf0F>@e1B7#Ktdq+
z^qV=b8VF8*vjUWYK;=m_z%2-z4v+_#rkKFGNhq)pavGimS0>GXS7G2x3O8swr41-Y
z5Mgg9BT+a!1qIS0i4+4~37CvMg+ibwUKZ$jLWCH+9&k7DH>3a=)Yh~)aQoRQ)CA4vnLuy`3M6F{M`SX%z||QE0G&$=wF)Ugg=}`B
z%3~G^q~`xiznO&r`9=SRhWX4ymHZqO$SwIzvkcED
i_W%EDg1>@4`_NK(#)z|gdCiK
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

diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 41dfb87..ae04661 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 4f906e0..1b6c787 100755
--- a/gradlew
+++ b/gradlew
@@ -1,7 +1,7 @@
-#!/usr/bin/env sh
+#!/bin/sh
 
 #
-# Copyright 2015 the original author or authors.
+# Copyright © 2015-2021 the original authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -17,67 +17,101 @@
 #
 
 ##############################################################################
-##
-##  Gradle start up script for UN*X
-##
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
 ##############################################################################
 
 # Attempt to set APP_HOME
+
 # Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
 done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 
 APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+APP_BASE_NAME=${0##*/}
 
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
 
 warn () {
     echo "$*"
-}
+} >&2
 
 die () {
     echo
     echo "$*"
     echo
     exit 1
-}
+} >&2
 
 # OS specific support (must be 'true' or 'false').
 cygwin=false
 msys=false
 darwin=false
 nonstop=false
-case "`uname`" in
-  CYGWIN* )
-    cygwin=true
-    ;;
-  Darwin* )
-    darwin=true
-    ;;
-  MINGW* )
-    msys=true
-    ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
 esac
 
 CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 if [ -n "$JAVA_HOME" ] ; then
     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
         # IBM's JDK on AIX uses strange locations for the executables
-        JAVACMD="$JAVA_HOME/jre/sh/java"
+        JAVACMD=$JAVA_HOME/jre/sh/java
     else
-        JAVACMD="$JAVA_HOME/bin/java"
+        JAVACMD=$JAVA_HOME/bin/java
     fi
     if [ ! -x "$JAVACMD" ] ; then
         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
 location of your Java installation."
     fi
 else
-    JAVACMD="java"
+    JAVACMD=java
     which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 
 Please set the JAVA_HOME variable in your environment to match the
@@ -106,80 +140,95 @@ location of your Java installation."
 fi
 
 # Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ] ; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ] ; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
 fi
 
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
-    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
 
 # For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
-    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
-    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
-    JAVACMD=`cygpath --unix "$JAVACMD"`
-
-    # We build the pattern for arguments to be converted via cygpath
-    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
-    SEP=""
-    for dir in $ROOTDIRSRAW ; do
-        ROOTDIRS="$ROOTDIRS$SEP$dir"
-        SEP="|"
-    done
-    OURCYGPATTERN="(^($ROOTDIRS))"
-    # Add a user-defined pattern to the cygpath arguments
-    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
-        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
-    fi
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
     # Now convert the arguments - kludge to limit ourselves to /bin/sh
-    i=0
-    for arg in "$@" ; do
-        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
-        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
-
-        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
-            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
-        else
-            eval `echo args$i`="\"$arg\""
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
         fi
-        i=`expr $i + 1`
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
     done
-    case $i in
-        0) set -- ;;
-        1) set -- "$args0" ;;
-        2) set -- "$args0" "$args1" ;;
-        3) set -- "$args0" "$args1" "$args2" ;;
-        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
-        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
-        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
-        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
-        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
-        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
-    esac
 fi
 
-# Escape application args
-save () {
-    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
-    echo " "
-}
-APP_ARGS=`save "$@"`
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
 
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
 
 exec "$JAVACMD" "$@"
diff --git a/jfleet-avro/build.gradle b/jfleet-avro/build.gradle
index bbdd4c2..6705a17 100644
--- a/jfleet-avro/build.gradle
+++ b/jfleet-avro/build.gradle
@@ -1,7 +1,10 @@
-apply plugin: 'maven-publish'
-apply plugin: 'java'
-apply plugin: 'jacoco'
-apply plugin: 'checkstyle'
+plugins {
+    id 'java'
+    id 'java-library'
+    id 'jacoco'
+    id 'checkstyle'
+    id 'maven-publish'
+}
 
 compileJava {
     sourceCompatibility = '1.8'
@@ -9,15 +12,14 @@ compileJava {
 }
 
 dependencies {
-    implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
+    implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.36'
     implementation project(':jfleet-core')
     
     implementation group: 'org.apache.avro', name: 'avro', version: '1.11.0'
 
-    testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.9.1'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.9.1'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.9.1'
 }
 
 test {
diff --git a/jfleet-core/build.gradle b/jfleet-core/build.gradle
index 234df91..3601725 100644
--- a/jfleet-core/build.gradle
+++ b/jfleet-core/build.gradle
@@ -1,19 +1,18 @@
 plugins {
-    id "com.jfrog.bintray" version "1.8.4"
+    id 'java'
+    id 'java-library'
+    id 'jacoco'
+    id 'checkstyle'
+    id 'maven-publish'
 }
 
-apply plugin: 'maven-publish'
-apply plugin: 'java'
-apply plugin: 'jacoco'
-apply plugin: 'checkstyle'
-
 compileJava {
     sourceCompatibility = '1.8'
     targetCompatibility = '1.8'
 }
 
 dependencies {
-    implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
+    implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.36'
     compileOnly group: 'javax.persistence', name: 'persistence-api', version: '1.0.2'
     if (project.hasProperty("mysql8")) {
         compileOnly project(':jfleet-mock-mysql5')
@@ -32,11 +31,11 @@ dependencies {
         testImplementation group: 'mysql', name: 'mysql-connector-java', version: '5.1.49'
         testImplementation project(':jfleet-mock-mysql8')
     }
+    testRuntimeOnly group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.36'
     testImplementation group: 'org.postgresql', name: 'postgresql', version: '42.2.18'
-    testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.7.0'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.9.1'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.9.1'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.9.1'
 }
 
 test {
@@ -94,7 +93,6 @@ publishing {
                         connection 'scm:git:git://github.com/jerolba/jfleet.git'
                         developerConnection 'scm:git:ssh://github.com:jerolba/jfleet.git'
                         url 'https://github.com/jerolba/jfleet'
-
                     }
                 }
             }
@@ -102,27 +100,3 @@ publishing {
     }
 }
 
-if (project.hasProperty('bintrayUser')) {
-    bintray {
-        user = bintrayUser
-        key = bintrayKey
-        publications = ['mavenJava']
-        pkg {
-            repo = 'JFleet'
-            name = 'jfleet'
-            desc = 'JFleet loads data mapped as JPA into DB with alternate and fast way from JPA'
-            websiteUrl = 'https://github.com/jerolba/jfleet'
-            issueTrackerUrl = 'https://github.com/jerolba/jfleet/issues'
-            licenses = ['Apache-2.0']
-            vcsUrl = 'https://github.com/jerolba/jfleet.git'
-            labels = ['jpa', 'jdbc', 'mysql', 'postgres', 'load data', 'copy']
-            version {
-                name = '0.6.4'
-                desc = 'Add support for MySQL 8'
-                released = new Date()
-            }
-        }
-    }
-} else {
-    println 'No bintray configuration found. Expected bintray user and API key at $HOME/.gradle/gradle.properties file.'
-}
diff --git a/jfleet-parquet/build.gradle b/jfleet-parquet/build.gradle
index 328533a..85ebfc7 100644
--- a/jfleet-parquet/build.gradle
+++ b/jfleet-parquet/build.gradle
@@ -1,6 +1,9 @@
 plugins {
     id 'java'
     id 'java-library'
+    id 'jacoco'
+    id 'checkstyle'
+    id 'maven-publish'    
 }
 
 compileJava {
@@ -8,13 +11,6 @@ compileJava {
     targetCompatibility = '1.8'
 }
 
-group 'org.jfleet'
-version '0.6.4'
-
-repositories {
-    mavenCentral()
-}
-
 dependencies {
     api project(':jfleet-core')
     implementation project(':jfleet-avro')
@@ -24,7 +20,7 @@ dependencies {
     api group: 'org.apache.parquet', name: 'parquet-hadoop', version: '1.12.3'
     implementation group: 'org.apache.parquet', name: 'parquet-avro', version: '1.12.3'
 
-    compileOnly 'org.apache.hadoop:hadoop-client:3.3.2'
+    compileOnly group: 'org.apache.hadoop', name: 'hadoop-client', version: '3.3.2'
     implementation('org.apache.hadoop:hadoop-mapreduce-client-core:3.3.2') {
         exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-client'
         exclude group: 'org.apache.hadoop', module: 'hadoop-yarn-common'
@@ -35,6 +31,7 @@ dependencies {
         exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api'
         exclude group: 'org.slf4j', module: 'slf4j-log4j12'
         exclude group: 'org.apache.avro', module: 'avro'
+        exclude group: 'org.slf4j', module: 'slf4j-reload4j'
     }
 
     api('org.apache.hadoop:hadoop-common:3.3.2') {
@@ -43,10 +40,13 @@ dependencies {
         exclude group: 'org.apache.avro', module: 'avro'
         exclude group: 'org.apache.curator', module: 'curator-client'
         exclude group: 'org.apache.httpcomponents', module: 'httpclient'
+        exclude group: 'org.apache.hadoop', module: 'hadoop-auth'
         exclude group: 'org.apache.hadoop', module: 'hadoop-annotations'
         exclude group: 'org.apache.hadoop.thirdparty', module: 'hadoop-shaded-protobuf_3_7'
+        exclude group: 'org.apache.commons', module: 'commons-configuration2'
         exclude group: 'org.apache.commons', module: 'commons-text'
         exclude group: 'org.apache.commons', module: 'commons-math3'
+        exclude group: 'org.apache.commons', module: 'commons-lang3'
         exclude group: 'org.apache.zookeeper', module: 'zookeeper'
         exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
         exclude group: 'org.eclipse.jetty', module: 'jetty-server'
@@ -67,16 +67,20 @@ dependencies {
         exclude group: 'commons-io', module: 'commons-io'
         exclude group: 'commons-net', module: 'commons-net'
         exclude group: 'commons-cli', module: 'commons-cli'
+        exclude group: 'commons-logging', module: 'commons-logging'
         exclude group: 'commons-pool', module: 'commons-pool'
+        exclude group: 'ch.qos.reload4j', module: 'reload4j'
+        exclude group: 'org.slf4j', module: 'slf4j-reload4j'
         exclude group: 'com.jcraft', module: 'jsch'
         exclude group: 'org.slf4j', module: 'slf4j-log4j12'
         exclude group: 'dnsjava', module: 'dnsjava'
         exclude group: 'log4j', module: 'log4j'
     }
 
-    testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.7.0'
-    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.7.0'
+    testRuntimeOnly group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.36'
+    testRuntimeOnly group: 'org.apache.hadoop', name: 'hadoop-common', version: '3.3.2'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.9.1'
+    testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.9.1'
 }
 
 test {
diff --git a/jfleet-samples/build.gradle b/jfleet-samples/build.gradle
index 4f1c856..228a48b 100644
--- a/jfleet-samples/build.gradle
+++ b/jfleet-samples/build.gradle
@@ -3,6 +3,6 @@ apply plugin: 'java'
 dependencies {
     implementation project(':jfleet-core')
     implementation group: 'mysql', name: 'mysql-connector-java', version: '5.1.43'
-    implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
+    implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.4.4'
     implementation group: 'javax.persistence', name: 'persistence-api', version: '1.0.2'
 }

From 44c5996f1ff0ba39656a03b285726f91e75daa35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jeronimo=20L=C3=B3pez?= 
Date: Sat, 29 Oct 2022 13:10:30 +0200
Subject: [PATCH 30/59] Review dependency management config and gradle plugins
 (#98)


From 8093d45dc7a15115c022362e8ab5c85b3fe0f13f Mon Sep 17 00:00:00 2001
From: jerolba 
Date: Sat, 29 Oct 2022 13:15:25 +0200
Subject: [PATCH 31/59] Add and update license dates

---
 config/HEADER                                 |  2 +-
 .../org/jfleet/avro/AvroConfiguration.java    | 15 +++++++++++++
 .../org/jfleet/avro/AvroSchemaBuilder.java    | 15 +++++++++++++
 .../main/java/org/jfleet/avro/AvroWriter.java | 15 +++++++++++++
 .../avro/EntityGenericRecordMapper.java       | 15 +++++++++++++
 .../jfleet/avro/UnsupportedTypeException.java | 15 +++++++++++++
 .../java/org/jfleet/avro/AvroWriterTest.java  | 15 +++++++++++++
 .../test/java/org/jfleet/avro/TestEntity.java | 15 +++++++++++++
 .../org/jfleet/avro/TestEntityWithEnum.java   | 15 +++++++++++++
 .../jfleet/avro/TestEntityWithPrimitives.java | 15 +++++++++++++
 .../com/mysql/cj/jdbc/ResultsetInspector.java |  2 +-
 .../com/mysql/jdbc/ResultsetInspector.java    |  2 +-
 .../src/main/java/org/jfleet/BulkInsert.java  |  2 +-
 .../src/main/java/org/jfleet/ColumnInfo.java  |  2 +-
 .../main/java/org/jfleet/EntityFieldType.java |  2 +-
 .../src/main/java/org/jfleet/EntityInfo.java  |  2 +-
 .../java/org/jfleet/EntityInfoBuilder.java    |  2 +-
 .../src/main/java/org/jfleet/FieldInfo.java   |  2 +-
 .../main/java/org/jfleet/JFleetException.java |  2 +-
 .../java/org/jfleet/WrappedException.java     |  2 +-
 .../org/jfleet/common/BaseTypeSerializer.java |  2 +-
 .../org/jfleet/common/ContentBuilder.java     |  2 +-
 .../java/org/jfleet/common/ContentWriter.java |  2 +-
 .../common/DoubleBufferStringContent.java     |  2 +-
 .../org/jfleet/common/EntityRowBuilder.java   |  2 +-
 .../org/jfleet/common/JFleetBatchConfig.java  |  2 +-
 .../java/org/jfleet/common/LoopAndWrite.java  |  2 +-
 .../jfleet/common/ParallelContentWriter.java  |  2 +-
 .../jfleet/common/StringBuilderReader.java    |  2 +-
 .../java/org/jfleet/common/StringContent.java |  2 +-
 .../org/jfleet/common/TransactionPolicy.java  |  2 +-
 .../org/jfleet/common/TypeSerializer.java     |  2 +-
 .../java/org/jfleet/csv/CsvConfiguration.java |  2 +-
 .../main/java/org/jfleet/csv/CsvEscaper.java  |  2 +-
 .../org/jfleet/csv/CsvTypeSerializer.java     |  2 +-
 .../main/java/org/jfleet/csv/CsvWriter.java   |  2 +-
 .../ComposedEntityFieldAccessor.java          |  2 +-
 .../inspection/EntityFieldAccesorFactory.java |  2 +-
 .../jfleet/inspection/FieldTypeInspector.java |  2 +-
 .../inspection/JFleetEntityInspector.java     |  2 +-
 .../inspection/JFleetFieldInspector.java      |  2 +-
 .../jfleet/inspection/JpaEntityInspector.java |  2 +-
 .../jfleet/inspection/JpaFieldsInspector.java |  2 +-
 .../java/org/jfleet/jdbc/FieldPreConvert.java |  2 +-
 .../java/org/jfleet/jdbc/JdbcBulkInsert.java  |  2 +-
 .../org/jfleet/jdbc/JdbcConfiguration.java    |  2 +-
 .../org/jfleet/metadata/JFleetEnumType.java   |  2 +-
 .../org/jfleet/metadata/JFleetEnumerated.java |  2 +-
 .../org/jfleet/metadata/JFleetTemporal.java   |  2 +-
 .../jfleet/metadata/JFleetTemporalType.java   |  2 +-
 .../org/jfleet/mysql/LoadDataBulkInsert.java  |  2 +-
 .../jfleet/mysql/LoadDataConfiguration.java   |  2 +-
 .../org/jfleet/mysql/LoadDataConstants.java   |  2 +-
 .../jfleet/mysql/LoadDataContentWriter.java   |  2 +-
 .../org/jfleet/mysql/LoadDataEscaper.java     |  2 +-
 .../org/jfleet/mysql/LoadDataRowBuilder.java  |  2 +-
 .../org/jfleet/mysql/MySql5Statement.java     |  2 +-
 .../org/jfleet/mysql/MySql8Statement.java     |  2 +-
 .../jfleet/mysql/MySqlTransactionPolicy.java  |  2 +-
 .../org/jfleet/mysql/MySqlTypeSerializer.java |  2 +-
 .../java/org/jfleet/mysql/SqlBuilder.java     |  2 +-
 .../main/java/org/jfleet/mysql/Statement.java |  2 +-
 .../org/jfleet/postgres/PgCopyBulkInsert.java |  2 +-
 .../jfleet/postgres/PgCopyConfiguration.java  |  2 +-
 .../org/jfleet/postgres/PgCopyConstants.java  |  2 +-
 .../jfleet/postgres/PgCopyContentWriter.java  |  2 +-
 .../org/jfleet/postgres/PgCopyEscaper.java    |  2 +-
 .../org/jfleet/postgres/PgCopyRowBuilder.java |  2 +-
 .../postgres/PostgresTypeSerializer.java      |  2 +-
 .../java/org/jfleet/postgres/SqlBuilder.java  |  2 +-
 .../java/org/jfleet/csv/CsvFormatTest.java    |  2 +-
 .../org/jfleet/csv/CsvSerializerTest.java     |  2 +-
 .../java/org/jfleet/csv/CsvTestHelper.java    |  2 +-
 .../test/java/org/jfleet/csv/HeaderTest.java  |  2 +-
 .../test/java/org/jfleet/csv/SomeEntity.java  |  2 +-
 .../java/org/jfleet/entities/Address.java     |  2 +-
 .../test/java/org/jfleet/entities/City.java   |  2 +-
 .../java/org/jfleet/entities/Company.java     |  2 +-
 .../java/org/jfleet/entities/Employee.java    |  2 +-
 .../test/java/org/jfleet/entities/Person.java |  2 +-
 .../org/jfleet/entities/SimpleEntity.java     |  2 +-
 .../EmbeddedEntityFieldAccesorTest.java       |  2 +-
 .../inspection/EmbeddedIdInspectorTest.java   |  2 +-
 .../inspection/EmbeddedInspectorTest.java     |  2 +-
 .../inspection/EntityFieldAccesorTest.java    |  2 +-
 .../inspection/EntityInfoBuilderTest.java     |  2 +-
 .../inspection/EntityInspectHelper.java       |  2 +-
 .../inspection/EntityInspectorTest.java       |  2 +-
 .../FailedManyToOneEntityInspectorTest.java   |  2 +-
 .../inspection/FieldTypeInspectorTest.java    |  2 +-
 .../HierarchyEntityInspectorTest.java         |  2 +-
 .../ManyToOneEntityInspectorTest.java         |  2 +-
 .../OneToOneEntityInspectorTest.java          |  2 +-
 .../jdbc/JdbcTransactionPolicyTest.java       |  2 +-
 .../org/jfleet/mysql/LoadDataEscaperTest.java |  2 +-
 .../jfleet/mysql/MySqlReservedWordTest.java   |  2 +-
 .../mysql/MySqlTransactionPolicyTest.java     |  2 +-
 .../java/org/jfleet/mysql/SqlBuilderTest.java |  2 +-
 .../org/jfleet/mysql/error/LockRetryTest.java |  2 +-
 .../mysql/error/LockTimeoutErrorManager.java  |  2 +-
 .../jfleet/mysql/manual/ConnectionTest.java   |  2 +-
 .../java/org/jfleet/mysql/manual/IdsTest.java |  2 +-
 .../java/org/jfleet/parameterized/DBs.java    |  2 +-
 .../DatabaseArgumentProvider.java             |  2 +-
 .../org/jfleet/parameterized/Databases.java   |  2 +-
 .../parameterized/IsMySql5Condition.java      |  2 +-
 .../jfleet/parameterized/IsMySql5Present.java |  2 +-
 .../org/jfleet/parameterized/TestDBs.java     |  2 +-
 .../jfleet/postgres/PgCopyEscaperTest.java    |  2 +-
 ...istenceWithMillisecondsResolutionTest.java |  2 +-
 .../postgres/PostgresReservedWordTest.java    |  2 +-
 .../PostgresTransactionPolicyTest.java        |  2 +-
 .../org/jfleet/postgres/SqlBuilderTest.java   |  2 +-
 .../postgres/manual/ConnectionTest.java       |  2 +-
 .../shared/DateTypePersistenceTest.java       |  2 +-
 .../shared/EmbeddedEntityPersistenceTest.java |  2 +-
 .../java/org/jfleet/shared/EncodingTest.java  |  2 +-
 .../org/jfleet/shared/IdPersistenceTest.java  |  2 +-
 .../shared/ManyToOnePersistenceTest.java      |  2 +-
 .../shared/SimpleEntityPersistenceTest.java   |  2 +-
 .../shared/SpecialCharsPersistenceTest.java   |  2 +-
 .../jfleet/shared/TypePersistenceTest.java    |  2 +-
 .../shared/entities/EntityWithBasicTypes.java |  2 +-
 .../shared/entities/EntityWithDateTypes.java  |  2 +-
 .../jfleet/shared/entities/EnumForTest.java   |  2 +-
 .../test/java/org/jfleet/util/Database.java   |  2 +-
 .../util/DatabaseTestConnectionProvider.java  |  2 +-
 .../test/java/org/jfleet/util/Dialect.java    |  2 +-
 .../java/org/jfleet/util/JdbcDatabase.java    |  2 +-
 .../org/jfleet/util/JdbcMysqlDatabase.java    |  2 +-
 .../org/jfleet/util/JdbcPostgresDatabase.java |  2 +-
 .../java/org/jfleet/util/MySqlDatabase.java   |  2 +-
 .../java/org/jfleet/util/MysqlDDLHelper.java  |  2 +-
 .../org/jfleet/util/PostgresDDLHelper.java    |  2 +-
 .../org/jfleet/util/PostgresDatabase.java     |  2 +-
 .../test/java/org/jfleet/util/SqlUtil.java    |  2 +-
 .../util/TransactionPolicyTestHelper.java     |  2 +-
 .../main/java/com/mysql/jdbc/Connection.java  |  2 +-
 .../mysql/jdbc/ResultSetInternalMethods.java  |  2 +-
 .../main/java/com/mysql/jdbc/Statement.java   |  2 +-
 .../java/com/mysql/jdbc/StatementImpl.java    |  2 +-
 .../com/mysql/cj/jdbc/JdbcConnection.java     |  2 +-
 .../java/com/mysql/cj/jdbc/JdbcStatement.java |  2 +-
 .../java/com/mysql/cj/jdbc/StatementImpl.java |  2 +-
 .../jdbc/result/ResultSetInternalMethods.java |  2 +-
 .../parquet/CountedPositionOutputStream.java  | 21 +++++++++++--------
 .../parquet/OutputStreamOutputFile.java       | 21 +++++++++++--------
 .../jfleet/parquet/ParquetConfiguration.java  | 21 +++++++++++--------
 .../org/jfleet/parquet/ParquetWriter.java     | 15 +++++++++++++
 .../org/jfleet/parquet/ParquetWriterTest.java | 15 +++++++++++++
 .../java/org/jfleet/parquet/TestEntity.java   | 15 +++++++++++++
 .../jfleet/parquet/TestEntityWithEnum.java    | 15 +++++++++++++
 .../parquet/TestEntityWithPrimitives.java     | 15 +++++++++++++
 .../jfleet/samples/ConfigurationSample.java   |  2 +-
 .../samples/EntityWithSyntheticField.java     |  2 +-
 .../java/org/jfleet/samples/FromArray.java    |  2 +-
 .../FromClassWithEmbeddedAnnotation.java      |  2 +-
 .../samples/FromClassWithoutAnnotations.java  |  2 +-
 .../main/java/org/jfleet/samples/FromMap.java |  2 +-
 .../samples/PersistBatchCollection.java       |  2 +-
 .../org/jfleet/samples/PersistStream.java     |  2 +-
 .../PersistStreamWithJdbcImplementation.java  |  2 +-
 .../org/jfleet/samples/csv/CustomFormat.java  |  2 +-
 .../samples/csv/CustomMapperOnSomeFields.java |  2 +-
 .../samples/csv/FromAnnotatedClass.java       |  2 +-
 .../samples/csv/SelectedFieldsOrdered.java    |  2 +-
 .../java/org/jfleet/samples/csv/Trip.java     |  2 +-
 .../org/jfleet/samples/csv/TripAnnotated.java |  2 +-
 .../org/jfleet/samples/csv/TripParser.java    |  2 +-
 .../samples/entities/EmissionTrade.java       |  2 +-
 .../samples/entities/StationEmbedded.java     |  2 +-
 .../org/jfleet/samples/entities/Trip.java     |  2 +-
 .../jfleet/samples/entities/TripEntity.java   |  2 +-
 .../samples/entities/TripFlatEntity.java      |  2 +-
 .../org/jfleet/samples/shared/CSVParser.java  |  2 +-
 .../jfleet/samples/shared/CitiBikeReader.java |  2 +-
 .../jfleet/samples/shared/FlatTripParser.java |  2 +-
 .../jfleet/samples/shared/TableHelper.java    |  2 +-
 .../org/jfleet/samples/shared/TripParser.java |  2 +-
 .../main/java/org/jfleet/util/CsvSplit.java   |  2 +-
 .../util/DatabaseTestConnectionProvider.java  |  2 +-
 .../util/MySqlTestConnectionProvider.java     |  2 +-
 .../util/MySqlTestDatasourceProvider.java     |  2 +-
 .../util/PostgresTestConnectionProvider.java  |  2 +-
 .../java/org/jfleet/util/StreamCounter.java   |  2 +-
 jfleet-samples/src/main/resources/logback.xml |  2 +-
 186 files changed, 415 insertions(+), 196 deletions(-)

diff --git a/config/HEADER b/config/HEADER
index 7aa5245..04350e5 100644
--- a/config/HEADER
+++ b/config/HEADER
@@ -1,4 +1,4 @@
-Copyright 2017 Jerónimo López Bezanilla
+Copyright 2022 Jerónimo López Bezanilla
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java
index e318d6f..100ff24 100644
--- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java
+++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroConfiguration.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 import org.jfleet.EntityInfo;
diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java
index 9d6766c..f214286 100644
--- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java
+++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroSchemaBuilder.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 import java.util.function.Function;
diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java
index 3f25a58..da3965a 100644
--- a/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java
+++ b/jfleet-avro/src/main/java/org/jfleet/avro/AvroWriter.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 import java.io.IOException;
diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java b/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java
index 3ca1273..8efe829 100644
--- a/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java
+++ b/jfleet-avro/src/main/java/org/jfleet/avro/EntityGenericRecordMapper.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 import org.apache.avro.Schema;
diff --git a/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java b/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java
index a4eda05..7abb342 100644
--- a/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java
+++ b/jfleet-avro/src/main/java/org/jfleet/avro/UnsupportedTypeException.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 public class UnsupportedTypeException extends RuntimeException {
diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java
index 8ccc3d3..3efcb78 100644
--- a/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java
+++ b/jfleet-avro/src/test/java/org/jfleet/avro/AvroWriterTest.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 import static org.jfleet.avro.TestEntityWithEnum.WeekDays.FRIDAY;
diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java
index 2044abb..b0279e2 100644
--- a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java
+++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntity.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 public class TestEntity {
diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java
index e50ce5b..da98753 100644
--- a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java
+++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithEnum.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 public class TestEntityWithEnum {
diff --git a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java
index 305d065..1c5ad17 100644
--- a/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java
+++ b/jfleet-avro/src/test/java/org/jfleet/avro/TestEntityWithPrimitives.java
@@ -1,3 +1,18 @@
+/**
+ * Copyright 2022 Jerónimo López Bezanilla
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.jfleet.avro;
 
 public class TestEntityWithPrimitives {
diff --git a/jfleet-core/src/main/java/com/mysql/cj/jdbc/ResultsetInspector.java b/jfleet-core/src/main/java/com/mysql/cj/jdbc/ResultsetInspector.java
index b40864a..1f4ba88 100644
--- a/jfleet-core/src/main/java/com/mysql/cj/jdbc/ResultsetInspector.java
+++ b/jfleet-core/src/main/java/com/mysql/cj/jdbc/ResultsetInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/com/mysql/jdbc/ResultsetInspector.java b/jfleet-core/src/main/java/com/mysql/jdbc/ResultsetInspector.java
index e8c49be..b9b8453 100644
--- a/jfleet-core/src/main/java/com/mysql/jdbc/ResultsetInspector.java
+++ b/jfleet-core/src/main/java/com/mysql/jdbc/ResultsetInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/BulkInsert.java b/jfleet-core/src/main/java/org/jfleet/BulkInsert.java
index 45f6bec..45e9921 100644
--- a/jfleet-core/src/main/java/org/jfleet/BulkInsert.java
+++ b/jfleet-core/src/main/java/org/jfleet/BulkInsert.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/ColumnInfo.java b/jfleet-core/src/main/java/org/jfleet/ColumnInfo.java
index bd14da7..5acc16e 100644
--- a/jfleet-core/src/main/java/org/jfleet/ColumnInfo.java
+++ b/jfleet-core/src/main/java/org/jfleet/ColumnInfo.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/EntityFieldType.java b/jfleet-core/src/main/java/org/jfleet/EntityFieldType.java
index 0bd786b..78fc588 100644
--- a/jfleet-core/src/main/java/org/jfleet/EntityFieldType.java
+++ b/jfleet-core/src/main/java/org/jfleet/EntityFieldType.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/EntityInfo.java b/jfleet-core/src/main/java/org/jfleet/EntityInfo.java
index dc00f59..f294cd2 100644
--- a/jfleet-core/src/main/java/org/jfleet/EntityInfo.java
+++ b/jfleet-core/src/main/java/org/jfleet/EntityInfo.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/EntityInfoBuilder.java b/jfleet-core/src/main/java/org/jfleet/EntityInfoBuilder.java
index cc42c2b..1950e15 100644
--- a/jfleet-core/src/main/java/org/jfleet/EntityInfoBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/EntityInfoBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/FieldInfo.java b/jfleet-core/src/main/java/org/jfleet/FieldInfo.java
index dbaa658..ec7e97b 100644
--- a/jfleet-core/src/main/java/org/jfleet/FieldInfo.java
+++ b/jfleet-core/src/main/java/org/jfleet/FieldInfo.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/JFleetException.java b/jfleet-core/src/main/java/org/jfleet/JFleetException.java
index cab81d9..ad071b3 100644
--- a/jfleet-core/src/main/java/org/jfleet/JFleetException.java
+++ b/jfleet-core/src/main/java/org/jfleet/JFleetException.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/WrappedException.java b/jfleet-core/src/main/java/org/jfleet/WrappedException.java
index fff0d76..7c1a83b 100644
--- a/jfleet-core/src/main/java/org/jfleet/WrappedException.java
+++ b/jfleet-core/src/main/java/org/jfleet/WrappedException.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/BaseTypeSerializer.java b/jfleet-core/src/main/java/org/jfleet/common/BaseTypeSerializer.java
index 67143b0..a8be725 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/BaseTypeSerializer.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/BaseTypeSerializer.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/ContentBuilder.java b/jfleet-core/src/main/java/org/jfleet/common/ContentBuilder.java
index b509520..bcc0166 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/ContentBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/ContentBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/ContentWriter.java b/jfleet-core/src/main/java/org/jfleet/common/ContentWriter.java
index 7258a21..a715c8d 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/ContentWriter.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/ContentWriter.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/DoubleBufferStringContent.java b/jfleet-core/src/main/java/org/jfleet/common/DoubleBufferStringContent.java
index 4e8d1fb..b8282cd 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/DoubleBufferStringContent.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/DoubleBufferStringContent.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/EntityRowBuilder.java b/jfleet-core/src/main/java/org/jfleet/common/EntityRowBuilder.java
index ff3b54d..46b4691 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/EntityRowBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/EntityRowBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/JFleetBatchConfig.java b/jfleet-core/src/main/java/org/jfleet/common/JFleetBatchConfig.java
index 29fd218..69ab10b 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/JFleetBatchConfig.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/JFleetBatchConfig.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/LoopAndWrite.java b/jfleet-core/src/main/java/org/jfleet/common/LoopAndWrite.java
index 882b8fb..5d5e78c 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/LoopAndWrite.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/LoopAndWrite.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/ParallelContentWriter.java b/jfleet-core/src/main/java/org/jfleet/common/ParallelContentWriter.java
index 358bee8..c230a12 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/ParallelContentWriter.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/ParallelContentWriter.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/StringBuilderReader.java b/jfleet-core/src/main/java/org/jfleet/common/StringBuilderReader.java
index fda28a5..ab8f511 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/StringBuilderReader.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/StringBuilderReader.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/StringContent.java b/jfleet-core/src/main/java/org/jfleet/common/StringContent.java
index 3fd7469..405ee23 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/StringContent.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/StringContent.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/TransactionPolicy.java b/jfleet-core/src/main/java/org/jfleet/common/TransactionPolicy.java
index e647965..3a2877e 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/TransactionPolicy.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/TransactionPolicy.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/common/TypeSerializer.java b/jfleet-core/src/main/java/org/jfleet/common/TypeSerializer.java
index 22f1688..674e463 100644
--- a/jfleet-core/src/main/java/org/jfleet/common/TypeSerializer.java
+++ b/jfleet-core/src/main/java/org/jfleet/common/TypeSerializer.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/csv/CsvConfiguration.java b/jfleet-core/src/main/java/org/jfleet/csv/CsvConfiguration.java
index cdf9ac7..432974d 100644
--- a/jfleet-core/src/main/java/org/jfleet/csv/CsvConfiguration.java
+++ b/jfleet-core/src/main/java/org/jfleet/csv/CsvConfiguration.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/csv/CsvEscaper.java b/jfleet-core/src/main/java/org/jfleet/csv/CsvEscaper.java
index 472aeea..be05771 100644
--- a/jfleet-core/src/main/java/org/jfleet/csv/CsvEscaper.java
+++ b/jfleet-core/src/main/java/org/jfleet/csv/CsvEscaper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/csv/CsvTypeSerializer.java b/jfleet-core/src/main/java/org/jfleet/csv/CsvTypeSerializer.java
index aa0f056..3ad4102 100644
--- a/jfleet-core/src/main/java/org/jfleet/csv/CsvTypeSerializer.java
+++ b/jfleet-core/src/main/java/org/jfleet/csv/CsvTypeSerializer.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/csv/CsvWriter.java b/jfleet-core/src/main/java/org/jfleet/csv/CsvWriter.java
index deacd97..e01d952 100644
--- a/jfleet-core/src/main/java/org/jfleet/csv/CsvWriter.java
+++ b/jfleet-core/src/main/java/org/jfleet/csv/CsvWriter.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/ComposedEntityFieldAccessor.java b/jfleet-core/src/main/java/org/jfleet/inspection/ComposedEntityFieldAccessor.java
index 2f780de..527c54c 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/ComposedEntityFieldAccessor.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/ComposedEntityFieldAccessor.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/EntityFieldAccesorFactory.java b/jfleet-core/src/main/java/org/jfleet/inspection/EntityFieldAccesorFactory.java
index 636edbd..1cc0fe4 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/EntityFieldAccesorFactory.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/EntityFieldAccesorFactory.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/FieldTypeInspector.java b/jfleet-core/src/main/java/org/jfleet/inspection/FieldTypeInspector.java
index a05d2e0..273d09b 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/FieldTypeInspector.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/FieldTypeInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/JFleetEntityInspector.java b/jfleet-core/src/main/java/org/jfleet/inspection/JFleetEntityInspector.java
index 1a52c0f..bbca843 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/JFleetEntityInspector.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/JFleetEntityInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/JFleetFieldInspector.java b/jfleet-core/src/main/java/org/jfleet/inspection/JFleetFieldInspector.java
index 76972e7..71df8a7 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/JFleetFieldInspector.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/JFleetFieldInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/JpaEntityInspector.java b/jfleet-core/src/main/java/org/jfleet/inspection/JpaEntityInspector.java
index 9d382ec..7a126ed 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/JpaEntityInspector.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/JpaEntityInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/inspection/JpaFieldsInspector.java b/jfleet-core/src/main/java/org/jfleet/inspection/JpaFieldsInspector.java
index 246ff2f..b85d4c4 100644
--- a/jfleet-core/src/main/java/org/jfleet/inspection/JpaFieldsInspector.java
+++ b/jfleet-core/src/main/java/org/jfleet/inspection/JpaFieldsInspector.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/jdbc/FieldPreConvert.java b/jfleet-core/src/main/java/org/jfleet/jdbc/FieldPreConvert.java
index 966af93..1563d32 100644
--- a/jfleet-core/src/main/java/org/jfleet/jdbc/FieldPreConvert.java
+++ b/jfleet-core/src/main/java/org/jfleet/jdbc/FieldPreConvert.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcBulkInsert.java b/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcBulkInsert.java
index 558e401..e63f8f8 100644
--- a/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcBulkInsert.java
+++ b/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcBulkInsert.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcConfiguration.java b/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcConfiguration.java
index 7280428..a2b6b27 100644
--- a/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcConfiguration.java
+++ b/jfleet-core/src/main/java/org/jfleet/jdbc/JdbcConfiguration.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumType.java b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumType.java
index 001560b..b2bfd87 100644
--- a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumType.java
+++ b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumType.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumerated.java b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumerated.java
index 7a70d82..18ce0ed 100644
--- a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumerated.java
+++ b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetEnumerated.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporal.java b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporal.java
index b075c5c..ad37ce1 100644
--- a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporal.java
+++ b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporal.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporalType.java b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporalType.java
index 5ebd4dd..27d81b8 100644
--- a/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporalType.java
+++ b/jfleet-core/src/main/java/org/jfleet/metadata/JFleetTemporalType.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataBulkInsert.java b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataBulkInsert.java
index 0a1e57d..edf8a4d 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataBulkInsert.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataBulkInsert.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConfiguration.java b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConfiguration.java
index 9b57984..6d4fe94 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConfiguration.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConfiguration.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConstants.java b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConstants.java
index dc18d05..88d5112 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConstants.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataConstants.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataContentWriter.java b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataContentWriter.java
index f667229..4f57059 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataContentWriter.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataContentWriter.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataEscaper.java b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataEscaper.java
index a09cac9..78ccb2e 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataEscaper.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataEscaper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataRowBuilder.java b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataRowBuilder.java
index c5ce504..85f5167 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataRowBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/LoadDataRowBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/MySql5Statement.java b/jfleet-core/src/main/java/org/jfleet/mysql/MySql5Statement.java
index a87a7be..8c83b94 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/MySql5Statement.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/MySql5Statement.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/MySql8Statement.java b/jfleet-core/src/main/java/org/jfleet/mysql/MySql8Statement.java
index 5e9e7f4..995ae81 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/MySql8Statement.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/MySql8Statement.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTransactionPolicy.java b/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTransactionPolicy.java
index 7f361c7..5c109d8 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTransactionPolicy.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTransactionPolicy.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTypeSerializer.java b/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTypeSerializer.java
index 6dd32c0..53bcb50 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTypeSerializer.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/MySqlTypeSerializer.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/SqlBuilder.java b/jfleet-core/src/main/java/org/jfleet/mysql/SqlBuilder.java
index ee53e55..39a71b2 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/SqlBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/SqlBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/mysql/Statement.java b/jfleet-core/src/main/java/org/jfleet/mysql/Statement.java
index 372fa5e..74ac9e0 100644
--- a/jfleet-core/src/main/java/org/jfleet/mysql/Statement.java
+++ b/jfleet-core/src/main/java/org/jfleet/mysql/Statement.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyBulkInsert.java b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyBulkInsert.java
index bf20b25..716eb50 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyBulkInsert.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyBulkInsert.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConfiguration.java b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConfiguration.java
index e7c8338..829ad44 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConfiguration.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConfiguration.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConstants.java b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConstants.java
index 91522d5..31a8da2 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConstants.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyConstants.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyContentWriter.java b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyContentWriter.java
index f82772b..4e8df62 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyContentWriter.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyContentWriter.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyEscaper.java b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyEscaper.java
index 84a4c89..173fc22 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyEscaper.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyEscaper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyRowBuilder.java b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyRowBuilder.java
index 5634011..b58170b 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyRowBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PgCopyRowBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/PostgresTypeSerializer.java b/jfleet-core/src/main/java/org/jfleet/postgres/PostgresTypeSerializer.java
index 26a5545..e25df10 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/PostgresTypeSerializer.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/PostgresTypeSerializer.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/main/java/org/jfleet/postgres/SqlBuilder.java b/jfleet-core/src/main/java/org/jfleet/postgres/SqlBuilder.java
index 5dbbd50..28ed1e1 100644
--- a/jfleet-core/src/main/java/org/jfleet/postgres/SqlBuilder.java
+++ b/jfleet-core/src/main/java/org/jfleet/postgres/SqlBuilder.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/csv/CsvFormatTest.java b/jfleet-core/src/test/java/org/jfleet/csv/CsvFormatTest.java
index 52c23df..b79373c 100644
--- a/jfleet-core/src/test/java/org/jfleet/csv/CsvFormatTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/csv/CsvFormatTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/csv/CsvSerializerTest.java b/jfleet-core/src/test/java/org/jfleet/csv/CsvSerializerTest.java
index 20a3fb9..b6ee1d1 100644
--- a/jfleet-core/src/test/java/org/jfleet/csv/CsvSerializerTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/csv/CsvSerializerTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/csv/CsvTestHelper.java b/jfleet-core/src/test/java/org/jfleet/csv/CsvTestHelper.java
index efca72d..7f174bf 100644
--- a/jfleet-core/src/test/java/org/jfleet/csv/CsvTestHelper.java
+++ b/jfleet-core/src/test/java/org/jfleet/csv/CsvTestHelper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/csv/HeaderTest.java b/jfleet-core/src/test/java/org/jfleet/csv/HeaderTest.java
index 203e31c..fab92f9 100644
--- a/jfleet-core/src/test/java/org/jfleet/csv/HeaderTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/csv/HeaderTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/csv/SomeEntity.java b/jfleet-core/src/test/java/org/jfleet/csv/SomeEntity.java
index 89ae5ed..a36dc1d 100644
--- a/jfleet-core/src/test/java/org/jfleet/csv/SomeEntity.java
+++ b/jfleet-core/src/test/java/org/jfleet/csv/SomeEntity.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/entities/Address.java b/jfleet-core/src/test/java/org/jfleet/entities/Address.java
index 7d2ee78..01f60db 100644
--- a/jfleet-core/src/test/java/org/jfleet/entities/Address.java
+++ b/jfleet-core/src/test/java/org/jfleet/entities/Address.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/entities/City.java b/jfleet-core/src/test/java/org/jfleet/entities/City.java
index 4ba0961..34a3514 100644
--- a/jfleet-core/src/test/java/org/jfleet/entities/City.java
+++ b/jfleet-core/src/test/java/org/jfleet/entities/City.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/entities/Company.java b/jfleet-core/src/test/java/org/jfleet/entities/Company.java
index 7e00275..db48f1f 100644
--- a/jfleet-core/src/test/java/org/jfleet/entities/Company.java
+++ b/jfleet-core/src/test/java/org/jfleet/entities/Company.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/entities/Employee.java b/jfleet-core/src/test/java/org/jfleet/entities/Employee.java
index 368b96e..cca96b6 100644
--- a/jfleet-core/src/test/java/org/jfleet/entities/Employee.java
+++ b/jfleet-core/src/test/java/org/jfleet/entities/Employee.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/entities/Person.java b/jfleet-core/src/test/java/org/jfleet/entities/Person.java
index 198111a..3b0ac83 100644
--- a/jfleet-core/src/test/java/org/jfleet/entities/Person.java
+++ b/jfleet-core/src/test/java/org/jfleet/entities/Person.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/entities/SimpleEntity.java b/jfleet-core/src/test/java/org/jfleet/entities/SimpleEntity.java
index c00086d..85409bf 100644
--- a/jfleet-core/src/test/java/org/jfleet/entities/SimpleEntity.java
+++ b/jfleet-core/src/test/java/org/jfleet/entities/SimpleEntity.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedEntityFieldAccesorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedEntityFieldAccesorTest.java
index 6314cef..664b27c 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedEntityFieldAccesorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedEntityFieldAccesorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedIdInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedIdInspectorTest.java
index 95e25f4..41ca9a9 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedIdInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedIdInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedInspectorTest.java
index c898624..c10cc1f 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EmbeddedInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EntityFieldAccesorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/EntityFieldAccesorTest.java
index 2283bd7..e292e2b 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EntityFieldAccesorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EntityFieldAccesorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EntityInfoBuilderTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/EntityInfoBuilderTest.java
index 3fafb5d..6c971d2 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EntityInfoBuilderTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EntityInfoBuilderTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectHelper.java b/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectHelper.java
index a4e11bb..6dfa4a1 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectHelper.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectHelper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectorTest.java
index d8f2e71..d2b3601 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/EntityInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/FailedManyToOneEntityInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/FailedManyToOneEntityInspectorTest.java
index 8172d20..7bb8115 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/FailedManyToOneEntityInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/FailedManyToOneEntityInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/FieldTypeInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/FieldTypeInspectorTest.java
index 395589d..c9dc2ab 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/FieldTypeInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/FieldTypeInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/HierarchyEntityInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/HierarchyEntityInspectorTest.java
index 8034514..59927b1 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/HierarchyEntityInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/HierarchyEntityInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/ManyToOneEntityInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/ManyToOneEntityInspectorTest.java
index fe97681..cb6fd1d 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/ManyToOneEntityInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/ManyToOneEntityInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/inspection/OneToOneEntityInspectorTest.java b/jfleet-core/src/test/java/org/jfleet/inspection/OneToOneEntityInspectorTest.java
index a013425..8276c1e 100644
--- a/jfleet-core/src/test/java/org/jfleet/inspection/OneToOneEntityInspectorTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/inspection/OneToOneEntityInspectorTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/jdbc/JdbcTransactionPolicyTest.java b/jfleet-core/src/test/java/org/jfleet/jdbc/JdbcTransactionPolicyTest.java
index 69164c9..739e4e8 100644
--- a/jfleet-core/src/test/java/org/jfleet/jdbc/JdbcTransactionPolicyTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/jdbc/JdbcTransactionPolicyTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/LoadDataEscaperTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/LoadDataEscaperTest.java
index b89180a..2ee7b41 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/LoadDataEscaperTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/LoadDataEscaperTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/MySqlReservedWordTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/MySqlReservedWordTest.java
index c0cf532..a328758 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/MySqlReservedWordTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/MySqlReservedWordTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/MySqlTransactionPolicyTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/MySqlTransactionPolicyTest.java
index c37651f..19e213b 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/MySqlTransactionPolicyTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/MySqlTransactionPolicyTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/SqlBuilderTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/SqlBuilderTest.java
index 8ab07ef..d9d3fb5 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/SqlBuilderTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/SqlBuilderTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/error/LockRetryTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/error/LockRetryTest.java
index 4d30160..9497631 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/error/LockRetryTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/error/LockRetryTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/error/LockTimeoutErrorManager.java b/jfleet-core/src/test/java/org/jfleet/mysql/error/LockTimeoutErrorManager.java
index 62c46df..0b77761 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/error/LockTimeoutErrorManager.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/error/LockTimeoutErrorManager.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/manual/ConnectionTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/manual/ConnectionTest.java
index 47f6a84..6a36578 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/manual/ConnectionTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/manual/ConnectionTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/mysql/manual/IdsTest.java b/jfleet-core/src/test/java/org/jfleet/mysql/manual/IdsTest.java
index 55f1268..79c4e63 100644
--- a/jfleet-core/src/test/java/org/jfleet/mysql/manual/IdsTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/mysql/manual/IdsTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/parameterized/DBs.java b/jfleet-core/src/test/java/org/jfleet/parameterized/DBs.java
index 65f770b..4c4f3a4 100644
--- a/jfleet-core/src/test/java/org/jfleet/parameterized/DBs.java
+++ b/jfleet-core/src/test/java/org/jfleet/parameterized/DBs.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/parameterized/DatabaseArgumentProvider.java b/jfleet-core/src/test/java/org/jfleet/parameterized/DatabaseArgumentProvider.java
index ef83769..dae2ac0 100644
--- a/jfleet-core/src/test/java/org/jfleet/parameterized/DatabaseArgumentProvider.java
+++ b/jfleet-core/src/test/java/org/jfleet/parameterized/DatabaseArgumentProvider.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/parameterized/Databases.java b/jfleet-core/src/test/java/org/jfleet/parameterized/Databases.java
index d2f4f89..19b6031 100644
--- a/jfleet-core/src/test/java/org/jfleet/parameterized/Databases.java
+++ b/jfleet-core/src/test/java/org/jfleet/parameterized/Databases.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Condition.java b/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Condition.java
index e2b9772..6e806a0 100644
--- a/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Condition.java
+++ b/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Condition.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Present.java b/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Present.java
index 130cf5b..085b9af 100644
--- a/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Present.java
+++ b/jfleet-core/src/test/java/org/jfleet/parameterized/IsMySql5Present.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/parameterized/TestDBs.java b/jfleet-core/src/test/java/org/jfleet/parameterized/TestDBs.java
index ab5bbf5..f489d00 100644
--- a/jfleet-core/src/test/java/org/jfleet/parameterized/TestDBs.java
+++ b/jfleet-core/src/test/java/org/jfleet/parameterized/TestDBs.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/postgres/PgCopyEscaperTest.java b/jfleet-core/src/test/java/org/jfleet/postgres/PgCopyEscaperTest.java
index e6932bc..bc51419 100644
--- a/jfleet-core/src/test/java/org/jfleet/postgres/PgCopyEscaperTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/postgres/PgCopyEscaperTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/postgres/PostgresDateTypePersistenceWithMillisecondsResolutionTest.java b/jfleet-core/src/test/java/org/jfleet/postgres/PostgresDateTypePersistenceWithMillisecondsResolutionTest.java
index a0d2643..deea163 100644
--- a/jfleet-core/src/test/java/org/jfleet/postgres/PostgresDateTypePersistenceWithMillisecondsResolutionTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/postgres/PostgresDateTypePersistenceWithMillisecondsResolutionTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/postgres/PostgresReservedWordTest.java b/jfleet-core/src/test/java/org/jfleet/postgres/PostgresReservedWordTest.java
index dc1bdc5..227d0ed 100644
--- a/jfleet-core/src/test/java/org/jfleet/postgres/PostgresReservedWordTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/postgres/PostgresReservedWordTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/postgres/PostgresTransactionPolicyTest.java b/jfleet-core/src/test/java/org/jfleet/postgres/PostgresTransactionPolicyTest.java
index ad6838a..c05aa12 100644
--- a/jfleet-core/src/test/java/org/jfleet/postgres/PostgresTransactionPolicyTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/postgres/PostgresTransactionPolicyTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/postgres/SqlBuilderTest.java b/jfleet-core/src/test/java/org/jfleet/postgres/SqlBuilderTest.java
index b9c38ba..086a2fa 100644
--- a/jfleet-core/src/test/java/org/jfleet/postgres/SqlBuilderTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/postgres/SqlBuilderTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/postgres/manual/ConnectionTest.java b/jfleet-core/src/test/java/org/jfleet/postgres/manual/ConnectionTest.java
index 7eab5cb..c133dc0 100644
--- a/jfleet-core/src/test/java/org/jfleet/postgres/manual/ConnectionTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/postgres/manual/ConnectionTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/DateTypePersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/DateTypePersistenceTest.java
index 0c0864c..9b11601 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/DateTypePersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/DateTypePersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/EmbeddedEntityPersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/EmbeddedEntityPersistenceTest.java
index b2b1253..f866bdf 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/EmbeddedEntityPersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/EmbeddedEntityPersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/EncodingTest.java b/jfleet-core/src/test/java/org/jfleet/shared/EncodingTest.java
index ce250dd..069fe69 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/EncodingTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/EncodingTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/IdPersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/IdPersistenceTest.java
index c9de8c2..c7f5087 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/IdPersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/IdPersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/ManyToOnePersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/ManyToOnePersistenceTest.java
index f038aaf..3ca95e4 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/ManyToOnePersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/ManyToOnePersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/SimpleEntityPersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/SimpleEntityPersistenceTest.java
index 9f17989..1036e61 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/SimpleEntityPersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/SimpleEntityPersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/SpecialCharsPersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/SpecialCharsPersistenceTest.java
index f6f59af..b1230b2 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/SpecialCharsPersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/SpecialCharsPersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/TypePersistenceTest.java b/jfleet-core/src/test/java/org/jfleet/shared/TypePersistenceTest.java
index 6a71209..c405427 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/TypePersistenceTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/TypePersistenceTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithBasicTypes.java b/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithBasicTypes.java
index 60ec98d..4d52784 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithBasicTypes.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithBasicTypes.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithDateTypes.java b/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithDateTypes.java
index 1be1682..17b34e5 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithDateTypes.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/entities/EntityWithDateTypes.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/shared/entities/EnumForTest.java b/jfleet-core/src/test/java/org/jfleet/shared/entities/EnumForTest.java
index aca7934..87934e9 100644
--- a/jfleet-core/src/test/java/org/jfleet/shared/entities/EnumForTest.java
+++ b/jfleet-core/src/test/java/org/jfleet/shared/entities/EnumForTest.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/Database.java b/jfleet-core/src/test/java/org/jfleet/util/Database.java
index e7d9fc6..931b7c7 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/Database.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/Database.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/DatabaseTestConnectionProvider.java b/jfleet-core/src/test/java/org/jfleet/util/DatabaseTestConnectionProvider.java
index c785847..62e2ea1 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/DatabaseTestConnectionProvider.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/DatabaseTestConnectionProvider.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/Dialect.java b/jfleet-core/src/test/java/org/jfleet/util/Dialect.java
index 56ba5f5..a65390b 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/Dialect.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/Dialect.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/JdbcDatabase.java b/jfleet-core/src/test/java/org/jfleet/util/JdbcDatabase.java
index 740f3ed..6f442b3 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/JdbcDatabase.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/JdbcDatabase.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/JdbcMysqlDatabase.java b/jfleet-core/src/test/java/org/jfleet/util/JdbcMysqlDatabase.java
index 7550bc3..dd9811b 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/JdbcMysqlDatabase.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/JdbcMysqlDatabase.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/JdbcPostgresDatabase.java b/jfleet-core/src/test/java/org/jfleet/util/JdbcPostgresDatabase.java
index 307b037..137b331 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/JdbcPostgresDatabase.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/JdbcPostgresDatabase.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/MySqlDatabase.java b/jfleet-core/src/test/java/org/jfleet/util/MySqlDatabase.java
index 2575412..ff34b6e 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/MySqlDatabase.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/MySqlDatabase.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/MysqlDDLHelper.java b/jfleet-core/src/test/java/org/jfleet/util/MysqlDDLHelper.java
index 038a7c8..1b64e54 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/MysqlDDLHelper.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/MysqlDDLHelper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/PostgresDDLHelper.java b/jfleet-core/src/test/java/org/jfleet/util/PostgresDDLHelper.java
index c8fc5b0..7121d27 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/PostgresDDLHelper.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/PostgresDDLHelper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/PostgresDatabase.java b/jfleet-core/src/test/java/org/jfleet/util/PostgresDatabase.java
index bd68269..c4580f3 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/PostgresDatabase.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/PostgresDatabase.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/SqlUtil.java b/jfleet-core/src/test/java/org/jfleet/util/SqlUtil.java
index 9021040..9be3c45 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/SqlUtil.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/SqlUtil.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-core/src/test/java/org/jfleet/util/TransactionPolicyTestHelper.java b/jfleet-core/src/test/java/org/jfleet/util/TransactionPolicyTestHelper.java
index b41d817..ff1d4a4 100644
--- a/jfleet-core/src/test/java/org/jfleet/util/TransactionPolicyTestHelper.java
+++ b/jfleet-core/src/test/java/org/jfleet/util/TransactionPolicyTestHelper.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Connection.java b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Connection.java
index 30ad4aa..e4033e3 100644
--- a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Connection.java
+++ b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Connection.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/ResultSetInternalMethods.java b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/ResultSetInternalMethods.java
index eb5d56b..656c0c6 100644
--- a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/ResultSetInternalMethods.java
+++ b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/ResultSetInternalMethods.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Statement.java b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Statement.java
index 0f46c9b..9e7da9f 100644
--- a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Statement.java
+++ b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/Statement.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/StatementImpl.java b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/StatementImpl.java
index d5388a4..d8b18f0 100644
--- a/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/StatementImpl.java
+++ b/jfleet-mock-mysql5/src/main/java/com/mysql/jdbc/StatementImpl.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcConnection.java b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcConnection.java
index ace01af..c177d97 100644
--- a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcConnection.java
+++ b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcConnection.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcStatement.java b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcStatement.java
index ebfa9cf..757db03 100644
--- a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcStatement.java
+++ b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/JdbcStatement.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/StatementImpl.java b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/StatementImpl.java
index f2b4f5c..f47aefe 100644
--- a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/StatementImpl.java
+++ b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/StatementImpl.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/result/ResultSetInternalMethods.java b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/result/ResultSetInternalMethods.java
index 6722a53..dd42539 100644
--- a/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/result/ResultSetInternalMethods.java
+++ b/jfleet-mock-mysql8/src/main/java/com/mysql/cj/jdbc/result/ResultSetInternalMethods.java
@@ -1,5 +1,5 @@
 /**
- * Copyright 2017 Jerónimo López Bezanilla
+ * Copyright 2022 Jerónimo López Bezanilla
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java
index 67a196d..9c54773 100644
--- a/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java
+++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/CountedPositionOutputStream.java
@@ -1,14 +1,17 @@
 /**
  * Copyright 2022 Jerónimo López Bezanilla
- * 

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may - * obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions - * and limitations under the License. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.jfleet.parquet; diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java index f1582e1..3dde875 100644 --- a/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/OutputStreamOutputFile.java @@ -1,14 +1,17 @@ /** * Copyright 2022 Jerónimo López Bezanilla - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may - * obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions - * and limitations under the License. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.jfleet.parquet; diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java index cc98618..a7cad6d 100644 --- a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetConfiguration.java @@ -1,14 +1,17 @@ /** * Copyright 2022 Jerónimo López Bezanilla - *

- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may - * obtain a copy of the License at - *

- * http://www.apache.org/licenses/LICENSE-2.0 - *

- * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions - * and limitations under the License. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.jfleet.parquet; diff --git a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java index 6db17d7..ab3ddeb 100644 --- a/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java +++ b/jfleet-parquet/src/main/java/org/jfleet/parquet/ParquetWriter.java @@ -1,3 +1,18 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jfleet.parquet; import java.io.IOException; diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java index 6d944fc..c4d18ee 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/ParquetWriterTest.java @@ -1,3 +1,18 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jfleet.parquet; import org.apache.avro.Schema; diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java index 051e189..a37807e 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntity.java @@ -1,3 +1,18 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jfleet.parquet; public class TestEntity { diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java index e3226f7..aaf03c8 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithEnum.java @@ -1,3 +1,18 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jfleet.parquet; public class TestEntityWithEnum { diff --git a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java index cf2ed49..fd3811f 100644 --- a/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java +++ b/jfleet-parquet/src/test/java/org/jfleet/parquet/TestEntityWithPrimitives.java @@ -1,3 +1,18 @@ +/** + * Copyright 2022 Jerónimo López Bezanilla + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.jfleet.parquet; public class TestEntityWithPrimitives { diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/ConfigurationSample.java b/jfleet-samples/src/main/java/org/jfleet/samples/ConfigurationSample.java index 11f7827..7284954 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/ConfigurationSample.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/ConfigurationSample.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/EntityWithSyntheticField.java b/jfleet-samples/src/main/java/org/jfleet/samples/EntityWithSyntheticField.java index bc655a8..40fea34 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/EntityWithSyntheticField.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/EntityWithSyntheticField.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/FromArray.java b/jfleet-samples/src/main/java/org/jfleet/samples/FromArray.java index 957fa43..11ec3ca 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/FromArray.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/FromArray.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithEmbeddedAnnotation.java b/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithEmbeddedAnnotation.java index 5cbcf31..5fcc458 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithEmbeddedAnnotation.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithEmbeddedAnnotation.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithoutAnnotations.java b/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithoutAnnotations.java index 00c232d..7842bb5 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithoutAnnotations.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/FromClassWithoutAnnotations.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/FromMap.java b/jfleet-samples/src/main/java/org/jfleet/samples/FromMap.java index bcca72a..d41915e 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/FromMap.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/FromMap.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/PersistBatchCollection.java b/jfleet-samples/src/main/java/org/jfleet/samples/PersistBatchCollection.java index 139f5d5..58f0ea2 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/PersistBatchCollection.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/PersistBatchCollection.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/PersistStream.java b/jfleet-samples/src/main/java/org/jfleet/samples/PersistStream.java index 314d5f1..bb370a6 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/PersistStream.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/PersistStream.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/PersistStreamWithJdbcImplementation.java b/jfleet-samples/src/main/java/org/jfleet/samples/PersistStreamWithJdbcImplementation.java index 1c4a23e..71c1ea1 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/PersistStreamWithJdbcImplementation.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/PersistStreamWithJdbcImplementation.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomFormat.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomFormat.java index 8e8bc8a..b2ad886 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomFormat.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomFormat.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomMapperOnSomeFields.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomMapperOnSomeFields.java index 92eea14..c596954 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomMapperOnSomeFields.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/CustomMapperOnSomeFields.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/FromAnnotatedClass.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/FromAnnotatedClass.java index 1376d7a..e372d6f 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/FromAnnotatedClass.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/FromAnnotatedClass.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/SelectedFieldsOrdered.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/SelectedFieldsOrdered.java index 36d7561..d646bb2 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/SelectedFieldsOrdered.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/SelectedFieldsOrdered.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/Trip.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/Trip.java index 10f7abb..8f70e7f 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/Trip.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/Trip.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripAnnotated.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripAnnotated.java index a0c1bc7..bbee9d2 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripAnnotated.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripAnnotated.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripParser.java b/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripParser.java index b5c0a54..e455290 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripParser.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/csv/TripParser.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/entities/EmissionTrade.java b/jfleet-samples/src/main/java/org/jfleet/samples/entities/EmissionTrade.java index 65d37b4..9ae8a4e 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/entities/EmissionTrade.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/entities/EmissionTrade.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/entities/StationEmbedded.java b/jfleet-samples/src/main/java/org/jfleet/samples/entities/StationEmbedded.java index 70e11c2..8496db5 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/entities/StationEmbedded.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/entities/StationEmbedded.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/entities/Trip.java b/jfleet-samples/src/main/java/org/jfleet/samples/entities/Trip.java index 12ca2b7..da53cee 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/entities/Trip.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/entities/Trip.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripEntity.java b/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripEntity.java index 3483b45..b07da82 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripEntity.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripEntity.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripFlatEntity.java b/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripFlatEntity.java index ade09ba..2308d9d 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripFlatEntity.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/entities/TripFlatEntity.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/shared/CSVParser.java b/jfleet-samples/src/main/java/org/jfleet/samples/shared/CSVParser.java index a9c2db7..0a25c24 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/shared/CSVParser.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/shared/CSVParser.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/shared/CitiBikeReader.java b/jfleet-samples/src/main/java/org/jfleet/samples/shared/CitiBikeReader.java index a313049..b33850b 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/shared/CitiBikeReader.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/shared/CitiBikeReader.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/shared/FlatTripParser.java b/jfleet-samples/src/main/java/org/jfleet/samples/shared/FlatTripParser.java index 6c9a225..c79e1eb 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/shared/FlatTripParser.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/shared/FlatTripParser.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/shared/TableHelper.java b/jfleet-samples/src/main/java/org/jfleet/samples/shared/TableHelper.java index f87869a..b8a0358 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/shared/TableHelper.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/shared/TableHelper.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/samples/shared/TripParser.java b/jfleet-samples/src/main/java/org/jfleet/samples/shared/TripParser.java index 1f46509..41ada34 100644 --- a/jfleet-samples/src/main/java/org/jfleet/samples/shared/TripParser.java +++ b/jfleet-samples/src/main/java/org/jfleet/samples/shared/TripParser.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/util/CsvSplit.java b/jfleet-samples/src/main/java/org/jfleet/util/CsvSplit.java index 9ce463a..c045c83 100644 --- a/jfleet-samples/src/main/java/org/jfleet/util/CsvSplit.java +++ b/jfleet-samples/src/main/java/org/jfleet/util/CsvSplit.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/util/DatabaseTestConnectionProvider.java b/jfleet-samples/src/main/java/org/jfleet/util/DatabaseTestConnectionProvider.java index c785847..62e2ea1 100644 --- a/jfleet-samples/src/main/java/org/jfleet/util/DatabaseTestConnectionProvider.java +++ b/jfleet-samples/src/main/java/org/jfleet/util/DatabaseTestConnectionProvider.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestConnectionProvider.java b/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestConnectionProvider.java index 7ba12d2..4ad2bfb 100644 --- a/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestConnectionProvider.java +++ b/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestConnectionProvider.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestDatasourceProvider.java b/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestDatasourceProvider.java index 3c19f5b..515668a 100644 --- a/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestDatasourceProvider.java +++ b/jfleet-samples/src/main/java/org/jfleet/util/MySqlTestDatasourceProvider.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/util/PostgresTestConnectionProvider.java b/jfleet-samples/src/main/java/org/jfleet/util/PostgresTestConnectionProvider.java index fcb0dae..b3eba49 100644 --- a/jfleet-samples/src/main/java/org/jfleet/util/PostgresTestConnectionProvider.java +++ b/jfleet-samples/src/main/java/org/jfleet/util/PostgresTestConnectionProvider.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/java/org/jfleet/util/StreamCounter.java b/jfleet-samples/src/main/java/org/jfleet/util/StreamCounter.java index a126614..16149c5 100644 --- a/jfleet-samples/src/main/java/org/jfleet/util/StreamCounter.java +++ b/jfleet-samples/src/main/java/org/jfleet/util/StreamCounter.java @@ -1,5 +1,5 @@ /** - * Copyright 2017 Jerónimo López Bezanilla + * Copyright 2022 Jerónimo López Bezanilla * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/jfleet-samples/src/main/resources/logback.xml b/jfleet-samples/src/main/resources/logback.xml index ce08965..b4ce12f 100644 --- a/jfleet-samples/src/main/resources/logback.xml +++ b/jfleet-samples/src/main/resources/logback.xml @@ -1,6 +1,6 @@

-

ParquetWriterTest

-
-
- - - - - -
-
- - - - - - - -
-
-
1
-

tests

-
-
-
-
0
-

failures

-
-
-
-
0
-

ignored

-
-
-
-
0.568s
-

duration

-
-
-
-
-
-
100%
-

successful

-
-
-
-
- -
-

Tests

- - - - - - - - - - - - - -
TestDurationResult
shouldFillOutputStream()0.568spassed
-
-
-

Standard error

- -
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
-SLF4J: Defaulting to no-operation (NOP) logger implementation
-SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
-
-
-
-
- -
+

ParquetWriterTest

+
+
+ + + + + +
+
+ + + + + + + +
+
+
1
+

tests

+
+
+
+
0
+

failures

+
+
+
+
0
+

ignored

+
+
+
+
0.568s
+

duration

+
+
+
+
+
+
100%
+

successful

+
+
+
+
+ +
+

Tests

+ + + + + + + + + + + + + +
TestDurationResult
shouldFillOutputStream()0.568spassed
+
+
+

Standard error

+ +
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+
+
+
+
+ +