From 4be48146c928c03c2850864f8b82e4be696aad55 Mon Sep 17 00:00:00 2001 From: luoxiang <2806718453@qq.com> Date: Wed, 29 May 2019 00:01:32 +0800 Subject: [PATCH] =?UTF-8?q?kafka=E6=B6=88=E8=B4=B9=E8=80=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../heibaiying/consumers/ConsumerASyn.java | 1 + .../consumers/ConsumerASynAndSyn.java | 1 + .../consumers/ConsumerASynWithOffsets.java | 1 + .../heibaiying/consumers/ConsumerExit.java | 1 + .../heibaiying/consumers/ConsumerGroup.java | 1 + .../com/heibaiying/consumers/ConsumerSyn.java | 1 + .../consumers/RebalanceListener.java | 3 +- .../consumers/StandaloneConsumer.java | 1 + notes/Kafka消费者详解.md | 392 ++++++++++++++++++ notes/Kafka生产者详解.md | 4 +- notes/Spark_Streaming整合Kafka.md | 2 +- pictures/kafka-consumer01.png | Bin 0 -> 51375 bytes pictures/kafka-consumer02.png | Bin 0 -> 33201 bytes 14 files changed, 407 insertions(+), 5 deletions(-) create mode 100644 pictures/kafka-consumer01.png create mode 100644 pictures/kafka-consumer02.png diff --git a/README.md b/README.md index 3bdad13..c19262e 100644 --- a/README.md +++ b/README.md @@ -126,8 +126,8 @@ TODO 1. [Kafka 核心概念介绍](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka核心概念介绍.md) 2. [基于Zookeeper搭建Kafka高可用集群](https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/基于Zookeeper搭建Kafka高可用集群.md) -3. Kafka生产者详解 -4. Kafka消费者详解 +3. [Kafka生产者详解](https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka生产者详解.md) +4. [Kafka消费者详解]((https://github.com/heibaiying/BigData-Notes/blob/master/notes/Kafka消费者详解.md)) 5. Kafka 副本机制以及选举原理剖析 6. Kafka的数据可靠性 diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASyn.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASyn.java index c0c416b..dc09742 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASyn.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASyn.java @@ -20,6 +20,7 @@ public class ConsumerASyn { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynAndSyn.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynAndSyn.java index 13dda52..0bb7a64 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynAndSyn.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynAndSyn.java @@ -20,6 +20,7 @@ public class ConsumerASynAndSyn { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynWithOffsets.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynWithOffsets.java index df6e773..2556b2c 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynWithOffsets.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerASynWithOffsets.java @@ -24,6 +24,7 @@ public class ConsumerASynWithOffsets { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerExit.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerExit.java index ae6ec69..f635209 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerExit.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerExit.java @@ -23,6 +23,7 @@ public class ConsumerExit { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerGroup.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerGroup.java index c06bf12..9474c0c 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerGroup.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerGroup.java @@ -22,6 +22,7 @@ public class ConsumerGroup { props.put("bootstrap.servers", "hadoop001:9092"); /*指定分组ID*/ props.put("group.id", group); + props.put("enable.auto.commit", true); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerSyn.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerSyn.java index d9f8c7c..bd2eed0 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerSyn.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/ConsumerSyn.java @@ -20,6 +20,7 @@ public class ConsumerSyn { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/RebalanceListener.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/RebalanceListener.java index fa86350..5ba47a8 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/RebalanceListener.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/RebalanceListener.java @@ -15,6 +15,7 @@ public class RebalanceListener { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); @@ -27,7 +28,7 @@ public class RebalanceListener { @Override public void onPartitionsRevoked(Collection partitions) { System.out.println("再均衡即将触发"); - // 提交当前偏移量 + // 提交已经处理的偏移量 consumer.commitSync(offsets); } diff --git a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/StandaloneConsumer.java b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/StandaloneConsumer.java index 1c91103..d780646 100644 --- a/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/StandaloneConsumer.java +++ b/code/Kafka/kafka-basis/src/main/java/com/heibaiying/consumers/StandaloneConsumer.java @@ -25,6 +25,7 @@ public class StandaloneConsumer { Properties props = new Properties(); props.put("bootstrap.servers", "hadoop001:9092"); props.put("group.id", group); + props.put("enable.auto.commit", false); props.put("key.deserializer", "org.apache.kafka.common.serialization.IntegerDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer consumer = new KafkaConsumer<>(props); diff --git a/notes/Kafka消费者详解.md b/notes/Kafka消费者详解.md index e69de29..a236cdb 100644 --- a/notes/Kafka消费者详解.md +++ b/notes/Kafka消费者详解.md @@ -0,0 +1,392 @@ +# Kafka消费者详解 + + + + +## 一、消费者和消费者群组 + +在Kafka中,消费者通常是消费者群组的一部分,多个消费者群组中消费者共同读取同一个主题时,彼此之间互不影响。这是因为Kafka消费者经常会做一些高延迟的操作,比如把数据写到数据库或HDFS ,或者进行耗时的计算。在这些情况下,单个消费者无法跟上数据生成的速度,此时可以增加更多的消费者,让它们分担负载,分别处理部分分区的消息,这就是横向伸缩的主要手段。 + +
+ +需要注意的是:同一个分区只能被同一个消费者群组里面的一个消费者读取,不可能存在同一个分区被同一个消费者群里多个消费者共同读取的情况,如图: + +
+ +可以看到即便消费者Consumer5空闲了,但是也不会去读取任何一个分区的数据,这同时也提醒我们在使用时应该合理设置消费者的数量,以免造成闲置和额外开销。 + +## 二、分区再均衡 + +因为群组里的消费者共同读取主题的分区,所以当一个消费者被关闭或发生崩溃时,它就离开了群组,原本由它读取的分区将由群组里的其他消费者来读取。同时在主题发生变化时 , 比如添加了新的分区,也会发生分区与消费者的重新分配,分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为再均衡。正是因为再均衡,所以消费费者群组才能保证高可用性和伸缩性。 + +消费者通过向群组协调器所在的broker发送心跳来维持它们和群组的从属关系以及它们对分区的所有权。只要消费者以正常的时间间隔发送心跳,就被认为是活跃的,说明它还在读取分区里的消息。消费者会在轮询消息或提交偏移量时发送心跳。如果消费者停止发送心跳的时间足够长,会话就会过期,群组协调器认为它已经死亡,就会触发再均衡。 + + +## 三、创建Kafka消费者 + +在创建消费者的时候以下以下三个选项是必选的: + +- **bootstrap.servers** :指定broker的地址清单,清单里不需要包含所有的broker地址,生产者会从给定的broker里查找broker的信息。不过建议至少要提供两个broker的信息作为容错; +- **key.deserializer** :指定键的反序列化器; +- **value.deserializer** :指定值的反序列化器。 + +除此之外你还需要指明你需要想订阅的主题,可以使用如下两个API : + ++ **consumer.subscribe(Collection\ topics)** :指明需要订阅的主题的集合; ++ **consumer.subscribe(Pattern pattern)** :使用正则来匹配需要订阅的集合。 + +最后只需要通过轮询API(`poll`)向服务器定时请求数据。一旦消费者订阅了主题,轮询就会处理所有的细节,包括群组协调、分区再均衡、发送心跳和获取数据,这使得开发者只需要关注从分区返回的数据,然后进行业务处理即可。 示例代码如下: + +```scala +String topic = "Hello-Kafka"; +String group = "group1"; +Properties props = new Properties(); +props.put("bootstrap.servers", "hadoop001:9092"); +/*指定分组ID*/ +props.put("group.id", group); +props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); +props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); +KafkaConsumer consumer = new KafkaConsumer<>(props); + +/*订阅主题(s)*/ +consumer.subscribe(Collections.singletonList(topic)); + +try { + while (true) { + /*轮询获取数据*/ + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.printf("topic = %s,partition = %d, key = %s, value = %s, offset = %d,\n", + record.topic(), record.partition(), record.key(), record.value(), record.offset()); + } + } +} finally { + consumer.close(); +} +``` + +> 本片文章的所有示例代码可以从Github上进行下载:[kafka-basis](https://github.com/heibaiying/BigData-Notes/tree/master/code/Kafka/kafka-basis) + +## 三、 自动提交偏移量 + +### 3.1 偏移量的重要性 + +Kafka的每一条消息都有一个偏移量属性,记录了其在分区中的位置,偏移量是一个单调递增的整数。消费者通过往一个叫作 `_consumer_offset` 的特殊主题发送消息,消息里包含每个分区的偏移量。 如果消费者一直处于运行状态,那么偏移量就没有 +什么用处。不过,如果有消费者退出或者新分区加入,此时就会触发再均衡。完成再均衡之后,每个消费者可能分配到新的分区,而不是之前处理的那个。为了能够继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的地方继续处理。 因为这个原因,所以如果不能正确提交偏移量,就可能会导致数据丢失或者重复出现消费,比如下面情况: + ++ 如果提交的偏移量小于客户端处理的最后一个消息的偏移量 ,那么处于两个偏移量之间的消息就会被重复消费; ++ 如果提交的偏移量大于客户端处理的最后一个消息的偏移量,那么处于两个偏移量之间的消息将会丢失。 + +### 3.2 自动提交偏移量 + +Kafka支持自动提交和手动提交偏移量两种方式。这里先介绍比较简单的自动提交: + +只需要将消费者的`enable.auto.commit`属性配置为true即可完成自动提交的配置。 此时每隔固定的时间,消费者就会把`poll()`方法接收到的最大偏移量进行提交,提交间隔由`auto.commit.interval.ms`属性进行配置,默认值是5s。 + +使用自动提交是存在隐患的,假设我们使用默认的 5s 提交时间间隔,在最近一次提交之后的 3s 发生了再均衡,再均衡之后,消费者从最后一次提交的偏移量位置开始读取消息。这个时候偏移量已经落后了 3s ,所以在这 3s 内到达的消息会被重复处理。可以通过修改提交时间间隔来更频繁地提交偏移量,减小可能出现重复消息的时间窗,不过这种情况是无法完全避免的。基于这个原因,Kafka也提供了手动提交偏移量的API,使得用户可以更为灵活的提交偏移量。 + + + +## 四、手动提交偏移量 + +用户可以通过将`enable.auto.commit`设为`false`,然后手动提交偏移量。基于用户需求手动提交偏移量可以分为两大类: + ++ 手动提交当前偏移量:即手动提交当前轮询的最大偏移量; ++ 手动提交固定偏移量:即按照业务需求,提交某一个固定的偏移量。 + +而按照Kafka API,手动提交偏移量又可以分为同步提交和异步提交。 + +### 4.1 同步提交 + +通过调用`consumer.commitSync()`来进行同步提交,不传递任何参数时提交的是当前轮询的最大偏移量。 + +```java +while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.println(record); + } + /*同步提交*/ + consumer.commitSync(); +} +``` + +如果某个提交失败,同步提交还会进行重试,这可以保证数据能够最大限度提交成功,但是同时也会降低程序的吞吐量。基于这个原因,Kafka还提供了异步提交的API。 + +### 4.2 异步提交 + +异步提交可以提高程序的吞吐量,因为此时你可以尽管请求数据,而不用等待Broker的响应。代码如下: + +```java +while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.println(record); + } + /*异步提交并定义回调*/ + consumer.commitAsync(new OffsetCommitCallback() { + @Override + public void onComplete(Map offsets, Exception exception) { + if (exception != null) { + System.out.println("错误处理"); + offsets.forEach((x, y) -> System.out.printf("topic = %s,partition = %d, offset = %s \n", + x.topic(), x.partition(), y.offset())); + } + } + }); +} +``` + +异步提交存在的问题是,在提交失败的时候不会进行自动重试,实际上也不能进行自动重试。假设程序同时提交了200和300的偏移量,此时200的偏移量失败的,但是紧随其后的300的偏移量成功了,此时如果重试就会存在200覆盖300偏移量的可能。同步提交就不存在这个问题,因为在同步提交的情况下,300的提交请求必须等待服务器返回200提交请求的成功反馈时候才会发出。基于这个原因,某些情况下,需要同时组合同步和异步两种提交方式。 + +> 注:虽然程序不在再失败时候进行自动重试,但是我们是可以手动进行重试的,你可以通过一个 Map offsets 来维护你提交的每个分区的偏移量,然后当失败时候,你可以判断失败的偏移量是否小于你维护的同主题同分区的最后提交的偏移量,如果小于则代表你已经提交了更大的偏移量请求,此时不需要重试,否则就可以进行手动重试。 + +### 4.3 同步加异步提交 + +下面这种情况,在正常的轮询中使用异步提交来保证吞吐量,但是因为在最后即将要关闭消费者了,所以此时需要用同步提交来保证最大限度的提交成功。 + +```scala +try { + while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.println(record); + } + // 异步提交 + consumer.commitAsync(); + } +} catch (Exception e) { + e.printStackTrace(); +} finally { + try { + // 因为即将要关闭消费者,所以要用同步提交保证提交成功 + consumer.commitSync(); + } finally { + consumer.close(); + } +} +``` + +### 4.4 提交特定偏移量 + +在上面同步和异步提交的API中,实际上我们都没有对commit方法传递参数,此时默认提交的是当前轮训的最大偏移量,如果你需要提交特定的偏移量,可以调用它们的重载方法。 + +```java +/*同步提交特定偏移量*/ +commitSync(Map offsets) +/*异步提交特定偏移量*/ +commitAsync(Map offsets, OffsetCommitCallback callback) +``` + +需要注意的是,因为你可以订阅多个主题,所以`offsets`中必须要包含所有主题的每个分区的偏移量,示例代码如下: + +```java +try { + while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.println(record); + /*记录每个主题的每个分区的偏移量*/ + TopicPartition topicPartition = new TopicPartition(record.topic(), record.partition()); + OffsetAndMetadata offsetAndMetadata = new OffsetAndMetadata(record.offset()+1, "no metaData"); + /*TopicPartition重写过hashCode和equals方法,所以能够保证同一主题和分区的实例不会被重复添加*/ + offsets.put(topicPartition, offsetAndMetadata); + } + /*提交特定偏移量*/ + consumer.commitAsync(offsets, null); + } +} finally { + consumer.close(); +} +``` + + + +## 五、监听分区再均衡 + +因为分区再均衡会导致分区与消费者的重新划分,有时候你可能希望在再均衡前执行一些操作:比如提交已经处理但是尚未的偏移量,关闭数据库连接等。此时可以在订阅主题时候,调用`subscribe`的重载方法传入自定义的分区再均衡监听器。 + +```java + /*订阅指定集合内的所有主题*/ +subscribe(Collection topics, ConsumerRebalanceListener listener) + /*使用正则匹配需要订阅的主题*/ +subscribe(Pattern pattern, ConsumerRebalanceListener listener) +``` + +代码示例如下: + +```java +Map offsets = new HashMap<>(); + +consumer.subscribe(Collections.singletonList(topic), new ConsumerRebalanceListener() { + /*该方法会在消费者停止读取消息之后,再均衡开始之前就调用*/ + @Override + public void onPartitionsRevoked(Collection partitions) { + System.out.println("再均衡即将触发"); + // 提交已经处理的偏移量 + consumer.commitSync(offsets); + } + + /*该方法会在重新分配分区之后,消费者开始读取消息之前被调用*/ + @Override + public void onPartitionsAssigned(Collection partitions) { + + } +}); + +try { + while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.println(record); + TopicPartition topicPartition = new TopicPartition(record.topic(), record.partition()); + OffsetAndMetadata offsetAndMetadata = new OffsetAndMetadata(record.offset() + 1, "no metaData"); + /*TopicPartition重写过hashCode和equals方法,所以能够保证同一主题和分区的实例不会被重复添加*/ + offsets.put(topicPartition, offsetAndMetadata); + } + consumer.commitAsync(offsets, null); + } +} finally { + consumer.close(); +} +``` + + + +## 六 、退出轮询 + +Kafka提供了`consumer.wakeup()`方法用于退出轮询,它通过抛出`WakeupException`异常来跳出循环。需要注意的是,在退出线程最好显示的调用`consumer.close()` , 此时消费者会提交任何还没有提交的东西,并向群组协调器发送消息,告知自己要离开群组,接下来就会触发再均衡 ,而不需要等待会话超时。 + +下面的示例代码为监听控制台输出,当输入`exit`时结束轮询,关闭消费者并退出程序: + +```java +/*调用wakeup优雅的退出*/ +final Thread mainThread = Thread.currentThread(); +new Thread(() -> { + Scanner sc = new Scanner(System.in); + while (sc.hasNext()) { + if ("exit".equals(sc.next())) { + consumer.wakeup(); + try { + /*等待主线程完成提交偏移量、关闭消费者等操作*/ + mainThread.join(); + break; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +}).start(); + +try { + while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord rd : records) { + System.out.printf("topic = %s,partition = %d, key = %s, value = %s, offset = %d,\n", + rd.topic(), rd.partition(), rd.key(), rd.value(), rd.offset()); + } + } +} catch (WakeupException e) { + //对于wakeup()调用引起的WakeupException异常可以不必处理 +} finally { + consumer.close(); + System.out.println("consumer关闭"); +} +``` + + + +## 七、独立的消费者 + +因为Kafka的设计目标是高吞吐和低延迟,所以在Kafka中,消费者通常都是从属于某个群组的,这是因为单个消费者的处理能力是有限的。但是某些时候你的需求可能很简单,比如可能只需要一个消费者从一个主题的所有分区或者某个特定的分区读取数据,这个时候就不需要消费者群组和再均衡了, 只需要把主题或者分区分配给消费者,然后开始读取消息井提交偏移量即可。 + +在这种情况下,就不需要订阅主题, 取而代之的是消费者为自己分配分区。 一个消费者可以订阅主题(井加入消费者群组),或者为自己分配分区,但不能同时做这两件事情。 分配分区的示例代码如下: + +```java +List partitions = new ArrayList<>(); +List partitionInfos = consumer.partitionsFor(topic); + +/*可以指定读取哪些分区 如这里假设只读取主题的0分区*/ +for (PartitionInfo partition : partitionInfos) { + if (partition.partition()==0){ + partitions.add(new TopicPartition(partition.topic(), partition.partition())); + } +} + +// 为消费者指定分区 +consumer.assign(partitions); + + +while (true) { + ConsumerRecords records = consumer.poll(Duration.of(100, ChronoUnit.MILLIS)); + for (ConsumerRecord record : records) { + System.out.printf("partition = %s, key = %d, value = %s\n", + record.partition(), record.key(), record.value()); + } + consumer.commitSync(); +} +``` + + + +## 附录 : Kafka消费者可选属性 + +### 1. fetch.min.byte + +消费者从服务器获取记录的最小字节数。如果可用的数据量小于设置值,broker会等待有足够的可用数据时才会把它返回给消费者。 + +### 2. fetch.max.wait.ms + +broker返回给消费者数据的等待时间,默认是500ms。 + +### 3. max.partition.fetch.bytes + +该属性指定了服务器从每个分区返回给消费者的最大字节数,默认为1MB。 + +### 4. session.timeout.ms + +消费者在被认为死亡之前可以与服务器断开连接的时间,默认是3s。 + +### 5. auto.offset.reset + +该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理: + +- latest (默认值) :在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的最新记录); +- earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录。 + +### 6. enable.auto.commit + +是否自动提交偏移量,默认值是true。为了避免出现重复消费和数据丢失,可以把它设置为false。 + +### 7. client.id + +客户端id,服务器用来识别消息的来源。 + +### 8. max.poll.records + +单次调用`poll()`方法能够返回的记录数量。 + +### 9. receive.buffer.bytes & send.buffer.byte + +这两个参数分别指定TCP socket 接收和发送数据包缓冲区的大小,-1代表使用操作系统的默认值。 + + + +## 参考资料 + +1. Neha Narkhede, Gwen Shapira ,Todd Palino(著) , 薛命灯(译) . Kafka权威指南 . 人民邮电出版社 . 2017-12-26 + diff --git a/notes/Kafka生产者详解.md b/notes/Kafka生产者详解.md index aeb0567..710056a 100644 --- a/notes/Kafka生产者详解.md +++ b/notes/Kafka生产者详解.md @@ -37,7 +37,7 @@ ### 2.2 创建生产者 -创建Kafka时,以下三个属性是必须指定的: +创建Kafka生产者时,以下三个属性是必须指定的: + **bootstrap.servers** :指定broker的地址清单,清单里不需要包含所有的broker地址,生产者会从给定的broker里查找broker的信息。不过建议至少要提供两个broker的信息作为容错; @@ -73,6 +73,8 @@ public class SimpleProducer { } ``` +> 本片文章的所有示例代码可以从Github上进行下载:[kafka-basis](https://github.com/heibaiying/BigData-Notes/tree/master/code/Kafka/kafka-basis) + ### 2.3 测试 #### 1. 启动Kakfa diff --git a/notes/Spark_Streaming整合Kafka.md b/notes/Spark_Streaming整合Kafka.md index 0244587..9d0dfe1 100644 --- a/notes/Spark_Streaming整合Kafka.md +++ b/notes/Spark_Streaming整合Kafka.md @@ -195,7 +195,7 @@ broker返回给消费者数据的等待时间。 #### 8. max.poll.records -单次调用call()方法能够返回的记录数量。 +单次调用poll()方法能够返回的记录数量。 #### 9. receive.buffer.bytes 和 send.buffer.byte diff --git a/pictures/kafka-consumer01.png b/pictures/kafka-consumer01.png new file mode 100644 index 0000000000000000000000000000000000000000..ebaf83fdf6dc5f18b066b4e7d0d1b26290852be8 GIT binary patch literal 51375 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%0AB*(G3ih07J~bXQmW&={#$goqPNMS& zUZ01C3>0Oybp`Rci5?H=cHe)?L!~OxGPDWGp-toU@bk&a0*(5aJ-X_mcyPq&U{d|U zEu~EF??D#7H`K!;yEEMsCGwGl=EZ)OXyEw)rOU}=D<3setItekeN>jh2PB-(_>J4= z*s-a?H)1k*u|G5V{~Bfr#=_X24|ny7uGv+-P<#~+J0_SWbYVrr2E zMdzKxl5W=h?OY>|4ml{R`KmR*;@@8_hvLw?0!!r$gzve37?>MU?t4?QJ$K?Syw$~J zWK6(Q*>pa_6%gb;+GPE&kO%RQbBz>VnBSK9$(Q^F7S7<}Tr8i3Y}bf^t*U?r7dXjp zFHO7Bc-yPSvFey@g+tKBZI->$c{FDn02Yi*P8J6|Szlit04lkAOF9p>B(BuYhU@3D z*-?`o5Hgr8kIfqQb8UGp@&b2!7wLrV@Oo@=3 zIDWhS8cd)lIzDEoH$NF%E@`YxDYYUVQg7Ha6wA|uPVQ4ku5foxcGqM>@nTjqGruN= zN~sPHSYo}{gg$+WU9GX|Uo3--%*>MajnGKva@VqFd*gyh0+J7hO~8l*1_hhXV|7jr zew~uF>-%FPgOC6!i5&SNlkn&J$Ev->x81u`EDX(yPKT2<94}K+OD9eJAE7n4PSH!S zO(oVEn$mIudkLVbj@Z}r;$sv+hXJb&2@O$P(jl!r#W*oa34`*n>#cMsb1gnp5qUGM z)-NbpMOg#kMfJCzmXwiKrs%0rgM^TZw;bJ6u(cz6d|rLPMKYs|hY`rfCe zh-M)?Vni!+7M3xlblq*5U~EjmKC5N{bYQf>kVKrRDa0hv4TINp4`nlXOzN^uZ>kV# z7E7x6T%wzrw4Ab=qV^?)VKOR;obFRRO22z`AYvoh`mt%&x6UFoZfueE?Rj?Gw}j!E z=R}hsTY@U65SEHQmJ|+;91nRXt}5%$`nHaN%LRFCX`dzQUqvzLsZmR7ZM#ZpclRcY zCJ+aUnZ0WJL(z>&e93;0CF;7JV*0XDdKb6*lXtzVOZe+MED#*QF3WSN^pP!+4B^Fa zBoc;ecien^1{@$bTwj3g`2M&xQabX?$$PK^DkvzaZxI!9ZISaSh)lY*bmGW6&q}^>~=ySiBxuxFEd#{5N%~*Qln# zXnX(Ra2ccN@m4D`UDCL-rkR`9j{US;{+Fpvlfn0I1nS(6JxSsHS zkE|L=5>`-Ec#dN9pzVt!Ipd%iD#o26c2aW#3fR@7W8HIgyh55g-UnvQorPK^u)_J} z^?3K{CCp%PalPm(FgA_8NI!uI76A!~5<~_(-?u*J0%!6ou+f7`m+9?~qX8QeGSJ3= zWc6+^0_`Q{<^GH*@O(F2PHO^zBD4?i-o5zHF|n#KkdN1j}Tq5Zqx zz6#Fax0QQ!+;oFZqG91@^?C31BBIp}Ot-+mZSQ`}NX+Z?!y9bKpluEVs6sxM;Pv{A z>KM=MF*tr(@vBP~S5RPiWj0fYc--=UZpS#jzgPmB*>cJT^$?M9*L;80831_UASM&H zGg#%O#x>oeV~`7gwJ?9t@r?ksnq`u-)Sou!4Y$S)e+W8`ML1wPh| z-vq2-mQ>k`mCj56WyjssA(9z6<6``0s3hYQUe7z=nhFk+>5pYO3%-!yT-9m9wD>5g~G`V54%Q1iLcap1R zXxq;=%6A*EzQOJOeRsyN>J~Hlymql|Ceo$4o~2l9XnP{Z zMveb3pI+z=ySDBj0`7=Fy$(^nbmFw_Mj&Gate=$EIU1^L1d^@-X|`u^Rfr?J$^`(TQXxuRr*$Z5J2*r^s`b!eo#P5!d@9!hUU z;3CRh_F=ye{h&V23eWx|$mvAIoXruLMm)l#Wq%0madRSX?$NQDYmY8c>@S)VAolGX zrEwrJNN{X7n1BaLAXYq`2QQCs%N$(3;uO(8N>V7KD56=6l%Z|e?>IZl@*b1I?YakD z70F_cgYltek8|o@P}I*LaP@e!*W3gp1I_;w+P>JbOMYeel^Zl>bDR5BY*4_rD;yur zuWinzrKm<;)pJoVK#G!Uio4L4d2%sTbr<1i^}Ap>|2N}$8cA2GnihWn?2kkDxa7|R zF{)BI(|!7V?E;&JT>Mwte~me7%vUW|*a%-IeL)b>bUek?S^5Ll@rrf#$D$mEtWplR{NRv*v7? z&*bb>gj+<@$)N-YWHFzL9Hv4>FxH4_E+Ie?(=N*0Jd{^SUEkJ)5XQHM0c)4T=))Y|KTx1$Klnn7$`#rf zqG*>xCwZy`$7>@rNBfVU;t^WDSmkH_Z`)jA2jXj=OFB6_eett}mf|H7?C3+$YHxf9tkcyR23% z*v*mv(*clg78aTTbZ-hSZzdRw1-W)Diy`X5uv7K%ajm|?N1Fem3OAiEgBny<*`gTybZC4MdQHw@QL z{n?_@F_&<%ZxrRxkt*vFFvNOGHhX6%Pd4S5Tih%D~@Znd; zR$-?uTvFQ);Q+gtcz9+=D)ZL1;lN;TnrVjtW1C5}ImMdwLW{FD<095@EEV~_(FGhd z93Q1y?rU`>%6%g$b>ZSHWvzsQjt(+c&M4Z@;Mnlu8Bo=?<0LL945bZWw-g zL2ZQY{)3I`<`GYDoh24841kMFY3C{=XnZtyS&x6ZekqSt2s>*4_}dB)ph~DNFk?UD zP7uh2%Ouf??_9X0IdjPbVTm{;(zE`K68wyjC`XwiZj&H>khxIMXvgqAL;}1hNlHQr zqCV?AFdgHZB0c$K%dQgr>t8Fbe(Tw+$zIWm17F>APBocKa))7!9C);bD*BBsCU#SeH+$Pb=i>*2S@@sOF4W@lkdn;E+WP^%tCtsfv%R zsa`7mOXA8->d3JH9|jBHptC66P*lhS3D|V)I<7jJ;|7d|DS3TPs&#IrR)1G{td|o> z-1U4R(Q*A0vX#i&7weJ2R8vgbri%A(7ZYE2EJRUFQGuMUP^ou7K%gs2GJsekcs(J+xji8>{ONpQ5d6N#|LQAI zCMr>uXem+j;>Ly6n6(gyr`_Q}?@heiQBXuss}1$jH{>ab9boBQ6@^9pT-YmZ$}*PD z9^$%V`{ys5kmUz?=sSDs5$=)U6frZ1j9Gt3(OWKr z7gG?S0V^MnMRxWh{GH`p(9L5F%)K;^oW-}fdb)Y<4*~*4pV25yj=eS$in674MW6g= z6)c9tN1m&a!&1K(a(V>#Y%4Q$YRbD{`UR5}1m}bnhKkScz{{h{DNR)>O|f0PC(Woi zZ1^2a5lc()=7<9pBcOu}gH?dIu!^}3UK}9WehY6(wtcA39J3Ni5tdRM<#wL>)qQrH z>@mTK-3Z5{IkZ+E{-Hyzjg=gnAJFa}88v-wm&Gus`l)AeIMVq=4J;_4()l^PFpc-W z;D63i3WED=E$Dh}t)*5UT6K$LcF|F(Y|R?teqmEPKilGrmGX^%HgvDTi3qI^ag1{U4|w?flZ8FrXdAX`t>u&|7|?%kqN0*~hO`B5cWZlN+$x1n;k zJfA5KMOPRIV0-@@!mCFw#bnS;|J4-uXXDX(-@v##o3{rpS6 zr)AAxaJj*xSWMgNZyir&xT5vU+ijJI8G{Jq-mAApdmBu-?CA;G>4cs2il%^mEcKP# zrgpIFy?H|xIz`pBs0>EORb2Z7C`I1FLUcSlF#w+E8#ShW0zhHA*@toFz-aKEIoD-g zp6K(tENvR7ST+N#2k7548DdjJKA{>YdPmXXeZE4r>)45W(^#LJ9si)B?2bidO*8Z_ z)rTR`t6+K`^WYTpMTjZ0?zgRtsk{{t3;36>>24%Zcu=UUdG(gJKeAb@Z?r$JP0L3I zBCK4cY~{CH%`(5W?!R}aPzc7ChH1+pKq#>_YORNX8dK}fW#Lg1NUH>X9GJ$bP!2w{ z{BgAI(WnDn|C5DQqNT{ceeTYyJ7cidUU8vnD3W?)SE-E@3_6m_Ihi3lOGtZNy65cg znWK|qI{O!@gU*rguvk238^)sTXEsFFy-v*5vzo2v$udTt&s`oK!xPl2&4(8n0;r93^M|XV5ZfqOd<7tX0a>_ir4ad35q+BoZkBAo- zKAgFFMEHE>0&3sgCCHFu$#B=Oyx%NQQ{SuO$KYw$P;Gs?o!i^DTs24UR4)&vrksL# zkCZ5)&`$H-wBt8i2IU5|b9U^+8K%| z{NN6FGG{-C>~K}WrFT{>X1(?*_{ooh3x|>yOyB>4cPkC6>xA1)I(KdL!ooWyD@kAV z1Ug{YS2R2GYD1_TrBn5!czOc^!{ntn2#9#hUfuN}*vHn!)Vj3J>^Usih4}4N;#;$$ z29XqX`wbgR2)7^c+nGVjRrj5(?tKM(|M02q?~j2J>EX`ZD#Kb0yID(i5@%HeGaSX* zj9H5rk*_@dYqfbg`@%V`e7>DQWIK*V4^{YseFL^!-Z7u&|i9?o=e?4>5NBdWcXSyEX?C zHV!p&vY$YwK;p*__lO@inr23JlO|uc*8H{8Y7(D6AeFq1#)C2VfgtEg(qLt))dvNp!P-suAVZ!EfK}3efcj=grTQU?m%;IuOhE7VZc^%nt^Ot=9(2Vn{chy3E^GV3nsiIhVqreb zZ*O@}uJcS=$y5K8$DZxRxNw#@a$$~o*M-{<Qv`fhx7E>eNfm^Lc86%^X3sxhbxb4uBG$Hy6p6d_ zJe{J^%l!32cSuX_;`PNs)e%?9I9ltEDQByXe+!Ku+m&_;ya!irMyR!88883+Z)35l z-SYh84(u1Za?)K@c z-a{rMVF1aU&oyrKPsK0@x z8{}o82X(f;_+UXZ-vCO<;ZkB7r)+QksnPjx9fbUV?-v9xb2$jM1hqD)Bt~jrDD?A# z0-y#UW)RjC1L8OV-vSAOGlE}dtD7dBXLeNOv7L_=`^88-y8wpaKE}hwJ^?8;z`fQ{ zVLS-#H|P8JNu^a7A~ALB47OSzBL|S^?;)9u%W6Rp0*GP!oSwvwKXG*EXIk~4bAnLd z1XefQNfQRlqy7DZ2{>V3eB*6QAF1DEj}r6r6QMo$KXadP)1VTMpRu`zRBJlhZCi3O zadW;^XMAf2a+P9TNY9t?sE-B5 z7EmhBpVvoPd2U<9$hC;aT^A zag~(WS05%z@xVV7<+0W<;IN&zeqoRVgU6_)2c#6hY*OZV@BC7m#AVQU@rbj?4RWWB8I4`hvq4b(;Es;z70<7>d+Bfbh1DfFW;>q)VBZ znT4!u07oJ*pH~`)4PBl^LMR~DR}%~G1u^8zACdzpci+X2*_OtWxLmt_N_-N0YI!tz zsPNk%pBXvTvKT@b@#0HeB=L?thcF7xQ@iCc;utR+6U{b$=X&fxfm|WxB1T0P+oq(t z5dRWbQd_sck+uI-NC%V=Yqzy6zohPQJ=h&yqb+kJo01YrIqUGEHQ(@(EPSTsn)$kS zi{$aR@y08Y2gREYnyHy3&bX-dU%8Xwr^<7)i5&8mH@O!n!XK+-iKRVj4~I3<8OpsL zKAdgXCsTZSd>^ql-Ld9aao>grs)r+|6Od>pOikyvde3WdO;1Cfw4oi|t?FIRCJfZs z657kDPn73;?g=s>!?$`pP}s`G=aHUO(q=B6ImQNZ~LBYLj(_?;7asU&$6zFcC&7odWHo2c4&R;T#fRgX! zb{x!A-mW}9iGBTw3_9dl{Nr9xDd3puBbj`oP2bO70q1oX6V3P_Hc&Sm&h3s4ae^^X?oftQAK(fzpjV5K!P)w`ygb_QAoPe9~Wid_LnAq)2jAF#iZ`7%DNy!Tz&Ax@~Ri{0A zp~6-h3|=%V&qNvl)UsqvLr*_=?(V!Tl9rd&2r3Co?xO}ZWjlj&mO3qo*>Oi%7SEc4 zO0`liiVrPEDmZPs8A&kWd3)cG#2w?eNy#pD=dUoD?3p^$yStJ`8Iy-l?0dN;p)6c~ zTs?x!))|ui{W%TkHQv8j&5ZigI3X9}IiK1+YaxmjowxffLsD zFF}`Dq(lZH1n!eIXnf=!Z!$qO_c4vnI|ImiK#V?kFxJ7W1I%mbRc7N*K7i-wGvgQN zw(swcChd~x=H2?na24CpFFIN<8O-5vXJnT$@wUW!Kv zG-9Lqzdk*#99KGz+hfKK*o*@cMsSX;y6pl;cVl;8OxNVJsIO|Qv5^3`5n4=kqTxIA zt2@VipAS-CXbhOLhAiHGov*eGZ_SLcaz|w;aKXE1_{YNw1^uuySwrAQ<~nffq)6dM z7Crf!04b@IhJ`+e zSK_j=y#@f1BCM|ihDr>?IwO?G6&{D0c!Y!lz%j+)^}r5R3ZyTwx;D+1iK>_p?8MF= zU`=E>g#{*y;o2z?y18~#1oT=l1*PCGn77VXnusScMN?5{V5$Lel#lPQ?G=G}9U3b+I7pJ@u2?rW z;J*(Q+`dKrH=4+(rza5r2W!i_v2HvbB%2}KX*Pz1@jH+l4H1=$b}UozJ%k7CND4yr zDu+Vw`-jV2-l;NA+6`=bDHa7$` zl%CzOJ9VwERO{3^Sp{?~-Zu%j5&M{USnX?A?}0E<#+o;~-FM0jcKSaN!5C1HWw@?~ z7##oAs18liaSJic^h{Lwt6|qm;-Xc1-YAw!-K?tuBakJZEBX>70phe{)6=D0UAsLW zq%~c#oD@_apoI{S5y{DDv7fWZ04N?O3J)y#MS(VO67D#8t&=b7N`;c?`c_OZb#UNu zeK={h-i{S07=HmNG=Smgz|;zSoc}x90Na83H9m~*0Yr!5Y7C>L^_e{9DAjiOZV(>T z?kG?dA44|@e#MU-WnGprDo=ie}DWG*B0HTkZ^wgVEk}1S4;gg zymQ>k;BT{Wm--xPTJ1Z<5x^!4C^P6X*)#hwRQ-k`M%>IP z(6T&XUQ(Y>GCYtCAEx4N3nGZ(?x)z2qu$c2cfB`vX{=XTY1|?9A2y+6VnPGM;I2~_ zYk`oh+HUOYKv5k=VQ~1;QQ}Crml0HiW-Y%mHsh}ZzG@^eL%_CUW###kOMEI2S%Poh5420K)LOlGz))QE&EXc|UJ?W|jAG7!ba=1(LpF^X z%Uv9c>_u_Rnl+a!xFC>nZ~$Nkq%Pf%|f~i2HdrwQ6T<`xBqr_nnN%A9ttaO`ojZsm}#E5MFK=hM=MuPoOd& z-;Okkou0FdHOZ$JB|_e+A^7oIISKXCrBV)?oa zrD8+(_(MTG(G1j4RE7!13e}-sMovIJZIqHueR_qThk3tq-ei7A{Zha8QU3AX{%&IQBPo}_^xdWK<-X>c zTYQ4gDjA$Cac8u9FOY^Hud)^~a(@n%)$#T_m2DE}ZAY8f3q?1SfN`IIp#JoIxpx#aN!WJs*!Aiw2K z1_BPCJnp89;_ir{6nmM=U%4#W1<_mtrUL&i3s}E>v6>g==YLggF|!Spe{5j=a7nxY zf%Jlxa~FjzyX`aVO^%CNz1#v6qAyfnPZq^{7YsbAu>bLP5Wxxp+~N6wRsH37fdBD! zu*iGsb)ye9(rrM7G?XRa9~>EZwO37t=ND|%X6s0#LP^3Ca1@m=dxv%|Ij*nGg#~hY z02+=to2vcn`KVkMioPc(1U6vFEV@Hvhe5EyS4V+zp%R`pWc{CNQ4f1(X^tpMywdj* z)t(YZtY(`|3~?W8V&WYLkoP8Ve1eYO3U<0x&)z}ELGbBEx0S`W^5_Vt$g9JUBbxqd z;YqX4C*u}T6F`0oG!Mv!4p{e5Y3qEWGFJzhW?FoanWj&qNJ%zXVo6_w#RBX(l^3v+ zlE;GojPmhoeT8`inEN^SbF9@;E5ZH5$x!hB;sEzoP@RspE_F(iXjFW==LJz|JF}wu zOmRo}{J!08!v|}2A2GgqKE3vn{P_N8W8j6ti$)MCuisYyL-q@YpAtw@u7!e2#AR9?Ysr` z^vJ-%@BL|`(icfrnCWc8)BBZseB9^Y+>K${82K6A6G8-_bs}xaJdjSUFI#6b5Q`$a zF(;aZ@tyscE1u4pw3yEIQmu{tg{u10gja8MfDX5~#q<0y6oi+X<^-kBH ztRK>zCCn6}0^VJQrrXGsjv((%)vMh;y2mpreRVZsj_X0KyMp)B!g&GnlI_cX@kV|l z2169bpYO0-`#muy3#nrsZ8~FYD7K1hXWWqpD(X9nLpS>xEuO+6GKon-HaPjx zjdjxfk0hr$M+l_AqsOa%BL8i6!KG*XH?*J*>Rq5in^bn$BM}?L-IXsbE|O_W+V^1` zF<&q||EtHkDh~U_qu`TwE;j;sq)d-{Dkw+dE`+i)pt!)c^ZqD3CghqyFuE=&Utq zAR(@AlPL{GFPeLvNiaouu9#kUsq}J2vr&nLr!rm)G3M7H1gkmA`G-LE63opJF(}x}VeGysirVexw_^98$4_W$M9W*$fW_MQP0Qq@(fIuvj^)u6#arHJ(6M zzctx&YEg<}7%yhxIbTWJWW*!)KkYIM**1Vzyp@mdTfxLiUxKrgvN393niZS~FW1UR@7KRz_(&(ZD_IqK_yY6351>UEmM?ikhQVIYQ}F+U-@z`&sPRznYN z@g#$IKZG1GXfl)V3d-%P==>2A;c#H|ujNhm*MT5WdN!+NHo=bxPK)OxJ`14-QoIu$ z&K^MWf0f~52*T60!1!0Z_(s{`ZE)z;$c_dvtaB*9xRm{${Aj-+y3y%1&siUaoeT;J z%4V*rgr$FFn&PNfvHCTVBKEZG`OAwd^-h-8tvm8)r4A#T&58OElK1lceGwVZo2V3w zMbO7Sts+9@k7PhDqgqPi-6lT+icHlwUqfXfQJ@8#@iPY~>hZbR#L>+%W<#>Cxy7xo zL=L{tI~M_o-j7aeF*{DVv^T)zn6axsYAk$?ji|+Zw>C8LTmSC+nSzW1IUSrttTw?k zj8y=v)_M*Di5qk)91JslFqa#YVvzG{pjnx{9JCII>oz=y(`bk2rH=Q^NZf|nL z4+`{+O77AD_EEUbzW>-WQ({Xp;D;+o%um)L?npsz9aQ}2tCzCOBEy4ZiYwW9fKdd%i3P=(tD{}!}!>6OPh zBT6^op|3YneP|`qBpO0)hL8d>d8ES<2H81w?Ht`mVn2{eifBt3AM?|ltXw!$6|E#^ zZP1jb^Fqtxpq0_=T~4NWkk)g##9VF2PPVvnd!Z1<->3`Z=T0ZfZ(6SO-)7=s@|`kn zM*pK;J$>g#OD0M2qA%EI#*bi656!pQM|Mj?O=2#vj%x>BMs&P}fnwL_f|CcRDnz~c zkVT;Z*r#gLl4PaIcf`Sgdo9PqrWgZL-Z_;Sk8!WinMoq8^H^EH)#Va?PG{*dcRpdufPeTNDJ0YD(aH*6lQ6~@4g zYsZ=&`bH?574o)Qk}>QxKRPuKYy=5Zz6F|?g2F+y6Q{H@`5jFhV}keGq31%q=zI|R zj+qZ)R&%(f3#e~(EkziPD5Z()22;*=Mt)Nq%|n+{k0QqJ5(QJ7HrCXe{+|}$dPQuy zXV|D%P2zCL9noCztdNp}*=IJUljDmMp=oQX&_x+}u$yP#zFeW3&iZn+5n}rOVh$Mv zkhF*b!AGaDKzthIqS&roV=$zeYXb<#q|W%IPCYdx%xYo(mBKk8%5gCNt*b6du98zbG;X?vloM zdnOr`^quLsN{98X%G!AntblEOY_wLZKdmGv(t$>l8SSdH8B_cSGy3BTgKYhDi%2>+ zgCs-3%*sjO5*LOI_={m+1YoO1pc&6KCm$9IWsZNwJKXCkd;F90T1@q*+CRdCm+$y& z0`((4Zbv4Q%y!Lk=$hvTnM8&%D-L<3F;Y%sI)A3~TjOC;+v_dFkO84|cp3-&Zpn%- zmYeH8A_A^=bk-pk^76tcg!}_THthGqE^JEp+-PL-!X4G)lIYP?up%+?*wtlL{(}jd z7E4>%WmX&C7IHw}h~18e7M^+VQ=|OP>HaEkos2?Ka4pTB7H0$$A*S^`JbSnh0@2=s zW;fWN#pg?DLwol3I+RRfzyjjGKsM)GdM~d{$HT9a6MVC~Z zcfxvhCQo${IG9KEMr7U<<62%C9k$@Clya1-W@^Jd*(MR5u{mX1yi9(-TZOm!k zPG-jB2)irfG?dh=$&&rRI3Mb4jw@*RaT30eZ>I`^ndVxj_P(5P$CMioA zwc7nc!vv%;U<+`;$LW5($Tr4+oS<5?_f?-1qYB}VzZfOyVo;L}UXQx2!b#V80i0pr zXfELe``v{g+Xm5@x32%?)$5yD8`U*?l#k}X*yy@Rf|VYJH>1ohP)g_Qs=F@!*=$3Nk(sdRo4;+s?c8z z@N83WBGcc=@2 zvAHaWIpT}j8~n-=x@8DrUM;F4z+tSLU`~h3O9v~^HVt{6<2t^fEj&WwQ>@8Xg+go= zk9kLeofm8%BqFa=tmbN^Ca3FNic@|qS)PmC{o@~w96yZk&kI!Ygm~$iK1$nZebj z0g2}i>cDh_+HVgpgWvH+DSZM-+3%hgIq!m|ara$eBL6q55@QMjtNi2XFL5AJU{>`$!i+=L3nu$kLgUJ@+?o52F;DNHg zAlqpaAGK?IsAaFDU@Nb1jSV=-+&^4G5p|&ioL-gFBfPO(k?_EWn;Gqi1T!_BL>?eu ztAOBmES)vVKjw6B-0G*4toz3cwMEZ>sTp5$;+?DW5ryFZ8;#ND9AS1d+tGCKLdofC zzP06=<__oIJ7%$^b;LaAWEOk1S^LV%wOLmROI=wXXtePQa|z$bpe*lO3s{WdfAdBK zZRuA+a$XY@MyhIPAP!QOsg$WV_B&-CiJ8W=IWZ>wB7ulZiDwTA(K0Aa>JUz$64CNG z+B;L$Zi{Cg@_XD##z;rmV#e!%xQ58JRsTspfzWi=o5!3)YpZt8rN3RRcgVl^^T=UIIoJ&)K&<^k7ooUa9tI=e{N5(d0WJl@zy0U_Kty#Z4u{M`Yhel3@UtH8k zi;`%LkZtep<~OX_3H^Q=LYeCZ))A2+cNd;Lo)4&89?P9I!^7h6f|qbg)m5LgZo|aO zHU7BtGSp3%P+HtE{nGMg!1$}7GB;9ydKlcg>S1p(WN_S@`EPyeW8d}}Ya+FB-bl57 ze>zK4N1*qr%^b1M!G&k|+b4ty54QoIH-&t+9ND&J>WM=Aw*zS_Q&uKh@d!djMpS?i zckepJCM875$G)3I|3+^PJ3$p9;|y;K?Z3#FF+3LpL1?W9Sq6-ZsFic!bC$fDP*B0U z^VAQUE$4^VW{+!)%3iC{!zO!69+bCXxRu^df@#mi6u&JXLh~XSOFs)7IOXarVdr(} z#U&*4LB{H)>2|1trmZlrpY`|mgH&Zeu7P7D8Z?#dzd(UlDo~f}kAJV&H!zR`j>7|S z&){G|5bh2F(fr!whGFbJPHEXY`M1SxRl#TM&HEpkk|zIt&lRA84VyYF3TQO|E@~eV z-*gKoU@HWzNIvCIZ$6hN`%z1U98Tp9IE&U;i>!C!#eCc%y7GD;kUv~_8>=Tzyt(*px{H}hULwNc1m1-1jm8(8|8qq z81RTHDk%x;>yv}SfS01P{S2I4th|F5j#7|4~H&RqVYZXJ-0z_w-=_{XPD< zlIxS-IW2l?RZm<#3zUcW>DX-XpCD8?dOJCrzUuA)%fiC~A=LAUEng(ZWuEoNP*h>r zA9CT4WfOl||B)QL$JXSQ3kc;jd+`Sk2c^vQ)wb9|DA~c4I3WI zIAu>#TjRffKQ{UY|Ba6I-QP$QvKvYI%@pr_#FAPPr_ntGMi29A?~_(fKruTw@KDgko5Q`palcwJ?6C`ANoIj zz?h{L26HPmA-gOS{2-f!CF0>P7?*w05nlktUG%@e zj~YWt7HZ~;J>uwizq92OaWIpa`~nFIsM@@F7!^Au6V=Ds^*GvCPu?$@axdx%opxz= zEo*3d&y=lc#`x6i8mBeG8`NVuU!pn{O3R+1A5f)nJD`K7m=Tqf_5M71!a}(cnJhhs zwNp;M?_S;nd7>}%Ia36}en{y_q~XANRHE3gEm8T)3hDepk8ev>wEbrC(*LFC7-J50 zd*UeHf9~R>(jy-^m^b?rc4siQ@2yDDThZP#!*(V}Fvr8X#(@hXscv2}vDloPSpYnt z)c#m^gz;_)_Nh^oX>|V*_djh7mB<+8h%a~muFki zdZmn-#>Q}0CfPuAvHYgiWv#z@fqw^I(b?HGq=vx z*g2JVBp@oST~(RuuHi2K16mGkHU8`GE-dt;7iK%B>X$MHtQ4M|P?f(x&30EJ!ubUl z0_=}flyG&L$8f@)ANLZ!7iX2v)$9x!B>uKqjPZ@%Q{L5FkX_fBqxcRtghu!8;mRF7|h)VUdy zJ`Rmm=gl8AJno6nEH%LjZqfXx>DZPe${5^X$e}q5-|x?!i`G8rj&Fw%=gVUwnoHq!_E~l+Nth?7gc7Xj} zuYZ7sG5Ywb_OAPd*7`3Qjec|f*zH@cf%lZt$GRLuH`nA9ZGJ>;Lw$PHU2?qv&st4W zlWy8Z{4uUEz{>xH)7%lQ<#Twqk~f$C@C5yK$|PA*|BGL~PB9pA zBAN7&yTsSTO#k@yVqz#GHO%A281-2Q@?M5P_ zJLyALhGr3sU=r)sFDqCM7zY|1e((!3{zBAzr2o9HK*bQ9pmCaOpL60tN$OHNSG*A& zBiN+=u1FILgy51V2!8d!oiMK8Q7;u1O#jWH^m&R-E^?3qxfqhavSZOh9f(f-q?nWw zJ@}HNt2Z-I&kdd~GVJYgG*G)%#F|3p@Gto^Xn#5|ee)lqem%i%8K2f#$-B=Ps^7hU zn~=)Q*l>X$h4)QjnL!dSy`7&#x?<3A?r$m$2Q|UH+TG%zqp6#V9ry!w)NS^=%o3H~ zaB)66Eh(RMlcEsdg+N&}kfmZ{`r8Gv^BWIQgrnui1asvdaQ`Tdho}V;aiNr96wec7 zJg;psVj{O*_|aWFP_nF~k>DzIE;&kSYjJnoVNP6=Yc;8;;~lJtkqtO9_@Akxrm}I| zw3-q9A?7Apu%dm5m+^FmR-B6?^2OKXJM;GJltRj5#(Ko@>A>G1kQCS5Z|8?Gon&wXS`~o zaL6G)I#ru>ytE_2Kdp9?qFwp@m$ag`7-~wrBbVb3!&_V(G`wr(Z_5chRXeXRF9+ zw6ubdMZ7;P^UNn2pLaC8XE+W+s%Fua5rQ@c+97XW3_WlIgWyP(#j=oYUP{!Th}y+eCe3bLzT7RNaC+U0f62M2UGxIwVSWo6jPPwgi||H=llo}S zpqTy+NFyKps9#yybhrQh7MKzO$foQqPyH*-<_48OmnQ~4nCLVN$=Zg3UG7i~4Vu(< zf3YN#B{27Kq9>yuQzgC(nbUNN@9gaUn{snClAhtaMtDSziK0{1p5Jh;AKMiIc@=uj zR_Xkt{JH%_4Y+g-+$W8%Iy94zmYGp3(I8Xy9sEqEyM}%BQf2*LrC$FF^S0`G@lqQR#t}XiK~o*_y=VK&tj7td3PG4 zqM`z+B0mG+#F14Ph{K#0Wie)@zas?EV$F22TsgMB5yP_FH8}aV+EuUq1Tyg>#%7zK zNl2SGuBFsj{I2c{STELJWua>L6<(q9RvgS}e$w%=G?OK0w{Yp!&zNnWci%|$uDc2| zv9k|uo`tYHr?5d?+l;!UfN7-wtI2iV$>xi=^=Ed)lRI^U?tCHlkN`H%Cu|SuZ)28z z59G&3DJGZN-e&|z!HT03bT&lk)*Mpf!%P+}Aus;9!BG`o`7G%Qks! z5pXDGSXq()9a37%_Ml=yZ68wl*?NDAI}47I3Vt||Y0{m4S%O1NWiL-s3Nu@u;_G5# z{>c$&J8qsV_A%-D2kLV)B$%~;{SH}(p&QuVvhEOqB>_`3@LjHc)PD~L%i%BuSA)7t zOo9+Y9sJLRfu-Eohk>r%*;V2SnYp@6@CZ zi*2m=q{helE{CGzj}%m0Cf%}4IpsKsSQ$`(@eh)xS#sd@-V=AgAYC`CPhFvm9hz*| zJTB?+KbDP+0btM8TEDA3LJv-Qr*?|bh2=o-ySw_`LY>HCt6BXzskKVcE=AIY6FWNlr!y}arhI}yH z6MpD=Lg#CC0;fHswI<7fyzMGxRG^^Xa~h*bKzKj(91IY|7)Wu zfVK>Y7xbu=@#og=B(Cku&12d;f0KOShM}}?GWWZ7aKO&WlMzvGpz(4n!i653UELjPKiagpXk5Ew^LY&g^i}?^ ziiAeP^`!pzP&5T;=u1>r?xAj1Mx3VbClL6SLzuA7ao}=Je@pB`l??gm-NNOBu$9t% z;B0hS0b-C=Q>8EtI>LOHAKFFNxAAEqG$wa~Y{#!CsUeAfwO?0_C*WfFHt%SJBAD&q zdyL4N_R!K4fBYvgM4S+d)wS+sW`c#hOP^qE_KC~9K=sc; z;#m|L)Eu-dYTR`K{@(s%W~KZXXKTR#=>C>D=(rUyb|<9CijLq)AMXsQ&|i$Cd+2rh zT-nwSom`zgT(*kxL1F!#c6Mj1hW2GaQ@B}Ya#2$C);a%j^7=kMcP5E#(oe1jLK5S+ zG>QO&#C?~1>*bE{!QVjcIjN{W$KN=`fg8&2Gl$WCzhTL`Hb(dPScpgs+f@DR?Otfx z7qQ~d(KC}-N-_4f<)*-Q0r4iDnK9WAVxE0?k_MX~0(2UkT2@=PzDc)LF9&qu_G?b7 zb7WrI6*xAc_Yz7%MTX-v#+@(zmPcb$0<@X+?QWuM?wZK`5t6F3HGfqKMoPmaQ^7BG z+=%|qZiY)D<95mbADrqmo|d@FGIe%N0pgt}fyNxfLOg^Q6*3z)!ABEP_E}+BnelCV zC(=y{Yh9V!-RwK}$l)`&GPp2!S{T-gmtMZW`+gd^{**PE`Mg7zi^zw1vs*90g8Y=5 zOpVy;wRJp7v;G!lo&AfNp{MC$ap}*ghZu#!A59m6LPZqsP zsdm`h_Mj1zh6trjf`tK^>$ZcRP|p!sT!e1!+f0o@3a>25jN{Cbgxa> zQI>!Fu@^PFQ@cIZU96q+zWgSF@vC?zKaDJU5Q+4^pV5rEO+mk%x-A~cohFM%Aiyp` zIn$JsuX;0hIGlY$8p`r)_43L~`AX%liTGK%^3u#9N4Ts!1UQ1-Jl^V}VPjF<{%;)& z+|9lj%_#uZ3geEf`F_vTmnNd}mBE@1CuVm}(YL$t-4PLS=KXs^Hp^{7 zFy(0#>!Wkxy&BMbtrGX;vp;emQ|L_f)FrfD_hNUgzkkSiZS)0$ax`fHt@NvQT7A3D zqvi7j;aXB!b~I2(U$-_at($z*#O1|wah~H1QV_5GT-4GFL?W&fWk)%C{MTCA`6THC z7BTLCj#J#wH=Uo-PU3xG_~qYj2L*+1_D8DMo`V{8)JcxoZO z(6=uqDXQL~?*iD$=j!c7z8v4K1veZnM2?*JC`vj~02uap>=iNOcHn&5eZ`u6e+fs$ z!IB2OgvUIEb`o#xhQzhD{2ZzCicSDUJ{bGqzFCz~fDZJClYh*_W+ik&e-pcxs#GogD~|1Be*q&ush-4>;&_bS zP**KT4e)k3^V&y2Mzw)63%dY^*l^T*zT&nD4WEFUO_w0_KH7C&+wur|?nvnq8sezXUOQfq$wMJIq!Y!pAb=Ov> z11yy1z<1qVn%4$@2Eo?xE=AtSx`HmZy*Mx;&(iD#UJrkPWk#xCHO}CPKBZr_&@Urh zT?jPQ(C-k7zgkb_dNs!4p2Ch6FiZI2(yNT5LVbPw+&gcuk3TKNdl|U+h+a7ohgotb zJ`d=4-e`A*N!3Uz1d$t1A94IV->lw{ae96h3wQtUKT)?+u1rN&)q<#GR9lgWx zErvcXQm$n5Ai@*uvS2xICp|K|2_FJtf;BQp^{)TAqGP$fs%%wJZ!HBs(qCpI!FTBzZHdv@f} znDW8>2q@Ufqj!Dy@ALtDr7l;N2KTdSYzh2nnF{LkW37V=fH>X`xtK*|S(#b4q}>eC zUPjMz#ij|Hi2)V>7w2Sx>&X3SV!-NvdLAk9-qeQI(4+5txD+Bk-Q7xf-rr4;pVlGh zGavN03N_W{V$+YT<4ZPGQ2_&Sm`{vKgO`Xfj8RgqK4cF(F1>Mo)I}Wy^f@E!P=&0u zzP>S<8x_i9>9yqNI#`(^3hSwF7Vp3I7tq=F#H5!Hi4T~Vh{G^gsP#hw|8TRNt9Q9| zk*O5SV5X+~wj49*s-iy=Ci?tLl+o;DR25snXa?(yPY@bUE;U4XihSzjGxV{Vb#yo? zrktcAt+WcTjQ_~JTHdkVC>lOwUT7~=76%O$?9hVwqrw$G79gmwb0hI@v99sgHG+Wv z^<<-1Qa#b=+Y74FKoEAzt!Pa;*Hf3MVR@cky{zB`+ORx_#H?BT=iCg+v1;Fzjl z+$g!HP1LQ%RPldA0`{ESgE40<@$Yr-2W7EM7!r|$4%gBpD{&zNefBHeZ*aNbuC>>&Su)COGULuHoojjK`i4bJs#L9TU+3#<(+}WI zh7*fw{Ra0Ec`_)4l$g(EHQiU_MmieP_WyDL$Zl{wC!!w`a_VysCCD-hCz-zU@ z0UTgP1YNAlo-g#w2Xb#C;(AZ6@(`tITxu+YuuxPralW)W4LSZM;Bg*#GxX8vlN3sD z?hXwYI8-A-o_$e-vmLyy5rdR>Yd~er!1m|QlL;hC423`o$dOf9g=b#0e z0vOBfq8bIbUEJ1nl3_P{+A?qY$)M6!w2p)&a28J(^D0C@qZ=^q+(gW#<6i z7>eOvy>Wu*Kkac^G#sT^pglG`u`to$eAKz@ ziHPiPaKI?;mUbfstoQsm1zBcyv+wN)GHOJ^=a^w}WaD*S{-^&UUbqj-Pu|=NnbLgp707ZXe02=1%dS99hni>Dgw>dF6 z17|g5%#5MY8Ge<5FJrGoH%#J6RmfjPs2&vAhB4C{_qZ5gsoCsP4c7xUeW|`!xZT^_ z6Q`_PgJia#c~j1~cU6#S8@Y&eK^-#U{ZhBek5rJfFp(*fLhv2q! zzIj3XVu@RCvu;Edi7Y2C=ip0oB=ng0z4@5G^w^Di9!AaFAt->|iEsbz{b+ zMUt$fdJbCs(|RC}zG6D+VsZNMBhb*)t@j5j?mTih?W->l>u(|~&rIB50ps(a+d%aN zl`aO&a1x(Z7!I)LXQok;hW7`}aF5?0FpvO5ZZVK`X1xm=@Ds#x&<209Fz!X6FyK}E zmC!R!@&{mr;QL(@?FBqBA&Qq!G0CJF#cz?CP|VrTu3OPb-rqca$d&yIM{jc-RwJ)2 zP7*IzZAV^kPQhU*hw_VVOa>Ndu%^#){uvWWkb&ca?G=3V9b`muj z-=z}d22SI~sM6~rx%NX$827F#_9~^Jrg@gG6U6r(2XdzV6p$f*^(#$cF11^B5lTGb z(LdkhlnK4fS$o*6X}x^rO<7lxdlDlRaV$gDMnAyXD)v5%TBEJdhidLve;`2 zQbW)l5`AW=8vdC#bzdVrXBAj4H3-Pjk7F8?ii0_m}^wp7gNY^WGC-zw5H6?aibsy?XC)Bn9LE%wMgB zLp`sQX!IL6 zw}=*otq=QY4{5_do2}C;+p}=`1xQm%NU%%*31wycb1f=&t^neNLCUf=Lu>!=7s78T=m z|Fqg+jRP0QAcKlcv0mT!H&=)7Ah!{@=$R=+;vAip_`pK786yq(OGgF|tjy%Jw|+0! zOJ3;N#Y!`tFNp>G;nNTF)A&5pq?`5h64B6TV-(*zG?F~Pb(L$XPrxoq;cV5OH8iv`0J{4bPjuO_ALFnh+%NU zZ_8a#LC50TE$*-JOVlMqjNk}4YLD2ht1fuHSugocsZZQId&$VRaT9#X<^kBJYNQb00EFWjL{-k}Ivi$fION z^)FVLuIC+A{8H@1A?^AFE;>T*A(@?mP0j1%!+~V-o+CseZDvrN?!|%W*pB$o^puF% zp>qirL2x!Sn7dvhOb z)04oM%mOx%6P<8mTQjRhX5C()%%#6I`lm($Sel3z9B7F=ao>|qYUFTwwh*+h?1m1%LC(mf^*{GS_Hf3) zGjRhu2#218x(E_l0MPYyK=I{A^QxjlydwfC>ijwM!sdIQNE-agA~tjqb>y(`e&0iD z)i)u*#h{$cqtFhpVCh(XOM87~RFYPY_5)m?a6M`Xc%fDkVxdg*VfiWL^CIrO8>FM$ ztC`4wWx%n*chJVBwG5d(kqtAeF&ky?dh}zD)~S%5Dbr4E5Vpt)AZ>A0m5?2gzgWbB z`)|mQDy|NuF2B9NgU#3a!Fa5C-t$fRUwI#&+NC)ow(C!*J@3he#%T!WRzxz!(_X^4 zPW;AJL2iTh4{6G22LWx8j^RQk!7;Wt3%>$_o;SS0>2F}r`wHVBxY6n3wkh_9a~e_q}`Q-`A7nZX58$*>D#6xU0vfdlJX zEHT%p1gaB)P`e1zmK59_VU2UT4RefhDE+DAj05WpA@F-M<+MEF{)v`q`^OgFg2 zLxD`x-|1g&5Ds51VD5n2v7gv~`33RO#vvye(aL#6oc<%s6$Cu+<088W z6W7pDt3T13cODnY2cW_8Y23d3`8HxNL}jG4CsqODg|vy1F*;g%iRQPhKsQ?{^itDb zcA3BXZMtO1uvZaHel4LS8f>Zd+eo`pxVxJH5|#RAs{LgHX9hxaD6BS2>~Bv;bAVgg zLSIWJJ|uyR$=s0b`5kvhPj=1J@mC?o;@<9d@ITv>L_DDbXVBF&r6K+?&x;?}{R8jM zFAsAPvxtU@KedA=7AJmBn4nWCe34?Mb!^L8e(cq_Uis?^_<*SdmGj5<-~Fl~y#WdX3lg2%=Y>e*XA$>>&}G$1+6%L z)Cbx4qSAS3&eB@HQTElWQ*xCUqF=M{6Pw#_OHNOAvbP8cc1Lcj+&9#tuVohInV+ec(R>hD!?a_sSu z(p6L#^=9?|I-k{5@f5q+Wfs~Vk{3K%+F&z1pfYNBB(o~8xyIS=X`tHtpO$bPH5j;f zbxvyZCNbc1B;Kh52`27BnQ7wbzt3kgHrQmjD?SYlym!9f zgP-rP;83>ano^5X9kvHo2GyAr5A`juktAm73|DoAt2na@@&QICN|~J1&xw#AL!W?; z_i&1%b7YHhYNtjEZ^gus+>Qto89YgfY4io``;~OAc0+Hvb_U+k*Iwpe_((vonZRe4 zM+N#n$7>gh zdAheQ9(&AQd(k&wf`~MJQm&W%A^LKx^SU(0mTu}S;;|xU0$&XsQim@Sf#%E z9?QZGX^VraM5-ulQ4)7Qz}%c7=^e`hzKw zu};y!6_nF;&B)%I=BTqg8Y&QHes>TH1L~Kdbn^zMemtNb!X;-aTi3!LDcz48Kn%i- zP~$erwStTG_WANr{A9TXsg>WEd6B(1DIFg<2otZC1G1mS=HNs$ zX!arw^R7ePX^jMS~H#N(-SwR=((ErPwprr)@3m=?)XZ`OykOVA%@7Qx@^OdFk zl|7=HlloJ#t_aWN_km@mcl!cc&<+jrOb~b&dBsNFNfdd_C+_mbtU2)Wi#p=}ws)v@ z6;uSMQs#=jZo#+_e><>&7&5$G@BPBfu*fyVH2vfuSx{vL&9;bi%4(b{w4a)NLmrh>#qy0qn zfBhUmSmGa&xRp9ZuJJnqILNu0+;d>()FBhD7i>Ozk5?lbfJ9?j6u@KW{M++>Fp^Mwk==P;`8D@>^e;AKs?uWVg!(o z�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

W%*yfaN!FuBj|rjD5*nrdJ3UAs^$;9;G+sf%G z>v6L9B9}xkWh+MTZI(mCU}vs!ko_%HXZV@+$6Op~l%9pcTBR$B)22 NC`4JhQqm~s{{r?FBy9iy literal 0 HcmV?d00001