From 8b37318931b2466e36500c732b71bb095ebcc7be Mon Sep 17 00:00:00 2001 From: Tomas Bjerre Date: Wed, 3 Apr 2024 16:21:32 +0200 Subject: [PATCH] breaking: minor adjustments and Java 17 --- build.gradle | 18 +- gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 35 ++- gradlew.bat | 21 +- .../client/JaxrsInvocationHandler.java | 92 ++++--- .../client/JaxrsInvocationMappingBuilder.java | 47 ++-- .../JaxrsInvocationMappingBuilderFactory.java | 3 +- .../wiremock/client/WireMockJaxrs.java | 8 - .../wiremock/jaxrs/api/WireMockJaxrs.java | 12 + .../wiremock/client/RequestMethodsTest.java | 16 +- .../example/WiremockJaxrsExamplesTest.java | 133 ---------- .../resource_with_dto}/ItemDTO.java | 2 +- .../resource_with_dto}/ItemResouce.java | 14 +- .../StringDTO.java | 2 +- .../TestGetResouce.java | 14 +- .../StringDTO.java | 10 +- .../TestPostResouce.java | 12 +- .../get/WiremockJaxrsGetIntergrationTest.java | 239 ------------------ .../WiremockJaxrsPostIntergrationTest.java | 206 --------------- .../testcases/WiremockJaxrsExamplesTest.java | 137 ++++++++++ .../WiremockJaxrsGetIntergrationTest.java | 222 ++++++++++++++++ .../WiremockJaxrsPostIntergrationTest.java | 174 +++++++++++++ .../AcceptanceTestBase.java | 10 +- wiremock-jaxrs.png | Bin 96161 -> 0 bytes 25 files changed, 711 insertions(+), 720 deletions(-) delete mode 100644 src/main/java/com/github/tomakehurst/wiremock/client/WireMockJaxrs.java create mode 100644 src/main/java/com/github/tomakehurst/wiremock/jaxrs/api/WireMockJaxrs.java delete mode 100644 src/test/java/se/bjurr/wiremock/example/WiremockJaxrsExamplesTest.java rename src/test/java/se/bjurr/wiremock/{example => test/example_apis/resource_with_dto}/ItemDTO.java (81%) rename src/test/java/se/bjurr/wiremock/{example => test/example_apis/resource_with_dto}/ItemResouce.java (56%) rename src/test/java/se/bjurr/wiremock/test/{integration/get => example_apis/resource_with_get_and_params}/StringDTO.java (69%) rename src/test/java/se/bjurr/wiremock/test/{integration/get => example_apis/resource_with_get_and_params}/TestGetResouce.java (75%) rename src/test/java/se/bjurr/wiremock/test/{integration/post => example_apis/resource_with_post_and_params}/StringDTO.java (63%) rename src/test/java/se/bjurr/wiremock/test/{integration/post => example_apis/resource_with_post_and_params}/TestPostResouce.java (70%) delete mode 100644 src/test/java/se/bjurr/wiremock/test/integration/get/WiremockJaxrsGetIntergrationTest.java delete mode 100644 src/test/java/se/bjurr/wiremock/test/integration/post/WiremockJaxrsPostIntergrationTest.java create mode 100644 src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsExamplesTest.java create mode 100644 src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsGetIntergrationTest.java create mode 100644 src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsPostIntergrationTest.java rename src/test/java/se/bjurr/wiremock/test/{support => testutils}/AcceptanceTestBase.java (84%) delete mode 100644 wiremock-jaxrs.png diff --git a/build.gradle b/build.gradle index bafb9fc..0b396c5 100644 --- a/build.gradle +++ b/build.gradle @@ -9,14 +9,22 @@ buildscript { classpath 'se.bjurr.gradle:gradle-scripts:2.+' } } + +project.ext.buildConfig = [ + sourceCompatibility: 17, + targetCompatibility: 17, +] apply from: project.buildscript.classLoader.getResource('main.gradle').toURI() dependencies { - api 'com.github.tomakehurst:wiremock:2.27.2' - implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0' - implementation 'javax:javaee-api:8.0.1' + api 'org.wiremock:wiremock:3.5.2' + compileOnly 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.0' + compileOnly 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0' + testImplementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.0' + testImplementation 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0' + testImplementation 'org.glassfish.jaxb:jaxb-runtime:4.0.5' testImplementation 'junit:junit:4.13.2' - testImplementation 'org.assertj:assertj-core:3.24.2' - testImplementation 'io.rest-assured:rest-assured:5.3.0' + testImplementation 'org.assertj:assertj-core:3.25.3' + testImplementation 'io.rest-assured:rest-assured:5.4.0' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f090a2944b7473328c07c9755baa3196..d64cd4917707c1f8861d8cb53dd15194d4248596 100644 GIT binary patch literal 43462 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 literal 60756 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 /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else 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. + if ! command -v java >/dev/null 2>&1 + then + 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 location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# 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. + +# 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"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 53a6b23..7101f8e 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -42,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationHandler.java b/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationHandler.java index 5c03ebf..d9e8feb 100644 --- a/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationHandler.java +++ b/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationHandler.java @@ -1,6 +1,18 @@ package com.github.tomakehurst.wiremock.client; import com.github.tomakehurst.wiremock.http.RequestMethod; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; +import jakarta.ws.rs.OPTIONS; +import jakarta.ws.rs.PATCH; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; @@ -8,18 +20,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.PATCH; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; class JaxrsInvocationHandler implements InvocationHandler { @@ -27,7 +27,6 @@ class JaxrsInvocationHandler implements InvocationHandler { private Class returnType; private String path; private List queryParams; - private List pathParams; private List requestContentTypeList; private List responseContentTypeList; private Object postObject; @@ -35,60 +34,60 @@ class JaxrsInvocationHandler implements InvocationHandler { @Override public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { - this.requestMethod = getRequestMethod(method); + this.requestMethod = this.getRequestMethod(method); this.returnType = method.getReturnType(); - this.queryParams = createQueryParams(method.getParameters(), args); - this.pathParams = createPathParams(method.getParameters(), args); - this.path = substituteParams(createPath(method), queryParams, pathParams); - this.requestContentTypeList = getRequestContentTypeList(method); - this.responseContentTypeList = getResponseContentTypeList(method); - this.postObject = findPostObject(method.getParameters(), args).orElse(null); + this.queryParams = this.createQueryParams(method.getParameters(), args); + final List pathParams = this.createPathParams(method.getParameters(), args); + this.path = this.substituteParams(this.createPath(method), pathParams); + this.requestContentTypeList = this.getRequestContentTypeList(method); + this.responseContentTypeList = this.getResponseContentTypeList(method); + this.postObject = this.findPostObject(method.getParameters(), args).orElse(null); return null; } public RequestMethod getRequestMethod() { - return requestMethod; + return this.requestMethod; } public String getPath() { - return path; + return this.path; } public List getRequestContentTypeList() { - return requestContentTypeList; + return this.requestContentTypeList; } public List getResponseContentTypeList() { - return responseContentTypeList; + return this.responseContentTypeList; } public Class getReturnType() { - return returnType; + return this.returnType; } public List getQueryParams() { - return queryParams; + return this.queryParams; } public Optional findPostObject() { - return Optional.ofNullable(postObject); + return Optional.ofNullable(this.postObject); } RequestMethod getRequestMethod(final Method method) { - if (findAnnotation(method, GET.class).isPresent()) { + if (this.findAnnotation(method, GET.class).isPresent()) { return RequestMethod.GET; - } else if (findAnnotation(method, POST.class).isPresent()) { + } else if (this.findAnnotation(method, POST.class).isPresent()) { return RequestMethod.POST; - } else if (findAnnotation(method, PUT.class).isPresent()) { + } else if (this.findAnnotation(method, PUT.class).isPresent()) { return RequestMethod.PUT; - } else if (findAnnotation(method, DELETE.class).isPresent()) { + } else if (this.findAnnotation(method, DELETE.class).isPresent()) { return RequestMethod.DELETE; - } else if (findAnnotation(method, PATCH.class).isPresent()) { + } else if (this.findAnnotation(method, PATCH.class).isPresent()) { return RequestMethod.PATCH; - } else if (findAnnotation(method, HEAD.class).isPresent()) { + } else if (this.findAnnotation(method, HEAD.class).isPresent()) { return RequestMethod.HEAD; - } else if (findAnnotation(method, OPTIONS.class).isPresent()) { + } else if (this.findAnnotation(method, OPTIONS.class).isPresent()) { return RequestMethod.OPTIONS; } throw new RuntimeException("Cannot find request method of " + method.getName()); @@ -116,8 +115,8 @@ private List getResponseContentTypeList(final Method method) { private String createPath(final Method method) { final Optional classPath = - findAnnotation(method.getDeclaringClass().getAnnotations(), Path.class); - final Optional methodPath = findAnnotation(method, Path.class); + this.findAnnotation(method.getDeclaringClass().getAnnotations(), Path.class); + final Optional methodPath = this.findAnnotation(method, Path.class); String str = ""; if (classPath.isPresent()) { str += classPath.get().value(); @@ -133,7 +132,7 @@ private String createPath(final Method method) { private Optional findAnnotation(final Method method, final Class findAnnotation) { final Annotation[] methodAnnotations = method.getAnnotations(); - return findAnnotation(methodAnnotations, findAnnotation); + return this.findAnnotation(methodAnnotations, findAnnotation); } @SuppressWarnings("unchecked") @@ -148,7 +147,7 @@ private Optional findAnnotation( } private List createQueryParams( - final Parameter[] parameters, final Object[] args) { + final Parameter[] parameters, final Object... args) { final List queryParams = new ArrayList<>(); if (parameters == null || args == null) { return queryParams; @@ -160,7 +159,7 @@ private List createQueryParams( final Object arg = args[i]; final Parameter param = parameters[i]; final Optional paramAnnotation = - findAnnotation(param.getAnnotations(), QueryParam.class); + this.findAnnotation(param.getAnnotations(), QueryParam.class); if (paramAnnotation.isPresent()) { final String name = paramAnnotation.get().value(); final InvocationParam invocationParam = new InvocationParam(name, arg); @@ -170,7 +169,7 @@ private List createQueryParams( return queryParams; } - private Optional findPostObject(final Parameter[] parameters, final Object[] args) { + private Optional findPostObject(final Parameter[] parameters, final Object... args) { if (parameters == null || args == null) { return Optional.empty(); } @@ -181,8 +180,8 @@ private Optional findPostObject(final Parameter[] parameters, final Obje final Object arg = args[i]; final Parameter param = parameters[i]; if ( // - !findAnnotation(param.getAnnotations(), PathParam.class).isPresent() // - && !findAnnotation(param.getAnnotations(), QueryParam.class).isPresent()) { + !this.findAnnotation(param.getAnnotations(), PathParam.class).isPresent() // + && !this.findAnnotation(param.getAnnotations(), QueryParam.class).isPresent()) { return Optional.ofNullable(arg); } } @@ -190,7 +189,7 @@ private Optional findPostObject(final Parameter[] parameters, final Obje } private List createPathParams( - final Parameter[] parameters, final Object[] args) { + final Parameter[] parameters, final Object... args) { final List pathParams = new ArrayList<>(); if (parameters == null || args == null) { return pathParams; @@ -202,7 +201,7 @@ private List createPathParams( final Object arg = args[i]; final Parameter param = parameters[i]; final Optional paramAnnotation = - findAnnotation(param.getAnnotations(), PathParam.class); + this.findAnnotation(param.getAnnotations(), PathParam.class); if (paramAnnotation.isPresent()) { final String name = paramAnnotation.get().value(); final InvocationParam invocationParam = new InvocationParam(name, arg); @@ -212,10 +211,7 @@ private List createPathParams( return pathParams; } - private String substituteParams( - final String createPath, - final List queryParams, - final List pathParams) { + private String substituteParams(final String createPath, final List pathParams) { String substituted = createPath; for (final InvocationParam pathParam : pathParams) { if (pathParam.getValue() == null) { diff --git a/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilder.java b/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilder.java index 5591cbf..4f1eda3 100644 --- a/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilder.java +++ b/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilder.java @@ -4,8 +4,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.github.tomakehurst.wiremock.matching.*; -import javax.ws.rs.core.HttpHeaders; +import com.github.tomakehurst.wiremock.matching.ContentPattern; +import com.github.tomakehurst.wiremock.matching.EqualToJsonPattern; +import com.github.tomakehurst.wiremock.matching.EqualToPattern; +import com.github.tomakehurst.wiremock.matching.EqualToXmlPattern; +import com.github.tomakehurst.wiremock.matching.RegexPattern; +import com.github.tomakehurst.wiremock.matching.StringValuePattern; +import com.github.tomakehurst.wiremock.matching.UrlPattern; +import jakarta.ws.rs.core.HttpHeaders; public class JaxrsInvocationMappingBuilder extends BasicMappingBuilder { @@ -15,7 +21,7 @@ public JaxrsInvocationMappingBuilder(final JaxrsInvocationHandler handler) { super(handler.getRequestMethod(), new UrlPattern(new RegexPattern(get(handler)), true)); this.handler = handler; - String requestBodyContentType = getRequestBodyContentType(handler); + final String requestBodyContentType = this.getRequestBodyContentType(handler); if (requestBodyContentType != null) { this.withHeader(HttpHeaders.CONTENT_TYPE, new EqualToPattern(requestBodyContentType)); } @@ -25,7 +31,8 @@ public JaxrsInvocationMappingBuilder(final JaxrsInvocationHandler handler) { HttpHeaders.ACCEPT, new EqualToPattern(handler.getResponseContentTypeList().get(0))); } - ContentPattern requestBodyContentPattern = createRequestBodyContentPattern(handler); + final ContentPattern requestBodyContentPattern = + this.createRequestBodyContentPattern(handler); if (requestBodyContentPattern != null) { this.withRequestBody(requestBodyContentPattern); } @@ -35,18 +42,19 @@ public JaxrsInvocationMappingBuilder(final JaxrsInvocationHandler handler) { if (value == null) { continue; } - final StringValuePattern valuePattern = getStringValuePattern(value); + final StringValuePattern valuePattern = this.getStringValuePattern(value); this.withQueryParam(qp.getName(), valuePattern); } } - private ContentPattern createRequestBodyContentPattern(JaxrsInvocationHandler handler) { + private ContentPattern createRequestBodyContentPattern( + final JaxrsInvocationHandler handler) { if (!handler.findPostObject().isPresent()) { return null; } - Object requestBody = handler.findPostObject().get(); - String requestBodyContentType = getRequestBodyContentType(handler); + final Object requestBody = handler.findPostObject().get(); + final String requestBodyContentType = this.getRequestBodyContentType(handler); if (requestBodyContentType == null) { if (!(requestBody instanceof String)) { throw new IllegalArgumentException( @@ -77,7 +85,7 @@ private ContentPattern createRequestBodyContentPattern(JaxrsInvocationHa } } - private String getRequestBodyContentType(JaxrsInvocationHandler handler) { + private String getRequestBodyContentType(final JaxrsInvocationHandler handler) { if (handler.getRequestContentTypeList().isEmpty()) { return null; } @@ -91,7 +99,7 @@ private static String get(final JaxrsInvocationHandler handler) { public BasicMappingBuilder willReturn( final ResponseDefinitionBuilder responseDefBuilder, final Object responseObject) { - final Class expectedReturnType = handler.getReturnType(); + final Class expectedReturnType = this.handler.getReturnType(); if (responseDefBuilder.status >= 200 && responseDefBuilder.status <= 299) { if (!expectedReturnType.isAssignableFrom(responseObject.getClass())) { throw new RuntimeException( @@ -101,14 +109,14 @@ public BasicMappingBuilder willReturn( responseDefBuilder.withBody(toJson(responseObject)); - decorateOnWillReturn(responseDefBuilder); + this.decorateOnWillReturn(responseDefBuilder); return super.willReturn(responseDefBuilder); } @Override public BasicMappingBuilder willReturn(final ResponseDefinitionBuilder responseDefBuilder) { - final Class expectedReturnType = handler.getReturnType(); + final Class expectedReturnType = this.handler.getReturnType(); if (responseDefBuilder.status >= 200 && responseDefBuilder.status <= 299) { if (!expectedReturnType.getName().equals("void")) { throw new RuntimeException( @@ -118,31 +126,29 @@ public BasicMappingBuilder willReturn(final ResponseDefinitionBuilder responseDe } } - decorateOnWillReturn(responseDefBuilder); + this.decorateOnWillReturn(responseDefBuilder); return super.willReturn(responseDefBuilder); } private void decorateOnWillReturn(final ResponseDefinitionBuilder responseDefBuilder) { - if (!handler.getResponseContentTypeList().isEmpty()) { + if (!this.handler.getResponseContentTypeList().isEmpty()) { responseDefBuilder.withHeader( - HttpHeaders.CONTENT_TYPE, handler.getResponseContentTypeList().get(0)); + HttpHeaders.CONTENT_TYPE, this.handler.getResponseContentTypeList().get(0)); } } private StringValuePattern getStringValuePattern(final Object value) { - StringValuePattern valuePattern = null; final Boolean ignoreArrayOrder = true; final Boolean ignoreExtraElements = true; if (value.getClass() != Object.class && (value.getClass().isPrimitive() || value.getClass().getName().startsWith("java.lang."))) { - valuePattern = new EqualToPattern(value.toString()); + return new EqualToPattern(value.toString()); } else { final String json = toJson(value); - valuePattern = new EqualToJsonPattern(json, ignoreArrayOrder, ignoreExtraElements); + return new EqualToJsonPattern(json, ignoreArrayOrder, ignoreExtraElements); } - return valuePattern; } private static String toJson(final Object object) { @@ -153,7 +159,8 @@ private static String toXml(final Object object) { return serializeWithObjectMapper(object, new XmlMapper()); } - private static String serializeWithObjectMapper(Object object, ObjectMapper objectMapper) { + private static String serializeWithObjectMapper( + final Object object, final ObjectMapper objectMapper) { try { if (object instanceof String) { return (String) object; diff --git a/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilderFactory.java b/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilderFactory.java index 180d5d5..1f76371 100644 --- a/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilderFactory.java +++ b/src/main/java/com/github/tomakehurst/wiremock/client/JaxrsInvocationMappingBuilderFactory.java @@ -8,9 +8,10 @@ public static JaxrsInvocationMappingBuilder create( final Class resource, final ResourceInvocation invocation) { final JaxrsInvocationHandler handler = new JaxrsInvocationHandler(); + final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); @SuppressWarnings("unchecked") final T recordingProxy = - (T) Proxy.newProxyInstance(resource.getClassLoader(), new Class[] {resource}, handler); + (T) Proxy.newProxyInstance(contextClassLoader, new Class[] {resource}, handler); invocation.invoke(recordingProxy); diff --git a/src/main/java/com/github/tomakehurst/wiremock/client/WireMockJaxrs.java b/src/main/java/com/github/tomakehurst/wiremock/client/WireMockJaxrs.java deleted file mode 100644 index 72e9496..0000000 --- a/src/main/java/com/github/tomakehurst/wiremock/client/WireMockJaxrs.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.tomakehurst.wiremock.client; - -public class WireMockJaxrs { - public static JaxrsInvocationMappingBuilder invocation( - final Class resource, final ResourceInvocation invocation) { - return JaxrsInvocationMappingBuilderFactory.create(resource, invocation); - } -} diff --git a/src/main/java/com/github/tomakehurst/wiremock/jaxrs/api/WireMockJaxrs.java b/src/main/java/com/github/tomakehurst/wiremock/jaxrs/api/WireMockJaxrs.java new file mode 100644 index 0000000..1d04ecd --- /dev/null +++ b/src/main/java/com/github/tomakehurst/wiremock/jaxrs/api/WireMockJaxrs.java @@ -0,0 +1,12 @@ +package com.github.tomakehurst.wiremock.jaxrs.api; + +import com.github.tomakehurst.wiremock.client.JaxrsInvocationMappingBuilder; +import com.github.tomakehurst.wiremock.client.JaxrsInvocationMappingBuilderFactory; +import com.github.tomakehurst.wiremock.client.ResourceInvocation; + +public class WireMockJaxrs { + public static JaxrsInvocationMappingBuilder invocation( + final Class resource, final ResourceInvocation invocation) { + return JaxrsInvocationMappingBuilderFactory.create(resource, invocation); + } +} diff --git a/src/test/java/com/github/tomakehurst/wiremock/client/RequestMethodsTest.java b/src/test/java/com/github/tomakehurst/wiremock/client/RequestMethodsTest.java index 89bc751..2e52415 100644 --- a/src/test/java/com/github/tomakehurst/wiremock/client/RequestMethodsTest.java +++ b/src/test/java/com/github/tomakehurst/wiremock/client/RequestMethodsTest.java @@ -1,17 +1,17 @@ package com.github.tomakehurst.wiremock.client; import com.github.tomakehurst.wiremock.http.RequestMethod; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; +import jakarta.ws.rs.OPTIONS; +import jakarta.ws.rs.PATCH; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.PATCH; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; import org.junit.Test; public class RequestMethodsTest { @@ -45,7 +45,7 @@ public void testThatRequestMethodsCanBeFound() { Arrays.asList(RequestMethod.values()).stream() .map((it) -> it.getName()) .collect(Collectors.toList()); - reqMethodsNotFound.removeAll(Arrays.asList("TRACE", "ANY")); + reqMethodsNotFound.removeAll(Arrays.asList("TRACE", "ANY", "GET_OR_HEAD")); final JaxrsInvocationHandler sut = new JaxrsInvocationHandler(); for (final Method method : AllRequestMethodsResouce.class.getMethods()) { final String foundReqMethod = sut.getRequestMethod(method).getName(); diff --git a/src/test/java/se/bjurr/wiremock/example/WiremockJaxrsExamplesTest.java b/src/test/java/se/bjurr/wiremock/example/WiremockJaxrsExamplesTest.java deleted file mode 100644 index ccbceca..0000000 --- a/src/test/java/se/bjurr/wiremock/example/WiremockJaxrsExamplesTest.java +++ /dev/null @@ -1,133 +0,0 @@ -package se.bjurr.wiremock.example; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMockJaxrs.invocation; -import static io.restassured.RestAssured.given; -import static javax.servlet.http.HttpServletResponse.SC_ACCEPTED; -import static org.assertj.core.api.Assertions.assertThat; - -import com.github.tomakehurst.wiremock.stubbing.StubMapping; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; -import java.util.logging.Logger; -import org.junit.Test; -import se.bjurr.wiremock.test.support.AcceptanceTestBase; - -public class WiremockJaxrsExamplesTest extends AcceptanceTestBase { - private static Logger LOG = Logger.getLogger(WiremockJaxrsExamplesTest.class.getSimpleName()); - - @Test - public void getItems() { - final List responseObject = Arrays.asList(new ItemDTO("pong")); - final StubMapping sm = - stubFor( // - invocation(ItemResouce.class, (r) -> r.getItems()) // - .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); - - final String actual = StubMapping.buildJsonStringFor(clean(sm)); - - final String expected = - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/list$\",\n" - + " \"method\" : \"GET\",\n" - + " \"headers\" : {\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " }\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"[ {\\n \\\"str\\\" : \\\"pong\\\",\\n \\\"id\\\" : 0\\n} ]\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}"; - - assertThat(actual) // - .isEqualTo(expected); - - LOG.info("\n" + expected); - - given() // - .accept("application/json") // - .get("/list") // - .then() - .assertThat() // - .statusCode(SC_ACCEPTED) // - .and() // - .contentType("application/json"); - } - - @Test - public void createItem() { - final ItemDTO responseObject = new ItemDTO("the item"); - responseObject.setId(123); - final ItemDTO postedItem = new ItemDTO("the item"); - - final StubMapping sm = - stubFor( // - invocation(ItemResouce.class, (r) -> r.post(postedItem)) // - .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); - - final String actual = StubMapping.buildJsonStringFor(clean(sm)); - - final String expected = - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/create$\",\n" - + " \"method\" : \"POST\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " },\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"bodyPatterns\" : [ {\n" - + " \"equalToJson\" : \"{\\n \\\"str\\\" : \\\"the item\\\",\\n \\\"id\\\" : 0\\n}\",\n" - + " \"ignoreArrayOrder\" : true,\n" - + " \"ignoreExtraElements\" : true\n" - + " } ]\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"{\\n \\\"str\\\" : \\\"the item\\\",\\n \\\"id\\\" : 123\\n}\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}"; - - assertThat(actual) // - .isEqualTo(expected); - - LOG.info("\n" + expected); - - given() // - .accept("application/json") // - .contentType("application/json") // - .request() // - .body(postedItem) // - .post("/create") // - .then() - .assertThat() // - .contentType("application/json") // - .statusCode(SC_ACCEPTED); - } - - private StubMapping clean(final StubMapping sm) { - sm.setUuid(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); - sm.setId(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); - return sm; - } -} diff --git a/src/test/java/se/bjurr/wiremock/example/ItemDTO.java b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_dto/ItemDTO.java similarity index 81% rename from src/test/java/se/bjurr/wiremock/example/ItemDTO.java rename to src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_dto/ItemDTO.java index 4895823..75bc90b 100644 --- a/src/test/java/se/bjurr/wiremock/example/ItemDTO.java +++ b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_dto/ItemDTO.java @@ -1,4 +1,4 @@ -package se.bjurr.wiremock.example; +package se.bjurr.wiremock.test.example_apis.resource_with_dto; public class ItemDTO { private final String str; diff --git a/src/test/java/se/bjurr/wiremock/example/ItemResouce.java b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_dto/ItemResouce.java similarity index 56% rename from src/test/java/se/bjurr/wiremock/example/ItemResouce.java rename to src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_dto/ItemResouce.java index 2ef6900..eedcd6e 100644 --- a/src/test/java/se/bjurr/wiremock/example/ItemResouce.java +++ b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_dto/ItemResouce.java @@ -1,12 +1,12 @@ -package se.bjurr.wiremock.example; +package se.bjurr.wiremock.test.example_apis.resource_with_dto; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import java.util.List; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; @Path("/") public interface ItemResouce { diff --git a/src/test/java/se/bjurr/wiremock/test/integration/get/StringDTO.java b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_get_and_params/StringDTO.java similarity index 69% rename from src/test/java/se/bjurr/wiremock/test/integration/get/StringDTO.java rename to src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_get_and_params/StringDTO.java index c380465..61e1b92 100644 --- a/src/test/java/se/bjurr/wiremock/test/integration/get/StringDTO.java +++ b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_get_and_params/StringDTO.java @@ -1,4 +1,4 @@ -package se.bjurr.wiremock.test.integration.get; +package se.bjurr.wiremock.test.example_apis.resource_with_get_and_params; public class StringDTO { private final String str; diff --git a/src/test/java/se/bjurr/wiremock/test/integration/get/TestGetResouce.java b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_get_and_params/TestGetResouce.java similarity index 75% rename from src/test/java/se/bjurr/wiremock/test/integration/get/TestGetResouce.java rename to src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_get_and_params/TestGetResouce.java index 5629cfe..ecdf287 100644 --- a/src/test/java/se/bjurr/wiremock/test/integration/get/TestGetResouce.java +++ b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_get_and_params/TestGetResouce.java @@ -1,11 +1,11 @@ -package se.bjurr.wiremock.test.integration.get; +package se.bjurr.wiremock.test.example_apis.resource_with_get_and_params; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; @Path("/") public interface TestGetResouce { diff --git a/src/test/java/se/bjurr/wiremock/test/integration/post/StringDTO.java b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_post_and_params/StringDTO.java similarity index 63% rename from src/test/java/se/bjurr/wiremock/test/integration/post/StringDTO.java rename to src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_post_and_params/StringDTO.java index fee94ae..096a117 100644 --- a/src/test/java/se/bjurr/wiremock/test/integration/post/StringDTO.java +++ b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_post_and_params/StringDTO.java @@ -1,6 +1,6 @@ -package se.bjurr.wiremock.test.integration.post; +package se.bjurr.wiremock.test.example_apis.resource_with_post_and_params; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "StringDTO") public class StringDTO { @@ -20,14 +20,14 @@ public void setId(final Integer id) { } public Integer getId() { - return id; + return this.id; } - public void setStr(String str) { + public void setStr(final String str) { this.str = str; } public String getStr() { - return str; + return this.str; } } diff --git a/src/test/java/se/bjurr/wiremock/test/integration/post/TestPostResouce.java b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_post_and_params/TestPostResouce.java similarity index 70% rename from src/test/java/se/bjurr/wiremock/test/integration/post/TestPostResouce.java rename to src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_post_and_params/TestPostResouce.java index d01c8da..5265632 100644 --- a/src/test/java/se/bjurr/wiremock/test/integration/post/TestPostResouce.java +++ b/src/test/java/se/bjurr/wiremock/test/example_apis/resource_with_post_and_params/TestPostResouce.java @@ -1,10 +1,10 @@ -package se.bjurr.wiremock.test.integration.post; +package se.bjurr.wiremock.test.example_apis.resource_with_post_and_params; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; @Path("/") public interface TestPostResouce { diff --git a/src/test/java/se/bjurr/wiremock/test/integration/get/WiremockJaxrsGetIntergrationTest.java b/src/test/java/se/bjurr/wiremock/test/integration/get/WiremockJaxrsGetIntergrationTest.java deleted file mode 100644 index 859337b..0000000 --- a/src/test/java/se/bjurr/wiremock/test/integration/get/WiremockJaxrsGetIntergrationTest.java +++ /dev/null @@ -1,239 +0,0 @@ -package se.bjurr.wiremock.test.integration.get; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMockJaxrs.invocation; -import static io.restassured.RestAssured.given; -import static javax.servlet.http.HttpServletResponse.SC_ACCEPTED; -import static org.assertj.core.api.Assertions.assertThat; - -import com.github.tomakehurst.wiremock.client.ResourceInvocation; -import com.github.tomakehurst.wiremock.stubbing.StubMapping; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.UUID; -import java.util.logging.Logger; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; -import se.bjurr.wiremock.test.support.AcceptanceTestBase; - -@RunWith(Parameterized.class) -public class WiremockJaxrsGetIntergrationTest extends AcceptanceTestBase { - private static final Object VOID_RESPONSE = null; - - private static Logger LOG = - Logger.getLogger(WiremockJaxrsGetIntergrationTest.class.getSimpleName()); - - private final StringDTO responseObject; - private final ResourceInvocation invocation; - private final List expectedValidRequests; - private final String expected; - private final String acceptContentType; - - @Parameters(name = "{index} - {2}") - public static Collection data() { - return Arrays.asList( - new Object[][] { // - { // - new StringDTO("pong"), // - ri((r) -> r.getWithResponseObject()), // - Arrays.asList("/getWithResponseObject"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/getWithResponseObject$\",\n" - + " \"method\" : \"GET\",\n" - + " \"headers\" : {\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " }\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"{\\n \\\"str\\\" : \\\"pong\\\"\\n}\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "application/json" - }, // - { // - VOID_RESPONSE, // - ri((r) -> r.getWithoutResponseObject()), // - Arrays.asList("/getWithoutResponseObject"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/getWithoutResponseObject$\",\n" - + " \"method\" : \"GET\"\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "" - }, // - { // - new StringDTO("pong"), // - ri((r) -> r.getWithQueryParams("value1", "value2", null)), // - Arrays.asList( - "/getWithQueryParams?oneparam=value1&secondparam=value2", - "/getWithQueryParams?secondparam=value2&oneparam=value1"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/getWithQueryParams\\\\?.*\",\n" - + " \"method\" : \"GET\",\n" - + " \"headers\" : {\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"queryParameters\" : {\n" - + " \"oneparam\" : {\n" - + " \"equalTo\" : \"value1\"\n" - + " },\n" - + " \"secondparam\" : {\n" - + " \"equalTo\" : \"value2\"\n" - + " }\n" - + " }\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"{\\n \\\"str\\\" : \\\"pong\\\"\\n}\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "application/json" - }, - { // - new StringDTO("pong"), // - ri((r) -> r.getWithQueryParams("value1", null, "")), // - Arrays.asList( - "/getWithQueryParams?oneparam=value1&thirdparam=", - "/getWithQueryParams?thirdparam=&oneparam=value1"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/getWithQueryParams\\\\?.*\",\n" - + " \"method\" : \"GET\",\n" - + " \"headers\" : {\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"queryParameters\" : {\n" - + " \"oneparam\" : {\n" - + " \"equalTo\" : \"value1\"\n" - + " },\n" - + " \"thirdparam\" : {\n" - + " \"equalTo\" : \"\"\n" - + " }\n" - + " }\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"{\\n \\\"str\\\" : \\\"pong\\\"\\n}\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "application/json" - }, - { // - new StringDTO("pong"), // - ri((r) -> r.getWithPathParams("value1", "value2", "value3")), // - Arrays.asList("/getWithPathParams/value1/value2/value3"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/getWithPathParams/value1/value2/value3$\",\n" - + " \"method\" : \"GET\",\n" - + " \"headers\" : {\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " }\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"{\\n \\\"str\\\" : \\\"pong\\\"\\n}\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "application/json" - } - } // - ); - } - - private static ResourceInvocation ri(final ResourceInvocation r) { - return r; - } - - public WiremockJaxrsGetIntergrationTest( - final StringDTO responseObject, - final ResourceInvocation invocation, - final List expectedValidRequests, - final String expected, - final String acceptContentType) { - this.responseObject = responseObject; - this.invocation = invocation; - this.expectedValidRequests = expectedValidRequests; - this.expected = expected; - this.acceptContentType = acceptContentType; - } - - @Test - public void assertResponse() { - StubMapping sm; - if (responseObject == null) { - sm = - stubFor( // - invocation(TestGetResouce.class, invocation) // - .willReturn(aResponse().withStatus(SC_ACCEPTED))); - } else { - sm = - stubFor( // - invocation(TestGetResouce.class, invocation) // - .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); - } - - final String actual = StubMapping.buildJsonStringFor(clean(sm)); - LOG.info("\n" + actual); - assertThat(actual) // - .isEqualTo(expected); - - for (final String path : expectedValidRequests) { - given() // - .accept(acceptContentType) // - .get(path) // - .then() - .assertThat() // - .statusCode(SC_ACCEPTED) // - .and() // - .contentType(acceptContentType); - } - } - - private StubMapping clean(final StubMapping sm) { - sm.setUuid(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); - sm.setId(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); - return sm; - } -} diff --git a/src/test/java/se/bjurr/wiremock/test/integration/post/WiremockJaxrsPostIntergrationTest.java b/src/test/java/se/bjurr/wiremock/test/integration/post/WiremockJaxrsPostIntergrationTest.java deleted file mode 100644 index c49f3d0..0000000 --- a/src/test/java/se/bjurr/wiremock/test/integration/post/WiremockJaxrsPostIntergrationTest.java +++ /dev/null @@ -1,206 +0,0 @@ -package se.bjurr.wiremock.test.integration.post; - -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMockJaxrs.invocation; -import static io.restassured.RestAssured.given; -import static javax.servlet.http.HttpServletResponse.SC_ACCEPTED; -import static org.assertj.core.api.Assertions.assertThat; - -import com.github.tomakehurst.wiremock.client.ResourceInvocation; -import com.github.tomakehurst.wiremock.stubbing.StubMapping; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.UUID; -import java.util.logging.Logger; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; -import se.bjurr.wiremock.test.support.AcceptanceTestBase; - -@RunWith(Parameterized.class) -public class WiremockJaxrsPostIntergrationTest extends AcceptanceTestBase { - private static final Object VOID_RESPONSE = null; - - private static Logger LOG = - Logger.getLogger(WiremockJaxrsPostIntergrationTest.class.getSimpleName()); - - private final StringDTO responseObject; - private final ResourceInvocation invocation; - private final List expectedValidRequests; - private final String expected; - - private final String acceptContentType; - - private final String contentType; - - private final Object postContent; - - @Parameters(name = "{index} - {2}") - public static Collection data() { - final StringDTO stringDtoCreate = new StringDTO("create"); - final StringDTO stringDtoCreated = new StringDTO("create"); - stringDtoCreated.setId(123); - - return Arrays.asList( - new Object[][] { // - { // - new StringDTO("pong"), // - stringDtoCreate, - ri((r) -> r.createStringWithResponse(stringDtoCreate)), // - Arrays.asList("/createStringWithResponse"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/createStringWithResponse$\",\n" - + " \"method\" : \"POST\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " },\n" - + " \"Accept\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"bodyPatterns\" : [ {\n" - + " \"equalToJson\" : \"{\\n \\\"str\\\" : \\\"create\\\"\\n}\",\n" - + " \"ignoreArrayOrder\" : true,\n" - + " \"ignoreExtraElements\" : true\n" - + " } ]\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202,\n" - + " \"body\" : \"{\\n \\\"str\\\" : \\\"pong\\\"\\n}\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "application/json", // Resp type - "application/json" // Req type - }, // - { // - VOID_RESPONSE, // - stringDtoCreate, - ri((r) -> r.createStringWithoutResponse(stringDtoCreate)), // - Arrays.asList("/createStringWithoutResponse"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/createStringWithoutResponse$\",\n" - + " \"method\" : \"POST\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : {\n" - + " \"equalTo\" : \"application/json\"\n" - + " }\n" - + " },\n" - + " \"bodyPatterns\" : [ {\n" - + " \"equalToJson\" : \"{\\n \\\"str\\\" : \\\"create\\\"\\n}\",\n" - + " \"ignoreArrayOrder\" : true,\n" - + " \"ignoreExtraElements\" : true\n" - + " } ]\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "", // Resp type - "application/json" // Req type - }, // - { // - VOID_RESPONSE, // - stringDtoCreate, - ri((r) -> r.createXmlStringWithoutResponse(stringDtoCreate)), // - Arrays.asList("/createXmlStringWithoutResponse"), // - "{\n" - + " \"id\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\",\n" - + " \"request\" : {\n" - + " \"urlPattern\" : \".*/createXmlStringWithoutResponse$\",\n" - + " \"method\" : \"POST\",\n" - + " \"headers\" : {\n" - + " \"Content-Type\" : {\n" - + " \"equalTo\" : \"application/xml\"\n" - + " }\n" - + " },\n" - + " \"bodyPatterns\" : [ {\n" - + " \"equalToXml\" : \"\\n create\\n\\n\"\n" - + " } ]\n" - + " },\n" - + " \"response\" : {\n" - + " \"status\" : 202\n" - + " },\n" - + " \"uuid\" : \"d68fb4e2-48ed-40d2-bc73-0a18f54f3ece\"\n" - + "}", - "", // Resp type - "application/xml" // Req type - }, // - } // - ); - } - - private static ResourceInvocation ri( - final ResourceInvocation r) { - return r; - } - - public WiremockJaxrsPostIntergrationTest( - final StringDTO responseObject, - final Object postContent, - final ResourceInvocation invocation, - final List expectedValidRequests, - final String expected, - final String acceptContentType, - final String contentType) { - this.responseObject = responseObject; - this.invocation = invocation; - this.expectedValidRequests = expectedValidRequests; - this.expected = expected; - this.acceptContentType = acceptContentType; - this.contentType = contentType; - this.postContent = postContent; - } - - @Test - public void assertResponse() { - StubMapping sm; - if (responseObject == null) { - sm = - stubFor( // - invocation(TestPostResouce.class, invocation) // - .willReturn(aResponse().withStatus(SC_ACCEPTED))); - } else { - sm = - stubFor( // - invocation(TestPostResouce.class, invocation) // - .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); - } - - final String actual = StubMapping.buildJsonStringFor(clean(sm)); - LOG.info("\n" + actual); - assertThat(actual) // - .isEqualTo(expected); - - for (final String path : expectedValidRequests) { - given() // - .accept(acceptContentType) // - .contentType(contentType) // - .request() // - .body(postContent) // - .post(path) // - .then() - .assertThat() // - .contentType(acceptContentType) // - .statusCode(SC_ACCEPTED); - } - } - - private StubMapping clean(final StubMapping sm) { - sm.setUuid(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); - sm.setId(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); - return sm; - } -} diff --git a/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsExamplesTest.java b/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsExamplesTest.java new file mode 100644 index 0000000..d4bf241 --- /dev/null +++ b/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsExamplesTest.java @@ -0,0 +1,137 @@ +package se.bjurr.wiremock.test.testcases; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.jaxrs.api.WireMockJaxrs.invocation; +import static io.restassured.RestAssured.given; +import static jakarta.servlet.http.HttpServletResponse.SC_ACCEPTED; +import static org.assertj.core.api.Assertions.assertThat; + +import com.github.tomakehurst.wiremock.stubbing.StubMapping; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.logging.Logger; +import org.junit.Test; +import se.bjurr.wiremock.test.example_apis.resource_with_dto.ItemDTO; +import se.bjurr.wiremock.test.example_apis.resource_with_dto.ItemResouce; +import se.bjurr.wiremock.test.testutils.AcceptanceTestBase; + +public class WiremockJaxrsExamplesTest extends AcceptanceTestBase { + private static Logger LOG = Logger.getLogger(WiremockJaxrsExamplesTest.class.getSimpleName()); + + @Test + public void getItems() { + final List responseObject = Arrays.asList(new ItemDTO("pong")); + final StubMapping sm = + stubFor( // + invocation(ItemResouce.class, (r) -> r.getItems()) // + .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); + + final String actual = StubMapping.buildJsonStringFor(this.clean(sm)); + + final String expected = + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/list$", + "method" : "GET", + "headers" : { + "Accept" : { + "equalTo" : "application/json" + } + } + }, + "response" : { + "status" : 202, + "body" : "[ {\\n \\"str\\" : \\"pong\\",\\n \\"id\\" : 0\\n} ]", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }"""; + + assertThat(actual) // + .isEqualTo(expected); + + LOG.info("\n" + expected); + + given() // + .accept("application/json") // + .get("/list") // + .then() + .assertThat() // + .statusCode(SC_ACCEPTED) // + .and() // + .contentType("application/json"); + } + + @Test + public void createItem() { + final ItemDTO responseObject = new ItemDTO("the item"); + responseObject.setId(123); + final ItemDTO postedItem = new ItemDTO("the item"); + + final StubMapping sm = + stubFor( // + invocation(ItemResouce.class, (r) -> r.post(postedItem)) // + .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); + + final String actual = StubMapping.buildJsonStringFor(this.clean(sm)); + + final String expected = + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/create$", + "method" : "POST", + "headers" : { + "Content-Type" : { + "equalTo" : "application/json" + }, + "Accept" : { + "equalTo" : "application/json" + } + }, + "bodyPatterns" : [ { + "equalToJson" : "{\\n \\"str\\" : \\"the item\\",\\n \\"id\\" : 0\\n}", + "ignoreArrayOrder" : true, + "ignoreExtraElements" : true + } ] + }, + "response" : { + "status" : 202, + "body" : "{\\n \\"str\\" : \\"the item\\",\\n \\"id\\" : 123\\n}", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }"""; + + assertThat(actual) // + .isEqualTo(expected); + + LOG.info("\n" + expected); + + given() // + .accept("application/json") // + .contentType("application/json") // + .request() // + .body(postedItem) // + .post("/create") // + .then() + .assertThat() // + .contentType("application/json") // + .statusCode(SC_ACCEPTED); + } + + private StubMapping clean(final StubMapping sm) { + sm.setUuid(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); + sm.setId(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); + return sm; + } +} diff --git a/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsGetIntergrationTest.java b/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsGetIntergrationTest.java new file mode 100644 index 0000000..6ed43e2 --- /dev/null +++ b/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsGetIntergrationTest.java @@ -0,0 +1,222 @@ +package se.bjurr.wiremock.test.testcases; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.jaxrs.api.WireMockJaxrs.invocation; +import static io.restassured.RestAssured.given; +import static jakarta.servlet.http.HttpServletResponse.SC_ACCEPTED; +import static org.assertj.core.api.Assertions.assertThat; + +import com.github.tomakehurst.wiremock.client.ResourceInvocation; +import com.github.tomakehurst.wiremock.stubbing.StubMapping; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import org.junit.Test; +import se.bjurr.wiremock.test.example_apis.resource_with_get_and_params.StringDTO; +import se.bjurr.wiremock.test.example_apis.resource_with_get_and_params.TestGetResouce; +import se.bjurr.wiremock.test.testutils.AcceptanceTestBase; + +public class WiremockJaxrsGetIntergrationTest extends AcceptanceTestBase { + private static final Object VOID_RESPONSE = null; + + private static Logger LOG = + Logger.getLogger(WiremockJaxrsGetIntergrationTest.class.getSimpleName()); + + @Test + public void getWithResponseObject() { + this.test( + new StringDTO("pong"), // + (r) -> r.getWithResponseObject(), // + Arrays.asList("/getWithResponseObject"), // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/getWithResponseObject$", + "method" : "GET", + "headers" : { + "Accept" : { + "equalTo" : "application/json" + } + } + }, + "response" : { + "status" : 202, + "body" : "{\\n \\"str\\" : \\"pong\\"\\n}", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "application/json"); + } + + @Test + public void getWithoutResponseObject() { + this.test( + VOID_RESPONSE, // + (r) -> r.getWithoutResponseObject(), // + Arrays.asList("/getWithoutResponseObject"), // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/getWithoutResponseObject$", + "method" : "GET" + }, + "response" : { + "status" : 202 + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + ""); + } + + @Test + public void getWithQueryParams_value1_value2_null() { + this.test( + new StringDTO("pong"), // + (r) -> r.getWithQueryParams("value1", "value2", null), // + Arrays.asList( + "/getWithQueryParams?oneparam=value1&secondparam=value2", + "/getWithQueryParams?secondparam=value2&oneparam=value1"), // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/getWithQueryParams\\\\?.*", + "method" : "GET", + "headers" : { + "Accept" : { + "equalTo" : "application/json" + } + }, + "queryParameters" : { + "oneparam" : { + "equalTo" : "value1" + }, + "secondparam" : { + "equalTo" : "value2" + } + } + }, + "response" : { + "status" : 202, + "body" : "{\\n \\"str\\" : \\"pong\\"\\n}", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "application/json"); + } + + @Test + public void getWithQueryParams_value1_null_empty() { + this.test( + new StringDTO("pong"), // + (r) -> r.getWithQueryParams("value1", null, ""), // + Arrays.asList( + "/getWithQueryParams?oneparam=value1&thirdparam=", + "/getWithQueryParams?thirdparam=&oneparam=value1"), // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/getWithQueryParams\\\\?.*", + "method" : "GET", + "headers" : { + "Accept" : { + "equalTo" : "application/json" + } + }, + "queryParameters" : { + "oneparam" : { + "equalTo" : "value1" + }, + "thirdparam" : { + "equalTo" : "" + } + } + }, + "response" : { + "status" : 202, + "body" : "{\\n \\"str\\" : \\"pong\\"\\n}", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "application/json"); + } + + @Test + public void getWithPathParams_value1_value2_value3() { + this.test( + new StringDTO("pong"), // + (r) -> r.getWithPathParams("value1", "value2", "value3"), // + Arrays.asList("/getWithPathParams/value1/value2/value3"), // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/getWithPathParams/value1/value2/value3$", + "method" : "GET", + "headers" : { + "Accept" : { + "equalTo" : "application/json" + } + } + }, + "response" : { + "status" : 202, + "body" : "{\\n \\"str\\" : \\"pong\\"\\n}", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "application/json"); + } + + public void test( + final Object responseObject, + final ResourceInvocation invocation, + final List expectedValidRequests, + final String expected, + final String acceptContentType) { + StubMapping sm; + if (responseObject == null) { + sm = + stubFor( // + invocation(TestGetResouce.class, invocation) // + .willReturn(aResponse().withStatus(SC_ACCEPTED))); + } else { + sm = + stubFor( // + invocation(TestGetResouce.class, invocation) // + .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); + } + + final String actual = StubMapping.buildJsonStringFor(this.setStaticUUIDs(sm)); + LOG.info("\n" + actual); + assertThat(actual) // + .isEqualTo(expected); + + for (final String path : expectedValidRequests) { + given() // + .accept(acceptContentType) // + .get(path) // + .then() + .assertThat() // + .statusCode(SC_ACCEPTED) // + .and() // + .contentType(acceptContentType); + } + } +} diff --git a/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsPostIntergrationTest.java b/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsPostIntergrationTest.java new file mode 100644 index 0000000..8e43d42 --- /dev/null +++ b/src/test/java/se/bjurr/wiremock/test/testcases/WiremockJaxrsPostIntergrationTest.java @@ -0,0 +1,174 @@ +package se.bjurr.wiremock.test.testcases; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.jaxrs.api.WireMockJaxrs.invocation; +import static io.restassured.RestAssured.given; +import static jakarta.servlet.http.HttpServletResponse.SC_ACCEPTED; +import static org.assertj.core.api.Assertions.assertThat; + +import com.github.tomakehurst.wiremock.client.ResourceInvocation; +import com.github.tomakehurst.wiremock.stubbing.StubMapping; +import java.util.logging.Logger; +import org.junit.Test; +import se.bjurr.wiremock.test.example_apis.resource_with_post_and_params.StringDTO; +import se.bjurr.wiremock.test.example_apis.resource_with_post_and_params.TestPostResouce; +import se.bjurr.wiremock.test.testutils.AcceptanceTestBase; + +public class WiremockJaxrsPostIntergrationTest extends AcceptanceTestBase { + private static final Object VOID_RESPONSE = null; + + private static Logger LOG = + Logger.getLogger(WiremockJaxrsPostIntergrationTest.class.getSimpleName()); + + @Test + public void createStringWithResponse() { + final StringDTO stringDtoCreate = new StringDTO("create"); + final StringDTO stringDtoCreated = new StringDTO("create"); + stringDtoCreated.setId(123); + this.newWiremockJaxrsPostIntergrationTest( + new StringDTO("pong"), // + stringDtoCreate, + (r) -> r.createStringWithResponse(stringDtoCreate), // + "/createStringWithResponse", // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/createStringWithResponse$", + "method" : "POST", + "headers" : { + "Content-Type" : { + "equalTo" : "application/json" + }, + "Accept" : { + "equalTo" : "application/json" + } + }, + "bodyPatterns" : [ { + "equalToJson" : "{\\n \\"str\\" : \\"create\\"\\n}", + "ignoreArrayOrder" : true, + "ignoreExtraElements" : true + } ] + }, + "response" : { + "status" : 202, + "body" : "{\\n \\"str\\" : \\"pong\\"\\n}", + "headers" : { + "Content-Type" : "application/json" + } + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "application/json", + "application/json"); + } + + @Test + public void createStringWithoutResponse() { + final StringDTO stringDtoCreate = new StringDTO("create"); + final StringDTO stringDtoCreated = new StringDTO("create"); + stringDtoCreated.setId(123); + this.newWiremockJaxrsPostIntergrationTest( + VOID_RESPONSE, // + stringDtoCreate, + (r) -> r.createStringWithoutResponse(stringDtoCreate), // + "/createStringWithoutResponse", // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/createStringWithoutResponse$", + "method" : "POST", + "headers" : { + "Content-Type" : { + "equalTo" : "application/json" + } + }, + "bodyPatterns" : [ { + "equalToJson" : "{\\n \\"str\\" : \\"create\\"\\n}", + "ignoreArrayOrder" : true, + "ignoreExtraElements" : true + } ] + }, + "response" : { + "status" : 202 + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "", + "application/json"); + } + + @Test + public void createXmlStringWithoutResponse() { + final StringDTO stringDtoCreate = new StringDTO("create"); + final StringDTO stringDtoCreated = new StringDTO("create"); + stringDtoCreated.setId(123); + this.newWiremockJaxrsPostIntergrationTest( + VOID_RESPONSE, // + stringDtoCreate, + (r) -> r.createXmlStringWithoutResponse(stringDtoCreate), // + "/createXmlStringWithoutResponse", // + """ + { + "id" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece", + "request" : { + "urlPattern" : ".*/createXmlStringWithoutResponse$", + "method" : "POST", + "headers" : { + "Content-Type" : { + "equalTo" : "application/xml" + } + }, + "bodyPatterns" : [ { + "equalToXml" : "\\n create\\n\\n" + } ] + }, + "response" : { + "status" : 202 + }, + "uuid" : "d68fb4e2-48ed-40d2-bc73-0a18f54f3ece" + }""", + "", + "application/xml"); + } + + public void newWiremockJaxrsPostIntergrationTest( + final Object responseObject, + final Object postContent, + final ResourceInvocation invocation, + final String expectedValidRequest, + final String expected, + final String acceptContentType, + final String contentType) { + StubMapping sm; + if (responseObject == null) { + sm = + stubFor( // + invocation(TestPostResouce.class, invocation) // + .willReturn(aResponse().withStatus(SC_ACCEPTED))); + } else { + sm = + stubFor( // + invocation(TestPostResouce.class, invocation) // + .willReturn(aResponse().withStatus(SC_ACCEPTED), responseObject)); + } + + final String actual = StubMapping.buildJsonStringFor(this.setStaticUUIDs(sm)); + LOG.info("\n" + actual); + assertThat(actual) // + .isEqualTo(expected); + + given() // + .accept(acceptContentType) // + .contentType(contentType) // + .request() // + .body(postContent) // + .post(expectedValidRequest) // + .then() + .assertThat() // + .contentType(acceptContentType) // + .statusCode(SC_ACCEPTED); + } +} diff --git a/src/test/java/se/bjurr/wiremock/test/support/AcceptanceTestBase.java b/src/test/java/se/bjurr/wiremock/test/testutils/AcceptanceTestBase.java similarity index 84% rename from src/test/java/se/bjurr/wiremock/test/support/AcceptanceTestBase.java rename to src/test/java/se/bjurr/wiremock/test/testutils/AcceptanceTestBase.java index cfa3da7..3729ca7 100644 --- a/src/test/java/se/bjurr/wiremock/test/support/AcceptanceTestBase.java +++ b/src/test/java/se/bjurr/wiremock/test/testutils/AcceptanceTestBase.java @@ -1,4 +1,4 @@ -package se.bjurr.wiremock.test.support; +package se.bjurr.wiremock.test.testutils; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; import static io.restassured.config.EncoderConfig.encoderConfig; @@ -6,10 +6,12 @@ import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import com.github.tomakehurst.wiremock.stubbing.StubMapping; import io.restassured.RestAssured; import io.restassured.config.EncoderConfig; import java.io.File; import java.util.Locale; +import java.util.UUID; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; @@ -54,4 +56,10 @@ public void init() throws InterruptedException { encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false); RestAssured.config = RestAssured.config().encoderConfig(encoderConfig); } + + public StubMapping setStaticUUIDs(final StubMapping sm) { + sm.setUuid(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); + sm.setId(UUID.fromString("d68fb4e2-48ed-40d2-bc73-0a18f54f3ece")); + return sm; + } } diff --git a/wiremock-jaxrs.png b/wiremock-jaxrs.png deleted file mode 100644 index affd0d7862d91fe99b239702d9bd48bc18745f62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96161 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%0AQhA4NjlkoCJ6=|xEnU( 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

e7Y=1Gq_Hw&$dy_V-sYZGvn&oL6m zI9a8C&ZM%{CnWlXJpbEhTkOJE_lkRm-Q*KN79VJ$bVB^6dre~lnJTyMQ1H?8LXW|E zfHUSOv5!{sw#oGZZXevPtA;sa^Fa27T{NYP+}hRkd?JhL9=ypqrpDyBAg?jQsmV%^ zA=^f0uo;q!)CPN=cB^}5$1(QZml#8Dowy+f4x>_N1Vq3yJ)K8cF0y%=I$9g!H51E@ zV+(EdEgRqYP^&@{RN#cAFxsOacM8+;k4aau3d2kZb04vzAoux7Ck*oRRZU<$qwWTy zWmAw7T1Qk#OZYWg^&kwRo3;sl@rHtxK2^~~Sh|DN8&Tj|m!@_4j`?UuQC- zd<(mY*lqhIZO+WCG&KJA8hh%Gwnf0f4VvK3N>A7#SfcGX?&C4_zwAFmM~B@#S2Fq2 z95neI1uyjYQ!_xRJ-&;Lhs?#xgi_=F89g&He9DrI959x(TH_^Gt$wcuOjA`l($!G% z2di0@4qAQhW`C?!RVKE4$YLOrME3{pk8mhtZ&(fH5Q->X|J4iA>ife9b>g%ef~}rC z-+&p0*F}J36-5~^#dg^#n^kKmULb-9EWp{%hP@SA+OsKw(b_Z zoG6%&f0ARn1vKM&F58U(HRkuu+3Ouq>D3vnPeo&i)gqkePbgh$fEf+YD5i@lbS!_1 z#b1Y(qkci(&L=e6t_zV+ZkDBuuF)t%vLCw;{@}-o#2@`eOp5XWF$edrj^s5Ew)1S@ zyF2GG;9mwTAi({BL?C`13{K?t50Tg4SjGf>ZN@^=CPCe`Vhonnq<4DMM<}%r4QIx9 zXx+VUnPm0O`ur|lgt8rZ0);x&(%f&^Bjn*c_iyP|=kc?k3F$E{ZSw|hYkR<%2#P@l z&f(C)N3>q7J!dmv8BTN&zIa$_?umr$qyk9;4U2mbF|2lDSX2f=#&JFNcg zz9?lE9m3b)-{3zc4$qUWx6eY9YUBdAsav3aCGbWa@#-i&DCyy{1ZGLNYwXfjuw}3U zXwB=G;_cI!$EE0}O-V{>)#(N}ZvjxC^-F^D{0&)C@))Rsyhot`=lr&Dhr$7+6mWJqZ2HacJoRAs4*+KwGWdmc3GS1`s;BQkZMrOx_{Ah> zw+;23f6p1S1Z%ytW(y8`)Ui%A|Blmv6>+mky^iIFo$#&@BVR|gJ-@m&>Zpd`wErcV z@X=rkp5gZ+7Zz3u{(GxX>W;v6sh_<^_HKjyi)?QI(29)5RGZJ1nQl5#vT5DmZeO;C z2+KMk7x>+-Q6&IU?$R+l{~%=gT_YdYP`yUZ>*pQ|^Y^7)+z1a>4GG=EALxy-JZ1YG z_U(bjBVRi9_6tqf4q`k!KRPy8%aK+c-K(->19Rc4LH}r^fLR9cB`f-gEzZJG={REc zQ34lMi(!N_0;HQ$KK#52m?N|4Y~7&1QF!_7krkhyb=8=(Jdgc6`)}u-n8ZNxh?AgKC|PU7>=S0F)&BxBmKVm)8nW38{WC8 z`9w{UvgvPL z@xrPf8PZtol1DW`!Z13lC4@F2=4sVK&A%;<6%wJRFp8_;Stijq{f$ zZJojh)#0^Jylj2jp1i0Jnm9XO&Q#+0TNQ$l)wRfN|N-thgJ9t)e%hNmsG=r_FO>nHR}ICfIOiWVI3?tq?EHc;!S zdd8KMDJXIHP*YiMMbrFOZ^`9?i}I;5o-P3DV%^+raFkiI@E|=q5yxXg<##YeRxKZp z%PClox{hPp_Ll+KlMvTz`AjuXf>h)Wu(Gh7d+|9muPc5QTi$pgE@ZZq^Ea>4ya#&* zg{p}<8dvtW*`|pFlDJ-Rz?8Y^_lV{kIxp<^YBajFf8NiJMcu*UO?XoY=^k~qZu7+K zje!Rywv7?ipA?#U+lm7hLc(@3Q?JfjRHP@zjI}y{s(m3wRx!NjJ-FGr`Kf@6jtHj< z9PqmtFjD?v%3?$EtLhCO49~jD%3QzadS|(RADA^~L;R>?@I@v17I?hE8=#OH+lkB2 zyuU9oUx*BkFb|*qa!7&C)adyVzAlWI%eP)!)3Z`;H(iu*2rfUtj8NyBo1iKrD2o!f zRl3Dju=(bTIr2sI#Ldl3@TfRu#sQ@bAppgZL=dhYoWGJt+Wbx83+dWfZ0xgo{)`t9 zua3v&w=Y*9hjtOiGkzGPjjgca{O6a>A&ci*s-qwqhlxTmN8A?|LM9y&Vd!TU>t8j5 zyu~`=GYVuf9@}q~0qp2rkAW$(vo1+%@;2lF!Y71tHh%&Ba5W!foFM&=wwYe2%@MHw z#4pc3OBWKM_i&H!ITsN?q;h^B+H-YUe0}`Qaio;FLF{F9+Dmu9}bdqJxgx+XGv zqAT|^U^(0MWG%{mSl@H4KM>T$+MZ))lbuJs?jt&lf#J_06i%@BGheL0%I{M~%L)?J z*CToghB@)~#-(c8`}J5iYoCAPj$ElU4=|`yw>6oIX1zvr{G4jNWF&r21}mduE`5TF z@qpyxLA=~0PFj+s#FFn$ReeWV!?S-Pr@-trrdq=jq;kdmLuCqR9bexe$uKd~Zw7xQ zH@~f2N%Ff5>AEnS3&h6{(O0HS1QV;#{MW zZBLBYD{;5&M+h>>EDR2iZx!td5^Vs`U!i||aV(C}v^Y_~H#DV%qbsvYQ0LAjBw9HJ z*ui;?Cz2oj-qmSPTRK@Zci|}L;)SvkmbKDiD#388^tgF{zQbP8_xxnd-`HsO?Q2x6 zHiMH!n`hTQN&kAfaW1oDPbgIpkxVN+++qcyNRun~RWK<{7Y{+fQcyo%nr#J+Y=GbP ziQ1y1+m*wTmU+nlS$^+Y;k!v%w&t+!ih&H?s^k&-C-YGwI30>JNpI_gvbQYj1I(}3 zC=G|MB?Jv;(!k1p1M2*-p$_>rUZlHWjiWncy_>-JkMoaEifN+o!jo#a_u=VkG{?-7 z7RJr(%Y~`8eK60v1rT&95ON=zO?>x}X!6(0Y9YIb%YU+%;|M-;{5=zKi&;%>3q4QD zOxz~x5Fob}_L6xglk?&4|pHLQTZ)a_woIPTf4*2stl z{Y)6RS@k9bJXL$7MOtEC@zWhAFPrSX1Z{TJnhZ`#~np_xb{Y@Xx3ulc-r2B;$J zCG$J_xGQZfiHIZQo=Ki3X^)ZGSh-*)NGuG9{6lB*Y1IBO6j!HUp|>N^jluMiN0HoE z8NkcYATs(s5$Z9_=mW0g=2w_BAa3g5v2_Sei01WRzsaEu*N?2OKaeCp&dhI6eo#yS zms4*?pW3b|D;H4U;k^B9uRGPY(OXi-rBkfrs_vH(AW8QkusmD2TCtlQ<8JPlP!3xO zOu3U(w3aMkg)2B&d=g=tGv)gc8<8$W;9q}+p{1HOZ?(h(t z&|NBE@@l01USZ3%Ov}t{0yaT2(4>NVio|o}iN+3TvdtyT^Fw2wX(0|K5(!FfVZ5L@ z`_fS;)RM?={3{JCpbbj2TUN_ej3L%G{W)^M)06nWGkYFtu! zI1C7z1tGMyOZezQhb6k2Ca`@*1K9WDyW!qj9)=`aYj%K#ZD+v4 zs>lwN{l$5+h;EzPY$}!1)QuR=wP&pgy2HbaQ=kq%*~=jhtB-bf0|(k~P#f$)s7u^o zXWD^W7IR`=cH3|zJ#%aq=n?~p@op#b99&aJ5rh!P@&HSwy5A1)&5+5PS)$rIM6NO(_K%vzD^|4l;=?jnzN~$s`Z^^pYXBwi!Ah4i z6Rntrw&?1_aL1%0m*39(Ox~e=%t`{9`Z7LRu&f2)HaDKcn z3y%@kpBp=S0^L!=4te`tqFicORU~7iV!s!g-33j8lGu*y!c8-3b>Av6p^H6=9m9ra zbyB^vEbcs)C|F+_in4@OYD)S0a@Kr@yC$Dgw6t{8op0hinX-cGQk1w7b{TIX*0%Aa zTzJmf8P8S)L4f{Eqr2p><>4Fj)K|>hA+x9Un?|zi5}fuxqib2#p-znzgi|Tgum>xz zRlc9uHl7jdCFaxDNhMrwdloPtg#q^o78pRo^$V356YiG?mJ)!^Te*{qkE)s|TJV+& zb8Q{P9HAa=V*q|ZLljyuvI4?q)Cj3hGatFCK`iZ=9H<*VEFSLK)(EH48jbsT%ikQx zG$u&q#Kc|k8S}*Mrp}QwE*lOb&FzTTqQpu75{LGoCW3v|w7;99#+^QI#(2+YkRXUc zHF=rTD9Oql*RpQfTI;+5d}wlT5B!qM9W9k3QAUY+BJ(OtyzLQ}ycE|c66eV`UpRr> z3#zv-Fxxl^A}(pkIKIOB*Wf*=rTn*U{qySv-x(4#Otfs!qrnj*euoRt?ZN=~KFW{+ zeyZk3!EW8A#Qt340ziF8{6ZSnOmGQJXf;dHWgz6Q6zgB3c0L5 z%?g?@Ig8E7CYrqRLR?yw*jsNCmfd4)6z0?K&4S!s`7cgu54>lR+fdGsCOQ;Eh&w!) z%@tEK0xU6(H3nug66cIOA_POrdRwPXzL{us&Oawvr)hA>J=kfT&r6zgA!qH$@O*iE zlv<+C+5#paqaXBMF3iZ1QSpP}LWmnua=OOQ4SajzUZXnasC^qDDC$XKsq236d;xxx z3#$5)aoCVYu5ePQk221@5yQXZ`FIB&4N-Ju?@Sld_Z&|tZ659=pkttn`}xtD2vl5&;AR!>7OUv8 zn=M};g5bE70Abh?WkxmtBol7#^E~+Ywp)W4R3Bpy59{)ypN}5xwTk@=A$A0%Ve&eZ zeDlM=$`J~+g)#tX&AvIRBndn2X$$$L+3&-eh#f$)EfSh6f3os=a;XT1sF|lS)>hrW zO;xqd@p{|2x@=kGm8)5#tU_~0oI_9`6gvg;BIJ%!$-gb>6t`J>>vVK*KNo4#p4iPdBYp_wJk`oS@m5wrf(VDA76)nW7LRY4qN^X zR>!^Gs)TlNKeA)lNqXOb`PP4#HHu2!r|&d}Qod=P^NSYE4W&v=9a$90=nuk}G--)d z+gq-axE&+HNG^(xdzif%JBB)91RN+uTDz&g22q6=KY}DIj&+?~Rk?OF?-&nupLE09Z`af-n8%>fpS{pdGNdKK?$F=Fc8eaa3H? zmKS(OIVZsea2 zT(1j|c?EP?E_*;5 zy}l!k9T6ft_l~UjN=^8A?#kp250CPybyR69W4drIE#E(cJNaLL&LrVBcaJ5HXhy;^ z=Px;fz)^CW4p_+=pVF%wo8YfhfDgB?Jq1-<61>eRm3RaM#wallHuUqv$_>d2Klp$O zKi_$Sg;)@$D|~)C75@1X3MR~ZZ#Ies<#6pQub=p1+#Oe+Kh>YZC%%8N5QGwku=2XD zS%-jpYi{5_J6AgskZ`5^(D^BxxL^ifX|1-s7N_mENnDR_o&xjM+hwHh1!-2r0k@Dd zX)p`~&!mF^fv>hFgsZzv*ufwe$bHfM?XALI7b;WbkLF-`XpBZrv%8WBzoX0I=5$aZ zuK1LzyCDucdl$KG)2OJU8yORZ?#jvNk-8pv7w38Nc0mVVW+0Ix`2~CvU1w!A+qCY~ z+q3)i`fc@Ssx|8bk?R0*;>kjD?TWsAy=$6^#Ny2)A;qtrAzFxGu1|s4amo$Kzse8? z^O*w9eSUE+B)f#UQ+ImcCTED+k7eWZfHk)a9CmLT17?q1GAjY2*?M6J2)1Bx|<(E6r=??cd3I!>qB>@VDoLQ79N{! z3G)hrRc=h-Fn1ueV-rtZW1wh&pNG8xDg394%9rt&@%g6xE=Fw7)32AW`3%H{D`^XOEGS-g|`0U{K%9PEjQ) zE?CsVt+M3NE|||o?*+g8An>OZ^<*w_Xb~MCo(nn4Xe)o-HL)@|90@&#V$GOy0=uH- zRJVp3kBDo>nOmDA*`e}Oux%WR=vG%E3S^VjpfTnA@}U`0Vx4Ap^K22mZ~&SfZQP*0 zi%VhZ;`{ZRzCv?>9xUPR1(jX2_1McnsHKZswouIR*5Ek9ml5w9Cf8KgF!_5Amu8aK z2Q;EOH8EMgU9${QMOkzf9tNiC9oHpv#wjdM#s=3emPGF$s_{855am9@iaY`%jw~g| z85=V;Pzt%wV-;kjxdH$@6Y$i5d$3d{<(-Q@$qBUd;LoVv;re{qd4@o3@o@Xa<91{C zV2{;qRRDM3{G1snFIl-PIKH`V=|91dT*HUkk~z`-^yv){jgcSRRzBFHB!Ztm<2gxu zqj(H2N!BJ}4gct{Sif_3(zi3k#3&LUiZC^&t7r{DyrCj*Si{3keRJ<8{`Rbfczexn zeb-%Q2@>eUwqQ*=;PzTKp{yO1+tG=5ynoYC^x|+by_W|(6jLql)ik|CY5CmmLB3u0 zAG;95cg36$iDJ-fZD3!$p6zeA{s2Ccy{mD2+uk5yCs5}6O!DgCEDZfQN(X1>y)f$2 zuPj|AKZ-UuQF~lKNBB9v{rZv$*PWW_fyNjiRvD-7)EHqu`gOx) zPsZVcJ!4#=8}=F&=l(|6(;k0x5ucK|tniBXbHytEkF)b%j=Lr9oQ%c)9TNmg(vxJrOst~=^@UJF5nzrG{=9|XH^}}#Ed{y-_4*?uwVapQ@wlzm$KNb4uPhpZO}P`E+7 zMp~C(0;JgOj$`vhsGtSi4!EifSN$K^{a5Rg5!&Su<$w z*fV)}4ODSOlm8Z3NHnY&k^Xoe`FSlqK&fE6#Bs9_IeB|~z{`69k{0NUvMBwc zx^glLqP$4S3JowBFsyD19k^sx0eK9v93#%2<`j2}9NjEv;p&ez=C(CP7?^WunOa~o zGLA!@3YeoLZ6`anscJ4TBAr>CgWSNP(t!R8Z&mS0~wJxbh7_9_xFp_C& z-2GxOkK)6fSup+7=lVAn;IfJARM>XO*qkTr-t{VlgNIhzo_k|FlQWd7hY7nQbl??# z=j;U+sDy0w!>}_(z|wq+M4w9F%r4(ZO2OPj51K8yE!LLb`nGN*N9v#eAo8k>9%e4T zbrEGAk0M2Qe=hQRl}!lWyvCfM?>-Q{E7$y{ZO9?f4rkXCLQHkHW95Z%IC5`&?-(rE z9V@!#azaBm!R$?qUx+MGGt5zWI`mOh0v*`T7@ucN)r*>xeRp}_q65fR&7eIavzId! z2nqBO!iCgpD}g zt5A4}763GcchO^tz#lXzqh2hm5x-4CXrMJF$i<|t3}W~^J;jg=9SF3KC%vMHM?S+p z1_6eDS@{c`-(0N8-LnWh>SevXoK!#`I5r|eYDci0A;s9jp=I(EDnSON-bDAN1%c_5 z`Q|qP?16p42#64Fi5p{E3~v2?Wkw`h40nAncwXd&5SsTbpt#)jA$J`&jJLwb%KA@h z_PC-IY6+8fDx7zNxM&RDNMH6Wg7F2N&p*feleOptcl^i}I$G3dG0CPc4&vnJ?=r*Y z?wn$`Sigz%JY7tt?>6uu5IA_cwd*$Ec<#AfaEcV7dOP0>BHl~m81?BeBM7_q;CxXd z_of}vh;zASbh(cf@}5z%weUT@hxjVveRUdY8{EM!xT66tw30C5eP1vTyCTUQbZc$` zEi3fm>gt$3SqSq&1>%5xu~pEJCb~sB)*L!AhG%p2c7(^O<>o8O|7~h9FtS@r2F6mc z3j8|z<=Bg@!RVW^Qtc2fi_;*b5--g3mkxx^GcqZWLEfD!Y~wI;A#is=^^XBCdJJ zYE#CHXp{{0C@RRMf9jX1P!DG|OiP-Aqs)GB^11OsVq?RWkw)FLYDK2=#*farA@#6^ zc7Mey)w^a_Q=@+&oy3QW)nQDz6*B>I>y*Lv=tVzLoYY&k_Ry1O4` zx*fdg#uA+c@SdCVTr!U+HL@Be7%zfjDgf;ne)A-#xHc(1y2kb8cU$BPm@8q$D*yU> z`I6q6P#dKmCA94UO{H383dVwI>JmjqkA9c~cFF>akD)p@1)#zs3K=jR9X= zyuugWj}N^Zg$I& z*0N4pS(#;UY`AOI+(06TVjz6|jtLMJg}*#xUCD0DEFA1BYVunlzHkUl6Y?Wk=d9rs4#;mu z&v{xQj#~J+GqqIz66x&%`TldXC!8Hz6^LZBhr+xb`)NO*a!u_sA^O;S+iLH=b@_}) zJ%l@IUX4tdapg0sb6pq(ngVP2p;K7Fe%LXL2}zUk({iOcED3KF z$u*uJ0qS>C0gb!2uOb5zrk4!Q*9%SOSwRtT>9%eHITS3kJFHLsMj6;>!v3VR4I;J* zjgKR&Kh z1PFZ@ph3hHufA++`s03+GrN-V7D2%|3y}4*XF+$%;n8l{*YCG27D>NGs?XDsw5AYU zAhZ6Lwzm1mCn^9P-b$iDYY23H6#+3!*ohxcuX{6{w)<_K6@H5ZC zw-EAi{nzWIl#T=F7u>;2{&>}|@iNNNZ>;$#SgI2%SV=PKa#JCA1B^Tq5Jzb0pSTe8 zkM=%3#HXt0ZBs2CuLyn9b z3F39m9ulGK!-DJKf>r#Ti*HUe2vcgV$zT2wCvTVNyKy+5XoEfaxls!Pnk6yNup&Jb zSo*%~yo+|9<36fv$t>~$tX91d3k|<{q;V-P&>KghaGNC0^drk|Q6f!U+EqcR@fQrI#CqwFdS3Z+qzHq+xl z{-tNH?Xn!}vYHkej9IApWS|%^#hX|KrhN2+%BF{~Ere412gH6^GYG9gIAwc8)m@h| zXC7e`NcpAYCBWwd*Vni>;_-jQm{L0|9rb+Uk9?@21EdP*O{)YXJS;JQE(*-to!;d% zoIECyZ60rAXpZ9_mU4cV>hUD21^Kz)02U-3x08#Is8c9gJ0sC1UQtzAF7c4`NNe$G zG&!dhFWG6Xxla5ZV;`?7rGL=N#ryxGnHNTI{Fw0Ze~RjL|Cd5v>_0X4|8Iv&y^|Ni zH~GI$DbV6hdwoKovQ4F_F64E;D>e#jaA?RoEf5h31aM!Y~z&}*hw*% zB=ANQ-TP8S#g}AHYBrgtcj-pg98pvcCp)vA=aH*4-s{GtiZ z#7qB|lKEd>AJ4odhTv_lNu1P(%F!K(Nowy@3o7T1Qu0CKBlgTn^bXi<*R#GM@dtd+ zptHt5x<}pM{dB}HtpvN7GwEexs&B~t?5 z|2{DUN3U^ju>Q3zW(R^J=J&#P*!M5=3M|f^X@rsx-FE5%SGWXgq=G{BM-t8Y&|MI9 zXMC!2r@xDH<2~)$#w|@+84$LME}=gO2Ed&pa(APQ+7Uy#sAwy>eEOBS8Xvcda!L#Mit)mNVzyQMX^?{*IeLyq>vea>#-)W?S6zI6 z8A@3PAoLeZynO4fnjOhMDOfiq&&cyhZ)RU3S!qvW@)#QmvIza(mIDr1Q2y^)9_Xmq z{pF|bE+gOCm!_{W7joAWMJoVfZ&(~va0RkZS3TX{2tG(@c{-9!>tpxUG7l5uzJ#cd zLmEIl=5Shz)zI9Z_lH5j0^hct72JRT-`E{1GRq3e!_f4HDG`%N)W%|D!eI#c0ey&3 z6N^5$cL?QgqbWS0#h3Ow*DZxb44>=1(>P4_->f8Ua$fGAjy`%ue4`jvOak1|^cc6# z_Z&@in40J@1KEALUv83CW)oY#MEy+n8;E?nY~Vd{u5=yqk|y%L3=_0IkTCBuHJ7ce zM^lEfEYn0KF>&^hRr95P{0d=IZ0iOUo~m1ujO4v)(5>+bX)R;JX?=7Nriw*@*ES^U z)@2G_pvc2uDmc}=_)#jIoDbaGv$Jq(c3)vrsCvExPZ~3t$MPBBvp7Z7mU8>02?TTf zqDcY)Cb&z&8uYalifSJDWw-4iB3(N zo>r+%aK}ZhXCU0fa+OYlf*{^zvf3`4MnEa(k0y&_$$#H>OhuE z>){Af6UuDVKv%R*Ld;^^=q_S{>6;q9=ilBS+pRDV3>}Ui(j3TgoKB9{SkK^}Ql@SW zm$oz8B&X{iRAh}&H_z?5{RCW&NYt>vsQ-PUN=IuX*}_J5O#XVm87X?$#&hI_M9D(~ zN%_~-GO^!;yOXV2gfH7Vish7t{V4Pc6ppLsq%R;_pL@_+;fO{q$?P>R$uOgp%SD!W zNyK~78+y%c#CJ<=xC|`lq|)D(ssb&9-iUFLTqClwCt_8-sH&Mv9hr~lZQ^XNk_{;R zxTV1Uy0Gxv0Y@)=qvPps+6-ESR6Onw>vqW3MtTU0w0 zJhx#c7}lL}8+?6lb6F~Y6Xq|eA#-$Q)GYe>_iYPe63FXAF=01*2Iy^4JJ~Xbb8F%i z<}#Z^8+zUD20qBzEE;wmkeR;^v9WL6Cmamx!bsMs#fWYMGh%0&62pfQQO@A3q{9pA z$0=&mc4cR{AK-JUE;gNzXOo%s%99;w%qi&wIHUwy>l+Zw>3+L>Kl?ca5CX}_W;{Z! z5C1A9U`u&SnkUFi`xW8YN1RbF?E~!3QT3H|mF$XV!EGxkyhVpSE!EliBFfxUVP~#& zH>BjUm4+SZeW1tNCzcrFnK|W{@CSz4z^Lb{m&b;1j&+$~w0(OZwXr+IS?=SClYyCL zjb#Ex*~kA<4fLOx{D)w`swxJ51O`cgoDs3ccARLm!QI8{PG5SVrsZN3_U9OQ)c$m0nhpr^DjLUei%7lJm+3vcNOwyN>_dLi&mAiDJvH%-vcgq?|3>2!=ELwol$NZ(K#+){ZOd5{INn4q9#j1KnN zbU((5e@;VWqiSZ51L8N4DrX?k#=uQjYJ46nzQf`wB7=tS`nUW)1JS-RL&WmUP%yk6 zK4S)mih5hZu(Ftdzu3=QxT7iQLG)WPB5)T^BK`p`&Lf`9_)j>k!}DV#mA8o2896{< zuOv3+YK7!*CG?y={|OOPY3}{MYP; zf3PT5d`hOGf{Y?W?-S>ypSj-)Cl#4Q3n%}|g~L1e@jYO$h$YFowipuLX<#0ek1HIjD3hhS@$UD($JAXHSAxiTxzxRyv(k)kxDav;tGByXwiB@=v-P z=gCjP`Uq2xbaZy?O-O3CPk^BTa?c00)+9W7#Z*B?Ont=?70?JDe=NzNvl0IwiG-H( zB3=p=CGjNshsK&DWEGXw{;DGNlgCd(#;W+N_dQzHo83^B?{N*ED96cIyY+AHBge1D zfTB}}hV`~(-`B?F#UuNHJ3zlX!SLhO#53po95k4#(oeV6+34V}T@YmTj7BIAMuq5U z*qaKe0qL!u{Kj%m%HxQHvXk)Lqw2AOi0M8cJs=3KnttZChD=>1QnlAcw_brPTCDPwYSrPm{US)B>Gy#@Gg=c{ItU zL!esnlaM58`o%Ky$m5@zpB#Or40Fm;50XP0{RaAhv}V_cda7q0f5QhPdtZeCCC@Bk zbLavK{LG18S*|@kAb6d&b{JDw6S^+q@QS?C5#USg$MsU{OCPt1V~r6%mXU zo|qQfpyrTBwdZAG9|gK)`5k<<0Vtvb;jz&nM<|h?V!;+^*TCrLdFvF5eJ3l-7bR1$ zBIp@oZDv;wn{_zyJt>{hie)Yp7condEYILH$XELUB*fGfd;Y&O-AKjKNdL+Ik&+OV zdhlE~{Un^Z-DVA=`$uLX#>n4Fov1Gz<7$L0Mz_1vzB|18mR_FxZXF(J{Mldg)>43E zQ}ml1iGdI`{Hrt%Sr@A&QorHtGHHWE=p8zYLDy-)Es00|T*A7jv-?CCK2l%Jaw7=v1I{ ziXP(ydBNMEdDY_=O1~MwibrzX8zr5GFw7B@Ka(TDhYG@OQsDy0XytR{5BayVvrmHl zAN<#Uv}aCOPg7OymmwA`Hh#8KAaAx9rL+9_0)4T=wRbcB;Z5*^b_iL|tVF?E{-6Gh zX~9kfT$O_R%TkqG6)O?chwX8(JC$R;=k(t!X-#vM`}0aOg%$dvy#xIHU}}ul6Y{E8 z`xpOzQCHk~kuOf;VKx6d2ZNyv$j-Z90YL^I>M%tGl3o0n+fr;yUI3lr8{Z?qT z?4YhIsD^$bc2Li8lqv1h;ffv|I-9;~Iks)hAB-}A4{kh#d}98ryY)L=(q1Q2MUEa2 zj45)6DNtTcH(3}K!;b%=8kE{=96Nj*ov``{wHh%~2Bj^#U;EH;=B9`_Zp9>gxyyef zM>&2R9+?J6QU2Y%Q_zp;e}l6%s7-+8mpf4gQ72CYHY_wsn)l9*=gN?M9Y}-=3Z9Lg z?W-ZT#cC5Ep|Jh^-%;WRvNp%pKsU>Bu|sGF2-kZKCI+IVrtqL_T9*YV!fnl-$F5MM;FtiHR*D0q{8`-GYAto9~y6 zHMz&(dTrLxehaQk%~PKAQ61vj(Eq5iCqQv&zB0{0cBTYqQOU*q6C5e&3qSgU7t5H7 zC(%T<_y1oNQY_xa=&bt`L^|i0hk4_-ws)Mw^(exnwgi&)qn~b%HuQcbI2*p6{_m}q z+-sqx7eH_LxM1lA_Yj|smPdD@?Sr>Lzd6*1hx@RxP%N}T34wJV^C`{DUtAS$NbjQy z4$bT4{S4BR_|uF>*op)fUaxU+s^liV+aV8#f~@LS)wQZ>?24DWYqKd&zco~ayFT0k z1e#kps=&+ubuFYT#^v>XYwysnU0b`_QI>(k#kRjZ*3Zo_Z^maa|GnGcwel z4_r>VDgsF@a4>aFcG|D{N~_>aq(?x}i5mY^)41ehe}^A! z9}vl(3uZqVI9(K)ykb?krTtn<<j z2#EB}^>3e+NB%p&SnPJEL7lieKSX3+8dxt%JVf}8y&2|9Ky72Moo7jeKT&SjE=fHA znY;gjoQ*!TsmlqkC~Pf~nQ*pN245s+f3$)aYYUQuiav4s`1S<=*fcRXjYj=Z1g_b< zjW(zy^9Q)Tj||s?4K;amJz8BGUumedZ$cqaYIox~+&CNXSHi=O8gCyLvP|91G<9h5Mf%Ewi$u0`-k{G|ALdG@z_Xb}_ar zw^5=zp-KkQwA%JA&2duM+shI+-jKTSdQ2W^!6-ze$4QD2u%Ww+U) zemh9RS*M=^jUbv}6H=L`mT5dbIdBzL50EJ1U!CL(&%CsZ$%00q{SQjNdF?FVE|eC` zRwdJ{=+}kT>_=`y2~3=5O%FkixlO)k>2ykOKA-{rh3q7A6CmZNkj1Xgy7moAch`hF}MnGXyVb==QP; z7~&3BzA3BzGp&&P7Oa2|fr*6Xvh+P#wPE3~_sS}1Le2VM%d*}>JHbA|_0^$2GE#_t zAN>>IUj~s7sIOG*TgyXeu5^H{vG>L~Uv&SPX?GGx zfV=rxl5vmXGe_s>6=KRu+ZN`|B_4mmI7BE?Wy3 z42INWkn+P)Gb;o@9q$vT*;i%=E*xe|yHrH)x;q;uswX^1UxS)>L})=j{yCt$6qLVS z%EW0GIxd61EgSe%>BDRpPYV6c;BaKV$k2*O2y z?Edcf@Zod2y`!qnkPz!C=SfGCy8Op~E~*RIO>CmNazg0v31c|Zt~KDpe_%`*MFngj zWGR|X%(TJoGrpSaeeDCBTSU?Y>BfE~+fvn^Y$V1!l5DN7Eg$D@^J17!C_YKgV-zQW z`q5)Uf@amRs+xPFXJ#OlO(PG%Wmop7m$#q9eV@z?)DQ_GXdOL{5Q4$Y%pgsk46g=w zI}1l=8&?{wm-J-mtUH-M!ZE9eeQauKpbF z_YAt1T0G+nx?e+N{th-Dg1$g@PGMR7d0CJ0z(9hNAx0~K41uZ2Nxtiks%_#c^>oA( z^HtBDOsCqa95_I8`|zWfddYJ)z1EkX1*yW1MhdEh*wjo87uYA_YIcx)@Gs0;4v!Tl!q zKA^IzRMiLlc(kkMYx4KmG0gQeT5dxWjF>a$8d&Ic1o(E2*~bK3&VPNm{s2eP4&w1I zASlPRANZbRO#9EdbUpJ(1x{g*VaY+jInnusKKwTFxumo*Sdut3UcuGg73tHgeo+NW zn@x=Sx4BXv*(RlR?j=vCL{)s@5j&afwJJ7A1l8YqzExWXFv{KP$NO?Dq)$Qyqfh7K zC|-_k3&Fknd&DYYeNNZC=8}IDaJ>K;w4pB_H|@xXAOHamJi73J9;WiH{nh|S<;K6K zg}?-Z0YS*ded7g-Fr%ubVBwz4m?S>&KuD%#V&%AMV*|VY*1@hdI0tR@!OsE44HJD6 z5mL6(h{asC#is=p_QxX+!tHBK?jIbD!n%~gyqIor4Ip&K4+BLeW4lPuy_+-^ucH2(T-@bs|B@v`|2l7RP{ zaOD5#TpSW3)rIj-PW&JR;ehqs$-Mgd7V)I4sGz7WNU#!G1N_66lj-lg-jg^{9X*)g zMJ5d9wdwMR1jWC#6&I&+%tea`7>ddXZCrcLc^uX0iv@|ZTvSm*SXIB%c2Wrd2P|>7 zxhUsu?!SUA=8oMDU0koISa)TsuJ3~k9)kqlwjt~(1e1ASSE&BT{*%y+56B@nm#a%h zsT-JqgxkL%GW9uZ?Ko_+dK&9_MH#OM>-LhESkMjkFZAP8R~3Ymm@CSyX?&xbnP)cL zau1Y2C6qs@NOy)xtd2D0eb}!*{YGKiVlC=4fO6gJ+(vk2Jm`1bWr$__$#WH2>E+DZ z`4;5oPs=|>r}7?9@`v@`^T0Jl>vWd1sCJMUf|}>Q#z$39=<$~>Y|6Te3m46d95X}P z=>t~H*jI@EGoZALY`cVlP2GK0e{*8}Q? zX9UUX_JqUU#!l;8uf!kGe_xRl@SV{%wxdbrA0C#dpN=Q($F|>4@J3)8@GYSTS$%$F0|~2X)L>0DaU_5(HBF6{=h!YD6ty+R1N3YU+!yCWpja26=EWR zn$&_8pQVLUJ4^feprai|zNUmWooNLISfu){0AwlY3K6%fsHYl3*aSSIbF;cgO(1Jd zTQm>(d+Xub<&tOQ%OP|1KgkiJ*6iab>di@axbn)s2=kU&sAes|MaGO+D?MDN- zeXu$}jGW(qZiub_4z9$)O3y0r0#_aA8u}BpL)r1w|!eP~F(`ohdX52xIzRvGV zvfNgI6dN>@zz$o*ms``(J&8Jkk21(9_$$&xv6A^Xi=0gsY^h#Dngtd|S9_eJY9}@q zlUV#n%Z@3h?ke>TkScOysr+778m+QrWm%c7&zD|0h~$DL9AHLRSo}1X?ATP4bh{?9 z%|ZG-<}K^afbf~6>3bOIf5qu7a}a7I!AI|dTsvKyO|D2C`i$M^*H z_Yap*R-b~}PsN_yw4+Hkj{p46d)8@{v1D%U(P?;fK>$)Wr5zNz+<64-YyA8%l(*UC&smLkY)qz2yh zr>CkBk#j9SFY;?Yf7r&bzw~HOblQ>AwAT@nx!+vDmk6y+u;ZY$Ye77Ya<6XZ0{|2_ zz5MB7N=>Bt&>wHZL>A9_K6rDKnGBJsox}{gk_CTA#{X*r*Dt=a_U@~G#vNRoIXX-g z!6Y63Lnd`Tc#a=0%$FI>o0zhUe8`ehxgq>E3r2b!YCbu2Dsosq601xBo) z0IW8x&iI-7mgJ%YI0gorpZ+%b{T(G=%zw@JgvO_3SB%D$Xm?ru36&m)UfG%^d}g&7BJ7dHI`o?&%}0T z>0kb<9M;4$z;oS^$GE7Dwy6=6!+2JSoBaFSCaIJds<0h-Ok(N^cD9lwJycR6pWdJbEXnY$ZI;J;QOjF zElRG&KjhFJK_boGCWGVrU?SIn0t%%1WOnPjnF%urFYCh(0l^bx$rVMuUr|bmSDLkp z{11j1-??SNYlQfEqfhCZ!(urek7_IzF%X#Ccu+EhZZSBgAm&C9j7`1z_{u^II9H9V*Oe!(q9IrQ#)?t0qG^wi}9DWm)rd>wFWJCV<}$x zi7@nmNc6jX*|@`S=4We{`1e^4Qyq|?hP#g{C#4S!RB)H#f*CmsD7q)k@V%bSAiF^S z-wu%DrN3=TNE=+x>iY*S8#@&Ak`u(Zf>v2eVjn{`22@DQ&*?vzrDuX{ur|YlILgWV z0u+`~@A^o0?O*5sHxanHaZ%300v8{_8A>-C+;e5TT1ls;v?VL=Jm_?$JqfC|qBT{l zY;*BOWj@_^)^0;A2*fxAV|lx@yKGTy=}5}OxBRNN(lLIL#%Mb6+wB|*&Z^*%_Uun7 zQ@F8bN@%kAU6xEaPv?3Xe%dOea21ez5^PIc#htIBenf83iKC0+r-C{cMf4z|Wc+jX zM@VXe1h_dl&1_=c0}H-qfz2l8un#0bj4>n*Iv z-z*9iWBGlWCQ+rj8e-mxVisR>UWVpmiFW^l;RB<@V#e~Wt#uGZc`T8;dig_0*Y|Rp z%}H$AKgVf8)$TB+m2pa+6^wqzuLQ=NHC!_R6mrpW4fJqAFpd*>3F2xhxIO`Ww~v^(Mj?N`DKSavh6!N zdX&vM6q~-BCay~r!}g2hF~pggww`&DA~|w$sg*}B$%I^Tfvetlcpry_$$Gb<&4}c9 z>BQcGuUs%zku{+B&v8?C>S(%|MXUMdxJ$A%#~i9%YnNp+nxr02NX?l=eGjW4b^gkR zq^lf@Z9q@2F-@^k^OfV(%~(n}DL^?ia2-wW3#vx#)_P=Jz;+<#%%axa@7W z2gEGjtDdqI{Bty9$Zl5A+Mk<2E}^TYI$yhuPP8Xly{!J8cq&HrOJ3^B>8;I5oq%f; z(2#K@rR~DVJe{w|yQ1FT)}CMJO>&m#w4_pCad>Dk+n!9tes%GgCCRL|l{IA{5PqlE z1(FKDFWm#pF*SM2vP13jHc(oJ7RzsYdtzzRcZ^=JVhSglBn75^CFi!=X4b1MCe_Ec zc#%Y4=xEi{1R=m(ed6zX!XP^RRZ?hk^HHU`Dycj_cXayvjpgJSO|T&y&K)X6aH!M> z=BfsXy2`$920uS%QV3?0G#MR<{%d`W z*s+y=jH{b25b|?D`d$oy6#Pc_I{cw3=Eyqnc)AFNzf92qLLhDjcnx!$P+Db)4|NN> zTtbvTy?Wr243LC`S|BN~hdYNyRL$B@e6Y(K>hRByZ7cl~)^Q8U28+jwFf=!@Or|YPfIeJnD44K*-iCUsVt83xQW=>+5IMFl=b`XH!)i zR&Wn7kY`cob8)UIC~m{T47N>+M^G>??h2lL`)7dhAlb%uiS$T}n@7v_X(63!LYi!Y z&fWx2;UD@-)086#Zbdql)Ut|#<+iX}HLudQ*Ugj>8(-A9tk=>FV=BMv5Bhq{_>43k z6cc)%P3?Q@!ac2ZeikEnjgS+v^GWmmSeTKnn~+NfA-eIJpKmOouqgx1#d#57gDB9$ z=KO^NH78}fcf^-hiRW7zf9AF)d#;Xv+o&WT2}0E_EuPFUTB&{!LeJW_xNN>tsXl~N z-;dGF0k+r@U6U*+NWzwFd6lyB^#Wm_iCAq8bNblAPA9&7ZaAmk`9H+HWl-Ev*X@ZD zLxK~eNzep$_u%fXjk`NEPH+$Ip>cP2cXxMp8fW^s_r5dly){+yaXxodOZ7SDfA(6x zy*8}w(|CZD9H3-Q*H-9n8+Qu6c!o)4PtI?c4qND z`JS4WJ=RWKq5*G_j+Yv*gz;sxTe-!r`HAX`4j>WY{UySdU}8Y8c)vJ{4IT7~5=G>e z;)*(Zb3nh^JLj61{W|PM2S|MVHaIjd#1O%czV+wAez^WYoC<05FOL(ML_fx%D1%?K zP6?IgE(xRJUEa(;VU)+k`;6y9O>F_5HNK;y=$#jVgv@&LKm~lYS z^FbH>+ZXqEdpwLl9zLOB|1PG`blr(>&b!CV4e-m<#Q$2a7@*5@&5D~Lw_cRWf=~9S}B4NXA(biZI{WfNW3GU0Ir>$ekGKcZrW>6eu~OX zz5rhz_3dUY$CNi;Fxg5Wm)AuD>v#qtG9#5Q=zgt<38oE%sd>K94#hUxGJB4EPc8ZO zbAC))ZUbKqnl^3FbYm>iR=lc>T9l67BwvLe9XHgSz zoNqy+DQi4c6l*Fv!1N2b?t^$tM)W^_5V*U*19?JLm%Bxy$rwW>TEo+I7lZHRX~3M$ zH8(su@1$N#Nw6w~ezJ1XAFR~{f__0*=qwjzdd)ZqHQ(8lEhGnz@@-smqp@Yx++z;H z5b6 zllU2?^o;BJm2$kDZJ6ke8GM_!?z`%l+l~HB&pthxTKD|1XveP9C+bdwS2W+*Q~kZu z)%?S$N#DH$OX*<>0O}l67z!sulr0yF*Z6zyd`# zW6vvfl{JP8oV))q*`TX$kjbmQ7_1resfX@zl$oWg<7?tBtL&9A;Kmc(n6s7{l~3$a z8`lnOaYF+J5YCvsy)#!AHU?UQK2lins93qmQiobDrpP!$xCbPQIBZn1=c;k?ltvJr!pn-RR%Hh zPZJB8*paV+d?pJ{@;dCHto+)t3OLDm#QW^QSDrxq>8w5PgIUv;c9>t;4eBAUzJkDv z-{sR`l*c^)KkXg;1{Oxf379S_AGsK#SZk+%N5C8Ef*)O!JxY8!CO-QiO7zVMyp4}1 zVMK%MR+e#?&G*2@e?vb=wqJ(nz+S3Z3&Ya!DHce7rm-U+7K^g9DS*cJZ}xw0XJ@dGZV{m)eC}+#ETKAzcEnGjL5I8aG+yX^u1c6V|N zZA8^#Wi zk0{-Sy{=_F5gW@uFd>(Bt-mUq90O^p-2WYqrTS+1I=> z7B7;xjd&BCu0d!CTo4SsZmAHs7jcT`g?xUU(i80pr+{6U=P;VytZWq4$(Q%A-I4}50WJDvOB+h<* z?MB`;-ScbeF>0JZSM%kR4=H}lHNeEc4`)_*mer&&i-2NFT#PSr>8L=_gkaw3kttQN zBU}V%3fkcODXGQ)OO;H!)Wh$b!TCx;8^O;}`@(!6D*%hJMUvN6I^o$4@7BCE{Lv*n z3()-#`QJSs4XDW1SPNC?($zdlczeVNc%g7+Ved{`+76c|;!<#DJ>Xy7;uCWyYn!2_$8}*;_kk){x~` z_N_w{mO-B>Q&KAuRbKFH;YRt&wj){t;oWNWS?wYXeB+Blq`8m7swm zqsYA`&VGBXN;v~F6kQG=!lRU*#~y=Nn7O9hEOh%CIBsUrs<6;OTF#ukkbk^uy~6wZ z3Fnpulau20PkX=nyoxSOTx$H7emBEmnQVgI$g%Os z58LawF6p5+%#h{%@;iXoY&QcJ{>3`*KIc%j6)k2gqA4iC#O(*h7qDs{tK6`B(uqCR zuCY(hbNT|&K>^VuF^@2JXRKsa%)$cy;#?k0#-Ngj?PjmFPJv8xopiCO_Xa2VUyp~$ z6FzQ2%JU%$i}BU(lX%kyc%P%s!$ttX4^v$X15?1Xl~~~3f3W}_@BpYj{l8m$aXukX zf#Y}=Ti;$c;{!U1_}L1{XkM>P=Nw*s+mg(xy~SRgxTT{79i9{;dE2)mi62$UGc+R{ zliJ)!(nuu5(?sEd9yD4sJn2z}(QM9Y%-k+>JJ*C1Y^u1ok%3AB;D0kDN;4Z~0?56F zQ=^gEWj4O( z-T5Uz(++3lilW5&cSDIO@XnM>XlAH>(V3_!WVwG21&b*O6}ppB^Q3S~e}!R{Btt4- zk_iEx!PFVYY%xJk#x>> zM~w^&sHxM?W-bTUSd{T9)hQXLOnMB`exLi6xT&XfK(~N1^2b@8-wJCS(m2$rE6}2b zV4m6Od<}L8On~?Xld7UV}Lkr!}hR_nc=ZB)A?6K}{o(PY%&?U4Y z-R6)^b#X;jUM{(*bm@S%p?Ko_917;>U4q_OND8Ke3@D4qgjfS!uNkEzLMIEN{jRlNzLQ&L$jc~_IaO-MLy_|1n*$C{|_tpe)&RwI7GDK zcKD>`b5POI%Vai{@YsOUIvMKByvM_rtjN4fXFZ#T0WPnvseji8zD+2|SKE)Khm$V& zvbDXN-KhRrgV(|LuyH>%F1C)GWjiex!=>0<7wc?`w!r%0KBG}<2&=?gdT2$n{JX3u zrMX#DlPBcEqvpp)P4hxH>w7X28r}X}ubsu8Gn9XmR9JcjfrxFouJguPM=B;_>s6*W zcDDk-`fCL?A|1f-&2jEWv8dO^(1#P-n3uEXPO*m;`j^jYpf#TB68MwIh1!IaEfS- zJNrriU+OAjnB?uI?LYD_W|VijFFU_YrIKt`Q64-7ilUOIfo^|AnO8SOpm*qJ#V-Em zo!NU$bp&w=bJhC@!*F{ll*L<1ZwrS_%0&wg8!{30YN9l!O)9@(^$bo4iGc{2|Di2< zWkw10^ai2rIDv4JY;mzs;-96HQM08G?J)mKX#%oqsG1~br6{0YL1mAMG`5B`wh04m zE#e<|?orFvN+q4BV6Wa8VLj|f7ld*ma%^d(_}-9ZIqoUpTAIAQd_z$X#lJ1UNu|4M z&6p!rg7jwx0k!N;s|C++M4aP_^ITHj@$*Jbx=!q8rk4df8$uEx!3uibTsvXu8cjho z!?Z?U?SJ?HbSpyY=T(>eiIn*tDx6F;uU=Xck1+FM713B&gh$oJH1q~3_frW%FNRNT z#WwaT#F!Ca5}BhnpS5T@pDWm699Ac^WKI^y4%wX6=c}MSxKG$(= zzPR7h1G(&Yp2#2MRzDo_WRhf?yB|WYlvxn;8@aB0GNqg_qRAy}_^;CAFaKW2K;Pxbh!+tmuw=i}|pa?P7xS&vI-Pw$?uEAR+BDp3Fr=o}~- z5{H9d>)x+wgbS%n7E_DT37Dr8k_W^rWdil}u;?XbM3hZBeW)=@+ffyht%J2h8&1fh68tsb@x*j{f z{P9$7dke5_+9jqf|Yza&iswR_c80L1qCq?`_eZ0o(WZp>(&)riNop5$ui95fr z28JNf*kC+ev=?)y!7@*5MC6W(>#-S%yJ~;*Zo3>30QehtaJa1?>+FV1I*=IxEAFOg z9&LKg<5bslB?gWEj!~(N5OM!R#9!hHxaDHB^b?qBRKYS&+;D3j^;JJajcqWs`r!BcAaUcf*Q>81h%=A-Q351_cQ@~*o{%a<8lI&I8qY?%Z`HCH%G3m z4Q9l){Fh%sLGPqVYj)HCtq!7{6SzvW7P&adPv}s;NM5km(hSHbh zTbPeOOr75&!MHn9neMvB?FHyE6XB&3#6fC{(Kl)At4>4#mK`im;TzRw1nunv#hagkEcf9d^lYlT$jI~Ket&KWOIc} zI7#6hVd{p?(Hek3?+5U(@0`f;Y(=~A5+1dT7zNLTIhr!9pTb8*eMl0pa2Dt;=ZAuMq8#4g8+(UDHca}^&>=Kfw+UAwSW zz)W1=Xo`IX-&^cpGS*e>dt8*8`*W7NqnTIP#x)*BI;cC3pQ#%&pL5lRLfn$HAs1^d<82{Z%AYnKJKvxZ}SOP7d3_*W(NX*TnEOH_#t zgeLaZOqF%Y6+txor=%mJ4x(fG1e|PS{}$D%u@%#B8?=)o zzTRQv3t+xwVCFmuqpTsFGSX84qp(!L6M7S2-)t+8mxttwzk-o0 zsPv{+cj$2>iK&fu!M@WmdWyd7&H(GXXIMl_`z>?Pf|L}kn{>YswE?~<+YgA=UT zWO)eQL=o*XpHn+L}}jz2M@qw6%0Emlnhqy6xi)lrds5I=)nR$?VzWaP+OJxh7C<#5~fMWNLHRQqcUnF5%e>0W(UQ zzD6lB^#wS70vnWj{?*^qFxjXF#7lg(@OPt;WU(#EXKD+aHzl(VvBW3#J^w60+gYwm{BeR=Fs$-79$W6|56xPL z>j?W#t3hDyl5ei)M-T5njBF#h0>i2{$Vp?rIZf)^U~6hXY3qrsMH!AXwA}`yR|u91 zUIAkm!GxCXT&bUBm)^&}dNM#6*+t1E30W%>KTni=7qW>$DZn3!opy1Ngv+JHDElgy z+T*Ey+o=$i?vD3o+txClmN7*n=vU$xe!nSxxW-L#G}JvZ*K%baPvvot(PXi}>R_*1 zu3x`rI5|jtp2Kf)%rX?YTv2wrui3Taqhb3@K`uc<*h#<>Hq2oauExB=BIM3m3Y6Kd z@Jv6}C5^;5`ugi*Ys+87^~D;h2_tWfUuNK{M8yQ}m}Wa_OJZMvE`&cs;F>v^*=wq~ zaPLu1eSpG+&AgS|W~E#nm0D8q!9HI^&nuNRD@0-OZ?nxUmv}!A!JE&Y5xebG0f*B= zZJX-=4u|!j@Y34&ej&9=Q~L03dA3lu1I?Dh&oEi^an*15-k{Y_xmL|GEydoa>#OM~ zDLVn&7Ri|(nMjmli;?goCJC%r8Jje4+r(yT8Q0Ze39-SU5B=zrCf$`cLko3l%??0L zM}QMA^y4s(w=m!6ilvp{-Uu&)AI>=>A11^AfHH+Tzv|3AX9BOOLjE-xBea-ZG1kKM$a4sDXMk?3k#XY#8GEbM#dCYMZdPX}{c1)Tn{uVOsz=ztG^bKO`-n68v5J!K|-{xwh7I|Cy(6aPrYvZ7-c27)P&2&$#oeA zOUCh2@7WCXmmc>g(ISe1q)w# z4F$WX#epXigmd#{SlCdSx+SFkV-)`xx?bcq&G_ z(YIdAW$Ws!fD0V6!VdE%N{iStinaNd#Tu-CmvAo@EmxZ#;R=hDOV5Y>kjxisdL_#e zQ`0q{)^%05kCVqJyEvmc|C~^j97TbJVMvyKDBd?dxtS&}>Vv#JI9F!L^0n_86ov}2 zsNa zYy$9s`0!92-eKB}(tt~AV^*cj^J=QD9}5PT+rx1x(vE4%sGh7G&LB082Hz!R#C}o7 zTLhoF`8S^qDKDJnjp6p5$ojeviryHd_vI%TYm?(oCMREwQtz_N$*;MgcMQk~$mksG z`@@-x{>rCvHPYMtHeMy#YO}nWvVk3eh&nxggIi2gN5f0h-rpT(nkiIcj4P9=T3oVf zhJrbm^@x>d%vN0~uS=Mn`^a#H!b*k`KLgvTeA#%7O)A66dU}U&==3aJm~A#-z_OB3 zr%!PcPJ>@;hso^H8c}4!?o0>psYp||5dK2JJdQY%qPA`HA}}X5n3n1T3onu{J3i*i z!K`GBblk15tV7gGnZ|25Rf=yfN{98QxqSo_SR8@5L?OCak#(K^d3u`+vMhw-46MPD zG#gl*A!wL?ewsOZMC=c75T>Zk&&6up6FN6N7nYlY*Eak{ z3UZ-8Y?wN`&AglkKx>RI5u##+*=dC$kmXsd?j-h4c z9TFm5#-Ei?c~mAQ8*t54(DSqB1@~<_S?635ctV{wnX~o2UGXq&m^dhg6)#dI#)#D+ z&=dAOs`tdkWNU$VAWv3*>!iZ2!u&GriTdJSDPLIq=FilHtdWopP#m`RKUB5QpPNyk zrBw+kGP9Mr!LJhN-|14uTQ)ESM8flGeI1*LgU!F)eCqc*28zjS5|&*OMf{-LV~8JB-2yg((UK%x?57L_Re92orK&df-SZoM94DemY&akX&TpXWc% zmxK@gZneBN8nsWw;8(5q@eRtNH`+nvv=8>{#@Mv_nHqv9=ius}6d!-|l7E->B!OL; zq2fLu1v#%)+tI1g{w8RcME~~6>(WxZ_*MS9C&gY6h9MWgpB0Vq*)K%Bw!R&*Exblt zKldQ7P>HihmhJeRaqM5~B#Z^}N-@tD58lm5J~sAX!KTc|&mkDS;WN5--aH=}u;}!I zzhGlSDM#2?XiA9T7Y1g}M`>wExQV|gwN6rDAMB^XA1=kPOKVIrvleJ0`%05tdBZ&Z zSYzMiaX&S#i1hspAR9E92SVaW^WMk9SEoblzX_o5NG&b2cXcP0s8{W-B&^<{j~Ptv z(`L7d(|>dpoMN!wV)}%FZn-|Vf8P}dLwZ`aC?cRzIZCwLEoX0weUg@!O`q*mg%BPD zRi@SHKt^+Umj7cNtzc)p@UPlE(wjZGQ=Yx&nI50Llc89Cr!(RDJagb3o=czJ5$9ul z9_htYnFZf*x=FjIN7XFI|EVNT#7t9H)){>?UrtHkRzkz?%+j*YTNC1=OmWhBSUbd4IMjO_KAEHrjx5#wn_Gq3P zHXK#fG1?)8k(S6USvKsJI5s={d<^o{IdPotB(YvlRRtI4{{*UA;b{Jgd55mU|6jA= z{$FzGdXo=~U#-~<+O8<}S$oGXmtfL5QlG3QKtYLq%;$S!iR_S-aSu7(uS337IV)pf zD>mKGK3Iv;4WTyYm-v53Y{Djn@uw$M8QtnE0 z1&p3Vx2-OF?d1J`|8F$Aj#pd}<9CE0v_ovbV@GDR7&Wr90da|K2mJM=y=oq(BmVBp zz6ib-5n8wkX)D+6E>i4N7QAVo3}-j6Xr56vII8zcC`SEc)MP8|!B%2ODhIC?$CG^x zz=Tx#oDmD*QE9hD6loMZR|cn7Q&LSRi9gg=?;BdwhKFlT|DW(SW1slcu`$Q(udY-T zs~ahZ-k;Bk{~f(%rgQdfywv_KLDH*kYBCQtwJ**dna|p)p$Jp8%B6aZ|DUvEz_OI= z5T^3qe;_lxpw}){4AVuh_Z}8boykK&ZuT6(AfsHjhURdD_Uj;JxGVfP@+wE>J0o=& zE(Ck>Y*`?m8+OUH#-SW>>;nkYdL&4A!o~C=A~EpXW4H5{k+YER_!Rv`&}j6`th0>p=oPz1(bVCX*+}Em9?4m-klY#*UzfeAeGtQSPaq{hEJP~3D(YIIVu-G9R0#ZI9&uv^L;Q8egKZ74{cae}JYP#;!QK}Vq$ zfSyMtWV&WkoW^|_lKUTy*C^hS+GM>|$U(G?F-c|!IAN$HXvz@Lb&K!AEnuqCIoyqk z!`h%&W&8~jP=iu#P2=o~NBSQkF}VQfRi1bSd_=E9l71qNbYhhy`_@l@vg3SFVBR%z zN<*;JIrkOhyO;7rEneXZ|E! zS;*xeSC%sdVkPk4(AJ~zxml);$8C!aAEQ+PTRtC{926oCjTZ;AXr!2Z(@eQWg1tEe zX#I!8i>}3xS%^20BKC;u?GAy`m6*4+)2H5H$Jp>rB>sHO${eoVfgFM$tig7Dx|?%w z*({O@!-kyu)DeI!2=utI`uLiM06V7gt^HxCq-mcNw1;NfF+m@&_QHg>b0^IC@=tn$ zesXS)uQ#La;z|pKZl^ig8{zFD1Rm5g}imrqdDI^EmW9JU=gWB?Q-f~eH~p$ zr}*F!)XjnU42X{sz4UaeAyjLn*O%JggHX&S zf8rM8DMMN}z#*uIH>rDTzH+uK0!6eZj52`3rsEbG5OF1ezb+>lLT; zO-(~}>7E$r$J4l7F%iB5eYQjW>0j`_QSy$Hkt?5t2E+O7>8d+rj76vwuxRo(@*HyN z#7J0&V!lB9|Ephsx2Grc{h3m=!y|zt z$$qEoy*IO^;_U11XKI}@omCA-XonbkX}!(}GiL$Z?}4`iP_o7|amOChC?>z$7;n~g zH~^7j98?e3;;wj$)q5LwmtS^cweBO;k^`K0q=E6w_-+{6u{@)*5Z}d>8e*T3sb+Ne zADy`#AYVUq@cEfi=#5bF!+AY`%&mDwTiG#QZtLh&LHkIV!%c?0<5$fDl$RydmLWd= z3)*61%@a3$y6%aaciw`;JP)w^-euvG0|!?R2k)qp4xq>1=NET~1Md0P??4~)cDJ;k z`V~HpejU_j^}B^C)7K)PH{=Y@Gp)Py{Ka>F0ad|c4&`)+U+2T*Z-t_a-nQrf^ndu7Z;4dSe zEy&eu$WqIQ$dbtc37}e%h-91}+GWHz-CRud*l!~g+*0(`(6^hpwe!EascFI?3e41Z zWM(izWy%-Yo`>^+YsDnrsFu83Xm z{*vn%-G2x=UcVPxtgH*qbo#5E z^P7q%pxBL&Wqz#-p6KUv6I@QthWq1n(9Zk#HcU%B zZ#Ot##!&KmcdUg8<$jgfkPshRKf#qw3IFggs#)_%hoe?&lFSLQk);D*se96%jm~IK zg?5y<;19v+N`G*qwG;S0b|jH1D9SlQ?*0w$&9!B5Sp~+VN`Hz>bYnbyz`x&9!sYhn zww_p3mtE)P)U)x-zXND#gG24(cA5m&cW-Id>_bUrlmDtEjOb!Q8qW7oDD%8e;*_w1%dZVcwS$x!0;*pRfCQ?CmIb^0c$DnSjmE=6kYzyoaC+<39>+Et}Kv!ELP8ZBER;|0AMu9O1$CbVNq)Yp}%5q2XsU7^>0g|$EA(bdi( zULMQ7UIf%{BV}Z0uU)d`Z-aUfTwRV$XIbalFJEz$QlIJGwAgMZ^t&K$v2%4h-Wzi? z-lxbwgrR{Aq=-g77wexLB%$L#!EL;?3O(M5@g%<)(p9E+-aOICjM39zjnzkbe$%bY zjhk>@dIz^C?NG|BWj$h6w|nHp>eEsKdI{MrVU(JODg27qhjG}4)68m!B5@1F{@yPhD z@Wm4%?#s+b?dv9IJ?KF$+5_4QiZe}krterEP&TxezT&h^Q_9$+XuNtPLloCO;j zzIeGq{n5H3sg9uK@Pr>`3%}QbK%>%&6E~WDf_2cjQvey#VCu&ZT5`U93?8hkZcVA! zaP}Rgyda-@$AY-h0(BhsI0~pZukrF~%#u4I5~VPKQODHvpiuBh3;xO7)S@%QNt;^) z$-|}6z>%Ou@pacB=o$i$n`}LtuF3)^mBXW!=-7R|qTQg#@CqwHPHS@Wr`M!hKytEQ z1HFAZBhNk`(`f&Vp(?xQ(c*Ihn80@s`=&ilA>9;im0 zvWT7RPh-)>NZiN$4Ei%aYT#mIq|dr0g{s;ng`QY~0Cx+dcpB`~?RTN7y8|;9+6O@6KtwIt_B3M-UUw^5( zw_q5uwx9I~Q!Oyc!R_|MRbd$L-V$*u=Ojz(UBwq~YB&G|?1QDYeaF((dAXn3GTyH| z7>V-3rVRI}EYV(4cbkqy<`&djt2AiDC79#4U)ejs2C7SvZB--`|Q z(;Ib#;rzP!x!iC{(sZW!R9$(eMJtA76mZ5~`S675kb~cQLQoVPn4L@+e@v%$kfBz+ z^%f)+*b?8uA53IX9gvBEo+YMarKrY>GWM~Xh{z~j=T-qUnuL#OMG~q8-$auF8^u{m z8-HGa(7W9;KlFK^&^Fz(5L0pVHtsa5v*bmb2qjWPatSNr2p&CCB$tn?IsiR93cwLW z((*X6+R8UJ+RQaBlYl1;i925FTAnBv^1d)oMeP_5Pbkn27E)G?AS%y#hd{m3urN{| zQ!>5~a6e(dk&WUKM$R$UH^VIje$32vHt2uVZcm4uPty|rOvMn8+MgP`;8^%}m~&&F zrcJ=`f&g(M`w0`<+X{@%b-RNI3odeVoXu8AZOLJS-t`AHY zmUdNMyj?DNSzdV-CiBKO&EQA0CG1r3cEGPojBpz8J+(tF*Vh7gYEIZs+cpEly#A`) zqfTEj2_%p7r$>1(9q8OrdY!y>90&tK2{VVERf%^RWp`TL5P8&g8=8Jh^bpkdZ!5Pb z9*kA&Z|}ZuUnRXq4!q_6K2caOE8TkOr%G!uTAEvzsw#@bG=`bnwa6%%g^l+T4G!iL zt`gYTr+0kkH8+``otzYJl9A=>OU=Yuy5Jifo)TV#(?$M5!7ZNXYeyQMHc&`VLT6-e z$Xn7Pd0R_4#2(G)K)cd+JmHh3Gn!lPgIeXq@7?BUruS~_G3{D?RNqh9Q()#F+&@`( z>Offpywd?I3YR})l(3!W2>dZ?4Sq^x*u9^cX$f#{BdQ(ih<~n-ig+niDuWk&(Iy?c zvW=H5IF#ORY;?}eh{kL{iGj`jC!r$GXsD3QFXaI<&VM}H^ySFM*8+-`d{CREH?V%) zk{$1wGPmXKWAT37%XF;uc=*w2PTbh8J=?2!zWbIIjE&jHlGgr!IDgOAeeAhk`3inA zKMXbe~(eA+c;h6=;k)A$~{2RU>K- z&Rlsx#M!6`slQuMU#{HcShyOAmrWES4Jyg)3G4gOvXEGi8n~Tw-RYWy_PO=uw(J=$ z$@bLv><&$V-^1dn6ZL!ry6HW>Lil~o21zU{!_)Ylv6tC4dgdQDfLH1jX`aN}?TaF- z?`Ud7KHNOXyWk0*l=@TDc^hrR@iZDz(&jUpz6+t%igDPUF0c24lr;82PKlim0=OgJI4TVq{Kpmzf``4 zgGR=N?n*5?V(Or#B=k1H@zQpC2d09JO&zKLXe#iBEXyMgSX$Fyx^^?Z=@HHIGlHY{Q;jS{)2R@Bo>V(%b>b1ml!gOry1}*XzP2Yjz&Dy{f zPFuq68?F6cp9?Xs{mH)gts!c@fz)+xo~Ej_5nBS)!2ye8qGdt3`taulI-@gxMp4p; zuWzu*b-E+V^F5?VC8_Ph%b`|qOiOIpxtSBII%okajV~4F*_2R7p=D!JMgY8wG&xb8 z35O2mQ*b=pa8)I*k;6B7??9`rKcQh`3y%IWC>jES=@`BVUw~O3YK6YaUYfe#HeZ{S zd+=_|Ped==_iQ@tfs>BoPJgq`I=Iup+X?GL5J2iqY<@w*tXeX4GGt4iHC z*0JvpAE~ggpi)lwGuyn~;~zG6--3!a!jhKzs-sLInuoVbovr{qi2~Y=r$a=r8*w4QldQF^}EtZ|CSaO>I^Qo z;6^>v*t36154NP-a7Qj-KhHrg2lh3b6W+fHx7+ek^Sys4vSzQOxFVfL1sJf;ap@bu z4K_I|h?^csfq&LhP!R5BR9gGKk))sgi~(!0Ua5Z=j2j|eXSS&{B}iklGMc%^3UP@9 zoKnWacQYCaY9X^_nLICC=zF6683kTdBHP(7;M5oR4T@;Ho)xl(V%y{Bx&E{#S!fR$ ze+flD7X9-Z=6-S=+we%oRhHp}ptwk@eD_*GSkRPBN8I|uV7>%e1ST3p_Q{{=X<&A$46|y@bWm-hf?vf>9VTG=mNyUc7t#*$u_=e;8Unq9UqqRRdzNw6e z$)cpB=%j%R5O8IBhaN=ZbnoeIHNX@E7Wyb1XeXLUwRe8* zbVp$x$-9%~jhD;1LCqG|x(-s{fA{oBq3)n6<+%C6XU8MBqvaAIc4d)y<~bZG`0{$e zBPjMxbS~S+@AeJ5^K+Boqc(Bbzds9!$o!^|*r6hV4!020HPg?-dK95*Jvb3%RLJ zl4^c@MXGkHF8~*1F)Ue{`koPR4}Q(vzn+>fDlBb_C^?w;@hy^JF&_MYw9a(3tP$ud z1WNVWX_|{_K`8{gFXhwdIQ*2-vMBtW$|D9NIin}|HC!a81Y~wA`2{cAdyS}61~!LN znaw+XUNW0s=bWM6V!c&leFG+F+*2b#m%r5EC&OeGZAH~r=x)+ci%O14fnGr2yPYF} z9XS!?W`%ETM{l|=cU_Mtws&8HL%=sejaN*6i5H58z8_-(r433V(2Ecp5FLPgFX3N| zMjR4WN zVd`_b9j^?lSY~2MopbLYMTSiL5J0!TB>5Ozf$;mJpEyxVL0CyAxr_+$$zyubYqxS* z+%Ul>_>n7WTm%O|Av5{_qe#2}(n9i_c7 z&#`TevCOgQXLq!=I8X^W30(kX_gfzU+XbNXt^TtBrDZlCErQ(xtaSSzmkX^S`HB0D!?T4N$h0uP+dBMmz zC4wNQ`mFXZA)-Ra9jJrxfNyrVpCUIrRF#7Z5ghX2@?T=3@8!>0Nt5Jr;+B6CHhT=^ zLl`?*PA|Eapr`yuxf3UrrKED?5?YDQ9iDZ`dLXeLizLF}{?kxbuc=o;bE)Oa&R585!EM4qHH04ww?sbu&JE!a+MTDNP zl|ZN3Pa&U%#P@nZKp$HI2!CVH{cd~C<~c_KYK#N`PvxU(ygEk~;%B;DU{!1ukbxWP zdf#)Y@(HP5^R94K?+qP3g+^pMB-;I6NVV3fve_D-RnZYxW|=!XJF&I;+aKIZXc1kv zs6I!N3w#wP6KX=8ND7$CiB2CuP2jg=k#$P9CDp`+{j^&h5>OQD-p9z5lRtHla`K-8 zDz4#_tnO;0)+ST16rB0gOPGrB@z_+XKfRrM?>SFBI|f?LCn_DYt6`ufakJ)o`8=KX zn4u`R#Eksa^PP)WZXLaqhgy?iXCH+hbsp5$_64j2npxBHvaqsr1915 zS{hTUDu4WSokHw#=TuWt5|Ww8`>#3k$J`wj!Ew3K+1lsmDqR{|S%OQGR0{(6!6f*F z;bHrEb;6d@jMv!rK}^77G&Fu5_hBiMkjV2bBdU%5dNlKur^b}ua%ax!rTdxF_Lj>P zS-6^gXnn0?>!3nVAX%%l6ql+{Gx|Rcif?Vo}s# z-FM|@{`NE4WdbE8;3q_j!u#yYE%YImW9B}T-=Jt5C`pnw5l_!_1^Gv5M?eBEAQ3OG zK$I7jVO0J4C59y7G`j-JxGOGbcV^AW#s7|w zg7Mpe&PYUxNF{bSfO?^FE0vPtxHs}xYRSniBhk-V`)!E(@Mq#5vZycb!y7x3u1bqy zrUUJH3%&U~`Csc40;AV%sR%Gu7Hgf6GumE5;J*s}KA|(*a~|OYweC_XbGjUmVR5mr z7IM(MP!Yd`gk62!4HG}y6k&JBi~m_@(H1UK#l~j4-aj+MYvjQ_c%o|v8V0WdW zXKXAy$Fc$F6ULQw3+vJl>63?1Pwpox`Xx#8rAWKJRY8$%sNCm|UR}g|rj07ZDHfdR zW}@dFW@a`2kx8i8P%?mo8hDouC^>jR6krt7d-kwtF-1OF_tbEfW7V>ilzvQ2b0D|` zry3G4IAzH;&TtR6OmM}|*Np$W+vzMJ_h~=jY`>l*nfUjtaUC%8c#!{97Ji&(CqZ~? z@pA=SK|B5dSYV|*>8Aq*C?%QGfn}-4)Zr>bZf`52V!DcXfSMJ=f|Z#unqt}t|3K9G z#6{m3Cv6 zno(uZU|)+pK3+ovsH8bqRKcvWgPcz5pYo?`rAsny>y(DktSeOn`?Ovi7@XXc(x>g$ zfs`%;*(A&`3F{wJgt=i&nZLwPuEgeIHN}9RxUQWImOWYyspnDJ>e8Ti+{e+J39I(F zk`<38&ZhV}h?4?;zl{O%=Y+*Lv8Co8Z){x6lWFQ!gmn6psw%sS?dL@f107eYY-`XK zpH|%P+Mvv2w;)B;HP zR2ny=<&X~GCF_$(9`9TRdD!tztg!9;Q3?pOYtk)Ym-?=AZ8P2QqoyG=WsULAP7#zx z#a5XNvgIt|Pk^OI^?W;%2k}uaH%p%N{5-Y@e@aKChGKk5n98PZ+p>`n4*We}?Jx&}-_9lw!32uC8ru1cQn%Os(U1RV}a-iPD`l9}hj7SkNWJAOvgAQ3D zvTR|S{NYbbHq&ZrF9Q1~26>XhBGCcLL1^?r+3T|JLX~(+NXM(_w?=Nb^vXOO!G-k& zk{?Ro15kpk?x!6hK*d5@9pwr9tYEJt`wAIH6(ymwF`U9vA>Twgk? zh}m`ZLh~BsoY@B1Vy*(#YGB7_43TlLT1*oNO9l716I#smkT68*ZDEPOUT%oAK`lx!x6+hxLCq$ZyJ@S=(>GDD`lLE|4LdWn0F&En_C(o}` z@TlqXRIU5LCVhJqiz%|~StVt>@d(yO{l~>^mlE4aFxRza0T-;#2g0m|um7rD-%9RV*;SgU$z|#%EaiBXa=^>e^`_QU@?ajm0+mlm*=w1N3|hB= zBDk)CiZb$-d6{Z^>25V~6tL%bDSh0@XlKvw@L#Ljyg!MqQ32EJ#Kf>XoZS?2os^^|vxg3WxKx03M{6=_pskAdV7b+ud-UA{_jOM( zXzSZ9V;7^HpgYnW;f>ysbt@9RmwfZoRBv;IcvHiceDpQNU(LcAoyhtEBIt!p+!mD-KmSfO_OUo9 zsWnZ?m7#dwf>;tf7kxfE(^J`|{2=M-ZB$N!ceQs#RTKLwcX$7i1}3OrhFZ0x;Pk>#R`*5cZUE^SXIxMPyMizLs$#~eOBdqBJJ&JZft{f;1rxZx)aJMXiW*| z3;*9BWK|A&M3G6p*86%Ts+1G8uA<{iOyzmg{k?l1Itx@2Xq~|qc!+niJ}zJzz z4VI*_$vQsBPGKUAfRWMRma3E59BhVpt3)sI(|Ov$FjzrHmdJ2rHwlyPB z&p&gK>5i|uKKzECpLOLulmHBLcC`!-%S1Q zSJ>R^^NwzdnK!vW*v$r>GNb<2;%Fcn=Fi)>whL!uhN|5qa&z1xK=MlT2h|gs+V!;I zgl!bLQhYfjQUB5DjO<{(MnHyA4lImEu%Yz@0Tmy?fFdsb!9&I@mJY{u@yTzjrfAvv zDjQhtu1I81JEMea7dnSHC0{cHZC}p&ku4wnEJqAhzL%%#-(POx}AQb>8e@#UUR#sbR~uA6i=E7KFgZDVQ?ssm#uVCiPz0 zlkE}9{aN;uj{UAv*lH)54vhOF`Hk;g3=z?TP!&aaT{@l@8IB6l%n$e_!fCj)sRKiI z8lZ6xI};D)d$;GklfC^M9rG+>bo^b{*5x#g`yEQYu_7wfm6eF8w3H%GRsy(aqDM__HF&z;S%I_ zdon`h+EXllPJAG}+2(&bD&Yftc92hfm-US7mJet?z&*Odp7Febi6SH{?vC_ZZmEs*ep0?3ek5z!7%D_l*8a6P9c;{B8l6kwlj`xAnVOUl_SKcIi zAO_nIAYg%=sZiRpuYSw#;IhZjoXE!PmiZdF$tV7N(r{b#`t?QaeeU)I>{(| z;;`-c^Kg@;iKzq+U^6;b>K=4Q(>_sUt0 zxc6XtjXx^+Wb->1U#FOB?JatdmnU|Gc_|tR<2mvz>^N1; z{QfdLRT+l1xcw%k2aFd+%ix9QTAcqn;%U${XMiR?A}%!}aBg2lEVqy#XoJ-*(T_Y> zoTdvXT_C5R$l*ct>j-VQ9B@XXa{IvN_=t<+X6~?;+*wjT!--=3ysET1qLcuX748xXP0*i&L*cWNGAa+`TuUmWh zwV>`EB${;06Fiu)#J{)W%rl;x`(do)tK+UlXJ4g}I=e65!0F3{23SIDv{iWU(i~y) zXj3$Kh06Z&w#KP;Qpw{7yooy+V@Wb{k&K*`%?Ul#2{(>lgO!D)I}RSs*hc~o&n)Kn zd!=8jWR#m5(>y8_3y&Ns9#zSGC*%YRZTvVzX39u0+K;DP-igEVCFpza1R?;mZ$wSb zC{u0V-C>g){MYXj6-~1Ulx#YjQ~H`D;`d5(3y2TNFmZG(46ulY-OYnzpo*^3W~#=JUIg+0N)Ua&=*ITT8`K z4|sa1w6_9i2<@?iT6nnw#soAH_BZD#olaM&|Y-<$9}^%PVc9toH$-KWv04z zk825^*hR_oOgoB-f{&|aY2xnzQ=Y8VQoL6cT09e+7E-&W88JJhbl%6j5cNKt2prtB zYY!l;Hb{0YQGA@qmBiQXdAkQ>IizRpt!*>X^7V3q!0-iR_Au-|(SQKy`!{Rep9n8t zQ3s<&;;~M0O2MhU&maIYyY>xyE=VT&HK7)Bi)WcdHS3mhmCU|v(<3gAr_XPvH!wFz zfgcY=KBT`AYMGPh?@p^O@c?B`6ev4rykwRWKC2fb2)%QqioS3CfsAj*k8I#4}_z09a?5|3T1=s7X#<)LAhLjQB@k)c2O+7OQ3 zxf#C~7&!=hLT%`eRJJ+lt~z%em>>x}KgF+(1Rhh#xNZ!z9{()g1ye2quEq8xakq^%v0N;z0JfaGBHY@^`d+20as^vJ7`^_2YAK{ zu#Z)FP*Ku46Q4~Rcf6{bS z8LB)I3nw8@rm)ufBzG zF{qanCs7a;iAuCa>fO)F{F8> zX1&CGMz@`IfjQ-?cj_KkOqmQ-nynW1%^Pret}tI5-z;dg_D`ktQf~ z9GGF~7X5LFmf+Q>bq_N<+rSdQu|Ko~qDgf7x1;4*6o9{}Ep4({ayI#Lc*UxMy|)MH z7lW7=t+AX}M<<#VzM+Xzj2y}A>xoVsHInSz%trj4>noduyK!i6>+J4t7ik7-`jF}! zy?P*E-cSEs7**AIzij2$MSv6TES=fnHJZ*x8>Op*tofQUxT#|-Zj=A(*MZEN>xS^z z$!S&d8LGrD5sEfrb*?h1X?2>C-wXJxO#JZ$ggvo-Zk(H;{hIqzs1xn@)lZJ2oBZVk zZQ}`vxer*EdqazLn>&3!SFrX=t#uy;5lzq(JS7_IwXug@&s7%lQk35OvctrvRnSLJ zl}ITWQz=v@6tG7jSR`7!;-npT8pDSxX(=B@t|oHm`&E_LPI(^`9%qyJHbZmX+EeEp zQm`l3Z*NYG(q%S;tYPO_iW=6Ria74%^Q73YwT0h%tgv$XsQDJ90J-6$ks!{a458X| z05rfX>+HU{NKy~I9p3f3qO1Vs#&R_3(Rd@pf4BI+)qUMh#Ixu%^x`Ywe=#wN>5!(c zil~HwBVPM7cf4rV`p7r`U{BM>Kc|F+_?wa_qpdv5++1J|h8Y_oL3g(|xgzTJ*fJdp z;xnvGpwO}Aia4-3Htb9ip8^?a`waqLvj=2#r$fUpHL(!?(*@plLfPUQ8;l3#=}Mb3 zw#S$YdN0>+iGanz7^n_smu5cSHQI!4KD1nA^#ADm zjaii5$7Uw*+>D0#u7LVV>lIl2LY%nbdLU3@95j}L0b~X8vZi0N03Av zk;^{3iUG^{?}RwcPOF)7tBNpiYnv(uOemSa-xEl9*NLjA46cR7k}%A)w1TZI2yydE z`Hr2TDN1j_fs74h4ZFyV0-aS|4} zndgKV8VcKel$An=FJbw;OS-V)-02=BFxJbeT}V zgr}jOugcp(Lz1`Qza}n5Y>U(Sn*e>L<@k&g09nK^_}ljx0CN5V>Ab;Fq_Ik>O*MgW zI7|L$XIr_Hp3-RqO18`{Nq=;N)`2HAfQ?#2NBoSEssl5_76t5Fi;}?%uUyr4ctdbkrUqTyG zgi1Z`+|)X`!8BNj7X)4`t#{2&#lmC%PEC0f%tE&SXsl`6uF`>;(xXr|&jt*-I% zjj=#AvOR)w)oryblAc1_@o~9P_G*;V;zFa0%7j{EBz?cDqh48Qb&Ku@3ZQC4)GpDpC@%AXZg*o&V> zl=y2T3R&J$H8MF-}!H(4M1j_gT6nxapTtMxb3 zB~e0UBZrw|5!td1`v{fK_74_47;EFNXh7pLnfY{(zVTPe*MAi2<1w;l;td-Gx=KI4 z@V;3iLk~P4vKjT5O37mV(HL=+eYP;28rm=Q&NSuQrRq4!nfTX>wx@SjVEm>Q^2J+j zHBh-kbr0I%_VZU699-kfE*4H2OFH?HrEgu&)Y51;RObb}4<|Ycyu~h@n?BdKk^J=3 z|9GMut=1;3J89PIG&uZNcXq(3(b2j?C;$F0qInls$goMoWunWEj|yFve0EJ+Jf~Rm znU9q&SdX6>@&PE5Roebdv$Z6=+)_;BR3V&qpAlI1{}gZ75ZwQFk>uNr+`sQ8(peBRqkk8* zgBbrS4I%#HD%rRGM~cHWHkA!-L-d%mf{#Ua!1TK~9{=+Rvwu7Awp$^WmCf1km>Bk#Zaef#f>GXM7aU+DQ8 f4F2B$cNR|_m?~zBv#WbSL^xEG)D