From 4396c3a0218f29b267774255e71887f986860f04 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:00:27 +0200 Subject: [PATCH 01/31] Update create-storage-account.sh --- components/azure-storage/create-storage-account.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/azure-storage/create-storage-account.sh b/components/azure-storage/create-storage-account.sh index 8c3b108d..2ce8da81 100755 --- a/components/azure-storage/create-storage-account.sh +++ b/components/azure-storage/create-storage-account.sh @@ -7,5 +7,5 @@ echo 'creating storage account' echo ". name: $AZURE_STORAGE_ACCOUNT" az storage account create -n $AZURE_STORAGE_ACCOUNT -g $RESOURCE_GROUP \ - --kind StorageV2 --sku Standard_LRS \ + --kind StorageV2 --sku Standard_LRS --allow-blob-public-access false \ -o tsv >> log.txt From 0fd73197158cd6e1452932701b248a7b14883789 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:00:43 +0200 Subject: [PATCH 02/31] Update create-solution.sh --- .../create-solution.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index 3486e48b..1eaedf12 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -21,7 +21,7 @@ usage() { echo " M=METRICS reporting" echo " V=VERIFY deployment" echo "-t: test 1,5,10 thousands msgs/sec. Default=$TESTTYPE" - echo "-p: platform: aks or hdinsight. Default=$FLINK_PLATFORM" + echo "-p: platform: 'aks', 'hdinsight-aks' or 'hdinsight'. Default=$FLINK_PLATFORM" echo "-a: type of job: 'simple-relay' or 'complex-processing'. Default=$FLINK_JOBTYPE" echo "-l: where to create the resources. Default=$LOCATION" exit 1; @@ -68,6 +68,8 @@ if [ "$TESTTYPE" == "10" ]; then # settings for AKS (-p aks) export AKS_NODES=4 export AKS_VM_SIZE=Standard_D4s_v3 + # settings for HDInsight AKS (-p hdinsight-aks) + export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 # settings for HDInsight YARN (-p hdinsight) export HDINSIGHT_HADOOP_WORKERS=3 export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 @@ -82,6 +84,8 @@ if [ "$TESTTYPE" == "5" ]; then # settings for AKS (-p aks) export AKS_NODES=5 export AKS_VM_SIZE=Standard_D2s_v3 + # settings for HDInsight AKS (-p hdinsight-aks) + export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 # settings for HDInsight YARN (-p hdinsight) export HDINSIGHT_HADOOP_WORKERS=3 export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 @@ -96,6 +100,8 @@ if [ "$TESTTYPE" == "1" ]; then # settings for AKS (-p aks) export AKS_NODES=3 export AKS_VM_SIZE=Standard_D2s_v3 + # settings for HDInsight AKS (-p hdinsight-aks) + export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 # settings for HDInsight YARN (-p hdinsight) export HDINSIGHT_HADOOP_WORKERS=3 export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 @@ -134,10 +140,12 @@ echo ". Region => $LOCATION" echo ". EventHubs => TU: $EVENTHUB_CAPACITY, Partitions: $EVENTHUB_PARTITIONS" if [ "$FLINK_PLATFORM" == "hdinsight" ]; then echo ". HDInsight YARN => VM: $HDINSIGHT_HADOOP_WORKER_SIZE, Workers: $HDINSIGHT_HADOOP_WORKERS" +elif [ "$FLINK_PLATFORM" == "hdinsight-aks" ]; then + echo ". HDInsight on AKS => VM: $HDINSIGHT_AKS_WORKER_SIZE" else echo ". AKS => VM: $AKS_VM_SIZE, Workers: $AKS_NODES" fi -echo ". Flink => AKS nodes: $AKS_NODES x $AKS_VM_SIZE, Parallelism: $FLINK_PARALLELISM" +echo ". Flink => Parallelism: $FLINK_PARALLELISM" echo ". Simulators => $SIMULATOR_INSTANCES" if [[ -n ${AD_SP_APP_ID:-} && -n ${AD_SP_SECRET:-} ]]; then echo ". Service Principal => $AD_SP_APP_ID" @@ -180,6 +188,7 @@ echo echo "***** [P] Setting up PROCESSING" export APPINSIGHTS_NAME=$PREFIX"appmon" + export HDINSIGHT_AKS_NAME=$PREFIX"hdi" # Creating multiple HDInsight clusters in the same Virtual Network requires each cluster to have unique first six characters. export HDINSIGHT_YARN_NAME="yarn"$PREFIX"hdi" export HDINSIGHT_PASSWORD="Strong_Passw0rd!" From a71f47e2776b18672478038f3494d52277d55bad Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:00:47 +0200 Subject: [PATCH 03/31] Create OneClickF.json --- .../apache-flink/hdinsight-aks/OneClickF.json | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 components/apache-flink/hdinsight-aks/OneClickF.json diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json new file mode 100644 index 00000000..1a1a3be3 --- /dev/null +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -0,0 +1,187 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterpoolName": { + "type": "String", + "metadata": { + "description": "The cluster pool name" + } + }, + "resourcePrefix": { + "type": "String", + "metadata": { + "description": "Provide a prefix for your resource, your resources will be named as [prefix + random string]." + } + }, + "clusterVMSize": { + "defaultValue": "Standard_D8ds_v5", + "type": "String", + "metadata": { + "description": "Provide a the VM Size for the cluster. Example - Standard_D8ds_v5]." + } + }, + "userObjectId": { + "type": "String", + "metadata": { + "description": "The user alias object ID from Azure Active Directory" + } + } + }, + "variables": { + "clusterName": "[concat(parameters('clusterpoolName'), '/', parameters('resourcePrefix'), 'flinkcluster')]", + "msiName": "[concat(parameters('resourcePrefix'), 'MSI')]", + "roleAssignedGuid": "[guid(variables('msiName'), resourceGroup().id)]", + "storageName": "[concat(parameters('resourcePrefix'), 'store')]" + }, + "resources": [ + { + "type": "microsoft.hdinsight/clusterpools", + "apiVersion": "2021-09-15-preview", + "name": "[parameters('clusterpoolName')]", + "location": "[resourceGroup().location]" + }, + { + "type": "Microsoft.ManagedIdentity/userAssignedIdentities", + "apiVersion": "2018-11-30", + "name": "[variables('msiName')]", + "location": "[resourceGroup().location]", + "properties": {} + }, + { + "type": "Microsoft.Storage/storageAccounts", + "apiVersion": "2019-04-01", + "name": "[variables('storageName')]", + "location": "[resourceGroup().location]", + "sku": { + "name": "Standard_RAGRS", + "tier": "Standard" + }, + "kind": "StorageV2", + "properties": { + "minimumTlsVersion": "TLS1_2", + "allowBlobPublicAccess": true, + "allowSharedKeyAccess": true, + "isHnsEnabled": true, + "networkAcls": { + "bypass": "AzureServices", + "virtualNetworkRules": [], + "ipRules": [], + "defaultAction": "Allow" + } + } + }, + { + "type": "Microsoft.Storage/storageAccounts/blobServices/containers", + "apiVersion": "2019-06-01", + "name": "[concat(variables('storageName'), '/default/', 'container1')]", + "dependsOn": [ + "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]" + ], + "properties": { + "publicAccess": "None" + } + }, + { + "type": "Microsoft.Authorization/roleAssignments", + "apiVersion": "2020-10-01-preview", + "name": "[variables('roleAssignedGuid')]", + "dependsOn": [ + "[resourceId('microsoft.hdinsight/clusterpools',parameters('clusterpoolName'))]", + "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))]", + "[variables('msiName')]" + ], + "properties": { + "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'f1a07417-d97a-45cb-824c-7a7467783830')]", + "principalId": "[reference(resourceId('microsoft.hdinsight/clusterpools', parameters('clusterpoolName')), '2021-09-15-preview').aksClusterProfile.aksClusterAgentPoolIdentityProfile.msiObjectId]" + }, + "scope": "[concat('Microsoft.ManagedIdentity/userAssignedIdentities', '/', variables('msiName'))]" + }, + { + "type": "Microsoft.Authorization/roleAssignments", + "apiVersion": "2018-09-01-preview", + "name": "[guid(variables('storageName'), resourceGroup().id)]", + "dependsOn": [ + "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]", + "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))]", + "[resourceId('microsoft.hdinsight/clusterpools', parameters('clusterpoolName'))]", + "[variables('storageName')]" + ], + "properties": { + "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b7e6dc6d-f1e8-4753-8033-0f276bb0955b')]", + "principalId": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName')), '2018-11-30').principalId]" + }, + "scope": "[concat('Microsoft.Storage/storageAccounts', '/', variables('storageName'))]" + }, + { + "type": "microsoft.hdinsight/clusterpools/clusters", + "apiVersion": "2021-09-15-preview", + "name": "[variables('clusterName')]", + "location": "[resourceGroup().location]", + "dependsOn": [ + "[resourceId('microsoft.hdinsight/clusterpools', parameters('clusterpoolName'))]", + "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]", + "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))]" + ], + "properties": { + "clusterType": "Flink", + "computeProfile": { + "nodes": [ + { + "type": "Head", + "vmSize": "[parameters('clusterVMSize')]", + "count": 2 + }, + { + "type": "Worker", + "vmSize": "[parameters('clusterVMSize')]", + "count": 3 + } + ] + }, + "clusterProfile": { + "clusterVersion": "1.0.4", + "ossVersion": "1.16.0", + "components": [ + { + "name": "Flink", + "version": "1.16.0" + }, + { + "name": "Hive Metastore", + "version": "3.1.2" + } + ], + "identityProfile": { + "msiResourceId": "[string(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName')))]", + "msiClientId": "[string(reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))).clientId)]", + "msiObjectId": "[string(reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))).principalId)]" + }, + "authorizationProfile": { + "userIds": [ + "[parameters('userObjectId')]" + ] + }, + "flinkProfile": { + "numReplicas": 2, + "jobManager": { + "cpu": 1, + "memory": 2000 + }, + "taskManager": { + "cpu": 2, + "memory": 2000 + }, + "historyServer": { + "cpu": 1, + "memory": 2000 + }, + "storage": { + "storageUri": "[concat('abfs://container1', '@', variables('storageName'), '.dfs.core.windows.net')]" + } + } + } + } + } + ] +} From bda489d7d3a89a626712bfd9cf5b7766c40168fe Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:50:40 +0200 Subject: [PATCH 04/31] . --- components/apache-flink/hdinsight-aks/run-flink.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 components/apache-flink/hdinsight-aks/run-flink.sh diff --git a/components/apache-flink/hdinsight-aks/run-flink.sh b/components/apache-flink/hdinsight-aks/run-flink.sh new file mode 100644 index 00000000..e6977f05 --- /dev/null +++ b/components/apache-flink/hdinsight-aks/run-flink.sh @@ -0,0 +1,6 @@ +source ../components/azure-monitor/create-log-analytics.sh +source ../components/azure-hdinsight/create-hdinsight-aks-flink.sh + +pushd ../components/apache-flink > /dev/null + source hdinsight-aks/run-flink-job.sh +popd > /dev/null From 529b3f0f98e7a9257b6f1233901669ebbc09c74f Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:50:47 +0200 Subject: [PATCH 05/31] , --- .../apache-flink/flink-kafka-consumer/pom.xml | 40 ++++++++++++------- .../flink/ComplexEventProcessingJob.java | 5 +-- .../samples/flink/StreamingJobCommon.java | 11 +++-- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/components/apache-flink/flink-kafka-consumer/pom.xml b/components/apache-flink/flink-kafka-consumer/pom.xml index abb09ebb..6bd8759a 100644 --- a/components/apache-flink/flink-kafka-consumer/pom.xml +++ b/components/apache-flink/flink-kafka-consumer/pom.xml @@ -9,9 +9,10 @@ UTF-8 - 1.9.1 + 1.16.2 1.8 - 2.11 + 2.12 + 0.12 4.13.1 ${java.version} ${java.version} @@ -35,7 +36,7 @@ org.apache.flink - flink-streaming-java_${scala.binary.version} + flink-streaming-java ${flink.version} provided @@ -44,7 +45,7 @@ org.apache.flink - flink-connector-kafka-0.11_${scala.binary.version} + flink-connector-kafka ${flink.version} @@ -52,15 +53,8 @@ org.slf4j - slf4j-log4j12 - 1.7.7 - runtime - - - log4j - log4j - 1.2.17 - runtime + slf4j-api + 1.7.32 @@ -70,16 +64,32 @@ test + + + org.apache.flink + flink-clients + ${flink.version} + test + + + + org.apache.flink + flink-test-utils-junit + ${flink.version} + test + + + org.apache.flink - flink-runtime_${scala.binary.version} + flink-runtime ${flink.version} test tests org.apache.flink - flink-streaming-java_${scala.binary.version} + flink-streaming-java ${flink.version} test tests diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java index 5a2004f3..6f5b7736 100755 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java @@ -11,9 +11,8 @@ import org.apache.flink.streaming.api.functions.sink.SinkFunction; import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor; import org.apache.flink.streaming.api.windowing.time.Time; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +28,7 @@ public static void main(String[] args) throws Exception { JsonMapperSchema schema = new JsonMapperSchema(SampleRecord.class); FlinkKafkaConsumerBase> consumer = StreamingJobCommon.createKafkaConsumer(params, schema); JsonMapperSchema schema2 = new JsonMapperSchema(SampleTag.class); - FlinkKafkaProducer011 producer = StreamingJobCommon.createKafkaProducer(params, schema2); + FlinkKafkaProducer producer = StreamingJobCommon.createKafkaProducer(params, schema2); // setup streaming execution environment env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java index ac699d0c..98339846 100644 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java @@ -3,9 +3,9 @@ import org.apache.flink.api.common.serialization.SerializationSchema; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer; import org.apache.flink.streaming.connectors.kafka.KafkaDeserializationSchema; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,18 +44,17 @@ static FlinkKafkaConsumerBase createKafkaConsumer(ParameterTool params, K LOG.info("Consuming from Kafka topic: {}", topicIn); // Create Kafka consumer deserializing from JSON. - // Flink recommends using Kafka 0.11 consumer as Kafka 1.0 consumer is not stable. - return new FlinkKafkaConsumer011<>(topicIn, schema, properties); + return new FlinkKafkaConsumer<>(topicIn, schema, properties); } - static FlinkKafkaProducer011 createKafkaProducer(ParameterTool params, SerializationSchema schema) { + static FlinkKafkaProducer createKafkaProducer(ParameterTool params, SerializationSchema schema) { Properties propertiesOut = new Properties(); setProperties(params, "kafka.out.", propertiesOut); String topicOut = (String) propertiesOut.remove("topic"); if (topicOut == null) throw new IllegalArgumentException("Missing configuration value kafka.topic.out"); LOG.info("Writing into Kafka topic: {}", topicOut); - FlinkKafkaProducer011 kafkaOut = new FlinkKafkaProducer011<>( + FlinkKafkaProducer kafkaOut = new FlinkKafkaProducer<>( topicOut, schema, propertiesOut From 549df1ca36404887ec0700a19757788ce04d6502 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:51:10 +0200 Subject: [PATCH 06/31] Create create-hdinsight-aks-flink.sh --- .../create-hdinsight-aks-flink.sh | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 components/azure-hdinsight/create-hdinsight-aks-flink.sh diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh new file mode 100755 index 00000000..cbd536a9 --- /dev/null +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -euo pipefail + +# Get ID of current user +userId=$(az ad signed-in-user show --query id -o tsv) + +echo 'creating HDInsight cluster' +echo ". name: $HDINSIGHT_AKS_NAME" + +if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools -o none 2>/dev/null ; then + az deployment group create \ + --resource-group $RESOURCE_GROUP \ + --template-file "../components/apache-flink/hdinsight-aks/OneClickF.json" \ + --parameters \ + clusterpoolName=$HDINSIGHT_AKS_NAME \ + resourcePrefix=$HDINSIGHT_AKS_RESOURCE_PREFIX \ + clusterVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ + userObjectId=$userId \ + -o tsv >> log.txt +fi \ No newline at end of file From 538d1a29e8555b3efb73aadf7172f20536220bc8 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 18 Jul 2023 11:51:17 +0200 Subject: [PATCH 07/31] Update create-solution.sh --- eventhubskafka-flink-eventhubskafka/create-solution.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index 1eaedf12..abc2da5f 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -189,6 +189,7 @@ echo "***** [P] Setting up PROCESSING" export APPINSIGHTS_NAME=$PREFIX"appmon" export HDINSIGHT_AKS_NAME=$PREFIX"hdi" + export HDINSIGHT_AKS_RESOURCE_PREFIX=$PREFIX # Creating multiple HDInsight clusters in the same Virtual Network requires each cluster to have unique first six characters. export HDINSIGHT_YARN_NAME="yarn"$PREFIX"hdi" export HDINSIGHT_PASSWORD="Strong_Passw0rd!" From 66386a7956b465504f332b8e546553e07e8b45fc Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:15:25 +0200 Subject: [PATCH 08/31] . --- .../apache-flink/flink-kafka-consumer/pom.xml | 14 ++++---- .../flink/ComplexEventProcessingJob.java | 5 +-- .../flink/SimpleRelayStreamingJob.java | 4 ++- .../samples/flink/StreamingJobCommon.java | 10 +++++- .../hdinsight-aks/run-flink-job.sh | 36 +++++++++++++++++++ .../apache-flink/hdinsight-aks/run-flink.sh | 4 +-- 6 files changed, 59 insertions(+), 14 deletions(-) create mode 100755 components/apache-flink/hdinsight-aks/run-flink-job.sh diff --git a/components/apache-flink/flink-kafka-consumer/pom.xml b/components/apache-flink/flink-kafka-consumer/pom.xml index 6bd8759a..9207f244 100644 --- a/components/apache-flink/flink-kafka-consumer/pom.xml +++ b/components/apache-flink/flink-kafka-consumer/pom.xml @@ -40,6 +40,13 @@ ${flink.version} provided + + org.apache.flink + flink-clients + ${flink.version} + provided + + @@ -65,13 +72,6 @@ - - org.apache.flink - flink-clients - ${flink.version} - test - - org.apache.flink flink-test-utils-junit diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java index 6f5b7736..3f0c5066 100755 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingJob.java @@ -17,12 +17,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.microsoft.samples.flink.StreamingJobCommon.getParams; + public class ComplexEventProcessingJob { private static final int MAX_EVENT_DELAY = 60; // max delay for out of order events private static final Logger LOG = LoggerFactory.getLogger(ComplexEventProcessingJob.class); public static void main(String[] args) throws Exception { - ParameterTool params = ParameterTool.fromArgs(args); + ParameterTool params = getParams(args); StreamExecutionEnvironment env = StreamingJobCommon.createStreamExecutionEnvironment(params); JsonMapperSchema schema = new JsonMapperSchema(SampleRecord.class); @@ -49,7 +51,6 @@ public static void main(String[] args) throws Exception { } - static void buildStream(DataStream> source, SinkFunction producer, KeyedProcessFunction logic) { DataStream stream = source .rebalance() diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/SimpleRelayStreamingJob.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/SimpleRelayStreamingJob.java index 22876320..a8ac2082 100755 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/SimpleRelayStreamingJob.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/SimpleRelayStreamingJob.java @@ -15,11 +15,13 @@ import java.time.Instant; +import static com.microsoft.samples.flink.StreamingJobCommon.getParams; + public class SimpleRelayStreamingJob { private static final int MAX_EVENT_DELAY = 60; // max delay for out of order events public static void main(String[] args) throws Exception { - ParameterTool params = ParameterTool.fromArgs(args); + ParameterTool params = getParams(args); StreamExecutionEnvironment env = StreamingJobCommon.createStreamExecutionEnvironment(params); JsonMapperSchema schema = new JsonMapperSchema<>(SampleRecord.class); diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java index 98339846..19f29c6b 100644 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/StreamingJobCommon.java @@ -10,6 +10,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; +import java.io.InputStream; import java.util.Properties; @@ -69,6 +71,12 @@ private static void setProperties(ParameterTool params, String prefix, Propertie }); } - + static ParameterTool getParams(String[] args) throws IOException { + InputStream resourceAsStream = StreamingJobCommon.class.getClassLoader().getResourceAsStream("params.properties"); + if (resourceAsStream != null) { + return ParameterTool.fromPropertiesFile(resourceAsStream); + } + return ParameterTool.fromArgs(args); + } } diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh new file mode 100755 index 00000000..850043d6 --- /dev/null +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Strict mode, fail on any error +set -euo pipefail + +echo 'Determining Flink cluster UI' + +cluster_pool_id=$(az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --query id -o tsv) +cluster_fqdn=$(az resource show --ids $cluster_pool_id/clusters/${HDINSIGHT_AKS_RESOURCE_PREFIX}flinkcluster --query properties.clusterProfile.connectivityProfile.web.fqdn -o tsv) + +echo 'Preparing Flink Job JAR' + +jar_name=flink-kafka-consumer-$FLINK_JOBTYPE.jar +cp "../components/apache-flink/flink-kafka-consumer/target/assembly/$jar_name" flink-job.jar +cat << EOF > params.properties +parallelism=$FLINK_PARALLELISM +kafka.in.topic=$KAFKA_TOPIC +kafka.in.bootstrap.servers=$KAFKA_IN_LISTEN_BROKERS +kafka.in.request.timeout.ms=60000 +kafka.in.sasl.mechanism=$KAFKA_IN_LISTEN_SASL_MECHANISM +kafka.in.security.protocol=$KAFKA_IN_LISTEN_SECURITY_PROTOCOL +kafka.in.sasl.jaas.config=$KAFKA_IN_LISTEN_JAAS_CONFIG +kafka.in.group.id=$PREFIX +kafka.out.topic=$KAFKA_OUT_TOPIC +kafka.out.bootstrap.servers=$KAFKA_OUT_SEND_BROKERS +kafka.out.request.timeout.ms=60000 +kafka.out.sasl.mechanism=$KAFKA_OUT_SEND_SASL_MECHANISM +kafka.out.security.protocol=$KAFKA_OUT_SEND_SECURITY_PROTOCOL +kafka.out.sasl.jaas.config=$KAFKA_OUT_SEND_JAAS_CONFIG +EOF + +zip -g flink-job.jar params.properties + +echo "The Job JAR must be" +echo "Flink UI: https://$cluster_fqdn" +echo "Job JAR: flink-job.jar" diff --git a/components/apache-flink/hdinsight-aks/run-flink.sh b/components/apache-flink/hdinsight-aks/run-flink.sh index e6977f05..4d5ff691 100644 --- a/components/apache-flink/hdinsight-aks/run-flink.sh +++ b/components/apache-flink/hdinsight-aks/run-flink.sh @@ -1,6 +1,4 @@ source ../components/azure-monitor/create-log-analytics.sh source ../components/azure-hdinsight/create-hdinsight-aks-flink.sh -pushd ../components/apache-flink > /dev/null - source hdinsight-aks/run-flink-job.sh -popd > /dev/null +source ../components/apache-flink/hdinsight-aks/run-flink-job.sh From 94a550fb6645cfc7d3a54af83b62f5b39e670898 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:36:21 +0200 Subject: [PATCH 09/31] Update run-flink-job.sh --- .../apache-flink/hdinsight-aks/run-flink-job.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh index 850043d6..bc719025 100755 --- a/components/apache-flink/hdinsight-aks/run-flink-job.sh +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -30,7 +30,12 @@ kafka.out.sasl.jaas.config=$KAFKA_OUT_SEND_JAAS_CONFIG EOF zip -g flink-job.jar params.properties +rm params.properties -echo "The Job JAR must be" -echo "Flink UI: https://$cluster_fqdn" -echo "Job JAR: flink-job.jar" +echo "********************************************************************************************" +echo "The Job JAR must be manually submitted in the Flink UI." +echo "- Access the Flink UI at https://$cluster_fqdn" +echo "- In the Submit New Jobs pane, click Add New and upload 'flink-job.jar' from this directory." +echo "- Wait for the upload to complete." +echo "- Click on 'flink-job.jar' and click Submit." +echo "********************************************************************************************" From 692132da6d8bf2925a1bc8617eb57deb44b45065 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:36:33 +0200 Subject: [PATCH 10/31] Update JsonMapperSchema.java --- .../samples/flink/utils/JsonMapperSchema.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/utils/JsonMapperSchema.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/utils/JsonMapperSchema.java index d8ebeeea..d0f2d3e5 100755 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/utils/JsonMapperSchema.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/utils/JsonMapperSchema.java @@ -3,7 +3,6 @@ import org.apache.flink.api.common.serialization.SerializationSchema; import org.apache.flink.api.common.typeinfo.TypeHint; import org.apache.flink.api.common.typeinfo.TypeInformation; -import org.apache.flink.api.java.typeutils.TypeExtractor; import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator; import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonParser; import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException; @@ -11,22 +10,23 @@ import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.module.SimpleModule; import org.apache.flink.streaming.connectors.kafka.KafkaDeserializationSchema; import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.apache.kafka.common.header.Headers; import java.io.IOException; import java.io.Serializable; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.util.Optional; public class JsonMapperSchema implements KafkaDeserializationSchema>, SerializationSchema { - private static final DateTimeFormatter dateTimeFormatter = - DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX").withZone(ZoneOffset.UTC); private final Class type; private final ObjectMapper mapper; + private static final DateTimeFormatter dateTimeFormatter = + DateTimeFormatter.ISO_INSTANT.withZone(ZoneOffset.UTC); + public JsonMapperSchema(Class type) { this.type = type; @@ -57,7 +57,7 @@ public ConsumerRecord deserialize(ConsumerRecord r) t byte[] message = r.value(); T v = mapper.readValue(message, type); return new - ConsumerRecord(r.topic(), r.partition(), r. offset(), r. timestamp(), r. timestampType(), null, r. serializedKeySize(), r. serializedValueSize(), r. key(), v, r. headers()); + ConsumerRecord<>(r.topic(), r.partition(), r.offset(), r.timestamp(), r.timestampType(), r.serializedKeySize(), r.serializedValueSize(), r.key(), v, r.headers(), Optional.empty()); } public TypeInformation> getProducedType() { @@ -76,7 +76,7 @@ private static class InstantDeserializer extends JsonDeserializer imple @Override public Instant deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { - return dateTimeFormatter.parse(jsonParser.getText(), Instant::from); + return Instant.parse(jsonParser.getText()); } } } From 5a8e59959fa128d116b8035499c7f2feead5ad8a Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:36:36 +0200 Subject: [PATCH 11/31] Update SampleRecord.java --- .../main/java/com/microsoft/samples/flink/data/SampleRecord.java | 1 + 1 file changed, 1 insertion(+) diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/data/SampleRecord.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/data/SampleRecord.java index abc64850..d2c6dc46 100755 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/data/SampleRecord.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/data/SampleRecord.java @@ -43,5 +43,6 @@ public static class ComplexData implements Serializable { public double moreData20; public double moreData21; public double moreData22; + public double moreData23; } } From b6844599e5326084c136c962c77ab0487dfa3bca Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:40:16 +0200 Subject: [PATCH 12/31] Update run-flink-job.sh --- components/apache-flink/hdinsight-aks/run-flink-job.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh index bc719025..36993105 100755 --- a/components/apache-flink/hdinsight-aks/run-flink-job.sh +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -34,8 +34,10 @@ rm params.properties echo "********************************************************************************************" echo "The Job JAR must be manually submitted in the Flink UI." -echo "- Access the Flink UI at https://$cluster_fqdn" -echo "- In the Submit New Jobs pane, click Add New and upload 'flink-job.jar' from this directory." +echo "- Access the Flink UI at" +echo " https://$cluster_fqdn" +echo "- In the Submit New Jobs pane, click Add New and upload 'flink-job.jar' from this directory" +echo " ($PWD)." echo "- Wait for the upload to complete." echo "- Click on 'flink-job.jar' and click Submit." echo "********************************************************************************************" From b0cdab969ffc789e3995948a0fe1f1073d84b88a Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:40:19 +0200 Subject: [PATCH 13/31] Update pom.xml --- components/apache-flink/flink-kafka-consumer/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/apache-flink/flink-kafka-consumer/pom.xml b/components/apache-flink/flink-kafka-consumer/pom.xml index 9207f244..0ca33db8 100644 --- a/components/apache-flink/flink-kafka-consumer/pom.xml +++ b/components/apache-flink/flink-kafka-consumer/pom.xml @@ -9,7 +9,7 @@ UTF-8 - 1.16.2 + 1.16.0 1.8 2.12 0.12 From 402f8b512bcf979dc1fa961419fd6de9b3a8f213 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 19 Jul 2023 09:44:31 +0200 Subject: [PATCH 14/31] Update run-flink-job.sh --- .../apache-flink/hdinsight-aks/run-flink-job.sh | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh index 36993105..33a27c73 100755 --- a/components/apache-flink/hdinsight-aks/run-flink-job.sh +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -10,8 +10,13 @@ cluster_fqdn=$(az resource show --ids $cluster_pool_id/clusters/${HDINSIGHT_AKS_ echo 'Preparing Flink Job JAR' -jar_name=flink-kafka-consumer-$FLINK_JOBTYPE.jar -cp "../components/apache-flink/flink-kafka-consumer/target/assembly/$jar_name" flink-job.jar +base_jar=flink-kafka-consumer-$FLINK_JOBTYPE.jar +mkdir -p target +jar_name=$FLINK_JOBTYPE.jar +jar_path=target/$jar_name + +cp "../components/apache-flink/flink-kafka-consumer/target/assembly/$base_jar" $jar_path + cat << EOF > params.properties parallelism=$FLINK_PARALLELISM kafka.in.topic=$KAFKA_TOPIC @@ -29,15 +34,15 @@ kafka.out.security.protocol=$KAFKA_OUT_SEND_SECURITY_PROTOCOL kafka.out.sasl.jaas.config=$KAFKA_OUT_SEND_JAAS_CONFIG EOF -zip -g flink-job.jar params.properties +zip -g $jar_path params.properties rm params.properties echo "********************************************************************************************" echo "The Job JAR must be manually submitted in the Flink UI." echo "- Access the Flink UI at" echo " https://$cluster_fqdn" -echo "- In the Submit New Jobs pane, click Add New and upload 'flink-job.jar' from this directory" -echo " ($PWD)." +echo "- In the Submit New Jobs pane, click Add New and upload '$jar_name' from the directory" +echo " $PWD/target" echo "- Wait for the upload to complete." -echo "- Click on 'flink-job.jar' and click Submit." +echo "- Click on '$jar_name' and click Submit." echo "********************************************************************************************" From 4aa6ecff149203d1c822471327abbc8aff1feffd Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Thu, 20 Jul 2023 06:46:50 +0200 Subject: [PATCH 15/31] . --- README.md | 2 +- .../azure-event-hubs/create-event-hub.sh | 2 +- eventhubskafka-flink-eventhubskafka/README.md | 22 ++------ .../create-solution.sh | 50 ++----------------- 4 files changed, 8 insertions(+), 68 deletions(-) diff --git a/README.md b/README.md index b09f0922..71873a16 100644 --- a/README.md +++ b/README.md @@ -211,7 +211,7 @@ Implement a stream processing architecture using: Implement a stream processing architecture using: - Event Hubs Kafka (Ingest / Immutable Log) -- Flink on HDInsight or Azure Kubernetes Service (Stream Process) +- Flink on HDInsight (Stream Process) - Event Hubs Kafka (Serve) ### [Event Hubs Kafka + Azure Functions + Cosmos DB](https://github.com/Azure-Samples/streaming-at-scale/tree/main/eventhubskafka-functions-cosmosdb) diff --git a/components/azure-event-hubs/create-event-hub.sh b/components/azure-event-hubs/create-event-hub.sh index 4d233605..d074dce0 100755 --- a/components/azure-event-hubs/create-event-hub.sh +++ b/components/azure-event-hubs/create-event-hub.sh @@ -29,7 +29,7 @@ echo ". name: $eventHubName" echo ". partitions: $EVENTHUB_PARTITIONS" az eventhubs eventhub create -n $eventHubName -g $RESOURCE_GROUP \ - --message-retention 1 --partition-count $EVENTHUB_PARTITIONS --namespace-name $eventHubsNamespace \ + --partition-count $EVENTHUB_PARTITIONS --namespace-name $eventHubsNamespace \ --enable-capture "$EVENTHUB_CAPTURE" --capture-interval 300 --capture-size-limit 314572800 \ --archive-name-format 'capture/{Namespace}/{EventHub}/{Year}_{Month}_{Day}_{Hour}_{Minute}_{Second}_{PartitionId}' \ --blob-container streamingatscale \ diff --git a/eventhubskafka-flink-eventhubskafka/README.md b/eventhubskafka-flink-eventhubskafka/README.md index 2d706add..56ae5858 100644 --- a/eventhubskafka-flink-eventhubskafka/README.md +++ b/eventhubskafka-flink-eventhubskafka/README.md @@ -3,7 +3,7 @@ topic: sample languages: - azurecli - json - - sql + - java products: - azure - azure-container-instances @@ -18,8 +18,6 @@ statusNotificationTargets: This sample uses Apache Flink to process streaming data from Event Hubs Kafka and uses another Event Hubs Kafka as a sink to store JSON data. This is done to analyze pure streaming performance of Flink; no aggregation is done and data is passed as fast as possible from the input to the output. Data is augmented by adding additional fields. -The sample provides a choice among options for hosting Flink: Azure Kubernetes Service, or Azure HDInsight Hadoop (using YARN). - To support very high throughput, two different Event Hubs namespaces are deployed by the template. Event Hubs capacity is limited to up to 20 units of 1 MB/s each (although this limit can be increased through a support ticket). If incoming throughput is under 10 MB/s, you could deploy two Event Hub instances under a single namespace instead. The provided scripts will create an end-to-end solution complete with load test client. @@ -40,8 +38,6 @@ The following tools/languages are also needed: - Install: `sudo apt install jq` - [Maven](https://maven.apache.org/install.html) - Install: `sudo apt install maven` -- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) -- [helm](https://helm.sh/docs/using_helm/#installing-helm) ## Setup Solution @@ -78,9 +74,9 @@ To make sure that name collisions will be unlikely, you should use a random stri The script will create the following resources: -- **Azure Container Instances** to host Spark Load Test Clients: by default one client will be created, generating a load of 1000 events/second +- **Azure Container Instances** to host Load Test Clients: by default one client will be created, generating a load of 1000 events/second - **Event Hubs** Namespace, Hub and Consumer Group: to ingest data incoming from test clients and to store data generated by Apache Flink -- **HDInsight** or **Azure Kubernetes Service**: to host the Apache Flink job that processes event data +- **HDInsight**: to host the Apache Flink job that processes event data - **Azure Monitor**: to monitor HDInsight, Azure Kubernetes Service and Flink ## Streamed Data @@ -126,9 +122,6 @@ If you want to change some setting of the solution, like number of load test cli # settings for AKS (-p aks) export AKS_NODES=3 export AKS_VM_SIZE=Standard_D2s_v3 - # settings for HDInsight YARN (-p hdinsight) - export HDINSIGHT_HADOOP_WORKERS=3 - export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 The above settings have been chosen to sustain a 1,000 msg/s stream. The script also contains settings for 5,000 msg/s and 10,000 msg/s. @@ -179,15 +172,6 @@ The Flink Job Manager UI shows information about the current running job. The IP ![Flink Job Manager Web UI](../_doc/_images/flink-job-manager.png) -### Flink deployment on AKS - -Deployment on Azure Kubernetes Service is done in single-job, highly available mode. The deployment includes: -* A Zookeeper cluster for maintaining quorum -* A pod for the (per-job) Flink Job Manager and -* A pod for each Flink Task Manager deployed as part of the job - -In HA mode, the Flink the JobManager exposes a dynamically allocated port. Together with the JobManager, we run a custom sidecar container containing a small shell script. The script calls the JobManager REST API (running on fixed port 8081) to discover the JobManager RPC port, then calls the Kubernetes API to update the port exposed in the Kubernetes Service. RBAC is used to grant the sidecar container permissions to only this specific operation in the API. - ### Flink deployment on HDInsight Deployment on HDInsight is done in job server, highly available mode. The deployment runs a YARN job for the Flink Job Manager, then submits a JAR job to the Job Manager. The Job Manager creates a YARN application per job. diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index abc2da5f..1eeded15 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -7,11 +7,11 @@ export PREFIX='' export LOCATION="eastus" export TESTTYPE="1" export STEPS="CIPTM" -export FLINK_PLATFORM='aks' +export FLINK_PLATFORM='hdinsight-aks' export FLINK_JOBTYPE='simple-relay' usage() { - echo "Usage: $0 -d [-s ] [-t ] [-l ] [-p ]" + echo "Usage: $0 -d [-s ] [-t ] [-l ]" echo "-s: specify which steps should be executed. Default=$STEPS" echo " Possible values:" echo " C=COMMON" @@ -21,7 +21,6 @@ usage() { echo " M=METRICS reporting" echo " V=VERIFY deployment" echo "-t: test 1,5,10 thousands msgs/sec. Default=$TESTTYPE" - echo "-p: platform: 'aks', 'hdinsight-aks' or 'hdinsight'. Default=$FLINK_PLATFORM" echo "-a: type of job: 'simple-relay' or 'complex-processing'. Default=$FLINK_JOBTYPE" echo "-l: where to create the resources. Default=$LOCATION" exit 1; @@ -42,9 +41,6 @@ while getopts ":d:s:t:l:p:a:" arg; do l) LOCATION=${OPTARG} ;; - p) - FLINK_PLATFORM=${OPTARG} - ;; a) FLINK_JOBTYPE=${OPTARG} ;; @@ -65,14 +61,7 @@ if [ "$TESTTYPE" == "10" ]; then export EVENTHUB_PARTITIONS=8 export FLINK_PARALLELISM=8 export SIMULATOR_INSTANCES=5 - # settings for AKS (-p aks) - export AKS_NODES=4 - export AKS_VM_SIZE=Standard_D4s_v3 - # settings for HDInsight AKS (-p hdinsight-aks) export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 - # settings for HDInsight YARN (-p hdinsight) - export HDINSIGHT_HADOOP_WORKERS=3 - export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 fi # 5000 messages/sec @@ -81,14 +70,7 @@ if [ "$TESTTYPE" == "5" ]; then export EVENTHUB_PARTITIONS=4 export FLINK_PARALLELISM=4 export SIMULATOR_INSTANCES=3 - # settings for AKS (-p aks) - export AKS_NODES=5 - export AKS_VM_SIZE=Standard_D2s_v3 - # settings for HDInsight AKS (-p hdinsight-aks) export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 - # settings for HDInsight YARN (-p hdinsight) - export HDINSIGHT_HADOOP_WORKERS=3 - export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 fi # 1000 messages/sec @@ -97,14 +79,7 @@ if [ "$TESTTYPE" == "1" ]; then export EVENTHUB_PARTITIONS=1 export FLINK_PARALLELISM=1 export SIMULATOR_INSTANCES=1 - # settings for AKS (-p aks) - export AKS_NODES=3 - export AKS_VM_SIZE=Standard_D2s_v3 - # settings for HDInsight AKS (-p hdinsight-aks) export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 - # settings for HDInsight YARN (-p hdinsight) - export HDINSIGHT_HADOOP_WORKERS=3 - export HDINSIGHT_HADOOP_WORKER_SIZE=Standard_D3_V2 fi # last checks and variables setup @@ -138,18 +113,9 @@ echo "Configuration: " echo ". Resource Group => $RESOURCE_GROUP" echo ". Region => $LOCATION" echo ". EventHubs => TU: $EVENTHUB_CAPACITY, Partitions: $EVENTHUB_PARTITIONS" -if [ "$FLINK_PLATFORM" == "hdinsight" ]; then - echo ". HDInsight YARN => VM: $HDINSIGHT_HADOOP_WORKER_SIZE, Workers: $HDINSIGHT_HADOOP_WORKERS" -elif [ "$FLINK_PLATFORM" == "hdinsight-aks" ]; then - echo ". HDInsight on AKS => VM: $HDINSIGHT_AKS_WORKER_SIZE" -else - echo ". AKS => VM: $AKS_VM_SIZE, Workers: $AKS_NODES" -fi +echo ". HDInsight on AKS => VM: $HDINSIGHT_AKS_WORKER_SIZE" echo ". Flink => Parallelism: $FLINK_PARALLELISM" echo ". Simulators => $SIMULATOR_INSTANCES" -if [[ -n ${AD_SP_APP_ID:-} && -n ${AD_SP_SECRET:-} ]]; then - echo ". Service Principal => $AD_SP_APP_ID" -fi echo echo "Deployment started..." @@ -158,13 +124,11 @@ echo echo "***** [C] Setting up COMMON resources" export AZURE_STORAGE_ACCOUNT=$PREFIX"storage" - export VNET_NAME=$PREFIX"-vnet" RUN=`echo $STEPS | grep C -o || true` if [ ! -z "$RUN" ]; then source ../components/azure-common/create-resource-group.sh source ../components/azure-storage/create-storage-account.sh - source ../components/azure-common/create-virtual-network.sh fi echo @@ -187,16 +151,8 @@ echo echo "***** [P] Setting up PROCESSING" - export APPINSIGHTS_NAME=$PREFIX"appmon" export HDINSIGHT_AKS_NAME=$PREFIX"hdi" export HDINSIGHT_AKS_RESOURCE_PREFIX=$PREFIX - # Creating multiple HDInsight clusters in the same Virtual Network requires each cluster to have unique first six characters. - export HDINSIGHT_YARN_NAME="yarn"$PREFIX"hdi" - export HDINSIGHT_PASSWORD="Strong_Passw0rd!" - export AKS_CLUSTER=$PREFIX"aks" - export SERVICE_PRINCIPAL_KV_NAME=$AKS_CLUSTER - export SERVICE_PRINCIPAL_KEYVAULT=$PREFIX"spkv" - export ACR_NAME=$PREFIX"acr" source ../components/azure-monitor/generate-workspace-name.sh From aec551dc858e4759d0daf3ee50d300413bc67194 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Thu, 20 Jul 2023 08:55:48 +0200 Subject: [PATCH 16/31] Update create-storage-account.sh --- components/azure-storage/create-storage-account.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/azure-storage/create-storage-account.sh b/components/azure-storage/create-storage-account.sh index 2ce8da81..8c3b108d 100755 --- a/components/azure-storage/create-storage-account.sh +++ b/components/azure-storage/create-storage-account.sh @@ -7,5 +7,5 @@ echo 'creating storage account' echo ". name: $AZURE_STORAGE_ACCOUNT" az storage account create -n $AZURE_STORAGE_ACCOUNT -g $RESOURCE_GROUP \ - --kind StorageV2 --sku Standard_LRS --allow-blob-public-access false \ + --kind StorageV2 --sku Standard_LRS \ -o tsv >> log.txt From 5b32cf514adbf759cde2a4c9f90794f221b4d14c Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Fri, 21 Jul 2023 10:36:23 +0200 Subject: [PATCH 17/31] Update README.md --- eventhubskafka-flink-eventhubskafka/README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/eventhubskafka-flink-eventhubskafka/README.md b/eventhubskafka-flink-eventhubskafka/README.md index 56ae5858..470fe203 100644 --- a/eventhubskafka-flink-eventhubskafka/README.md +++ b/eventhubskafka-flink-eventhubskafka/README.md @@ -166,17 +166,13 @@ around 60k events/min. The deployed Apache Flink solution doesn't do any analytics or projection, but only populates two fields in the JSON message: the time at which the event was received in Event Hubs, and the current timestamp. -The solution includes a custom monitoring library to log Flink events and metrics to Azure Monitor. The custom monitoring library is currently only included when the Flink job is deployed in AKS. To view the monitoring data, navigate to the Log Analytics resource in the Azure Portal. - The Flink Job Manager UI shows information about the current running job. The IP address of the Job Manager UI is reported by the deployment script. Note that the solution deploys the Job Manager on a public IP address without any security. In a production deployment, you should disable public IP endpoints. ![Flink Job Manager Web UI](../_doc/_images/flink-job-manager.png) ### Flink deployment on HDInsight -Deployment on HDInsight is done in job server, highly available mode. The deployment runs a YARN job for the Flink Job Manager, then submits a JAR job to the Job Manager. The Job Manager creates a YARN application per job. - -Note that deployed jobs do not survive an HDInsight cluster reboot. +TODO ## Query Data From d9b11d4d059c9416bf3130fb9d6b5887b1d8664b Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Sun, 13 Aug 2023 20:07:35 +0200 Subject: [PATCH 18/31] fix --- .../apache-flink/hdinsight-aks/OneClickF.json | 2 +- .../azure-hdinsight/create-hdinsight-aks-flink.sh | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json index 1a1a3be3..cd62e8e1 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -140,7 +140,7 @@ ] }, "clusterProfile": { - "clusterVersion": "1.0.4", + "clusterVersion": "1.0.6", "ossVersion": "1.16.0", "components": [ { diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index cbd536a9..52f76f24 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -5,10 +5,17 @@ set -euo pipefail # Get ID of current user userId=$(az ad signed-in-user show --query id -o tsv) -echo 'creating HDInsight cluster' -echo ". name: $HDINSIGHT_AKS_NAME" -if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools -o none 2>/dev/null ; then +if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --api-version 2021-09-15-preview -o none 2>/dev/null ; then + echo "getting Subnet ID" + subnet_id=$(az network vnet subnet show -g $RESOURCE_GROUP -n streaming-subnet --vnet-name $VNET_NAME --query id -o tsv) + + echo "getting Log Analytics workspace ID" + analytics_ws_resourceId=$(az resource show -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --resource-type Microsoft.OperationalInsights/workspaces --query id -o tsv) + + echo 'creating HDInsight cluster' + echo ". name: $HDINSIGHT_AKS_NAME" + az deployment group create \ --resource-group $RESOURCE_GROUP \ --template-file "../components/apache-flink/hdinsight-aks/OneClickF.json" \ @@ -18,4 +25,4 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type clusterVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ userObjectId=$userId \ -o tsv >> log.txt -fi \ No newline at end of file +fi From 9921253cfc22cff81ce90fd69835543d1236c93e Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Mon, 14 Aug 2023 07:44:30 +0200 Subject: [PATCH 19/31] log analytics --- .../apache-flink/hdinsight-aks/OneClickF.json | 26 ++++++++++++++----- .../hdinsight-aks/run-flink-job.sh | 2 +- .../create-hdinsight-aks-flink.sh | 2 ++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json index cd62e8e1..f6e3af95 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -3,26 +3,32 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterpoolName": { - "type": "String", + "type": "string", "metadata": { - "description": "The cluster pool name" + "description": "The name of the Azure HDInsight on AKS cluster pool to create." + } + }, + "clusterPoolLogAnalyticsWorkspaceId": { + "type": "string", + "metadata": { + "description": "Resource Id of the Log Analytics workspace when the logs to be stored" } }, "resourcePrefix": { - "type": "String", + "type": "string", "metadata": { "description": "Provide a prefix for your resource, your resources will be named as [prefix + random string]." } }, "clusterVMSize": { "defaultValue": "Standard_D8ds_v5", - "type": "String", + "type": "string", "metadata": { "description": "Provide a the VM Size for the cluster. Example - Standard_D8ds_v5]." } }, "userObjectId": { - "type": "String", + "type": "string", "metadata": { "description": "The user alias object ID from Azure Active Directory" } @@ -36,10 +42,16 @@ }, "resources": [ { - "type": "microsoft.hdinsight/clusterpools", + "type": "Microsoft.HDInsight/clusterpools", "apiVersion": "2021-09-15-preview", "name": "[parameters('clusterpoolName')]", - "location": "[resourceGroup().location]" + "location": "[resourceGroup().location]", + "properties": { + "logAnalyticsProfile": { + "enabled": true, + "workspaceId": "[parameters('clusterPoolLogAnalyticsWorkspaceId')]" + } + } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh index 33a27c73..f3852e84 100755 --- a/components/apache-flink/hdinsight-aks/run-flink-job.sh +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -5,7 +5,7 @@ set -euo pipefail echo 'Determining Flink cluster UI' -cluster_pool_id=$(az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --query id -o tsv) +cluster_pool_id=$(az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --query id --api-version 2021-09-15-preview -o tsv) cluster_fqdn=$(az resource show --ids $cluster_pool_id/clusters/${HDINSIGHT_AKS_RESOURCE_PREFIX}flinkcluster --query properties.clusterProfile.connectivityProfile.web.fqdn -o tsv) echo 'Preparing Flink Job JAR' diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index 52f76f24..2443d607 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -17,6 +17,7 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type echo ". name: $HDINSIGHT_AKS_NAME" az deployment group create \ + --no-prompt \ --resource-group $RESOURCE_GROUP \ --template-file "../components/apache-flink/hdinsight-aks/OneClickF.json" \ --parameters \ @@ -24,5 +25,6 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type resourcePrefix=$HDINSIGHT_AKS_RESOURCE_PREFIX \ clusterVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ userObjectId=$userId \ + clusterPoolLogAnalyticsWorkspaceId=$analytics_ws_resourceId \ -o tsv >> log.txt fi From 11445d870bd48937fbff1c3e09daba28ec67241e Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Mon, 14 Aug 2023 08:54:54 +0200 Subject: [PATCH 20/31] . --- .../apache-flink/hdinsight-aks/OneClickF.json | 128 +++++++++++++++--- .../create-hdinsight-aks-flink.sh | 3 +- 2 files changed, 111 insertions(+), 20 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json index f6e3af95..891a797f 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -20,17 +20,99 @@ "description": "Provide a prefix for your resource, your resources will be named as [prefix + random string]." } }, - "clusterVMSize": { - "defaultValue": "Standard_D8ds_v5", + "userObjectId": { "type": "string", "metadata": { - "description": "Provide a the VM Size for the cluster. Example - Standard_D8ds_v5]." + "description": "The user alias object ID from Azure Active Directory" } }, - "userObjectId": { + "clusterVersion": { "type": "string", + "defaultValue": "1.0.6", "metadata": { - "description": "The user alias object ID from Azure Active Directory" + "description": "The version of the cluster to be created" + } + }, + "ossVersion": { + "type": "string", + "defaultValue": "1.16.0", + "metadata": { + "description": "The OSS version of the cluster to be created" + } + }, + "taskManagerCPU": { + "type": "string", + "defaultValue": "2", + "metadata": { + "description": "Task manager CPU count" + } + }, + "taskManagerMemoryInMB": { + "type": "string", + "defaultValue": "2000", + "metadata": { + "description": "Task manager memory in MB" + } + }, + "jobManagerCPU": { + "type": "string", + "defaultValue": "1", + "metadata": { + "description": "Job manager CPU count" + } + }, + "jobManagerMemoryInMB": { + "type": "string", + "defaultValue": "2000", + "metadata": { + "description": "Job manager memory in MB" + } + }, + "historyServerCPU": { + "type": "string", + "defaultValue": "1", + "metadata": { + "description": "History server CPU count" + } + }, + "historyServerMemoryInMB": { + "type": "string", + "defaultValue": "2000", + "metadata": { + "description": "History server memory in MB" + } + }, + "headNodeVMSize": { + "type": "string", + "metadata": { + "description": "VM SKU selected for the head node" + } + }, + "headNodeCount": { + "type": "string", + "defaultValue": "2", + "metadata": { + "description": "Head node count" + } + }, + "workerNodeVMSize": { + "type": "string", + "metadata": { + "description": "VM SKU selected for the worker node" + } + }, + "workerNodeCount": { + "type": "string", + "defaultValue": "3", + "metadata": { + "description": "Worker node count" + } + }, + "workerPodsCount": { + "type": "string", + "defaultValue": "2", + "metadata": { + "description": "Worker pods count" } } }, @@ -141,23 +223,23 @@ "nodes": [ { "type": "Head", - "vmSize": "[parameters('clusterVMSize')]", - "count": 2 + "vmSize": "[parameters('headNodeVMSize')]", + "count": "[int(parameters('headNodeCount'))]" }, { "type": "Worker", - "vmSize": "[parameters('clusterVMSize')]", - "count": 3 + "vmSize": "[parameters('workerNodeVMSize')]", + "count": "[int(parameters('workerNodeCount'))]" } ] }, "clusterProfile": { - "clusterVersion": "1.0.6", - "ossVersion": "1.16.0", + "clusterVersion": "[parameters('clusterVersion')]", + "ossVersion": "[parameters('ossVersion')]", "components": [ { "name": "Flink", - "version": "1.16.0" + "version": "[parameters('ossVersion')]" }, { "name": "Hive Metastore", @@ -174,19 +256,27 @@ "[parameters('userObjectId')]" ] }, + "logAnalyticsProfile": { + "enabled": true, + "applicationLogs": { + "stdErrorEnabled": true, + "stdOutEnabled": true + }, + "metricsEnabled": true + }, "flinkProfile": { - "numReplicas": 2, + "numReplicas": "[int(parameters('workerPodsCount'))]", "jobManager": { - "cpu": 1, - "memory": 2000 + "cpu": "[int(parameters('jobManagerCPU'))]", + "memory": "[int(parameters('jobManagerMemoryInMB'))]" }, "taskManager": { - "cpu": 2, - "memory": 2000 + "cpu": "[int(parameters('taskManagerCPU'))]", + "memory": "[int(parameters('taskManagerMemoryInMB'))]" }, "historyServer": { - "cpu": 1, - "memory": 2000 + "cpu": "[int(parameters('historyServerCPU'))]", + "memory": "[int(parameters('historyServerMemoryInMB'))]" }, "storage": { "storageUri": "[concat('abfs://container1', '@', variables('storageName'), '.dfs.core.windows.net')]" diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index 2443d607..8d47b2c2 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -23,7 +23,8 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type --parameters \ clusterpoolName=$HDINSIGHT_AKS_NAME \ resourcePrefix=$HDINSIGHT_AKS_RESOURCE_PREFIX \ - clusterVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ + headNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ + workerNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ userObjectId=$userId \ clusterPoolLogAnalyticsWorkspaceId=$analytics_ws_resourceId \ -o tsv >> log.txt From a2f7b364beb45e4d9b2d65507ade41ea59f2370c Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 15 Aug 2023 07:08:46 +0200 Subject: [PATCH 21/31] new template --- .../apache-flink/hdinsight-aks/OneClickF.json | 80 ++++++++++++------- .../hdinsight-aks/run-flink-job.sh | 2 +- .../create-hdinsight-aks-flink.sh | 3 +- .../create-solution.sh | 1 + 4 files changed, 56 insertions(+), 30 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json index 891a797f..d681dcd2 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -2,44 +2,71 @@ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { - "clusterpoolName": { + "clusterPoolName": { "type": "string", "metadata": { "description": "The name of the Azure HDInsight on AKS cluster pool to create." } }, - "clusterPoolLogAnalyticsWorkspaceId": { + "clusterPoolVersion": { + "defaultValue": "1.0", "type": "string", "metadata": { - "description": "Resource Id of the Log Analytics workspace when the logs to be stored" + "description": "HDInsight on AKS cluster pool version to be created." } }, - "resourcePrefix": { + "clusterPoolNodeVmSize": { + "defaultValue": "Standard_F4s_v2", + "allowedValues": [ + "Standard_F4s_v2", + "Standard_D4av_v4", + "Standard_D4as_v4", + "Standard_E4s_v3", + "Standard_E4_v3" + ], "type": "string", "metadata": { - "description": "Provide a prefix for your resource, your resources will be named as [prefix + random string]." + "description": "VM SKU selected for the cluster pool" } }, - "userObjectId": { + "resourcePrefix": { "type": "string", "metadata": { - "description": "The user alias object ID from Azure Active Directory" + "description": "Provide a prefix for creating necessary resources required for cluster creation, your necessary resources will be named as [prefix + random string]." } }, - "clusterVersion": { + "clusterName": { "type": "string", + "metadata": { + "description": "The name of the cluster" + } + }, + "hdinsightOnAksClusterVersion": { "defaultValue": "1.0.6", + "type": "string", "metadata": { "description": "The version of the cluster to be created" } }, - "ossVersion": { - "type": "string", + "clusterOssVersion": { "defaultValue": "1.16.0", + "type": "string", "metadata": { "description": "The OSS version of the cluster to be created" } }, + "userObjectId": { + "type": "string", + "metadata": { + "description": "The user alias object ID from Azure Active Directory" + } + }, + "clusterPoolLogAnalyticsWorkspaceId": { + "type": "string", + "metadata": { + "description": "Resource Id of the Log Analytics workspace when the logs to be stored" + } + }, "taskManagerCPU": { "type": "string", "defaultValue": "2", @@ -117,7 +144,7 @@ } }, "variables": { - "clusterName": "[concat(parameters('clusterpoolName'), '/', parameters('resourcePrefix'), 'flinkcluster')]", + "clusterName": "[concat(parameters('clusterPoolName'), '/', parameters('clusterName'))]", "msiName": "[concat(parameters('resourcePrefix'), 'MSI')]", "roleAssignedGuid": "[guid(variables('msiName'), resourceGroup().id)]", "storageName": "[concat(parameters('resourcePrefix'), 'store')]" @@ -126,12 +153,19 @@ { "type": "Microsoft.HDInsight/clusterpools", "apiVersion": "2021-09-15-preview", - "name": "[parameters('clusterpoolName')]", + "name": "[parameters('clusterPoolName')]", "location": "[resourceGroup().location]", "properties": { "logAnalyticsProfile": { "enabled": true, "workspaceId": "[parameters('clusterPoolLogAnalyticsWorkspaceId')]" + }, + "clusterPoolProfile": { + "clusterPoolVersion": "[parameters('clusterPoolVersion')]" + }, + "computeProfile": { + "vmSize": "[parameters('clusterPoolNodeVmSize')]", + "count": 3 } } }, @@ -181,13 +215,13 @@ "apiVersion": "2020-10-01-preview", "name": "[variables('roleAssignedGuid')]", "dependsOn": [ - "[resourceId('microsoft.hdinsight/clusterpools',parameters('clusterpoolName'))]", + "[resourceId('microsoft.hdinsight/clusterpools',parameters('clusterPoolName'))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))]", "[variables('msiName')]" ], "properties": { "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'f1a07417-d97a-45cb-824c-7a7467783830')]", - "principalId": "[reference(resourceId('microsoft.hdinsight/clusterpools', parameters('clusterpoolName')), '2021-09-15-preview').aksClusterProfile.aksClusterAgentPoolIdentityProfile.msiObjectId]" + "principalId": "[reference(resourceId('microsoft.hdinsight/clusterpools', parameters('clusterPoolName')), '2021-09-15-preview').aksClusterProfile.aksClusterAgentPoolIdentityProfile.msiObjectId]" }, "scope": "[concat('Microsoft.ManagedIdentity/userAssignedIdentities', '/', variables('msiName'))]" }, @@ -198,7 +232,7 @@ "dependsOn": [ "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))]", - "[resourceId('microsoft.hdinsight/clusterpools', parameters('clusterpoolName'))]", + "[resourceId('microsoft.hdinsight/clusterpools', parameters('clusterPoolName'))]", "[variables('storageName')]" ], "properties": { @@ -213,7 +247,7 @@ "name": "[variables('clusterName')]", "location": "[resourceGroup().location]", "dependsOn": [ - "[resourceId('microsoft.hdinsight/clusterpools', parameters('clusterpoolName'))]", + "[resourceId('microsoft.hdinsight/clusterpools', parameters('clusterPoolName'))]", "[resourceId('Microsoft.Storage/storageAccounts', variables('storageName'))]", "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))]" ], @@ -234,18 +268,8 @@ ] }, "clusterProfile": { - "clusterVersion": "[parameters('clusterVersion')]", - "ossVersion": "[parameters('ossVersion')]", - "components": [ - { - "name": "Flink", - "version": "[parameters('ossVersion')]" - }, - { - "name": "Hive Metastore", - "version": "3.1.2" - } - ], + "clusterVersion": "[parameters('hdinsightOnAksClusterVersion')]", + "ossVersion": "[parameters('clusterOssVersion')]", "identityProfile": { "msiResourceId": "[string(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName')))]", "msiClientId": "[string(reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('msiName'))).clientId)]", diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh index f3852e84..97197233 100755 --- a/components/apache-flink/hdinsight-aks/run-flink-job.sh +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -6,7 +6,7 @@ set -euo pipefail echo 'Determining Flink cluster UI' cluster_pool_id=$(az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --query id --api-version 2021-09-15-preview -o tsv) -cluster_fqdn=$(az resource show --ids $cluster_pool_id/clusters/${HDINSIGHT_AKS_RESOURCE_PREFIX}flinkcluster --query properties.clusterProfile.connectivityProfile.web.fqdn -o tsv) +cluster_fqdn=$(az resource show --ids $cluster_pool_id/clusters/$HDINSIGHT_CLUSTER_NAME --query properties.clusterProfile.connectivityProfile.web.fqdn -o tsv) echo 'Preparing Flink Job JAR' diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index 8d47b2c2..73a05e3b 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -21,7 +21,8 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type --resource-group $RESOURCE_GROUP \ --template-file "../components/apache-flink/hdinsight-aks/OneClickF.json" \ --parameters \ - clusterpoolName=$HDINSIGHT_AKS_NAME \ + clusterPoolName=$HDINSIGHT_AKS_NAME \ + clusterName=$HDINSIGHT_CLUSTER_NAME \ resourcePrefix=$HDINSIGHT_AKS_RESOURCE_PREFIX \ headNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ workerNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index 1eeded15..75e8c638 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -152,6 +152,7 @@ echo echo "***** [P] Setting up PROCESSING" export HDINSIGHT_AKS_NAME=$PREFIX"hdi" + export HDINSIGHT_CLUSTER_NAME=$PREFIX"flinkcluster" export HDINSIGHT_AKS_RESOURCE_PREFIX=$PREFIX source ../components/azure-monitor/generate-workspace-name.sh From 99171204ed48f4886ab01a6c4e8414809bc5bfa9 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 15 Aug 2023 07:41:54 +0200 Subject: [PATCH 22/31] Increase JM settings --- components/azure-hdinsight/create-hdinsight-aks-flink.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index 73a05e3b..fcf0f673 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -28,5 +28,7 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type workerNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ userObjectId=$userId \ clusterPoolLogAnalyticsWorkspaceId=$analytics_ws_resourceId \ + jobManagerCPU=2 \ + jobManagerMemoryInMB=8000 \ -o tsv >> log.txt fi From f14af9c910ecafddf75ccfe810daa53429949589 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 15 Aug 2023 08:17:02 +0200 Subject: [PATCH 23/31] vnet --- components/apache-flink/hdinsight-aks/OneClickF.json | 10 ++++++++++ .../azure-hdinsight/create-hdinsight-aks-flink.sh | 1 + eventhubskafka-flink-eventhubskafka/create-solution.sh | 2 ++ 3 files changed, 13 insertions(+) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json index d681dcd2..c1eb8b0a 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -8,6 +8,13 @@ "description": "The name of the Azure HDInsight on AKS cluster pool to create." } }, + "subnetId": { + "type": "String", + "defaultValue": "", + "metadata": { + "description": "Subnet resource id" + } + }, "clusterPoolVersion": { "defaultValue": "1.0", "type": "string", @@ -156,6 +163,9 @@ "name": "[parameters('clusterPoolName')]", "location": "[resourceGroup().location]", "properties": { + "networkProfile": { + "subnetId": "[parameters('subnetId')]" + }, "logAnalyticsProfile": { "enabled": true, "workspaceId": "[parameters('clusterPoolLogAnalyticsWorkspaceId')]" diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index fcf0f673..81299139 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -28,6 +28,7 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type workerNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ userObjectId=$userId \ clusterPoolLogAnalyticsWorkspaceId=$analytics_ws_resourceId \ + subnetId=$subnet_id \ jobManagerCPU=2 \ jobManagerMemoryInMB=8000 \ -o tsv >> log.txt diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index 75e8c638..8bf66b27 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -124,11 +124,13 @@ echo echo "***** [C] Setting up COMMON resources" export AZURE_STORAGE_ACCOUNT=$PREFIX"storage" + export VNET_NAME=$PREFIX"-vnet" RUN=`echo $STEPS | grep C -o || true` if [ ! -z "$RUN" ]; then source ../components/azure-common/create-resource-group.sh source ../components/azure-storage/create-storage-account.sh + source ../components/azure-common/create-virtual-network.sh fi echo From b6a3612eabf3bfd2055a982a38ae0bee1141a923 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 15 Aug 2023 08:25:30 +0200 Subject: [PATCH 24/31] doc --- _doc/_images/flink-job-manager.png | Bin 138973 -> 132689 bytes eventhubskafka-flink-eventhubskafka/README.md | 54 +++++++++--------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/_doc/_images/flink-job-manager.png b/_doc/_images/flink-job-manager.png index e1920b1ff73017f6022f0e61247a97e4d85d50cc..9a6b854ab76494d7c3692f99eadcac2448442744 100644 GIT binary patch literal 132689 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 z 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�v?tLkC;rWL;(YMLssHgrD)C!~|93kqcM-V0 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%0D)@Px%l=e^PU~l@7gOcSaBYDzXI< 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 G2LCs5tjN#+ literal 138973 zcmb5V1ymecw=Rmi1`^y8Ai+Zj+BCr>coMvEZ8TWp?j9^bgD1h=8VDZTY23Ym#$8_T zbMCwMjB)=rvLBY@ zW^fc3bGqV5r1!Z8UNyLpqS7?I%H7dL(c#$BrD$Jbi2PAf5`{_g%0a`(;L;1>gYaHn zxZNHUeth}O3qgP)A|Uqj4aF2DqpAjDR2+`6vZAtSLKDiMlkshQ zI|ftAE2k9dRCcFOYOPx9_@AhAjhQC1BiDx3( zh=QPnvoO&orwU3%f+$ja5Vdi!gmWCec=%y+6-%#CIS8QCP}X}q*;F+sB5-npnG9`C27Wk z7NMe;({2I6+=@#`*z(f*m@jDnPyv#IOBC296>4M@anZzKBTvY5}v}bC+6HqPuZ5i$1c6%Xhll-gx*k+9QH~~?z{2K|m zX$il`FYhLq+jVZEfr<(l~}fzFf8@SHAr6QMCu!FF^fKQU@h(5hpvkK=NV z?PC?27?TSLJ!u)42yT5*6h&X_&oE3@e-%n5eNE>cn83PQ{1h2+J31q9qvu-#u48*| zhrF#APR~WKZY-;_`T6qa$I{U9rn1Vs1`V}-97W#lRXtTZHoFnyXXdJHhw&n?=+)NG zp_Z*NBiFws&>(R)(@*rG>3$EJuvMPUke1+9RIF?ByWxud>gp`sskC`YC=;c%nTYPu z^%&ke(e=Si<4_kdw|=7l&|>7&Xk|dP40TC)pYh_AQRQm7;h#0dt30{N1%pLzR5f3@ z$?~7D_fwas#-J;uR6jJ7<<~z3ZV(U(yR!P}Pu{)yiq*^+2-m@~2oyGAV#nMx!qmq9^_#Wg z={|lj`CjQla)c>bAwSHhl!IDvlS=?Q7K8numoT8`Te z^5xwSj?HKc$DkaT%o=8kg>1NzrzJzbo96oc67MwQys zDG_}Y9@o->vH241{S6hUoM)q@dGGtQG2K}7i zoc_EvB_$;}rF>eNt8yBxRI$`Yce{q(#^?L)M1~dZ9C=z`U36WLTcBI|MVd;{{8-Sg z^%>gDYfrj+@_W?#mbX$~HE*@_z5@)Kb(__1BQNmjB4bO5^eod^mE+AU%&1)j}k!*IX^+wS~s*e?E=(pmjp_Bg`ChyaWg z)^6$DJJTc7x$~BhdWOc4u!^vs@Pe|2>WpfSCRX76Th7-dZ^dk8`ntZlz31jnZOmxQ z_6WLm3ZBKez*!A{!9p#oPjx(Om9JirF#2QAs(j2fFRq7kop+sfJ-J7@=Tg~`j4d&O zm0$U7S_a=Poi*>c-*Z2+*+2Izh_AVYDuu^|)ynm0pw|b2{DM)uiD{*RqUO`!;Wxx@ zN8TEm`VK;S1C2?onCi4mofg*IQ<$QL`prL9sZ`%^Ds!=LJx$T$oae+Y*)RQ4@=WKT zw#h-c_M&pQ24uQuvuJ5*%-?PitK2d~rx#foSNg{-^FU|b-R;8dr5kWYU=~mZd3$g8q_6e#8)-b2A0C;so&oCT_ef!5iUDD9~3fOp<9i?LY9WrRPMmX#@shV}`ppESBIv>q?5Z^r`ZWTF(q ze?@wdACPlJ*?&XYS)lQGuoqt)-LuR^%HF*=Rg{OrK@@)A<`3S|wuBgqalN0+O;P;zI;~^pmeSIT*pNpW@i%KQQe*b?*AOmO7g-n_jiN z*|oL*hiXu{Z!ukNSZPF*b1Zd3US)(gTm4O*)E*~SvfI|}X88~zQKqkMfb{x8uX`ST+?Qf|6TP9W0cbmiJN+mjwa%EDfjzg`vsJM>6cT%I1V{M|o(Q^pDg+Q+$kGQ)LONlyc&ALVPO8|l0$=V4r)%wf`5$8kLk)dj)c{ae8 zdu1Wv)OVZM@ThUrWejez{$fNa%=h%}KrLNMZ`~X*Fm%v*z(uz%5^I3l^!dbQXUeeL zsoVfc@7%I3J07DaShTPYebI2f?{;{Q>W+sXSTJymb1dI)J-m;^E+n>j+`KAp$pmG} zF@%ak&)8ST7P)<4r@be=*-c7WquC$CY9YFpgZHxuSw~qH%WRKJ_xd;9-|NqaTYxqo zA*j%mK`8hzl6NtgWoZDCO|koKb-L4L2{dI36P-qu6IN z3lR-z+5c4?`5%DU%EiS|gonr7-JRQ=pWETHB@dslurLqrYo6DyxsWBeoIUJaj3He1 z&Mg1k$p71pw7IkCXKP0nYX^JAf7&%Rad343Ff;$t(f|JW?{S(#tp86>_RjxHETn)u z|2*O0<0K_cJm54Z5$pN2*;T?8KhOOJLvzGvXd% zz$7a*B5RUP9IONC)Y@~j^`KlY8pv@ERYoylP?;q4-4b2>ZnK>ebu1i~yl$tzEY@#> z1z}smnYZa)+u~b;m&%N4yuVOilkPC0O&Iz;S#`uoaGcQ#Z6pX8yt%QfrayTI#KDr< z;_)|P^!GpAei}1R_d(X21C5#S?}yzBlK7*!Pr)KU(ttQaA6im5s~BnahEP8e6Pge$ zyb4)wLN)&wCMfmnlvVj_QWDg^A3I4H&!KMpHVT=NK3C&;K%7!pmxAr$?fbn_nh}^9 zCDS@7P2rA>7)Yv}5ly@t=KAJ2v~XB6N0juhjR#D!Fs=%m@6~87j!ja~gV^eH#{`~O zlbgUi+B95TI|&8PJqyx{U0uwtjKAT8`~UrLkwtp~5;ZN&SNpc)b;uMRvI!(}8oz?`qA)IyWJcA@3&Dq~2C;VOZ@ZUX5jH|Bej)!$x9`M~;z{oU%m_bZ$@%FVM zs@tM>IXQ@C+v7Y~YkivO9Z*GyP3slo2~T-W-?4lu0PI$0Y-TH-H9lOQT?`C{{f=-uJ+SupI}x%sABi>1Ny z6dIc0*m(juI1(Ad{A(-70(05^!LSRy*L%+k6rZmO6#UW@WcmA2XC?_l3NK_-)9i!n z(vBgvU*_L*<&1>%TqC?_AXTLUoLVlq_%BvfxWp5r4PZr8P|#IHVirET`~L5CgCw9# z3RxKTvzS{)1Gn6uYVL#8zp3@?337mvMv6`)`kOh-Ukng&7TS<_(<`BHW=m70C8Odf;*UTd|TbvzU_ix6nk${}}^IGH@G;1U2 z_#sseb-_SGotzX{84!*-o?vnBooDci@fi3dAdZgiX=x<$kyR1S{s)WZ5?t^SsVHR+ zE2V#d6-EJE7q3-;(lT=49GmEw5<#LR@SBSTSEct0O+Yn6#MD);Ik>Wp)!(is4kP-v z?#);tWaDR?6HL!s`$G-4vK>2q?W&kGdd{S`;+&(_6VN=0YEk6Bz?%yd+Tte&Axw*j z=R;`PFPn`mvz7S!UX$?vQAVI3nTLnYj0FT0?PIdU$L^+nf{@YpWqcetlB<2b!8==4 z3(m6kNeA%J9mU5VQPc)+0odSI=(52>yRV5QZIGAr3s#LPHPVy^bSk!rszdz+tb_b`>#2#SKC5PtX+WVJIpzt17Jv#2*VI=T|_ z{GqjisOY{Jhd*V~Q|E(>XP)@itq?|{ucv5)=iyi^nK`Y3o>b4F_AVPu-~WYa`pwEX zdJwF|(L@jJm0$SWM+(F#3uaJ|a^X!;jtUL`c3RtDWpJ*RbnwxC zMYJ9z85~1N!<%c19?6jh+2~Y+UfOXL`cic7rMa-Q7P92kjp9@oe<(cHarYIx)#?BX z7CSDM{e4I-nrMrPkb+b&q6Sa@-VfUYR7S2#GtRHBZxC0tgTkp}57i}=sIhq2YFI_B zx%@~QHTYyq~hDsPlK|HZcU)vp`>OI4rA?mNgnZQ4w=vrmm`L8EtQ` z@eSXw#pkwGCkqv#+}$mOX$?!&v=V^vDb{2C7USfyu27_IH;uJxs z@y$aouNHi~a(}rp&cX0DtCaAo5NDuNU0-{<>HC}W4vy#}U55Rr#6yD!c-%bI?a~>L zvm6nkRx^hWSXj*BM|$1T9@nq4_SRk~!{;-5_?N=lKj^3J*kR09%&b+hud@6-w2*KD$!o-L_h z4%kEA{Smv-`-iL6T>+wea5J?S@h@ya3Ck!~h}M!P$N~j8=Y?Z`+s*wuZ8Kx;DWU5} zoM8UJNQL-hhYr&8w!sotCq(3BvK38FdLJM7pyJIqmWSimsSHA9nMZhd zB@BlQEKB=qP~4X=K_Wu58YJLf?@Vr zn@z@lcj`MS7)=F7)K=lSOhyYIVq*G!^~`V62c6xGkSZERgpNw^Gk{gs_vY}&)B<$U z96NdGD-+&hjE@KGiA<)Fv#8zRzB(3uI6cJEe>AB~g&DCx=^H!@^{ckUue#G2jBhTB zkH-pvDiJZuMytPGB^41Ljk^~4A+wgEx#^a_I~ej$?mkLkR8DylWi+Q>Eb<7-WzKvAMz+An9-+M z<|Nrj$Nr_=rRegdh4OQcA1~)g69V+U=S)M|xU)iD;v05h67w9<7f#5<_4s!7tkfe~ zL+c-Ti5$GEDQ~0ud%gm_W9J-+B*$zfG5MQ@ypdT`vkwgm%D=E3TsSVGtI5WpUT?{B z>*&K};nA1YJ&SS8GllJ z=P@+^(JE??TC2Hqk|Olg#TEb zA7+cWe|NXx{@*%kjFQwzHJ3ZaUIp)QB*aofFPb|YJEJ~ARtHi?+vJF$bpvtgOV!xp zy<5zJ%|uN6*x>td#YtaHo8T#S>OE@5F)fF+p<1Qm*=*wTV3?6BQHQW8Y5$+!=W&Zs zeyyjdDl-;dljgAXpVrl+M8WEsS|RU*eUK?=FT}s7+#n1*(dtUx;q{4BbMtjKx#mcJP4@t`GtlaBe;Kv5DWeIar1{fV&0nGKbBkm7X&(-CQzKG{$kK?@GBo~9Q%Leh6X$WOWB0sT|mQCvELUW98+#k=h_l0ax@RTmvkKMDPY?9W0IzJHm zR8KRCwe&!KgsO#d28UTNIiSQ_KuystxM$`(;F82~zPpB$g5J&x?l(+0(-;YhVDgj_ zouG(R!#x9wUhz(`oaC(1n$4-F5Z`XJh1NxokogVA*SZ@oWKf4XFk`^^F&LJpB4VBR zX;z9DP@_;@9u@U3obPki_$M74A=86%%pbx&0}!9=EiKJg^9=-hI~j)MKDrXpi^17u zei<4jX~lKSSMwjmxpV(EO}*=fG|47pe~jHfvB9uNrsR8TvN7{MSa3jcWNAtkY9~=s zNAGHwYJ7(8ZXCuXyOK2#E33;(IO`GQbm;TgeVXkXNOx;%EDgJFImIuIbQ&AHtkAKb zFQczUat(&vXH$i=2}_HtT@^n2&!M_c?DP~Nb~M0DuD>VEbjpk`f?-STpQCBUu^GGp z6jZGF2!YI$wCs3%wG5?BJN27Mx#L;EsN=j;hECFTww3ZQ+UWfn0`FEA zDwT$N#Gmku72qu>)bX5IAGmIvH2raXgvGsG>qSU|-I68yA4JeK$9A5W4+{1BhV?_U zpUhB@$7XVR%^Y`&OQzO2D_1Z#_uoZiCP|e@r2q-X!SlIpO?Kx@IQ47s>a#v$^bm4O zsLNmyweE`FUHmq6JR`z3vb)BZoZe)q*xa5GD@Hs2*i$dSL*p#|N_u3Udc%x*wYCiB z>hsgwbJP+UqVe0%_-yc&r$7fBknI-%7WYI~&3w2G?4~IeZS1vfy9y$YY!Grve|LOHHZ5G{ zyApmmxdA^|i-s6R=CpY_vJy%b+j%4o7!zc}Z+lqgm+)aN6I!d6by>tsP zIak>1y+5NCMB9w|Wb&~8dBb9wi7k&_=RD+(b`AMh2Xzu7&9W@aDAgD+sz%XGAEzR# zEJVnY<&L?ODTrR*a{T65iGK9Z3D#F;Mgq3aEFMBSrVKD;H% zpJ_ekf$AT~B<+OQKGEf$iQ|^PG-zoO{uiPJoMSYV9NEag{2LSE9*|r8o{w}_r^a%| z^1j6RAwfbL*@A0rMfd1dGq`{o?sq@zU*NG4$c<4fvw$UtgR93Y-KI?jA6w~Loby;G z9nnAUrF>KCbWSjs@y9b;8J3xFTvb`;Yil6DR=(!(ZG7Ctd4q9`sArILHF$c$kI!4R zOoOun&cw6>*Z3V8>_h~5T&@+|19r&RS8CiL?WAxS4)y?~WA1nXF5%K*P zP5J-GuErZ2UBh{2d)djCYv?y<*h0V-J5Q$tJ);cWi0NX|Gqe?#h)S5K@4+c0m9Ao8 zzip+w*1M3k(;-apX+#6}`!9K*@~d);=G}myN2|p`zqTC*OH0~gmRrJ_FT^P2pjW_> zSTr4L5AB*8J%k6PZpDj3z`fR=;U9eSt~gkGFs`6;SxBkWZ(AC`vt|P?HarfRc+0vG z$|ixHi=7y@)WPn=knV7-AsNjDB)bj4gkStedQv3g_k=2t@L`Ndc!Px2eZh&&SJ{B^ z9JfTfvZJ}r_x`5fVW{vAo$t+VQ3Im&w&L@q;(pZtx6pQmb9_QV0<(M3{6EZbz$D}7 zW-v@5=$N%sCju3KoyS-&*k3$wJka82E2iRn+`Z=DG+EcYo=UvzUmORSgyeo=EdNg6 zI_3I@?n~6K+*iTlQsEo2YPC&x)fVJAS}K%{Iu?fCiSW1I_s~>ttw2{r*OFATdR1lZ z!y>Ivw3PiyE9-U_J&$GpN81Wp*k!_OT<*VDgX+4Hx((OQa^_8LVXS%LB<~E^J0Wcr%+xpnAeQ7$NL6Xr?ScM-s*EN` zew3HX85kHOMukZ-1$SCZdZ87Umdd=bk)05oo)VLN8GFAa*yePI((rHt=d&99&U)L_ ziIt5ij$cz#^Je|(w>HF1(37ML)IzP4!r4Avpp=l97&IifOpA_9^v1`JZo;w`JRbG! z837h)gsnGr406}wL>wOmfq1RyYpwGSUAAeoSNo64kM|6bk&)E+ zj$7X>O_qHw?G_GgIi{wjlp`mnFD{q75Zy?pu~K_qzvKx{gf^1G^(x=xo{P@-R?t}w zUlE)dTpueM)Q4VU+O>*||Xw*X3 zwtdBJ!v}btS*g?aJ-3g8CnY68mU(@9XNK)7yPr|MHj{6b>-+KR*U8+8`9MleL&J<$ z>>szImG-^`8&m3(g!4BJOJa!2OfCn#)<%1;i7$1b2Uv)(eW4!(evc1Jw?pnNwbMxW z4eIg}7hm(ezCLSq8X6F!IwlkH%jO@XE&H8`5D$jOLP;n9$L{(fyY%@oDJ(3@gQdFa zVf(&RKVFu~2=NCSJrDmH*kV=H{u>L-_GkQw>RZDJXI~WvDZ7JbCG^d}{Ts2VBsv_zS1p zR)3cANNO?zaNI@q72xIO-1kLX9H~WGul-7eA}z`PV5{W?(9TYpRzqph7N%814{8D! zXP*bmHf(%R;`MvDV{M*wT2AiD8WF!8B-33?znVhE54dEk4b2+9_jz&R9R}`;m~J=Y zWesb11PtQPq06D+YrlKA;a7f3l|iV8%05Qw#OKc z!9(x+bJ+1p5OI%p=*x~wmvMy|Pk5=_$tNxyKU-McyuGMeu$_bH5>M+D^8>O<_h4G! z+RLI0v^uE+Yg)$NO*ap>h)SEOR}PN&*h=c(*MBoT5YmZE-h#{F8eMsESAxslWc&l@ z#9}1941V6#BaHJseh;VFGc;3Fb6qcnKtZX(Iwj5%a?eo?`oD*SPlsTQ-j&ire ztGf4k+N75F;%oEW$pB9aqEhsGH+_+sA5x#D#ieys&0j!nxT^x>r59V$|4_`GIOW@i zm)Nw82kJrxOJuxme;^qG$83CBoq)9}ybVk9wQsvHqyAJL&r`Fc=~5bN3tTL;cV`Fz49i1bv5UpeUZ*U- zqkn;aNCh363bdBVBN74}d8N)yU<{=zTJzJtid%rLn%zM#~ zgOA++_A8$#lfFg8MWq;TgV3P^@AazDfRFnhlcr%gug9?ox6*!^Amhc80-yC5L1=20 zvDg!;i6$P8+?qbxyq#C80#q7`|M#9!{4b0dCt4+a`RBRgK|2f1BX)t$sVeLGa5Ig9 zKw0}61%mi7Ca57HDG+Cuz41+bO$rbReV6k9mkO_* zf3wUwmi}ROqWT=FL7V$k#_5Of?SX?|6rKA*Wuuu>oO}L}V)+e6IrNG1_Hc}skJpMN z@RsUg-T~M=yZ0hwx|iOIfR;Bo`k?jp@aj0uFFFh0#hNH)PfcXjc-%v?PG67B{>ISf ze9CFwxoXYH*XzkFCWXHL@p>z4zkz_67{1ES79 z8ChRVp?cMwq+$(L&wSga%9d)gbWaFl>Cb{RRN60BeySRq+Y$a^ZlM{Nn9|ZvfYh4o z;j(4;v&4zLwx5!R#6-zr|Az?R`xM4qAUgleI>TeQUEM6JMHZsvGK=k@0lWEE5xb0* zXWFRSyj?vJuItX{Jx)0OGfGRWiJbmn^S0WLkOKDsgzsf@&#;pIsdkXA#vZ_X54bE%z-u^kLPtOcKV!Su~e;$NVfJR$U$$ z2FPyb!J2_04B1+bjLFJOP>sRx7v3&4NB!@pd0NiC2ug%x#Y9ARz{PL($@pA zXj+QxynJ?Y!UC68$f>D%E>A~*4r@P!t;e4qdHS0E&=I`(-Qct?LHvFRJMLI?p9oFy zjHWBQzIl-zwz`5<_wAEo4brD<$n*Td&hrsF`i-8|%U7;^oV+|V9lTQ{MUAORy-Xus zeKxu!65`hCUPl`dd?1Q|R!8h8zDsOd-H92%$+hL*XXN)yoOOHgI+SkPAz1ra@x9Z; zbza1N%jJ^L)k;u1$<;Ky{=;%)t`OJVL9Qs2T;j zQ~Exh{rp89FqV(08y4Xp9;`w3 zxk3Ev(#AqrQ$l112Rx94j%qH*+3_ld5b!uRaHXF5AGRwb+}TJ5M33X8h>j(9x=lKV zh1@b4dty7y#Ml>{Yg(;wc)PY2-Io_3PN97Ha!Kb&*2PDAc-PH`O&q@01BUh_bMYM* zEwi?k;w?gY{A~;^<+~A^o{yEC- zlW*M87OiVq#{T>c`)acJ#;sXM3Ant)4Lv7ICa2+SBT?0};ASk&H#jd=q+hFJ2&v8!3wku2W z_OxYK`+<%dat8eI#<^2m_?U8JLI4Y4;l6luP}Bf!fB&JNAQT4vg;!qkhpT>JoXn6a z4#fJO_?^*843m)2eC(mp`lY7!klCMZ(>j&{coy$Tcm{c8`0(DHG3HU=bsBvp5_vdo zyEk>M;!E1AU-q4c7~lo&f3>6%)?)AMt1^veA{P$J1RMI@*SZ6U=C*2`ot**1_>p7} z!#-KPV)slmyCGyF{PE5UvtGu+x0eXSB0gY!?cBJlnZd2_3t)A~sWzCf-5EZdq{^!Q$&z{}1`-;)@UGLjJgdlMY~K#(5MKtm z8)0pKFsF8F)%=ajZNe}2Cs_I&$X)U9@oC&o0jv69-n|~;j}SvB(X#8Xt96VCW;Urf zVs>_R$*aE|#a_o&H&k=e%R0u6{M20MI`*WsM9pa8NO;{@Ze4T`?2?r50#o(&P(wdQ zNHR`Xx2l5!8&Cn@W@kT|lhXqUE?9FKZ>sv;B*HAZ!3aC?h!pZE_Oh`x+}C1tzabmd zVq;d5G#`$l4DSM)O{p6ze6OM_xZLK`%|f)c+UwE~L~X*h^Y^*my_`T%>hx9-TX8SI zqALMRiKSMDTT=^79BP#SQ{O&u%ex+@G6R~ab_Vh0M)2uXHZpXOjT?~GBx%^avm=~+ z4dseC?`+qr+>$W|R2)>%XH{ZI^CSvA*1%jB+NCOkRlGbNrj5QDQ_lyagolZR1#-0M zydnC2eLdoLSbF>D)M9cy^p8_Ye{M`S?_ot2QoEH=O#58I)ayD7c$cFfzF_1vc-?M& z*Hf`{wa|D@Q|xo3!u!~8s#?8h*-VNMjM1}~?OQ=)o0TZxlv4?W;K&s__VytdMOi3b z$U^Ai>oE(5y$FfDy;%;0R%I40`(hyGTX{lOgAp@!Q9({{QNQloT%Davev(RDu19_VMm{_&fFF8%VKoX``@b-(CL=V4*H$n_C#v;VkT zHAMEkH|IQ~>SuY|!wn&ZOk_Gi`*s>|kXKZ7+52>;=g7lew^>CMUlwYz-3GSDX1T1^ zylq&IJr%iMa1l#ggII%3bYm$Ek$1ET3*zV;8^PwX_c&BJ)$F_KS* z2p?yktxg?W6<)^C=#Cq*E&)SGsYM~Pxbqs-9UOqqJ7e9$-tLU=kO{3f1y$=!d1~L*K z0rDv3fDgxUth){GjuV%xFFdMDg45#>#M|*_Ucu^T74*^XM=k=PCLy2PPpjeH4!b)0 z)bo^{9#!|&#e4)D-5=9pt&3~H~KC89yTAnK^dl#KRE(2pZTyV?$5kjGl%WFS>ATZq%l zophw^@V+M%xv`aB)m0o6*>B=(Pa;Q1A5`4?{s^YjVK;p5313i+0XhIw=-%Mnp3`j= zEI+oe@zqcN>3m6IuiXLekdwgvkM9}iO8Dn8ixL{Fi`iwA4+&^}ufAO*a&g-qOW*7y z2G)d;anB}*+0In-yzyO44wP|nax!HXPaj2684dYi(QOk8h0dwuR1kot^!OK2&~CCK z6Wh1DZ#*(e>A>>UHippP0y59BG6PpEJI{_{vmJ#Np`<2iSxXdB32L~y&ig+6AQS|J}Q6F zgZlmv$;7m1-YqK+_Mh&?Z384@P#+B{TC^2|z+tcyEL*6_R9kQ;Nt3piamd)!uRBh%M= z`ciM~nYz(0*IUTcr#i-t#n1BSG8F6$oBeb|<%GG7^l|P)Hjm%ME=BY$F-VCRbB{eX z9pe7WK{QScRQB%JRZhek8cq7!k-pKe=B1P@kABeBX(iwpzG0}NLV8)hE%Io}27Z;r zO~ILxZAY`v&+*?<=FMWYP7CDN3A27vE1I$!dp010WVo0?)ubbv-_-}P|BL(!NMiX-=qp$LnH-``7MSWrmL!oQTl9WBWxqB8My^IU(=TIm2 zyb`2j<#=yfTATpWWAq*N3uzf5@`(~YjPmo8 z`J|CLE>&oO-%5ZXB*q=2bg7vET=7SzR;`vyTO50~ntVWuX$Dgf*?msyHe-BPmJeI> zs6{e+CP-#_T2zo~bqZ1Gb<~dS#RQlb9~WEgL|_g?-*<3yia3MRspmoBN(9RGGQdMi zQPs-O18@m%m2KRvhXM1AISo4D#CQ;mi<%8eLCN=>uxI3THM zkQF$zqV6ZVUetVqJRd?fEeK zPSiVg-J@X6`A$g`((#zN*`kNAd=w_<(BX-;SQ+kCB6h-qm!4~181~w0x@@-0I&fh+ z;Q5z1jiL;YDC2KzK%N;M9Z@urEGC7Z@D;` zo`*BkO_9qVh*cmNOXozA)kB9eZBq2RO~;n^>qE0}VAy;gUU`PzSMz*w# zd1B8+Hq%THgisco@Ui-d<$*In)`K^ez4(RGhsl)Ox4JR!8d;#&H$Qn0ot@bW!JR!> zk)3toRE^dxB!x{j)NBvP_d(;Y6ZRSDvwUeFdL{ zYu;zXAA`>o)u_@W*^h4rhc|QNgdHep1ytwMLd#oUT2}+lF3L zz{vmjO-O(%#>{TFFuFlreN3k6aAw?Kp%Z|b{j8#M+>PWlVW+_Bn5W(gD!}wGxGSmZ zkNhxJz{So>DW*uejSRm8x~sD5ZD9Iq^GFKNL}AY8fXBMk5N>&S>&>t2klh!cN8--U zCm8QVbUHw^q6LMFLdSHmiHdNQXxFGF_8te;884RO{vXleNllxq? zp5B{NGgia?` zwI`TLZBAJ>zAOi)N|lKT7*}?c=+1wlas>uPk>qEB>$1Ce6hYen_~e0VEiK4}@_x0f z`Ov0>rtL^E;Wj~zepVvhPT||v6g%tziFffM1n@Cr$XSOZ@2V8qTH){d-Is^?(sr6? zq2_H74;9_V!{8BkgI(;S-acrVVZ22EG-U5vIlXw)S1HNUe9GE9qEG^Dh(qra@{jFl z7j+ZYa*zx3`|=dD`_8_I(nxRk4*~54>A=p=AR@T7FOjWR89d=QyBh+N_rb)<$E;W! zJ*fEZNc8|2Z3%z-fyt)hbb3lAAvq|cK^8NtmZJzZ=*g8^`C?S<>XLzP7VHB#NSFefW*hPh>|zP6 z>Dxzy_was$zl!+}?=>O6J+kj@;L7HR)PNfGmVx)L>Y2a?-sy)D)pJRss_Lb!A@nk~ugdbO zWfLl*L-WzDzy}p?H;|^0V~q1kCE0wMp}bL;D7*s?@YVpFdhiljb$XVp1v-xG81{3+ z+TPw4d`aChuJ6D}A1xqfk(l^pL0({W>S+Wgn%|6iGjP@%xh8y#M-bosoK#LMKg}^A zymAZyYGG7f%Bf1yd`UqFm4mxw(tGIMbi5(I)o&j~5YnkaYOmGxb7$bx-GE2^O0h%n zptmi+;Ht%Jt3Gdb6OFEQQPpxsL47BrFd=q$3~z>K|6IG9euEeEtaJO>`yuzIKs#n- zdU;xVJ7akORV^YSB&jU`iaNJtp>k}4GxaxBpLaj#)RCR#7HI7ww-;vFH@ctLv(sxx z=fBufYJGgTJzk6A@!Y-ZD89YxCA(Pg(7$IcO#OKs7Ua(^Jq{L1sT{r{+&njURylri z*=W~F6PjtqF|VC=-hc6S5V&F45_xa#mW^5E)Mk2dXO>bX_#-{b{F{)|8rJnm=6bUX z*nY_&odMg_(TIp^_OcLAzFyZ@BK2T#OpIc5fbEMKp% zZ5w(IJd2PvaZi!A^$~}l4<2=22S9Ugx#Z;*zIvAQfnu$EBr|5Ni8}wAhXF$9_=R+! zHE3Oey*f&~Gl*e17+NE~q+i}rjZY0Q65a;$Ql5+#g#=nyQ}3xh#;^e!CxrT@y+Gwf z#EaD1c6`&H_bN8w;8dfFy-m;qkgCoukKzE6f2lJmc|e`!wd7}tx(`o4*9=T|#83R* zJNcciz@JYZy>H<@i2ior8>r5B0svDDdL0I~kfz$Bush!`)OPXMFKC-xI`3wE_P^#^z7l18c~f;N{;9~_xuY1~*axM$ISFTptw^=jZ!(r> zoOmi^vZz`zEaUlGmnqPr>qL6h+iIdv`83$xv-L{U$O8l}1%$vNBk@LQV3GR!4TX&2 zjw=!lzIvg?wOLbdIavpkd8ph5>!FyHv%TDOy?`fwqw|{+%4JKfGpBA$uPlzc>kybWQ;ETGfXCH5>!Il^ayL?-%yWxk zeNGdyi7CV$ghn*4nG!bQr!;hcAM;eUMi{xOcAt3sxec*S1r7{ePI>b5lI30v@_U#2 zAnuu=qL(bEX16j9A0I^}?Y&z|9oOA6oZ6%~HKA^!bfatKU?h+|Q?%cL$){iXpJd&i zrfAr1iM3w%dJwe zgv;)%)gO8fx4t?W#d}1yl8RWaEZC90V6aIr{n#Q(q`O*9P@|aYy=RG<-CQl}=B;xK ztLkCKvwUxMH+_G(Zp~o2T0zBZ?`#(x!Y8)LitBK91hN0jegrEwDCRQPCEf02QUXr% z+|qfmw(eCMM;6PhVfX8{(BBr0=QbPQic9p2n;Zy#XaaUFKzy^XrWMAu(meH+8} zdX7RGK4gwuO5|ES8l8EptM&RdiMr?T4}`v~dG4h$fdvWA{dhO2R~1Y9wjAh$5Tozr zdU?k?I<6llkEesUtr|2%f8KU%W?^8Y7=krF);&PB|KVurHo*YJs>i3ozS!g!2ez(0 z4{rIi?13OR3>-F>HE|C;Mo4cR-p%yj*KRIzyfq+P9qDE_4he}LP>E=vBtaFFzv~QQ zlOB3JC*f{U>3Ffq^f#6a)!pS#Cu|~2C=M_5hkE3($DG(}PjEcBh2L{-GV!S#;<_hv z)%{CP)Y9|qnMte~Fx6W|#oNj#(ZF6rxbx3q)t*-Qx{a`FqG5n%jFBXoj1ooEB zjYfC@86e}mXkJj+EwtU@?sH&ya9zXW63S**uejE8*TMG8`R>fuif?=6A^Je;_#TLU zgQp)s6}i3`y>3s%WWO;|;0}4sug>qN;8eGrDu3XR?n_%>H%X@6zQOIZOZd>o?P}n# zBD3AXFwHEIbYuaEzZh!6ZH|GznGtELf2_pRe?#bE*(U#V%@3o1;4RW`yDcGj>ik8S zxJPZyirKHX1u7>aq*p<4jJxxcB8{D_g}#WbRnml8wUkb%*Z#qU;WveObYyZoBcqMSuJM(nIHCs}HGs@%% z$y7bagAg9Pg2;)h&pdzSS4`y?ul0?gzCJc%>94efc7DU~Wg7?8SJUGlWR-83QzZD6 z8uPf5gA^1Djl6M}I}9NVDxq}O9typ7%f*Cy4)WH?Ghg-5$Y`;YdEUAxRFJReeM2_> zqkUhP&*a&>%fB@~;nc39oAbGu{@5QpI7?s@%(|KWDJSQwG~U3m@v@^&-kT3Ld-oU0 z8asuaHd8tt>{hVxAGVAlT!@P^x&tq$-at3sY9@~uu`Uiz%q;J+i&=c`nxDD-&Z>b= z_s2%G5gnl^-`672L0#3gK%$j z>o>rA`-|?}b*CNvex~ql*@i#fABtf}J?GM$A}di5F^0Q1T6S2}5@oP1U9T}OR@cHo z$nULUVNE0%WOdz~)m?4a?aA1WiUEB{%sF4JExQg}xnqs84A7PLNi-C}K23zG z#4K-2ZXZm!#=_E%Jc48E7+TXguG@PU2A%J^s+^FrK9C!2nw2e9XG}dR#abVD9xvK1 zSgkj(xGGpOY-&nKd}JZL{^Fg%wx%6>O*TYlC8+<@!#{uIJ$joL@Ud9SX0x+P4gix z}9VPJ$Hb1QbmTwh{_9OsL5 z!aML$E_;(XlvWjee%fdMkgH2$ph%1TF=U=PHu$hvKimAe^iKoZ0Ufsa(Jyf_ktxcX zpDem0%UNauGfEYa({7s+##do3cdL>;W$^UU$vh54jq)*P6x5lrK5#{18@EAO$kwe( zV+R$>+ndfc?olBcj`Q$V8PHTkf&l$&tHX0H2w}{9 zv?NO*gOp8!Kgqagjc_W01Xb3oSLP%;&aJ&v+$|?8nsyUD6KA4>%*xEh3AZp#W@gXc zi4@V(mx0w>jsklkX?4o6jC22It#QxnXWJfy4yo9@m){RgwT<(G{Lbkw?W4j9>JEb=^d~^p9_cG0iF~%PZd(Rwc+&Uv%BEnhBmM zW%1hVY5vmK>c8jQzF;_WhT~$AOWKoksj#I=8~u8>SSgInbw{6Uj!8E7hE@2gRrhoh zTg2{uQQFr>`c>njRW8`a9x~%aeV0&4lg{1s(vwjSj~kS!w0C?&nHz*$jxTk2TF76X zGlfMwbWQ(U#>mG<%Pt)iBt%yefH9K~3~t$w!#S54sY78zv+?mnw@PHbD7@C+<5%d zFnls7?4%wlWxq*3&X_*65^}|0d?Z>z00)`-{Ktwoa$j0p)k%^Bt_L@|Rus=V*KLsV}K%dCHAPwePf zi0P)0KAcEo*o!@9@5qe0oQKlYvKLeC^~7y_<}%LA%!KI}XL0bkE^8m}Zf$Kz0-Gz_A7|*~GoO=aUgP3|{?>)=??S(m|xUk)}v4S4IC&c(+qkhfYa=?5r#IJb}~Bp5;^e&nKg(6+U9+5V&H-b zugco+=S&>~P2Wly(;bT?tGo!sCwJ{iw|Q~>Q9qvisdYC^mSm?XO2=)#@v><6NF}_x za6R)RNB)+?s{rb1C>rs1| z`_dP`fe^99sYr~jy6|*nENtC|HRcU=SXxB^c=S02f`$0jk5JlFH+>@UngvU|&v;xG zdkW%spMo#RBySa8usRcX(^Sg%%1gUc!>r(~qn*B;Cdq}I)(y)|#tfo(NZr@^!(f?S z?&ejmOekGV_&XZOIH8(Bkb${Xz$wPJbCV)K+}%WkQIL=^p*`lDFt$?%pUO8f-Mx9) zvi(i27#`7B>LH!vBRLqr7G-(at?fs4L8asCKF4Th^7hf0F`qEg@DIn;QOcxH` zKYB7{vfCOqJ^hj^a4Qp3jM|JlD*1-CNPZ32PT~IMIH}MPvXD7C%2;ZXyh~)THtbnv z;i)D?mcIa*XS#X3nzGyZWx5<|<$`Q0a#@X`wY3ANGKf^WEq%zmG-yiGQxEU)5tYy2FgLrvvXb&7m*GreWu8hMH zsd5XXZZD^Y3R+#pSrdJ$#DtZPpX7=RKp_-;Sn9Iftult2q?x5zud>I(P}z=(6cF&5kFIXvbxGW*j?TWXjENi0eGu zYp`i~{)R+$l(yP=oGwnkjMfKhgKD-`w)*^7N7t98e;QeBM^V-#^feAG$Nl|#LsHaT z&!RGNAyksBj5#L#R$PQe3H@2k;47S-j|^@yIDZIhMpx~H_+tuSe!O*m2%??T&Mh9u zEaVj@_%pbu(4!h7m@H393XOxrx?gbdZ5XwXTV zFQQ$SzMd!Bysz$}h%%@iNHnwthrBkFI+1UHw|4QH_lH-zMR|)FCQ2KiK5OKLtxW|? z2WY~`+b)@dhPT-B5dgJsLGb={3QpVNN+U&(s%gBXc{7tscqYi0s~Ub%ft%unzh+Ap zX<*+(!|;9slrU}G!p6UTWLvW}pcpBhNGCf0^WHTzF*i5v{rC`e%Y(m1ga))}qp(zC zB7>mDSeA`nRFvuxE&u8`n@5MB6w8OD%QLm%Th`f8t8KqK%QR#7u=nH=8w0Ow+!t_9 z?B)LW!|%NcT!7~7qFZoG!5hmFh=lBjgL{M?MT#Tg3OKj6pLeD=qOBNO}bv9g~u zSy!LLVXwvXK+4JwE{NtIUsZsPo7>n-`L1cYx6&jg-GhaUC*g<6Zu=S~o+@bi-r!=^vG4IF+kxozP zR|Ys#Lc@OTabCP6f5-cV|DiZTXe^g#pb+HLAWCc^i^gf!@eiI+g(>^oF;+V}Y6y?iuW%y#t75WI*N0O5&=Cz^e z&zaNffA8Lzhk0n`WrwV`wc;c)*CzS@h_Pa!{Cs_?6*(OZO;~tELz=O4B1=d*Z4!B z&kNl)#(AnrgG%osGr2c_+v^saNyIK4KBi_Q4|Un;+X%r4gocKK45p!2mvrl+L7w(5 zATk@=&GYE3?DCNuUUU@G%v9*svk{NT(vKL)ee3~qFT>=}?@P}Oh9;w}4c6+r6WEk? zlll%`U@9Xw4Eh-IWjhgc;N$^402)hP>f2Oit`%9I=Q(44`+QRzC^2>LGj9_@uP5)d z8y@w}20!o(o}edG58>VbxnbEsgw8fH{n{m*oU3*A?vZWfbj-MC6My&NHWnL4mP!}$ z#rrKrp4fNeO>y!EWD7SDD4DrCdFaq2gx(_}Sz~&^e9|hDp!7lFW__8x3|8nmXfqk6 zB3!C|@FHfseCkd?hu=g&`+)q8@2|*998;%*#_K5-UHil(e)hX2 zrlxM^MVrGJ%Fik#Len!DNMq)97&Y%tJsLHP&Tr+z{Rn;!!%>R3_vgP$ zLO<8UA~*0=6S5n)Gwjlmej{ko?V%q-qbb}F|Hx@5c`~9rf1Wl`Wh#m7SyoTDh^}cYvs!4VFJ_Wk^U@jim4Kvzpa* zSG&nU7SQB*ZW|icbH@1!zO6YC!cKi50CQg)(RndxZD>J`OFo%*F4y42mqW zOPeGXQ?M%{F~&+_okHXesfNf*bBYzr(pA$coo3QGmgAikRhd)}>fvQzL#^%d7$fIL z)h+r(*8g)u-0)?sr^oo)n&A-cb6SXStbXA1mcBl! z@qoKvL&|2koRCOA$?NwJgXj5pA|jMMc_QRkBC*bJP_F#j_nQ(o%nK?B%RcbNjW8G`a1 z+;QdmDM5irVjW5PukQ3rUwyolL-C9&O~!+dy)3Z9kYMY|**pQEZ>FdNO7)eJ^3)fJ zWvIAA3bm^uz3(#-uXtv>WTy^!xG!$oXu92MZw25>*_=j)Z!A)iqC@}Wju@Qt#QC)OcX3YD|=u&2XB<~(rHO?Zl9GEuk!cQi(>>8e2arwn}DPrT`a|4ON zxJ5~_JcticZrQa_YS`)76J#c|yU4VCbZq>VY`&W8)=$oJMXK)?4>j)FH5t^oGD`dM z+#Df=*KNP6fx%)OlbYb|h#?KGCjhbb``YTQ@Uo#4Gyzstqd0m8`SeG25cDm*#p*JCBd->I{ijJxqIZ zdjeZc-JuVr%OG-?%Ph($?edxr5+aRX`gD{wf0i_`rn=VF$-0;1`;5fY3mV+Xt2`^b zQg>Y2@)gmj!(vSrd260~<*@u*YC9Gds&etzq;p0n=B>2s(gE}5!rr19v+uCj531#$ zm(b%y@|-Mv_fEJ`a@{UIQFZ)$h~z=-YOVG6KI9TdBU*$kFryriTf?n^Z=U12<(^%V zsU9+H=#mm@49p{+>!@$xU0w2MiM8$Ea>+O3*!}Y(FrPzbbx-FJ5q#<+H>zmA^J{}C zeG{c*%e$Utv-KUI^@28Q@^%F%!sL2kP`z8ZU~m^1{uBBL+ED%>Xwd;ICIyxUm6<R!*ey)6=AP(I_sC#!SliQcKM`Pm>i6C!m+4 zsJD0;sts{k=++k_haN@6W51aR&x0AH)KDF z9!^+VTB;Jzc#u&`&EZ@KFc%Cp>0THVkLqTxLAL&sPemn~!v}_%zjW;?;nAG&#g_%P@TOkH zNgbhemu6`?wz;oOiY6@<55z1C7Of5$F{rS`Y(0z|M>3E7W^^5jTCbWZHBH{SXKPz) zY%&tHUN&8I*Kz~;J zb=dP;5y)M=1M7uGyV3C=a865a5?2W;|9ngj-*CBasVXp_9UVvJ&gAeo7@~kp&nhB! z6^swwcTJfx@5w@R&AGRuyVtUNs>`@jJ!m`bYJEDJnr{%yptKT52f85Yy7vik({(@D z%Ts*@CnVT)m+rqjN6#*8Cpe~~$kw|en-pel zl!q=+C%7f*E69eXeD01ACS8#yz=X-ycdXHW-ArE*mMkYr*;zK0DW7#j9~37Fk94q) zW?1p;1+{6!$Pt4~%RTRV!h1yRHM`n$(X__SrcyBd>dQX##VXYUD)HAi)|clwxW%up z1pAdg;$4x-gxme56PifDTKh$PCTI4rm1+*3^%GFC4%94gztHsI)yMU@j$nX-gCBl8 z^vClp@MRU>2?l2=-Whux^cT$DQSF8X7S6~NdlyEJS8ducO4_B-*`SS8GDa1iPg2c_ zH1O5H9N|!$pO@M_cQc>&1O311uwE|>_9DNgX3GYs{FWg(U)1c@0B4!xu1e<&dBooE zTZIhybRjHMDgZh>7HT%x=0Z%eXj*oZ$~(zimxrc4jysl8W4?7kdTVipdHlK89z7Mq ze!GO-?zKkyj%7FEz*n5)Zp8HmZ;7u+UmjWU5HX`uB){TBukhrH}2?rJ3|^ z=uhUJt8a9*KYZ)Jxnt@vX{dOzGTRDzzBZMcH=ahM#T(Ys2Ry#`kxcNAHa22>XxXNm zBf#Jy+Ep;gmzSN|u%ut|a$5%?>R7@QZa-F@YV@M%;(^(d3*HX1&&5opJk~bmLb@gQ z-X^0OK0XY><*&RP*3f>pQ9T?8(gfPZynhEQ=Qfg$Or9EPxlvrmgowSk``GEBE=jG#M(uKsYcXfbuyIBM zaXlYz8#<5n>HA-6(;GK)oucF4m7Trz_R-S;Ov0On%)v6B3rEh%;(=tO^y*Od%S4U0 z^~!Vu$-fU>{ve?K^&^!}aQRFCIA#6Pt1Z34|E{{cr8r&Yuf*-&zkd>XJC+LO*P}ziA9M6U9A!4A9QM^57ZhUwE#S{Zk3fyf5hEHjf$KB~5U zt!$Y)Cr9xEPblQ#7xV6eGg@zD{L}ld4r&A>2bxaUas>*15>jY7lb4-aJ-XIby5p`& zJMXt-sHk5SUiiLcp*bxN{+E*TZY0@-MTKjlUL1NM|v_ng5K;PE4v zA6HplNih&-xhLXi*8t8?;TgkI0mWI$Daqb_ov>>r1%-=| z-?@VjhK+70fn46#4ZhkI&Gy=RA4pV^Xd;jbztE-ZMeFv*4ML9@J9-#Vzho*Ftb#Uh zZT~LBfB890lyY{xf$zfw`t;cmjaRAG;`DX&wT+xJ9jgtt0>`w{oAhCa`=pQtD+sf$ z7!^GI4trzZ+emtunvus>$y?YR69S2|T9zW^+)3fr2_NL5?&=u`|DKa)EVnJs zhSp|k(WDHzAEyuLXy^`2&$yKS-~hNvdZ#0(y(Io9;`^QwhESLme+qW)kPM=Tuflkt z$HYb+YD$7q82BA`&VpkX`r6Qf4F}a+zIuP=8vC&UsFQ#p77`M z!_i$F#d2TEr{TgiAFo1iGAjxE`rh}X96FK;B3C?#IaR&RDd55-h!8=e$goEo=;oK{ z27idH|3l_j&+#a+W(GjZ%eb8`kT?A(aUTEpLM)9i7#|2u3 z1_dPmoA6n5&ey;5R6Z-f_on&bq`ZCtY2B^N^LLc1N)RldLHTmk{Z@c{6m0c`?e9D_ z{NMy$`t1DXx09jp85w_PemQr*LsmbHvuiE^o|RcWz4><*(B%f8is=P!?iH|-V{d|g z|D7G~BQu~X2b!Hc9|4U2=Xs46e@mENgJmZ@murmypyi*r?)(jXO_M&km4M00jcPo@ zAEQca7)$$4=lWlw^S{0sv;fOyBldG_<1XN@dCfw>>5HCLeS)MuX64C_MfqdGFF%X@ zW8(NfMjgCyG7{zD*i1SYN!?&U?Qe`EeFCJO4EJFltp+2V(T)9&m;Uk3!Kssx)_ET+ zodXj8_c3r;aa!sP$HlI+cJ4oSSk$h}>+meg=2_UgN>wyQ`ZanyD10(H7OL-?9&ny? zTV8uHghohPZ&c-N%oFa+-#&H4oz?Nyu#w~;FV}IdLu+jOBhGb`8}DqrAATkvhiNvc zOp(7lL%@3GEb;9#=l=Xr>+Ts`sWR{N+@agZPOHu*f`9$f|9(O2nTA{yzol;^tZ2@N z_rz@f*V|7X`TXWg1Dr-%Ii|>eH6e5OBmbW#@^9Y;5VN9bulxC22SiZSKe+L4|N8Ss zEj2(y8{el=b240MDTZ}7=oG5Sxr4x@q}~(vS)3zAg)6oM|M|uL_HF)a@C4uIyn#4? zxj3K$pSt!JEBZgrq&)%ej;3VyQ~-4FH7GnkZE1bAl>r^m+Rxyv07M#|!?RBEe{k*} zSj@b<$u5BfvkV>wk{h9!KWP z{rFHb_d{-*?$G7?N_ni|zDt(ZGRi>uuoQwA!59*Rlo&*g`i;^+?(EoVcT;McY8o~}bYKrU3z@;)A*LawJUWaRim`oH*N zbT_3P=W*_A18R_@{r;x_RB7wX(5usEv!DU1r>_7h9e*U}+^y=|kV~WQSXW%~Zs&6; zET4uS+%=K^!h!TO;bsK__lziq@~S&9`oDXe8kw%ImEKcxLYSKc`(tkL>8J`@XEQWU zK>Fud9Zq5B8Q=H7s$>zwSS$elXNmQ#))h5 zlLS!*x{nv~bvi5Kb^Io&6n^-#;qBH!hh<f6Aib#aBvr6EpwtpU2rGet-e1zw^9fX+O6YP>~z4p-{F5SVo5 zH1l;s=?o4c74wZ67$y3bujo!0;N@*R5G=C-<=ouc#HfBPmZ=M;=`kx45bQZSj)8bU zT_yFY=F!R*7*v6u4wqsmaHWK}cVeebshHw65+VMxG@iTxju?>63_OL+rHVlK2CUHW z?V+o~9bX@ko<>5N0wB7K`1kNbYFw$yd_vSIyMnJC=gU>S_EPL+Qzazg!uK0zPgDLM z6DO=kUo1)n47A1wWu9tLKe4}DZHs=x3x5A}jZ*5=MT!O%FFz{eyOlVwzk0>*FP%p8 zSB{sf^S#fd?E(9O**Wf>YI1mQ0HOn;qcZu~&}KQ}JeN+L6B~GS!1rIN#DIwVHz`R@ zec)dP=pGWW1bJ|Ds!q1Cfk}~aG>9btsmkcFzkcc%eAi#D4u|mOLd<|IgACBSohDA? zpWcIaXMQ6#qyTh;*il?PZE4e@f!RW2(qQz8!dHj&tU^3b5va4oVgX)Wj7fkcUF1ouB90A51@)B1(eWbh3&nEuBHlKJaKkgyET{0|=ZWmm=gh|NayGzK-f|h7N&_B<`EXJR{H6eSFwZIE@+s?T zb+VjSwA~$Pui;9iEZ@7r<(XeWK(dVAW6|aJg1?SAZtANL9J(xvpre9og4Av{Z5a{XMtAb08Y z_a>0rtbDJYmtwheaf}uItABR9?0^W}x;gkL1+41&qhN}29^zo7yIL^tId9xU?K%NuBEtDoE(tBqudgtR(etwFh3mdExoN%oJu z^nFl*)cG?%`joUQsk%4`CkP0Db>X|9@$1(E~7r&{91G)4NDjln7`jl5;#*Ynh>%?ad5z z!v)Yin(0d3@Gh+=tiQkjpc|UMg~$Q$JNC1*(72Zc90r;N)f-*XoyvUqQ|^Uh=LkL< zXjq-SaU-79H;?$$e=*=yEc4?(G1d1Gusoe6rP}Hr$YFiCmvk$=bu| zs)p}v+@ChQ+u|oaSq5`%88tCVOCJ*7c@@0mGcB&vel%e+&x-DSg5O!ok4pceT}k87 z4?6y+pA0AZ`8ZNb|Dr#}t{>bM(RgsM(TxX%p%8#76@E?L8y)XD?$-J0lHk?+p5YwL z?A73i6&9a^7g?%__?@eLnJTe^wJw~h2_{+UsVUpGn1bZF!9rv2~Nvu-jN4TeC!jc=66eXd=Mg8!WNKj$a@-;;m~dUpSCC z1}ge^wC-R%)N-T@@t$rv=NaZHP75suIf-#_JyA!lQg6paCJ#*EZyrl|w8gdKF4V0>4wz4h1 z@KvUG(YB$GvG2BjK&A~Rr{C8lG(N3Pd)m49UElKD|JaybC^g%k+}YcRlQ?N}(gQL;PRNqN=+yD4GWcJ&=m%= zf=WF7#@+&IB&`q&F31qOWgeqz7Q8#clqq5HgSDFB5Wq-fC|<__ZXzy_FA_CzYQv?@TvRQ6aLJW(Q!?6mmK?>Pxi(%^ zVoc0Qas`aw49Z=5wjBGlpb8CeIT2f90G$W{aHseE;F|SWYRUAQfX(flwEEV#rk{4( z0D)H+Fw14}YXZE$GVt;>$_*7`rGsgJZk{5R-rb_R^y-ORhINVZIm=70M!B406^4`a zr<;_r{-`P!z(!{F%TK|f{qXxc1yf0a{oKt%1{HM*y`&C?Li`33DBD zF63r*pZ)OQyX<6`sL@e?3v~+?U>)5JQq640&C@5kd{x7x=D|%ZW?G%+zOUT4oqu5r zeIU67RaX3i0HB*%_a@fo_)yqq$=@F{lj0#rDatVsGkIf?8DM;8y@5DqHY}(J)tES4 zY3nV0mhCPLn%lzpa}8Vpjt+!;w0z7(UlcTxOX%2nfY0!o={nxqEARk{aSI-*CI_ggUdjo^%qSrXfL zbuRB;7xIzPh&x~CSKi%ya6~Dsi^`dqM@!oAI+q`o}-iO;s zPxr{uQIL;{;Lq;DgJj?*%)f?91IMLmk43^J322Z(h+ZXa)sqOI58vB*<;Qh!&OmoU zveE@ihUT*S>U@0qGL*<1+jz2ff-Wxq7r>r2At?!p@+AiWbi%}$SC9=Fyt)U_fv!fQ zo^V|n1puT2d1b>^(JAx+WF)B1v3IX$387(j^@Mn!kSIw+@WcsYo~9nPMiZlo(qhuE zSF`uD-JWd&yi$5ym1?!HATpNm+aH}9U&qdmxKd`$B-+YhrPmIvsNbu>j@;STKD|#A zIaJ?R__>C!6ef$SuB{NcdhnjcMy$O{TOQm2x?m%e$9S2qJF^O9t!8NdU~y+D)xe5* zuWJ0&NH@0pot%Ucx>j|O(Pw6_G_c9PpJEawGE<8YVp&98S~UBucQANR+csdk)2yH{ zK^0ToocD%GB>&xQ^h*1}kU^g?7YvL3&A01?kl8;x#1Hpm;}3heRpi#=8T32qa)*r9 zG9K-VZ#5LNm_1V?M;~Q~b}-1xudwjK<^RDjWI=&aL&; zY>I)W-Jc~=i}|zfHGB@=^d(|`orhei^#+X)&W-?yyb6|sfM%pkh5AlY!?g1#MdXjR zYIIin9InszN(uK@T{Ej1avoH6DX&L0%rj!f)^<(t^(dR~9s%pys~CyI5xHtfmS$|l zi+s9AvA@SQ##bUdhLR4)&+Z=P(+-X;R_+J`#(D0JSU7ehN;e&hCR4>$5Ae&k=(!0A z?`*d(;I~cV-TQ`xrngJiMz_i0;EEWs+YdAN#qW^RaZRmPm~8J{zVI74>-w~7Z|f(8 zM*u0!mWn=kUi1Dp!lG`<76y{h=?cT6gI30!c}`)zWrr@!xDu(@M6!lIIiY8XKb|<@ z2DK0t>4sck&8$bk16*4Q9Kn_VF1^mEVa%U|D&6^!Arcob2yQWkdBjtxNwVQ%{a4+A zpBe{nW<~VwIfI(_x6xL@D#|2Ldg_`+aak+_w+drn?m3m9F4fqrFCr^C`p10LlZM=Z zv;A%Wak}p9)orlpCKPwwYDe!cSKEm7l-<|#5qQeP4MoZ>mGp%XAh5{*V&ANKsjS^Y zJyE=K6d-BVTiTiu=H=M%IcNG~?vYB}D9Y*|{!kPXlXeSOUL{Qmm5!rPeHNV-p{m*R zL9ssNd*>GX$m9lDJrcT*z}STE0y(o{dZv11u^QZ~B3tyz8M6(luFX6D0bHcfPu~oM zT`Mo5ZU^!tO1lKi{0jhX_AxHCnkpe(2eTO=y*ztC1yM~;nEB?a4(ZE>ecqz`bwzi& z5>~oBSMiiEQ&r^pNcD_AHgLOAqz`Q2Gh^G+rBd+m+>)WMnH*^GQvNmzhQ5Kzunnn< zoCrSWMju8i!E0{!6|yr0h_xrZjLzow7;8H2hy*D3FmxSyEzBIpZ(!xWZSlgT5nZOH zuWtXzSv+$t2lzRvO!f$_m#bDCbcUWU#DSAI81Myb-%11d!rk%Gl!k{q*0Fk4JQ<}L z2Ebw40$BB;H6Gh88DV7{zrf8~6~1+O*MR?M-&btjeWB&9+gyJx)P!RGf*>c_>dH{K z#Q5M9W`ufzSnC67&&9$PdPW9-pR4QG2{AsJCPrl_MUoa!@iiMUIot~(g@FDOyTvzg z51u6<%J#N6jL%+Nq^5#}PU8R+AxdiN=U$E)P0f91aBiE*cS}_*l9qx?x&bkK=)ifs zb0~hxd&@q@`>8_!Ez2nA#xHod4yFe5ZJ2>hTi2TF?Z#K`S^(d(!%({J_^4XfZQ33F zh~f5{(+bR%$?~voCtvXn&kc0#yTk-cmD*Buf}6A;BlXt!&YYBEJ<%cJ$9MNqDSlXV z+5mLyIQoil1FG|ZaR4+pt)*_OdsOce%kZc5I!h9iavG0m&u+Cq48zN!U*p4JQu%EA zmR-ENp-GSxnPgfqzRp6M5>i`!4V#(3$ZipJFW1-=1H1pWvX>@@Ar9Ruy7;2%o)r~& z8Jp!}t1t1w#(_f)vz2lG!~(GS;MG|rTOPrLaV}l>vM%s;snyc4Y;N_^pQ2UPA4MQ2 z(2w!KYbqfjC!s)imYFl3e#1M0oV$HLmH9n@W4Mw1;OR!b^u2R~;Jy%=V)v&6dZC(q z(^WR9UcZGw@R+m^jZKlXPuDe#)>_|px%VoS-|3!OU)x^aMZQtMwdWwZj+M`Rvswk9 zk(6TI?!FukT>t27?3If{fCe^S4lAh!`1dM@uP@KyPr3%5M63kz^P5)kTw3yAs=hbrW8oIgBZ`De$;E{OUPmoQv0I zW|Y;R0rQ#VJ*&LWEz4blqWMO%TD4FM(G@j!kMdWv!@IY~6^D~*rUnE4m>#k?Nv@t< zO_p{RGpKeE9y8N>bC^IS$fGf? z&cPo8nBR{EeE>F3@%>Ok0n19>e>m7pUD6=(xKvO{e`$7+ni2+F9UHS$S(%zo{63}L zpBL`N{8+ZHX3{g(>D#MXi{?WQOY-gZJ9Plh%YBi$@aOy9f_E0TKn#Ovw-}y232pG% zOu;{os4)PMJ$lHgPnE%6wLJqENQVHZaHUyzcIRSoM{>)g{yL<5^>f&>?VfA+IpOW8 zjgR4gz+1;l_Cizl+jlkxEia*z%Y{v)JmW(<=w&C)OUWfliWH4%CDpzw#i#YBwvm)B zZ3I1y+((zh>>3ZRxYZdkfH0#Unfkg#&(YSBRNwviP zyz7`!_Dn%vpyp!BIX7ub$KO%Lbbm@m-A+3>|L-EG8x`>p=Hst^uj|^W)v-8MMVM>s zY18?Q4(8T~-l*r^82=vm>cwi)O3a`LepbMna@F7iHbx*H3;bMO3Rt(!nszbpHs0qP2HF}mAMf7t&jWWIT8d`H zpGDasymux?JWC;3NUi(ONV!&-W3NM}rA{`qcou&w>UZ4SkiDYh)LLuyfa;T@y~d@BL0+w0*QGt-vl}sMzM?%R_LJDw0z#T4$kO7^HI|t!g8nR=c zRhcH48MvzFG8il?F>gH73K7_-65)mg&~glS60p>>KHTlQMyDcw1I_Dc@umSF(pl2# ze)RsVuFJIoIvWdTO`AN2Ewh^rddG7V@8nS8ASJcaf{ohWjp3v?t$}!i!|}82zA0h+ zFQ`Pf2SgFs{~jPyVQ#5HJZE$D6H<>E8Qe12(43EB*cQ^HrqDsE zZ)>JKU*mMXmnH1zTiCJbt820Q?-Gs6md$>TVvAG+dsr7oR(vd$JvMnZ*0K%7Bm;wl zL6i@z2dx?%QZq@KE02v-7HpS6s-h<$l}%+Zj~I1=hV{1JLQ3$)vK&AVQq)}5gDNAV zb#!dp#k-8^K6B~nX;09zqsM`f!J{|2a&N?^zu+i<*Jv*QaRqR^qK-WZbn)3K?rkZs zHCr|u=y$e-m?t}H^UL`x>D!Z&VdiA6=vk;i!(TnAY*?tRQ4>$>+K#+h5Ti4x)mP;W zobo=8-^j7n^;Hm5Del6ST;JN9R|fj?&<7%Bom$!=e7_6m+)I8h zC_u6A$><32btff42X~R+#+wch5wYZR(aS$Us`pW-lq7=`p|Nk#b+od{evACXIgPxu zF0}_wy>@Uxolz=+@nkd?C)FVQ?Hwm~Xzi}5j#&uewm_ULk-#j;Q-1h+q{V*}SaMY& ze(zCtq9yrgvnE)Z<>!n-#=`@Lukgt*sCdETe7c?!a) zODNu6Xq{J*&`{pet#~Q3xfi!ek|8VR63hql7aUt=VnIC1NQ10yC{-NKoEwU0D{B@b)ZwsDeZ&>(VY4eY`fvRa?8X$`X{IqR31! zS+t(C5YHY{DT$w189i+3$A3WCZr1qi|JM#da0i+4p`N4)X6nm-Xp4}dDr(_ZN~-W_|InT zsso~-0#EB`M|froU&tL@ZpX-c9K8UF)iS*GCwf7k!4#~3La!@7q)@rrSBin@v)r-a z<7?PTZz0XACWFZpp7|M8t# z$Zm9XMhO)7ZVrA*IC|r?lf*~d(cyke?~p^gKsdqAX31!`V2=6xopuVC77^%ww0yK# zVySZQ3{l$O0e~)TKxVh>lUkL_68#~s4V1fID!?Dgv=44#L%@(YLIi#+RH)X%eRKB3 z$?Xmn22%&Vqs?cD7@tQ-UKdoWZ0Q>=_=j^Hqv@Sb#0&p1Cz>_mClR|^h2>jNf_J9W zP6!lQ263q$H*R{E8aqzUML4y`b~!D6j^#~5_Vm61z>1;ss1ZIp=y zu6xp6ourqR%wtlG^U>wDOCvc3P{+PudzIfawLYwR()}q@#WCEN_eK1JZX}L4-Zh9K zc4ybkv3`FGL7Q0v>#j=#8I2J$_MQEm^78mZc`12h$M&QDii^#EtsGZl9-0;Jx+o!(;O!+u04X z`4USvdDo1%)z5ZIBc-DHh$`P9)BXJQY$nG&Lj1x?ZTAXh??MB7j_*0xeeuA^3)|N2 zW?j4G^l2AlAn9c0K=c)wZ=XPe+d}yq=AJ;*_?f!M*6mDODh6I#H7pB&_EJb-ir=sD zhPGzLMyLx5!Y57uvBNq0mzs%DZ1s;dIpLr2H=ap>gn1{>RMZ`ZHa~)2E|um+-z^Wd z46p@!oM<@!TZI449_i$#)OQ{3K6S_MLVUYmZh6~NR-dZ5!C;={6E!`_b{rQ6vv=yQ zESukut1193R+-f^6H1Bsw69TPxj8N~a~03QU29D_JYh}WoZn@uiljdB#PUmze0E#8 z5dc*f9xNIy9Dg0Rb1-eo5^p>{Dx9j0c+U>T-y+{g?G_A4hFWm_cP^2C%I8;9#!j4vUV)|h#Bzi0(%l;~XekYt_B{9=o zz)aEWK=+Lm53WC@x-Fz8BPW!mwHzA>iG_(0tT}T&_Q(9n)cWc8?KOqjO!8!m_^msA z9X7?PUgmb%{?KUEfp7r$UoL*B3S5TN`wRe-6i)Kxmqb;9gFR#KOn)e0%=4U5n87xH z4TxVJTgaauHGXI-p@>YDv^P56J`9cs7)aJ1Ryg=WN%G1^9aQ)$YrXapPTV#8%<`l5 zE7rO$L#75Oi)tV(mSK>ZFAL)1NMpyXeyGy+*H4c#)`Q%)=1rLa6xe~c1erljJSry?5>V*ueUumd>Hm@T z=J8OsfBSGJHAq4TsqBR8`@ZiX>lm_(eW`3ATlPI<8QWwT%h*apvNI;eF58TK z-~CS4_rCAvx?fMv@A~8U&&!L?a-Qe={G9LOeH_PI#P3Jp)zp07f8wGc!wqG~6J)tSqwjSG9 z3jfvxuO5fF?cwIE@<%5uv14|@O;57V!~7$3`M*Glift%xj#ph)8C7Nc50}@kR`dx$ zrNlG*_u($f(WmIIP&b+>jMR{4BX8~yFL|i?j)dUS=Wm^$kmTT=GjX1XI0^KDe7u^- zJcWw$;5Tayv@uroH&)kwo&gFoo)1P?Wj#cI)m10xX_>z@>OSGy)hCNJY-zinUds(y zb-DoOtQ24xJ%7~^K*Cl%BDGoa-{Ksv?K-c z3k_y^JqC^-9GySE@&tBPA+Z8q-kpYU72e`6XZHM_YhN!}%(KDV*WOS(R4uGacm?48 z{pPtV+#)OqrEzU8`*u;u8FYmFcI=zB#@enc`;}9bm9o2y&BagWiT7PlS-eXA8MGM~ zv$~)i-a3vEv0Eo%nZ{{1&N+4;?(c5~VTY}fe_k;-W@CI(7G0#}q5UkSw5F|ilRE5a z`OfhfiWtRjS!hNhZ_(krZ+Dtllz9<$vu|~OmEL^(K=9d(w|^Bsn?IQQHLm-;Tadvz zoeetWZ1kUWm*J5)YeMN6zU|VCt7{pOcZO*7&XNe|wb_zbc56;O(IP!Zk#{g(IaG@J}DWkxq6zm#$enu8SiZ~&O5 z*jItBxrX&e$QGUWvks0w4u{E~Y;ZD4PXBI?VN?eA(6a3uXmRzlZmC?+Z^EJ7OGl@Y zVHY%&lY)lYDVt!8{q|?AfRE3s1_cLx9ghZ(2y_Nf50!|(ZuA+HbW{)Nk=FtMim!a_ zcricIJcRjshr!_4>|1(=080mPc6{8@`Qh$@_c`5RoOs zc0dN;Z4I>*`$yGRH%oQhTFC$8hkh!NFPmz<}q@_!EU&>ID$Q`_wU2PxV*1*!Or1Ki4! zo-0MvD#d#vx2Lw_`CYOJlR|ykycO$S&=g;H99!Wh{_*`UMm!7OTiA1~&iDddeGT=lf+D6}ZP49u59t%uBk-z+&gjR3}{s9=4x2Vq3iSa9#KQ zDxhze%d^r`zU2S)BH(EI6Pur@7&ga zs$+Cjmj~OF_P!}Vr7mY6J#>uW+Ag4xE zqToq$QTLe5I9=y?f59%Wu9Ou$wC~5qNhefck=sqgx0)tY4o1`VhMLZ*dYk(W79%Og zr_KsmrS;YhGl^pUPcL2Ja=5q}tool*59jF}_HpxsrMvX6au#c&d@SnTf|B3| zUC<_dJN!-lc8y2NjNFQKkyfFl4FJp9vbi>QypBxao*3hwTb)M&(N2}JAvgFZW$aEx zYd2N}Aj#?8(;ER@8x=@ISCXQpN69CSj=}D5T6;IWz1Mmtm5dCBgbA@Hrb@K1xeooc zjt-PXT{n4i`ti!i+}QdyQ77cW+Oz*8lw~B{#``K2dRWUPhm+lTv9^>S0}p0*k0W&b zeELWCJ$<^I#NIb$@>z?C?EE>OF$jJ>7ldtcC~q8|p~p$No*sTVO%A#1pQrw5d8@fG zzKDL9&(Oi%ZP=lx{cxy`{%Mqmv4=6==_tnvWBm}OP$&Z!BOZP**IIx?e`GFdY`ta3 z;U>V|TohR0y%K7OX}t{jCHOm9vNJ2>E<}LRxlvK~xqgQmifFcGXh>DX?+at|?>Q8W6Z6&zT{}3#y9Q9uXV6L+ z``nd?%nWX7pKGSp)mpUwg)4?$SjS-_REed3pI6v-XKSw%3=pR{w!JU8T}WjNH)orIpLlwwkf{nkP?!lwqgvLdHZ^wg z(ib{Eg=*xp{4vtxfBJSPcAJ4vonT;xuvyl0=T!0LVQ(gA>l#}=P|dJ^DPj=Gj>@yE zy@llC1gpC9Nt=|Wgkh6L(xh?+~v{D|t0^w;Ng=3B9=29IaFS5ycU`SI81YbJU4_l=s zgJbd2Th=cB^$`mS#Qt|#`%3Zn7}IC6Yf9#qOy+c+*LSoX>QQ)3-VC?4tKS zu|3#{LYnG^#pK;s880akv~Lp0{+KJJOEVFXm}w!@{WN?Zk9#uri~CXKIPZS=8U*Q9 zVu(O-G4llvaiX#k0UydnNMBiUG*5YS#6GY*I$R)5zNx0iAJ1|fsn zK7g#Jw7W89jQq88))QqMR4kJwKt(0mRE)>%#awq@s)HS%sucao0%g%2*M(k&)qJ?z zFv$yt90I_Dy0*u<|+&R#?j zexiiNUYnF@2^CxNpu2Ca5M+wuv%_`14Ia{A18F_wt( z-;9~HW!6+{>S+S}Q^1N0+-iD!9+DrqPcCllwP zb*qfKF3IaR{CF?Xxu8X~Vw=D=Rs~qn$U<7K-;s56r6iZ#_{=eGAL??Uw#>6 zQGCJ(q9XN>^u_}zLSf_`?gx}GP%^jW29<2wH^iv|Ef!r$`JFksP-P1XC@=$hWY|IO zbj3;FKKHH#t15QPL)lJk^h!L3H!z%ZN&dIut!h)Bb?Hi(vR|Q?W-=}#txrg%vFLlF zxr)@A{fb=D&|w`)-F~wobq{6qdq1CaoI9`oVwL%d<3(=Md}(LCa_-LgCSM!Tlr@!? zQw9iBF1^^H*voyBJL6`_erM_l*&lPwpQkuU6B%h*A~j~U6S#5K`-Ui-By$#-2k zGmtU<+rkfrT2h)Bb)9bGk ztAn0VuTcZB9dPL42V0Wk@z-R-GtbD{rShMUz3RYAZ#5LvSh_xuf-;SB<{(CIBrUe_ z(Yrq*G#{NVJmsoiscRGK{7xvo-ghV3a0YJgP=c*YPw(DKrVdFZI5r3`|1K2r1BCO^ z467d6W@rVYqc-Uy)Sw3Q=HX<(RY=L9p`t^g8T+7y6C0HKMtj&jz2#kb9RdE$S$XF_ zdA#E2J454?`G%PQZyiR-`k?-AUZLYeBQI&*$i>{0;uw%>I8f z*a0I;iv(<3R4DF9f}`BrT{kh*gym*p&p7l>Gv8Y&@xvAQwiAuMol)r{Op}+90RBSiyY@*d1D192q>8JcY=eXV%s zkcmAFI-U11`j2aY^n#s)$FcySSWt0Lva^}2lR68%9(mZ=J8x?DS5A3Yp?iZ&b zIYg#@o9TkE$@sabAF(vV#ZTygfTZYE7+_s6seA-?Y#~z$>{9q2miA~dHB0E9Hnul9 zavvW6K;Wkrw8V~L6q@KmmF_+KVsoXvZ~r*Yo&y7Y;fbXxLx8%=Lv2jn{#FzqBh%4oL18ZutC(XZ^o;59P8Sfp4_78DyG0 z8@f05+=JZZ>z^y`|IiZLGrVA@;h|0SsNy$e=+N)>zDy>Fsm^^#k1hpe4T?WK-aob1 zZ_F>)>3DDw2U+|8R0`!t<|luet^dWT(c%I;RD4OQ((fx%yf-j%f8>w`=8*9x#-)?Ds!!>;D+hhd}&kaGv9>&Y6(N z*(&Yd<%$Pq_h=M?Y6}8!tTsm4>R;~xkq6g~nG`5_26!p6PWNyAX=nRqI6o(xaX!%m zB;F-z&0t$wiuhmeL3yUEKPQ#Vss!%!m?rWMqw~-CJ5TcR%oxE9U;a?>?V3S6Mk4PY zgYxGeDZxXfJXXsN2SkjB%@=?ED*bbXrJgA&^pV<{55Wfrarx@#nj>k+*B|kUv&3{_!s#hr!(O(cnjvNTyJHgmjHR z^BVqV?A{oFl?RR$9l z4w3>GBprF_m%KD2Nc|H1jz0>y{`+yxo_7)mtKhbu(*?lnwZu>|{Oj`m|6zy#UgG}k z&$*Ti+chHLg4R{p;sDf1hkXUt~Vh$77r5T_=p> zM@VKDCMo}u-4cMqqq3((<-%;LX7<5pybGw3WW3pM7^TIth5a(&+;T>z4(#&_K&gBT z^nkI8eL1pg0)Oj*KLC+*%1!xcQn2bvzHNXKF{EJ>S7~cum28=Cy9gYk?!XU%jX*g> zIfQ~vBE+E65s(e$KpI&faJ;jOOI1l1q7qT%5Ixzm*aWb7(wQ>KysG_vcv8?UgLaOF zt$t}?SGO^^?j}Ho=4QmE-!XOqLO}F{s=1`)RZKiyZgw-hV-vi?;kf0pJ7K8ArUqoS zNoOhQ^cJ8qq=GjRGaoF{MG|B6`rZ{TOma0Hnaf1d+5!;8m(h)ktNztib?4KcQoAa( z`th$f0B|eqGkAyf0ou=%ZZYHGZ>CXXWxqn%H}_Geki~&~)lTFSVKl{=hH7Et1Yd+y z!j>B6lyd^sw-x9M4ONN@P0JzZV^IW!v3v);(7}gMvn6{i2L2-6JFWr5)veE5RWA|= zX8`&+w2x4a*mwTW(V4e`P!-*80Vwk&@ScrN6gkQQ`x>;w(WXCB-U2@ezDGJn&Me%5%F_?1Tp%~Bz(x6GoA_(VRwM}`(Xv0Nt66!fcZ z%KvCx7E~M;7SJDVvz@p4dXf5lX-U)3ESE#C3@kk0)c$1E{}ifY;yL?vJ@>d1rj&8n zs_OF9mnb3)*gC*WhX5DjYTpa8u^W_$+tpwGBGVciDrmMVVpa5F;h8%wk{Vr&rE#q9 zy8?i6*VXZ{G*JIM!yF1&=}|ZJdK7SOSP{N6jyz0Ugau_Bs)$ct$wTbcjhmKgdKZnl zo24uh@vF`{5CoTnd;|F19_OB#P~Rw%$04rd$V7xSM))0X>sElYPzF}5fTZ4*E+}!p z5zwX>Vk4mIP)0a*EBq{2^*H22KEv&N(NN^HM7u6(*t)9ksU7B~?a1eb@}icnbyy>w zeNv|oq1T#kWZy+&_UZlhvefAV8aG{!33LcCOipQLaV2oV7Un7Y9*tPoLw7+k^a-3Hc6*s{%0_*B}vjqYE89-(!P^1K66#nsG zn_$fpC;zSnP%A99{ubGRK><|$9GBv~no;MU(r<%7kD2PTcI7Sry3z;6V^FQG&J@HKE0nQb%`1W-;z|2y^AE67rJ|UEyNhflmMA3LD?^Lle<9;6>CQ<-4Cpn>GC z^CGp;3qSA_J_ak_AEeq-Vsu@|K2xT;j@eb_6F}{8`9lEHO%wXxfDTuvz85_p;{Ss= zF=;l@RMb^q1819`-U$eahHD;KMCb`s;pNK7DW(mo_cifec*!XcQG5XV^!$7Q&DEmO zQ?2nxx$3Iu-bX>8xP7bd0SYMrbOG|lV)A52-@_f=vl0Bv!JvwHBmAm8SiaDQPqd+K zn*!N#JaKw#%G4jy9rM~B{8K6*tc!rV8vy~y){#yBN0gj=5$@#oh3}F zxgEL@Z56-HBgBmXb(t!vj}>eS}wy}f8n z5q#}gflQWYS;EX9$8=~!1o8q1QA4OoE|b^yK6fXN)B_dCj)M~}h#9-!9_Y;=)$=fQ z3@kt~2#4J+be;e2DAATQ=0W+!>C}}#enp3DfTL7GTc}#ZnLo&-(xf%7Gm--sLx0N~ z;~p~+T}>z3$Xls0y3GkK(+cTQQlX&??gxwc)XO#S9znpQfapC~^cZO-Q0W?(l>$l| zKl?rmo*=idm5$fWwzn7sUHEA9%h2=S|F7tufd#1u$l+0sK z7iXqE22eORY~T)9bwd;c*B1-~!N}6Q*SZS-#4qik?F00cvct{ULV>q?J1S{%#e^U_DFRWcPu&Vuk)3J@!MoG1$`auEsa3;;A z`-x=m6;jKrj}stlAzhHkOT8}Hy}rvKm=iGNwDA6*$oLI1kyOcMsEeq}&n`_wxi(?F z82(&z?F&)gy#i+s=-LPn&VnC_NemcdVeb+gOcBZj-4cQ*=#ZX81hMC%Id!{9>oS*; zwZg~wY0e5Kp0e|nl6EOStmo6+AMN?M^z>GLAZDqM(>UJl^7=GP?UV2LPD3KlJF<8Nj%?cKU@vvAEZISiEZYj` zOVfKyzOnROwS8fo^~R;VacQE-Umy0Rb}oe-LaS!~Ak^H__jinJCy+zwbI6?}9X#c^ zmKDbgr<`ElmkPIM8g`Q_PuFJpDSfp8uwK;t#aY#!OlfBq9dHk>u(!z{VJjHfD`;Pq zjOA?Dyzs773Gmx`Z)6rk)gh8=_s#Z8bff0WF0OAB6Y{r5LHUHyG2YPECu^8+v{{bM z{O!&CqsAb`opLz`Z0MX_L0jxV%w!e>y6C$zjI9vm zLmo<(+mWZz0ARmIx0L8_`5zNZf8qzrSvv6An$xw924lu=PHEF4uZnC%r%Ls~;9d(B z{9RY|^p6T83wv3uEI-Gs6?R)=n{#cltnS_sIQspST$@#WjPPpc!lQ?ZL5A@ zu1gP<<<{Awy=gMRP#zgG@cwa1vx%ZfW#w%;%Yv{I&G{9edDE-xnzh#L(dp8d3fBPJ zDJ%uD^-26mD@P_EsoGXwwKq{bwv)LB&!A3?2ZVKP7-bh;W5GBhVXbgCe`Qu;F<8LH zExDv>r0^?)ehUSJr{InMldJl|IzmKIc@mG9PHrhEt`f{EB$(G5vMaYA4Ls$8Bx%?v zOfcan7Mpc0HiKh9+P6p4#1^<_x*! zjJL*6J~Oy0k9FrnGfkw*f7d35$4DKrMz|UBerCA(x7ktJ9c!(#44*=$7A&dTn3|pR zyCdbV2Pys=(nQoPW6$ss6=bz9{eVj;vZ?U;fo|SOlXIpCIvI4(d#1}(yythdUTs*!-*RmVd+Bu@xul#k%ER4+h$Ls>;`Y=I9xT0C1wrKmB( z3y)}jD3I{tMLwV_p1+r}f;-(yu-pZ0{Ahe93zQzF(#UM*Z5{KLZl{sxGuI6F3vra^ zy-F|UhA$f?x;EO^m+b5AhBkGhh%MyQ)Gl>{DkhaadENG>jlv8gaRyk`tkMq?;8lu0 zASM4xT{eAU-MD-E<5g96FBoY|miQ$Hqk~E8W`{dCK!2~pIn=chuNGM34w5*Mm#9kVA$4i&pymO+VcH@X=Q1?pDYuT)8C;l{Oa=wDwXcb`?!P)1`S#M)K4v)T&{ zpk`6GpWLVHId+RCZs%y+n=T`X^~%S|@qX4Nx^v9;TExLW{69}|4|we!PB##*%YW(HO&N)&EHlopzX`dW)Uq4azo8#i)MT&R4-5G;qED&9Tl8*O zQ9XUpbK36|{cPC{!JKuO6nQZ8L10ek7qO-@AisxT%o>A?3^Yr?0``*!3_`gXhT zs)6#A^c?5KYtD8R1i_Ei!Ek((KH!8eITRgY;06l7ST9I{;hTITf9!kqplqF+mXynk z%t@|wCD{_!Y6{OV7;X4VE^ctNhL31XVNCAWJzxALJ@mjCe+_dGjhWjj-;f;-x$qo* zv|9f2QQ6X=dD2`9_Ga8lyK<<&No6Z27W>LA))^$9ncF32d`&L?nf^$`FB(Cy><5_*{mYkQf~UF2R+tc@7xZ;1Z7fipOjoX#)y z;>D{Dq{=fTKF(1I(r6B7aq_iiKZQJD8^@pPHDI8z|1AD>`>n*lW2nd-e=jj*=~<*Q zqFbHae(!$B`oP4d4t*4okW{-k~&+z6JY5(~K^Kr!*i|M>GpU-Hzsf;8N7hgG(St_&y7=0wQB5IqvTe@37!B0o&5$BI|;T zt5sd4Rbk_jD|Ncd_r_M8H@F59`YJS*Z#F5bEgS)23v-HZj>~-a*Iebn$ll%E8mF22 zKL>#xOPEjcMO;?$=`ddi@d}|%S*2oGFTW~&nO;Lbjs-Pw^k#~${#YAy&iFPvc(oS= z)%9lGgKmN*c!MhazB>Q~l7-Qee=74NmHAL^{b99>X_}H78!fS24oo6smK7VkF$o%U zHm~0iXV)ytrWc(+?v%EFFeJj>R9Wr$UZaM~>)(kCE?I#C$5@VYz2e2)dYE3 z^%(MHB1AJVp0mQd1H2V5QI>gNm>bw$!=QJCUYzyZKStET{~kcmZQ; zJJ&k%7#S_Jr<#xLZ$*hB4x-UWKC#tu19f8@p-*IdP-tLNHXYxZ7p!d^CnR|6Ey`42 z7iK&0m(G5ClNik#QHL!v_C#VF>-4Dq36BS!XK+)k=Ps5P)ZBItVs0;}7BR1j+rwA_ zQ|TK9T*ZE%2i#9S251DZ9c{7?b5;BBsqi;F3=n($Bba@=XgBJxG~pTy+vwUuZY<0| zMos#~OSNXVHbS;Xu0*p~#R0qD4DIh3W!m^XSB-*M=Mrh8+u2>}Ky)p+qYt<5_o>j? z$5LDB}OEvGlyq?>A{j^~pFfHbA33jHorm&mB zzchM0DL=<`SrE4<=NGs!!#6iXUyFW5Ug_C>&G{p z55B9@s5BQ7DmmVaa0XqloYns;%T(2ipZ)5}i`)DrFvUr2!|#ooM>ER9?wPe=vgVDa zeq<;SOhN^rXR)4XVlhm$ds#2;Hsh2E+?tU6C@!?dE-yBkOk`%j{zmY|`_G+C|Lp~E zPpo=C7tRJ{A@|Z~ENT7N48)z<#&XYfaZ-d;gT&x92*e&ji5q-_bTq2AKk3vs=tk}4 zZY*8pL(P)3=I)k`Z_Wxdb>+B7Ok6i$(S=!I_g9^~IYL*d$h8K~y}&N|Z6&^zM=wu~ zZ^~CyXiJ1rPP4`~N4%Gthgu64?*-d*3Psw9t|7MRKfQ#78BqmMkE1DWN> zQ781FH1M#&S8=&Dyf7vcrh^M}Tvp~?GU4$m`+?Wyx+B=2lmPHepKH2F+HH}CQyEv| zrezj#5i*ewmd1g0-f9@2Ef|&Y)g&m*6O!*xW{*}bR|(aj9J1i$dg|YBaESCnGTVuu zj)!C<`ZOKPT|;@u^W>#^S=}1s7kWwTnk>*|&Cpt`s+dI>adi+ zcN(&MMSgCtQ~_<$V`Zn=1XbI;9)9@%v*6a@+>aAL0_Y>IhU)HhA ziF;Yzt#CZk;9*^orge#sqtSdtB9)9r&*-QB+D$-O&>UJUGdp;z&^6s`_ef2oaI=TP zudl+eM+tmI>W?IbSW4Flzg{VQj&K19q__A`bx@j+q%T>Agqh@tEeR66yDjR1J8~F- zcx25-iM98W=j=Gy3|&Ea4n8sHM39%PGVF?!ta*J8uS?5Q+{TUcy?Jny-z@=U_+-PR zw?~8B9*pHGb$PY$)PsVENY6^Rx10Q|30lk&yG zftf-Pgqx+H%5*4-L(^jxL(j_WPhQYlF$njo`+8S#+FRPm_H))q%@Cre#nJIU;0|-% zN2VnXfYxdUoSJH)&gU0n)#b9mdtYwLt=r!I`mUDeYOiydhz)l7Y?HSdr# z^f^7(Ey_dpVLhJK*j?u+j=3&SkFdp=XPs>X0HR%F!zwtrczrK0{SF6XoBYeQDZv?^ zXb3GqWxufVuf=*T7&TOEr88O|T5rF{J~zZJn&^lH3rBwyaj3?OYaF(&x|cN*f@>S~ z$QLS(t9G94>INw48aYX0*{y7H1o{_xls6iZrHryffA@A$Jz^!V(ey9DCC=T&R%MuZ zC1_87u%Txjc8HCy9BG>E*3!1m`=B6jjZY9%3VxI^<(&hiNg>vq){MZl!rNo;yram! zcoRmi-V^Z{vz7P@6IXzJeV)ktZH6dBa;S9n!NV!7=}*Fix^DwpjKH_5$h-Jgm5{N0 zKo|MEd%c3dfNYLX2RM}Qh7CJvfnbNfz+LrEl}(@be}>m97--29(xL;cCU>jVrJD{u z4#>uOK()#VgW|~V0d#%3Hp(*an}tL_O4wdJuuXDi_V1FO1e&|AFsYJ=fRn z<||MTgXf5m+>X^kVJ%sakzt@{XzMo{sL`6ih*?&Z%T^+(XGLSol9|hLoMh?p6Opg z7*7U*OsIp~+8gp!lMwlG)H*?T`qPRxVX0l4yj@w(Z|0Ye8GT9EgA5=H>IiB zigSw)xpjbPU|d(yq1O2{;H@*z^+W!5Spb!h;?=HO_sg_~sJw`6@@^Sd4_($-hPZoa z>3X2{dtdXAmulfOHBW6{#piM92rImOBP1{z7l~3BtZVN6Z8n4W%}+js$>Un_l35T$ z&X)=~`{q+TMR_tWysH(~3?^2zn+$_Hu#_DQKFOU=z-z-8QO2B(zTveANIOG9vSm8H znO@C2DtEtVl?T@c8(7CFoaG}B2+1cX4rOrJSMny|i(--Qi%q>B$VS-FtOA6+UV*3A zJ&gUsA+Sjd)J2_+MPhniDE*Z3+_HY+bm><-bp0Wj%vh|$p%lz`EK^>{^n!M(_|VIf z7bLmK09u&tAwQ`M}a6XXHa-P@cfFPu{%Do?2-Hw z<~w4Qm7G$IK8zS9_j<5SzsC@q5X^Ym^)@h%oQj5gSY9E?2V9QC6)%3$WNI*FWF8ijc0BD&B2g?$*K*2HoIgPs8 zUFaUmF-?e6RMB0q6JRu{lRHV9p~k2YYHy9^A}R3**Z2XUu$6amp(=QrXy}ScV6UrW z6}L!-TF@zCD%bY$7_TB#5JaLh9(e>LCnl9CrOI5)@Qs2Q!}PDEWbib0V<)(n-?n;I z6j?1(pf219`m*XU%TP{BBZYFoh;YgGW_bAWlICsR1ZJPZ`q4zkf^SCY(Ue~HmjXmJ zjKeuwIU}niC9|uc7YnJIb}$RtcLzNe$m;BBaMzEs2vYRUxiUEjvm%-IhcTsW$2<~P z_;jIqm;;gGlxrhb9$O{^!OFsyb-nIkW~l{l4dxxTUC6&9Rzj1sZr`~YV~aQBDOAD4 zn2V9zG+`7qF1oaD+kz%GD)5;uL9cUGlSSOe?w106DS7A$L->Rm9lJ4Ud#Pn!Dz(2M zHc%!Ht%9vezu&&C`qb1QY9KTDd4e}&tSDv<|4g@WRQ)sl3ieWn5hZ-i@Zmy$YMS;u zUantD^&~F2RJ))Qno2*5(7Kf6_@)%v={CspL&q~_fLmhsJ=}|eKqO8-CQpitHxdI& zZY;+f5qUE8Ekw3QclVpjKGp`<7U(qCJiJF>3Zt$t8uC_HrLNw@Wf(41f7oElh~5r7 zJR!|xzTUj5^m&Tstsxzv%HrEWh@Z9$+()nIIn4uC*zj&u#tq6O9y+)UdR`$2`}dB) z@-qwKUom(d;jNRPbE4&hKc{&pu8Bd+C}T~Y%u{%2j4s~+l5foIQ$3g6aFPj{OP$=DTM`YbsX+O^emYNS)1#by@k zlTXcVklPGh@J!Z8{jAqWMh7ikgM=Xk19h7?b!_hCZsgy2d35*#W)VWXW}9%uccA9c z%lMp`gE`kG*-@8=V-zS|o*MR-Urkt76qrl7zH!9pt z)6X$N9)R#|+rvh7o=_=jw(&$uPcS-|N+Dbd_dOCuM5af9K6-w!q415dbLn|mP;}wQ zU$(baH|IXpY{X#i=bwm@J5(hcaR*2doh#mh*zqqwhTPGC`lsH*-^~uKeWx(9d7E&5 zd0KdSvkkEXu5@s7i0;?QWn|VJl`T%Bv;1W2fbZ|Tz7Kz&^w~p;z|liggmm?QLRakL z=@_D_Zp0HW+~@t|rVK3p`xR$5LVf>^`iEsck%4WF>TdeAZ0~_pSxzfCvze*t|BVzZ zhl>C$XL?P!MvP_%^6t_Qf>DB;oc98cL3Qtf9F6FYiC&wb?*?^tgDD(Aqin(Px)bG{ zbHJ+SKyyOw(}&m7s<8Ve4k4*xg>nhv_~J6)uEfjJ+z?&x$yIWos!-DO8Iu%($T)qs z^kQ-sQrKCLXRK7zYK-@(YX;X=;dumcUYeAWvZqUcC3i=D|2n%7Y&F)0(EB1i50in_0wO6?Gg_oL;0Z|L|mwq}=Nqk}$YHYo@{1xn{cx#znC1^7KP z!{$$U)=sjCXxqYAO`KQLyw< z3->Q?ME8t-(gkT=s>%!cuvzlJRm@K66~nx$=khqUe7W{P)>rzJ#vTJdW`=qluj4=< zlHbl>Cle9d9v?WzKsdTyI@I(FnK27ddwHqpCRve1e1htHV6nw-(+;W>@#pil_rf!l zb#9Wj=2|BZKV9(K$yeN($Q2UX8Xwy1SIwcELVd7yaG7OmDNH%qdLIJ~n|;X}4-Qr6 z%x%Aizqd{>-UFAt{myI{PHFv36_pme5(ezqSI*tk_287fV6WUj~C9(%*gesS`f@V*cEmk^Y}2X zBP=oT$U#_k)l0;Mm-P$$j9B1tysRL6E7pOYRTO-oUCQ4(U(&fnW+?Ik~c-#xSL>^53d6$j8o&7}ioN zi(9GYp+XN)wK3uDRhaHU17%o_Mw7w_MVN4en-1dH;RK^s@PaVTME8W>eIfO`vgEOx zUDSx*gWaUM68E@~Mg=bRN6_WF@v@4FKZ07CB(~=$-1?tu_~x`Tv(@uq1X_Ggi<;Wf z`(!;~VQYmaw8E2`0jij$>(2P%!FYjEgIX<%M zK`-a`^6J_qlV;L_v-WR2O3lBEx^X-~x=k|=)X2N0E$5rvZ)je!vXF@?D$9x?P(C+i z`6=eBb&y_td4>#G8lO)S!f{@kzSJ8yo<-z2#FN4A?+pd`wG~5r;*0Z{r!?r(9jwEP z?;at(k3PfC7<0W64hr+`oEQopiol`1YhH>&MSq?TlBp^*%V8TYj{Rb~Fk_Un!(*;G ztATC;;^UX=vypNx7hQO@Bnej*XOz>g*eMlAJ|~DA+=}Xm60_qRyjH%y;~yUkon`*o zyFo&VgbcpmG#{(+agy#dCX?eYt}BW1Anh&PE{`lyM?inMPtU2qbNbd+;;Q)SOXaJL z%6$^F?b)zNk?+-V_~Rn|=^nm^3epL+9R$f3QPU)S-2BjySj;tcD9dP!`8p|V>|QGH zFx&=yKUduv&Bx0dv%)#6jEzCbq4u4FSp6rZ5ZlGaS94CSSD#J3WGfUgs!JsMP=D{< zyLmfJke{Z?+h0|E;t8i(x*k_nNlV&53md!_uqq`!f2Jrh% zX@eCiwJQ6;lV3$-?yP(`aZVMJNdVDvqH@^GQQm(?t8k51AOE z^K*2)U9;h6rvvQ=ea%z)j%pC*0Qf$3w}lO@HHAp8ZGZEYDK8ypW}go6wD{0SZPH-P zLeSt#4#Z~5=yZ4&Sq$HJqCLJ;IZgbJo%q1__e>!D*+vAS_@l?4O~t7rK*QJTEJH#W}t zfn@t&Pnb`XVw==EYJ*%ld6IKh#GbHNdCj|aGjjX>`9uBzHXdzv#x(1tGRHOtw-hx0 z-UDVO>!NQJpYV^zwiawrE9YXh?*1ICNSUH_7qv>WUzPp^2)qhRH+~xW^bBwO5LmAE zQmt!dpRjTDXlBj4&3B&gX|03*`YG;73v)0}*85gBz!m!938mu@0}ew7B9Q9}u5 ztwR6$JkVU^ubzmgiL0;YtDxD2yW9abMzps}1 zWaXzkOM2Yt`-_seyuO=XDV>_%%XmoyI7g&jr)^m42q|Bsva$6#Kbmm;5ysoKg0`oj zrtJLH^AoRa4-eVMU3i$Ht+`i2Qz=c>P2R6k?SsI^ zdeo9phFG4qj0p6>iDKk>l_X`3uIPFBDXcc{33(%xno2VB%L2TI_~rP#MJ+euDUYWW zntGsijhfi^^R!>Xy@%Y*<>+E9PjcRxEId=SiX)YdaFn9f12S6JfKLkL`Jd&?X3e6` zur3digMjiuVLzVQABb2CZjUsIa^OBiCKp*rvARYV7f60*#hWd)cEa&1&foI$4t5^(FKdg zPUM~;heGFZ)3)MwUYI=MxpwGH^X33>rs`GsGF5ro4-b7iDJpJNYRN6HaI8x7PG2UDwB0PW)YzdhR9d+1|fG8Gi^nt;?b;sNsFX{UdukE zZYCxk5h617G#w;($0TZ#P)dohp5g^M@nl;arj?O{^`!pwNXG}JZBsRf0+xhKhx!3d zm>3LY*0-}PbNr=0GT(y~L-uvK+A+5eyPBA?8oZ_uVh;6~PjYH&637nj(Zw4+^y6|~ z9Vlany!?A0D^2`kgfRU3s&A7j_a-8;(W9F|h6@;_bup<|DA!G}^M>;5=cJ>F>Vz*3epvF(=gpm_mB@*<-#vZu}@~)L+cp1sk=vrP%Q7o+KxDG zXSfAn*GYKOC>3YCgS=y^sPO0BTl^4FNVc*l8reZqc90<5PNeX1@Mox*r@7qJ`{HR; zDm)zgQ>cQKZ+w*mI?vxRopUM-WqL`-q}O8UK8{r%bQC;tb3R4Y$J!Nz3zOzng-%2) zzks3q27h=N79I=1DdMoB-nY(kq9PKMuYh*CH@^A4hnTXWRk@_d*F*_KcJej8GD?NLJv_4h~H zGO7ZB{M-@)!}~YN6JHfcC*Tnm^J}ix+4zgPwR1&`oP4{a`p_%PWqeC(t0CLRg3ssJ z!$7)Co|8Z3_1!Yyh`pHR#yc1+pq+Z9hnyH1Ca+0Tc@Lt3JprOy^ zS?Js3xYb&J$*M40hY8(EUrx(aN_+5ZvZOua4fP$psQk+9ge@G-$H)vd8<7|Bj23qK zl>E-ShddNGU-1+Y+uzCaZ@ejcTpRQ9G3++9%Vcy5$e)Q_7MRLDqfLR!MpFL z)ke2B`a+?>EUMghe~QwBXnWf1{pdR#%aI@ADWc$#_nj(QZikweM$H~dl#u$Pn%O1U zw(BkW-Hg1Y_i;&o2b-?Yvrj??E##d%OqBnJwzrOovVGTvALEg3r9(g(rF#HrBqfv{ z1f*L)1{gr3r9`?0krt5-VE`otq`R4M80nay8{V6}-@Si(uXpe7@t<$4SuWSW&3(mr zopqh(aeSzF7Na!FZch2NDY4EgC~kCrV@*Y8TE~4pVG@%QLB8$j4%+apjZ&F6RAXTw z6bgF&4xXqFdwdym>l0wZe7W$C2#I^( zB``!Kwh-gotlDi(b(f!HU4#E9ZngevhNBFM4__=QX?#U|!Fvn@Z}vIom9}g4iTt#$ z-^VafVAQu%W|KUG?YUX#TGjwd;~+HHe9fh>lc$x=IU+d ze>TdgkK;=dAB*Gfc3n(Il^4#HjRln*)w07EwViSX8?om{5H4A;fpuw{fQNdeU~7<{ zlU&MkI`l-RA;Nr#uEf3;gVX9{D-W9@tg~y|n{GmdP3cU{MU5+ULoAnR7P7ppbFUXfwG zkKQ(p{G&ZNi#oDoe(d`Mceyb{g;p!PR6B6fSip|{hal{w z2|AKEJ@UxtWvTjvEXlw#rkdrB=8Smis0W_h)S6?ubB;Z@GZ8Wg`VCx^82}zvMyzku z!f^0WH(L6D9<~TSMs59$d5`oIP@rdX$ab3S1&eGO&>KMW?{pUlg;zldCZvJW8qb4* zldI4+OnX&2e9`G$m)vjA|IhcIT-nYRFSN$!(=pJ=0>V!}g@Q{bGZA6cTl!SF* zcxWt8$+S~Y-q9H$Q^2@#%Bpe>sFI`NfD!V?Vs4hcjAO8Qt7>t0^XkP0u^dt3C)F| z;<+CNwyyb4JL)U6=gL`d+j*_19^7N6=Wyr3k%kdZOuS8;A_>((j~ernLS1!Z%d171 zo^8kal^~9{s_Sz%h2pSA?kXtOdJ>e1xA3yb&d?2vr2o*Pb$AuNy`yMmQ3UJ9oVO18 z1E74BwT8Wxb_wdZ2|I7Oq7KW%lv0_yg&C&E5?GgscPGCvKj zb}3SigAkz-wxvB5IrLPLKJXpW$!jwbW&~P$=tOVJxCEPl5L5tNENTZbAvSv#eZkUh z7~&r_-^q>UBaMs0joALeJ?dN(7PnlzOjqYiFv9B^sNW^s222XWf%t4G4p&GLaunk3 z>@&SL^LjQ7Bf8)01u%fWjxW^L065W2Lq?yVQxqrtbM;P&My*nCogAyDpOPEf@#YWb z+)?{gjs=SyB8P^`ph61%gCBHU%rQ*RFQa=BhjQBC>a}+c-2j2s9r_fpe0*LKHdNAeA$z*4!YfV#gd z;vV}|m9t|}(ay1!Ar8I3<6OrYx)BWEY)vr25H?f|7lfcLsPW3D9e_HChwPgjZ+uR_ z(WX@n;ej3VZEsqk{C=go4+94D+o@B01zr@wlmwJVC?ZG+k?%l9ivbyd4!9~@Th7Zl zS9IONb;v>~EO`hojQyC`7qf`(vpl2VryN?ya+VgaREpE{#5`Dfp07IldMLqJBa|IR zW(PpX^`#4Lf6)vV=uG-4eN+H40owCgZ9?&uLRXf$EfW~3V~}&AP)GtvJO=9k=;(P_9`ZuVI`%$VA5lvXK8qI*3NHOfp@|Gw8xBpyDGx*y{!Wf?@ozT!yZe=H zcr00Z<4Esh_n0xnwuNT(IPN%{drbwDYDR_z4g%!lc*jQSwa6#Rxsj5)N1(Xw@WPww z9i${Hc2L}Im9(g6vVfv!Ojnp;l*lL!*}bn{lqUG4aT$qk0Uy=idqz_Te`kXhJGc>t zqc>VSSyk#eLL7&3UKWL!+$KiU>|5XWQ@p=JLR6LJssUMQguWPk?37CB=#YJY&Y4NA ztea2UxlpB5Y&Vdw**O_|s%B#||K>*vI#+3Tt{);(y79g4XcH=D5ci6Q>?M5(ne^)Y zHfLl&D{O^(i0f0a1eR$ft$Q!0pC)dpl?uP#PbW|}@U}203!V{Wd6>Ban(cnD<^|=Q zKyJv3y?)NG%sSe=#CsI&ZvG^^Kfdcir+TXhXS#g(M0U)(=p*BfqBf(@n+>W+q6CzR z=>87q*q05=CHmlaw}e~cR`>VbY?iYztC;hEeEur(c7R>y#u6J_h{=5EgRXbJx3C-2 zv@5RwjLk9=tr<1Cs6u*28`!>6v4N6#JmN@Z&F549mN%?t>Sb+^%Cd==7s@f|Ht|x>!)7^MDTYXi zB0vsrDHAwON+0M{_`=7}&3 z2+z$t4J5`>ytHkYVwfSPVU^Zdb%lF9Yo~F0oGCD8s=h)Zu7kJwAyYMXu-|sCDR9ID zV`aj2EN&N1OY8aGAJCboQICN#1I>Z`&q?l3hv$v8J2P&DhVEWIunv{zHRxrN{_Pjj zCUD;LQy3+1z>HaVhwJqzOsepkr}`1Q+pcUdT0q4>N@YN zfGDSUHX*gLI}c+EmCdQZCPOm(2grs)liA9Wv5XOP$Szg>0KeN&^;YA`3H6VX;1klJ zxOKVBd?9e2pwk5>{FPl!NyCVo<59-QC#A52^F*hP-!M1McTt6jZ8{uF6OIg0!@zKzl?`}`f8OWW(B zQu34?HH#MS6YfvN>14NF&KYFH3=K>Qsl0g5`PF28+O^M7u)QN9!Gss=i79s%EV5$Q zDM<8Wf;!lCD(>MplpQo`*&cYz+XzfZ>Up~;YIoU$u)P{%NCaOJH^tkR4beDuvED!F zDH2`{P+{G~p$GgtuCDomY}zj~X_M&5C`S@C#EpmF(n&7@g(F7=aTvm~Hi7>|ygXFXEY*zrR(@aLQ%<2f=lm?xuLW;=hMi{z~ z95pnL&6cr+(I`TtZMSoi)758jZ)LlS5`RY0*4uPrsEa#I=&u|$AH<5;yxfBo^dBP5 ztLN4zHI?2G_2XNx3Ec{bsdVgAQE`x^?A@Fzer$Qx0Rf3qIw)?7Mxd#?6V9z48h zi%xlU$Lc5iRDX)vU2Z*iIq;SMmX1hCI!2!?s9Of9$L^NWnU2+&jm@KDzzVGwtEfgY zt>+-6PjrsfPEV5G_j-Mo`P3u*OrBe#t$+6?AnRY@kppG@gE`W-Q7z*t4rEc``mK1Y z`{=eTzhG0YXPS{bC}(fOi0WD$jZ{wCyA&3USB(u2Ur%>7Nk0rjw7VBdVZ0)jfA2ycD})>% ztZ-3l4pG6gx@yGG^+DBm)=xpY;NgO}=n_e9eGz9hNFh~ZUH3>)?YO?C$*Ys(dfF?C z50v1RDJPIi7>C_fO%<-!7X-ed)%%;`Ee14f5{eb3N~f~>F_TkY%r4($kzTH=$&MW+3Q)NI{peC9qi z-d8g7rHkYSz(ol-GHgoufr~X z!hk3H>osq06}bvn-zw~3LaF2Ww-?Pi)!Ix`0-ApPSrS#K!J)L4;8`j8cr4H~738p4 z0NTZ>ni+{6fIpVH_QF^kNAJHC9O2Hcl9!8fbYYRmE`m$D$loTu@^t9S&{w-Ji+ZY5 z%(7AYtHD*21voiCD^W_Z>dJ86##!l&4~Uo2f$1Y}6zDW9=&@Sx&vd+Rbj0jXlP_20h%lj!!quM$X=AK#b-96(<=^vo z@`M$YTgokQ>QbJOe4~#}mzU3S20xYhGN1iKuT9@jVhvOPju=!HJRt|Hg%$|LeOJSPIe zyodY#T>+i^9PsK#_o^ojql@>A3tr_^8*-z^U-PpIL@l-M#4YilQ^;N^_EHlN7`ouz zM0a%g>?$#jSnI3zHbuf1B--lcjmHnWJ!O0)2(>-Y_Ut-R(5+oQKMn?TcxW^*W@T) zW<5JRwIz5l!UpDy(67G}V+j6M?1viVCO6|-qKJDDRvh0Ec_!Ki%PkC#Bm$VsvE(p| z-SEH28R7)?_c_n4YE(nDL~d;7W@kyRQj4#ipQ@ zwWLC9FX&M(<|QRq3J-KhpQ55n_32iDKrloX^UR5vPx*m*xR$`;c>gXC4*`)_@ow%Z zI9jHu=#Zh}RAGJkAhm9E)l7hCGA<3*Tg7cd&cTpk61P4LFQZt{XOrvRiST8|&OYB* zXn6!b_0k&ft=@ion)BJdaCdg_Iww8qR=Dlthqj8D4 zP6S!$c1_xOeJa}uWEkQFupu&;VN<;vT;_kv{#bR5lU#ea9gUq5(j^n~AHytY+;U}H zXG6jWDXd;NNM3`<-codx;6LB-MLkY%&!T8W9~Z{LdNwg*yK|l` zC2!1BW-9jfL=A^Gn$_$KTZmYpAg=ltRbin8<*>o z>(=6@_``*0DR(d* zzlS~jW`0W!4DY7gh@yRrQReSAhNTO~^DU|Jp2J+#q@L79_^){{o^L|5DDoPO8XL|p zFb#Q|YQ);ny+Ja7mJ~do=lrGOZVAHQQPiZniEs6TJK_97$7G;6CqU#9vLf5K{<-XV z(uQ}&Tr}vJhy;QCY59#08&7D};ddcL`l?J!0%X0DpH8XFOWO3@g?|hZRWL^S;D^-1 zY*_7nc`D4PGJWtT^D)M5bp=uPru*89+{BMN-;7Ml^ecaVWf*F+o^8-~-e{8?14*0| zk#=|rw)UpqU7|aXlk8k^TGP|fmwN%9qt$&V4r+Bd7h9Jq^}Po!_g3A_qkIzCbQh%% z=Bb-vPtBa^6H8%+4P;&^%Rq%imQR%yaFZyOQ&m^>0P$SH*h=%8vvITYmZhnalbsTl zV~m){5TvyAQZQ0QC^n)GxGV6_>`L`2&4E821~~Pw{GI6|MM2OM9rgZZr!_gf?2v9hl9e5HH%@Nq}k4X z-B3T7T%7~yw50_fnYC~+JF(gg1&|5otgqFIj3OzCqITrYRqyAwg!{+RIqGp04?Yh3 zE`5F~eFICgaaXlA-oK;lmx~7g+c6&YaM?Jjsg~ls{Vb~TQ|&cv*161}@28@LK9G@T z!AH3s5d|5;-V%vLtBs+Qt&&_lH-z3af1IihOZ^_3I4Zd{=@e48Vj6T&n}i*BKKj-Z zs(Tz2@H_Fe;OfwZZmNfDBJEW{6maKT@r=(ve$m)=!!?_RlnNBk3btAKah7$++L~3Y zon;pzwncH15*+Ybao<_|0bHj)r4SuSmIsi}>uBBa$CVg)gx`rbpwJ=F!EP#g@-&f*%4AR%K^iG&h)Hme8I{l*V}hX&GliE#{{Vnj1nZY8|q zyyw4dB~AB>Lj`OqM9=c%miWFfJIQpx?a}9>;Z(BRbdhyTgXN56$ol=;OY=QME1d_Q z+Ml#?wv%g+_oeGE4|l{PtAiMkKVbsfUj9fn^H;fhA+tcA?l(J8t-YOoulG)pZs8B( z2=R}SBcY%_egy^Z{^Z&_i(OKV`iP+&vP=BsbT*glO)fhFL&QVmJ4v@~V8NsA zYQvQ_Vj@eB-;q$yFVA7$>_&6>=R7Xwo5zoMDjcEjDzu@GlCdshS~(I(-%r85KzQ?W zkGA$yforC4bP={J8&?@e8#AoZjefrVu|QKA%HSE;=nh#iz*7#R9p7c^YEJ5tHW^xf z*_!zzMtHncEPD96OvF*a#D-}(k%U)&G_uHYLv{hc0O{!cV8`xSmr2w6aNW6f1$VJ9 z=z9YTfvF&O%Dr`t{5VK9YP*jhGAFn-;8=YtlWm~WPjb$xJ`nGrJpa#M{Leq~|Ndv60JuaAe8n1YAPT&6Jw>lo`SI<4{764} z4CGfGdCP^aO`pQ2zuE5J{Kroqkco6=0gr>FIRI7xZ?R;We;f9{5B`7qH^hwsU=Vm% zts%j6AN@???Y|b}|DDVK{pS09Ak#06Z{&A#NUwe4cKcMG${$P#5eGP>o=URmcpq@m z=~EW=5C3^ap{hVw_t9dYOa zh=qY&3WXkYqvtu`@wZ+wDgN^wDZgk3(oi`#&0!QBu!N{7BYUoYo)X(r;2!arucFa) z3X2!a@#qg88DJXo|0FkMh6F_gXanrw{J-9Sum1{r0!^&+ewI=V#wm zIs(Z+j9|!)%8=ro#eJY^hUjTZ!9Oof)Z-xvT5hyYjP@j1z;?Aw5XGbB-F1&al{6!P zo*6D?gB$^oz2X2YnHo!gV#b40Ct$MzeWZMZ|50LrU-_Mwvi)J<7zXN3^d4u!rcbG%(=`*joj1{z*LHz6SF@+J$I!!X&?Xv&Lj*$Q|*sSo(@j0-~ z<)4OQ|783uKta=NH%$YLj&{4Vfcf7`3V$GkALjtsc%6lNQ!Ie?`R@K#PU}Cv3Q%&SK5gH4ZPxN|v-(12F9tf{?oM0`^HVr@n+v2|CQgJ!f_ppX z^AlwAv?v4XD#E5(o3f?p{%0}&?|=Fxugn$GqbKbvRgM zs6haXnCfY*`X6k;M=T(>Tg{rYW?T=@bq!x5U;U9RGF{7J$FtHwHbC<<{Qs%pzdt6Z z;Cs}dHT@z-tR15Zy0;zh3+*x0a%7}X^VMK^Y|Ah+NsNi0BI%%)2lXe~p`85sNH>=w zsb9}r=1Aq11qIkh9`qA^{xT@HlfDkk$dI?S-X7_OJ>`sUoi%EAwzSa6`J=;j<9gQ` zW?m)XE}0sB>X~2mSw_}8f`54jB>(QIsM!OD>TWURpV*sKy_>f<;IByP1J8;8a``}x z^Ucp2{`(*Hjp_ldJ#{cX^Zy|||M{Z=0^)33CgNk^0#}+8pulx)gC1xXa{P%#E4#Kq>nUqVP(aF)h)T!)+rj%^ z4tw>pEPP3MaChB;c)0w7u{C1~A-rB^swNFUf{k`~J^$np=4)|Md!*cE z2Vf1hflYGK{$L&60O7>M*f6yFTE|H0bNq?04~Jgsm|rSu#r%MdDK0DZ`oEFa|Ds*~ zT?27nE6k|aRNpXQ9pYaYvi-^8$pVY#oM8F!CrlR5F&BiqSAX)<0I;{S#2l_;;=n4p z=8why$wNs|z_^}xS8>`r2XqXgtOykI2W~~}^$wMF)&^<Mk$?zu+Y3X0aM z{+U#qw8_`xU7kPDF%iH3h4*XSm4K%i*hcUC$*ck&1LI>c?*z;J4FsD|pJa(Y5ha~# zd&ToXgX=oJrHrB0p}cwJ&lAS7ASTj(^qIWgW$twViBD0kpaN9Y7Utw1K(Q)s9K$1cTNH=!iN`Q zdt<3X9KHTEmGr-^SM;yb`%L=n&RFmk9Xsp!Nk#@bzFP?*nDq!W^b|6t$oi%7*VA-o zC+uhWI+xD+F><5~}psv_y=Xp%4uc@5CT zhXdf#f+*Y4!c;=b)6q238H>3?o*OV(*pJt)0Df|h@5NZ|<=uDyYT8K{KmxXg9F$pF zTr6yev@+7u(-Q(!N&%WC*Cfjw05oR~wg$KZ4gy z8{kV1C-yS>jnLv6}R!Gpt4P=oM)O5V_MJOZCo;ChPwlwcw{aJMZD0l)q;`E~FYB#NoxHvb+ zU$gj{x-*hQV!pC4@J=8`iA+}X7y8BFmV2-ad|9lbDmRmqI|QJ@mI7dZ#awe+7SvV% zn#e|=wC?j76u`(O1KXKSVdab|%0GQ>}jXkpm7|w_R-XdH5?^oUOmlUMZs~^`}uMt(_xJ-Ri$cCW5*;z^n zrSX^{FN^`u*8s@|o0=l~*ZfHemH=sbL)e&(O!;iy{bhx3tpK*{G6mCW_E_IxoI8{~ z;XC=t2;ibzw#E-RgM!NXX~}w}BmSj-lL0kb2U0408VQ_XX%Eg96DdbS#JNqc9>7IE zb4?C(bx+b0vX})(5+5B(1TJ`S*Sy-Ou@5`r)wyd`oD$KVhUBb32!psfTHB7h1lo^U zk6KczfpULp8l>8?*!j#*kU0Oh-yiB2UbY1RD-;Qk@(5VA0`PfZ`SH?D{o-uD(m_P)M60+U8NHaqd-wM^~Uo z$9zV^Mk-w-&n@1^Y7JVJSNm`AxMsB=qhx`rN>=4{lk3ip24M6300W@_@!VyM<+-)7 z+qb1nd!OFd_)1roM{ONI#W5`5=$S=nMhJ(;q>26CodwfSh~nfu*)+?Gb)ycTo+u5g z(=!1ep2>fy?&VDy%$iM80bhT6GY#DVXQiqIcCf)=X2e;ts&q;c~Fh;!KMe4Lu7%XFK7x3XB)eS@Vp) zcSB!n^-A8wfAxYCpQ~9qgfBw!*&f{F0Q`f81eHq7S9^uz;-Em)xRRzBeI@iXe>N_= zW`g;5Se9J`#;xR@!%*OnhcU)SpUL^jnvpyuHy>o5J?Z&i>CBz{=cD8GY)?7&w_g?% zzj6=;*X{I)Fj3%FY;3h)1Kqzj&%_7}f%deH(PY82MY_4*1@F3v=R{X~@>d2I57Bk+ zK2-qm-r?oaHGu2QoJcqm0K#uI@yzHTX4i^7YVnOkDIEqP0`slNz}~M0>RFaXX#F21 zw4}03Jj#$ejluEOmC&*|SpQ?X%QSlTU{sv&wM^wQRvr`k1DxI%`uZ;p?5_s1HDgcjE0=9R2kjS6)azojWb_E9Mh6J68#K+ZNLl(KMFKC8rDH4^bj<$ZVJXyvRueAJ z*|zhVYNokIVyLI-f%|uj4aE>Gfy-UJ^W*_=}f_;{b;AcO-68Tp~zvZ(yUV@%={X%i~TiISS-4 zLSng1>X6Z^KXIrHK-YhE2jVy&AN;)MF6~@9x~iL*C`|o1FoT0r)IQ-aJJj%~*zVA>=fAE?*{={ogM2Q(a)VqLTwFSzEW3DtLD@ zvkFsM^-3>a#h3Vo)^A`qau|9UsxoT13OD#QT6fqlxDoeN5W{+oq`jqAL)rTN8_!*B{iRLb&-r-XiV#vJg zVAbC?A}2}v8}oP`Pg=>`Q`iou+plsfX8j32*9ZKyO8K>EpV~mNd;cZ!pydG463OAq zP1l|;&Byxm2cH%rPz+4t_Y%ENBa1|dvzk#$>}Vsh_;Mu|OicflrOzk)@5uJT zX2U`Ivpv=JTv$m#^NN!a`aMZEY(+a^fcVT(h!R#_YjbAM^Y>a(JsoM8JzFJRY5D$w zUQq7B3(3v8(^dcaGh0O9RczagAGTCGbjh+U=t1^rqz00DAmS0+&R6UeLxu2|@LN0* z5tggt?y^sJNaVxfV!DVF&#%esCtMJ5&Z38unSjf6X6D0?rJ($y#wwIVoZCh4WWYU$ zN(bPMagqaytK9wi%-R9&0a;E%zBnF${lMO53>$RR?3d4nSwNh8%!{dfE&4rk0pJ7> zi)#W(Qvp|hs`6mcY$fJv7wWaMB-eW^V&4-#V-lA@|@SRj#@U5 zb#q|rGd%#Rlz1ye+DWqDtSHJLn}kZ8nI8SDH258co+qS>=t}M*7R5L z2!0f1`ZGcLa)uf1fxVqVQ_ISdH25gzo(j$ZvP74B^la4)DPBt zyoHB-Rdel;&+zO5v>Cm9EcF<6FT3q~ z&r+Jsfj3xK%sa_8fitY4(h*`RN$19Pb3(cj+m()tFf(;J;^1X z9BLQL3Jk)aaX+5%a*e4&WQB6=c^iJaYJE#LtS&{7&S>s=ix~HIfw|fbhJux!?Ne5#+K&I|= zXZ1v9RZ@h0(&2?j3`3NwAE+=fI^vkE}4^rSr77H{^ zreg6U(jyvZ5wh-Qo$VWVa<~wu;&doxRaYEh88t$NV8C~*ph+AN_QCS)Z9E^H4 z_~Mcl{#^3v=3Xy|coq6!gZRceH;pCKQ%p#@<7r!oJ?Hj}IDiwb19ZY~ip<3M8v?ze zVJ6b*6MPKhg+7*0iBQwRs!ot)2$=jph2E9+COhjru$U1kH>S$SVwnUYP* z)u#AFB*QAy8kOQRY-3;SqVs)^kBDLF)meEAY z6o6?lVvw=cOT~EcKi(~C0;_pQ5 zw4E(roy4PMjLAobP)Q&@Ac}U~UW-^E9g1qZ!aZP}FE*KZRRRwELId7{cnAGDX}3vO znGQHyObmVcGSy#BN}^Y!-Q-m{H1cnhLdWQEZQxBLUyLE{_ddyTc@ZN~MZLVOgw=zc z^k#r3-g(=o(*&N~-;1Pz2b1sO=Qyf<({a#m_uAXuL#BDM2Pfj_iRgfgh1>SS%?@XO z^hEr?-4JSYg#C@3Nwf3T7fj4Mtz%SJ9mRw}u_^Ntnb4Kq*xfgkmC3et3;uR~mWv!c zXX9zE-pAEPS9V#hsgaLWxIgJwBV@?zqPFn0y@_j_JEc4ZQzN$W9RqH!!fkAX45(QE z7NRWU~36MkJuZYpJYywgfd*+@)!;a*b);t5YA?ubSv4dqLQmKOFoc87j zf1U#&X&2*DzxJ9-?=j2-OQbKCk2zZbxmbi?Ynag?o8S`d2}iQj0huNB(>u6J``Ldp zE)+2Xzv&Ju**Ar3Q)K(Toc+R+r$z3>`wC{6eTFGB^8^s2X`OoF#Z^F;_)c&{sS!p0 z3I^}r91ox|wHhziP*(of0pz+~(>gHx4BY;l=z-4VO^{mrwRJY}4tnrme(OV`hmyD( zZ+&O&mm?SI$tjmD1AD`cjqRr0r;_L88P#i>Vf_sIjV8#Cj5MAUJA0Nhm0k=lnTrGl zMqlpe$O`R+U$!vwmM&7h(9YcS_C~{%$3CdRxQS9aqt+y{#Pzig zC%*_Ye?;UXSW^`%{ZK}9EiLS;T&(caT}1WnZTK$*CsE;X5qcB+r8SZSIz>okrJ@Z@ zT(9V7KLLG^wBv1|{EKj) zQR4F{?2re2kM#qBRx?zn2e4W2b%@1pN1%I;$jr6wUd^`=b=4A85oKm7GgrDX|8_o- z*VlPGA1`>)xzG2SBcOGYRQ_U3w`}g$4`*foH%7j# z)@6tJiGWHTn)5D_9I?cGwF`?W6qOKQeMVQPyAkh5Iek*t2 zF}PG=jGxG!Rl5nbME&Tmgq4JFX@ptCIjxMQ+SnofQ*nJ&YkWEgBBd%Br-8=`BNCA& z!fjXWeyC0rp8B#Ws{jEbAKJm2S4CeUnj?LSu~21o>i|20cD^H)qZ~S{6*6%rkd~-I zFpgdEzOYB`TyvW1mobX9?sf_+pQ7-YO&6O7qegw!5WnAVzvUSTo1W0)oTW&Gk3k{! zRj51eV0r$(z=1(MH#E)0CJDYzzze?xLr}?8;1adOV9O~!%4Ez+HyH`JyhP=XtVv(- zodY48Nml@SMP})V)4cN)zrl0;sV_#o zPsi&0gob@!EkOI{(GX3eJWH#~1M@Qvj*B`=`MW`lO14+V5bf}FpPyl_gLDK(a?hS{ zF(-)YY#f(IbjYA2*QHD!z~w#=G`V}deZ(3|V9PjnvaT)aH2BoVJ7!X7s)$zXrWcK)@#3fG(rVb-GiOa4?aC2;r{)TzR=aONOaUpzz1YP zD*5XT)QA81XwPo&)lslmoQjM3Ey+0bWePP6C~n_wK%Djj(I`1C7-zD)MK6Jy^Cb5r zkJoN&m+3>u#t!{G#1E>q-n)5ck(R{Au9afE*mXmU$@1pHU9gQFOaxqCQnNMSM z;q^u`)WiAt_{p1|+eoT!Sk$fe`g|Hyg)_ZtIzN@NlU`U;r1dYEReq5S2(2D<=EhAR{b%uJ z*7`&9xx<5VwEI1@(4nbo@_1fG!{*;La9bO+AoHz5E-V9S-@~UAcXIt%_n2i}$DQ}i zkBB2Ds;i8v1nd=m(`DR`uDYPZYQ#j?FUV20ituUS6ulyGbFzHxZv3gtHC-OlZYNcr z?1SEHCXj8!7?rRj9KJiVi?|gm#~X`G^-Iz5IrU7$y}KVP=yI6F@7@v355o2L<3eK8 z8nQ0)^eU!1gm+HPO)!maxl30YGkz~vTC5+OFNP4ZblT0K5-{s3YoU`&q>%GoX{GN( z%mW3q5|7UU7vFc(lO{%}TA^;q9jeMMB^w}s%JH+}qOeDGo?3KilzPIpVKhpH?c^4? zrY`HMYVgp3Kbvt4iE675P@6BRz6GqUAM9AkMhaQNvxk1ug1eWisTZmzi;ju#Vo9Y4 zv59$Dj}N4vZtDAuR&SG+_zo4u8xMtYx;=gH;C>D*{3M>r+?`7OLLAwLAUcA)hm1r9 zMn-nGu8_mYKlIZ^j>4@2rS1}m)(5sY>V@*3K>#cy14VwsNQrjO-tkE%-!%)RmR-0G z(=zLmX2p?;#KO<4*o_HS*O*ZHM1;0C1sh6jLP zY2>T0$vTj1+@T7FESX>yHc$hp17rLn4omC zyQAPch4xR)rqjS&^wJLoi??g3~wkC~mpI`8tq`UwIQc+q)it1&y7 zVUTlImTur*A@1YwHvo1mfd!DZsw;zJY0MJ=oh9XA^s4)33;Fjb1eYE*+fr*B<=OMi zOb3_edAtz+%KLhdNu&ckWq4by9mgh_x#hE_emr2w>o{9&SL7R9%jSk?-;lyGle+s^ zRN;dWPCIc8^mOpBYp~l@KovR6g=`kUH33`VF2QS$I!72M{lvS!o1T#siv5cZ7sMQ?ylq#5i{ssT@)8Q6R;RE`YnXZDnah_mEAuD0t zIDc2~q)_~$#d?#GZ^PWJK%6;eH?am>cw`40RNuE7G&bX@;H&5GUe7|EFINKFyM&Ih zaaX8M^htdz5pG2F9vXkq5_0@z`d$_d4;;6i)_pd9wuLpYB<(t~YY}y^0EBC!1xKGS z;dn+BF&x<>iWUo!b3IcX`-Bml)!pc(#DSw#a&98FpTQqc&+r(~bqI(f^!Bkz0d9ah zy#wiaUD4HDaWqF%vGe)>$?CEZZp6|muM>&7oY~2tKHq7%&rnRER*z%Nxt1m7ObT!* z9wTrqF%d;oFJQ1O2I5-7@2XYrIXrV{^}C7mdY{MESUg*Iobly|*t>>V*h5GLf7P3 zgnd7LaPZgai6WEqxuj~31|)PAnKhY^^-h8loM9(-yXv8{oqwO4LHm4$fj&PRmPJtE zJWc_AG8fY#&b$??wFljc7P)D#`GqO6!!%}+uu-Lb!zf6EQu65e)*P0W)a;Rg6oTlA z#A-t8rC75gmIuu;G(>EcYw`2F=N@zAl)Y7krN6EByy;i=DFYx)W&3x6Bo`!aG0y4v zc;!ZSqtY~czdN7mtw$u7^4aVAPWTNmYH(nvNA@ysVVs;G@7(v3&kwN}Ax!_-j1H4> zhZm6|Vq@O+H?{Hiph+!^(78*0o83@Xj5CjC%+4e}tKZed(G=s<)vtN{q;Ej>5Vp#n3HCD%0p$Xmzhu@bC$8`7_0cbE z(D&T0PL}%+g;8ICOR)gm&NCV&`Cgp?T>>>v*Vv&(W4PW@7!)bP_EL|yb0&tvNK*D0S3Xq+d)Sa?##cqx0J99q$$?7cd zBV1#uPsE#q_xh7bvOz_h)y&TTKJ}#;>uCak=e`CITet&CL9q1}K3da6PuJz(%-a-l z;Pd`dyv^%#AYzp;_g^bK(PfcRZ7-u3{V(2IFHqoN8lQXUcAX@@^%zqrO&Sw$Y!-QI z(T2VG-vfU8(hoC;fC{0zay6GFZ+b6v?ODU8d|1PGW}yd+_bRkCuRbpng>`{l+Z35U zO(ER6VqT*f#*3tymR1?9pr{nT0%2D*NXzbJ2HHlxJUb>%EoSQBTYhnO&Q)YKL37nT zf(m=2xCo<$s@4zEK|lKrFJj z!g%C{NS^A)T=b;6H>jO9a>?%ev^2l1r-ayd8qjI>n&}AJf#c znI6b6Tj_)P3)WVcje!9yZ`Q_1EddEjbTG|dii@U(86yJS@LxR6LT^8P(_?-a$soee z4ZWUi)Zx@h{cYu8w{MP3#L9u0Uu}f>l%5F^BLdc%PBY7QZH3iuaN|aG=`cmpkIL>O zYJVEBLR5co&3Cbd6VNK0%_>V72;-y>d$ksx%4GN4`)F?>#{~7&qW23dZ$*Uff=oyN z3Vx)CeLYALbt5usHPc`p<9L=Px-2Q#Zlh?<(~V zyFocy85=C~RBZ3Fdvj`3I@+`m_jaJB5MFS`q*vL36zNUV;&#o76%X<)XC$Xlp*<*r zoP%e7hDb&dQ1#77wY#XnYH`v>i85K?YWj_zO{;6k-&QK3s9^_%N{WgNAkD=| z)%Lac%9<-U5a&#TQcF_=9?R>f5YtzI0onPqtBE(xSd5CTvHU2c8~lRP-AsP9H3422 z*cilUYpw&b8GKl}(D3Wd9WeOV%Vy>^7uv}uo)=%GxxA*;xEsq&7S1=0z?@ zZ}Cl-yjK>@ChlG8-2r8e$dKsLHg*+Um0o8qGtc$dh1WMqBU0F{SC&&`Jl&jDf@RiI z3x-S+o_Jejc;c^A`_|1hdn$isilDcCO!dp`%iK6uyDcgmI@#mf$0^2{;LkrmY*+(p zG2%xyO}2SP(Zt??Avl?H^(RGWd_o!)-ER%Waxy`k43Fa|QQq6*A6ecD$_C|o^9!r1 zvV-oyt6y}l{MBWb4wx;xsOu>$)YppNC;D!G)rq5`%e>0#MRe+m!KTL4yG46HtA!f5 z5V=Hti^UCo@;lmTrL`%r7@NIposs8iia)j@E**^MaEl*RM^D0W~sbPa7Fww5z6!>6pYZi&1#oOJep~G zyKIQYtb>UBsQ6dhgK`s+BM*5|=VhyF;X$R@8JxsX)KZJMLP88wC6k-to$L~5BILZB zNrPmni7sJ45h**H$BA zGVbhl`KevdI7UXu^g?b!im2oPolbJnhA>V2Af`4NH#jL!Ecj5jRG%@aMo2Jpk9|$q)jG3`}bip@2KS=$F6+&gAPjL z&}rA1pVtVB!YOc5$aiexiEt;HI6EdYM%fu-uw#E6cycu>DJthjYhT7iG+!UDHci~-E5 zy~{9;NRAjo_!}?qCdiK2o!)k{n04dH4ahzHK(PZS<`_045`oXU8Z%=ZjVpm-4%z~} zEnZaZW%qn4dueNMf$?PeO3Y3g+NNWZ!bNzp~{HDxJ5tCLgsx zhxkM(n{rrDX8b9wbz2e#jt6C>V;$h7b_#M&a7(Nn8K#EWAy=B@n(qlo=}oy9JdFXh z#E=CLeJC=?Cd7mpg7*7Sx1Xr-t9+wQt34iIWE$u5og0L^>Wr^!MDpY4*b z0Ym?}#@!I|GfhlMTvV%V6bIpPG8a@5rr%n&@(;U;BPFPws4K?jm>5SF@duS(YZ zmN^bHMNe;T1-9wfRrB%_WziYF>KuQ0|N5Y2OaSiD6**h?4s$P*zBTv$v%NPIL;1Mf z;M(@{Rr^`*?xiTnisms-WGFQ7V5*e_=HJT7D)P=&^q%3E9M8NqPVewAJ3uH|I>AkE zC!l-n>$H+dYRJT1#^dqq8zz&AbY?nc5QG09{dI-3`^vcs;gJQP^y=-YEN{ic{_e(o zMCHPl1>)`x07r~k-o0`vL_!ZxBr&f7p{$~aBfa0X`MttjB3Y%ZJ66IQzwCH5?YjWM zC1`c>R-#wt%^#KCSRTA0lFZERGyM`Yg0=L%3Vbj@H{0niJSAWeVDst5XpfxZ=lXbo zSEe<$q-A0?15x7ZCSP7kkd-}kJl~p$--L>gHkXU`n$E6eG z!h7kVt5=)RtyHQ8t08xGFEMs@EQr(l9VVqJf{EO%W~voHs&VAI5r+|b(#JW+=QI;J zyb*zMpyQEq>tnGeU2o$4;LWS1uj=j)a)wymnmw2A&x)0%X|396duJ#46zZmOK6h#Q z^=vh6P9spMD*E2yUGqLw@7>=1z5J{x#SON2i`R0z0fj=HJJ1WqdntXbejZ>`f(PZD z(=d;ne*wk~$1%9vzpNk7@ac=reeqf z9Zh$3I=yYH%9d6bVkK4_I<`(>522S~y5(xa!`AdPBJ#CN*|ycLC%8V2HgU8KcpE1F zKqv5-R5Md_gflThQAPc)q8hgn@MR^uhO172WJRp zBMBiXT&Ug+E9X7ls3nwH7@wrGjmb}6Sw>>5{R(!0VNr~U(fpR#>(8Za8HFgGhUt+Q zrgQMp@wMkf-YreBA}cYT*GDbHbBkUmyt3AUb0(FjCQ&APzO8tCQ=H_+ekyO@i<@xX)5FFQ5eT|P6cXPVhxfrW8oKe?7}my zo-|gK=#kIW@mTrZ2sGIvAya0I5r69-hPpmDGAwjQfrF%ZgLGr#+x?#AyZ&djrB=*; zukB66eWP=l`K&d>@f*fC6KH6WTRLo6;W7&KGTO~BP8m&#Oz+(Cm*6$8%Xr!I&G$NO!n2B}sUf2!#$tkSa!1o5;RwMrB+H2$JvCh2_srkW}udYY& zFItOiWr{zs*3#-Uc^3SB_h81jU+`-^I5UCqdiA=R=5$jPsjn62lWnVBvjf@Scu6^- zsYqSjcu^%h)!(38m}+Xg%$aN@c^=I-kI}NeJ4SS=`;JfywY2(_P6Rvau{7Lgcu8j% z^Ih?W6TfLw1J7*{>=U66YMJRwKA9k&sXTh?do0yP6FjW3@;%M;AaDp7=LDv1Y88<^ zAV$Dt_b?B=rraE>1=Hu;{fdGeHk`CqDO}Q`aObGw{)+Vfm*!$>RnH*2-dKGoJ z&!sYAT^c!r8f|0y&iOani7?T<7dE;3Rq4>}a-x%ao_50UX4a3r;!xafEh-{F{qT`{ z+q_Qs_?dGJ8v|6ZpFF7{@Oh69mo@8g3f)(WPI0+JUn7+IZvM0F6|6;h*%M$k0i=Nab zRQipXGDirb&M!rshN2|kbp-CPJ!Eg-4^uDvo;qNCkYBaTPzsVh`N{PxwbxxK|=RpqOxbC{mhKB1kj95S ze}j0kkR_~buiw_>5UO?a3i}y$&2%%@oV?O=0n}obULA~F4W9dExMf&q zZa3y-Dxt|MGql3@i4Utnz=L5j#i;j|H|kh2@>wO}CDBpT@|UCiGMqEWnjCD#`@J$v zQ?hOQ(|?2@FeN}F!x5)(BaGcTMDr2Nr8>Mwc2WCIn&@bp`&QLNk}Suk?tENJ4NBid zUwkrv>Vq;v(pw61zF!L9J?m_ z=kE{w+S$6vU$g}izhJxLu8=k69+rxW+i128ndOnPbNArw4Q=V5pBBT8Uou$`A)dE_!K$Kc>vB4|0|TT(Xe z+{GYRiN3dLKO871u0PB8yLRduRK3K3ZtU_(I@L1_pW4jXZm)lOJl0d>L_{B&UAn*8 zI+Aun{dQ6zNFq(hnlj(!Pjz3hUx~TEV-b-0c-XzA2b}!0&f>mEIg{i9OS#i7gOGYE5?j!x|D*D}y2O|>3DXRqbEROei|Se(ZZ%42w~osPr#HD^pg zN`E#v>%H_5@a}JI{pRzA)ZUxLDbu9EB0NQ`FWA0L#OT@TY-op=^bCUbSL+le53@ZmTcy1(@;AD!NWp7g%2CiU_But75nn=3e>(AUo5iPIcXX zuv}^Wm9e74hYK&`U7@7vMvI5!9um04?ak*S6jWK+#mFW*T`$?Qspx1c$LM?`BYpWq{v8P@us&-ZhjCP5Mn31q-M;BFr#_=D)Nhr zcc^qovt*OV@1&4tO*aKZgJkQb1|?m;VK%CS2;k#c&D2gZQ?4Jaxy~1211MOl$Av^# zHn6_q_qb8T<4Cw3oqy`L@XP9qB1L$L-bRWh89{EUMX&_p6Izw>U0rp?jm{d@Cc? zbd}OQrUZ75sep^VJB`OE0k= zMyA^i1Eodg8L7EnAJG&oh{zk>FI3T9eKkL3@KZ_>>+WU>Uy#+AD|QWDMYc)kxsAZ| z-(22BJq+;VCK*CL8z|k`)iO(cpT1(_E`n{*nk7Q#JyV=2z}~WLU8%eDJYT2VIoC{z zn<0c)>0x=T=AHAax3w#0lijbgVxog28(1n#%g{&cmktM=Dd3P1_MsJ8;{cF4Z{cY;iv8_5wj(j#$;Tc zu}t2=n}5lOdgFAm)gg*%$744hd;U~DRp+TRj!tou&)(}7zw%%quXB~0f)rm~D};w| zSAe#2E*G@d%+PNZrDrzL#)92`fl-(Gm|eL##0&-)%SbUA((!J*8x$>S<0NBJSWy-A zs{em?_$xUBaOTW#Y;1{(%KZi_>{F8IJ5c%Y4N)HzEM&9W{$Jkehc*J>CBEN5M!8VV z5#k55mK3x)&J5Yr9#}SIl{!dGg$m)1m(V3$R*~8Hja2u|1ErpS-*bD#4=~E>k1}%2 zQ8-CCTD{C``0N4}V2ei5*H{&L+T(6$^Y`E$(RvFpN;*P(xW#hq(P2Nwq^F8DnzMLP z5XZ)O;aqC*L3vw(U5)D?l%d=+SN!`VZ=gxoW!ajeaguDbx|v{;qChq@NnfmL+`lIA zhbH-GK}$)egnvkHMVrUPy zTr;r%%NSJ3Ro;5V5l#ekqHmO${%f%xCy1Vc_Zm$83gPci1up>}XpxWG9FbV?xbv)t zY8&)!#RoHafvtojswQB6)_Le{h#y34bSFi1Fa4G30WeH~eT*1*4@(_%`bAwxzWRT2 z`h_nU1sv248~MscFC4B!cn4%AyIm8Q;h7Ag)iqBo045;#4DHi`(@Kvo{B2cT63}v* z)vj`aRFbk>H~U`^$vyyzfl59Ti(BWNz3MENx^2N zwf_E!zjjjo7lQuVC7rJ?C5*mNgpA8NH9#GM_Z*|18US7_wu!lnJY;*AWK$~ObnPfJ zXsGz8Z6wO6c={+a;Hr8?07*^5DjptQ?7cg;G$tn}1x(=F=SfL}FJ9}BOpHiuwT;GA2yJzYO0;73S;pLF zawo8B?oCJgoqJxjnc9W-kM>mYrIhK#M*D1MMg!B17PHj?SM8gAHpfNC?w6~K>y(bd zOuVpqC2tb7x44B67)QpfPv9d7=8ciwah>AtSjZq<2s!M{R;bGFSQY3%?k-NLeR+QG z>XZ9N(eLzgy(R6A2AnwCYcHs!-66gTLzYKz!ydk&=DGfTz3dR79scx&`<2khKKfGx z6mod~^ikJ~|Gj|$XpTAW`Hbe=`r zC|Ad2N<{1K=X29-`{l2DpEvT?#_t#}^u^eUmE2ehiQ$c2iBJ_=+a&kX(z^{Xef2+K zxj@d`UyD@9Sh@CSCo`1gC_v{)v7!ilPfl^%(R#=eLG$0@LbA@$!P_|vvnHRC%$z`SfEhm?iWam;^bGRj_QEAVmWcsS&GO0CtkrL z2@r($yCAO!^%Yc&5pFG9-a}>C(p2LX7+1H|J1e!6+Nh8-_FYr|6SfNw1t%+2c(!Tk z7uuJcXSyNUDd{<3Rl6+KN^9W7=@Q{3-s!f5?}vIy3jY0%@Z~h|<;m}Fl}g`j`r{mE zo1VJtcRT&A5|M4GOcDF`)Q3KYIWJuMrY)QeGF{-31FcN?Dov0`%$83f2YldET7&=W2hcAWoHXS>DhpiAvFN`#7JVT6Tb9qR&jB!Q*%>Yb|C10$-enW6 zw_*=?m~YjcZ*_$nyJIXXYx30APHSmJw`F0)a>H@#dwl2oO8lChdsWO=x9WHngeC&~ z3SJJ{e&p=zxM3Wj)hR}C=FW+F>23%BPM2BA3_ zMFtyRbSx0qfqibQ7w)BI$5QnBo~eEwzFQI}3z6Veify#WdpOfg?^AxL{jfp&6LnGD z5kS?UoxCc_2i@Nbk_0D@-g8+F7k}k08I_(7TBMZZ!9SA)qL&}19F8G(bN#6e5lk9& z`6AJYps<|=pwP=rM^=FE3YxY{|Ez)mSqZcN1m!lE*YT7{w={Zgf`3xi$1ETh1a!90 zd8W-qDrC^XxsQh@DtK`MB3NU0hfWS>z16^+#Ep}Ori6^iC1*NS1sp?@W@g8ULvKSv zqh=Izjr~yU(=*Rcx)~2&=K>qN{ep+K$^#rjOiV`dNq5VYgC#bO9nvGD>#dqzOPo3p zY9B%Xh;$dxt?T&pR*`zKl_z6+5RjylpjL<-ke^bM?9D&P)iKG?H%|F!MTp$(dLxfx z_)7Cx<|MH3@CyMX#@PkDHee2m^xtwP-_1h92H$uwMUZL^MBH3q;Y223i%bFX=XE=m zKMH)OZV&zkw}T6SAY;K@OYr7kR20=HaJ>D5IGEXWb5| ztGmGf8lS#KpilBCOV5?dKkfuZ$6XkU5~!$Rm1druaf=L$ek@hnbCT&=f)568!| zpExvNB~k|r?X58|G+vzg32rD5!RPv5XpAz&B0dH3Y?Ws=^NAua7mioYqjg&m(u6Io z^(XVT6p-|Vw?RafH;7>V!$o~0Cz7#_58OTQOlAoZVXkSPlabAG5s2`!bb{==K!h!o z7yM4tCKRe*k;&&%DWKb?D`k+e$+!hlMKsameSf9jHL~ImzK+y4o(_(Wd0?~*rRidQRtHU(bo#M+be;*il^4+H(Q>g9lmM2MofLT$t_@AiCBZ+|;dYEPZPzmVK)MsZ;v?*+L zkZWN3lwTtZ-A|GyNB>{A^uJsR0uvN(F&W94f)@Eri`TDoQe1W$*pkZPR77>rYYl`h zXI}eZ%daw%pH-}%Ha>XWq^r-F&<$Pv4+{8>585enIO=61$*SQ@w-4u%(yrcKf5C!-bq06=8s zPJuL?X}An;59Lu(IEj!HxEKf>n;=YT3%rMmr`HPq53vcKZyh0`YN<4bsbHdJ=gZde z=(x3z!}4vNLVKsSCGs4nNMV~t6S<56M%HaMj;XfkBMXJ=1|PWmPy%H#PA76z0|yAb zH~Of;qZ9J2-bT}K!l^;(tL1a^y_0eDMw<;+pR*}b;+{=Ym?tG_6N4-_zxOz0Kz)`2 zzMPpNe!Zp(8bDsdRTC0c$cc;XT4CzmtF#iE3B*d=dn{UBm&` z;LIP;)w$|Tq+($y=J01O*ddyw%AjSVt9Jv5VI*ly{~?I;0*YX4$Oz&K$Nw|=0;r~> zrCYf8IFk2h5utphljE~GJ^a*jFsklj>2>?w(*IhN%DoDp?8<0(v;@#xPl-cXzCucy9hcBtXW8#J|b7dG4#cJ zhW%|upSyX4rHy}BGPxFfo|`duU0I#~2=(g7@qNi*2T=IW@xO-ua)VGN!RyQ;Z@_mS zpMk}kaWLjT=0Pk7?%Zm_JoIk^FH4Ly@bB_);oM+7<`u~sE`WnSV9Ao3rFEtw^3%#E zgr4{P2y!K7OH8EI_<@%$Oz{2hk*6RV(BY>v$X)|0LZA&iz`C#p{l|Jf6of9c|9$A< zn+wJ?jZS$F#cVZz4L9`PKYn&R+eNSrbpqqHKA>^c*Nm)=m+vWAX6*9j_G6AXi%K`V%O`{&#@c&{u)$sVbs`I|tGp zNYT%V|NfYd53o;`4{(f-K4zl_V?2)%n65_<`L8X5r>XmU2Z`tQ@RQ4j!V*uJtm zK?HpRocEHsTnVb<=bXWF#ZxTt#TSr48QIy~|NdOSBY^gRFqLSqX5T-9hU4{nTms%o zi0P``C6Fx{agJj8n;rWB#e}k#29CpYDDO4K(02Sc!DH~ltGtC&NstxHy1{+!-)Ccs zGzCx!``e2{SV04CtixQn273KH$c)k0dTbtMJJLh?MSUs^>XhZ-pCsa9fkB)I;D$Vb8ec?wf);N9&&ra`cG_A_TTA#{tJ6j&)-kXQAO z#J2>|-=0I?gG5A>BoNYdQb5WUhB8v0fyeOhEg-*>>T>XFASVnXfuE26^Un`C3IL6N z*PA{lo5U>%rbsKEd3gNm5JBG5iA$mBC0Ym{FkgIk>(*ST4|IR^gVivo2Ybo7JcG#c9|@{2C(^tMdQxr zL7;amuC`c^;Ltx}&|(mva)S6$;`bF_+W-Oifj=rsSmBfn#oLiyrXR>mf;=35;+qBqpw8VKJo50KmY?+$a&^IAguQ}pZb4`S1u#PKtIq6W zDR~3D=aRc08r?7Wp>U?IhY%m1S`Y!K`{eB5|7t|b;bblRc-%AOn{1YQ_uzc^kXR?MCD)%dafBL zUnuvHpxm2G!$FN6BDF6a;NlyPw4-Fe5bHYjpVBDN^^gD3no{ED?mti?2OO6Lh5*S} zS@0BFB3M*#@mRJ9SQNz-@T5SAGtB}}!e<;+bhuBkFj2pWNCJxlUKI|_?Wn90NGZp5 z-)C=@n?mN8;Fm9=4<#;<^Bf}rADBD_AH{WhY9d(msALph3_zbzcENc_-?1fwi(fwr zfbwf#uRCzi){S?AhM1=WBS?ocoq=wus{*SSw@HwT3Pp=hw9^55faca{S2lrQxD9BV z)fK=5(CTr$?x47nG4dD05DL6tI7)v9$zwdQgSsA{{pyRPNVLe)CFX$PRWvtI-d!l6 z?VCmg;Y7y)WPNcN5H+l6?*{^Ez@GqWAWF|qAG1}l<8#(fWK2@IbeWO1gl_##NdE4U;sS){~FJ}PXVB>QW;5u z5qx~~d1~_A6%mo@2A^|Q>Sw8#%arQ-DaG~JScJ&ybKMc+xIwcV;vTeikl>t!0 zobSFTwA{9HfVjmqOw6YUko7*c~09pz7l*d zm@dB62iP+~r4&QV;|0+A_Kyfzt`d+?rHs27vLAkYfT;>bVuz0{(<`9!sQ*ppNr|`M zT?>X}7oQgp_74}z_Y)9El{c@$j^TDb_u{DSGnfI8%Mmcr$FdhO7$sc%^jY-!Rlv#I zCW6Nf>}@_Uz#}o)Xke)y05-gS`j~+j*J=Gx;pVwh*2_Qif89QqZ> zA8M2uEar3C_fjy;9Y8z(!7qJ)H7R~10u;m*PyaY(g>i_GiZ=;LFA^YpZHDVKLkX39 zZFH{%0q~wfNTfHM{s_zi2N(gG0E!oIK41hEbAmU=YlwUd))2aC{{pzbr)q&V_+iJV z=n9GDB1Fcj!$d&FB0xrm%@Lmq5c_#SWK_*l&^cbhIgq8$r4ZS?2kCW-YohC~AUW!x zxOf_x>NU9V=y`OJ3efus7^BHtLI6VCT>#JNp4}gxC7n^<+M-3#x z)Kfwdx>FdS;Y^-FHaR}gr)yw@FGkjol?%`VBKo3CwgmEn8X)}?q}gG_ObmmxH_2sy zdi=sd$hV`=g+!`!K3g20Xb~v2xPMtGY5;+Hw~-!1lvA?6i3GWF4-He`eu&U0hycy} z>o&xt6n7N>7PHL@`GB|o7|h95dd&&aCW2f5m>Fvc$ZYudhyis_-A(4pcc$LzS%PQ* z^;G@iX9+QHASR=S6t<$a1aK-res0eUngFuzQfxpr2pN3YkL}{0Oqhs{wyLv(EQ4Oi zV;F#rtqNSUWi3Ixgk4Y#ZwFM#A(HjseCFLWc2m`&0E=^R~BU4l490KgEG8eOcd0_scOAk}&H zT*&c*_)vX6Yi1p00!W0q62)Bz2EDLXa6BWM8i498i^pxCq>16vhdY^A&DQXv!`8A> z&SN$%*^fR~4%xP&cueZTV&ivq+lTMIFCAMQlYP&)Uu~0Py**DjdvR~k-RC0zpiPt4O#S~`Gc-S4QFN7k)vGf zYcGTKkza>0-)?qQVryfTZk9f{*P3DPX~j!3xNe~(>5ylq z;LkTt=WDC0=uxTF2l(^S?xS_oV zzvqL4BrjR6YdUq7KVmSLP`I{Sj3{nlely>ovh^@ZK0@ZFjzL$P^Tv^xb6(}dtsa+# zwKLKW)%Gedk!?GRMN5@?$%2-fMV~tA70=KPZlY)^N+t_u@Pb*rgGQyyJ?hD4x}__; zH_aO#@gB>}SHSQYVed|V2X1}X=LSK368L2O+gMNTxp>tcGZt}W)Vq0e$$l@|><4RtsN@LLtoPDP z(`!9Hbk5CbbYt^P5%tzvn6cTtxa!uCkl&xnLa6BBtqRBnNT8U*txf*vT;(^Mg&fnpH81~bGl(5NtOR!9@cK|O}~ zXB+@2RZj7b%2xSnEk(Q7Y*kH(HnEtr+|T2P5W@&{Pl+Ve=g<@#eLF)u!BM%Nr}f-= zf{b#56CQ^Cv39F*K}A_bKz?tbC0!+-EAwer-&0x!H_yX*J;ANlgn5Q3wPJfL-p;2j zdL7`&Q=c48fkM5=fhVt@mUkKJ=RYD-IpF40kO@M-K8BGcpE|`4w3u9p_;Hvh7XS8dVCzv3P>&a=GI%ZyB( zK;{YC_Hr)oEMuMgJ$9Edl$fbAh+Uc93GXrPTAQc*Rod9f{>sH7j4kC}rR-dlTnIJK z4D52P?e;xq>j}eZt}@+ks}DW8T*hODO;A!M+=~?hURC#Z%WR&JrDHXgL`*f4VL8j= z%?vXUi6z2Dj3wPyhq(q;H>_%-y^nU3uIb3DT6r2N@0>wwzBEn}8d$l&_rNSdtLmw3 z@bd*mD_K4i5XyJeJQ^ws)fH}@b6fT~8@8iG)H#6HugzGHk6aqq@q+CoS*Y(Nb#9jK z?xob0{fwB%j}e@1c`$VD$uAaEb;O~|?Fp*f5w4qkWib!7uIhY=iptUG2MvY&c`Z^9 zo$>Gwp#rs8)lNnq@Zl`3ovT!@BOwnrKYz?6M?e$rX6A8&1juv6IuhV9oP(8!&9A9S zu}$RZQu<~#){9z(2Rmxi^_!HpKP(-pyCDIg(F2a5BBy zY`VJC5|Ou+Fc5j_JG=JRqK?UnPd)g`uqAHd$dJdljnzfdi|mKWG54l{$fMK4+g_DhB>yiA(gGjw98 zdKO6CLM^t|DJ9sz;3q!onJAyZ`wo?yz;0I~&?^yS>!|3@!-u_IG{W+^U1l=^4ywb` zs^N>q%(E87^QTH8-Yst_J9T7NyVM#S#4Wm`kKWk^JDx$D$wQotO3GttmdtLBBh8P@ zCO;qfBn4>}Gf&R^YbQS6Umvm6{Ny@J^4lqBMRi&R@H_w0S>0R+VK4E&h_%E}KisoY(5l9#mrQg3HGzvA5JP zS&4!-d2;DVRcQ4ZLon_!OW2@%R8gXxei`l4m-2U>*ji7*~~Q zoS;ON;e(32$NI$ZR*BeJpMve@B7P~$ zU#VSKHxDTby9t+GEbo2(-QDhk^2q2*1aV;6miuNmN=t z823I1oEuB(WVo5fBtC9DEKs6e%)o=!Wn#2V;!eb#*^k5EftNC~VnS(FJUTnw zYQ;Lwac&4|q>Ob;%G26H>Mzn%Ymb@}H4SVRg(Qvik?4)=8~(qa@Cc(UYJue)S&o}q zFCT!#RqLhL;nxb9@cgK|$FHm6euqhHAb1^cK@Q?3ydSf__asFjpm$l&%I-IVX7$oN z_orJ{4uw>j!>wbroi@X|*Q*MHi|3|XXny)vkHmFKTCZ0jI-CY7%+~j$9QLJ)yxPT< zzjy3^vU7Q_u-XRSOS*7lEIlY;V`3cwA?l?_rUbC`H!{T zQ43R@15=ydkxAJ1{m;HW&(^=!7v0LU?%M2GwjSmtVQ&f39s3l*P->!1Qqz{%O z8M>5HoFY6@?vLV^@z7IrwzG+`f@e49*>2eO8)_JMA70IjoxD0LCQ`k-_^QWV*8KIfqW(ltFP_9w!zf$tcxFNEgzJuktF`%-RIo(h_-A{~#+=_iN6gV? z`hp~muZCe-s1Tw(6{)gRCeQoQ66GB))l9Lg#N_WE;=T}yZ@-%Qo!FH3kkO)3%O#>? zPVR;#Zg=!kx29^#jSSx5*2>mu)%)|+tr8}CzZzX~ORJl9Jk*a~s?B~XPV8JU6{JKi zRJ_Xr1TSeF#0{%x*6HfW=#}09?>1}PS)Si>8JXDlSRHpB(|23bd$(pMcd`^l@;P_1 zNVd$4t(dGz$9=7j! zChx3RZ9T(gRdMnB2)_&uRq!+ca+mO2`^{0q@M^;`hBz710xGm9_C+RjMycawuWU@0 zY)n_-V5zRXCjI0iBoK362(SY0AdKcSf3$9be6IDUMpmSaxE8GakPKd@pvLy5LTe9R9o8C9WeepHgn#qix8nE&R6SkUgnAN!xBropIGHoALUYs7ni zW2+@|;HKP^@^EqKijzKj5Kj3D+@`mefn|3wgoAAF@K>OqR~?_}5NDokOo-n2?_3u` z#76v64%PA4wVG!(6D;W|Z*C%22l%{Ov{LxQMS>jg*K%!u>ZR=2vLtQ>@}WU#TxY#oaOIu}%X$DYwma_@$PF)w8G zeNo_KO6SUc?fN;kwhzL^2elZ7VN~_#P*HnLffPh_$%eGq{6Z^e5Z z?AQx^!(nS}Bl$E{WtW!B2vc8!T8Z>kF1<s zq|)z#%FLEkPH+Z`mxQnTde?VTc}(!3i;{aQsH#}fZ6B8@eSENxxS^gOUK6O#sT~gK zc>@AS$|c~P1B1*84D!)eYEA`^5hVf!d59UQIhq-C-edp!r)vq^aL=X%;(4zK3*>1< zLgV?xl`r)ekR;Hl)i zu4!ne(S}arG5C?d?!PgZ{%`_{Fipb-$kMM_-ANZU-hX@Q#cN5M#b-_R$2lsbR;!~A8buEqEH ztN{PPH*o94BP2Y`gH;Pu!nseDKRdi|> zB|rrEvL5@be^xPP5cpKc-JEJ}zIq-MgjOFpOW*}%yB31d27xNuE6|f7;Aw5{l36Is zB)PxcYhss^xya(a%!!cN3lI{v$N+o6@Jn1U5t?0DSluN-qoOrf=TxUHn~fWp*mNi@ zQpO@s!>%pGu(TWfaAM8vZqn49;El0rM|#(+BfgB-XO3AjESBQ>(y)>;Tr6uXrd+Wz z3h|UrReOGXCdEc?y0Huv10oK~ARTAKP2h!m`p)OcG479nr7Y~1)|TGg;!$zIuVLH^ zjWJefC5{mSGOVxZxtgs0{N@W6nv3>|6Y8Ur4UI|Zp{|p?uUxt%K?Jb%sH*#t&0|6Y zCNFu$Ghce*YVxLBze}U$m(mn^qurcNnJ9_(iU}KWWUvym^$#*j?G-8#wb@KA0}3h? zM(rB1A7d8vYc5E`Tz&zqfw^W#e~h_Ez^znYX9|^AY{xuk-fzk5U#{28y$@}dxf|>R zy9h!94*tqNdgpxyLE7=nQUl035Jf-^L+{v>Qvv(bL+#k8#MB0di6&J1fUTofK|(wMCsc)r+CMc`P%?aMg;^X0C^8 zZ5?K}Sz!mDVA3kaU)nLJ`sn8dW9twpq7;9maZzFC&}%ofD$g)hR&bRp$J@rP#-yB)o^B5E&VYb3Rdc_T^#q(RKBKhv2^^Yee8S{U(tTc3!gYT$_RAmj!zu zQ@An5S#hWgRd1E(oUM_HJU{0e62<-a_AXhq!NB2HnT{Alh0x;}PCaAN0lT%$CBs z;)kjgJ-U>{FiViTdFkucq<%z4tkL&3aSDZgsHLMr9x;8#fa;LY_=6gePdJv2*)3ZB zsFl;UH&Uq1Ae>e8JZp2Mt4nb7al**Voh)o0v*gl7dG(bgPql-CvDlQB^+I`eH}8cT zUvoDS^tm#1E`8l(f9T|9`-?kH%p`Yc>C+m64mOC{T7o7*ybTIJK9VV$^aiE0tsYX* z-kr7-Y4-po31mkvL!MyAlvi**S*mCAhqw&0%&L#Ixkuf|lud7?l*`mP11}Kw#bq1q zJ$K^nnKDY7XymIl1Q(tx1CU2`BpchLlIPf4uLE(N$vMKiWSi z+pz8az8c=&tKO)UBn)5PLHDYN>uG=_i+iJF3B}EaQVYM`dh#a@R3t{R_xtUKv3vbH z`&aTtpqSK8p0ty{{MT6_jkV3Cqn0g${Kz3HtOHp(${YK#^M1Czi$e^x6Ry(ZXRBc8 zg!0V3TeYYaN}f!7{qD{Zid1lRrF(V5tTm~~L=xUlRpE~Ql5)0Jge;$rA;>DiuFh&#wiOb5{vIvjwFh$XW8e7l1 zKB#O3)wJua&c|6Htl4LiT0&YPGw|O!c3Q;o7IV8EI|E_yU8}oze`Lxo5_Fq758w--Pl9mW`H)}vT z<=XVMCnd5?`$^pJgYku*Vp;N3X0>x$`AsCS2?J!^Lcbe`vE3CLg*_)SH}fA{L@qpP zmE5<;oqv>*IoH` z!mWW+){Fo2u!wzrW|K|jkDYc0zk_JjY95YC*isbFKx9`(3!P93a<5XV3ll_V#ZH@j zOUp_dGnX13A_)&$?q|@s|CU2VTwO-}VBgu|j-dNt>#{=IEC(=65Ik zO}j8CDk@b}1Zj$bN>i$o0Ez-qm0p92fOM&W&{djBlirmoHPTz?(yR2EfHWaMXrTwr zzVUg!^}T1U^W*$GKU}V?gnjQlGkf;THP`I>F_hz&?Sxh`a%_8XFA#I~gz5p7`n76I z_^GihSgbv(ZhW?FNfnETVt#&brvg36ywS9Qm>rdKkZoErqr6xZGML&0 z^8n$mt7${E%EKI-pOWqyKSn28df4$?3%8Fv`V1-PUd6 zSaM#pL+ghXAAhYJp}ae0(ZArL)q|CJzBxlZcD-+Vv!Ql(Q2rd)NRJW^KO0;e9 z{-)!fyYL}c-CNY#HVfQ1yJL#c<6bciLDr!P-^InO146kMvK{7Af|&20@fX8$JF65r z%!5I6tli_6E3`-dYO3|_+e~g`x|aQ9d5&t_M!;egMt1al)-tv3=k^mFBps1sN824e z8D)O~l!04L#qMp!8`;+QH`-M7aod_3j*DF`QQ?ZJzMJY+`d|}49Cyt`EX?OuSOE;n z1I1mERPhB*+LsM6a1%cY8!u1m&Alo1;P8BQ`%^F6J{%v7-`KYqrO$vdtrPnQ`$y9k zQC4Pzs2+xtF^rs-Wq?G-z6wtPvS|#@Gc=v1Dp^}Fs900IxoScgE>7j%T5ZWTU*Sdd zL_qEQ3E)Wv+%|8**idgnb>0m>I_1-{Um|<7@>Pn@;|!p$C`>(WK(6l>M z8~f_D@Oo|m<8~LN5L75UvG{AVyUZK2bF7_*7S%0;XeY}qnu2|*i3^cA&wM?yJ8aw{ zwjV7%EjHY_r~Uo8$sjyNN*`A3Rf-(32+hYA4I-K?)>fLHedtiWJ{0>M<@DEzPibu2 z(CrTX1(I(Qdy$A)5Lv8xDWdD8^diOO*=UY?)1feRClVCe`y({SPTU%3uCrvih9FlQ zVLW#?5UMV*6$ECIy+4|2RUf$wF+It>LDB0}Z-53MAzZi(O5ERfC8`|IQ-eikG5`l| z>N-Ru=-0S>85-}KH*^S2fz4Q#Rvt4Y^z^=PPbK*KLJZku=#*TG1RvZ74K9OPD?g}q zJDhzEdnf;1n_BSHQ)$pu38-7eud=Q}{?i-m^rh!dx=Kp5JC&WlV$OU@%4`Wig4uJB_6*T|vj^aJc!UV3!qtYd` z@$1&k>yNI@?5L%@xtpb7EtO@r_DU^pzFv3df(&UXvE=EH=Rtbz-qJSKG%aaNxdS! zsPUijwq3`v{}sJt*YK8BMFGxcZkyP`D`~%-5@!c4@_w#J^2N|!!&Iab!;2ntU!lh9M&;&Q&eBz|1)wFxy$0wC>KY>zaXRr81=ff&WTOa zP=KQS!xj1eY0~J8skd`-`1XK&?FHP6(m#@Ymdo6Cix7M6WhNhH&j?P%KFrN@-<|)w zx9SKnBsO8;X&P7EUe-LYt(0&zVpSjdZy6hF@8j=Y?hF96uNI7ZsLy?C41T7gx8sz5{SumE_VsPBcb~sG1+VbpExh1x^TfqI237T| z|LBE)&<9a-GQ<9-se9A2Fs+Q#7>WsrJ^~gr>cZq?4-=hxpP`0poyjxNpWUR!e63KG zxC8KLOs>??^4Y$Og|*!AGg%}(680!=m!(&k3XE$5u+7K6lU%(Hw?CtImLy^iW>0tT z)8P#74P!h*HYQW4=V*GPd&xj_%nA$@K_WB`XS%_zDP z3fW~qd@A|JUOeG+em@Uar&JTDu5LknF1`Xdu+|YwKLW_mYg2Dm%5u`Y#?NLn4^ltW zKnBI$Zc>a0pwamcOM<)qoyBZ!x@&0xq8Aen;!`t>oL+vPq*|`d12@eitQb09Wxe!S zF?_gUr+?>u{=pF!aPqfD$M@-B<~_0=2y4)_n*LtMz`hW_Jn-r*!K2KCOQRsz@WK91 z-=kc7(y|jlwA(I!QS6CIK6Yf!swa1U7sh}|Pba?Ehw-a!XW4z*6b*~CiRj#y5+>e^ z7e2gIwOZ;QQ8H#TJn4)G#wR@!0+-C3vpqBqIxN|v#(9*S`vuGQ2zIfq3c2zmddx)I zO<-Y%59bw8o9mpdQEl3{Vu6<^bhF(1(^%Hkavd2GWvq&_Me)~`aI;q#vU5r4SxAb2 zGDpJXoigT$>zQgjhhs7!*KOlLTNS=u*V|WMo##5b!L#KXSDjy%{8$lcy4`O zaQzf-ca-R7bxI357H(;-^YGIHF*mY40eki+pS{g6j7p`II@}eQoqsfAyi^PF=sn|p z*`n1>MN~Uo5|8eE#iV$_F*3w9sbCsxf52gG!x?7MQ{6uHxyu&eGMtYm4mmG8%^j{Q zDjKBI&NR;ZZe{z^uegMh@`>QJta4S#ij}06H=u4@_@`Q=bE%)#ii1adu7*?dbjPCc zxei2*)<{)6)}O`WtAVo&0`ku;1S{$P3gw2MhqeNQJE-sNUuW`LOEgLH{qFvED zLEUlp4X&yrzf|cz_`Z;~Pg>G>$ceAvrQWKn?=UhxPM&MZWOW#`>7_&I3>yg* z!9R?QhD>sTpmcic?eLZTYV>Y4)lhGRb`w*fUaf$79)eP?7O(53XN374y$pu_7% zz4)z|8om6e6zq)S(RZ2LsghU%HXW&)AE+DDf?v6WqaaaUTK;{B97HQP0_EwpfMA6Smnv(oi|WrF4G_htT<)aQ@b$#q0!6O2$vYM*m<;WWcRYBy2U2hd#ck> zjXUvmo?o8QJdXbkYpONeE7)rc0^F9_#WviLZOC{GxaokWt_F%e_Q@b7Ma|f|TPNqC z5};m~>cz}JbV>3z(49oe5OwSN*OSYMs=1(aV~i_*c#x2Q$<229Q$Y!+a!YOXPQl^) zZqcgbKVYvoDe;R|4xpf+KRx|>qXl*S&C$R*$5d~mkmX<)%Z}9CM<(C%7gyeOOD=k9 z@jda_u>zIuXQQ7qmDu)Dg+6W=iu*qwTIoio`7V0oz{s%rf<5QQ1p^p_iOOaHV`WC} zLtBLd9_?Baa&d_AMha}@e~Zv>o>Gg7=c-@SB`zLR#t(|GLqtR?f#kpb+qu>tS2GKL zz~^p3>1)uim$0n#h{wrg43p>JmS{n(V7-a;8hzO?f`EH=U#_R(chZ?H!RB73JYI%Z zLXf3QE{z5!<$I@?5vU}(Us5r$7?|DB0}|cEyL%Nvxp<}=vtpQ2F;a*16`{B^^KWVO zTKo06y0Mnl%#N#aXiLqqVVbqhv)Z4iK2&WDR?yy z-yg!X?sw0N%uB7fW8*RJsuB>RCG*d5HOG4Ur4_xBxlSus^HVlN+h2!SGqb5>Mnbp^ zT`pq37jdr}ir! zC246$XKbGz2#7Xe1zLOtiR5thnB5aQQHDSy-5d$d6TDGg7nsd|h~+1BLCZKs&`BYD ztKQOzJ_@N_$3-11={dgibU4#c=?-Obu=wU<(PrdM`axn!Wx-ihLtgRG^9m_$Axq*n zh2#tTxvRhL+`%!&EyQnL7UUjCoSdGpGc&w3JSoYo$|g{XS1vrvO8{O@r*RHGvBBX0 zCw})?_?u)sTeK4$W5SrvQcDbs;&+Th;=b9B8^tTD_PUwX ztZX5jcJi%z3sVK(MhdtW6*+ui@W7jfa5+4dV-|Lunh|XrZ5|PvPI<3aIZmYDs?{T?)~CnG&v;&;ngbv3Dgu@WQkcRFDE_mmr`N0>(c zWl3Hw%^OZD5wsj`6x|XC`4W0YH3%WOlU!c6=$a+Nfw1+g>~{ubE_EoaGaGji7(XTs zqiaW~x+cfX@1W*TZu4h`SZ^l8FAxiTv&x zc2h2ko=xVau=B!r9ijAI8!M#y_u_K;IXTOk{l}&-dz8CHwG2PzGV!Q0xkjIdm|r_$1qbM4 z+U8oz=5l4{1$&m#Q_P8if)&fn32b@aUVUe2VeY0(*h(3kDe&VBj#+-G_#yNAP?a2F z+_)!zz=#~Xp%(PPGM=Qzkd;}be7yB8?ZIFFyQ%m>q??LR$AOgT8LvT0vGKQ4>GjI| zKFOzJDcHb{TrqX7HkKAp@iJ{ONS^4hM$ zOFr4^3)8AG@bJ}{w*kXDm7fzZjXRRW(oL$Dh;dnew^iu}Lj>WKdQuhC$he;*$FcbQ zn;r9+Zp+>MKm8#()$Xi__v3$q1{cQ0@nMZiNlUr+lwd130Wp_S>ZH!+jbfK=b9g^2 z8zx{^ao<4}my5WB{hM24rp4{1el&LIzt`xKnu}Qx8#U?M(}DR-`nZChE0bi8bHojK zZl;T>qOAodxJz(0543T;jVN8L(26e$Y|-m;xB0-mKL_;HK?gAJ!JUEkTwdJ69TF0EQjo7+vMrWo@(OXl-Yfw?i+d?0~Wh%|!NaVKWr#w$<>x%*n5 z_;Wgwb+%h;A#P4i=R3T`hdS03@lc}|fnM@y=H2aNtSOHX%^(_Y;^T9Z%0(OfGcLWY z#3pC?tkmRV^0y1Tem1CqYX$pxWLN^p|14X7C9d#hZqEZMMammQ&`AEbs4?S;W6EeT z(jP1uxV-5o!;MeCQ42VRaMPPAamdq^B(>5g& zD}1y}!ODz3V5#m2$j^fy`BZxGDgsFCw+kOpkrC+*&X2%9^YCXK;h2Dfy+Vva}BH)xeKvAY#VdvJjcm@P!QJr6MYZZ zsjKP8bW@LNbX)5FwPn*4q(U{v@T?Ek;tYM6P_|`MmA??rTb&>06fSo!B6ki9g(T4R zj8r1AZHCEjN^K`Sek8o9rY^f5&RnmHc-^fX)z8;ok-7}v{z|0oP$Iv9gpaD@kxzc zroLI3)wZtyF$62h+^p-CxpWz3P^x=v#{WQ^&e$pG={j;;);1=1N;4$OizEdfo+Nam z1s)9ycaSItSb_~s#8m%!RWvu_8pg9}v9f*NR=4~9@P3W4AEWTCLx|=s!9GPeFzbEL>mLX+(s2SzC7G^bB$&y$zeaF{{&YiPM$C$t9Q23*ET}PKCAZ+Gs;fV_;UU91`14NZSmctC zNyRv~T8F<+rW0&tSF58HLbO+=#WPg9@2@g)FCG}vDGyTrxDDDfBHo6(4?{KM3uRKm z8UOOa0WH`-NAy6e%rZv;ZB@GCOLXWGDnGT1vwAD|1UR$61ZN zm2P5|`j+wI>YnvERh)l4dU!hoI*V9ZKEvQE`%jNO?V3~hH>ce?Un8FD#USVD(H0|? z{?paXo%Um6lU(BPwf!$bZ+1`Nh-k4%G-&ea@px$G z<;fY%oxQ0b-;L+T`kkvHl-D@LxC_S?2W%TQ3wu1z1s>GOpl1eq*C3p#wbI)NG|f^y zB|ULkCzl|cg7O*Z-ZPKs&}XY}RO?BB3;#eD=BJY~ju`hMfMni$8mSzgRLdIkeDE1Z z)xP}QXA=Je2Jt6w0qANDb_}@QGzqHSbgetZ=)y8ov>lgu%nXr{v1ML=519QyD(|iY z;D|(U94#1Eqtre$;cE=O=j3_MNkeTrxd6@GvK_DERxFiE9xbPlnwRjbl{lXLFi#Ez z%}Laq0d9gjrBGFnx0-`f@ZJ}b-0($lRjiwJk_3nZi}rmMq`rPlcYXk@DTVySn)wf6OK z;69IL`|KZhdWu8UCeQDNZiRqnt zB@o|z#fNnM!&#FuiX@up_0^Pxxv+Xs*u6=Zypw+l1^gI<1&$W(?keB&lGpv_3_;!8 zGGP3bX%%RhF{2Dhpo^f-NZOY>v)^(?%!&DdE|p|Te(W&osuW3YPu5u!BO6uuy4vI* zI%g|iZb1&6qb)Q1s?5-QNV^2-v|WNkED8RL!lSzmOUkh9`;ulmTY&mlxLmSl`kR3= z?sKWN7$@@*Vn3$d6DTKnsBoTM+kS zDn3qZt`8n9m*ieLAhzMMw}7uT@x8)Pv$?^WLmd~Jop4yV!pDx|&|TRL*#$98YmFJh85PsiK} z{->X79uLGIA$zQ6lqmRf2`c_eu9A#zU|Z5^oP?K(Mysc*m1=u?wG8idGSH0`KHERi0kdKG~9Lj z{K7$Q;|JXRX)$x^sUs1C*YgB9W6SbaME3W2`em){bBbM6Nh^^ud3dE){-dQKCdbY@ z_QNJfWCnu~Y^zP?Qr`!&5xHW?(1Y=+zdQuTW@Xq-Y zNAC$xtiAIEPzWnshX)@#Z6Ae1Cr=H|P(E4TAcy)3tIioGJ+8d^wsi=^Zk9S2i|#(a z>gpiN+4*yTs+|ID5Wnxw2n%&bO5n<;<6Ot=sIeA6Ckzv;0zy{%wG}KLOtTh7-1M zXinXh@T>y=BB%_t&AK9_0FIw_OpLqX@L*<64^1#HCbAc^%r67=A3THI6L% zMmTh8RP8Hj(zWYJ$J2Y-{+1}JVXMd4)*f>2=vv4BfEOUyYhN1r_ehHI+f+C{1&PF5 z#Af`hi3~Qbl_||ysRdnFR*2||gqaKOJyTD02$48|U;Q!KF_Ck#VdpH5xWWf5=0pM+ zit3C2w3W@s(Duj63^f1g?S$^C`9ELV;2jNs>hIwR?Qym|tY&gb^kZU70@-xGtAC~&>&k2j-L2vJYOJw)t$lkR z1k}j*ZWL zbl`0hpeSIe`WD3~!J8oY2ws9L8*98UZZf!rPr161msI9I@;L!(d4*)&Wl3ucWLT zcDanVpJgFv+%bx^X5S#m^X(5_ey`=1Wj<~?i}TE@#Wm49UBU&Pe|ty8zN}h0WIi2G ztc?~s+!hVeZ{w|6jWW|F+SWtFy7u(z=FfAgU1Av4NNL z2|_nIbbVt2FUxS}oN78S!`@JX?(JfG0$r~0qaf=Zl#-}{!cnNO`wPwZsgfUQqNvI<3 zKAxI`?w4`*);a0LI~Tx*&yQmr{#`);F7XkH-@oxtq~4O8 zQS_zeZ2gNm#)u{8ONOhU{oc<<6!a~)z`-R3JtDN=tpYyBWeAojwadEKCEq==kNDy( z-z|Tc_VOc|TQM(w73bSMJvQ8o(=tRTcYG2xd#OyGl0ts(2iv^>wij(*BNJw@ncv2f zDjXKNI}>{+H-{uA7TY!Pv4pHFl^5hwjPJfi!8A6z?+Ixn57Abb9&UBrt+M=J1yIt1Cs!;QqYYxl|6Lf@RqO%A7s zn1`NCmH-Cyz8DB@50`emAzGk4BBH@^hFk@g0oU4A*kF9fE` z0R}K`cyc3zcBH`i^YUnQ$CvE4zuD6?MmM_2Q|Cl||G1Bo*`ln*(Z91a$Cgk5gD5{k za3GHN9O|2TY*sivtVm99+EZ40$k}qY<22cOS#N?vFL%59KWQY8G*~{Q{qyX$_gb7r zf?(9yQ&vprr2K|p$u#6NKp3aqC}o@?CBO9q{Mq9X_ZN#(^&bkIn_i2)^pL&K^eH;x zlV-NA?G}A-#L8l^m!U%j_pwPngK=b>Tt_vZ*YXz;y(INJ-TtHfHKCk%bbFT59&?Do zcz$Nw?kx2YCp*i5e>kG6T2--Qrc!jBO^Rux)@bOk@>guiCvbnofb$;-vTz`^mt&E- zCsM0p1?oF~S+9P9oDH2pa!)xUg5pBarsB4RBB+( z?~O}|8iLcBqEZe$H0;vCmRQaFO5B6HdbutshORY9NHx{HSwmNkzswcQpVs0oK4YWP zkvi9xt8@X(frQKe$i(ozi;^TTrdfgXrh!Y~xh3xA%+L&b$$>Eme&%Nd#smk(G;@1C zc_ZxOF#lYLAYCt7e!ANX8y)9#UABEgLr>67NDrP89>9SfvtCLpk|Wc3H|T1EEqn&| zm=$(N&V$+Ra5m(`%f3t2l{z*H6Q~>6L;Bw3@&`@y9LRBgbvK5 zuGz!_OhpOEpygv*v~Pp&uvTJa$KZ~H`Fx@A_|@3W$!PxRN$oeI4Wr$MdI-s<`IQHD zoHkO2rSsal#*_3_i)AHhY4R_!bV@P?eyAHMMCZJux06KJVDH6y87=(M{KAzG&VJoX zpZ)Vfx8R>QpMyC?_x67xdTbobaLrCRCI>@ZYOAg7Y884sS+4@?d@o$Na5pCm(!T^k zW~?V}?sF$vA>tnUpanC#ro~X$%^_I&^o_W+O3N1E#-@CSv?h+PEjZg8?U;k-BKi94 za+mpd=R$ICmMn=xeogNf(@g9ksh7EXPiK;ePMlUkX)r9x%SSR*aNvzKyoE%%Y2%09VF%+?+d zTiVr&Js@h|*y|EcxD$;z{1$OfU-FhAJ5GzY=oj{q>|s|V!|nR6?>*mg(tD;XXU8OY z5*W!*RG*}!etJ?ByT&pB;gOQ-fE}~Pm=*!NpTc^d%LQ^5>zTh(^{3~%j6G)by+*Wh z)!3KT)saRjyVoc8O?Q2W=Vn{8h18_KaGa<{1bD{6@uN&^gpAdhvS4S>26k9Jkoce zq~}SLHK1-%i1<35%yQ+=G=s81P*f(S{J3U2A#|^@(w?QKW<%@6qX8{S&$n^l$X9DG5NfaaRrk|OfllG1x3O2N8KZFzL;^lL2#DeRohh8DYXideTV`p>$+ zarYA1-KluA64X(mKGt|ia{w1h3V~7 z?+1SISULYYC_p)CE&GuOlgg5m{JxR9N9%a+jUXByFgl4(Ipm_~c`wL-E6Hw6MG_oH zew(^06kI^rgsGk*4wQ?|znuyT!E%K+2fv&D{exiF_svyYx5DxJ;o6`Jry(oLwFhk* zQF#`94ZhllM}#|rc3B|zC)iiuzQR>Xk1(S7EhOyw-G|7>0T0JY@O%7!E2YqHPy8;% zZCz@kExt$GW64F#8ED4NWy6;~a zy{x~(ZaoMIz^rGplr||w*(*SDE}RD&ekdj`5DGq8^?(D_wcOuQVwx6$B`n@{B}4zT zb9{O1={k)SY5mg1x*+;sQllJKQE&sEyM5N@=$nnJfk^COeQN;Wdg(ITFl;TQLjUe- z(o2w$O0$`Q!@TLsr}w}`_?^$yEt1XF6u))qw!J`91+_PiP3tEO@m1bN2BQbIUXMunwHl0H$I4T6bIrh={O|Bkd^Fu+2mqv zgm}~e1HIy)o|AILyJ^BQmu*y0e;6zx(fG|WW;G5ex z9bP`suS>bD>-ta!&w`WPQuf;6RBM~;Tg0UqcWIX(IvtWvMV?gNw6Uj7yuuR@1u8wI?a`6b!!_S7n*;_jf{5rzP2xl0C*S%V zuk3D#$a}t;&c(m^8$>VG#9KXgqr;)NHqief3Q4`p5Z&aNkT?0a_d4HK-=Z3!-)mK7 zleLM!Yb?0$q)T`n%sFrJuf>U{IpB*D%aP$2vA?$#je-B9pk>R>P>RAwmGn~4Iu9U$I3AxaG4_Uf6)=|MX$ouyyJib^Ip6@kvTU@cBTC0cEzKqsk z<K@73X^W<1)zo`1|^S8K#qm|1!EjTwmsuC4iBrkgL$GTZ_ zkH}u&1(crX)%vo{EVIu^7H^J^hk4MIFxwK?N9}a!)?1`QJ+W!3*puuklnShJ@moTZ z2OHY7VBJH^iO-s8@%p&p{PEl1YnZ}yk$F^wVi#|RMz1Zg_#$h@PURwhHD5v(dj^}JBLWkp z%h$3q=LIE8!~3Nd3+K|2iTi40c8Uu&n&Rp(L))rv`T=H^#QBx9XYnd2D~C1CCas!x z0?ARVlwNumFQ=Hvbn`OJ%X#BZ9cSBB@qwOjA1Y3Q*G zcfFy1;xc%4;A&CLp258Papa*DbARso+PkL2kZ19{FlBy_kTL&(-vs%l;?PU(e-Z&V zJEO9`Da2Eee$+m9hFTJ|mIS3jX`aI|8a}Tlm7VJQwjqaT>f}N!K*4ORr6tV2PD*t) zcF_8t$Y2CIVXt#4fV?P{ljbv!K{|%i5_>KO(Kvqv{nNAC(khMq3lPFswmPC>KS`$c z_J*bCA=Plr2UKJYy&+B`er=U&qq~Uu;rf%0!*WN$I-YxrZkd!j9hq*<_^TdKjld_AGtyp>N%=%JBy#S>4_jEr+f^B$@?CY~-CJvi zn?0Np$O`+pG@HrFd82fN$j4)@Z->)4B)0|{ZY(}IRQ<-*fD2KV3eUvXH2d^gPF=BY zHt`ZzSFS~cAD|@Je_0C9P7`Xl&OOW|HE#?-gBz-y+`$3OaJ+qye?R?LjL0eDGFdn+ zQn81odpw3FF1}F9FnAiCA-5~(+7emlJjYLGJCOaszyaSsFG@SDiTdRFvQ>Jt$kN|j zCge%YVYgg*z}&N(8wTWBv^q^MDYGua31v%96d&^GW+ZH}I7SNEVh6Wk|FW*SC`TlC z;YM)_zQgmoh)Z9XPEs*88eb68UVixI3Y6K`GxR-1o_BfV;&d!ugO6NStB|!m*HHiA z+}yE>tr=z_m;-$@S7Vm;v?V+Nx&Lme&U3HDB-5_NlKjd|$nY-6)?pq#cHy}uX8~ff zEKUFtAe$fIz5^juYIe-#D4aZr1V3uG zpmjH2qLOLhMa{EHmw_;(hd|icB^I8EXaMeHPTBShXQ=tK({YW*MzmyCVj#tJ0hv#c zcNTw{xr@S+s_3RodWbGf{g~d`pn7b3h8FI0G~Mtc{#muD^<%OTuu(KSJj2}h@Hm?x*CDLJ z+&wL4xEK@&%Uz?cBBAdhaRMj2J-Uq z9N_;qeQ9})G_A#J*$(K1p3Jr-kmov%BXC@as;~~GSRuEuTMU~UtSu%_>EI>yU6nzz z5k-8Fm(tr?dxj?E=rDUT*E*rxB4@Hlnf35rwEjQ*DextF;MK>Az284njF&j!h8|G% zUc@cLoK^TI7$pS1j(9h}Gz$ zvxbN=D7%Q2bWM0hO%G>9dw%1N-AQfhXLrYY>=|cz7EAD?ah~^hU|RmAXg=dlvA71x zP!&muHW1tX%jbK6Xm{wmTTrJxu@|!*F<6OI#dT0)mIWPB38$=y^VW&wn1y|i9DJ^k zzs};g?2$L)JMM&|+fd8H*jk3<#X4PH3q447$hH~Xt(uVdSwzR`NQCtfihWch+$Fr+ zc7@E}x?UQeULQw=iei<8UnJrfq9`#1r!Gmm z@UTf|%YmK7m`GiLVTb%YgOTTJ*Ah4@ZSWDzp!jD`{i24Ak31&Th7yx^cTkqyj>1eJ zb+PrV6OYaJm(2?azj2JjR9tV3Y+^qNYkxfhsMtfF7r;ZbUh_eJ9DeM3f#Lh$RRbXw z)wPCw(WG@XVIrBvj|r%} zH1ciWG0H;;4dbJh=SPuJt5+452g8GkYt@EeIkDu(2*=;-pPrpjl;`{};3VsM5|Dw{ zL44G%)$KH!dFn!lt-qG$Y~N=_*53gd{YAQ0rD&W0{GhUH3}Rx1DBppm)OlT z%UWsHm$>h3JX`Fw#4V&LeUkmRBTWE4lS#ot34AEPedPdhiTp+Li1}=T<#V3v6RzM* z<9GO`h02Fsn?g>PUllB-bKDz%@uv!Cb&5=bG;*R2jUN%wp20y(>Hmg|h2X?+4(pRM z)0-ZgnaJPwNEzuGEWN+P-d11VY^H6njBdKKX=ex{6<_Y;2Cfth9!N~s$!-1TXf$YF5)@9$*yiq-#7LefIdSXgF)2Eqcb3( zkbxLyfrK&g?!Op^9L$4;>B(1RFvjQ;bG||7I1zd^1_f(0+(27rI+8kpwgQsDpY6uJ zI1#@vw3el#u_B@{^D{QFc!Xw}@e!BV0algxp^Q2`B8 zU10fVHD{q>g7*{Jf7?+AY)7N`o`Vl^E`*w(Yp?Erl{|K(0jVh%<1d)fr*3}(03+-I z0i44&chW%m;y?e>Q-wo$>^<}=Qa<3Y2q~JU1UWtqlQ0Mu4K0QoGgtX=4A4y#>h z`3s3KEgr0Jkwe7`=y({?aop2u)X*Gkfn1iY5AKVdtm@7~Alvr>X}))W^`+L`=m>{Y zlBRp@GW6RXkbbuoWxRR`RuTsWQK5TV2^kv=4Uo*~*YX*l?gM7%3YOJHN6F9zYD94q zpNhj&pt4A~um_~RH7T&JLt7bBFsaL5fP&tyrwT(NvtkG98t3kIKiOKWU>?gwu6kx) zz%9EIj!|S_h})z$mBH{dtvA63ldyu=d*IPwV2A)6`F|&X1ejF!X^J*T$80pKK10i^JwXxyBUUj z!{lR0R@R1`9?BTsMzfha7lXPZph;ea_RSe@IZZGc4W#9UFG{DNA;uutT(=NA(XtN( z6iCtRS}k6k7SiWtPH-)>yZql=eh~uu#qRW<1KY*~%%a+gx%n)#72LphZao}d$WOM- zS4E)Z3JG(bFTifE(WE2+EIVvL`4C-~A$74rsx_W@ z;CQ0ifI#rKN-=jL?f}s~X?ww^4piHI*>&F+$ZARzh;*;tCX0nIR$^%~n60T+WU8E{ zmadRA*_9xwe&Nc!TX}jVpL9$QwpR+@O+SV(0709Hhp!pL*P)u$%lcFO_~xMN>EMzZ zwJK-pENxVh;jg_;lo8L{p6MT{!C%`Wxx}4Zy`>+5Ej9fl;6%LAf?&<5zi&{Vtn$4y zSS7jE)*2HH9A?GjcQp(wjJ6<@{GU}pu8#V?Zjyv)=QY>OE)kQpsrtT5)#L!dZ9JBb z9`5qJ?fQe)Pk!;Uy07_+xb{eFeu?1G7k*uFg-ff|p$EqK`6^F)B(~5*v0|g0D;*r; z9I9u=F7lSwNsL=BWWTxng$1UELE?A>nlaUGa`zrHl2L%Uy3_u%7ZxzpneR_^PlUO~ z4tBqkUYDG)tP3Hm;952)T+tel{S&l5nD%;ads1QBCAe+*^jY0%WCC7t#P?=fG#-P+QlpZV+aKq8!c(nSbt33C}Q57^_pG$+sUL+4) zI&oXje&H5)*bk{J)E8{gqTauY2_WYcGw;{t2U%(a*ly4!WOIW)z)FM7GC*2M&j;s5 zOxXErpx~1MC=g~w9^h-GhVOGI#jx>JZ+#WC8tDzl5fv3xi3JnrAPgJX{_#3Kz^1!y z&I9zHndK`e0y`AS_fbI`b(sxp)PH9VD6OZlckJU+}9puY369P#>fUU-8F6rj_g+v z?-G4HVkjNLb+nk7oaVN(+E?S@_EB4eDJlFhn1G;)PJ zkQ`tdEZtjQC7@}9+~$F%(F&DiO+G}UAJHHjVy~Al5rK} zZFt=T^dYs6LXP-)UQ)9tJ350_*zmS5u!3jx^6V#y^8+7rjhD(fEH0v|k%X_jhLulp z-KOeDD{%Q$N|*pz_Q&m=F%M)|TxV$)Cn|~#=lHzB07tAnQX78Pq$4VlGud5jqUF40 z5({VU&Ad;j%mn*Sf|f%{!J_jq0XK8?U5E=(#|(Wa@r_Zls##LZ>nC<4}>zR(LeQ z_#&!+AKGnB*QZ7QDy!?tz$zg#G|*E)tMsT_xwTE$8bxB3g+_v{gcf2)5I z4|bxdn8oD3KlW8h0%e-J336o9Le%$fi386je#Zs!(BQ2)K!m}hm!6(%vASU}4G(Kc zJT=So;DPY#kKciZx-j?XUzs!onvGbpRac4cupi}hg%4*bZ@zv`s)2tuICT|XW<72i z%%BD6X~`a1VE0(G|Fvrjkvb}0|5m-fl%pJX5K>z9_V>+LAKwg!6HIDFL@Gp$)A5?x5{nDW=80sQ=lj2(n5kmaDrVk!=J10Nur;K z0CMZCD=x2$2Hsdt1780^aNxal>)!(}LoT%L#>Eqbo_YkVkj8Xt^%hX5<#pMsv0!dt z6`>bS6dDFGBVrXxGp{~zsov}sXZ8`|3tn2cz%u7N&OUo^XL?PHT`oAHz_=xj{WIb3 z>yN|l9{;+i0G{^fyc#RCI%g=TG~6~VJ+bOAaH0t7!GauQU6k3aDit95$Jh5^Cvp25 zO7NkudB9Ft@Wr$fI8f|ofl_}_p`{UO_*GaO*|)sdT@2wDr8isrm&;mK6Kf~jc5 z!92pjR9G#M3RKWk8pE_8g}u25O{J-Cy-VQ5G$9dz344($`>fWJI13Q1p20=n?dRIL zP!Wbz&TT(mHKy6mwe!30zS~=Cq)rD&m;I#E@H4Q0L?oAXe#Cbf|MsQ9oVl-xykSW& zx0`4&M;H04z&_e;#vVDBg4*IaYNiNK)RqrRkxTO;dA4ka%fRLx*Fc>g3ZJfWu@uY! z=&_9jcWpZ%f$6ShsrxVfgB^VMioS3>TFsihR|#=s1)@eNLZi_a;64280Io!-fb3JIxO5 zT%8wjg621+jt`4+^~<^iU(|Yf{AT|Gj^IygjOXu}p8*JMh4e1J-d;8RvGKkw;x%iQ zX6-ZC7PZiBLT$1!{0L>9Vuzbadp6!p8y|mI|G$cR>$oV_Z++OkEeymWqznXPu#ig zwbpg5>)HLeTF5Lr^hA1x{RgFESDv0xzxT})nc#f35a412^s0LLqB6_Mb=h>X@5W=l zO!UZc|Mc3boG_YL$wJ_C#WIn6%SgNK))0UUy$&CMb#dp?JQ$pVHb0u=PLFWqZ%qn% z!a-5f+QiP~uw*#nS7Y~mUdLr*luZ?rq@1bP+<*R9~x>PNOzw0TWkn zxSQTi?*)?rfz$`FB>AZxm*t0C!<6ug{IpzD^wICAH2-fj9V*E$1r{Qv$<7&5xD3Rb zS)Rr58`v|QKS?Xl`!kT@=3O#2?Q6ShSm7l2RQcks#9)ccMBk-})(E$`ayH4Y#xQ#n77J%)N<0)Z{*6S&@ZCzkPQ7b`wdSHrg7{3f_j(c zaCSXia5-N_gw175Z9~|#QW3aF`S7)O5B-v9eN&DwmlB{0j@@P~;-V?#{fkE1;~yE( zCJ2Uc%go+g>O!ClHNnpka#Pf}v=`KFcU!gBa~UpSYVY5NbIeIq;*TamJ9e zA*Swi{CS8ukW=3biH9j4rk0@9U#PjMPw2R%#&+)h$v-vOx=)*8B$ahhX=xqg{7Uq? zx!*YqJ&R&#bt^hMGb~N$w6|)r-}_ONVKo*qTGBJ<*j}Er)gEhfaOFaje;t*`*Vnu?z_R z2)oMHc(3PWRt!&F#Kj7;_8`1%siVwe!t1R$q1^}FIl63wXj*0zldR_#viZ(XNQ~jW zv?$4UC!a8hVG+EqjN^>!5A1?$Q*Is{}iKUmCYFqfz_kyR?RsKl|3b1;ctu^>Qjb$qR0;x zR))eCdptLs^3t$5Ly4LnlrJo8rkItTlNn%+V0lZwUw@7>(Aaxm+RZ@+j`EL>dE5oHr*X_D+!4s5z*4Dpjn^K0m?}uCw2aT#|#Y8!e z>tNWk^Gd(u_VsUleC}ua!rsnk)W)Kz_Jv<4D_^{kX^cFs^Bcbw@XM^MOsvA~Bvr#3 zy3FqdmJ-udD9|EnYGPJ-6NWe>D#E%>8SNOLoUVa&J%`ibj-Jo3`N&MpPi>ZaopPjk zeONW;#_D^7WF2%(chIu7D`U8`KaJT!%~8maPHOmP&x1S%-s@VqZ>IBqlrAil8T+G} z2c*I%9b*?a-bsGl7TDy^A5kfH+I~w-L(}rUh|6;`TZiUg6^!3u9P4mHllt;rSatgm<4dl2;iM?VsqI_Ta zCr@ec0i7fo6C`*fvam?$X7JGgbfFzV)9!A9eVihbkLN~9Bg2rz_p!yA&Fa9lo(e5J z-l<3lxe~~uhXbu4^s$Y)V3m3>M+&zU;NGSK?u^mHs}rT{WE= z7!wzbG_nnhC*7y|F8}x#U-02sadxhkURk@D^hL`N$LdlQ4zp>g{Gc3Lhl3hBOR=x* zDBB#-*(#L@%L>^7vP8u%cZ3x9OMBKwNC)D32MR1w2S&er+9~=rEbsJ6+@-6qXs8(d zUN%BkG4-K+8DD}BBjC0ZM~v3?V-{8-&8#f8w>e=QT3$jeBM+n2pRO^jU)GjCUQ-Nh;>I0tb_uByS`{jEOo2h)~}F{qAgagAXGHsVndQO!ujHo<(rzq5p`&UaXLd>b|)*c11)EWy>+wdCW2 z_jfN_Xp>5+#477rWo{ZVYgwMse3p;u0ruImbhm)QS(~m&BN%YY5tW2OU9gAuUNF7f z05s>FdflR;)ZS~SBtep=Y`XvUerxk@KYqVdpwqNP<&IG(t`YDD}t>!+4xpeR}D}<%ofYy zo#LrAvQk`kYR?)H(sTqp)dhJ88Xd}?I)%8>BqxsM2tSN3Qy|k}_wsL#s=UUKRPDfj(&L#x+;HVa)DX#@;mADX1kJ9LPByl+KG%beai?JEb7r7n{$*HpG zToZQZ8j|BqAPI;x3cA)I^=W>JEsZvrkBwB9u#-{7wmur@Myej1AEeSjeA#0Z$9lwh z#;xLH=`0C*{~kdbXSw;ac_QxeK~J3KrwLv6eEjE)!v=MOH$J zQ~4x$UJi)iGkEf7g{kW~)t9P+x4Ui;i%NRnEw$5MR(Yrq-+pVmmcv@`^6L1RHexQq z$HL+69s{Br*U!fvb5KeC!OfCz?Nedn>eH&MDe)dG38guVrqLMj2cCN0paS zI^r@)>>32cLOcyrKGb3s)2^dE@Dzhr(5TN-?$Zm8M2d?ozshO*q9n6)McdbUM_CnC zgWZgm&gq(Juyh#~nP-*Sxwmrau+pL&+>Sf*jX9*Nmc`e9e4(a;pK7ZJd8Xy!=%4D; zXTuo8Rr%0d6U*ZKF-XhlXt}4+mKJ+tlJ&tO{FP>d##IR<)E_A--CyPQYg^@f5j<5s zP~=eJH=-gt$cmZj*9~^-e)7xw#-T+LD1V3!ySE2qJ@JP`(upI%^$0V>J*6O06I`X_ za2p1#U^p9_6M9|_jhsZd96&35Ih#be-Tq)gy%0WW(rDHlQialvJW}puK3HcOhw2&H zjYX&}U+IqJ9LzK<>yLNISkM%7nSatH_fVr$KirYJk4lbe>R|>p%IsTU3{{KJ&ztXT zfmI5AQ8P39mb$SZ+w`1#1)kcAj4gXbV71k5Ji(@O_AHsMp69&DM6;*WL|a=2O`D?l zw|f@@I*rbiCfMfoy=sT`h*}9NuB%VgGivxvCvD2#o`@&MMwOzR=PI*#nZ>@9&-gmW zZoXd*%F}AW8>pQljlW3E%lkF-OMSq?9|#io2NO8+PXg+d!LoRRLn%iT!^l(vmPJ$J zaD!oV0XMcoBHG)}mx-yg{2rkfCqL|2e|`=L;Ldy%A7jJ|btSMqm963O2$2;un<-Ny ze8Q2iw5kxE1*&Z2V>yQTR-A?cu8&I@3W|%1E09Wdl_>?YbSJuS{qjgg9hQLl8Q*v* zPMeJ$4lfX#Vp9~Prx*Bza!(xF&d@DKsbGZ~MO6hY3q5E|F;!^Rci~J*LuZ((H#>)q zQcmBT%GYUK8R{yS|4t^bsb@)3qMalq6*3uGTfe9`E>V!!VmxgT9J3hGi?<=t5oHb* zbaSd7!j-XJc8e%+R%ITe$4F4V6uhS8!m5xFU_Wf7)M%)w=Rp5|tKErdtF3;aMoLL= zVI#Ki)VZ=T?!0#96Vp85Hon~*n`L86Qoe9EbuhVDz{oXdg=YaQ)!b9T(Y#7tV?z%L z)Tns(!0>SNj}hnAar$iY5zHdumLp78xz&R?C8B(*LIb{Np2@7|a&|$>R{gVwN@n$5 z4tbK08ygCmyL>fVtuu-MR#|qcV<)eITl)VcYWKr+tF18?44HCM5vRejrwZ zO*@{68mvZYMB02BmXI+|ejSvXWmbXJ5Xs`v_aOLJm%hJ6(GAmL$EkHSP3PQkb;(1* zj#AX+^O|(iliO($EQLQ-8iP{ayYKwc$qyA?OSqoA8psyOE2|vPMNT) z7#~z`zcGPR%*7GsXc2J_$cf~XT`?N#5+{m03S~S;KMv$pQaNc0ckvg+IKJ@rJWBKh z!8u*HjV1Pc+|&2rKzMsJ_bPZ0vK$YhrFr3CPz<_lNaKAXXPsDV*u8R}RO?tR5-f-W zm?fsl!z*87489k4`9c+%wt5Aj((+LK zH!AJW%Zv}EG1=v@n~F2ftVdLMHh@X{8tXm&(k&}q_^0&*5r1>fW|^+*FEWo?mx1Qm z5&AcuHjr+&*DnMR>U0Eu;nMDCGlv~9L!VKVbo_0|GY`qM<0ji|lt0er26uNAYR?>L zZgM1_rSn%|QBlYlm?UpFf>#RW3UZ3g?s(k$e6x4p+$M2ef7GK{GslaDnJPur{g=)S zdGvL5yXgv3E)=-VdXCq0(2`Q*3%WZ+>wkb2L*iKZtkZlSAKepQm;oH6Z`pH7E0& zY$gDkx00C2A3Mm-Hll++gOP{S*s9f6A_P;q^A0LZbx+g=_phIZ)Yj3{eerY%>?-r7 z;Ex(Q%#_v~D${z>jx=_sT2L%5fQSSVR$4yg*BxUD8dRi%38;;WJ(@B6q4r}h7(aAC)Lw2({0SRA^R1|bC0S3PII9MU&vzM)9N8rZnTFQzl?G;a@A9UyyS1`fK_0@ zVaKM9ag?62Mtt1sCH<)S1yeI;MM$>h_;yHSl5G6IO&M280bOe>A|WNl+=K0t1hDtc zw0qB(X;ixMqX$Y6Nyw_T3tAGT#PDj!1AQeW+ryAJ z>a?!&Y%jybixsLhR-A54kTZJhjekazgN^^D6lC35h4Ic{w={obQ2wz$lJ2Ed=hJng zZE6Z7j(tu=9YV{X)t8b3qHfR6$4Oz!2;bTxvje9D1mjiL(qJiOog$2Kj*{LKxAo*; zmU*zkZ+bD>`r9qDj{3n988#DMi{nd9wy+tuAFXvP?x3qNC;?sc)+G884uDT*~L+zW%x6Z?&*f96k7)xuF#{thLR<&&Kn$0(_azQA!xFkQSx zhB#2u@w`rP-xm+(M^JxZJmW_%QKu}TR1G;BUt0D|TaR41##NxE!ndm%tgno>LYn3l z_TT{N;#ogOS&I|-nyTW$q`QM(Op@XwQL;Y#y@uTd5dP{;C?reJIIBR|O&uk)ZWu~7 z$<`%U=G^e3gmVmlrw?jLZ?hgJU5`07(go9%8f%Tw!G-3|5xNRsK2XCsev5n)h+q7p zq$pj@7fFW*o&6Jm3h$h(zqN}0#b3r{-O57VCsuGhL)WfO57G0) z4fLJy484qLiQ6d@a2hana<=RLUg=GJbizo?HBR4HDlkO9$f7E z)nn9HJKT(mLAmFkEXneAiWiCt$4@;Voa&-8bORn^(8sAy&pniLQ_P|&x;OH_jqvNM zSW@vUUa%-Ht5&|Qm!9E>ozQnCL?#euH3?#c&s%aHqE9(>u4@%QQR^hOVR%dX`hI;(B$VqDnV^ZbMRe~M6@d};i z`cDCzUzkq!mU(5yZKm~3Xy_@cHe8ed`=TQD{hBk>d&ZzzMeK>v&Kw7h8C?;8# zw0Xdp%Y$L#CBN=D`iWr_a8i1l5N@^ciS$*q9O0_0z+oG$)r%X>G7odnrn`1^ zxba#5K*qco(Kp;UZNnI~oET)r!sJj|4SD`B$oEHGbxxS&$Q2sE5?Q#G^Av4`sMx9C zDsA-Yd^u4)Xuo%}`WHi{@xd2!|SCA0(&f5UNEryEP zLV1tp9z8)b5=6Li`!a@@@9|2IW8_}+rvJI);F2#p>PT7i+GM7zF32h-%MdSgDry3% zkW?rOXVYpF8TQ!Wn5BJoICY236|d8}=iZOc@xgQqcm_a33pBCr*2AWe>0}1vy1_hZ zmc65c#<+D}i>Zk`yUDx!_3og{^>qnk_V3;b;L%J%iTlXqSZCzghoF|i8p!VgUzE&wmeEorR6+p zhLhwI4`88d7spF-xznco}sJ%DW0~S2yJ%AtWUEnr4JRLIu~xr26L&!eB#6nWm$jG6m(Dl zap&y_Ior5kzbYiPoUNl^Gj?txmU%<)+w0-m(>~K~4g+z${5@gp7AylYf?HJS<2M77 zM2jn&xP&}pz=sG9#D3fJAwYqEDCg$G4-YC6F#uTmX z9^qZRSc>;|J@Jp?lWt1N1;ixi%)k^k_FzoNyJu6SjjnM20VmZ;rcu&dC?~@Dx|UF za?%~4Gmv3DaQH?{VB%l=N?U-{smZfHld6t92tLMU=IYsxJ#y6g%}d6DM$~oN1jj?! z@ozt{>(^2$7bwej1Bzki`_74~;W4(mnXK_(IJuREQg_Qzdn)Y<%R|5JzKFF@z}yn5 z{XqgJ<@Q5HiTy$#WSr+QtXc#`cA~hyjw&xf?VRcC#8hu$NdPG>DIDlvor}qi2-YfsgcXm-jD_~Y3M9`IOSF)L7#AivO6h}eTl;~&37xbD zC4HqmT#Tt{@b#SQ^!aVYP>PieN`3Z6&F}Law{R#UgqNebrpnQzOlmyNO+KXeG#zs2 zjqux_w79p~K(pe;c32+fD94%QYm*-&&xalle=Yaq4h8{sBPhmzhx`s%LHm*k5G4R% ziuW%u1%#Xp&069nS|$SA-D>ELTu@-*?{tXN1tjwE3HO10lYscT=R|MHAU&gnK%rGBKq_us>*-Vug z`-S%k#^kh+4&y&Ge5k%b*cTSEtzTh4tD*HvD*J>f7X;{hNoKrfTs{YbQQ3aPbusY5 zNS9=-K^j6c`-iUxTn15ppvT-f4X-`*K_%)OAaqYV5#9`6QNc;*EJ%pK2Am@1Kjd^C zxUyVU`izi<(U)!fia3Bt2(jt*<@UfIB*^sqL3d-H@AzAV#nxM` z;-DuIA`P?Dx*!cS3WoZTx9{NdETjW)++ z5y_0}x_NKY_0mzS9je*K70x12=TQ>cf{ns)O@T#i66#*|fy@d6;^YR+!7Sb}@|78! zMXgPQQW<)?T2#bJ_4S;;8w>b$p->xL@8gITA7FvVLOD%awm~)RCmY#7RR7hO2xO@zQ>8ZKPEPk)^Pc5zC)t?DW)$gc6#v7ddn7nA!aZXxp& zfE*Ntza}YwGff1?E$vOQw+}P5^B$N0gfl%*hJ8!pPcc+=KKhrrTI zKudXRI1|@Yufo#$kpJ#6UrB$E5EG{?ntF|{Yd@TCyi&j(yHI)puusXL8F#-k-Gh@W z`Nxy4I%soMpVqmSB;ze7fbakL!m? zOHJLmbXD0mYtCD>7vbFv(K_VDYM`6+HQS>#RQ=E|1WEVQ5g0c6u=);t z<#_AiLJg4$_LcA5S=tOphL?tTJ=0Z&&dkG|L^_F`_KmeraA9 ztl*5j!sQN{#dEq7&5=w?UXeet&n}d}F(O`m2lo)tbCTyj4;oKTNLAtUUI19j& z)3C%Z%(!}^>w|74WrON%MLEhFwHPys1S43Dr7msZba9VoU6FJunCJ((KokzQ|qwu-hpN0V*X zW8wXDkwC!AX<4ZB?8y%8F$F1%;}yd)6zAH-bgL}(m)ohw>#g=i8$W~Na#f2W$w7T2 zQ*&eKqFMLqG+-|GMq;TMWiN&|ZML0lV7zU%;h`{R;?einv+d5|CF@iYZY#dSu65U7 z63s zpngFI?<~KtB63sDDm;8$+uXM>|LU6?l>O3Mxq;zNHflEMWNIFdIJM5kfmoz`6b8r) z_t0{T(l_z1bcs>gb5$2p>jx+GVq7d5@rBl-;p2TfoPc~9JynsYUMO#Q3#2Nipl)2Q z6k?$xP78jj1ZRS!NrMa)u1rNSabYVScPU zsS8Z9LEw^Bs48$EIuay6*+uT40IA7DLAXtSj-Gc|@f_{a2c38|QKpK!?>a_6v=au$p{x$ZJui~V7!XBISbPV`U4(_x1 zttAf|Pa!p-&f%`Q3ylKnp6!z3B>)1ypcclH9Z)IALMh|430@zAPN~j4Bz?YlvXoD4 zhpDmAq5mO!2NF(Y@vq*vl8^chxigiAwg5W>e(p_bUI0)MQ0HzA`UZb#b4Ajjwak&c{5@sJ>zx?t)EsbUQ)Pd&N#KsvqX zKoP{6)=?l^-zPo@PM%=ofI1`UO)M&2XFz}d9>25;vu<7iFN#Zbq>Jpv(%DPZrGC5{ zoBd(oJ(IgK>ujmSZ|`>n9ZyF~9<#V0Xj0_#+~l&WlNjD2N|O*1UD7wXQ3715(Mfee zS|T0o;pr7kVqrFyo|c(BC@Sq3Yzx$sk_-7To6?-Gbv5AUO^XvbR%P*10lOW}y4;c% zp=Mo$U6(M<^}|SLC>yVq^VnOJKr8sc<=DFWGTvkhcvtIvGE{QQn|At@W4U}=udx|J z1hj5?$g|_K;f?v~vyDMV^TU-ywARguic{|u?EJd<6-8|um`Ftttj-_T+5`ncu^Kze zh=AJPmBt#lgTRT68IA}w9j%KnG5m(?`@f>hR73D|=#Z86_4LDP^?ZZeg?<(zUlq#b zmPR0~ZML*pcME19%rS(k+AT{Ja7i;|DE~{>EmzP5>bRYUD6x!RPKT2*{D%^X-YS$p3~~^*Yjnlm$RTjj{+NK zhssu5!R4WNGHH$@ysaSOoweqPz+#JzqPS#G8=FqC_sCGoA5uVLrO}VG{`^SGs{>3; zvKaaekG>+~#0C9sUkBl(v-Zw8ewiCO1J+|y1~LDQ0g)uScxyEy4b4z z8OaUhKNNz$spO~&-Yo_$2*n>fQ1dDQeX~5~H1HuI_hLOQ0|nPU=4% z#e|cqe9&-FgFa=d=tg837Cq3&-L8O{75TNDr>Xm5Oc&%{T*_b@2G*DyUa#0P@txPB z6*^L~ThpUqxLfPOiq@Yxg)&-#Md{;G*1tYAwgp^32F>Do%;^fLPaP#~cs0uG(pj|D zLf0!kx%Lv)npogu*!R;AE+Yy~hIG@|Ea^h_BIUQOg5{dg>d8KiIpcS(D}Q?I()P-B^VRnTF7rkZ zbMaNLjZ33VIma?5yX|nI5_?Oqd(c+1iSI6t<^z%0h`x@o&ri2&M->{wA$KYa$wMW?y9B*QKZ1)T*m$HI#( zumWW&>w~ME3DSrp%qij#ZN;b4Fq%TAxqYGW~5!`i%> zYI6rwL|8Q=g_o$Jc((Dcukc+Id{&%3mZepozVI3||H|WQHos2I1XO@W^A1SfE?c4# zMD#P38(>z&~YO%kwPQcD8&~F)% zgEFO_70)QPuZh@uQsdEgm?T!uejfU;Sp?bZduifPKhp@i^fao zls{i;BpEKih^T2wmWD^fPw0|mX@#x=tF0NAh6v5Iq{heDxRyOZ3D63-d?uyg)7?m;uC+)!9DQqbqad z9&jjXYe4QPU2iE;qW!(r@H`t`?Kx82F1Mw`Gx9OqF@<=8uj8+1)O}Hh7FYG$jq>Dq zHx==^ox&J?xXf_Rt7ZC*UudK3WWcpzZue||F@G*U>{{=VuPQk8NZMVn@okSV>QKRA zSE8>+wKp% zy|3{scXy^b3vg9U-^finSMYx5jl0;IPs_hWV4UNleeJ=HQB^kb=SrLSsWv*qT|)@! zuf;m~6=qyF9WKrYVe@DSyWeForX{QZ3FJhb+xRl~avfZiQKBkMGH^`q)`A8_v`oyT z{^CYO=C)(HOzw30dyvLR0;=ga?^Y}3f>PF|UMd9{f({z(-X?G&Jl1n09pPcMVgd!j~G4T}q zlGJm%^yzt4N+z+n{z4qDkJ^&|`Rhzvc<#66h4?XZ>2rz?^D!0dQ{@7-oy;cGG;*`1 zwZ>N-dO`N`9umRboAL6cU!FLBvz2=Q_zmHzSZ5NnQ2L+I{CCU+!{)-Yudj=F+$ZqEf2HFmEX zS^_t$(JP*=QWKk>5!t`7M(cI!JIe0F!&JQuHL%SenOB3ch|GrBx!Oo?b&O6Ir$X@g zZ0*EwYDbw-VM;qeD_nsH17d|9-NwT{@ayNuG5w$RR^NZ`TrWKuH`ukxwopJr= z@~qx#huI{3Cu@vxzO6v{xX0qEjG4UQcC6D+hy7wvGX(!I`QFz}Q)N-4F}S;AJX*KQ zZFB@V*8f7WQrN)-@<+B=8&e5z1A$l7Q(ekl5P+|EV5K5>g|H)EKESDsaahe56LOma z^tx8PTu0@O@@0j&YhC>6R;?1wWlT~TH_{QFr&QFUWVGpOT$+{qG;1NAhih_Hc-GJr z&uvC}g(XLGBVQ(Ft>SuoPe=h(PtHyIp1UB_5uSQ`dX`gn#1TqV78iEoIc0AZ&tA3C z$H`K%rqKZVJl-?}sk3;qo-b2DE3RFjev>zEN})TXwadQi-dB^u+Z9bf#~#FKL16~( z*tGB%A0KKpJC0)~i#(t=i?)oWY}L6|5Q!L?wSdOUo4$J(5wfk%zc`3xD0_k8PiTeh zvmJY3c6q-*Y!WHY7wXpN10@92Xk1UI$!J~AxZ(WXu*rcpR6v(13d3fI3|rGB*OOS* z*Tf$&$|oj9lBdW@5ym?#bc;i(R!+cj=Rn|q>4^jx_O_sxj;qcFl_Ff1$@nzgm|MWQM*LHSeR+;e(ohe9Un0)1Srh;SgEiqm-D#;KM!73JAg#zl0 zk)Mvg7IxoGw->gY7&4Vc7}ry7EKldEN93bE9j}~vs?k?k-BlsFQp{E9hic5Yp$Qy& zy9QpbH$Uj_^AeU&uhd+&Z5zZi1Z+%XhO%7=lXA}fHRVTjNFAGedo$k+M}WVpg=G>p z^l>-pivIAyHJxKjM!P(c!1gfi`4LjJu30B_^J5L>O2n|$--Ki1t^zT%C|_K>2l5=> z+-Tbv^@_K8~mUNnzp9-ChJ$CHYOjL8Ze2GUDxb%De3oRa!9{Mbv;dr?_npp zJNFA!z?v(N*yu?8Be^Ha*p1gt)3_fvKw^4NOhkDk(c$ad{3kmNval6%a@K$(Fq<25YFc(w&h6E{TmG7vEyaLHDsgWo2i#Z^mxHXK zORt5%H=i_&3lqGIF-h+85Hthd+)C)kUUqo~+=Bc3c6^|PAOJem`Ph?hzK*03W!z0c zktYay<-3g{Hpu zt=EX&XYz&HIE0%ykI=B(t?&52z@CqUBlu6cq`lZ$1F5}Ljf$z?%QoJJ+0ZasS(c?7 z;exkZ=S61Vl%(d~dCZE0N@UWU@(@0J_otaiSMV||-bnCq{uR=ukwlKY2g0W+tI#9? zKPN6yk1@VOFrntbBS(v8M+V3{b-K&F43$_h*F< znH9QZ5gyP+;31CRz60|htnPag87lD20JkzcApxc3Mn2H^rpKvj$Zehg5cTDR8xHRG zml>X+eoukzGK}o8hlz?ukT^fBMKfi>oEWU4}fL^~=h7k?*3#~;Ocqkqo_&Fx> z*xsZd;VY=}NUcK4<SipNhW4gPwZ--ca2Wk8dWPTTbjUa*r@XrAfQy$Y8wN4g81#zmIfp6@-zadUszkHL_=)lXJ{0XlkU zn!t%Hg__gIDuE*VD)iBS&!>@R-noC^c2cr`X7n`rQBfAOE zMvz^K7LVE!vmx?EM3@-w3Zz3rey@&ybroRdD)jG<8Mr_)5&c_4<<7e&a0?=|(FVfhE`lrFS!KVt#*?-TMQX_QJWS#uURRf4g|!q?Be%TRQaS{4-11Wf z(87Op6O@vmGe(vvh2nACCTK;wOLA(Y>vw4McVmG;hAdn13+?-< zE@Zh$DN8{m2Tai=m=xkST!OdBz199!9{p!hK)K4h=jzj>J-e!L7Y0N6Wb-ZLIYx+r z7z?*2Uka$SoN8F!my7zl!IwCpNu1Sjy2!O_VX!;(Sh1h>8=wju$$j%d`z~B^u1bRb z?`4NrHux+n0%M=xyeWnJ5|3z|T~NAldha5sGw{;$Pm}vZ;nsDAzn9(Keg8ihzFt^- zU3-h~z@Hj&`XhzB8gl!~@5!A9uriKx<CU-=By0%TSv5 zA!C?_=<$bB3h8u!1_rs=#@^Q3@8!Ri#J_$7-C*w?nfBIa6_8E%Tqm>dpZ&M@{d>Ib zzyO~8E&G2P*=GN38vdS2WVih{slGXy0yLK_&+}T zua_IZ>Z3eC-*6R)_Z~VZ?;EoJ(3N>upkSjKgGE8uF|msR(ck@#Z340l9JBNi>z}}) z)V}bq`Y*%&&qn-bs)fLGPbpQe8}|bCn0tQo|JkN%h{oQtZ;93w@Tw(ovH#efJ)>{{ z>^AX}Gvxw@!CTOJnY&lv^gp%bcVn*t;$i`sQgULjwf|Q6`u*4cVJ1)CfD8ZNOzTN` zK0n3fe}ncvjOkw2|2|6`V4V2=k{tR^Jt4XQy*@zIb3#efh474&Vn0y$ADZ%ee(q!( b+Y%o9p0(;6m+E-{{@oLo6U)A<|Lp$*HFOe# diff --git a/eventhubskafka-flink-eventhubskafka/README.md b/eventhubskafka-flink-eventhubskafka/README.md index 470fe203..c5fc340e 100644 --- a/eventhubskafka-flink-eventhubskafka/README.md +++ b/eventhubskafka-flink-eventhubskafka/README.md @@ -131,28 +131,34 @@ The deployment script will report performance, by default every minute for 30 mi ``` ***** [M] Starting METRICS reporting -Event Hub capacity: 2 throughput units (this determines MAX VALUE below). Reporting aggregate metrics per minute, offset by 2 minutes, for 30 minutes. - Event Hub # IncomingMessages IncomingBytes OutgoingMessages OutgoingBytes ThrottledRequests - ----------- ---------------- ------------- ---------------- ------------- ----------------- - MAX VALUE 120000 120000000 491520 240000000 - - ----------- ---------------- ------------- ---------------- ------------- ----------------- - 2019-11-10T08:17:44 1 0 0 0 0 0 - 2019-11-10T08:17:44 2 0 0 0 0 0 - 2019-11-10T08:18:00 1 0 0 0 0 0 - 2019-11-10T08:18:00 2 0 0 0 0 0 - 2019-11-10T08:19:00 1 0 0 0 0 0 - 2019-11-10T08:19:00 2 0 0 0 0 0 - 2019-11-10T08:22:37 1 0 0 0 0 0 - 2019-11-10T08:22:37 2 0 0 0 0 0 - 2019-11-10T08:23:00 1 43163 40022882 43163 40365390 0 - 2019-11-10T08:23:00 2 37007 37332787 0 0 0 - 2019-11-10T08:24:00 1 59966 55621703 59966 56097577 0 - 2019-11-10T08:24:00 2 59943 60488690 0 0 0 - 2019-11-10T08:25:00 1 60258 55947759 60258 56425866 0 - 2019-11-10T08:25:00 2 60117 60728670 0 0 0 - 2019-11-10T08:26:00 1 60027 55738691 60027 56214951 0 - 2019-11-10T08:26:00 2 60003 60612850 0 0 0 + Event Hub # IncomingMessages IncomingBytes OutgoingMessages OutgoingBytes ThrottledRequests + ----------- ---------------- ------------- ---------------- ------------- ------------------ + 2023-08-15T08:01:57+0200 Event Hub 1 0 0 0 0 0 + 2023-08-15T08:01:59+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:02:02+0200 Event Hub 1 0 0 0 0 0 + 2023-08-15T08:02:03+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:03:02+0200 Event Hub 1 0 0 0 0 0 + 2023-08-15T08:03:03+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:04:02+0200 Event Hub 1 0 0 0 0 0 + 2023-08-15T08:04:04+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:05:09+0200 Event Hub 1 0 0 0 0 0 + 2023-08-15T08:05:11+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:06:03+0200 Event Hub 1 23821 20565185 0 0 0 + 2023-08-15T08:06:04+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:07:03+0200 Event Hub 1 60088 51900051 0 0 0 + 2023-08-15T08:07:05+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:08:02+0200 Event Hub 1 60013 51874051 0 0 0 + 2023-08-15T08:08:04+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:09:02+0200 Event Hub 1 60083 51952748 0 0 0 + 2023-08-15T08:09:04+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:10:04+0200 Event Hub 1 60113 51976704 0 0 0 + 2023-08-15T08:10:05+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:11:02+0200 Event Hub 1 60122 51991471 0 0 0 + 2023-08-15T08:11:04+0200 Event Hub 2 0 0 0 0 0 + 2023-08-15T08:12:02+0200 Event Hub 1 59964 51849376 0 0 0 + 2023-08-15T08:12:04+0200 Event Hub 2 0 0 0 0 0 + ``` In column "Event Hub #", 1 refers to the Event Hub used as input to @@ -166,14 +172,10 @@ around 60k events/min. The deployed Apache Flink solution doesn't do any analytics or projection, but only populates two fields in the JSON message: the time at which the event was received in Event Hubs, and the current timestamp. -The Flink Job Manager UI shows information about the current running job. The IP address of the Job Manager UI is reported by the deployment script. Note that the solution deploys the Job Manager on a public IP address without any security. In a production deployment, you should disable public IP endpoints. +The Flink Job Manager UI shows information about the current running job. The IP address of the Job Manager UI is reported by the deployment script. ![Flink Job Manager Web UI](../_doc/_images/flink-job-manager.png) -### Flink deployment on HDInsight - -TODO - ## Query Data Data is available in the created Event Hub output. You can use the Process Data screen in the Azure portal to inspect the event data. From adf084c76fadf7bd2174b971fde3773ee44428a5 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 15 Aug 2023 09:42:03 +0200 Subject: [PATCH 25/31] . --- .../microsoft/samples/flink/ComplexEventProcessingLogic.java | 2 -- .../samples/flink/ComplexEventJobProcessingLogicTest.java | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingLogic.java b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingLogic.java index 1fa8f03a..8c3307a1 100755 --- a/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingLogic.java +++ b/components/apache-flink/flink-kafka-consumer/src/main/java/com/microsoft/samples/flink/ComplexEventProcessingLogic.java @@ -32,8 +32,6 @@ public void processElement(SampleRecord receivedRecord, Context context, Collect state = new SampleState(); } - LOG.debug(String.format("DBG-3 %s, %d, %d", receivedRecord.deviceId, state.recordsSize(), state.tagsSize())); - // add latest record to the state state.addRecord(receivedRecord); diff --git a/components/apache-flink/flink-kafka-consumer/src/test/java/com/microsoft/samples/flink/ComplexEventJobProcessingLogicTest.java b/components/apache-flink/flink-kafka-consumer/src/test/java/com/microsoft/samples/flink/ComplexEventJobProcessingLogicTest.java index f5ed479c..230a799b 100644 --- a/components/apache-flink/flink-kafka-consumer/src/test/java/com/microsoft/samples/flink/ComplexEventJobProcessingLogicTest.java +++ b/components/apache-flink/flink-kafka-consumer/src/test/java/com/microsoft/samples/flink/ComplexEventJobProcessingLogicTest.java @@ -29,7 +29,7 @@ public void setupTestHarness() throws Exception { //instantiate user-defined function ComplexEventProcessingLogic logic = new ComplexEventProcessingLogic(); - // wrap user defined function into a the corresponding operator + // wrap user defined function into the corresponding operator testHarness = new KeyedOneInputStreamOperatorTestHarness<>( new KeyedProcessOperator<>(logic), (KeySelector) value -> value.deviceId, From 86324ae6ed2a033ef32110e0fc1f6e027a8e981c Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 15 Aug 2023 09:44:15 +0200 Subject: [PATCH 26/31] Update create-solution.sh --- eventhubskafka-flink-eventhubskafka/create-solution.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index 8bf66b27..2d4095ee 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -7,7 +7,6 @@ export PREFIX='' export LOCATION="eastus" export TESTTYPE="1" export STEPS="CIPTM" -export FLINK_PLATFORM='hdinsight-aks' export FLINK_JOBTYPE='simple-relay' usage() { @@ -164,7 +163,7 @@ echo "***** [P] Setting up PROCESSING" source ../components/apache-flink/build-flink-jobs.sh source ../components/azure-event-hubs/get-eventhubs-kafka-brokers-in-listen.sh source ../components/azure-event-hubs/get-eventhubs-kafka-brokers-out-send.sh - source ../components/apache-flink/$FLINK_PLATFORM/run-flink.sh + source ../components/apache-flink/hdinsight-aks/run-flink.sh fi echo From 356f6fcde73bf3423f676f23f5a8cc77a5376b14 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 16 Aug 2023 10:59:08 +0200 Subject: [PATCH 27/31] Setup for t 5 --- components/apache-flink/hdinsight-aks/OneClickF.json | 8 -------- components/azure-hdinsight/create-hdinsight-aks-flink.sh | 1 + eventhubskafka-flink-eventhubskafka/create-solution.sh | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/OneClickF.json index c1eb8b0a..c52ba9cd 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/OneClickF.json @@ -141,13 +141,6 @@ "metadata": { "description": "Worker node count" } - }, - "workerPodsCount": { - "type": "string", - "defaultValue": "2", - "metadata": { - "description": "Worker pods count" - } } }, "variables": { @@ -299,7 +292,6 @@ "metricsEnabled": true }, "flinkProfile": { - "numReplicas": "[int(parameters('workerPodsCount'))]", "jobManager": { "cpu": "[int(parameters('jobManagerCPU'))]", "memory": "[int(parameters('jobManagerMemoryInMB'))]" diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index 81299139..d7d287cb 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -26,6 +26,7 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type resourcePrefix=$HDINSIGHT_AKS_RESOURCE_PREFIX \ headNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ workerNodeVMSize=$HDINSIGHT_AKS_WORKER_SIZE \ + workerNodeCount=$FLINK_PARALLELISM \ userObjectId=$userId \ clusterPoolLogAnalyticsWorkspaceId=$analytics_ws_resourceId \ subnetId=$subnet_id \ diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index 2d4095ee..c97427b3 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -76,7 +76,7 @@ fi if [ "$TESTTYPE" == "1" ]; then export EVENTHUB_CAPACITY=2 export EVENTHUB_PARTITIONS=1 - export FLINK_PARALLELISM=1 + export FLINK_PARALLELISM=3 export SIMULATOR_INSTANCES=1 export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 fi From 3bf7e833fd607163b7dc8542b1a978e997834ea0 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Tue, 12 Sep 2023 09:02:44 +0200 Subject: [PATCH 28/31] Jobs API --- assert/has-local-unzip.sh | 12 +++++ .../hdinsight-aks/run-flink-job.sh | 46 +++++++++++++------ .../azure-databricks/create-databricks.sh | 6 ++- .../create-solution.sh | 0 .../create-solution.sh | 0 .../create-solution.sh | 3 +- 6 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 assert/has-local-unzip.sh mode change 100644 => 100755 eventhubs-streamanalytics-cosmosdb/create-solution.sh mode change 100644 => 100755 eventhubs-streamanalytics-eventhubs/create-solution.sh diff --git a/assert/has-local-unzip.sh b/assert/has-local-unzip.sh new file mode 100644 index 00000000..02123557 --- /dev/null +++ b/assert/has-local-unzip.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Strict mode, fail on any error +set -euo pipefail + +HAS_UNZIP=$(command -v unzip || true) +if [ -z "$HAS_UNZIP" ]; then + echo "unzip not found" + echo "please install it using your package manager, for example, on Ubuntu:" + echo " sudo apt install unzip" + exit 1 +fi diff --git a/components/apache-flink/hdinsight-aks/run-flink-job.sh b/components/apache-flink/hdinsight-aks/run-flink-job.sh index 97197233..1e8a6206 100755 --- a/components/apache-flink/hdinsight-aks/run-flink-job.sh +++ b/components/apache-flink/hdinsight-aks/run-flink-job.sh @@ -3,11 +3,6 @@ # Strict mode, fail on any error set -euo pipefail -echo 'Determining Flink cluster UI' - -cluster_pool_id=$(az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --query id --api-version 2021-09-15-preview -o tsv) -cluster_fqdn=$(az resource show --ids $cluster_pool_id/clusters/$HDINSIGHT_CLUSTER_NAME --query properties.clusterProfile.connectivityProfile.web.fqdn -o tsv) - echo 'Preparing Flink Job JAR' base_jar=flink-kafka-consumer-$FLINK_JOBTYPE.jar @@ -17,8 +12,9 @@ jar_path=target/$jar_name cp "../components/apache-flink/flink-kafka-consumer/target/assembly/$base_jar" $jar_path +main_class=$(unzip -p target/simple-relay.jar META-INF/MANIFEST.MF | grep ^Main-Class: |awk '{print $2}' RS='\r\n') + cat << EOF > params.properties -parallelism=$FLINK_PARALLELISM kafka.in.topic=$KAFKA_TOPIC kafka.in.bootstrap.servers=$KAFKA_IN_LISTEN_BROKERS kafka.in.request.timeout.ms=60000 @@ -37,12 +33,32 @@ EOF zip -g $jar_path params.properties rm params.properties -echo "********************************************************************************************" -echo "The Job JAR must be manually submitted in the Flink UI." -echo "- Access the Flink UI at" -echo " https://$cluster_fqdn" -echo "- In the Submit New Jobs pane, click Add New and upload '$jar_name' from the directory" -echo " $PWD/target" -echo "- Wait for the upload to complete." -echo "- Click on '$jar_name' and click Submit." -echo "********************************************************************************************" +echo 'uploading Flink job jar' + +jobname=$(uuidgen | tr A-Z a-z) +jarname="$jobname.jar" + +# if false; then +az storage blob upload --account-name "$HDINSIGHT_AKS_RESOURCE_PREFIX"store -c container1 \ + -n $jarname -f $jar_path \ + --overwrite \ + -o tsv >> log.txt +#fi + +echo 'running Flink job' + +cluster_resource=$(az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type microsoft.hdinsight/clusterPools --api-version 2021-09-15-preview -o tsv --query id) +az rest --method POST --url "https://management.azure.com$cluster_resource/clusters/$HDINSIGHT_CLUSTER_NAME/runJob?api-version=2023-06-01-preview" \ +--body '{ + "properties": { + "jobType": "FlinkJob", + "jobName": "'$jobname'", + "action": "NEW", + "jobJarDirectory": "abfs://container1@'$HDINSIGHT_AKS_RESOURCE_PREFIX'store.dfs.core.windows.net/", + "jarName": "'$jarname'", + "entryClass": "'$main_class'", + "flinkConfiguration": { + "parallelism": "'$FLINK_PARALLELISM'" + } + } +}' diff --git a/components/azure-databricks/create-databricks.sh b/components/azure-databricks/create-databricks.sh index f3439bf0..47a3a47f 100755 --- a/components/azure-databricks/create-databricks.sh +++ b/components/azure-databricks/create-databricks.sh @@ -31,8 +31,10 @@ databricks_metainfo=$(az resource show -g $RESOURCE_GROUP --resource-type Micros # Databricks CLI automatically picks up configuration from $DATABRICKS_HOST and $DATABRICKS_TOKEN. export DATABRICKS_HOST=$(jq -r '"https://" + .location + ".azuredatabricks.net"' <<<"$databricks_metainfo") -echo 'creating Key Vault to store Databricks PAT token' -az keyvault create -g $RESOURCE_GROUP -n $ADB_TOKEN_KEYVAULT -o tsv >>log.txt +if ! az keyvault show -g $RESOURCE_GROUP -n $ADB_TOKEN_KEYVAULT -o none 2>/dev/null ; then + echo 'creating Key Vault to store Databricks PAT token' + az keyvault create -g $RESOURCE_GROUP -n $ADB_TOKEN_KEYVAULT -o tsv >>log.txt +fi echo 'checking PAT token secret presence in Key Vault' databricks_token_secret_name="DATABRICKS-TOKEN" diff --git a/eventhubs-streamanalytics-cosmosdb/create-solution.sh b/eventhubs-streamanalytics-cosmosdb/create-solution.sh old mode 100644 new mode 100755 diff --git a/eventhubs-streamanalytics-eventhubs/create-solution.sh b/eventhubs-streamanalytics-eventhubs/create-solution.sh old mode 100644 new mode 100755 diff --git a/eventhubskafka-flink-eventhubskafka/create-solution.sh b/eventhubskafka-flink-eventhubskafka/create-solution.sh index c97427b3..39ce2abe 100755 --- a/eventhubskafka-flink-eventhubskafka/create-solution.sh +++ b/eventhubskafka-flink-eventhubskafka/create-solution.sh @@ -96,9 +96,8 @@ echo "Checking pre-requisites..." source ../assert/has-local-az.sh source ../assert/has-local-jq.sh -source ../assert/has-local-helm.sh -source ../assert/has-local-kubectl.sh source ../assert/has-local-mvn.sh +source ../assert/has-local-unzip.sh echo echo "Streaming at Scale with Flink" From d070c79c5d63ec539dc983997170e63693a69d66 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 27 Sep 2023 07:20:07 +0200 Subject: [PATCH 29/31] Update README.md --- eventhubskafka-flink-eventhubskafka/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eventhubskafka-flink-eventhubskafka/README.md b/eventhubskafka-flink-eventhubskafka/README.md index c5fc340e..73dad79d 100644 --- a/eventhubskafka-flink-eventhubskafka/README.md +++ b/eventhubskafka-flink-eventhubskafka/README.md @@ -172,7 +172,7 @@ around 60k events/min. The deployed Apache Flink solution doesn't do any analytics or projection, but only populates two fields in the JSON message: the time at which the event was received in Event Hubs, and the current timestamp. -The Flink Job Manager UI shows information about the current running job. The IP address of the Job Manager UI is reported by the deployment script. +The Flink Job Manager UI shows information about the current running job. The Job Manager UI is accessible from the Azure Portal. ![Flink Job Manager Web UI](../_doc/_images/flink-job-manager.png) From ac4ce184e6a7954d5b7bc8041a0a971c95875d1e Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Wed, 27 Sep 2023 07:33:45 +0200 Subject: [PATCH 30/31] . --- .../{OneClickF.json => oneClickFlink.json} | 59 +++++++++---------- .../create-hdinsight-aks-flink.sh | 2 +- 2 files changed, 30 insertions(+), 31 deletions(-) rename components/apache-flink/hdinsight-aks/{OneClickF.json => oneClickFlink.json} (88%) diff --git a/components/apache-flink/hdinsight-aks/OneClickF.json b/components/apache-flink/hdinsight-aks/oneClickFlink.json similarity index 88% rename from components/apache-flink/hdinsight-aks/OneClickF.json rename to components/apache-flink/hdinsight-aks/oneClickFlink.json index c52ba9cd..fe0ec582 100644 --- a/components/apache-flink/hdinsight-aks/OneClickF.json +++ b/components/apache-flink/hdinsight-aks/oneClickFlink.json @@ -3,21 +3,14 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterPoolName": { - "type": "string", - "metadata": { - "description": "The name of the Azure HDInsight on AKS cluster pool to create." - } - }, - "subnetId": { "type": "String", - "defaultValue": "", "metadata": { - "description": "Subnet resource id" + "description": "The name of cluster pool." } }, "clusterPoolVersion": { "defaultValue": "1.0", - "type": "string", + "type": "String", "metadata": { "description": "HDInsight on AKS cluster pool version to be created." } @@ -26,46 +19,46 @@ "defaultValue": "Standard_F4s_v2", "allowedValues": [ "Standard_F4s_v2", - "Standard_D4av_v4", + "Standard_D4a_v4", "Standard_D4as_v4", - "Standard_E4s_v3", - "Standard_E4_v3" + "Standard_E4s_v3" ], - "type": "string", + "type": "String", "metadata": { - "description": "VM SKU selected for the cluster pool" + "description": "VM SKU size for the cluster pool." } }, "resourcePrefix": { - "type": "string", + "type": "String", "metadata": { - "description": "Provide a prefix for creating necessary resources required for cluster creation, your necessary resources will be named as [prefix + random string]." + "description": "Provide a prefix for creating necessary resources required for cluster creation, your necessary resources will be named as [prefix + predefined string]. For example, if you provide resource prefix as demo then, MSI is created with name as demoMSI and Storage is created with name as demostore." } }, "clusterName": { - "type": "string", + "type": "String", "metadata": { - "description": "The name of the cluster" + "description": "The name of the cluster." } }, "hdinsightOnAksClusterVersion": { "defaultValue": "1.0.6", - "type": "string", + "type": "String", "metadata": { - "description": "The version of the cluster to be created" + "description": "The HDInsight on AKS cluster version to be created." } }, "clusterOssVersion": { "defaultValue": "1.16.0", - "type": "string", + "type": "String", "metadata": { - "description": "The OSS version of the cluster to be created" + "description": "The OSS version of the cluster to be created." } }, - "userObjectId": { - "type": "string", + "subnetId": { + "type": "String", + "defaultValue": "", "metadata": { - "description": "The user alias object ID from Azure Active Directory" + "description": "Subnet resource id" } }, "clusterPoolLogAnalyticsWorkspaceId": { @@ -141,18 +134,24 @@ "metadata": { "description": "Worker node count" } + }, + "userObjectId": { + "type": "String", + "metadata": { + "description": "The user alias object ID from Azure Active Directory. For example, myuserid@microsoft.com, search for this alias in AAD in the Azure portal and copy the Object ID." + } } }, "variables": { "clusterName": "[concat(parameters('clusterPoolName'), '/', parameters('clusterName'))]", "msiName": "[concat(parameters('resourcePrefix'), 'MSI')]", - "roleAssignedGuid": "[guid(variables('msiName'), resourceGroup().id)]", + "roleAssignedGuid": "[guid(variables('msiName'), resourceGroup().id, deployment().name)]", "storageName": "[concat(parameters('resourcePrefix'), 'store')]" }, "resources": [ { - "type": "Microsoft.HDInsight/clusterpools", - "apiVersion": "2021-09-15-preview", + "type": "microsoft.hdinsight/clusterpools", + "apiVersion": "2023-06-01-preview", "name": "[parameters('clusterPoolName')]", "location": "[resourceGroup().location]", "properties": { @@ -224,7 +223,7 @@ ], "properties": { "roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'f1a07417-d97a-45cb-824c-7a7467783830')]", - "principalId": "[reference(resourceId('microsoft.hdinsight/clusterpools', parameters('clusterPoolName')), '2021-09-15-preview').aksClusterProfile.aksClusterAgentPoolIdentityProfile.msiObjectId]" + "principalId": "[reference(resourceId('microsoft.hdinsight/clusterpools', parameters('clusterPoolName')), '2023-06-01-preview').aksClusterProfile.aksClusterAgentPoolIdentityProfile.msiObjectId]" }, "scope": "[concat('Microsoft.ManagedIdentity/userAssignedIdentities', '/', variables('msiName'))]" }, @@ -246,7 +245,7 @@ }, { "type": "microsoft.hdinsight/clusterpools/clusters", - "apiVersion": "2021-09-15-preview", + "apiVersion": "2023-06-01-preview", "name": "[variables('clusterName')]", "location": "[resourceGroup().location]", "dependsOn": [ diff --git a/components/azure-hdinsight/create-hdinsight-aks-flink.sh b/components/azure-hdinsight/create-hdinsight-aks-flink.sh index d7d287cb..4d3458f0 100755 --- a/components/azure-hdinsight/create-hdinsight-aks-flink.sh +++ b/components/azure-hdinsight/create-hdinsight-aks-flink.sh @@ -19,7 +19,7 @@ if ! az resource show -g $RESOURCE_GROUP -n $HDINSIGHT_AKS_NAME --resource-type az deployment group create \ --no-prompt \ --resource-group $RESOURCE_GROUP \ - --template-file "../components/apache-flink/hdinsight-aks/OneClickF.json" \ + --template-file "../components/apache-flink/hdinsight-aks/OneClickFlink.json" \ --parameters \ clusterPoolName=$HDINSIGHT_AKS_NAME \ clusterName=$HDINSIGHT_CLUSTER_NAME \ From b4940ae85ade5fe3541e0d07598f7328fcca0439 Mon Sep 17 00:00:00 2001 From: Alexandre Gattiker Date: Thu, 28 Sep 2023 07:34:11 +0200 Subject: [PATCH 31/31] Update README.md --- eventhubskafka-flink-eventhubskafka/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eventhubskafka-flink-eventhubskafka/README.md b/eventhubskafka-flink-eventhubskafka/README.md index 73dad79d..4cf35a34 100644 --- a/eventhubskafka-flink-eventhubskafka/README.md +++ b/eventhubskafka-flink-eventhubskafka/README.md @@ -38,6 +38,8 @@ The following tools/languages are also needed: - Install: `sudo apt install jq` - [Maven](https://maven.apache.org/install.html) - Install: `sudo apt install maven` +- [Unzip](https://askubuntu.com/questions/660846/how-to-zip-and-unzip-a-directory-and-its-files-in-linux) + - Install: `sudo apt install unzip` ## Setup Solution @@ -117,11 +119,9 @@ If you want to change some setting of the solution, like number of load test cli export EVENTHUB_CAPACITY=2 export EVENTHUB_PARTITIONS=1 - export FLINK_PARALLELISM=1 + export FLINK_PARALLELISM=3 export SIMULATOR_INSTANCES=1 - # settings for AKS (-p aks) - export AKS_NODES=3 - export AKS_VM_SIZE=Standard_D2s_v3 + export HDINSIGHT_AKS_WORKER_SIZE=Standard_D8ds_v5 The above settings have been chosen to sustain a 1,000 msg/s stream. The script also contains settings for 5,000 msg/s and 10,000 msg/s.